aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ABOUT-NLS769
-rw-r--r--AUTHORS118
-rw-r--r--COPYING285
-rw-r--r--ChangeLog10800
-rw-r--r--ChangeLog.jp10781
-rw-r--r--INSTALL141
-rw-r--r--INSTALL.jp141
-rw-r--r--Makefile.am27
-rw-r--r--NEWS935
-rw-r--r--README227
-rw-r--r--README.jp244
-rw-r--r--TODO74
-rw-r--r--TODO.jp75
-rw-r--r--ac/Makefile.am10
-rw-r--r--ac/README6
-rw-r--r--ac/aclocal-include.m412
-rw-r--r--ac/check-type.m427
-rw-r--r--ac/gnupg-check-typedef.m416
-rw-r--r--ac/missing/gdk-pixbuf.m4166
-rw-r--r--ac/missing/gettext.m4487
-rw-r--r--ac/missing/gpgme.m469
-rwxr-xr-xautogen.sh8
-rwxr-xr-xconfig.guess1453
-rwxr-xr-xconfig.rpath548
-rwxr-xr-xconfig.sub1566
-rw-r--r--configure.in359
-rw-r--r--faq/Makefile.am1
-rw-r--r--faq/de/Makefile.am11
-rw-r--r--faq/de/sylpheed-faq-1.html221
-rw-r--r--faq/de/sylpheed-faq-2.html125
-rw-r--r--faq/de/sylpheed-faq-3.html107
-rw-r--r--faq/de/sylpheed-faq.html103
-rw-r--r--faq/en/Makefile.am11
-rw-r--r--faq/en/sylpheed-faq-1.html234
-rw-r--r--faq/en/sylpheed-faq-2.html144
-rw-r--r--faq/en/sylpheed-faq-3.html123
-rw-r--r--faq/en/sylpheed-faq.html103
-rw-r--r--faq/es/Makefile.am11
-rw-r--r--faq/es/sylpheed-faq-1.html241
-rw-r--r--faq/es/sylpheed-faq-2.html125
-rw-r--r--faq/es/sylpheed-faq-3.html124
-rw-r--r--faq/es/sylpheed-faq.html98
-rw-r--r--faq/fr/Makefile.am11
-rw-r--r--faq/fr/sylpheed-faq-1.html269
-rw-r--r--faq/fr/sylpheed-faq-2.html140
-rw-r--r--faq/fr/sylpheed-faq-3.html120
-rw-r--r--faq/fr/sylpheed-faq.html104
-rw-r--r--faq/it/Makefile.am11
-rw-r--r--faq/it/sylpheed-faq-1.html227
-rw-r--r--faq/it/sylpheed-faq-2.html142
-rw-r--r--faq/it/sylpheed-faq-3.html111
-rw-r--r--faq/it/sylpheed-faq.html103
-rwxr-xr-xinstall-sh251
-rw-r--r--intl/ChangeLog4
-rw-r--r--intl/VERSION1
-rw-r--r--intl/bindtextdom.c363
-rwxr-xr-xintl/config.charset608
-rw-r--r--intl/dcgettext.c56
-rw-r--r--intl/dcigettext.c1219
-rw-r--r--intl/dcngettext.c57
-rw-r--r--intl/dgettext.c58
-rw-r--r--intl/dngettext.c59
-rw-r--r--intl/eval-plural.h108
-rw-r--r--intl/explodename.c185
-rw-r--r--intl/finddomain.c192
-rw-r--r--intl/gettext.c63
-rw-r--r--intl/gettextP.h215
-rw-r--r--intl/gmo.h149
-rw-r--r--intl/hash-string.h48
-rw-r--r--intl/intl-compat.c131
-rw-r--r--intl/l10nflist.c421
-rw-r--r--intl/libgnuintl.h.in383
-rw-r--r--intl/loadinfo.h145
-rw-r--r--intl/loadmsgcat.c1420
-rw-r--r--intl/localcharset.c398
-rw-r--r--intl/localcharset.h42
-rw-r--r--intl/locale.alias78
-rw-r--r--intl/localealias.c414
-rw-r--r--intl/localename.c1142
-rw-r--r--intl/log.c98
-rw-r--r--intl/ngettext.c65
-rw-r--r--intl/os2compat.c98
-rw-r--r--intl/os2compat.h46
-rw-r--r--intl/osdep.c24
-rw-r--r--intl/plural-exp.c154
-rw-r--r--intl/plural-exp.h118
-rw-r--r--intl/plural.c1583
-rw-r--r--intl/plural.y381
-rw-r--r--intl/printf-args.c119
-rw-r--r--intl/printf-args.h137
-rw-r--r--intl/printf-parse.c537
-rw-r--r--intl/printf-parse.h75
-rw-r--r--intl/printf.c371
-rw-r--r--intl/ref-add.sin31
-rw-r--r--intl/ref-del.sin26
-rw-r--r--intl/relocatable.c449
-rw-r--r--intl/relocatable.h77
-rw-r--r--intl/textdomain.c141
-rw-r--r--intl/vasnprintf.c887
-rw-r--r--intl/vasnprintf.h61
-rw-r--r--intl/vasnwprintf.h46
-rw-r--r--intl/wprintf-parse.h75
-rw-r--r--intl/xsize.h109
-rw-r--r--ltmain.sh6426
-rw-r--r--manual/Makefile.am1
-rw-r--r--manual/en/Makefile.am28
-rw-r--r--manual/en/sylpheed-1.html109
-rw-r--r--manual/en/sylpheed-10.html43
-rw-r--r--manual/en/sylpheed-11.html46
-rw-r--r--manual/en/sylpheed-12.html161
-rw-r--r--manual/en/sylpheed-13.html39
-rw-r--r--manual/en/sylpheed-14.html47
-rw-r--r--manual/en/sylpheed-15.html68
-rw-r--r--manual/en/sylpheed-16.html109
-rw-r--r--manual/en/sylpheed-17.html127
-rw-r--r--manual/en/sylpheed-18.html48
-rw-r--r--manual/en/sylpheed-19.html88
-rw-r--r--manual/en/sylpheed-2.html103
-rw-r--r--manual/en/sylpheed-20.html54
-rw-r--r--manual/en/sylpheed-3.html43
-rw-r--r--manual/en/sylpheed-4.html147
-rw-r--r--manual/en/sylpheed-5.html37
-rw-r--r--manual/en/sylpheed-6.html133
-rw-r--r--manual/en/sylpheed-7.html120
-rw-r--r--manual/en/sylpheed-8.html48
-rw-r--r--manual/en/sylpheed-9.html33
-rw-r--r--manual/en/sylpheed.html194
-rw-r--r--manual/ja/Makefile.am32
-rw-r--r--manual/ja/sylpheed-1.html55
-rw-r--r--manual/ja/sylpheed-10.html239
-rw-r--r--manual/ja/sylpheed-11.html81
-rw-r--r--manual/ja/sylpheed-12.html115
-rw-r--r--manual/ja/sylpheed-13.html50
-rw-r--r--manual/ja/sylpheed-14.html74
-rw-r--r--manual/ja/sylpheed-15.html298
-rw-r--r--manual/ja/sylpheed-16.html71
-rw-r--r--manual/ja/sylpheed-17.html165
-rw-r--r--manual/ja/sylpheed-18.html353
-rw-r--r--manual/ja/sylpheed-19.html30
-rw-r--r--manual/ja/sylpheed-2.html116
-rw-r--r--manual/ja/sylpheed-20.html106
-rw-r--r--manual/ja/sylpheed-3.html36
-rw-r--r--manual/ja/sylpheed-4.html216
-rw-r--r--manual/ja/sylpheed-5.html60
-rw-r--r--manual/ja/sylpheed-6.html61
-rw-r--r--manual/ja/sylpheed-7.html221
-rw-r--r--manual/ja/sylpheed-8.html236
-rw-r--r--manual/ja/sylpheed-9.html52
-rw-r--r--manual/ja/sylpheed.html212
-rw-r--r--manual/ja/sylpheed.sgml2431
-rwxr-xr-xmissing198
-rwxr-xr-xmkinstalldirs111
-rw-r--r--po/ChangeLog1110
-rw-r--r--po/Makefile.in.in366
-rw-r--r--po/Makevars41
-rw-r--r--po/POTFILES.in89
-rw-r--r--po/Rules-quot47
-rw-r--r--po/bg.po6252
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/cs.po6934
-rw-r--r--po/da.po6681
-rw-r--r--po/de.po6187
-rw-r--r--po/el.po7027
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/es.po6104
-rw-r--r--po/et.po6692
-rw-r--r--po/fr.po6137
-rw-r--r--po/gl.po6463
-rw-r--r--po/hr.po6802
-rw-r--r--po/hu.po6338
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/it.po6123
-rw-r--r--po/ja.po6099
-rw-r--r--po/ko.po6386
-rw-r--r--po/nl.po6470
-rw-r--r--po/pl.po6285
-rw-r--r--po/pt_BR.po7004
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ro.po7271
-rw-r--r--po/ru.po6116
-rw-r--r--po/sk.po6267
-rw-r--r--po/sl.po6463
-rw-r--r--po/sr.po6709
-rw-r--r--po/sv.po6100
-rw-r--r--po/tr.po6103
-rw-r--r--po/uk.po6129
-rw-r--r--po/zh_CN.po6490
-rw-r--r--po/zh_TW.Big5.po6717
-rw-r--r--src/Makefile.am212
-rw-r--r--src/about.c251
-rw-r--r--src/about.h25
-rw-r--r--src/account.c990
-rw-r--r--src/account.h64
-rw-r--r--src/action.c1269
-rw-r--r--src/action.h56
-rw-r--r--src/addr_compl.c954
-rw-r--r--src/addr_compl.h54
-rw-r--r--src/addrbook.c2010
-rw-r--r--src/addrbook.h114
-rw-r--r--src/addrcache.c1232
-rw-r--r--src/addrcache.h123
-rw-r--r--src/addressadd.c401
-rw-r--r--src/addressadd.h31
-rw-r--r--src/addressbook.c3503
-rw-r--r--src/addressbook.h49
-rw-r--r--src/addressitem.h158
-rw-r--r--src/addrindex.c1892
-rw-r--r--src/addrindex.h130
-rw-r--r--src/addritem.c989
-rw-r--r--src/addritem.h174
-rw-r--r--src/alertpanel.c353
-rw-r--r--src/alertpanel.h67
-rw-r--r--src/base64.c168
-rw-r--r--src/base64.h46
-rw-r--r--src/codeconv.c1769
-rw-r--r--src/codeconv.h238
-rw-r--r--src/colorlabel.c338
-rw-r--r--src/colorlabel.h34
-rw-r--r--src/compose.c6204
-rw-r--r--src/compose.h214
-rw-r--r--src/customheader.c100
-rw-r--r--src/customheader.h40
-rw-r--r--src/defs.h110
-rw-r--r--src/displayheader.c59
-rw-r--r--src/displayheader.h37
-rw-r--r--src/editaddress.c1198
-rw-r--r--src/editaddress.h29
-rw-r--r--src/editbook.c348
-rw-r--r--src/editbook.h29
-rw-r--r--src/editgroup.c540
-rw-r--r--src/editgroup.h26
-rw-r--r--src/editjpilot.c447
-rw-r--r--src/editjpilot.h33
-rw-r--r--src/editldap.c600
-rw-r--r--src/editldap.h29
-rw-r--r--src/editldap_basedn.c332
-rw-r--r--src/editldap_basedn.h30
-rw-r--r--src/editvcard.c329
-rw-r--r--src/editvcard.h29
-rw-r--r--src/export.c263
-rw-r--r--src/export.h29
-rw-r--r--src/filesel.c145
-rw-r--r--src/filesel.h27
-rw-r--r--src/filter.c1218
-rw-r--r--src/filter.h194
-rw-r--r--src/folder.c1529
-rw-r--r--src/folder.h386
-rw-r--r--src/foldersel.c493
-rw-r--r--src/foldersel.h39
-rw-r--r--src/folderview.c2378
-rw-r--r--src/folderview.h96
-rw-r--r--src/grouplistdialog.c567
-rw-r--r--src/grouplistdialog.h29
-rw-r--r--src/gtksctree.c573
-rw-r--r--src/gtksctree.h66
-rw-r--r--src/gtkshruler.c218
-rw-r--r--src/gtkshruler.h63
-rw-r--r--src/gtkutils.c686
-rw-r--r--src/gtkutils.h166
-rw-r--r--src/headerview.c348
-rw-r--r--src/headerview.h55
-rw-r--r--src/html.c777
-rw-r--r--src/html.h87
-rw-r--r--src/imageview.c251
-rw-r--r--src/imageview.h52
-rw-r--r--src/imap.c3976
-rw-r--r--src/imap.h114
-rw-r--r--src/import.c268
-rw-r--r--src/import.h29
-rw-r--r--src/importldif.c846
-rw-r--r--src/importldif.h34
-rw-r--r--src/inc.c1337
-rw-r--r--src/inc.h103
-rw-r--r--src/inputdialog.c332
-rw-r--r--src/inputdialog.h39
-rw-r--r--src/intl.h22
-rw-r--r--src/jpilot.c1732
-rw-r--r--src/jpilot.h116
-rw-r--r--src/ldif.c933
-rw-r--r--src/ldif.h119
-rw-r--r--src/logwindow.c221
-rw-r--r--src/logwindow.h55
-rw-r--r--src/main.c721
-rw-r--r--src/main.h32
-rw-r--r--src/mainwindow.c3174
-rw-r--r--src/mainwindow.h177
-rw-r--r--src/manage_window.c92
-rw-r--r--src/manage_window.h58
-rw-r--r--src/manual.c85
-rw-r--r--src/manual.h36
-rw-r--r--src/mbox.c455
-rw-r--r--src/mbox.h47
-rw-r--r--src/md5.c433
-rw-r--r--src/md5.h49
-rw-r--r--src/menu.c262
-rw-r--r--src/menu.h90
-rw-r--r--src/message_search.c226
-rw-r--r--src/message_search.h29
-rw-r--r--src/messageview.c877
-rw-r--r--src/messageview.h96
-rw-r--r--src/mgutils.c220
-rw-r--r--src/mgutils.h62
-rw-r--r--src/mh.c1282
-rw-r--r--src/mh.h38
-rw-r--r--src/mimeview.c998
-rw-r--r--src/mimeview.h81
-rw-r--r--src/news.c1056
-rw-r--r--src/news.h59
-rw-r--r--src/nntp.c431
-rw-r--r--src/nntp.h109
-rw-r--r--src/passphrase.c342
-rw-r--r--src/passphrase.h34
-rw-r--r--src/pixmaps/address.xpm23
-rw-r--r--src/pixmaps/book.xpm23
-rw-r--r--src/pixmaps/category.xpm35
-rw-r--r--src/pixmaps/checkbox_off.xpm20
-rw-r--r--src/pixmaps/checkbox_on.xpm20
-rw-r--r--src/pixmaps/clip.xpm17
-rw-r--r--src/pixmaps/complete.xpm17
-rw-r--r--src/pixmaps/continue.xpm42
-rw-r--r--src/pixmaps/deleted.xpm15
-rw-r--r--src/pixmaps/dir-close.xpm100
-rw-r--r--src/pixmaps/dir-noselect.xpm94
-rw-r--r--src/pixmaps/dir-open.xpm83
-rw-r--r--src/pixmaps/error.xpm45
-rw-r--r--src/pixmaps/forwarded.xpm23
-rw-r--r--src/pixmaps/group.xpm97
-rw-r--r--src/pixmaps/inbox.xpm25
-rw-r--r--src/pixmaps/interface.xpm24
-rw-r--r--src/pixmaps/jpilot.xpm25
-rw-r--r--src/pixmaps/ldap.xpm25
-rw-r--r--src/pixmaps/linewrap.xpm29
-rw-r--r--src/pixmaps/mail.xpm41
-rw-r--r--src/pixmaps/mark.xpm16
-rw-r--r--src/pixmaps/new.xpm62
-rw-r--r--src/pixmaps/offline.xpm228
-rw-r--r--src/pixmaps/online.xpm232
-rw-r--r--src/pixmaps/outbox.xpm27
-rw-r--r--src/pixmaps/replied.xpm24
-rw-r--r--src/pixmaps/stock_add_16.xpm35
-rw-r--r--src/pixmaps/stock_close.xpm29
-rw-r--r--src/pixmaps/stock_dialog_error_48.xpm115
-rw-r--r--src/pixmaps/stock_dialog_info_48.xpm115
-rw-r--r--src/pixmaps/stock_dialog_question_48.xpm115
-rw-r--r--src/pixmaps/stock_dialog_warning_48.xpm83
-rw-r--r--src/pixmaps/stock_down_arrow.xpm100
-rw-r--r--src/pixmaps/stock_exec.xpm107
-rw-r--r--src/pixmaps/stock_mail.xpm143
-rw-r--r--src/pixmaps/stock_mail_attach.xpm134
-rw-r--r--src/pixmaps/stock_mail_compose.xpm144
-rw-r--r--src/pixmaps/stock_mail_forward.xpm153
-rw-r--r--src/pixmaps/stock_mail_receive.xpm175
-rw-r--r--src/pixmaps/stock_mail_receive_all.xpm181
-rw-r--r--src/pixmaps/stock_mail_reply.xpm154
-rw-r--r--src/pixmaps/stock_mail_reply_to_all.xpm126
-rw-r--r--src/pixmaps/stock_mail_send.xpm162
-rw-r--r--src/pixmaps/stock_mail_send_queue.xpm244
-rw-r--r--src/pixmaps/stock_paste.xpm132
-rw-r--r--src/pixmaps/stock_preferences.xpm80
-rw-r--r--src/pixmaps/stock_properties.xpm140
-rw-r--r--src/pixmaps/stock_remove_16.xpm28
-rw-r--r--src/pixmaps/stock_search.xpm155
-rw-r--r--src/pixmaps/stock_trash.xpm112
-rw-r--r--src/pixmaps/stock_up_arrow.xpm100
-rw-r--r--src/pixmaps/sylpheed-logo.xpm53
-rw-r--r--src/pixmaps/tb_address_book.xpm56
-rw-r--r--src/pixmaps/trash.xpm29
-rw-r--r--src/pixmaps/unread.xpm50
-rw-r--r--src/pixmaps/vcard.xpm25
-rw-r--r--src/pop.c862
-rw-r--r--src/pop.h153
-rw-r--r--src/prefs.c817
-rw-r--r--src/prefs.h169
-rw-r--r--src/prefs_account.c2295
-rw-r--r--src/prefs_account.h175
-rw-r--r--src/prefs_actions.c666
-rw-r--r--src/prefs_actions.h29
-rw-r--r--src/prefs_common.c3545
-rw-r--r--src/prefs_common.h246
-rw-r--r--src/prefs_customheader.c623
-rw-r--r--src/prefs_customheader.h29
-rw-r--r--src/prefs_display_header.c631
-rw-r--r--src/prefs_display_header.h27
-rw-r--r--src/prefs_filter.c841
-rw-r--r--src/prefs_filter.h58
-rw-r--r--src/prefs_filter_edit.c2035
-rw-r--r--src/prefs_filter_edit.h28
-rw-r--r--src/prefs_folder_item.c579
-rw-r--r--src/prefs_folder_item.h29
-rw-r--r--src/prefs_summary_column.c537
-rw-r--r--src/prefs_summary_column.h30
-rw-r--r--src/prefs_template.c533
-rw-r--r--src/prefs_template.h25
-rw-r--r--src/procheader.c764
-rw-r--r--src/procheader.h91
-rw-r--r--src/procmime.c1128
-rw-r--r--src/procmime.h176
-rw-r--r--src/procmsg.c1519
-rw-r--r--src/procmsg.h280
-rw-r--r--src/progressdialog.c135
-rw-r--r--src/progressdialog.h46
-rw-r--r--src/quote_fmt.h13
-rw-r--r--src/quote_fmt_lex.h47
-rw-r--r--src/quote_fmt_lex.l46
-rw-r--r--src/quote_fmt_parse.y459
-rw-r--r--src/quoted-printable.c231
-rw-r--r--src/quoted-printable.h36
-rw-r--r--src/recv.c227
-rw-r--r--src/recv.h46
-rw-r--r--src/rfc2015.c1395
-rw-r--r--src/rfc2015.h48
-rw-r--r--src/select-keys.c525
-rw-r--r--src/select-keys.h29
-rw-r--r--src/send_message.c620
-rw-r--r--src/send_message.h46
-rw-r--r--src/session.c734
-rw-r--r--src/session.h200
-rw-r--r--src/setup.c95
-rw-r--r--src/setup.h29
-rw-r--r--src/sigstatus.c244
-rw-r--r--src/sigstatus.h33
-rw-r--r--src/simple-gettext.c386
-rw-r--r--src/smtp.c565
-rw-r--r--src/smtp.h115
-rw-r--r--src/socket.c1293
-rw-r--r--src/socket.h117
-rw-r--r--src/sourcewindow.c183
-rw-r--r--src/sourcewindow.h45
-rw-r--r--src/ssl.c146
-rw-r--r--src/ssl.h58
-rw-r--r--src/statusbar.c125
-rw-r--r--src/statusbar.h38
-rw-r--r--src/stock_pixmap.c185
-rw-r--r--src/stock_pixmap.h93
-rw-r--r--src/stringtable.c163
-rw-r--r--src/stringtable.h38
-rw-r--r--src/summary_search.c474
-rw-r--r--src/summary_search.h29
-rw-r--r--src/summaryview.c4195
-rw-r--r--src/summaryview.h239
-rw-r--r--src/syldap.c1129
-rw-r--r--src/syldap.h111
-rw-r--r--src/sylpheed-marshal.list2
-rw-r--r--src/template.c219
-rw-r--r--src/template.h45
-rw-r--r--src/textview.c1664
-rw-r--r--src/textview.h90
-rw-r--r--src/undo.c646
-rw-r--r--src/undo.h80
-rw-r--r--src/unmime.c133
-rw-r--r--src/unmime.h29
-rw-r--r--src/utils.c3189
-rw-r--r--src/utils.h428
-rw-r--r--src/uuencode.c101
-rw-r--r--src/uuencode.h24
-rw-r--r--src/vcard.c777
-rw-r--r--src/vcard.h105
-rw-r--r--src/version.h.in27
-rw-r--r--src/xml.c619
-rw-r--r--src/xml.h106
-rw-r--r--sylpheed-128x128.pngbin0 -> 48732 bytes
-rw-r--r--sylpheed-64x64.pngbin0 -> 5431 bytes
-rw-r--r--sylpheed.desktop10
-rw-r--r--sylpheed.pngbin0 -> 3809 bytes
-rw-r--r--sylpheed.spec.in107
467 files changed, 344398 insertions, 0 deletions
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 00000000..dd2659f0
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,769 @@
+Notes on the Free Translation Project
+*************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+Quick configuration advice
+==========================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your country by running the command
+`locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+Translating Teams
+=================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of January
+2004. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es
+ +----------------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | |
+ ap-utils | |
+ aspell | [] |
+ bash | [] [] [] [] |
+ batchelor | |
+ bfd | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bluez-pin | [] [] [] |
+ clisp | |
+ clisp | [] [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ darkstat | [] () [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] [] [] |
+ fetchmail | [] () [] [] [] [] |
+ fileutils | [] [] [] |
+ findutils | [] [] [] [] [] [] [] |
+ flex | [] [] [] [] |
+ fslint | |
+ gas | [] |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext | [] [] [] [] [] |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] [] [] [] |
+ gliv | |
+ glunarclock | [] [] |
+ gnubiff | [] |
+ gnucash | [] () [] [] |
+ gnucash-glossary | [] () [] |
+ gnupg | [] () [] [] [] [] |
+ gpe-aerial | [] |
+ gpe-beam | [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | () () () |
+ gramadoir | [] |
+ grep | [] [] [] [] [] [] |
+ gretl | [] |
+ gtick | [] () |
+ hello | [] [] [] [] [] [] |
+ id-utils | [] [] |
+ indent | [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_1 | [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] [] |
+ iso_639 | |
+ jpilot | [] [] [] |
+ jtag | |
+ jwhois | [] |
+ kbd | [] [] [] [] [] |
+ latrine | () |
+ ld | [] [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] [] |
+ libiconv | [] [] [] [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lingoteach_lessons | () () |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] [] |
+ make | [] [] [] |
+ man-db | [] () [] [] () |
+ minicom | [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] () [] [] [] |
+ nano_1_0 | [] () [] [] [] |
+ opcodes | [] |
+ parted | [] [] [] [] [] |
+ ptx | [] [] [] [] [] |
+ python | |
+ radius | [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] |
+ sh-utils | [] [] [] |
+ shared-mime-info | |
+ sharutils | [] [] [] [] [] [] |
+ silky | () |
+ skencil | [] () [] |
+ sketch | [] () [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] [] |
+ tin | () () |
+ tp-robot | |
+ tuxpaint | [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] [] |
+ vorbis-tools | [] [] [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] [] [] [] |
+ xchat | [] [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] |
+ +----------------------------------------------------+
+ af am ar az be bg bs ca cs da de el en en_GB eo es
+ 4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
+
+ et eu fa fi fr ga gl he hr hu id is it ja ko lg
+ +-------------------------------------------------+
+ a2ps | [] [] [] () () |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] [] |
+ batchelor | [] [] |
+ bfd | [] |
+ binutils | [] [] |
+ bison | [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ clisp | |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] [] |
+ darkstat | () [] [] [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | |
+ enscript | [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] |
+ fileutils | [] [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] [] [] [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | [] |
+ gawk | [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] |
+ gettext | [] [] [] |
+ gettext-examples | [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] |
+ gliv | () |
+ glunarclock | [] [] [] [] |
+ gnubiff | [] |
+ gnucash | () [] |
+ gnucash-glossary | [] |
+ gnupg | [] [] [] [] [] [] [] |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] [] [] |
+ gpe-clock | [] |
+ gpe-conf | [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] [] |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] |
+ gpe-sketchbook | [] |
+ gpe-su | [] |
+ gpe-taskmanager | [] |
+ gpe-timesheet | [] [] [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () () () |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] [] [] [] [] [] |
+ gretl | [] [] |
+ gtick | [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] [] |
+ iso_3166_1 | [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | |
+ iso_4217 | [] [] [] [] [] [] |
+ iso_639 | |
+ jpilot | [] () |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] |
+ latrine | [] |
+ ld | [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] [] [] [] |
+ libiconv | [] [] [] [] [] [] [] [] [] |
+ lifelines | () |
+ lilypond | [] |
+ lingoteach | [] [] |
+ lingoteach_lessons | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | |
+ make | [] [] [] [] [] [] |
+ man-db | () () |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] |
+ nano | [] [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] |
+ parted | [] [] [] |
+ ptx | [] [] [] [] [] [] [] |
+ python | |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sh-utils | [] [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] |
+ sharutils | [] [] [] [] [] |
+ silky | () [] () () |
+ skencil | [] |
+ sketch | [] |
+ soundtracker | [] [] |
+ sp | [] () |
+ tar | [] [] [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] [] [] [] |
+ tin | [] () |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] () [] |
+ vorbis-tools | [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] |
+ xchat | [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] [] |
+ +-------------------------------------------------+
+ et eu fa fi fr ga gl he hr hu id is it ja ko lg
+ 22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
+
+ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+ +-----------------------------------------------------+
+ a2ps | [] [] () () [] [] [] |
+ aegis | () () () |
+ ant-phone | [] [] |
+ anubis | [] [] [] [] [] [] |
+ ap-utils | [] () [] |
+ aspell | [] |
+ bash | [] [] [] |
+ batchelor | [] |
+ bfd | [] |
+ binutils | [] |
+ bison | [] [] [] [] [] |
+ bluez-pin | [] [] [] |
+ clisp | |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] |
+ cpio | [] [] [] [] [] |
+ darkstat | [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ e2fsprogs | [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] |
+ fetchmail | [] [] () [] |
+ fileutils | [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] |
+ fslint | [] [] |
+ gas | |
+ gawk | [] [] [] |
+ gbiff | [] [] |
+ gcal | |
+ gcc | |
+ gettext | [] [] [] |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] |
+ gliv | [] [] [] |
+ glunarclock | [] [] [] [] |
+ gnubiff | [] |
+ gnucash | [] [] () [] |
+ gnucash-glossary | [] [] |
+ gnupg | [] |
+ gpe-aerial | [] [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] |
+ gprof | [] [] |
+ gpsdrive | () () [] |
+ gramadoir | () [] |
+ grep | [] [] [] [] [] |
+ gretl | |
+ gtick | [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ indent | [] [] [] [] |
+ iso_3166 | [] [] [] |
+ iso_3166_1 | [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] [] [] [] [] [] |
+ iso_639 | [] |
+ jpilot | () () |
+ jtag | |
+ jwhois | [] [] [] [] () |
+ kbd | [] [] [] |
+ latrine | [] |
+ ld | |
+ libc | [] [] [] [] |
+ libgpewidget | [] [] [] |
+ libiconv | [] [] [] [] [] |
+ lifelines | |
+ lilypond | |
+ lingoteach | |
+ lingoteach_lessons | |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailutils | [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] [] [] [] [] |
+ nano_1_0 | [] [] [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ ptx | [] [] [] [] [] [] [] [] |
+ python | |
+ radius | [] [] |
+ recode | [] [] [] [] |
+ rpm | [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] |
+ sed | [] [] [] |
+ sh-utils | [] [] |
+ shared-mime-info | [] [] |
+ sharutils | [] [] |
+ silky | () |
+ skencil | [] [] |
+ sketch | [] [] |
+ soundtracker | |
+ sp | |
+ tar | [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] |
+ tin | |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] |
+ vorbis-tools | [] [] [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] |
+ wget | [] [] [] |
+ xchat | [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] [] |
+ +-----------------------------------------------------+
+ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+ 1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
+
+ sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+ +-----------------------------------------------------+
+ a2ps | [] [] [] [] | 16
+ aegis | | 0
+ ant-phone | | 3
+ anubis | [] [] | 9
+ ap-utils | () | 3
+ aspell | | 4
+ bash | | 9
+ batchelor | | 3
+ bfd | [] [] | 6
+ binutils | [] [] [] | 8
+ bison | [] [] | 14
+ bluez-pin | [] [] [] | 14
+ clisp | | 0
+ clisp | | 5
+ console-tools | | 3
+ coreutils | [] [] [] [] | 16
+ cpio | [] [] | 14
+ darkstat | [] [] [] () () | 12
+ diffutils | [] [] [] | 23
+ e2fsprogs | [] [] | 6
+ enscript | [] [] | 12
+ error | [] [] [] | 15
+ fetchmail | [] [] | 11
+ fileutils | [] [] [] [] [] | 17
+ findutils | [] [] [] [] [] [] | 29
+ flex | [] [] | 13
+ fslint | | 3
+ gas | [] | 3
+ gawk | [] [] | 12
+ gbiff | | 4
+ gcal | [] [] | 4
+ gcc | [] | 4
+ gettext | [] [] [] [] [] | 16
+ gettext-examples | [] [] [] [] [] | 14
+ gettext-runtime | [] [] [] [] [] [] [] [] | 22
+ gettext-tools | [] [] [] [] [] [] | 14
+ gimp-print | [] [] | 10
+ gliv | | 3
+ glunarclock | [] [] [] | 13
+ gnubiff | | 3
+ gnucash | [] [] | 9
+ gnucash-glossary | [] [] [] | 8
+ gnupg | [] [] [] [] | 17
+ gpe-aerial | [] | 7
+ gpe-beam | [] | 8
+ gpe-calendar | [] [] [] [] | 13
+ gpe-clock | [] [] [] | 10
+ gpe-conf | [] [] | 9
+ gpe-contacts | [] [] [] | 11
+ gpe-edit | [] [] [] [] [] | 12
+ gpe-go | | 5
+ gpe-login | [] [] [] [] [] | 13
+ gpe-ownerinfo | [] [] [] [] | 13
+ gpe-sketchbook | [] [] | 9
+ gpe-su | [] [] [] | 10
+ gpe-taskmanager | [] [] [] | 10
+ gpe-timesheet | [] [] [] [] | 12
+ gpe-today | [] [] [] [] [] | 13
+ gpe-todo | [] [] [] [] | 12
+ gphoto2 | [] [] [] | 11
+ gprof | [] [] | 9
+ gpsdrive | [] [] | 3
+ gramadoir | [] | 5
+ grep | [] [] [] [] | 26
+ gretl | | 3
+ gtick | | 7
+ hello | [] [] [] [] [] | 34
+ id-utils | [] [] | 12
+ indent | [] [] [] [] | 21
+ iso_3166 | [] [] [] [] [] [] [] | 27
+ iso_3166_1 | [] [] [] | 16
+ iso_3166_2 | | 0
+ iso_3166_3 | | 2
+ iso_4217 | [] [] [] [] [] [] | 24
+ iso_639 | | 1
+ jpilot | [] [] [] [] [] | 9
+ jtag | [] | 2
+ jwhois | () [] [] | 11
+ kbd | [] [] | 11
+ latrine | | 2
+ ld | [] [] | 5
+ libc | [] [] [] [] | 20
+ libgpewidget | [] [] [] [] | 13
+ libiconv | [] [] [] [] [] [] [] [] | 27
+ lifelines | [] | 2
+ lilypond | [] | 3
+ lingoteach | | 2
+ lingoteach_lessons | () | 0
+ lynx | [] [] [] | 14
+ m4 | [] [] | 15
+ mailutils | | 5
+ make | [] [] [] | 16
+ man-db | [] | 5
+ minicom | | 11
+ mysecretdiary | [] [] | 10
+ nano | [] [] [] [] | 17
+ nano_1_0 | [] [] [] | 17
+ opcodes | [] [] | 6
+ parted | [] [] [] | 15
+ ptx | [] [] | 22
+ python | | 0
+ radius | | 4
+ recode | [] [] [] | 20
+ rpm | [] [] | 9
+ screem | [] [] | 2
+ scrollkeeper | [] [] [] | 15
+ sed | [] [] [] [] [] [] | 24
+ sh-utils | [] [] | 14
+ shared-mime-info | [] [] | 7
+ sharutils | [] [] [] [] | 17
+ silky | () | 3
+ skencil | [] | 6
+ sketch | [] | 6
+ soundtracker | [] [] | 7
+ sp | [] | 3
+ tar | [] [] [] [] [] | 24
+ texinfo | [] [] [] | 14
+ textutils | [] [] [] [] | 16
+ tin | | 1
+ tp-robot | | 2
+ tuxpaint | [] [] [] [] [] | 29
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] | 15
+ vorbis-tools | | 8
+ wastesedge | | 0
+ wdiff | [] [] [] | 18
+ wget | [] [] [] [] [] [] [] [] | 24
+ xchat | [] [] [] [] [] | 15
+ xfree86_xkb_xml | [] [] [] [] [] | 11
+ xpad | | 5
+ +-----------------------------------------------------+
+ 63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+ 131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If January 2004 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 00000000..75e5758c
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,118 @@
+main-branch (http://sylpheed.good-day.net)
+
+ Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+ <yamamoto@good-day.co.jp>
+
+claws-branch (http://sylpheed-claws.sourceforge.net)
+
+ Hoa viet Dinh <dinh.viet.hoa@free.fr>
+ Match Grun <match@dimensional.com>
+ Melvin Hadasht <melvin.hadasht@free.fr>
+ Christoph Hohmann <reboot@gmx.ch>
+ Alfons Hoogervorst <alfons@proteus.demon.nl>
+ Darko Koruga <darko.koruga@hermes.si>
+ Paul Mangan <claws@thewildbeast.co.uk>
+ Carsten Schurig <Carsten.Schurig@web.de>
+ Sergey Vlasov <vsu@mivlgu.murom.ru>
+ Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+
+sylpheed-w32 (http://www.gnupg.org/cvs-access.html)
+
+ Werner Koch <wk@gnupg.org>
+
+user manuals
+
+ Yoichi Imai (Japanese) <yoichi@silver-forest.com>
+ Paul Kater (English) <paul@nlpagan.net>
+
+application icon
+
+ WAKAI Kazunao <silver@lacmhacarh.gr.jp>
+
+contributors (beside the above; based on Changelog)
+
+ Alte
+ Pierric Descamps
+ Ohmasa
+ Stephen Anthony
+ HIRAMATSU Masami
+ Jorge Van Hemelryck
+ TAKANO
+ Masahiro Tomita
+ Mathias Intemann
+ Chideok Hwang
+ Marc Hoper
+ David Mehrmann
+ Setoh
+ Yuuki NINOMIYA
+ Suzuki Mio
+ Ishihara
+ Jason McCarver
+ Martin Schaaf
+ Sakamoto
+ Hiramatu
+ John E.P. Hynes
+ Maki
+ Takahashi
+ Leandro Pereira
+ Nishimura
+ Yoichi Imai
+ Tsutsui
+ Yanase
+ TOGAWA
+ Higuchi
+ Paul Rolland
+ KUROSAWA
+ NAKAGAWA
+ HIROSHIMA
+ Tanaka
+ Hashimoto
+ T. Yamamoto
+ YAMAGUCHI
+ Tomita
+ Nishiyama
+ Michihide Hotta
+ Nishika
+ shigeri
+ Tajiri
+ WAKAI Kazunao
+ Rodrigo Dias Arruda Senra
+ Fabio Junior Beneditto
+ Satoshi Nagayasu
+ Jens Oberender
+ Ricardo Mones Lastra
+ Henrik Carlqvist
+ Don Quijote
+ David Looney
+ Eric Limpens
+ Paul Evans
+ wwp
+ Jeroen Versteeg
+ Ravemax
+ Jens Jahnke
+ Thierry Godefroy
+ Matthieu Dazy
+ Jonathan Ware
+ Yasumatsu
+ Stefaan A Eeckels
+ OSHIRO Naoki
+ KAJIWARA
+ Hironori IWANE
+ Manrat Chobchuen
+ Shimamoto "Neko" Tatsuya
+ Jesse Skinner
+ Willem van Engen
+ Tobias Sandhaas
+ Thomas Link
+ Martin Pool
+ Fredrik Olofssen
+ Gustavo Noronha Silva
+ Yukihiro Nakai
+ Watanabe
+ Masaaki Noro
+ Motonobu Ichimura
+ Luca Rosellini
+ Yasuzaki Masayoshi
+ Shawn Houston
+ Neill Miller
+ IWAMOTO Kouichi
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..1d353343
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,285 @@
+The code in this distribution is Copyright 1999-2002 by Hiroyuki Yamamoto.
+
+Specific permission is granted for the GPLed code in this distribition to
+be linked to OpenSSL without invoking GPL clause 2(b).
+
+-------------------------------------------------------------------------------
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+-------------------------------------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 00000000..5cd4183a
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,10800 @@
+2004-12-24
+
+ * version 1.0.0
+
+2004-12-22
+
+ * src/account.c: account_delete(): fixed the crash on deleting a
+ remote account if the corresponding folder was selected (Debian BTS
+ #284483).
+
+2004-12-21
+
+ * NEWS, TODO, TODO.jp: updated.
+ * manual/ja/sylpheed.sgml: updated.
+
+2004-12-17
+
+ * src/action.c: parse_append_filename(): escape all special characters
+ without quote (thanks to IWAMOTO Kouichi and Yoichi Imai).
+ * AUTHORS: updated.
+
+2004-12-16
+
+ * INSTALL
+ INSTALL.jp: updated the confirmation list.
+
+2004-12-15
+
+ * version 1.0.0rc
+
+2004-12-15
+
+ * src/compose.c: compose_wrap_line_all_full(): fixed the logic of
+ space insertion.
+
+2004-12-15
+
+ * manual/ja/sylpheed.sgml: updated.
+
+2004-12-15
+
+ * src/addrbook.c
+ src/addressbook.c
+ src/addrindex.c
+ src/jpilot.c
+ src/ldif.c
+ src/syldap.c
+ src/vcard.c: removed '... defined but not used' warnings.
+
+2004-12-13
+
+ * src/compose.c: compose_wrap_line_all_full(): only insert space
+ when joining lines if the first character of the next line is not
+ space, or it's a boundary between multi- and single-byte characters.
+
+2004-12-13
+
+ * src/action.c: parse_append_filename(): escape special characters
+ (thanks to IWAMOTO Kouichi).
+ * src/utils.c: subst_for_filename(): also substitute single quote.
+
+2004-12-10
+
+ * src/compose.c: compose_wrap_line_all_full(): fixed joining line
+ problem when the first character of the next line is not
+ alphanumeric.
+
+2004-12-09
+
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb()
+ src/compose.c: compose_send(), compose_send_later_cb(): ask user
+ to switch to online if in offline mode when sending.
+
+2004-12-08
+
+ * src/imap.c: applied bitlength_clean_up.imap.c.patch that fixes the
+ integer length problem on 64-bit platforms (thanks to Alfons).
+
+2004-12-03
+
+ * version 1.0.0beta4
+
+2004-12-03
+
+ * src/pixmaps/regular.xpm: removed unused icon.
+ * README
+ README.jp: updated.
+
+2004-12-02
+
+ * src/pop.c: pop3_write_msg_to_file(): don't convert single CRs to
+ LFs (thanks to Alfons).
+ * src/utils.[ch]: my_memmem(): original implementation of memmem().
+
+2004-12-01
+
+ * manual/ja/sylpheed.sgml: updated for the latest version.
+
+2004-12-01
+
+ * src/pixmaps/unread.xpm: adjusted the hue of image.
+
+2004-12-01
+
+ * src/filter.c: removed C99 '//' comments.
+
+2004-11-30
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/dir-noselect.xpm
+ src/pixmaps/group.xpm: adjusted the hue of images.
+
+2004-11-29
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/dir-noselect.xpm
+ src/pixmaps/group.xpm: replaced with new images.
+
+2004-11-29
+
+ * src/pixmaps/folder.xpm: removed.
+
+2004-11-26
+
+ * src/summaryview.c: changed one-letter column titles to icons.
+ * src/pixmaps/mail.xpm: new.
+
+2004-11-26
+
+ * src/summaryview.c: summary_execute(): pop summary statusbar message.
+
+2004-11-26
+
+ * src/prefs_common.c: added Web browser commands.
+
+2004-11-26
+
+ * manual/ja/sylpheed.sgml: updated for the latest version.
+ * manual/ja/Makefile.am: added target 'update-html'.
+
+2004-11-22
+
+ * INSTALL
+ INSTALL.jp: updated the confirmation list.
+
+2004-11-19
+
+ * src/jpilot.c: unify the coding style.
+ * src/mainwindow.c: fixed duplicated accelerator.
+
+2004-11-18
+
+ * src/procmsg.c: write_mark_func(): fixed bad cast on the system that
+ sizeof(gpointer) != guint.
+
+2004-11-18
+
+ * src/mainwindow.c: fixed English (trashes -> trash).
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): updated menu
+ strings.
+
+2004-11-18
+
+ * src/mainwindow.c: changed the menu label "Empty trash" to
+ "Empty all trashes".
+
+2004-11-16
+
+ * version 1.0.0beta3
+
+2004-11-16
+
+ * src/pixmaps/error.xpm: made them smaller size to fit CList row.
+
+2004-11-16
+
+ * src/jpilot.c: applied the JPilot addressbook Japanese support
+ patch (thanks to IWAMOTO, Kouichi).
+
+2004-11-15
+
+ * src/compose.c
+ src/procmime.[ch]: use BASE64 encoding if the ratio of 8bit
+ characters in attaching text files is greater than 20%, otherwise
+ use quoted-printable (or 7bit if not at all).
+
+2004-11-12
+
+ * src/compose.c: compose_write_attach()
+ src/procmime.c: procmime_decode_content():
+ canonicalize text files before encoding to BASE64, and
+ uncanonicalize after decoding to conform with RFC 2045
+ (thanks to Nicolas Degory).
+
+2004-11-11
+
+ * src/pixmaps/complete.xpm
+ src/pixmaps/continue.xpm: made them smaller size to fit CList
+ row.
+
+2004-11-11
+
+ * src/statusbar.c: statusbar_create(): set the width of widget to 1
+ not to expand automatically.
+ * src/utils.[ch]: trim_string_before(): trim beginning characters
+ longer than the specified length and add "...".
+ * src/folderview.c
+ src/summaryview.c: use trim_string_before() to display folder name.
+
+2004-11-10
+
+ * src/defs.h
+ src/prefs_common.c: made mozilla-firefox as default browser.
+
+2004-11-09
+
+ * src/summaryview.c: summary_key_pressed()
+ src/textview.c: textview_key_pressed(): back scroll when Shift or
+ Alt and Space key is pressed. Also back scroll when Shift and Enter
+ key is pressed.
+
+2004-11-09
+
+ * src/foldersel.c: foldersel_new_folder(): select newly created
+ folder.
+
+2004-11-08
+
+ * version 1.0.0beta2
+
+2004-11-08
+
+ * src/account.c
+ src/imap.c
+ src/inc.c
+ src/pop.c
+ src/prefs_account.[ch]: obsoleted RecvProtocol::A_APOP and made an
+ option for APOP.
+ prefs_account_protocol_set_optmenu(): refactored.
+
+2004-11-07
+
+ * src/folderview.c: folderview_empty_trash_cb(): removed unused
+ variables.
+
+2004-11-05
+
+ * src/summary_search.c: use C string instead of wide character string.
+ Enabled AND/OR matching.
+
+2004-11-05
+
+ * src/folderview.[ch]
+ src/mainwindow.c: change menu sensitivity of File/Folder and
+ File/Mailbox according to selected folder.
+ Enabled newsgroups subscription from 'File/Folder/Create new folder'.
+
+2004-11-04
+
+ * src/folderview.[ch]
+ src/mainwindow.c: reorganized folder/mailbox menus.
+ Enabled 'Remove mailbox', 'Check for new messages' and
+ 'Rebuild folder tree' on main menu.
+ Removed 'Remove mailbox' from the folder context menu.
+
+2004-11-04
+
+ * src/folderview.c
+ src/mainwindow.c
+ src/procmsg.[ch]: added 'Empty trash' to the folder context menu.
+
+2004-11-01
+
+ * src/filter.[ch]
+ src/summaryview.c: don't move/delete immediately when
+ immediate_execution is off.
+
+2004-10-29
+
+ * version 1.0.0beta1
+
+2004-10-29
+
+ * upgraded to gettext-0.14.1.
+
+2004-10-28
+
+ * src/compose.c: reorganized the menu.
+ * src/mh.c: removed g_print() for debug.
+
+2004-10-27
+
+ * src/compose.c
+ src/prefs_template.c
+ src/template.[ch]: added Cc: to template parameter.
+
+2004-10-26
+
+ * src/prefs_filter_edit.c: fixed condition menu switching problem
+ on editing existing rules.
+
+2004-10-25
+
+ * src/filter.c: filter_action_exec(): update counters of FolderItem
+ on local filtering (fixes wrong folderview message count).
+
+2004-10-25
+
+ * src/mbox.c: proc_mbox(): check if folder_table is NULL (fix
+ warnings).
+
+2004-10-21
+
+ * src/pixmaps/stock_add_16.xpm
+ src/pixmaps/stock_remove_16.xpm: converted from stock icons in
+ gtk-2.4.
+ * src/prefs_filter_edit.c: use icons for add/remove button.
+ * src/stock_pixmap.[ch]: added add/remove icons.
+
+2004-10-21
+
+ * src/pixmaps/stock_dialog_error_48.xpm
+ src/pixmaps/stock_dialog_info_48.xpm
+ src/pixmaps/stock_dialog_question_48.xpm
+ src/pixmaps/stock_dialog_warning_48.xpm: converted dialog icons from
+ stock icons in gtk-2.4.
+ * src/alertpanel.[ch]: added icons to the alert dialog.
+ alertpanel_message(): Added AlertType.
+ * src/stock_pixmaps.[ch]: added dialog icons.
+
+
+2004-10-08
+
+ * src/procmsg.c: removed verbose debug prints.
+
+2004-10-07
+
+ * version 0.9.99
+
+2004-10-07
+
+ * src/procmsg.c: procmsg_send_queue()
+ src/send_message.c: send_queue_info_free(): fixed segmentation fault
+ when trying to send an invalid queued message.
+
+2004-10-06
+
+ * src/mainwindow.c: added separators to the File menu.
+ * src/prefs_filter_edit.c: removed some debug prints.
+
+2004-10-05
+
+ * src/inputdialog.c: input_dialog_open(): don't start auto-checking
+ mail while opening the input dialog.
+
+2004-10-04
+
+ * src/mh.c: mh_remove_all_msg()
+ src/procmsg.c: procmsg_empty_trash(): fixed wrong message count
+ after emptying trash.
+
+2004-10-01
+
+ * src/prefs_filter.c: fixed a bug that didn't add an auto-created
+ rule.
+ * src/prefs_filter_edit.c: prefs_filter_edit_dialog_to_rule(): check
+ if rule name exists.
+
+2004-09-30
+
+ * src/filter.c: filter_apply_msginfo(): don't apply filter if
+ FilterRule::enabled == FALSE.
+ * src/prefs_filter.c: implemented Enabled column.
+ * src/account.c: account_selected(): modified the behavior of
+ double-click.
+
+2004-09-30
+
+ * src/colorlabel.c: modified the menu label size. Removed "None" from
+ color menu.
+ * src/filter.[ch]
+ src/prefs_filter_edit.c: implemented color label action.
+ * src/summaryview.c: summary_filter_func(): update summary flags
+ when flag action is performed.
+
+2004-09-29
+
+ * src/prefs_filter_edit.c: added color label.
+ * src/colorlabel.c: modified the menu label size and border.
+
+2004-09-28
+
+ * src/filter.[ch]
+ src/prefs_filter_edit.c: improved error handling when creating a
+ rule.
+
+2004-09-28
+
+ * src/prefs_common.c: adjusted the default size of views.
+
+2004-09-27
+
+ * src/filter.c
+ src/prefs_filter_edit.c: implemented size/age condition.
+ * src/menu.[ch]: menu_get_option_menu_active_user_data(): new.
+
+2004-09-22
+
+ * src/prefs_filter_edit.c: select previous item when editing header
+ finished.
+
+2004-09-22
+
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.c
+ src/procheader.[ch]: implemented user-defined header dialog.
+
+2004-09-17
+
+ * src/filter.c:
+ filter_action_exec(): modified local filtering.
+ strmatch_regex(): use case-insensitive regex.
+ * src/summaryview.[ch]: display filtering result to the status bar.
+
+2004-09-14
+
+ * src/filter.[ch]: implemented filter rule application timing.
+ * src/prefs_fil_er_edit.c: prefs_filter_edit_action_hbox_set():
+ fixed a bug that didn't display parameter of PF_ACTION_EXEC.
+
+2004-09-10
+
+ * src/prefs_filter.c: prefs_filter_write_user_header_list(): use
+ prefs_file_open() instead of fopen().
+
+2004-09-10
+
+ * src/defs.h
+ src/prefs_filter.c: implemented load/save of user-defined
+ header list.
+
+2004-09-09
+
+ * src/inc.c: inc_spool()
+ src/prefs_common.c: modified spool path config so that users can
+ specify both file and directory.
+
+2004-09-09
+
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.[ch]: implemented creating filter rule by
+ message.
+
+2004-09-07
+
+ * src/mimeview.c: mimeview_drag_data_get()
+ src/summaryview.c: summary_drag_data_get(): fixed broken URI in
+ DnD.
+
+2004-09-06
+
+ * src/filter.[ch]
+ src/summaryview.c: fixed local filtering.
+ * src/mh.c: mh_copy_msgs(): restored missing 'else'.
+
+2004-09-06
+
+ * src/foldersel.c: foldersel_new_folder(): fixed possible memory
+ corruption, and write folder list data after appending.
+ * src/summaryview.c: summary_show(): up FolderItem::opened flag
+ after reading message list.
+
+2004-09-03
+
+ * src/filter.c
+ src/inc.c
+ src/mbox.c
+ src/mh.c
+ src/procmsg.[ch]
+ src/summaryview.c: properly handle 'new' flags by using
+ FolderItem::mark_queue.
+
+2004-08-31
+
+ * src/filter.c
+ src/inc.c: modified 'new' flags management.
+
+2004-08-31
+
+ * src/prefs_filter.c: don't move to the last row when opening the
+ dialog. Clear CList when closing.
+
+2004-08-27
+
+ * src/filter.c
+ src/inc.c
+ src/pop.[ch]
+ src/prefs_filter_edit.c
+ src/summaryview.c: implemented FLT_ACTION_EXEC and FLT_ACTION_DELETE.
+
+2004-08-27
+
+ * src/prefs_filter.c: auto-scroll when a new rule is added.
+ open edit dialog when a rule is double-clicked.
+ prefs_filter_copy_cb(): implemented.
+ * src/prefs_filter_edit.c: implemented action "Stop rule evaluation".
+
+2004-08-26
+
+ * src/filter.[ch]
+ src/inc.c
+ src/mbox.c
+ src/prefs_filter_edit.c
+ src/summaryview.c: renamed FilterResult to FilterInfo, and added
+ account to its members.
+ Implemented command test, size, age, account, and on-receive
+ condition.
+ * src/mh.c
+ src/procheader.c: procheader_parse_file(): also get file size and
+ timestamp.
+ * src/utils.c:
+ execute_async()
+ execute_sync()
+ execute_command_line(): return exit status.
+
+2004-08-26
+
+ * src/filter.[ch]
+ src/inc.c: save all types of performed actions.
+ filter_rule_rename_dest_path(): modified for the new system.
+ filter_rule_delete_action_by_dest_path(): delete actions that
+ matches with a path.
+ * src/mbox.c: proc_mbox(): ignore FLT_ACTION_NOT_RECEIVE.
+ * src/prefs_filter.c: prefs_filter_delete_path(): modified for the new
+ system.
+ * src/summaryview.c:
+ summary_filter()
+ summary_filter_func(): modified for the new system.
+
+2004-08-25
+
+ * src/filter.[ch]: implemented message body match.
+ * src/procmime.[ch]:
+ procmime_find_string_part()
+ procmime_find_string(): take function pointer for matching.
+ * src/procmsg.[ch]: added file_path (which is only used for temporary
+ messages) to MsgInfo.
+ procmsg_msginfo_copy()
+ procmsg_msginfo_free(): handle extra members.
+ * src/summary_search.c: modified for procmime_find_string().
+ * src/summaryview.c: filter_apply_local() -> filter_apply_msginfo().
+ * src/utils.[ch]: added function for string match.
+ * src/compose.c
+ src/undo.c: removed redundant debug messages.
+
+2004-08-24
+
+ * implemented the new filtering system (still in progress).
+ * src/defs.h
+ src/filter.[ch]: implemented reading/writing of filter XML data.
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.[ch]: implemented UI for the new filtering
+ system.
+ * src/inc.c
+ src/main.c
+ src/mbox.c
+ src/pop.c
+ src/summaryview.c: modified for the new filtering system.
+ * src/menu.h: MENUITEM_ADD(): create separator if label is NULL.
+ * src/procheader.[ch]: added some utility functions.
+ * src/utils.c: open_uri(): modified warning message.
+
+2004-08-09
+
+ * src/main.c: removed parsing of "./gtkrc".
+
+2004-08-04
+
+ * src/socket.c:
+ ssl_read()
+ ssl_peek(): check SSL before reading data (fixes freeze when
+ socket is broken).
+ * src/session.[ch]: session_set_access_time(): new.
+ * src/imap.c
+ src/news.c
+ src/nntp.c: only update last_access_time when successfully
+ receiving a server response.
+ * thanks to Cedric Pradalier for above.
+
+2004-07-23
+
+ * src/xml.[ch]: code cleanup and added some functions.
+
+2004-07-16
+
+ * src/pop.[ch]: pop3_getrange_uidl_recv(): relaxed invalid UIDL
+ checking.
+
+2004-07-16
+
+ * src/account.[ch]
+ src/main.c
+ src/prefs.[ch]
+ src/prefs_account.[ch]
+ src/prefs_common.[ch]: unified *_{save,write}_config() to
+ *_write_config().
+
+2004-06-30
+
+ * src/procheader.c:
+ procheader_get_one_field()
+ procheader_get_unfolded_line(): fixed a bug that unfolding was
+ broken if the sequence 'SP CR LF' appeared (thanks to NOGUCHI,
+ Takuya).
+
+2004-06-23
+
+ * src/prefs_common.c: made the default of confirm_on_exit FALSE.
+
+2004-06-23
+
+ * src/menu.[ch]: added menu_set_active().
+ * src/compose.c: don't change 'View/Auto wrapping' mode when selecting
+ accounts.
+
+2004-06-23
+
+ * src/compose.[ch]: autowrap can be switched on/off from the compose
+ window.
+
+2004-06-17
+
+ * version 0.9.12
+
+2004-06-17
+
+ * src/session.c: session_set_timeout(): fixed a bug that didn't
+ reset timeout_tag when interval is 0.
+
+2004-06-16
+
+ * src/gtkstext.c: gtk_stext_update_text(): added null checking for
+ cache (thanks to Jim Hranicky).
+
+2004-06-15
+
+ * src/defs.h: increased CACHE_VERSION to work around the
+ incompatibility of the cache on some platforms (ex. FreeBSD).
+ * src/procmsg.c: procmsg_read_cache(): discard all read cache data
+ if an error occurred.
+
+2004-06-10
+
+ * src/summaryview.[ch]: hide 'Re-edit' menu when it's unusable.
+
+2004-06-08
+
+ * src/inc.[ch]
+ src/send_message.c
+ src/session.[ch]: implemented session timeout.
+ * src/pop.h: removed unused values from Pop3ErrorValue.
+
+2004-06-07
+
+ * src/inc.c: inc_all_account_mail(): code cleanup.
+
+2004-06-03
+
+ * src/procmsg.c: procmsg_read_cache_data_str(): changed gint32 to
+ guint32 for some platforms.
+ * src/summaryview.c: restored 'Print' menu.
+
+2004-06-01
+
+ * src/about.c: modified copyright year.
+
+2004-05-28
+
+ * version 0.9.11
+
+2004-05-21
+
+ * src/smtp.c: comply with RFC 2821 (thanks to Alfons).
+
+2004-05-20
+
+ * src/folderview.[ch]: implemented spring-loaded folder.
+
+2004-05-20
+
+ * src/folderview.c: folderview_button_pressed(): enable menu item
+ 'Search messages...' only when opened folder is selected.
+
+2004-05-19
+
+ * src/compose.c
+ src/prefs_common.[ch]: removed the option "Queue messages that fail
+ to send".
+
+2004-05-18
+
+ * src/summaryview.c: cleaned up the context menu.
+ * src/mainwindow.c: changed the position of '/Message/Re-edit'
+ menuitem.
+
+2004-05-12
+
+ * src/procmsg.[ch]: fixed the type of integer value in cache data
+ to g(u)int32.
+
+2004-05-11
+
+ * src/nntp.c: nntp_get_article(): ignore the protocol error of
+ response for some broken news servers (thanks to Davide Scola).
+
+2004-05-11
+
+ * src/gtkutils.[ch]: added gtkut_editable_disable_im().
+ * src/passphrase.c: disable XIM on entering passphrase.
+
+2004-05-11
+
+ * src/compose.c
+ src/folderview.c
+ src/inc.c
+ src/prefs_display_header.c
+ src/procmsg.h: fixed for AMD64 (and other 64-bit platforms)
+ (thanks to Hiroyuki Ikezoe).
+
+2004-05-10
+
+ * src/inc.[ch]: don't use gtk_timeout_add(), instead use
+ gettimeofday() (to prevent infrequent lockup).
+
+2004-03-19
+
+ * src/defs.h
+ src/inc.[ch]: changed the method of updating the progress dialog
+ to reduce the overhead on a fast network.
+
+2004-03-16
+
+ * src/nntp.c: nntp_session_new(): attempt to authenticate at the
+ beginning of a session (thanks to Shiino Yuki and IWAMOTO, Kouichi).
+ * src/news.c
+ src/nntp.c: destroy session when socket error occurred.
+
+2004-03-12
+
+ * src/mainwindow.c
+ src/summaryview.[ch]: added a function to filter selected
+ messages.
+
+2004-03-12
+
+ * src/filter.[ch]
+ src/prefs_filter.c: rewrote the filtering system (the UI is not
+ implemented yet).
+
+2004-03-09
+
+ * src/filter.c: fixed the matching algorithm of "not contain" flag
+ (also match if a header not exist, and handle same multiple
+ headers).
+ * src/imageview.c: get_resized_size(): fixed a typo that caused
+ resizing problem.
+
+2004-03-02
+
+ * src/folder.c
+ src/mh.c: only update FolderItem::last_num when removing the last
+ number of message in MH folders, and don't scan in other case
+ (fixes wrong message count on moving).
+
+2004-03-02
+
+ * src/folderview.c
+ src/summaryview.c: always move messages by default when using DnD
+ (except for News folder). Copy messages if Ctrl-key is pressed.
+ * src/mainwindow.c: main_window_empty_trash()
+ src/summaryview.c: summary_execute(): added missing
+ statusbar_pop_all().
+
+2004-02-29
+
+ * version 0.9.10
+
+2004-02-26
+
+ * src/prefs_common.c: made the default of "inc_local" FALSE.
+
+2004-02-26
+
+ * src/account.c
+ src/folderview.c: toggle online mode when checking IMAP4 accounts.
+ Pop status bar after that.
+ * src/inc.c: code cleanup.
+ * src/mainwindow.[ch]: added main_window_get() and
+ main_window_toggle_online_if_offline().
+ * src/prefs_common.c: prefs_common_read_config(): fixed a bug that
+ made it offline mode on first execution.
+
+2004-02-25
+
+ * src/imageview.c: enabled automatic resize on window resize.
+ restrict the minimum size to 16 pixels to prevent crash.
+ imageview_init(): don't cache images when using imlib.
+ imageview_show_image(): fixed memory leak.
+ * src/mimeview.c: mimeview_init(): call imageview_init().
+
+2004-02-24
+
+ * src/codeconv.[ch]: added ISO-2022-JP-3 encoding.
+
+2004-02-24
+
+ * src/codeconv.c
+ src/mainwindow.c
+ src/messageview.c: added KOI8-U encoding.
+ * src/prefs_common.c: prefs_message_create(): modified the string
+ of resizing image option.
+
+2004-02-19
+
+ * src/addressbook.c: addressbook_list_selected(): corrected its
+ argument.
+ * src/imageview.[ch]: keep original image data in ImageView, and
+ enabled the toggle of resizing.
+ * src/messageview.[ch]
+ src/mimeview.[ch]: handle ImageView in MimeView instead of
+ MessageView.
+
+2004-02-16
+
+ * src/imap.c
+ src/news.c
+ src/summaryview.c: removed statusbar_pop_all() from imap.c and
+ news.c (do it in summaryview.c).
+
+2004-02-12
+
+ * src/inc.[ch]
+ src/pop.[ch]: made inc_drop_message() the virtual function of
+ Pop3Session and removed the dependency of pop.c on inc.h.
+
+2004-02-12
+
+ * src/mainwindow.c
+ src/messageview.[ch]
+ src/textview.c: added statusbar to the message view with new window.
+
+2004-02-10
+
+ * src/inc.[ch]: use hash table for progressive update.
+ changed update interval to 2 sec.
+ * src/folder.[ch]
+ src/mh.c
+ src/procmsg.c
+ src/summaryview.c: added FolderItem::unmarked_num to correct the
+ folder message counting.
+
+2004-02-09
+
+ * src/inc.[ch]: update folderview progressively.
+ * src/foldersel.c: display full id for selected item.
+
+2004-02-06
+
+ * src/folderview.[ch]: code cleanup.
+ folderview_append_item(): new. It appends the folder to the folder
+ view.
+ * src/foldersel.c: foldersel_new_folder(): use
+ folderview_append_item().
+
+2004-02-06
+
+ * src/foldersel.c: implemented 'create new folder' function.
+ * src/folder.[ch]: folder_find_child_item_by_name(): new.
+ * src/utils.h: AUTORELEASE_STR(): convert malloc'd string into
+ auto-release (alloca'd) one.
+
+2004-02-05
+
+ * src/folderview.c: put together folderview_new_imap_folder_cb() into
+ folderview_new_folder_cb().
+
+2004-02-04
+
+ * src/compose.c: compose_write_to_file(): removed redundant strlen()
+ (thanks to Alfons).
+ * src/textview.c: textview_button_pressed(): select correct account
+ when address is clicked.
+
+2004-01-29
+
+ * version 0.9.9
+
+2004-01-29
+
+ * src/folder.c: folder_item_fetch_all_msg()
+ src/folderview.c: folderview_download_cb(): show progress with
+ the progressbar.
+ * src/mainwindow.[ch]: added new functions for progressbar.
+
+2004-01-29
+
+ * src/summaryview.c: summary_key_pressed(): GDK_Left should only
+ switch to folderview when summaryview hscrollbar is at the leftmost
+ position (thanks to Alfons).
+
+2004-01-29
+
+ * src/codeconv.c: conv_euctojis(): made JIS X 0201 Kana conversion
+ configurable.
+ * src/prefs_common.[ch]: added PrefsCommon::allow_jisx0201_kana
+ (hidden setting).
+
+2004-01-28
+
+ * src/codeconv.c: conv_euctojis(): force JIS X 0201 Kana to JIS X 0208
+ conversion.
+
+2004-01-28
+
+ * src/imap.c: imap_get_msginfo(): fixed wrong counting.
+
+2004-01-28
+
+ * src/base64.c
+ src/codeconv.c
+ src/compose.c
+ src/html.c
+ src/imap.c
+ src/pop.c
+ src/prefs_account.c
+ src/procmime.c
+ src/procmsg.c
+ src/quote_fmt_parse.y
+ src/quoted-printable.c
+ src/textview.c
+ src/unmime.c
+ src/utils.c
+ src/utils.h
+ src/xml.c: fixed wrong type of argument for ctype functions (char
+ had been passed instead of unsigned char).
+
+
+2004-01-27
+
+ * src/mainwindow.[ch]: added MainWindow::messageview_cid.
+ Clear messageview when it is hidden.
+ * src/textview.c: show URL to the statusbar when its link is clicked.
+ textview_uri_security_check(): compare real URL and apparent one
+ and show warning if it seems to be a fake URL.
+ * src/utils.[ch]:
+ is_uri_string(): return TRUE if the string seems like a URL.
+ get_uri_path(): return URL except for its scheme part.
+
+2004-01-23
+
+ * src/folder.[ch]: folder_item_fetch_all_msg(): new. It fetches all
+ messages in a folder.
+ * src/folderview.c: implemented 'Download' feature.
+
+2004-01-23
+
+ * src/gtkutils.[ch]: implemented ComboButton which adds an arrow
+ menu button to a button.
+ * src/mainwindow.[ch]: main_window_toolbar_create(): added combo
+ button to reply and forward button.
+
+2004-01-22
+
+ * src/mainwindow.c: fixed automatic expansion of window size because
+ of toolbar.
+
+2004-01-21
+
+ * src/addr_compl.[ch]
+ src/gtkshruler.[ch]: changed the copyright notice.
+
+2004-01-20
+
+ * src/gtkstext.c: find_line_params(): also break between mutlibyte
+ and single-byte characters.
+
+2004-01-20
+
+ * src/gtkstext.c: find_line_params(): break lines between multibyte
+ characters on word wrap mode.
+
+2004-01-05
+
+ * src/codeconv.c: conv_iconv_strdup(): fixed crashes on LP64
+ environments (thanks to James Noyes).
+ * src/compose.c: compose_select_account(): don't turn off the sign/
+ encrypt option automatically.
+
+2003-12-17
+
+ * src/inc.[ch]: made inc_account_mail() public.
+ * src/mainwindow.c: moved receive menus into submenu, and added
+ dynamic menus for receiving from each account.
+
+2003-12-15
+
+ * version 0.9.8a
+
+2003-12-15
+
+ * src/procmsg.c: procmsg_open_data_file(): set buffer if DATA_READ
+ is specified and a buffer is given.
+ procmsg_open_cache_file_with_buffer(): new.
+ procmsg_read_cache(): fixed a bug that called setvbuf() after an
+ file I/O which caused buffer read error.
+
+2003-12-12
+
+ * version 0.9.8
+
+2003-12-12
+
+ * configure.in: enable IPv6 support by default.
+
+2003-12-11
+
+ * src/inc.c: inc_mail(), inc_all_account_mail(): ask user to switch
+ to online when in offline mode.
+ * src/mainwindow.h: added main_window_toggle_online().
+
+2003-12-11
+
+ * src/foldersel.c
+ src/folderview.[ch]
+ src/mainwindow.c
+ src/stock_pixmap.[ch]
+ src/pixmap/dir-noselect.xpm: made no-select folders display with
+ dim icon and string.
+ * src/Makefile.am: added offline.xpm, online.xpm, and
+ dir-noselect.xpm to EXTRA_DIST.
+
+2003-12-11
+
+ * src/folder.h: added macro FOLDER_ITEM_CAN_ADD().
+ * src/folderview.c: folderview_drag_motion_cb(): code cleanup.
+ folderview_drag_received_cb(): don't accept at no_select folder or
+ from itself.
+ * src/foldersel.c: made folders on which no_select flag is set not
+ selectable.
+
+2003-12-10
+
+ * src/imap.c: imap_do_copy_msgs(), imap_remove_msgs(): code cleanup.
+ set MSG_INVALID flag when messages are deleted.
+ * src/mh.c: mh_do_move_msgs(), mh_remove_msg(): set MSG_INVALID flag
+ when messages are deleted.
+ * src/procmsg.[ch]:
+ procmsg_move_messages()
+ procmsg_copy_messages(): return error status.
+ Added MSG_INVALID to MsgTmpFlags.
+ * src/summaryview.c: summary_execute(): detect errors and only remove
+ nodes that are invalidated.
+ summary_unthread_for_exec(): fixed a bug that didn't remove nodes
+ in collapsed trees.
+
+2003-12-06
+
+ * src/mainwindow.[ch]: added online switch button to the statusbar,
+ and "/File/Work offline" in the menu.
+ * src/pixmaps/offline.xpm
+ src/pixmaps/online.xpm: new (borrowed from
+ themes/classic/communicator/icons/ in Mozilla).
+ * src/stock_pixmap.[ch]: added online.xpm and offline.xpm.
+ * src/textview.[ch]: textview_show_error(): new.
+ * src/summaryview.c: summary_display_msg_full(): update marks only
+ if messages are displayed.
+ * src/prefs_common.[ch]: added PrefsCommon::online_mode.
+ * src/news.c: news_session_get()
+ src/imap.c: imap_session_get(): return NULL when in offline mode.
+ * src/messageview.[ch]: messageview_show(): return status whether
+ messages are successfully displayed. Display error messages in
+ the view when failed.
+ * src/procmsg.c:
+ procmsg_get_message_file()
+ procmsg_open_message(): don't output warnings when fetch failed.
+
+2003-12-04
+
+ * src/html.c: html_get_tag(): support attributes which don't have
+ values.
+
+2003-12-04
+
+ * src/codeconv.c: conv_get_code_conv_func(): return conv_latintodisp
+ only if src_charset and current charset is identical or current
+ one is multibyte (fixes display of ISO-8859-5 on KOI8-R locale etc.).
+
+2003-11-25
+
+ * autogen.sh: don't include m4 directory in aclocal.
+ * intl/libgnuintl.h: removed from cvs.
+ * po/.cvsignore: added stamp-po and remove-potcdate.sed.
+
+2003-11-24
+
+ * upgraded to gettext-0.12.1.
+
+2003-11-24 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.am (SUBDIRS): Add m4.
+ (ACLOCAL_AMFLAGS): New variable.
+ (EXTRA_DIST): Add config.rpath.
+ * configure.in (AC_OUTPUT): Add m4/Makefile.
+
+2003-11-21
+
+ * configure.in: added check for d_type member in struct dirent.
+ * src/mh.c: mh_scan_folder(): use d->d_type if available.
+ mh_get_uncached_msgs(): removed redundant stat().
+ mh_parse_msg(): return NULL if not a regular file.
+ mh_scan_tree_recursive(): use d->d_type if available.
+ * src/utils.[ch]:
+ dirent_is_regular_file()
+ dirent_is_directory(): new. Use d->d_type to determine the type
+ of entry if available.
+ remove_dir_recursive(): use dirent_is_directory().
+
+2003-11-14
+
+ * src/folder.h: added 'updated' flag to FolderItem.
+ * src/folderview.[ch]: folderview_update_all_updated(): new. It
+ updates all updated folders.
+ * src/imap.c: set FolderView::update flag on changes of contents.
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb(): code cleanup.
+ * src/mh.c: code cleanup.
+ mh_scan_folder(): correctly count new messages.
+ * src/procmsg.[ch]: code cleanup.
+ procmsg_open_cache_file(): new.
+ procmsg_open_mark_file(): enable read/write/append.
+ procmsg_send_queue(): correctly choose outbox for accounts.
+ * src/send_message.[ch]: send_get_queue_info(): get a queue
+ information from queued messages.
+ send_queue_info_free(): free QueueInfo.
+ send_message_queue(): take QueueInfo as an argument instead of file.
+ * src/summaryview.c: summary_write_cache(): code cleanup.
+
+2003-11-10
+
+ * src/compose.c: compose_redirect_write_headers(): correctly add
+ Resent-Cc: header.
+
+2003-11-05
+
+ * src/imap.c: imap_get_msg_list(): fallback to FETCH command if SEARCH
+ command to get flags failed.
+ imap_search_flags(): returns UID array and flags hash table using
+ SEARCH command.
+ imap_fetch_flags(): returns UID array and flags hash table using
+ FETCH command.
+
+2003-10-28
+
+ * src/summary_search.c: summary_search_execute(): fixed 'Select all
+ matched' when backward search is enabled.
+ Made the backward search button insensitive when 'select all
+ matched' is enabled.
+
+2003-10-15
+
+ * version 0.9.7
+
+2003-10-15
+
+ * src/imap.c: imap_scan_tree(): check the existence of root directory
+ with LIST instead of STATUS.
+
+2003-10-07
+
+ * src/send_message.c: fixed format string bug (exploitable by
+ malicious SMTP server) when calling alertpanel_error()
+ (thanks to Georgi Guninski).
+
+2003-10-03
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/news.[ch]: refactoring of the folder system (based on the claws'
+ implementation).
+ * src/account.c
+ src/foldersel.c
+ src/folderview.c
+ src/mainwindow.c
+ src/messageview.c
+ src/procmsg.c
+ src/setup.c
+ src/summaryview.c: use FOLDER_TYPE() macro at every place.
+
+2003-09-17
+
+ * version 0.9.6
+
+2003-09-17
+
+ * src/addressbook.c:
+ addressbook_folder_load_person()
+ addressbook_folder_load_group(): sort the ctree after the end of
+ the loop (fixes performance issue when many addresses are in one
+ folder) (thanks to christian mock).
+
+2003-09-16
+
+ * src/folderview.c: folder_init(): code cleanup.
+ * src/summaryview.c: summary_init(): check if boldfont is
+ successfully loaded.
+ * src/grouplistdialog.c: use proper callback for delete_event (thanks
+ to Takuro Ashie).
+ * src/imap.c: allow zero-length messages.
+ * src/recv.c: recv_bytes_write(): return immediately if size == 0.
+
+2003-09-16
+
+ * src/folderview.c: folderview_init(): if font can't be loaded, fall
+ back to gtk default (fixes crashes on startup). Also removed the
+ redundant code.
+
+2003-09-15
+
+ * src/compose.c: compose_insert_sig(): insert signature at the
+ current cursor position on manual operation.
+
+2003-09-11
+
+ * src/summaryview.c: summary_key_pressed(): don't ignore delete key
+ even if the main window is locked.
+
+2003-09-10
+
+ * src/action.c: improved synchronous action exit code (fixes long
+ delay after action exit on RH9) (thanks to Melvin).
+ * src/stringtable.[ch]: string_table_insert_string(): modified the
+ code to remove the warning "dereferencing type-punned pointer will
+ break strict-aliasing rules".
+ Use const gchar * instead of gchar * for arguments.
+
+2003-09-05
+
+ * src/utils.[ch]: generate_mime_boundary(): a new function to create
+ MIME boundary (moved from rfc2015.c).
+ Removed more special characters.
+ Use random() instead of lrand48() which is obsolete.
+ Added an argument for prefix to prevent duplication.
+ Always add "=_" as a counter-QP sequence to simplify the code.
+ * src/rfc2015.c:
+ rfc2015_decrypt_message()
+ rfc2015_encrypt()
+ rfc2015_sign(): fixed a bug that didn't handle continuous content
+ lines correctly.
+ * src/compose.c
+ src/rfc2015.c: use generate_mime_boundary().
+
+2003-09-05
+
+ * src/folderview.c:
+ folderview_delete_folder_cb()
+ folderview_remove_mailbox_cb(): close currently displayed folder
+ before removing FolderItem (fixes crash on deleting folder).
+ * src/folder.h
+ src/imap.[ch]: imap_scan_tree()
+ src/mh.[ch]: mh_scan_tree(): return -1 when scanning failed.
+ * src/summaryview.c: summary_clear_all(): also clear the message view.
+ * src/imap.c: imap_close(): fail if the specified folder is not
+ selected.
+ imap_scan_tree(): check if the specified root directory exist, and
+ try creating it if not.
+ imap_parse_list(): output warning if a server returns error.
+ imap_find_namespace_from_list(): support not slash-delimited path.
+ imap_status(): don't return values if they're not specified.
+
+2003-09-02
+
+ * sylpheed.spec.in: fixed a typo.
+
+2003-09-02
+
+ * version 0.9.5
+
+2003-09-01
+
+ * src/inc.[ch]
+ src/main.c
+ src/mainwindow.c
+ src/prefs_common.[ch]: added the receive dialog's option to
+ display the dialog only on manual receiving, and the
+ RECV_DIALOG_ACTIVE option was removed.
+
+2003-09-01
+
+ * src/compose.c: compose_write_headers(): also replace ':' in the
+ MIME boundary with '_' (as a workaround for broken servers).
+
+2003-08-28
+
+ * src/imap.c: imap_scan_tree_recursive(): fixed compile error.
+
+2003-08-27
+
+ * src/prefs_filter.c: added 'Top' and 'Bottom' button.
+
+2003-08-26
+
+ * src/folder.[ch]: folder_item_remove_children(): new. It removes
+ all children under a FolderItem.
+ * src/folderview.c: folderview_rescan_tree(): modified the message.
+ * src/imap.c: imap_scan_tree(), imap_scan_tree_recursive(): reuse
+ the previous FolderItem objects.
+
+2003-08-25
+
+ * src/folder.[ch]: added a reference to its own GNode in FolderItem.
+ folder_item_remove(): free all FolderItem's.
+ folder_tree_destroy(): use folder_item_remove().
+ * src/folderview.c: folderview_sort_folders(): keep the order even
+ if special folders' parents are different.
+ * src/imap.c: imap_scan_tree_recursive(): fixed a memory leak.
+ * src/mh.c: mh_scan_tree(): preserve the previous FolderItem's.
+ mh_remove_missing_folder_items(): scan the directories and remove
+ missing folders.
+ mh_scan_tree_recursive(): reuse the previous FolderItem objects.
+
+2003-08-20
+
+ * src/mainwindow.c: always reflect window size changes.
+ * src/folderview.c: folderview_init()
+ src/summaryview.c: summary_init(): realize the widget before
+ creating pixmaps.
+ * src/prefs_common.[ch]: remember the folder and mesage view's
+ visibility.
+
+2003-08-07
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: remember the size and position of
+ separated views.
+ main_window_set_widgets(): fixed a bug that the hidden items on
+ the header view were shown when changing the view type.
+ Instead of setting the window size, set the each view's size.
+
+2003-08-01
+
+ * src/compose.c: compose_select_account(): don't append signature
+ on redirect mode.
+ compose_insert_sig(): don't insert "\n\n" if signature string
+ doesn't exist. Always insert signature at the end of message.
+
+2003-08-01
+
+ * improved sylpheed.spec.in (thanks to Andre Oliveira da Costa).
+
+2003-07-31
+
+ * minor code cleanups for the folder system.
+ * src/compose.c: compose_queue(), compose_draft_cb(): code cleanup.
+ * src/folder.c: code cleanups.
+ * src/imap.c
+ src/mh.c: calculate message numbers inside the functions.
+ * src/procmsg.c: procmsg_set_flags(): calculate message numbers.
+ * src/summaryview.[ch]: don't calculate and preserve message numbers
+ inside SummaryView,
+
+2003-07-30
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/procmsg.c
+ src/summaryview.c: renamed *_msgs_with_dest() to *_msgs().
+
+2003-07-29
+
+ * src/imap.[ch]: use CAPABILITY to use protocol extentions.
+ imap_greeting(): parse initial server greeting. Also support
+ PREAUTH response.
+ imap_add_msgs()
+ imap_cmd_append(): use APPENDUID responses if UIDPLUS is supported.
+
+2003-07-28
+
+ * src/imap.c: imap_get_flag_str(): fixed a buffer overrun.
+
+2003-07-25
+
+ * version 0.9.4
+
+2003-07-25
+
+ * src/main.c: main(): don't save config files on startup.
+
+2003-07-25
+
+ * src/imap.c:
+ imap_get_msg_list(): removed redundant UID SEARCH ALL when not
+ using cache.
+ Unset MSG_NEW flag if \Seen is set.
+ imap_get_uncached_messages(): fetch all messages if both first_uid
+ and last_uid is 0.
+
+2003-07-24
+
+ * src/imap.c: revamped the implementation so that it always
+ exactly reflects the state of IMAP4 servers.
+ imap_get_msg_list(): examine the state of messages using
+ UID SEARCH commands.
+ imap_delete_cached_message(): removes single message cache.
+ imap_get_uid(): removed.
+ imap_cmd_search(): new. It issues UID SEARCH command and returns
+ an array of UIDs.
+ imap_cmd_gen_recv(): made the length of strings unrestricted.
+ imap_get_uid_table(): returns a hash table from UID array.
+
+2003-07-24
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/news.[ch]: added Folder::close() method.
+ * src/summaryview.c: summary_clear_list(): call folder_item_close().
+
+2003-07-23
+
+ * flags are now taken over when copying messages into IMAP folders
+ from others.
+ * src/imap.[ch]
+ src/mh.[ch]
+ imap_add_msg()
+ imap_add_msgs()
+ mh_add_msg()
+ mh_add_msgs(): flags can be also specified when adding files.
+ * src/folder.[ch]: added assertions for virtual functions.
+ * src/procmsg.[ch]: procmsg_get_message_file_list(): return the list
+ of MsgFileInfo.
+ procmsg_message_file_list_free(): new.
+
+2003-07-23
+
+ * src/procmsg.h: changed MsgPermFlags and MsgTmpFlags from enum to
+ guint32 for portability (thanks to Alfons).
+ * src/imap.c: imap_add_msgs(): removed redundant unlink().
+
+2003-07-22
+
+ * src/session.[ch]:
+ session_read_msg_cb()
+ session_read_data_cb(): fixed a bug that ran into infinite loop
+ if connection was closed by remote host (thanks to Yoichi Imai).
+ Added SESSION_EOF state to SessionState.
+ session_is_connected(): new.
+ * src/inc.[ch]: inc_put_error()
+ src/send_message.c: send_put_error(): also put log messages.
+
+2003-07-18
+
+ * more optimization of IMAP4.
+ * src/folder.[ch]: added a method add_msgs() that adds multiple files
+ to a folder.
+ Removed redundant scan() for the operations of FolderItem.
+ * src/imap.[ch]: implemented Folder::add_msgs() and optimized move
+ and copy from other Folder instances.
+ * src/mh.[ch]: implemented Folder::add_msgs() and cleaned up the code.
+ mh_fetch_msg(): scan folder if required.
+ * src/procmsg.[ch]: procmsg_get_message_file_list(): returns file
+ list from message list.
+ * src/summaryview.c: don't remove MSG_MARKED flags on
+ delete/move/copy operation.
+ summary_display_msg_full(): removed redundant message fetching.
+
+2003-07-17
+
+ * optimized move/copy/delete/mark operations of IMAP4 by using
+ sequence set when issuing commands (adopted claws' implementation
+ with cleaning it up).
+ * src/imap.[ch]:
+ imap_set_message_flags()
+ imap_cmd_envelope()
+ imap_cmd_copy()
+ imap_cmd_store(): take sequence set string instead of UID number.
+ imap_do_copy_msgs_with_dest(): optimized by using sequence set.
+ imap_cmd_fetch(): use BODY.PEEK instead of BODY.
+ imap_remove_all_msg()
+ imap_set_message_flags(): use FLAGS.SILENT instead of FLAGS.
+ * src/compose.c
+ src/summaryview.c: use imap_msg_list_{set,unset}_perm_flags()
+ instead of issuing commands for each message.
+
+2003-07-15
+
+ * src/inc.c
+ src/prefs_account.[ch]
+ src/send_message.c
+ src/session.[ch]: added an option to enable/disable non-blocking
+ SSL.
+
+2003-07-15
+
+ * src/compose.c: compose_attach_append(): display message's subject
+ when attaching message/rfc822 file.
+
+2003-07-14
+
+ * src/session.[ch]:
+ session_recv_msg()
+ session_recv_data()
+ session_read_msg_cb()
+ session_read_data_cb(): optimized by removing sock_peek() and
+ buffering received data in user space (correctly implemented
+ this time).
+
+2003-07-11
+
+ * src/session.c: reverted the previous change because it couldn't
+ handle data receiving after messages correctly.
+
+2003-07-11
+
+ * src/session.c:
+ session_recv_msg()
+ session_read_msg_cb(): optimized by removing sock_peek() and
+ buffering messages in user space.
+
+2003-07-11
+
+ * src/imap.[ch]: refactored.
+ Changed all functions that have SockInfo arguments to take
+ IMAPSession.
+ Made imap_cmd_count an instance variable: IMAPSession::cmd_count.
+ imap_open(): only establish TCP (or SSL) connection.
+ imap_session_new(): process greeting and authentication here.
+
+2003-07-10
+
+ * src/imap.[ch]: implemented CRAM-MD5 authentication, and made code
+ cleanups.
+ * src/prefs_account.[ch]: added option menu for IMAP4 authentication
+ type in Receive tab, and hide other protocols' frames.
+
+2003-07-10
+
+ * src/mainwindow.c: send_queue_cb(): don't scan folder twice if
+ error occurred.
+ * src/procmsg.c: procmsg_send_queue(): return number of sent
+ messages.
+
+2003-07-09
+
+ * src/mainwindow.c:
+ main_window_set_toolbar_sensitive()
+ main_window_set_menu_sensitive(): removed the locking of file
+ operations while receiving mail.
+
+2003-07-09
+
+ * src/folder.[ch]: folder_item_remove_msg(): take MsgInfo as an
+ argument instead of message number.
+ * src/imap.[ch]: imap_remove_msg(): reimplemented using
+ imap_remove_msgs().
+ * src/mh.[ch]: mh_do_move(): reimplemented using
+ mh_do_move_msgs_with_dest().
+ mh_copy_msg(): reimplemented using mh_copy_msgs_with_dest().
+ * src/procmsg.c: procmsg_send_queue(): modified to use message list.
+
+2003-07-08
+
+ * src/rfc2015.c: rfc2015_is_encrypted(): check MimeInfo::mime_type
+ to suppress some warnings.
+ * src/logwindow.c: log_window_append(): don't scroll up when trimming
+ lines.
+
+2003-07-07
+
+ * src/compose.c: add 'Content-Disposition: inline' to a text/plain
+ part when using PGP/MIME signing.
+
+2003-07-04
+
+ * version 0.9.3
+
+2003-07-04
+
+ * src/defs.h: changed UI_REFRESH_INTERVAL from 40msec to 50msec.
+ * src/session.c: session_read_msg_cb(): make it always fail if
+ sock_read() returns by error.
+ * src/socket.[ch]: sock_check(): handle exceptional SSL condition.
+ sock_has_pending_data(): removed.
+ Removed debug output.
+ * src/send_message.c: send_recv_message(): display messages to
+ statusbar.
+
+2003-07-03
+
+ * src/inc.[ch]: update received message number on CList while
+ retrieving.
+ * src/session.c: session_read_data_cb(): optimized by removing
+ g_malloc() and memcpy().
+
+2003-07-02
+
+ * src/socket.[ch]: sock_add_watch(): new. It monitors SSL by original
+ watch functions (otherwise uses g_io_add_watch()).
+ * src/session.[ch]: removed previous workarounds, and replaced
+ g_io_add_watch() with sock_add_watch().
+
+2003-07-01
+
+ * src/socket.[ch]: added sock_has_pending_data() which returns TRUE
+ if socket has pending data.
+ * src/session.c: session_recv_msg(), session_recv_data(): check if
+ socket has pending data and call the callbacks immediately in that
+ case (fixes the hang at ESMTP EHLO on SSL).
+
+2003-06-30
+
+ * src/socket.c: check return value in SSL functions.
+
+2003-06-30
+
+ * src/mimeview.c: mimeview_init(): initialize TextView to prevent
+ slowdown caused by GTK+ themes (thanks to Yuri Arapov).
+
+2003-06-27
+
+ * src/session.c: session_read_data_cb(): clear Session::read_data_buf
+ before calling callbacks.
+
+2003-06-26
+
+ * src/socket.c: made socket connection protocol independent.
+ * src/session.c: removed debug g_print().
+ * src/inc.c: made status bar output less verbose, and show counter
+ on main window's progressbar.
+
+2003-06-26
+
+ * src/session.c: added missing #include <errno.h>.
+
+2003-06-25
+
+ * src/session.[ch]: reimplemented the Session system with non-blocking
+ I/O to solve the performance and the code design issue.
+ * src/socket.[ch]: added sock_connect_async() and
+ sock_connect_async_cancel() to enable asynchronous connection.
+ sock_peek(): modified the implementation.
+ * src/pop.c: optimized the receiving of the responses of
+ UIDL/LIST/RETR.
+
+2003-06-18
+
+ * src/procmsg.c: procmsg_get_thread_tree(): prevent threading problems
+ when a node is an ancestor (parent / great parent), which mostly
+ happens with circular references (thanks to Phillipe Gramoulle
+ for finding an sample set of messages, and Alfons for the patch).
+
+2003-06-16
+
+ * src/pop3.c: pop3_get_uidl_table(): return empty hash table even if
+ UIDL list is not found (fixes inability of initial retrieval).
+
+2003-06-10
+
+ * src/main.c: added the option '--status-full' which shows the status
+ of each folder specified. The option '--status' also takes
+ following arguments for folders (thanks to Yuri Arapov).
+ * src/folder.[ch]: folder_get_status(): new. it takes the array of
+ folders as the argument and returns their status.
+ folder_count_total_msgs(): removed.
+
+2003-06-06
+
+ * version 0.9.2
+
+2003-06-06
+
+ * src/filesel.c
+ src/foldersel.c
+ src/inputdialog.c: use gtk_main_iteration() instead of gtk_main()
+ to prevent abort when a button is double-clicked.
+
+2003-06-02
+
+ * src/addr_compl.c: invalidate_address_completion(): check if
+ g_completion_list is NULL (thanks to Kazuhiro NISHIYAMA).
+
+2003-06-02
+
+ * src/pop.c: pop3_session_recv_data_finished(): fixed a bug that
+ deleted messages that is to be kept on server (thanks to Tristan
+ Wallis).
+
+2003-05-27
+
+ * version 0.9.1
+
+2003-05-26
+
+ * src/socket.[ch]:
+ sock_set_io_timeout(): new. It sets the timeout interval.
+ sock_gdk_input_add(): removed since it's not used anymore.
+ * src/prefs_common.[ch]: added an option to set the timeout parameter.
+
+2003-05-26
+
+ * src/action.c: fixed a bug that didn't hide user string in
+ create_io_dialog() (thanks to Markus Amersdorfer).
+ Removed ChildInfo::type and added Children::action_type.
+
+2003-05-23
+
+ * src/inc.c: inc_start(): ask every password before retrieving.
+ Don't popup the redundant error dialog.
+ inc_account_mail()
+ inc_all_account_mail()
+ inc_progress_dialog_set_list(): separated account list display
+ into a new function.
+ inc_progress_dialog_set_label()
+ inc_recv_data_finished()
+ inc_recv_message(): properly update the dialog when RETR finished.
+
+2003-05-22
+
+ * src/imap.c:
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): fixed compilation failure when not
+ using iconv().
+
+2003-05-21
+
+ * src/procmime.c: procmime_scan_multipart_message(): fixed parsing
+ of message/rfc822 parts.
+
+2003-05-21
+
+ * src/pop.c: pop3_ok(): detect timeout error.
+
+2003-05-20
+
+ * src/imap.c: imap_locale_to_modified_utf7(): fixed the encoding bug
+ when locale strings include '+'.
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): at least escape/unescape '&' even
+ if iconv() is not supported.
+
+2003-05-20
+
+ * src/compose.c:
+ compose_insert_sig()
+ compose_get_signature_str(): include separator in signature string.
+ Don't insert separator if signature file is not found.
+ Disabled use of implicit default signature path (~/.signature) when
+ sig_path is NULL.
+
+
+2003-05-20
+
+ * src/codeconv.c
+ src/gtkshruler.c
+ src/news.c
+ src/procmsg.c
+ src/quote_fmt_parse.y
+ src/smtp.c: suppress warnings that gcc-3.3 issues.
+ src/stringtable.c: use string_entry_free().
+
+2003-05-19
+
+ * src/compose.c: compose_insert_sig(): fixed the bug that always
+ appended signature separator if signature file was not found.
+ compose_get_signature_str(): fixed the bug that caused crash if
+ signature file cannot be opened.
+
+2003-05-16
+
+ * version 0.9.0
+
+2003-05-16
+
+ * src/session.c: session_recv_msg(): removed debug print.
+
+2003-05-15
+
+ * src/imap.c:
+ imap_parse_atom()
+ imap_get_header()
+ imap_cmd_fetch(): check for data size that servers return (fixes
+ vulnerability found in BugTraq).
+
+2003-05-14
+
+ * src/addr_compl.c: get_complete_address()
+ src/addressbook.c: addressbook_format_address()
+ src/compose.c: QUOTE_IF_REQUIRED(): quote if name contains
+ characters that is not defined in atext (RFC 2822, 3.2.4. Atom).
+ * src/main.c: main(): set colormap and visual to solve color problem
+ in Solaris (thanks to Markus Schwarzenberg).
+
+2003-05-12
+
+ * version 0.9.0pre1
+
+2003-05-12
+
+ * src/prefs_account.c: temporarily removed POP before SMTP option.
+
+2003-05-09
+
+ * src/prefs_common.[ch]: changed the description of "Open message when
+ cursor keys are pressed on summary".
+ * src/summaryview.c: summary_show(): open message when always_show_msg
+ is TRUE.
+
+2003-05-09
+
+ * src/logwindow.[ch]: restrict the maximum lines of the log messages
+ to reduce the memory usage.
+
+2003-05-07
+
+ * src/compose.c: compose_insert_sig(): fixed a crash when signature
+ string contains illegal sequence.
+ * src/utils.[ch]: changed get_wcs_len() to get_mbs_len() for accuracy.
+
+2003-05-07
+
+ * major refactoring of MIME structure.
+ * src/procmime.c: procmime_scan_message(): decrypt message if
+ gpgme is enabled. Create multipart tree only if content-type is
+ multipart/* or message/rfc822.
+ procmime_scan_multipart_message(): fixed the scanning of
+ message/rfc822 part.
+ * src/action.c: parse_append_msgpart()
+ src/messageview.c: messageview_show()
+ src/mimeview.c: mimeview_show_message(): use procmime_scan_message()
+ instead of procmsg_open_message() and procmime_scan_mime_header().
+ mimeview_set_multipart_tree(): conform to the new MIME structure.
+ * src/textview.c: textview_show_part(): removed unnecessary check.
+ * src/procmsg.c: procmsg_open_message_decrypted(): fixed the file
+ pointer when decryption failed.
+
+2003-05-06
+
+ * src/ssl.c: ssl_init_socket_with_method(): replaced log_warning()
+ by g_warning(), and log_print() by debug_print().
+ * src/pop.[ch]: added an error code PS_NOTSUPPORTED, and retry with
+ LAST if UIDL is not supported.
+
+2003-05-01
+
+ * src/codeconv.c: conv_get_code_conv_func(): convert to EUC-JP only
+ if it is the current locale encoding when dest_charset_str is NULL.
+
+2003-05-01
+
+ * src/action.c: execute_actions(): fixed crash when no text widget
+ is selected (thanks to Paul and Melvin).
+ * src/action.c
+ src/prefs_actions.c: added missing reference to Claws team in the
+ copyright.
+
+2003-04-28
+
+ * src/session.c:
+ session_send_msg()
+ session_send_data(): fixed a memory leak and data sending bug.
+ * src/send_message.c:
+ send_message_smtp(): fixed focus management.
+
+2003-04-25
+
+ * src/smtp.[ch]: set the response string to SMTPSession::error_msg
+ if error occurred.
+ * src/send_message.c: show error dialog if error occurred.
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb(): don't show error dialog here.
+
+2003-04-25
+
+ * src/session.c: session_close(): kill child process only if
+ state is not SESSION_DISCONNECTED.
+ * src/send_message.c: send_cancel_button_cb()
+ src/inc.c: inc_cancel(): don't set Session::state to
+ SESSION_DISCONNECTED.
+ * src/prefs.[ch]: modified the names of prefs_write_*().
+ * src/address.[ch]: removed.
+
+2003-04-24
+
+ * src/compose.c: compose_template_apply(): overwrite recipients.
+
+2003-04-23
+
+ * src/procheader.c: procheader_date_parse(): removed debug print.
+ * src/session.c: changed every g_print to debug_print.
+ session_child_input(): removed unrequired session_close() (it'll
+ be closed anyway after returning FALSE).
+ * src/send_message.c: send_message_smtp(): changed g_print to
+ debug_print.
+
+2003-04-23
+
+ * src/procheader.c: procheader_procheader_date_parse(): don't add
+ local timezone offset if timezone is unknown.
+ Made the Y2K workaround code to follow RFC 2822.
+ procheader_scan_date_string(): workaround for date strings which
+ don't have timezone specification.
+ * src/utils.c: remote_tzoffset_sec(): return -1 if timezone is
+ unknown.
+
+2003-04-22
+
+ * src/action.[ch]: refactored. Also fixed a bug on MIME mode, and
+ some memory leaks on error.
+ action_update_msgview_menu(): new.
+ * src/messageview.[ch]: added "Tools/Actions" menu. Keep window list.
+ messageview_get_selected_mime_part(): returns MimeInfo of selected
+ part when MessageView is in MIME mode.
+ * src/mimeview.[ch]: mimeview_get_selected_part(): returns MimeInfo
+ of selected part.
+ * src/summaryview.[ch]: summary_get_selected_msg_list(): returns
+ MsgInfo list of selected messages.
+
+2003-04-21
+
+ * src/prefs_filter.[ch]: include original message's headers as
+ the preset keywords. Modified the sizes of the widgets.
+ * src/utils.[ch]: added str_case_equal() and str_case_hash() for
+ case-insensitive hash.
+
+2003-04-18
+
+ * src/procmsg.c: procmsg_get_filter_keyword(): added X-Sequence to
+ auto-detected headers.
+ * src/action.[ch]
+ src/prefs_actions.c
+ src/compose.c
+ src/mainwindow.c: modified function names.
+ get_user_string(): Use input_dialog() instead of its own
+ implementation.
+
+2003-04-17
+
+ * src/codeconv.[ch]: conv_encode_header(): don't include '(' and ')'
+ in encoded strings if addr_field is TRUE.
+ * src/compose.c: compose_convert_header(): added a flag 'addr_field'.
+
+2003-04-16
+
+ * src/prefs_actions.[ch]: separated action execution routine into
+ action.[ch].
+
+2003-04-16
+
+ * src/prefs_actions.c: minor code cleanup.
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): fixed the handling of
+ EILSEQ.
+
+2003-04-16
+
+ * src/inc.c:
+ inc_recv_data_progressive()
+ inc_recv_data_finished()
+ inc_recv_message()
+ send_recv_message()
+ send_send_data_progressive()
+ send_send_data_finished(): added assertion.
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): fixed potential memory
+ corruption bug.
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): don't include nul character
+ in source buffer since it messed up some encoding conversion (like
+ UTF-7).
+
+2003-04-15
+
+ * src/procmsg.c: procmsg_get_filter_keyword(): unfold headers and
+ extract ID from List-Id header.
+ * src/utils.[ch]: extract_one_parenthesis_with_skip_quote(): removed.
+ extract_list_id_str(): extract ID string from List-Id header.
+
+2003-04-15
+
+ * src/prefs_actions.c: merged from the claws branch. Fixes several
+ bugs and adds some features.
+
+2003-04-14
+
+ * src/compose.c: compose_parse_header(): fixed a bug that unnecessary
+ linebreaks were included on reediting.
+ * src/imap.c
+ src/pop.c: fixed typos: 'occured'.
+
+2003-04-11
+
+ * src/compose.[ch]: implemented auto signature replacement on
+ changing accounts.
+ compose_insert_sig(): added a flag to replace current signature.
+ compose_get_signature_str(): new. It returns signature string.
+ compose_insert_command_output(): removed.
+ compose_select_account(): call compose_insert_sig() on account
+ change.
+ compose_destroy(): fixed a memory leak of UndoMain object.
+ Compose::sig_str: new. It stores current signature string.
+ * src/gtkutils.[ch]: gtkut_stext_find(): new.
+ Renamed gtk_stext_clear() to gtkut_stext_clear().
+ * src/utils.[ch]: get_wcs_len(): returns wide-character length of
+ multibyte string.
+ normalize_newlines(): converts CR+LF and CR into LF.
+ get_command_output(): returns command output.
+
+2003-04-08
+
+ * src/procmsg.[ch]: procmsg_get_filter_keyword(): new. It returns
+ filter keyword for messages.
+ * src/summaryview.c: summary_filter_open(): use
+ procmsg_get_filter_keyword().
+ * src/messageview.c: create_filter_cb(): implemented.
+
+2003-04-07
+
+ * src/inc.c:
+ inc_start()
+ inc_put_error(): display server responses on error.
+ * src/pop.[ch]: added Pop3Session::error_msg, and set server responses
+ on error.
+
+2003-04-04
+
+ * src/messageview.[ch]: separated the forced charset of message view
+ in separate window from the main window.
+ src/textview.c:
+ textview_show_message()
+ textview_show_part()
+ textview_add_part(): use MessageView::forced_charset if specified.
+
+2003-04-03
+
+ * src/mainwindow.c: modified File menu a bit.
+ * src/menu.[ch]: added functions to handle item factory rc strings.
+ * src/messageview.[ch]: added a menu, and made it take over main
+ window's menu shortcuts.
+ added msginfo which is duplicated on display to MessageView.
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): use
+ menu_factory_clear_rc().
+
+2003-03-28
+
+ * send_message.c: send_message_smtp():
+ re-enabled forcing of SMTP AUTH method.
+ Clear temporary password if authentication failed.
+ * smtp.c: output warning to log and set SMTPSession::error_val
+ if error occurs.
+ * smtp.h: changed error value to enum. Added SMTPSession::error_val.
+ * src/mbox.c: proc_mbox(): force updating of folder.
+
+2003-03-28
+
+ * src/pop.h: changed error value to enum.
+ * src/pop.c: pop3_retr_recv(): return PS_IOERR when inc_drop_message()
+ failed.
+ pop3_ok(): return appropriate error value based on current state.
+ Output warning to log if error occurs.
+
+2003-03-27
+
+ * src/nntp.[ch]
+ src/news.[ch]: refactored. Remove NNTPSockInfo and use NNTPSession
+ in nntp.c.
+
+2003-03-27
+
+ * src/inc.c: inc_pop3_session_do(): retrun appropriate error if
+ Session::state == SESSION_ERROR.
+ * po/POTFILES.in: removed src/automaton.c and src/send.c.
+ Added src/send_message.c.
+
+2003-03-26
+
+ * src/pop.[ch]
+ src/session.c: fixed breakage of POP3 retrieval.
+ session_recv_data_from_sock_unescape(): read until terminator
+ appears and also return the actual size.
+
+2003-03-25
+
+ * src/automaton.[ch]: removed.
+ * src/session.c: removed some of the debug output.
+ * src/smtp.c: smtp_session_recv_msg(): workaround in case server
+ returns EHLO-style response to HELO command.
+ Ignore all multiline responses except for EHLO since they are
+ allowed for any command.
+
+2003-03-25
+
+ * src/session.[ch]
+ src/pop.c: fixed retrieval of messages which contain dot-escaped
+ lines.
+ session_recv_data(): added a flag for unescape.
+ session_recv_data_from_sock_unescape(): new. It receives message
+ for each line and unescapes dot-escaped lines.
+ Removed the previous workaround.
+ * src/defs.h: decreased UI_REFRESH_INTERVAL to 40 msec.
+
+2003-03-25
+
+ * src/pop.[ch]: workaround for brekage of retrieval when given size
+ and actual one is different.
+
+2003-03-24
+
+ * src/pop.c: pop3_retr_eom_recv(): ignore invalid end of message
+ since some servers sometimes return incorrect message size.
+ * src/news.c: news_session_new(): zero clear NNTPSession object.
+ Don't initialize Session::sock with nntp_sock->sock to prevent
+ double-free of SockInfo.
+ * src/imap.c: zero clear IMAPSession object.
+ imap_cmd_append(): don't close SockInfo.
+
+2003-03-22
+
+ * src/pop.c: pop3_session_recv_msg(): fixed STLS.
+
+2003-03-22
+
+ * src/inc.[ch]
+ src/pop.[ch]: reimplemented using new I/O system.
+ * src/session.[ch]: session_recv_data(): new.
+ session_send_data_to_sock()
+ session_recv_data_from_sock(): decreased the frequency of progress
+ notification.
+
+2003-03-22
+
+ * src/smtp.c: smtp_auth_recv(): fixed CRAM-MD5 authentication.
+
+2003-03-20
+
+ * src/session.[ch]: session_start_tls(): new.
+ session_recv_msg(): made it static.
+
+2003-03-20
+
+ * implemented asynchronous network I/O.
+ * src/session.[ch]: the interface to communicate with servers through
+ child process.
+ * src/smtp.[ch]
+ src/send_message.[ch]: rewrote using new I/O system.
+ * src/socket.[ch]: renamed *_write() to *_write_all(), and made
+ *_write() as just a simple wrapper for write().
+ * src/utils.c: get_outgoing_rfc2822_str(): new. It modifies the
+ message to send with SMTP or NNTP.
+ file_read_stream_to_str(): new.
+
+2003-03-12
+
+ * src/textview.c: textview_button_pressed(): corrected the range of
+ URI link.
+ * src/compose.c: compose_wrap_line_all_full(): treat UTF-8 characters
+ represented with more than 2 bytes as 2 character width and 2 bytes
+ one as a single character width as a workaround for wrapping problem.
+
+2003-03-12
+
+ * src/utils.c: subject_compare_for_sort(): allow null strings (fixes
+ summary sorting).
+
+2003-03-11
+
+ * implemented HTML link correctly.
+ * src/html.[ch]: HTMLAttr, HTMLTag: new structure for attributes /
+ tags.
+ html_get_tag(): new. It parses tag and returns HTMLTag object.
+ html_parse_tag(): also parses <a> tags and 'href' attributes.
+ * src/textview.c: textview_write_link(): new. It creates link string.
+
+2003-03-10
+
+ * src/compose.c: compose_wrap_line_all_full(): fixed an infinite
+ loop / crash bug (thanks to Darko Koruga).
+ compose_write_to_file(): put correct charset element when
+ conversion failed but want to send anyway.
+
+2003-03-10
+
+ * src/headerview.c: headerview_show()
+ src/textview.c: textview_write_line(): remove unreadable characters
+ from displayed strings to prevent crashes on multi-byte
+ environments.
+ * src/codeconv.[ch]: conv_unreadable_locale(): new. It was separated
+ from conv_localetodisp().
+
+2003-03-10
+
+ * src/procmsg.c: procmsg_cmp_by_subject()
+ src/summaryview.c: summary_cmp_by_subject(): ignore Re: when
+ comparing subjects.
+ * src/utils.[ch]:
+ subject_compare_for_sort()
+ trim_subject_for_sort(): new.
+
+2003-03-07
+
+ * version 0.8.11
+
+2003-03-07
+
+ * src/defs.h: added -i option to the default sendmail command.
+
+2003-03-06
+
+ * src/codeconv.[ch]: added missing character encodings and locales.
+
+2003-03-06
+
+ * src/procmsg.[ch]:
+ procmsg_get_mark_sum()
+ procmsg_open_mark_file()
+ procmsg_read_mark_file(): take FolderItem instead of directory
+ path.
+
+2003-03-05
+
+ * src/codeconv.c: conv_encode_header(): fixed a bug that spaces
+ which is on the wrap boundary would be lost when encoding long
+ non-ascii strings (thanks to Sergey Vlasov).
+ Don't force wrapping within a long word until it reaches hard line
+ length limit (998 characters) (workaround for the breakage of
+ long address list with no spaces).
+
+2003-03-03
+
+ * src/prefs_account.c: fixed compile failure when using neither
+ gpg or ssl.
+
+2003-03-03
+
+ * src/codeconv.c: fixed UTF-8 locale support.
+ conv_get_code_conv_func(): return conv_noconv if locale encoding
+ is UTF-8. Return conv_latintodisp on ISO-8859-* to locale encoding
+ conversion.
+ conv_convert(): call conv_iconv_strdup() instead of
+ conv_codeset_strdup().
+ conv_codeset_strdup(): moved some codes into conv_iconv_strdup().
+
+2003-02-28
+
+ * src/prefs_account.[ch]: added an option to use command output for
+ signature.
+ * src/compose.c: compose_insert_sig(): use command output if
+ specified.
+ compose_insert_command_output(): new.
+
+2003-02-28
+
+ * src/main.c: main(): remove lock socket if sylpheed is not running
+ when --status command is executed.
+ lock_socket_remove(): new.
+
+2003-02-27
+
+ * src/codeconv.c: conv_codeset_strdup(): don't convert if current
+ codeset is US-ASCII (or POSIX).
+
+2003-02-21
+
+ * src/codeconv.c: conv_iconv_strdup(): try to skip invalid characters
+ and continue conversion.
+
+2003-02-21
+
+ * src/summaryview.c: summary_selected(): always update widget
+ sensitivity.
+
+2003-02-20
+
+ * src/utils.c: tzoffset_sec(): fixed a bug that displayed wrong
+ date in timezones more than GMT+12 or less than GMT-12.
+
+2003-02-18
+
+ * src/prefs_common.[ch]
+ src/sourcewindow.c: remember the size of source window.
+ * src/md5.c: fixed a compile problem with gcc 3.3.
+
+2003-02-17
+
+ * src/about.c: about_create(): modified the copyright notice.
+
+2003-02-17
+
+ * src/colorlabel.c: don't use pixmaps for label color rect but draw
+ rectangles so we can respect the color map of palette based visuals
+ (fixes the long time crashes on Solaris - thanks to Alfons
+ Hoogervorst).
+
+2003-02-17
+
+ * src/procheader.c: procheader_date_parse(): made month string case
+ insensitive.
+ * src/prefs_filter.c: prefs_filter_close(): fixed the crash when the
+ selection list is empty.
+
+2003-02-14
+
+ * src/quote_fmt_parse.y: removed gettext translatable strings.
+ * src/unmime.c: unmime_header(): remove broken characters when
+ code conversion failed.
+ * src/codeconv.c: conv_encode_header(): fixed a bug that broken
+ headers if long words more than 75 characters are entered.
+
+2003-02-13
+
+ * src/prefs_account.c: prefs_account_receive_create()
+ src/utils.c: to_human_readable(): made units translatable.
+
+2003-02-13
+
+ * src/codeconv.c: isprintableeuckanji(): don't allow more than 0xf4
+ at first byte (fixes abort() problem of glibc).
+ * src/html.c: html_read_line(): remove characters which can't be
+ displayed on the current locale.
+
+2003-02-11
+
+ * src/utils.[ch]:
+ trim_subject_for_compare(): renamed from trim_subject().
+ trim_subject(): new. It removes [...] or (...) at the beginning
+ of subject.
+ * src/prefs_folder_item.c
+ src/folder.[ch]:
+ added options for trimming summary / compose subject.
+ * src/summaryview.c: summary_set_header(): trim subject if the folder
+ option is set.
+ * src/compose.c: compose_reply_set_entry(): trim subject if the folder
+ option is set.
+
+2003-02-09
+
+ * src/codeconv.c:
+ LBREAK_IF_REQUIRED(): don't break lines before first word (fixes
+ X-Face header problem).
+ conv_encode_header(): allow up to 97 characters for one word.
+
+2003-02-07
+
+ * src/filter.c: filter_match_condition(): fixed the bug that
+ second condition ignored regex.
+ * src/news.h: NewsGroupInfo: use guint for message numbers
+ (fix count in grouplist dialog) (thanks to Thorsten Maerz).
+
+2003-02-06
+
+ * src/codeconv.c: conv_encode_header(): fixed a segfault bug
+ on code conversion failure.
+ conv_get_charset_str()
+ conv_get_charset_from_str(): optimized using hash table.
+
+2003-02-06
+
+ * src/quote_fmt_parse.y:
+ SHOW_MESSAGE_NO_SIGNATURE, SHOW_QUOTED_MESSAGE_NO_SIGNATURE:
+ treat only "\n-- \n" as a signature separator.
+
+2003-02-05
+
+ * src/gtkutils.[ch]: gtkut_ctree_node_prev(): new.
+ * src/summary_search.c: summary_search_execute(): search collapsed
+ nodes, too.
+
+2003-02-05
+
+ * src/codeconv.c:
+ conv_unreadable_latin(): include 0x7f as an unreadable character.
+ conv_localetodisp(): don't remove 8bit characters by default.
+ conv_get_current_charset()
+ conv_get_outgoing_charset(): return ISO-8859-15 if "@euro" is
+ appended at the last of locale name.
+ * src/compose.c: compose_write_to_file(): show from and to encoding
+ when code conversion failed.
+
+2003-02-04
+
+ * version 0.8.10
+
+2003-02-04
+
+ * src/procmsg.h: WRITE_CACHE_DATA(): little speed improvement
+ (thanks to Colin Leroy).
+ * src/mh.c: mh_get_msginfo(): added NULL check (thanks to Thorsten
+ Maerz).
+
+2003-02-03
+
+ * src/textview.c: textview_write_line(): don't convert if conv is
+ NULL.
+
+2003-02-03
+
+ * src/codeconv.[ch]:
+ renamed conv_guess_encoding() to conv_guess_ja_encoding().
+ conv_localetodisp(): new. It removes unreadable characters from
+ (assumed) current locale string.
+ conv_codeset_strdup(): convert into ISO-8859-1 if dest_code is
+ NULL and current locale encoding is US-ASCII.
+ conv_get_code_conv_func(): return conv_ustodisp if US-ASCII is
+ specified for destination charset.
+ * src/textview.c: textview_write_line(): use conv_localetodisp()
+ instead of strncpy2() if conversion failed.
+
+2003-01-31
+
+ * src/codeconv.c: conv_iconv_strdup()
+ src/imap.c:
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): use ICONV_CONST macro to remove
+ a warning on some systems.
+ * src/codeconv.c: conv_iconv_strdup(): flush iconv() output and
+ truncate buffer.
+ Return NULL instead of incomplete string if conversion failed.
+
+2003-01-30
+
+ * src/summaryview.c: summary_execute(): select appropriate node
+ if currently selected node is to be deleted.
+ * src/gtkutils.[ch]: gtkut_ctree_node_is_selected(): new. Returns
+ TRUE if the specified node is selected.
+
+2003-01-30
+
+ * src/summaryview.c: summary_status_show(): fixed a occasional crash
+ on deleting or moving.
+
+2003-01-29
+
+ * src/codeconv.c: conv_unreadable_eucjp(): made the validity check
+ of EUC-JP more accurate.
+ isprintableeuckanji(): new. Use table for validity check of EUC-JP.
+
+2003-01-17
+
+ * version 0.8.9
+
+2003-01-17
+
+ * updated INSTALL.
+
+2003-01-17
+
+ * src/quoted-printable.c: qp_encode_line(): fixed linebreak
+ duplication bug if the source string has CRLF.
+ * src/utils.[ch]:
+ canonicalize_str(): new. Returns newly allocated canonicalized
+ string.
+ uncanonicalize_file(): new. Uncanonicalize (CRLF -> LF) text.
+ uncanonicalize_file_replace(): new.
+ * src/compose.c: always canonicalize body before processing, and
+ uncanonicalize before returning.
+
+2003-01-17
+
+ * src/procmime.c: procmime_get_encoding_for_charset(): prefer
+ ENC_8BIT for Russian charsets.
+ * src/compose.c: compose_write_to_file(): use base64 when signing
+ 8bit message.
+
+2003-01-16
+
+ * src/prefs_common.c: prefs_send_create(): added a description for
+ the setting of Content-Transfer-Encoding.
+
+2003-01-16
+
+ * src/codeconv.c: fixed locale_table for Russian locales (thanks to
+ Sergey Vlasov).
+ * src/procmime.c: procmime_get_encoding_for_charset(): return
+ ENC_BASE64 for ISO-8859-5, KOI8-* and Windows-1251.
+ * src/compose.c: compose_attach_append(): set correct Content-
+ Transfer-Encoding for message/rfc822.
+ compose_write_to_file(): enabled user-definable Content-Transfer-
+ Encoding.
+ * src/prefs_common.[ch]: added an option for user-defined Content-
+ Transfer-Encoding.
+
+2003-01-15
+
+ * src/quoted-printable.[ch]: qp_encode_line(): fixed a bug if the
+ line doesn't end with linebreak.
+
+2003-01-15
+
+ * implemented quoted-printable encoding.
+ * src/quoted-printable.[ch]: qp_encode_line(): new.
+ * src/compose.c:
+ compose_write_to_file()
+ compose_write_attach(): implemented quoted-printable encoding.
+ compose_attach_property_create(): enabled quoted-printable menu
+ item.
+ * src/procmime.c: procmime_get_encoding_for_charset(): return
+ ENC_QUOTED_PRINTABLE for ISO-8859-* and CP125* charset.
+ * src/Makefile.am: added $(LIBICONV) to sylpheed_LDADD for libiconv
+ support.
+
+2003-01-14
+
+ * src/folderview.c
+ src/summaryview.c
+ src/utils.[ch]: get_abbrev_newsgroup_name(): improved the way
+ of abbreviation of newsgroup name.
+
+2003-01-14
+
+ * configure.in: show the result of iconv detection.
+
+2003-01-13
+
+ * src/codeconv.[ch]: made the transition from libjconv to iconv().
+ conv_iconv_strdup(): new.
+ * src/about.c
+ src/imap.c
+ src/mainwindow.c
+ src/prefs_common.c: replaced HAVE_LIBJCONV to HAVE_ICONV.
+
+2003-01-10
+
+ * src/compose.c
+ src/folderview.c
+ src/prefs_folder_item.c: English fix (property -> properties).
+ * src/prefs_filter.c: alert if entry is not saved.
+ prefs_filter_dialog_to_filter(): new.
+
+2003-01-09
+
+ * src/codeconv.c: conv_encode_header(): fixed a bug which output raw
+ strings after linefeed.
+ * updated INSTALL.
+
+2003-01-08
+
+ * src/codeconv.[ch]: code cleanup and optimization.
+ conv_code_converter_new()
+ conv_convert(): use functions obtained by conv_get_code_conv_func()
+ when using libjconv.
+ conv_codeset_strdup(): code cleanup.
+ conv_get_code_conv_func(): added an argument for destination
+ character set, and generalized.
+
+2003-01-06
+
+ * src/codeconv.c: LBREAK_IF_REQUIRED(): break line only if some
+ characters follow.
+ * src/compose.c: compose_convert_header(): remove trailing spaces.
+ * src/customheader.c: custom_header_read_str(): strip the spaces
+ of name and value.
+ * src/prefs_customheader.c: prefs_custom_header_clist_set_row():
+ strip the spaces of name and value.
+
+2002-12-25
+
+ * version 0.8.8
+
+2002-12-25
+
+ * src/codeconv.c: conv_encode_header(): fixed a bug which will run
+ into infinite loop when encountering invalid characters.
+
+2002-12-25
+
+ * src/procmsg.[ch]: procmsg_sort_msg_list(): new. It sorts message
+ list.
+ * src/summaryview.c: summary_show(): removed summary_sort() because
+ it is done inside folder_item_get_msg_list(). This will improve
+ the performance of summary display.
+ Sorted out the summary sort functions using macros.
+ * src/mh.c
+ src/imap.c
+ src/news.c
+ src/folder.[ch]: folder_item_get_msg_list(): return pre-sorted
+ list if FolderItem::sort_key is set.
+ Added SORT_BY_TO to FolderSortKey enum.
+ * src/mainwindow.c: added "View/Sort/by recipient".
+
+2002-12-20
+
+ * version 0.8.7
+
+2002-12-20
+
+ * src/codeconv.c: conv_encode_header(): fix for redundant space on
+ line-breaking.
+ * src/compose.c: compose_convert_header(): always pass string to
+ conv_encode_header() for line-breaking.
+
+2002-12-20
+
+ * src/textview.c: textview_make_clickable_parts(): fixed incorrect
+ parsing of email addresses.
+
+2002-12-19
+
+ * src/defs.h: added DEFAULT_BROWSER_CMD.
+ * src/mimeview.c: mimeview_view_file()
+ src/prefs_common.c: prefs_other_create()
+ src/utils.c: open_uri(): changed the default web browser to
+ mozilla, and changed 'raise' command (which is undocumented)
+ to 'new-window' in 'netscape -remote'.
+
+2002-12-19
+
+ * src/compose.c: compose_send_control_enter(): fixed crash on
+ Ctrl-Enter when Message/Send has no accelerator key (thanks to
+ Sergey Vlasov).
+
+2002-12-18
+
+ * src/mainwindow.c:
+ set_charset_cb()
+ sort_summary_cb()
+ sort_summary_type_cb(): prevent unwanted processing on unchecking
+ menu items.
+
+2002-12-18
+
+ * src/main.c: process command line option before gtk_init() to
+ enable remote operation without X (thanks to Ruslan N. Balkin).
+ * src/codeconv.c: conv_encode_header(): fixed a potential buffer
+ overflow.
+
+2002-12-18
+
+ * src/Makefile.am: changed $(target_alias) to $(target_triplet)
+ (the spec of autotools seems to be changed).
+
+2002-12-18
+
+ * src/imap.c: get path separator using LIST command if server
+ doesn't support NAMESPACE (based on the patch by Brian Sammon).
+ imap_parse_list(): added an argument to return path separator.
+ imap_get_namespace_by_list(): new.
+
+2002-12-17
+
+ * src/addr_compl.c: add_address(): removed the debug print.
+ * src/gtkutils.[ch]: gtkut_window_popup()
+ src/mainwindow.c: main_window_popup(): applied the patch to fix
+ the behavior of window popup from Sergey Vlasov (thanks!)
+ * src/account.c: account_edit_create(): use signal_connect_after
+ for row_move signal to fix the row position bug.
+ account_row_moved(): scroll the CList half page.
+ * src/prefs_filter.c: prefs_filter_row_move(): scroll the CList
+ half page.
+ * src/summaryview.c: summary_reply(): use selection text only if
+ the displayed message is selected (thanks to Sergey Vlasov).
+
+2002-12-13
+
+ * src/codeconv.c: conv_encode_header(): reimplemented the routine
+ of MIME header encoding. And use Q-encoding method if the current
+ locale is single-byte one.
+ * src/utils.[ch]: is_next_nonascii(): take multi-byte string instead
+ of wide-character string. Consider control codes as non-ASCII.
+ get_next_word_len(): new. It returns the length of next word.
+ is_next_mbs(), find_wspace(): removed.
+ * src/quoted-printable.[ch]: new.
+ qp_decode_line(): decodes one QP line.
+ qp_decode_q_encoding(): decodes Q-encoded string in MIME header.
+ qp_get_q_encoding_len(): returns the length when a string is
+ Q-encoded.
+ qp_q_encode(): Q-encode a string (RFC 2047).
+ * src/unmime.c: moved the functions for quoted-printable to
+ quoted-printable.c.
+
+2002-12-05
+
+ * src/send.c: send_message_local(): escape line that only have one
+ dot character (postfix's sendmail command will stop there).
+
+2002-12-05
+
+ * src/send.c: send_message_local(): don't escape first-dot line
+ (thanks to Sergey Vlasov).
+
+2002-12-03
+
+ * autogen.sh: added 'libtoolize --force --copy' to override the
+ current ltmain.sh.
+ * acconfig.h: removed.
+ * configure.in: increased minimal version of GPGME to 0.3.10.
+ Fixed checking of XIM.
+ * ac/check-type.m4
+ ac/gnupg-check-typedef.m4: added an argument for comment.
+
+2002-11-29
+
+ * src/imageview.[ch]: fixed conflicting declarations of
+ imageview_show_image() (thanks to Thorsten Maerz).
+
+2002-11-28
+
+ * src/compose.c: compose_entry_append(): don't add ", " on subject
+ entry.
+ * src/codeconv.c: conv_get_outgoing_charset(): obtain outgoing
+ charset from the table (currently disabled for non-Japanese locales).
+ conv_get_current_locale(): also refer to LC_CTYPE.
+
+2002-11-27
+
+ * README: added a description about hidden settings.
+
+2002-11-27
+
+ * src/prefs_common.[ch]: reorganized the common prefs dialog.
+ Made enable_hscrollbar and bold_unread hidden options.
+
+2002-11-26
+
+ * src/quote_fmt_parse.y: fixed a parse error (thanks to Andreas Hinz).
+
+2002-11-26
+
+ * src/account.[ch]:
+ account_find_from_message_file()
+ account_find_from_msginfo(): new. They find an account from the
+ headers like 'From:', 'X-Sylpheed-Account-Id:', and 'AID:' in the
+ specified message.
+ * src/compose.c:
+ compose_reedit(): restore messages' previous account on composition.
+ compose_write_headers(): add 'X-Sylpheed-Account-Id:' header
+ on draft mode.
+
+2002-11-26
+
+ * src/compose.c: cleaned up the code using compose_entry_set()
+ (don't use gtk_entry_set_text() directly).
+
+2002-11-25
+
+ * src/imap.c: imap_parse_namespace(): fixed a memory leak.
+
+2002-11-22
+
+ * updated autotools and libtool to the latest version.
+ * configure.in: added AC_PREREQ(2.50).
+
+2002-11-22
+
+ * src/textview.c: textview_set_font(): fix for message display in
+ UTF-8 locales (thanks to Sergey Vlasov).
+
+2002-11-21
+
+ * src/imageview.[ch]: imageview_show_image(): resize images to fit
+ the window size if specified.
+ * src/prefs_common.[ch]: added an option 'Resize attached images'.
+
+2002-11-20
+
+ * refactoring for SMTP implementation.
+ * src/session.h: added ui_func to Session.
+ * src/smtp.[ch]: separated the connection routine from
+ smtp_session_new() to smtp_connect().
+ Changed the argument of every function other than smtp_ok() from
+ SockInfo to SMTPSession.
+ Call UI callback from each functions.
+ * src/send.c: send_message_smtp(): separated the code for UI update
+ into send_progress_dialog_update().
+
+2002-11-18
+
+ * src/smtp.[ch]: separated smtp_auth() from smtp_from().
+ * src/send.c: send_message_smtp(): call smtp_auth() and display
+ the state to the dialog.
+
+2002-11-18
+
+ * src/filter.c: strmatch_regex(): use extended regex (thanks to
+ Fabien Devaux).
+ * src/main.c: main(): removed the code for assortrc -> filterrc
+ transition.
+ * src/gtkutils.c: gtkut_font_load(): only use gdk_font_load() if
+ current locale is C or POSIX.
+ gtkut_stext_is_uri_string(): include "www." for URI string.
+ * src/textview.c: textview_make_clickable_parts(): include "www."
+ for URI string.
+
+2002-11-15
+
+ * version 0.8.6
+
+2002-11-13
+
+ * src/textview.c: textview_add_part(): indicate signature status
+ using different colors.
+
+2002-11-12
+
+ * src/folder.c: folder_write_list_recursive(): escape
+ To/Cc/Bcc/Reply-To strings.
+
+2002-11-11
+
+ * src/codeconv.c: conv_encode_header(): enabled B-encoding of
+ headers on locales other than Japanese when not using libjconv.
+
+2002-11-11
+
+ * src/inc.[ch]: added INC_IO_ERROR to IncState. Also added its
+ corresponding error message.
+ inc_pop3_session_do(): set INC_IO_ERROR instead of INC_NOSPACE
+ on PS_IOERR.
+
+2002-11-07
+
+ * src/prefs_account.[ch]: removed prefs_account_save_config() since
+ it is not used.
+ * src/procmime.[ch]: removed procmime_mimeinfo_free() since
+ procmime_mimeinfo_free_all() can be used in every case.
+
+2002-11-06
+
+ * src/account.c: account_get_special_folder(): support F_INBOX, and
+ made code cleanup.
+
+2002-11-06
+
+ * src/compose.[ch]: ComposeEntryType: changed COMPOSE_* to
+ COMPOSE_ENTRY_*, and added
+ COMPOSE_ENTRY_{REPLY_TO,SUBJECT,FOLLOWUP_TO}.
+ compose_reply()
+ compose_forward()
+ compose_redirect(): added FolderItem to the arguments, and reflect
+ settings in the item.
+ compose_entry_set(): new.
+ compose_entry_append(): code cleanup.
+ compose_entries_set_from_item(): take ComposeMode in its arguments,
+ and enabled FolderItem::use_auto_to_on_reply.
+ * src/summaryview.c: summary_reply(): pass folder_item to
+ compose_{reply,forward,redirect}().
+
+2002-11-05
+
+ * src/gtkutils.[ch]:
+ gtkut_font_load(): new. It automatically choose font or fontset
+ by current locale.
+ gtkut_font_load_from_fontset(): new. It tries to load single font
+ instead of fontset from a fontset string.
+ * src/alertpanel.c
+ src/folderview.c
+ src/headerview.c
+ src/summaryview.c: workaround for the problem that couldn't display
+ 8-bit characters in C or POSIX locale (use font instead of fontset).
+ * src/compose.c
+ src/sourcewindow.c
+ src/textview.c: made code cleanup using gtkut_font_load*().
+
+2002-10-29
+
+ * src/mh.c: mh_get_msginfo(): set correct message number.
+
+2002-10-29
+
+ * src/folder.[ch]: added a new virtual method Folder::get_msginfo().
+ It returns a new MsgInfo associated to a message number.
+ folder_item_get_msginfo(): new.
+ * src/imap.[ch]: imap_get_msginfo(): new.
+ * src/mh.[ch]: mh_get_msginfo(): new.
+ * src/news.[ch]: news_get_msginfo(): new.
+
+2002-10-28
+
+ * src/codeconv.c: conv_euctojis(): fixed a bug which will cause
+ infinite loop if an invalid code appeared.
+
+2002-10-25
+
+ * src/codeconv.c: conv_codeset_strdup()
+ src/html.[ch]: html_read_line(): don't output conversion failure
+ warnings.
+ Added HTML_CONV_FAILED to the enum HTMLState.
+
+2002-10-24
+
+ * implemented per-folder auto-set address (still in progress).
+ * src/compose.[ch]: compose_new(): added FolderItem to its arguments,
+ and set entries from it (if mailto is empty).
+ compose_entry_append(): activate menu if required.
+ compose_entries_set_from_item(): new.
+ * src/folder.[ch]: added auto_to, use_auto_to_on_reply, auto_cc,
+ auto_bcc, and auto_replyto to FolderItem, and renamed apply_sub to
+ ac_apply_sub.
+ folder_build_tree(), folder_read_folder_func(),
+ folder_write_list_recursive(): added the above members.
+ * src/prefs_folder_item.[ch]: added auto-set addresses.
+ * src/pop.[ch]: removed Pop3State::prev_folder.
+
+2002-10-11
+
+ * src/compose.c: allow dropping files by also "moving" files from a
+ file manager (thanks to Alfons).
+
+2002-10-10
+
+ * compose_reply_set_entry(): made Reply-To have priority over
+ List-Post on ML reply.
+
+2002-10-09
+
+ * src/gtksctree.[ch]: gtk_sctree_set_anchor_row(): new.
+ * src/summaryview.c: summary_step(): fixed a bug that lost the
+ correct selection anchor.
+ summary_key_pressed(): use gtk_sctree_select() instead of
+ gtk_ctree_select().
+ * src/inc.[ch]
+ src/pop.c
+ src/recv.c: differentiate disk full and socket errors
+ (thanks to Colin Leroy).
+
+2002-10-08
+
+ * src/account.c: account_edit_prefs(): removed unused variables.
+ * src/compose.[ch]: separated WITH_QUOTE/WITHOUT_QUOTE flags in
+ ComposeMode.
+ compose_reply()
+ compose_reply_set_entry(): receive reply type with one argument.
+ * src/summaryview.c: summary_reply(): reduced conditional branches.
+
+2002-10-08
+
+ * src/compose.c: compose_redirect(), compose_reedit(): strip CR
+ from line ends (thanks to Sergey Vlasov).
+ * src/folderview.c: renamed 'Rescan folder tree' to 'Rebuild
+ folder tree'.
+
+2002-10-08
+
+ * src/folder.[ch]: added a virtual method Folder::remove_msgs().
+ * src/imap.[ch]: implemented imap_remove_msgs() which expunges
+ messages all at once.
+
+2002-10-07
+
+ * src/account.[ch]: account_open(): new. It opens account prefs
+ dialog and reflects to UI when finished.
+ * src/folderview.c:
+ folderview_button_pressed()
+ folderview_property_cb(): open account prefs dialog when the
+ property of the root folder of remote account is requested.
+
+2002-10-07
+
+ * src/account.c: account_destroy(): unref account information in
+ folders.
+ * src/folder.[ch]: folder_unref_account_all(): new. It unref the
+ specified account information in all folders.
+ * src/folderview.c:
+ folderview_rm_imap_server_cb()
+ folderview_rm_news_server_cb(): destroy Folder first because
+ folder_destroy() refers to account information.
+
+2002-10-04
+
+ * src/account.c: account_find_from_item(): fixed a bug which didn't
+ select the correct account.
+ * inc_pop3_session_do():
+ fixed the resource leak when SSL initialization failed.
+ Immediately break from temporary event loop if cancelled.
+
+2002-10-04
+
+ * src/account.[ch]: account_find_from_item(): new.
+ * src/compose.c:
+ compose_reply(), compose_forward(), compose_redirect()
+ src/mainwindow.c: compose_cb(): select optimal account when
+ composing.
+ * src/folder.[ch]: added FolderItem::apply_sub.
+ * src/menu.[ch]: menu_find_option_menu_index(): new. It finds the
+ index of option menu which contains the specified data.
+ * src/prefs_folder_item(): added Compose tab, and the setting of
+ folder account.
+
+2002-10-04
+
+ * configure.in: added $LDAP_LIBS for lber library detection.
+
+2002-10-03
+
+ * version 0.8.5
+
+2002-10-03
+
+ * src/procmsg.c: procmsg_msginfo_get_full_info(): fixed a memory
+ leak, and added error checking.
+
+2002-10-03
+
+ * src/compose.[ch]: added a flag Compose::use_newsgroups, and
+ removed Compose::orig_account.
+ compose_check_for_valid_recipient(): check only enabled entries.
+ compose_write_headers()
+ compose_redirect_write_headers(): add Newsgroups header only
+ when the entry is enabled.
+ compose_send(): modified the method of finding a mail account
+ from a news account so that it tries to match the From address.
+ * src/send.c: send_message_queue(): enabled the queueing of news
+ messages.
+ * src/news.[ch]: news_post_stream(): new.
+
+2002-10-03
+
+ * configure.in: check lber first and use $LDAP_LIBS on the check
+ for ldap.
+
+2002-10-02
+
+ * po/*.po: fixed many typos of format strings which will lead to
+ crash (thanks to Sergey Vlasov).
+
+2002-10-02
+
+ * src/procheader.c: procheader_parse_stream(): added Cc header
+ to the target for full parsing.
+ * src/procmsg.[ch]: procmsg_msginfo_get_full_info(): new. It
+ returns the full message information from the given information.
+ * src/compose.c: compose_reply(), compose_forward(): get full
+ message information for Cc header.
+
+2002-10-02
+
+ * src/inc.c: inc_account_mail(), inc_all_account_mail(): update
+ IMAP4 and NNTP folder summary after checking those accounts.
+
+2002-10-01
+
+ * version 0.8.4
+
+2002-10-01
+
+ * src/prefs_common.c: prefs_compose_create(): modified the label
+ of the option for Reply button.
+ * configure.in: add -lldap and -llber to the 5th argument of
+ AC_CHECK_LIB() for LDAP library detection.
+
+2002-09-30
+
+ * INSTALL
+ INSTALL.jp: updated.
+
+2002-09-30
+
+ * src/mainwindow.c: toggle the behavior of Reply button between
+ normal reply and reply-to-list.
+ * src/prefs_common.[ch]: added an option to switch the function
+ of Reply button.
+
+2002-09-27
+
+ * src/compose.c: compose_new(): removed the workaround for XIM
+ because it doesn't have any effect and only seems to cause
+ hangs.
+
+2002-09-26
+
+ * src/compose.[ch]: compose_reply(): added a flag for reply-to-ML.
+ compose_parse_header(): parse also List-Post header.
+ compose_reply_set_entry(): support reply-to-ML (fall back to
+ normal reply if ML address is not found).
+ * src/mainwindow.c
+ src/prefs_common.c
+ src/summaryview.c: reorganized Reply menu and added 'Reply to
+ mailing list'.
+ * src/utils.[ch]: scan_mailto_url(): new. It scans mailto URL and
+ returns newly allocated parameters.
+
+2002-09-25
+
+ * src/account.c: account_read_config_all(): set account information
+ to default before initializing with configuration file.
+ * src/prefs_account.[ch]: prefs_account_new(): new. It returns a
+ newly created account information structure initialized by
+ the default settings.
+
+2002-09-24
+
+ * src/addr_compl.c:
+ replace_address_in_edit(): check if newtext is NULL.
+ completion_window_button_press(): fixed a memory leak.
+ * src/pop.c: LOOKUP_NEXT_MSG(): don't expire messages whose
+ recv_time is RECV_TIME_KEEP.
+ pop3_getrange_uidl_recv(): only set get_all flag if
+ ac_prefs->getall is set.
+ pop3_retr_recv(): don't delete messages which are not received
+ by filter, and set recv_time to RECV_TIME_KEEP in the case.
+ * src/pop.h: added an enum RecvTime.
+ * src/inc.c: inc_drop_message(): unlink temporary message file if
+ not received by filter.
+
+2002-09-20
+
+ * src/mainwindow.c: added 'Edit/Select thread' menu.
+ * src/summaryview.[ch]: added 'Select thread' to the context menu.
+ summary_select_thread(): new. It selects all messages of current
+ thread.
+
+2002-09-19
+
+ * src/rfc2015.c: check_signature(): corrected error handling and
+ fixed memory leak.
+
+2002-09-19
+
+ * src/rfc2015.c: check_signature(): correctly remove the last empty
+ line, and canonicalize the file part before verifying (this should
+ fix incompatibility with Evolution or some other MUAs).
+ * src/utils.[ch]: copy_file_part(): new. It copies the specified
+ range of file stream to another file.
+
+2002-09-19
+
+ * src/compose.c: compose_write_to_file(): force BASE64 encoding for
+ 8-bit text when signing (thanks to Colin Leroy).
+
+2002-09-16
+
+ * src/prefs_common.c: prefs_send_create(): fixed the charset string
+ for Cyrillic (Windows-1251).
+
+2002-09-15
+
+ * version 0.8.3
+
+2002-09-15
+
+ * src/codeconv.c: changed the charset for ru_RU.CP1251 to
+ Windows-1251. Added bg_BG locale.
+
+2002-09-11
+
+ * src/compose.c: account_activated(): change the state of menu items
+ and entries according to the selected account.
+ compose_select_account(): new. It changes the state of title bar,
+ menu items and entries.
+
+2002-09-11
+
+ * src/inc.c: inc_mail(): correct new_msgs when inc_spool() returned
+ by error.
+ Don't refresh summary view on fetching when open_inbox_on_inc is
+ set.
+
+2002-09-10
+
+ * src/summaryview.c: summary_show(): refresh even if open_inbox_on_inc
+ is set (to avoid summary refresh problem).
+ * src/imap.c: removed warnings by checking the existence of directory
+ before calling remove*_numbered_files().
+
+2002-09-06
+
+ * src/prefs_common.c: corrected English.
+
+2002-09-06
+
+ * src/prefs_common.[ch]: added an option: "Mark messages as read
+ only when opened in new window".
+
+2002-09-04
+
+ * src/folder.c:
+ folder_tree_destroy()
+ folder_write_list_recursive(): added sanity check.
+ * src/imap.c: imap_scan_tree(): if folder->node is NULL and
+ can't get session, create empty folder node (based on the
+ Alfons' suggestion).
+
+2002-09-03
+
+ * src/textview.c: textview_key_pressed(): pass GDK_Delete event to
+ SummaryView.
+ * src/summaryview.c: summary_key_pressed(): scroll correct TextView
+ on MIME mode.
+
+2002-09-02
+
+ * src/news.c: news_scan_group(): fixed wrong message number
+ calculation.
+
+2002-08-30
+
+ * major refactoring for POP3.
+ * src/inc.[ch]: moved Pop3State, inc_pop3_state_new(),
+ inc_pop3_state_destroy(), inc_get_uidl_table(), and
+ inc_write_uidl_list() into pop.c.
+ Moved Pop3State::folder_table and Pop3State::inc_state into
+ IncSession.
+ inc_start()
+ inc_put_error(): added lockbusy state.
+ inc_pop3_session_do(): obtain inc_state from Pop3State::error_val.
+ inc_cancel(): don't terminate the automaton here but just set
+ the flags to prevent crash.
+ * src/pop.[ch]
+ pop3_getauth_pass_recv()
+ pop3_getauth_apop_recv(): check lockbusy state.
+ pop3_retr_recv(): check Pop3State::cancelled flag.
+ * src/automaton.[ch]: added 'cancelled' flag to Automaton.
+ automaton_input_cb(): terminate if cancelled flag is true.
+ * sylpheed.desktop: changed Type=Internet to Type=Application.
+ Added Categories=Application;Network;.
+
+2002-08-29
+
+ * src/inc.[ch]
+ src/pop.c
+ src/progressdialog.c: show detailed information to the status
+ column.
+ Added cur_total_recv_bytes to Pop3State.
+ * src/prefs_common.[ch]: added an option to specify whether to
+ close receive dialog when finished.
+
+2002-08-28
+
+ * src/folder.[ch]: folder_get_path(): new. It returns the root path
+ of Folder.
+ * src/imap.c
+ src/news.c
+ imap_folder_destroy()
+ imap_remove_msg()
+ imap_remove_all_msg()
+ news_folder_destroy(): remove cache directories / files when
+ deleting Folder / messages.
+ * src/utils.c:
+ file_exist()
+ is_dir_exist()
+ is_file_entry_exist(): check if the argument is NULL.
+ remove_all_files()
+ remove_numbered_files()
+ remove_expired_files(): fixed memory leaks on error.
+
+2002-08-28
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/news.[ch]
+ src/session.[ch]
+ src/smtp.[ch]: made Folder and Session destructor virtual method.
+
+2002-08-27
+
+ * src/compose.c: do joining of normal lines only when auto-wrapping.
+ * src/main.c: modified the warning message for GnuPG.
+ * src/about.c: about_create(): modified the compiled-in features
+ list.
+ * configure.in: improved LDAP library checking (thanks to Alfons).
+
+2002-08-26
+
+ * version 0.8.2
+
+2002-08-26
+
+ * src/compose.c:
+ join_next_line()
+ compose_wrap_line_all(): backed out the change to join lines that
+ are not indented.
+ * NEWS
+ TODO
+ TODO.jp: updated.
+ * configure.in: require at least gpgme-0.3.5.
+
+2002-08-23
+
+ * src/alertpanel.c: alertpanel_create(): minor modification.
+ * modified NEWS.
+
+2002-08-23
+
+ * updated NEWS.
+
+2002-08-23
+
+ * src/alertpanel.c: alertpanel_create(): modified the layout.
+ * src/rfc2015.c: check_signature(): don't abort on error.
+
+2002-08-22
+
+ * src/compose.c: compose_wrap_line_all(): freeze widget only if
+ required to repress flickers.
+
+2002-08-21
+
+ * src/compose.c: improved line wrapping.
+ join_next_line()
+ compose_wrap_line_all(): also join lines that are not indented.
+ dump_text(): handle multi-byte strings correctly.
+
+2002-08-21
+
+ * src/compose.c: compose_wrap_line_all(): fix for auto-wrapping
+ (go to next line when space is entered at line limit).
+
+2002-08-19
+
+ * src/inc.c: inc_get_uidl_table(): fixed a memory leak reported by
+ Martin Kluge.
+
+2002-08-16
+
+ * src/mh.c: mh_scan_tree_recursive(): disabled Maildir folder
+ checking to prevent confusion.
+
+2002-08-16
+
+ * src/folder.[ch]: folder_item_get_msg_list(): added a wrapper for
+ method Folder::get_msg_list().
+ * src/account.c: account_edit_prefs(), account_delete(): use
+ folderview_set_all() instead of folderview_rescan_all().
+ * src/folderview.[ch]:
+ folderview_check_new_all(): new. Updates all folders.
+ folderview_rescan_tree(): confirm before executing.
+ folderview_rescan_all(): commented out since it's not used anymore.
+ folderview_update_item_foreach(): added a flag for summary update.
+ * src/inc.c: inc_finished(): update summary only when
+ prefs_common.scan_all_after_inc is set.
+ inc_drop_message(): set mtime of target folder to 0 to force
+ the updating of summary.
+ inc_start(), get_spool(): update also summary when updating
+ folder view.
+ * src/mainwindow.c: changed 'File - Rescan folder tree' to
+ 'File - Check for new messages in all folders'.
+
+2002-08-09
+
+ * src/compose.c: compose_write_to_file(): clearsign message body
+ if specified.
+ compose_clearsign_text(): new. Replaces the string with clearsigned
+ one.
+ * src/prefs_account.c: added an option for clearsign.
+ * src/rfc2015.c: rfc2015_clearsign(): new.
+ pgp_sign(): added a flag for clearsign.
+ * src/utils.[ch]: get_tmp_file(): return newly allocated unique file
+ name (needs to be freed by caller).
+ str_write_to_file(), file_read_to_str(): new.
+
+2002-08-08
+
+ * src/procmsg.c: procmsg_read_mark_file(): check key duplication
+ to avoid memory leak.
+
+2002-08-08
+
+ * src/base64.c: include string.h for memcpy().
+ * src/gtksctree.c: use macro ABS() instead of function abs().
+ * src/prefs_account.c
+ src/prefs_common.c: renamed 'send' to 'p_send' so as not to
+ conflict with the function send() in sys/socket.h.
+ * src/mainwindow.c: commented out the unnecessary functions.
+ * src/utils.c: canonicalize_file_replace(): correct warning message.
+
+2002-08-08
+
+ * src/utils.[ch]: get_tmp_file(): new. Returns the directory for
+ temporary files in ~/.sylpheed/.
+ * src/main.c: create temporary directory in ~/.sylpheed/.
+ * src/compose.c
+ src/inc.c: create temporary files in ~/.sylpheed/, and modified
+ the file name.
+ compose_exec_ext_editor(): fixed a bug that failed to create the
+ temporary file if g_get_tmp_dir() returned directory other than
+ '/tmp'.
+
+2002-08-08
+
+ * src/utils.c: copy_file(): check if dest_bak != NULL when unlinking.
+
+2002-08-08
+
+ * src/utils.[ch]: canonicalize_file_replace(): fixed a bug that fails
+ to replace the file when the given file and temporary file are not
+ on the same filesystem.
+ copy_file(): added a flag whether to keep backup.
+ move_file(): added a flag whether to overwrite the destination file.
+
+2002-08-07
+
+ * src/socket.[ch]: fixed the linking failure when IPv6 is enabled.
+ * src/select-keys.c: modified key selection dialog.
+
+2002-08-07
+
+ * src/socket.[ch]: my_gethostbyname(): new.
+ * src/utils.c: get_domain_name(): return FQDN instead of short
+ hostname (thanks to Bob Woodside).
+ * src/template.c: made the debug messages less verbose.
+
+2002-08-06
+
+ * src/prefs_common.[ch]: removed obsolete default sign key setting.
+ * src/utils.c: canonicalize_file(): correct the error check of
+ fwrite().
+
+2002-08-06
+
+ * src/compose.c: compose_write_to_file():
+ canonicalize line endings before encrypting/signing (this will fix
+ interoperability with other MUAs).
+ Removed unnecessary strdup.
+ Don't encrypt/sign draft message.
+ * src/utils.[ch]:
+ canonicalize_file(), canonicalize_file_replace(): new.
+ * src/passphrase.c
+ src/select-keys.c: changed g_message() to debug_print() and
+ g_warning().
+ * src/mimeview.c: mimeview_check_signature(): removed unnecessary
+ MIME structure scanning.
+ * src/textview.c: textview_add_part(): show signature status in
+ TextView.
+ * src/rfc2015.c
+ src/sigstatus.c: modified translatable strings and some MIME
+ headers.
+
+2002-08-06
+
+ * src/procmsg.c: procmsg_save_to_outbox(): don't forget to remove
+ the temporary file when saving from queue.
+2002-08-05
+
+ * src/compose.c
+ src/passphrase.[ch]
+ src/rfc2015.[ch]
+ src/prefs_account.[ch]
+ src/prefs_common.[ch]: merged GnuPG stuff from the claws branch.
+ Modified some messages.
+
+2002-08-05
+
+ * src/textview.c: textview_scan_header(): fixed a memory leak
+ (thanks to Alfons).
+
+2002-08-04
+
+ * src/prefs_actions.c: execute_actions(): put create_io_dialog()
+ in right conditional block.
+
+2002-08-01
+
+ * src/compose.c: compose_wrap_line_all(): fixed character buffer
+ initialization.
+ * src/utils.c:
+ log_print()
+ log_message()
+ log_warning()
+ log_error(): add time stamp to log messages.
+
+2002-07-31
+
+ * src/socket.c:
+ corrected a typo (HAVE_SYS_SELECT -> HAVE_SYS_SELECT_H)
+
+2002-07-31
+
+ * src/socket.c: implemented socket I/O timeout.
+ fd_recv(): new.
+ * src/pop.c: check errors and return error value correctly.
+
+2002-07-31
+
+ * src/prefs_actions.c: made the action's input/output dialog display
+ without delay. Made the dialog modal instead of making window
+ insensitive. Also cleaned up its UI.
+
+2002-07-29
+
+ * implemented --attach command line option.
+ * src/main.c:
+ Cmd::attach_files: new member to store file paths.
+ parse_cmd_opt(): added --attach option. --compose option is implied.
+ prohibit_duplicate_launch()
+ lock_socket_input_cb(): added "compose_attach" message.
+ * src/compose.c
+ src/mainwindow.c
+ src/textview.c: renamed compose_new_with_recipient() to
+ compose_new(), and added an argument for attachment files.
+
+2002-07-29
+
+ * src/logwindow.c: freeze GtkText widget while hidden.
+ log_window_append(): changed the header for message and warning.
+
+2002-07-26
+
+ * src/news.c: implement automatic cache expiration.
+ news_delete_expired_caches(): new.
+ news_get_article_list(): fixed a bug that nonexistent messages
+ were not removed from list.
+ * src/procmsg.[ch]: procmsg_get_last_num_in_msg_list(): renamed
+ procmsg_get_last_num_in_cache().
+ * src/utils.[ch]: remove_expired_files(): new.
+
+2002-07-26
+
+ * src/inc.c:
+ inc_mail(): force summary refresh when using external command for
+ incorporation.
+ inc_all_account_mail(): fixed a bug on spool checking failure.
+
+2002-07-25
+
+ * version 0.8.1
+
+2002-07-24
+
+ * src/addressbook.c
+ src/editaddress.c
+ src/editgroup.c
+ src/editldap_basedn.c
+ src/importldif.c
+ src/prefs_common.c: fixed memory leaks which didn't free strings
+ gtk_editable_get_chars() returned. And minor code cleanups.
+ * src/importldif.h
+ src/vcard.h: removed C++-style comments.
+
+2002-07-23
+
+ * src/codeconv.c: conv_encode_header(): fixed a problem in encoding
+ strings which include both multi-byte and us-ascii characters.
+
+2002-07-23
+
+ * src/utils.c: remove_numbered_files(): don't try to unlink()
+ directories.
+ * src/codeconv.c:
+ conv_get_code_conv_func(): return conv_anytodisp() if charset is
+ not specified.
+ conv_unmime_header_overwrite()
+ conv_unmime_header(): do conv_anytodisp() before decoding header.
+
+2002-07-14
+
+ * version 0.8.0
+
+2002-07-14
+
+ * src/compose.c: added 'Tools/Actions' menu.
+
+2002-07-12
+
+ * src/base64.c: a minor fix for BASE64VAL() macro.
+
+2002-07-11
+
+ * src/base64.c: base64_decode(): fixed a buffer overrun bug.
+
+2002-07-11
+
+ * src/codeconv.c
+ src/compose.c
+ src/smtp.c
+ src/unmime.c
+ src/base64.[ch]: rewrote the BASE64 encode / decode routines.
+ base64_encode(), base64_decode(): new.
+ * src/rfc822.[ch]: removed.
+ * COPYING
+ src/about.c: removed the copyright notice for fetchmail.
+
+2002-07-10
+
+ * src/codeconv.c
+ src/procmime.c
+ src/unmime.[ch]: rewrote the MIME decode routines.
+ unmime_header()
+ unmime_quoted_printable_line(): new.
+ * src/procheader.c:
+ procheader_get_one_field()
+ procheader_get_unfolded_line(): remove also CR.
+
+2002-07-08
+
+ * libkcc: removed from the source tree.
+ * COPYING
+ src/about.c: removed the copyright notice for libkcc.
+ * src/codeconv.c: conv_guess_encoding(): check for ASCII code first
+ for speedup.
+ * src/prefs_actions.c: removed unnecessary spaces/tabs.
+
+2002-07-05
+
+ * src/prefs_actions.c: comply with the coding style.
+ Modified the UI design.
+ * src/mainwindow.c: main_window_set_menu_sensitive(): enable Actions
+ menu when multiple messages are selected.
+
+2002-07-05
+
+ * src/prefs_actions.[ch]: merged the 'Actions' feature from claws.
+ update_actions_menu(): simplified the menu deletion.
+ * src/mainwindow.c: added 'Actions' menu to Tools and Configuration.
+
+2002-07-04
+
+ * src/codeconv.[ch]: implemented conv_jistoeuc(), conv_euctojis(),
+ conv_sjistoeuc(), and conv_guess_encoding(). Removed the dependency
+ to libkcc.
+
+2002-07-04
+
+ * configure.in: added check for strchr.
+
+2002-07-02
+
+ * src/prefs_common.[ch]
+ src/inc.c: added an option to inhibit receive error dialog.
+
+2002-07-01
+
+ * src/account.c: account_find_from_address(): support multiple
+ addresses in header.
+
+2002-06-28
+
+ * src/gtksctree.[ch]: changed GtkSCTree::anchor_row from gint to
+ GtkCTreeNode* so that it won't become invalid after the row move.
+ Removed dependency to gtkutils.c.
+ * src/prefs_common.[ch]
+ src/summaryview.c: summary_selected(): added an option to show
+ message when cursor keys are pressed on summary view.
+
+2002-06-28
+
+ * configure.in
+ src/Makefile.am
+ src/compose.c: changed "host_alias" to "target_alias" so that it
+ shows the correct system name on cross-compiling (thanks to
+ Patrice Mandin).
+
+2002-06-27
+
+ * src/prefs_account.[ch]: added the option menu to force an
+ authentication method for SMTP AUTH.
+ * src/send.c
+ src/smtp.[ch]: smtp_from(), smtp_auth(): added an argument to
+ specify the authentication method for SMTP AUTH.
+ smtp_ehlo(): allow AUTH responses that don't comply with the RFC.
+
+2002-06-25
+
+ * src/prefs_common.[ch]
+ src/compose.c: enabled "Wrap on input".
+
+2002-06-25
+
+ * src/summaryview.[ch]
+ src/mainwindow.c: added "Go to/{Prev,Next} new message" menu.
+ Made some code cleanups.
+
+2002-06-20
+
+ * src/folderview.c
+ src/prefs_common.[ch]: added the hidden option to specify the
+ policy of the vertical scrollbar on folder view.
+
+2002-06-19
+
+ * src/messageview.[ch]:
+ messageview_copy_clipboard(): fixed a bug that couldn't copy text
+ on MIME mode.
+ messageview_get_current_textview(): new.
+ messageview_get_text_widget(): removed.
+ * src/quote_fmt_parse.y: quote message even if msginfo is empty.
+ * src/compose.[ch]: implemented the "Paste as quotation" feature.
+ text_inserted(): new callback for "insert_text" signal.
+ Add quote mark to the pasted text if Compose::paste_as_quotation
+ is TRUE.
+
+2002-06-19
+
+ * src/compose.c: if the Content-Type of a file is text/*, check
+ its content and set the optimal Content-Transfer-Encoding (thanks
+ to Yoichi Yuasa).
+
+2002-06-18
+
+ * src/textview.c: textview_key_pressed(): pass key press event to
+ main window to activate menu shortcuts (thanks to Alfons).
+
+2002-06-18
+
+ * src/folder.c: folder_build_tree(): use strtoul() instead of atoi()
+ for mtime to prevent flooring.
+ * src/imap.c:
+ imap_move_msg()
+ imap_move_msgs_with_dest()
+ imap_copy_msgs_with_dest(): fixed a bug that prevented multiple
+ message copy/move.
+ imap_parse_envelope()
+ imap_cmd_envelope(): use RFC822.HEADER instead of ENVELOPE to get
+ full information of messages and simplify the parser. Also fixed
+ the bug that References header was ignored on threading.
+ imap_parse_one_address()
+ imap_parse_address(): removed.
+ imap_get_header(): new. It reads the RFC822 header and returns
+ a newly allocated string.
+ * src/procheader.[ch]: changed procheader_parse() to
+ procheader_parse_stream() and added different interfaces for it.
+
+2002-06-17
+
+ * po/zh_TW.Big5.po: fixed a mistake that caused a crash.
+
+2002-06-15
+
+ * version 0.7.8
+
+2002-06-13
+
+ * src/inc.c: inc_get_uidl_table(): fixed a bug that garbage time
+ could be inserted into the hash table.
+ inc_write_uidl_list(): a minor code cleanup.
+ * src/mainwindow.c: main_window_get_current_state():
+ make the state unexecutable on an empty folder.
+ * src/summaryview.c: summary_sort(): don't sort on an empty folder.
+ * src/pop.c: minor code cleanups.
+
+2002-06-12
+
+ * src/prefs_account.c: CREATE_RADIO_BUTTONS(): fixed a typo and
+ corrected the behavior of the radio buttons.
+
+2002-06-11
+
+ * implemented 'Delete messages after N days' feature for POP3.
+ * src/inc.[ch]:
+ inc_get_uidl_table()
+ inc_write_uidl_list(): moved the location of UIDL list file from
+ RC_DIR/uidl-* to RC_DIR/uidl/*.
+ Added received time for each UIDLs.
+ src/main.c: main(): create RC_DIR/uidl/ directory.
+ src/pop.[ch]: LOOKUP_NEXT_MSG(): delete expired messages here.
+ Added recv_time to Pop3MsgInfo.
+ src/prefs_account.[ch]: added an option for the number of days for
+ leaving messages.
+
+2002-06-09
+
+ * version 0.7.7
+
+2002-06-07
+
+ * src/folder.c: folder_set_missing_folders(): fixed a bug that
+ caused multiplication of special folders on startup if their
+ types were changed.
+ * src/folderview.c: folderview_remove_mailbox_cb(): modified the
+ label.
+
+2002-06-04
+
+ * src/compose.c: compose_reply(), compose_forward(): reverted the
+ last change since it causes lockup problem.
+
+2002-06-04
+
+ * src/compose.c: compose_reply(), compose_forward(): don't autowrap
+ the signature part.
+ compose_new_with_recipient(): workaround for initial XIM problem.
+
+2002-06-04
+
+ * src/mainwindow.c: sort ascending / descending order can be
+ specified with separated menu items.
+ Added "View/Sort/Don't sort" menu item.
+ * src/summaryview.[ch]: summary_sort(): added an argument for
+ sort type.
+
+2002-05-31
+
+ * implemented persistent sort order.
+ * src/folder.[ch]:
+ folder_build_tree(): read 'sort_key' and 'sort_type' attributes.
+ folder_write_list_recursive(): write sorting state.
+ src/mainwindow.c
+ src/summaryview.[ch]: summary_show(): sort if required.
+ select the top node on descending sort.
+ Removed SummarySortType and sorting state variables from
+ SummaryView.
+
+2002-05-30
+
+ * src/account.c
+ src/news.[ch]
+ src/nntp.[ch]
+ src/prefs_account.[ch]: enabled NNTP over SSL.
+ * src/nntp.c: nntp_group(): issue MODE READER command and retry
+ when GROUP command once failed (this seems to avoid problems on
+ some broken news servers).
+
+2002-05-30
+
+ * faq/it/*.html: corrected DOS linebreaks.
+ * faq/*/*.html: changed ">" to &quot;.
+
+2002-05-29
+
+ * src/prefs_account.c: prefs_account_protocol_activated(): hide
+ unnecessary frames in SSL tab.
+
+2002-05-29
+
+ * src/pop.[ch]
+ src/inc.c
+ src/prefs_account.[ch]: enabled STLS command in POP3.
+ * src/account.c: account_clist_set_row(): display TLS setting.
+
+2002-05-28
+
+ * src/compose.c: compose_send_later_cb(): support redirect function.
+ * src/imap.[ch]
+ src/ssl.h
+ src/prefs_account.[ch]: enabled STARTTLS command in IMAP4.
+ * src/send.c
+ src/smtp.[ch]: use SSLType instead of SSLSMTPType.
+
+2002-05-28
+
+ * src/utils.[ch]: make_dir(): wrapper for mkdir() and chmod().
+ * src/compose.c: compose_create(): removed unrequired lines.
+
+2002-05-27
+
+ * src/news.c: news_scan_group(): fixed a bug that set the wrong
+ values in some cases.
+ * src/prefs_account.c: corrected English in Advanced - Folder
+ settings.
+
+2002-05-23
+
+ * src/textview.c: textview_show_message(), textview_show_part():
+ fixed a bug that GtkSText *text pointed the incorrect object.
+ textview_add_part(): freeze GtkSText while adding RFC822 headers.
+ textview_show_part(): fixed a bug that couldn't display single
+ part MIME message as text.
+
+2002-05-22
+
+ * src/compose.c: compose_redirect_write_to_file(): correct the target
+ for change_file_mode_rw(). Check if fclose() succeeded. Unlink
+ incomplete file when an error occured.
+
+2002-05-22
+
+ * src/compose.c:
+ compose_create(): disable menus for draft on redirection mode.
+ compose_redirect_write_to_file(): correct the error handling of
+ fwrite().
+ * src/prefs_common.c: turned off the "Display recipient on `From'
+ column if sender is yourself" option by default.
+
+2002-05-21
+
+ * src/compose.[ch]: implemented 'Redirect' (aka Bounce) feature.
+ Based on the implementation of the claws branch.
+ compose_redirect(): create a new window and make it uneditable.
+ compose_redirect_write_to_file(): copy headers and body of
+ original message except for some.
+ compose_redirect_write_headers(): add extra "Resent-*" headers.
+ compose_create(): set menu sensitivity for redirection mode.
+
+2002-05-20
+
+ * src/codeconv.c: conv_encode_header(): fixed a bug that unnecessary
+ space is inserted between encoded string and the following folded
+ one (thanks to Masahiro Tomita).
+
+2002-05-19
+
+ * src/mainwindow.[ch]: some refactoring has been made.
+ main_window_toggle_message_view(): moved summary_toggle_view_real()
+ here.
+ * src/messageview.[ch]: messageview_is_visible(): new.
+ * src/summary_search.c
+ src/summaryview.[ch]: SummaryView::msg_is_toggled_on: removed.
+ Instead use messageview_is_visible().
+
+2002-05-17
+
+ * src/mainwindow.c: added 'Expand/Collapse all threads' menu.
+ * src/summaryview.[ch]:
+ summary_expand_threads(), summary_collapse_threads(): new.
+
+2002-05-17
+
+ * src/mainwindow.c: Fixed the behavior of
+ '/View/Show or hide/Folder tree' and
+ '/View/Show or hide/Message view' toggle menu.
+ Removed '/View/Toggle summary view' menu and integrated the
+ function into '/View/Show or hide/Message view'.
+ main_window_set_widgets(): change the state of toggle menu items.
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): updated menurc
+ strings.
+
+2002-05-16
+
+ * src/mimeview.c: mimeview_set_multipart_tree(): show single part
+ MIME contents other than text as children of message/rfc822 part.
+ * src/procmime.c:
+ procmime_mimeinfo_next(): modified for message/rfc822 part which
+ content-type is single part MIME.
+ procmime_scan_multipart_message(): fix for nested message/rfc822
+ part. Corrected the size of the contents of message/rfc822.
+ * src/textview.c: textview_show_part(): extract the contents of
+ multipart/* and message/rfc822. Some code cleanups.
+ textview_add_parts(): new. It adds the all parts under a part to
+ textview.
+ textview_clear(): reset body_pos and cur_pos.
+
+2002-05-16
+
+ * src/addr_compl.c: modified so that it behaves better.
+ get_address_from_edit(): ignore comma inside of brackets.
+ completion_window_apply_selection(): new. Only apply the current
+ clist selection.
+ completion_window_accept_selection(): removed.
+ address_completion_complete_address_in_entry(): minor code cleanup.
+ don't replace address in entry here.
+ completion_window_select_row(): always apply clist selection to
+ entry.
+ completion_window_key_press(): don't apply selection here.
+
+2002-05-15
+
+ * src/imap.c: imap_create_folder(): keep trailing directory separator
+ to create a folder that contains sub folder.
+
+2002-05-14
+
+ * src/foldersel.c: sort tree with case insensitive.
+ * src/mainwindow.c: allsel_cb()
+ src/messageview.c: messageview_select_all(): fixed 'Select all'
+ on MIME view.
+ * src/mainwindow.c: removed common and account prefs button from
+ the toolbar.
+
+2002-05-13
+
+ * src/compose.c: compose_account_option_menu_create(): check if
+ ac->name is NULL.
+
+2002-05-12
+
+ * version 0.7.6
+
+2002-05-12
+
+ * manual/ja/*: updated the Japanese manual (thanks to Yoichi Imai).
+ manual/en/*: updated the English manual.
+ * faq/de/*
+ faq/it/*: added German and Italian FAQ.
+ * faq/en/*
+ faq/es/*
+ faq/fr/*: updated FAQs.
+ * src/manual.[ch]
+ src/mainwindow.c: added German and Italian language.
+
+2002-05-11
+
+ * src/prefs_account.c: turn off "receive at get all" option by default
+ when creating an IMAP or News account.
+
+2002-05-11
+
+ * src/imap.c: imap_scan_tree(): don't use namespace for prefix.
+ * src/prefs_folder_item.c: show also identifier path.
+ Made layout using table. Show uneditable entry using background
+ color of window.
+ * src/procmime.c: procmime_get_tmp_file_name(): generate safe
+ file name.
+
+2002-05-11
+
+ * src/automaton.[ch]: added UI callback to Automaton.
+ * src/inc.c
+ src/pop.c: use callback instead of calling inc_progress_update()
+ directly.
+ pop3_getrange_uidl_recv(): don't fall back to LAST when 'get all'
+ option is set.
+
+2002-05-10
+
+ * src/folderview.c: properly sort abbreviated newsgroups.
+
+2002-05-10
+
+ * src/folderview.c
+ src/prefs_common.[ch]
+ src/summaryview.c: added an option to specify the minimum length
+ for abbreviated newsgroups name.
+
+2002-05-09
+
+ * src/folderview.c: folderview_check_new(): skip unselectable folders.
+ * src/summaryview.c: added 'Create filter rule' to the context menu.
+ * src/imap.c: some code cleanups.
+ imap_scan_tree_recursive(): get path separator for each calls.
+ imap_get_path_separator(): new.
+
+2002-05-08
+
+ * src/imap.[ch]: supported namespace for others/shared folders
+ (in progress).
+ imap_parse_namespace(): parse also others/shared namespace.
+ imap_find_namespace(): search also others/shared namespace.
+ * src/utils.[ch]:
+ strchr_parenthesis_close(): return pointer to closing parenthesis.
+ strsplit_parenthesis(): split parenthetic list into array of
+ strings.
+
+2002-05-08
+
+ * src/procheader.c: procheader_date_parse(): fixed a bug that didn't
+ parse date string like "Mon,6 May 2002 20:31:12 +0800".
+ procheader_scan_date_string(): new. Separated string scanning
+ part from procheader_date_parse().
+
+2002-05-07
+
+ * src/summary_search.c: summary_search_execute(): unlock while
+ selecting summary row (thanks to Martin Schaaf).
+ * src/summaryview.c: summary_set_column_titles(): reversed the
+ direction of the arrow so that it matches with Win/Mac style.
+
+2002-05-02
+
+ * src/compose.c: compose_write_headers(): quote self address name
+ if required. Some code cleanups. Don't override Newsgroups and
+ Cc with custom headers.
+ * src/imap.c: imap_add_msg(): return UID for appended message.
+ * src/compose.c: compose_queue(): check if queue folder exists.
+ * src/imap.c: QUOTE_IF_REQUIRED(): quote also other IMAP special
+ characters.
+ imap_open(): removed an unrequired argument.
+
+2002-04-25
+
+ * src/utils.[ch]: trim_string(): new. It trim characters longer than
+ the specified length and adds "...".
+ * src/folderview.c: trim folder name when displaying dialog.
+
+2002-04-23
+
+ * src/imap.c: imap_create_folder(): don't add prefix for root INBOX
+ folder.
+ * src/folderview.c: folderview_select()
+ src/summary_search.c: summary_search_execute(): lock summary view
+ while searching (thanks to Martin Schaaf).
+
+2002-04-21
+
+ * version 0.7.5
+
+2002-04-21
+
+ * sylpheed*.png: added new app icons by WAKAI Kazunao (thanks!).
+
+2002-04-21
+
+ * src/summaryview.c: summary_show(): fixed a bug that didn't process
+ the left marks.
+ * src/account.c: account_edit_prefs(): fixed a crash bug when account
+ name was empty.
+ * src/prefs_account.c: prefs_account_apply(): display error dialog
+ if account name is empty.
+ * src/imap.c: changed some log_print() to debug_print() to reduce
+ the amount of log.
+
+2002-04-21
+
+ * src/mh.c: mh_get_new_msg_filename(): new. It returns the filename
+ for new message.
+ mh_add_msg()
+ mh_do_move()
+ mh_do_move_msgs_with_dest()
+ mh_copy_msg()
+ mh_copy_msgs_with_dest(): use mh_get_new_msg_filename().
+ * src/utils.[ch]: added is_file_entry_exist() which returns TRUE
+ if stat() succeeded.
+ * src/imap.c:
+ imap_fetch_msg(): SELECT mailbox before FETCH if required.
+ imap_scan_folder(): set last_num using the value of UIDNEXT.
+ imap_select(): return immediately if there is no need for SELECT.
+ preserve the path of currently selected mailbox.
+ imap_status(): added UIDNEXT.
+
+2002-04-20
+
+ * src/folder.c: folder_item_scan(): removed the warning.
+ * src/inputdialog.[ch]: input_dialog_combo(): added an argument for
+ setting case sensitivity.
+
+2002-04-17
+
+ * src/mainwindow.c: main_window_create(): restrict the minimum size.
+
+2002-04-17
+
+ * src/compose.c: merged the new line-wrapping routine.
+ join_next_line(): fixed a bug that didn't join multibyte
+ characters.
+ get_indent_length(): modified enums and variable names.
+ INDENT_CHARS: don't indent ':'.
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): support folder identifier.
+ folderview_rm_imap_folder_cb(): integrated with
+ folderview_delete_folder_cb().
+
+2002-04-15
+
+ * src/folder.[ch]: folder_item_scan(): return -1 if scanning failed.
+ * src/folderview.c: folderview_check_new(): abort checking if
+ folder_item_scan() failed.
+
+2002-04-15
+
+ * src/imap.c: imap_create_missing_folders(): create only INBOX and
+ Trash.
+ * src/prefs_folder_item.c: prefs_folder_item_set_dialog(): made the
+ type of news folders unchangeable.
+ prefs_folder_item_destroy(): use prefs_dialog_destroy().
+ * src/prefs.[ch]: prefs_dialog_destroy(): new.
+
+2002-04-15
+
+ * src/prefs_account.[ch]: added special folder setting to Advanced
+ tab. Also moved "IMAP server directory" setting to there.
+ * src/account.[ch]: account_get_special_folder(): new. It returns
+ the optimal special folder for accounts.
+ * src/compose.c: use account_get_special_folder().
+ * src/prefs_folder_item.[ch]: new. Implemented folder property
+ dialog, and the special folder settings (most of the functions in
+ claws are not integrated yet, and the structure is slightly
+ modified).
+ * src/folderview.c: enabled Property menu.
+
+2002-04-14
+
+ * src/textview.c: IS_RFC822_CHAR(): make email parser also stop
+ scanning when encountering separators ',' and ';'.
+
+2002-04-12
+
+ * src/mainwindow.c: reorderd the menu a bit.
+ * src/compose.c: made 'Ctrl-Enter' ignore some modifiers.
+ compose_reply_set_entry(): made 'Reply to sender' work for
+ newsgroups.
+
+2002-04-11
+
+ * src/compose.c: compose_create(): set geometry hints to restrict
+ the maximum size of window.
+ * src/imap.c: imap_parse_list(): don't mark INBOX as \Noselect.
+ imap_get_uncached_messages()
+ imap_cmd_fetch(): ignore responses which don't include FETCH.
+
+2002-04-11
+
+ * COPYING: re-licensed (removal of "NO-VIRUS CLAUSE" and addition of
+ the clause for OpenSSL).
+
+2002-04-09
+
+ * src/prefs_account.c
+ src/smtp.[ch]: fixed a bug that didn't complie with OpenSSL enabled.
+
+2002-04-09
+
+ * src/smtp.[ch]
+ src/send.c
+ src/session.[ch]: first reorganization of SMTP protocol handling.
+ SMTPSession: new class which is a sub class of Session.
+ smtp_session_new(): moved send_smtp_open() into this function.
+ smtp_from(): moved SMTP AUTH calls into smtp_auth().
+ smtp_auth(): use server response for SMTP AUTH method.
+ smtp_ehlo(): read server response and set auth type flags.
+ smtp_helo(): separated EHLO command.
+ smtp_ok(): return the last server response if the buffer is
+ specified.
+ * src/esmtp.[ch]: merged into smtp.[ch].
+ * src/imap.c: imap_session_destroy_all(): use session_destroy().
+
+2002-04-08
+
+ * src/imap.c: imap_open(): show warning message if IMAP4 session
+ can't be established.
+
+2002-04-06
+
+ * src/compose.c: made template able to be inserted into the current
+ cursor position.
+ * src/mainwindow.c: moved some menu items under the submenu
+ '/View/Show or hide'.
+
+2002-04-05
+
+ * src/filter.c
+ src/inc.c: changed folder_find_item_from_path() to
+ folder_find_item_from_identifier().
+ src/prefs_account.c
+ src/prefs_filter.c: use folder_item_get_identifier() to specify
+ folder path.
+
+2002-04-05
+
+ * src/folder.[ch]: implemented "folder identifier" (and fixed a bug
+ existed in claws' implementation).
+ folder_find_from_name(): find Folder from name and type.
+ folder_get_identifier(): return Folder id.
+ folder_item_get_identifier(): return FolderItem id.
+ folder_find_item_from_identifier(): find FolderItem from id.
+ folder_get_type_string(): return folder type string.
+ folder_get_type_from_string(): return FolderType from string
+ (and fixed the wrong g_strcasecmp() usage).
+ * src/export.c
+ src/import.c: use folder_item_get_identifier() and
+ folder_find_item_from_identifier().
+
+2002-04-03
+
+ * src/imap.c: imap_parse_atom(): fixed a bug that cur_pos didn't
+ point the correct address after reading the continuous line.
+ imap_scan_folder(): set new number to 0 if unseen number is 0.
+ imap_parse_flags(): don't add new and unread flag if \Seen flag
+ exists.
+ * ac/Makefile.am: removed gpgme.m4 from MACROS.
+
+2002-04-02
+
+ * fixed the old problem that couldn't add flags to currently opened
+ folders.
+ * src/compose.c:
+ compose_send(): update outbox after saving.
+ compose_queue()
+ compose_draft_cb(): use procmsg_add_flags().
+ * src/folder.[ch]: added "opened" flag and "mark_queue" list to
+ FolderItem.
+ * src/main.c: send_queue(): send from all queue folders.
+ * src/mainwindow.c: send_queue_cb(): send from all queue folders.
+ * src/procmsg.[ch]:
+ procmsg_flush_mark_queue(): new. Write all queued flags into file.
+ procmsg_add_flags(): new. Add specified flags to the folder.
+ procmsg_send_queue(): added an argument to specify queue folder.
+ procmsg_save_to_outbox(): use procmsg_add_flags().
+ * src/summaryview.c:
+ summary_show(): up the opened flag of FolderItem.
+ summary_clear_list(): down the opened flag of FolderItem.
+ summary_write_cache(): call procmsg_flush_mark_queue().
+
+2002-04-01
+
+ * src/summaryview.[ch]: trim the tail of folder name and selected
+ number on the status label if the space is not enough.
+
+2002-04-01
+
+ * src/imap.c: imap_create_special_folder(): fixed a bug that didn't
+ set SpecialFolderItemType when creating special folders under
+ INBOX.
+ * ac/gpgme.m4: removed.
+ * ac/README: added.
+ * ac/missing/gdk-pixbuf.m4
+ ac/missing/gettext.m4
+ ac/missing/gpgme.m4
+ ac/missing/imlib.m4: added for convenience.
+
+2002-03-29
+
+ * src/esmtp.c: esmtp_auth(): fixed a bug that some garbages are
+ shown after the decoded challenge string. Fixed a memory leak.
+ Removed strtok().
+ * src/compose.c: compose_draft_cb(): mark draft messages as read.
+ * src/folderview.c: folderview_update_node(): disable emphasis
+ for Outbox and Draft folders.
+
+2002-03-28
+
+ * src/messageview.c: messageview_show(): fixed a memory leak.
+ * src/summaryview.c: summary_save_as(): show error dialog if copy
+ failed.
+ * src/about.c: about_show(): make the window active if it is already
+ open.
+
+2002-03-27
+
+ * src/compose.c: show confirmation dialog before sending if Subject
+ is empty.
+ compose_check_entries(): new.
+ compose_send()
+ compose_send_later_cb(): use compose_check_entries().
+ * src/imap.c: imap_parse_atom(): more fix for parsing responses.
+
+2002-03-26
+
+ * src/imap.c: imap_parse_atom(): fixed a bug that didn't parse the
+ responses with continuous line correctly, and fixed a memory leak.
+
+2002-03-26
+
+ * src/undo.c: undo_insert_text_cb(): fixed a crash bug if the text
+ length is large.
+ * src/gtkstext.c: gtk_stext_button_press(): cancel current selection
+ after pasting with middle button to prevent the selection growth.
+
+2002-03-25
+
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): modify filter rules only if the
+ target folder is in the default mailbox.
+ * src/utils.c: get_abbrev_newsgroup_name(): removed a redundant
+ line.
+
+2002-03-23
+
+ * src/compose.c
+ src/mainwindow.c
+ src/prefs_common.c: changed 'Tool' menu to 'Tools'.
+ Moved 'Delete duplicated messages' under 'Tools'.
+
+2002-03-23
+
+ * src/folderview.c: SET_SPECIAL_FOLDER(): keep the same parent
+ when moving.
+ * src/imap.c: imap_create_special_folder(): fixed a crash bug
+ when folder creation failed, and re-try to create folders under
+ INBOX.
+ imap_scan_tree_recursive(): don't automatically add namespace
+ prefix if it's INBOX. Search also under the INBOX for special
+ folders.
+ * src/foldersel.c: SET_SPECIAL_FOLDER(): keep the same parent
+ when moving.
+
+2002-03-23
+
+ * src/utils.[ch]: get_abbrev_newsgroup_name(): new. It returns the
+ abbreviated newsgroup name.
+ * src/folderview.c: folderview_update_node(): display newsgroups
+ with abbreviated name if name and path is the same.
+ * src/summaryview.c: summary_status_show(): show the newsgroup with
+ abbreviated name.
+
+2002-03-23
+
+ * src/foldersel.c
+ src/folderview.c: changed the label 'Draft' to 'Drafts'.
+ * src/imap.c: changed the directory name 'Draft' to 'Drafts'.
+ imap_create_missing_folders(): fixed the wrong assignment of
+ Queue folder to draft.
+
+2002-03-22
+
+ * enabled Sent / Draft / Queue folders on IMAP server.
+ * src/compose.c: compose_queue(), compose_draft_cb(): use account's
+ queue and draft folder if they exist.
+ src/imap.[ch]:
+ imap_create_trash(): removed.
+ imap_create_special_folder(): new. Generalized imap_create_trash().
+ imap_create_missing_folders(): automatically create missing folders.
+ imap_is_msg_changed(): added the dummy method.
+ imap_scan_tree_recursive(): search also Sent, Draft and Queue
+ folders. Minor code cleanups.
+ imap_parse_envelope(): check for null strings.
+ src/procmsg.c: procmsg_read_cache(): add F_QUEUE or F_DRAFT flag
+ for messages on IMAP folder.
+
+2002-03-20
+
+ * src/compose.c: compose_send(): use account's outbox folder
+ if it exists.
+ * src/procmsg.[ch]: procmsg_save_to_outbox(): changed the API so
+ that the outbox can be specified.
+
+2002-03-20
+
+ * src/compose.c: don't save to outbox when messages are queued.
+ compose_save_to_outbox(): moved to procmsg.c.
+ * src/procmsg.[ch]: procmsg_send_queue(): save to outbox when
+ sending succeeded.
+ procmsg_save_to_outbox(): new. Removes the queueing headers if
+ needed, and adds the given file to the outbox.
+
+2002-03-20
+
+ * src/compose.c: compose_wrap_line(): treat '|' also as quote char.
+ get_indent_length(): treat ':' and '#' also as quote char, and
+ cleaned up using strchr().
+
+2002-03-19
+
+ * src/mainwindow.c: modified some menu items.
+
+2002-03-19
+
+ * src/defs.h: changed OUTBOX_DIR from "outbox" to "sent"
+ (current "outbox" will be kept until rescan).
+ * src/folder.c: folder_set_missing_folders(): create the missing
+ folders.
+ * src/foldersel.c
+ src/folderview.c: changed 'Outbox' to 'Sent'.
+ * src/main.c: call folder_set_missing_folders().
+ * src/mh.c: mh_scan_tree(): create missing folders.
+ * src/summaryview.c: summary_set_menu_sensitive(): fixed a bug that
+ didn't set the menu sensitivity correctly.
+
+2002-03-18
+
+ * src/folderview.c
+ src/imap.[ch]: implemented folder renaming on IMAP (thanks to Mio).
+ folderview_rename_folder_cb(): reopen the current folder when
+ the ancestor is renamed.
+ imap_rename_folder(): new method implementation.
+ imap_cmd_rename()
+ imap_rename_folder_func(): new.
+ imap_remove_folder(): remove also the cache directory.
+
+2002-03-17
+
+ * src/imap.c: implemented locale encoding <-> modified utf-7
+ conversion, and supported i18n of folder name (thanks to Suzuki
+ Mio).
+ imap_path_separator_subst(): handle the escape characters of
+ modified utf-7.
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): new.
+ imap_create_trash(): modified so that it create the Trash folder
+ to the correct location when imap directory is specified.
+ imap_get_real_path(): removed debug print.
+
+2002-03-14
+
+ * src/socket.c: implemented timeout for DNS lookup and connect().
+ sock_connect_by_hostname(): timeout support and code cleanup.
+ sock_connect_with_timeout(): new.
+ sock_peek(): implemented SSL peek.
+
+2002-03-13
+
+ * src/messageview.c: messageview_show(): display single-part
+ text/html messages with the normal text view.
+ * src/account.c
+ src/addrbook.c
+ src/addrindex.c
+ src/compose.c
+ src/imap.c
+ src/inc.c
+ src/jpilot.c
+ src/ldif.c
+ src/mbox.c
+ src/mimeview.c
+ src/news.c
+ src/prefs.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_display_header.c
+ src/prefs_filter.c
+ src/procheader.c
+ src/procmime.c
+ src/procmsg.c
+ src/recv.c
+ src/rfc2015.c
+ src/send.c
+ src/sourcewindow.c
+ src/summaryview.c
+ src/template.c
+ src/textview.c
+ src/unmime.c
+ src/utils.c
+ src/vcard.c
+ src/xml.c: added 'b' to the option of all fopen().
+
+2002-03-09
+
+ * version 0.7.4
+
+2002-03-09
+
+ * src/ssl.[ch]: match its coding style.
+ * src/compose.c: compose_send_later_cb(): fixed a bug that failed
+ to save file.
+ * faq/Makefile.am
+ faq/en/Makefile.am
+ faq/en/sylpheed-faq*.html
+ faq/es/Makefile.am
+ faq/es/sylpheed-faq*.html
+ faq/fr/Makefile.am
+ faq/fr/sylpheed-faq*.html
+ configure.in
+ Makefile.am
+ src/Makefile.am
+ src/defs.h
+ src/mainwindow.c
+ src/manual.[ch]: added FAQs in English, Spanish and French.
+
+2002-03-07
+
+ * manual/en/sylpheed*.html: updated to the latest version.
+ * libkcc/jis.c
+ src/addrcache.c
+ src/addritem.c
+ src/ldif.c
+ src/mgutils.c: include string.h to remove warning about strlen()
+ etc.
+ * src/folder.c
+ src/folderview.c
+ src/inc.c
+ src/logwindow.c
+ src/mainwindow.c
+ src/mimeview.c
+ src/prefs.c
+ src/prefs_common.c
+ src/procheader.c
+ src/send.c
+ src/session.c
+ src/sigstatus.c
+ src/summaryview.c: added break to the last label of switch to
+ prevent the 'deprecated use of label at end of compound statement'
+ warning at gcc-3.0.
+ * src/rfc2015.c: passphrase_cb(): fixed the type of r_hd.
+
+2002-03-06
+
+ * src/inc.[ch]: preserve the pointer to IncProgressDialog to the
+ static list.
+ inc_cancel_all(): new. It cancels the all current incorporation.
+ * src/mainwindow.c: added 'Cancel receiving' menu.
+ * src/textview.c: a minor fix for single-part MIME messages, and
+ a bit of cleanup for textview_write_body().
+
+2002-03-05
+
+ * src/inc.c: inc_write_uidl_list(): fixed a bug that lost UIDL
+ information if any errors occured before issuing UIDL command.
+ src/inc.h: added uidl_is_valid to Pop3State.
+ src/pop.c: set uidl_is_valid to TRUE if UIDL becomes valid.
+
+2002-03-03
+
+ * version 0.7.3
+
+2002-03-03
+
+ * src/mimeview.c: mimeview_create(): set the initial notebook page
+ to 0.
+ * src/folderview.c: folderview_selected(): scroll the view if the
+ selected row is hidden.
+ * src/prefs_filter.c: prefs_filter_register_cb(): scroll the view
+ and select the added row.
+ * src/summaryview.c: fix threading for null message ids.
+
+2002-03-02
+
+ * src/textview.c: textview_show_message(): follow message/rfc822
+ parts.
+ textview_add_part(): add a caption before the attached text files.
+ textview_show_header(): don't add the newline.
+ * src/messageview.c: enabled message search also in MIME mode.
+
+2002-03-01
+
+ * src/messageview.c: messageview_show(): set header state of
+ MimeView's TextView, too.
+ * src/mimeview.c: mimeview_show_message(): call
+ textview_show_message() to display message.
+ * src/textview.c: textview_add_part(): new. It adds the content
+ of message part without clearing the view.
+ textview_show_message(): display all parts with appropriate
+ style.
+ textview_write_body(): separated from textview_show_part().
+
+2002-02-28
+
+ * src/mainwindow.c
+ src/prefs_common.c: added ISO-8859-15 to the codesets for
+ displaying and sending.
+ * src/codeconv.c: conv_codeset_strdup(): return NULL if code
+ conversion failed, and made caller deal with it.
+ * src/compose.c: compose_write_to_file(): show error dialog when
+ code conversion failed, and let user select whether to send it
+ as is or not.
+ * src/textview.c: textview_write_line(): show the original string
+ if code conversion failed.
+
+2002-02-27
+
+ * src/inc.c: get_spool(): fixed a bug that failed to unlock mbox
+ if copy_mbox() failed (thanks to Alexander Kabaev).
+ * src/prefs_account.[ch]: added separate user ID / password setting
+ for SMTP AUTH.
+ * src/send.c: send_message_smtp(): use separate user ID / password
+ for SMTP AUTH if it is specified.
+
+2002-02-26
+
+ * src/inc.[ch]
+ src/pop.[ch]: refactored the UIDL management.
+ store the information of messages into the array of Pop3MsgInfo
+ structure, and do full scanning of not retrieved messages.
+
+2002-02-26
+
+ * src/filesel.c
+ src/foldersel.c
+ src/mainwindow.c: set WMCLASS for window/dialog.
+ * src/codeconv.c: conv_codeset_strdup(): return source string
+ when jconv_alloc_conv() failed.
+
+2002-02-25
+
+ * src/mh.c: mh_scan_tree_recursive(): changed the hardcoded directory
+ name to the macros.
+
+2002-02-24
+
+ * src/messageview.c
+ src/mimeview.[ch]
+ src/summaryview.c: implemented the new notebook tab interface for
+ MIME message.
+ * src/textview.[ch]: fixed line space related glitches.
+
+2002-02-23
+
+ * src/prefs_filter.c:
+ prefs_filter_rename_path()
+ prefs_filter_delete_path(): fixed a crash when flt->dest was NULL.
+
+2002-02-23
+
+ * src/recv.[ch]: cancel data receiving if RecvUIFunc returns FALSE.
+ * src/pop.c: pop3_retr_recv(): fixed false 'No space' when cancelled
+ while getting data.
+ * src/inc.c: inc_pop3_recv_func(): abort data receiving when
+ cancelled, and fixed potential crash bug.
+ * src/grouplistdialog.c: enabled cancelling of data receiving.
+ * src/news.c: news_get_group_list(): destroy current session if
+ retrieving failed.
+
+2002-02-22
+
+ * src/manage_window.[ch]: fixed a bug that caused crash when
+ the main window was hidden.
+ MANAGE_WINDOW_SIGNALS_CONNECT(): new macro.
+ Monitor "unmap_event", "destroy" events.
+ * src/account.c;
+ src/addressbook.c
+ src/compose.c
+ src/export.c
+ src/filesel.c
+ src/foldersel.c
+ src/grouplistdialog.c
+ src/import.c
+ src/inputdialog.c
+ src/mainwindow.c
+ src/message_search.c
+ src/passphrase.c
+ src/prefs_account.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_display_header.c
+ src/prefs_filter.c
+ src/prefs_template.c
+ src/summary_search.c
+ src/summaryview.c: use MANAGE_WINDOW_SIGNALS_CONNECT() macro to
+ connect signals for window management.
+
+2002-02-21
+
+ * src/prefs_account.[ch]: added receive size limit option.
+ * src/pop.c: skip messages larger than the limit size.
+ LOOKUP_NEXT_MSG(): new macro.
+ * src/compose.c: compose_attach_append(): check whether the file
+ is readable.
+
+2002-02-21
+
+ * src/rfc2015.c: commented out dump_mimeinfo() and dump_part().
+ changed g_message()'s to debug_print() and g_warning().
+ rfc2015_decrypt_message(): fixed a bug that duplicated message
+ parts when decryption was failed/cancelled. And made some code
+ cleanup.
+ * src/passphrase.c: made the dialog transient.
+ * src/prefs.c: prefs_config_parse_one_line(): removed debug_print().
+
+2002-02-20
+
+ * src/messageview.c
+ src/procmsg.[ch]: fixed a bug that failed to parse multipart
+ messages if GPGME was enabled.
+ * src/rfc2015.c: commented out copy_gpgmedata_to_temp() which
+ is not used.
+ * src/prefs_account.c: prefs_account_privacy_create(): modified
+ the vertical spacing.
+
+2002-02-19
+
+ * src/menu.[ch]: menu_set_sensitive_all(): new.
+ menu_set_insensitive_all(): made it a wrapper for
+ menu_set_sensitive_all().
+ * src/prefs_account.c:
+ prefs_account_open()
+ prefs_account_protocol_set_optmenu(): made the protocol type
+ unchangeable after creating an account.
+ * src/compose.c: compose_attach_parts(): traverse MIME tree to
+ extract all attathed files from nested multipart MIME message.
+
+2002-02-19
+
+ * src/procmsg.[ch]: procmsg_get_mark_sum(): added arguments to
+ obtain minimum/maximum number, and to specify first number
+ limit.
+ * src/folderview.c
+ src/inc.c: enabled new message checking on news folder.
+ * src/news.c: news_scan_group(): implemented. Guess new/unread
+ message number from the response of GROUP command and the mark
+ data.
+ news_select_group(): return the total/first/last number.
+ * src/prefs_account.c: prefs_account_receive_create(): modified
+ the text of the 'Get all' check button.
+
+2002-02-18
+
+ * src/account.c: made 'Get all' checkbox available for IMAP4 and
+ NNTP accounts.
+ * src/inc.c: corrected the argument of folderview_check_new().
+ * src/prefs_account.c: modification for the "`Get all' checks for
+ new mail on this account" checkbox.
+
+2002-02-18
+
+ * src/folderview.[ch]:
+ folderview_rescan_tree(), folderview_rescan_all(): renamed from
+ folderview_update_tree() and folderview_update_all().
+ folderview_update_all_node(): removed.
+ folderview_check_new(): new. If the argument is NULL, it checks
+ all local folders. If the arguments is specified, it checks
+ the (local and remote) folder.
+ * src/inc.c:
+ inc_account_mail()
+ inc_all_account_mail(): check also IMAP4 account.
+
+2002-02-18
+
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): modify the filter rules when folder
+ is renamed/deleted.
+ * src/prefs_filter.[ch]:
+ prefs_filter_rename_path(): new. It renames the destination paths
+ in the filter list.
+ prefs_filter_delete_path(): new. It deletes the filter rules if
+ the destination paths matched.
+ * thanks to Neill Miller for above.
+
+2002-02-17
+
+ * src/compose.c: inherit attached files when forwarding or reediting
+ (rewrote the code in claws branch).
+ compose_attach_parts(): new. It extracts and attaches the files
+ in the given message.
+ compose_attach_append(): chnaged the types of arguments.
+ * src/messageview.c: messageview_show(): moved the GPG decryption
+ code to procmsg.c.
+ * src/procmsg.[ch]: procmsg_open_message_decrypted(): new.
+
+2002-02-16
+
+ * version 0.7.2
+
+2002-02-16
+
+ * src/summary_search(): summary_search_execute(): scroll the view
+ when message view is hidden.
+
+2002-02-15
+
+ * src/foldersel.c: foldersel_set_tree(): made different type of
+ folders selectable in moving mode.
+ * src/folderview.[ch]: folderview_update_msg_num(): compare the
+ numbers with the CTree's labels, and don't update folder_item here.
+ * src/imap.c: imap_move_msg(), imap_move_msgs_with_dest():
+ implemented moving between different type of folders.
+ * src/mh.c: SET_DEST_MSG_FLAGS(): new macro.
+ mh_do_move(), mh_do_move_msgs_with_dest(): new (renamed previous
+ mh_move_msg() and mh_move_msgs_with_dest()).
+ mh_move_msg(), mh_move_msgs_with_dest(): implemented message
+ moving between different type of folders.
+ mh_copy_msg(), mh_copy_msgs_with_dest(): some code cleanups.
+ * src/summaryview.c: summary_status_show(): update folder_item
+ here.
+ * po/POTFILES.in: removed reference to headerwindow.c.
+ * src/summaryview.c: summary_step(): fixed the behavior on the
+ head and tail of the list.
+
+2002-02-15
+
+ * src/mainwindow.c: main_window_set_menu_sensitive(): set 'Show
+ all header' toggle state from the property of the TextView.
+ * src/summaryview.[ch]: made 'All header' toggle switch.
+ Prohibited unnecessary menu update.
+ summary_select_node(): added the argument 'do_refresh'.
+ Some code cleanups.
+
+2002-02-14
+
+ * src/utils.c: strsplit_with_quote(): remove quotation characters
+ in the function (fix composer's external editor problem) (thanks
+ to Stefaan A Eeckels).
+ * src/mainwindow.[ch]: made 'Show all header' toggle switch.
+ main_window_menu_callback_block()
+ main_window_menu_callback_unblock(): new.
+ main_window_set_menu_sensitive(): set the toggle status of
+ menu items.
+ show_all_header_cb(): read the status of toggle menu item.
+ * src/mainwindow.[ch]: made 'Thread view' toggle switch.
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): removed
+ 'Unthread view'.
+
+2002-02-13
+
+ * src/imap.c: imap_add_msg(): fixed a bug that didn't replace
+ the path separator (thanks to Sergey Vlasov).
+ * src/gtkutils.c: gtkut_editable_get_selection(): return NULL
+ if the length of selection is zero.
+ Fixed the assertion.
+ * src/utils.c: str_open_as_stream(): return immediately if
+ the length of str is zero.
+ * src/headerwindow.[ch]: removed.
+ * src/socket.[ch]
+ src/inc.c: removed stale thread support codes.
+
+2002-02-12
+
+ * src/procmsg.c: procmsg_open_message(): modified so that it
+ returns the stream of decrypted message file if it exists
+ (this fixes the failure of gpg decryption in messageview.c).
+
+2002-02-11
+
+ * version 0.7.1
+
+2002-02-11
+
+ * src/compose.[ch]
+ src/gtkutils.[ch]
+ src/prefs_template.c
+ src/quote_fmt.h
+ src/quote_fmt_parse.y
+ src/summaryview.c
+ src/utils.[ch]: if the part of the message text is selected, use
+ it for quoted text instead of the entire message body (thanks to
+ Darko Koruga).
+ src/utils.[ch]: str_open_as_stream(): new. It returns an
+ temporary stream for the given string.
+ * src/main.c: added "--send" command line option.
+ * src/compose.c: compose_reply_set_entry(): add From address to
+ Cc if Reply-To and to_all are both specified.
+ * Makefile.am: correct the Source: line in the RPM spec file in
+ .tar.bz2 package.
+
+2002-02-07
+
+ * src/procmsg.c: procmsg_open_message(): fetch message if the cache
+ doesn't exist.
+ * src/foldersel.[ch]: foldersel_folder_sel(): added an argument
+ that specifies the folder selection type.
+ * src/addressbook.c
+ src/compose.c
+ src/editaddress.c
+ src/editgroup.c
+ src/folderview.c
+ src/importldif.c
+ src/mainwindow.c
+ src/md5.c
+ src/mimeview.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_filter.c
+ src/summaryview.c: made it compile with C compilers other than gcc
+ (thanks to Shawn Houston).
+
+2002-02-06
+
+ * src/imap.c: imap_copy_msgs_with_dest(): fixed a bug on traversing
+ list.
+ * src/prefs_common.c: made the key binding setting separate dialog.
+ * src/addressbook.c: addressbook_format_address(): add "" around
+ the display name if it contains comma (thanks to Satoshi Watanabe).
+ * src/addr_compl.c: get_complete_address(): add "" around the
+ display name if it contains comma.
+ get_address_from_edit(): handle the quotation character correctly.
+ * src/addr_compl.c: get_complete_address()
+ src/addressbook.c: addressbook_format_address(): fixed a bug that
+ caused wrong text processing if the display name is empty.
+ * updated NEWS.
+
+2002-02-05
+
+ * src/compose.c: compose_exec_ext_editor_real(): replaced
+ g_strsplit() with strsplit_with_quote().
+ * src/foldersel.c
+ src/folderview.c: folderview_drag_motion_cb(): minor code cleanups.
+ * src/folderview.c:
+ folderview_drag_motion_cb()
+ folderview_drag_received_cb(): allow dropping into IMAP4 folder.
+ * src/utils.c: get_file_size_as_crlf(): use fgets() instead of
+ fread().
+ * src/imap.c
+ imap_copy_msg()
+ imap_copy_msgs_with_dest(): use imap_add_msg() if the source
+ of the message is different from the current mailbox.
+ Return the correct value.
+ imap_cmd_append(): properly implemented the APPEND command.
+
+2002-02-04
+
+ * src/mainwindow.c
+ src/messageview.[ch]
+ src/summaryview.[ch]
+ src/textview.[ch]: show all headers in the message view, and don't
+ use the header window anymore.
+ * src/mainwindow.c
+ src/prefs_common.c: changed the default shortcut of 'compose new
+ message'.
+ * src/mainwindow.c
+ src/summaryview.[ch]: summary_display_msg_selected(): new.
+ Show the selected message if 'Show all header' is selected.
+ * src/mh.c
+ src/sourcewindow.c: changed some procmsg_get_message_file_path()
+ to procmsg_get_message_file() to be sure the message is
+ retrieved.
+ * src/folderview.c: folderview_drag_motion_cb(): allow DnD from
+ any folder to MH folder.
+ folderview_drag_received_cb(): copy messages instead of moving
+ if the source folder is news or IMAP.
+ * src/mainwindow.c
+ src/summaryview.c: allow copy from news folder.
+
+2002-02-03
+
+ * src/prefs_common.c: prefs_other_create(): modified the design
+ of the external command settings.
+ prefs_keybind_apply_clicked(): made the Mew / Wanderlust keybind
+ preset closer to the original.
+ Added Mutt keybind preset.
+ Also change the compose keybinds.
+ * src/compose.c: modified some menu shortcuts.
+ * src/codeconv.c: modified the locale_table for Thai encoding.
+
+2002-02-01
+
+ * src/Makefile.am: added $(GPGME_CFLAGS) to INCLUDES.
+ * src/prefs_common.c: prefs_interface_create(): modified the
+ description for menu shortcut.
+
+2002-01-31
+
+ * src/gtkutils.[ch]: added gtk_stext_clear().
+ * src/compose.[ch]
+ src/mainwindow.c
+ src/summaryview.[ch]: enabled multiple forwarding.
+ * src/summaryview.c:
+ summary_set_marks_selected(): set marks for all selected row.
+ summary_reply(): moved from summary_reply_cb().
+ * compose.[ch]: compose_forward(): modified so that it receives
+ the message list.
+ * src/mainwindow.c: cleanup for reply processing.
+ * src/summaryview.c: summary_reply(): fixed a memory leak.
+ summary_key_pressed(): removed hardcoded mark / mark as unread
+ shortcuts.
+ * src/mainwindow.c
+ src/prefs_common.c: added mark / mark as unread shortcuts to
+ the menu.
+
+2002-01-30
+
+ * src/compose.c: compose_wrap_line_all(): wrap quoted part even
+ if prefs_common.linewrap_quote is not set (it is only for
+ auto-wrapping on reply).
+ * src/prefs_account.c: prefs_account_open(): initialize tmp_ac_prefs
+ when creating a new account.
+ * src/mh.c: mh_get_msg_list(): use also st_ctime to detect
+ directory change.
+ * src/prefs_common.c: prefs_interface_create(): modified the
+ description of key binds selector.
+
+2002-01-29
+
+ * src/mimeview.c: fixed multiple dialog / moving by correcting
+ button / key event processing.
+ * src/mimeview.[ch]
+ src/textview.c: pass some key press events to MimeView in MIME
+ mode.
+ * src/prefs_filter.c: fixed a bug that didn't set the order of
+ rules correctly.
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): fixed
+ empty_menurc string.
+
+2002-01-28
+
+ * src/mainwindow.c
+ src/prefs_common.c: reorganized the menu shortcuts.
+ Added 'View - Toggle summary view'.
+ * src/summaryview.[ch]: summary_toggle_view(): made it public
+ function.
+ * src/prefs_common.[ch]: swapped the position of 'Shortcut key'
+ and 'On exit'.
+ * src/importldif.c: imp_ldif_delete_event(): fixed segfault when
+ closing the dialog with window manager (in more appropriate way).
+ * src/imageview.[ch]
+ src/messageview.c
+ src/mimeview.c: fixed wrong scrolling position when switching
+ between text and image parts. Also free the unrequired image
+ (thanks to Sergey Vlasov).
+ * src/prefs_common.c: disabled 'Go to inbox after receiving new mail'
+ by default.
+
+2002-01-28
+
+ * src/prefs_common.c: implemented shortcut quick changer.
+ * src/folderview.c: folderview_key_pressed()
+ src/summaryview.c: summary_key_pressed(): removed some hardcoded
+ key binds.
+
+2002-01-25
+
+ * src/procmime.c:
+ procmime_get_mime_type()
+ procmime_get_mime_type_table(): made the MIME type search case
+ insensitive.
+ * src/gtkstext.c:
+ gtk_stext_delete_line(): delete newline on empty line.
+ gtk_stext_delete_to_line_end(): delete newline if cursor is on
+ the last of line.
+ (thanks to Yasuzaki Masayoshi.)
+
+2002-01-23
+
+ * src/compose.c
+ src/gtkstext.[ch]: removed the hardcoded shortcuts in GtkSText,
+ and made them customizable.
+ * src/utils.[ch]: added get_file_size_as_crlf() which returns
+ the file size when converting LF to CR+LF.
+
+2002-01-22
+
+ * src/compose.c: enabled 'Ctrl-Enter' or
+ 'Ctrl-(other modifier keys)-Enter' shortcut that didn't work
+ before.
+ * src/gtkstext.c: disabled some Emacs key bindings.
+ gtk_stext_key_press(): don't extend selection when Shift-Enter
+ is pressed to prevent the disapperance of cursor.
+ * src/summaryview.c: summary_select_next_unread(): added the button
+ to search unread message again from the beginning to the dialog.
+ * src/folderview.c: folderview_key_pressed(): go to next unread
+ folder if space key is pressed on the empty folder.
+ Move CTree focus before selecting row.
+
+2002-01-21
+
+ * src/defs.h: modified the XLFD of default fonts.
+ * src/textview.c: textview_create(): fixed a bug that caused
+ segfault if font couldn't be loaded.
+ * src/folderview.c
+ src/grouplistdialog.c: compare subscribed groups with path.
+ * src/prefs_filter.c: changed 'Operator' to 'Condition'.
+
+2002-01-20
+
+ * src/compose.c: compose_wrap_line_all(): fixed wrapping crash
+ when URL is wider than wrapping margin.
+ * src/mainwindow.c
+ src/prefs_filter.[ch]
+ src/summaryview.[ch]: added "Create filter rule" function based
+ on the patch from Luca Rosellini.
+ * src/summaryview.c: summary_filter_open(): added X-List and
+ X-Mailing-list to the automatically detected headers.
+
+2002-01-18
+
+ * configure.in: support Mac OS X (Darwin).
+
+2002-01-16
+
+ * src/prefs_filter.c: use inc_(un)lock() instead of
+ inc_autocheck_timer_{remove|set}().
+ * src/summaryview.c: summary_sort(): use gtk_ctree_sort_recursive()
+ instead of gtk_ctree_sort_node() so that messages within threads
+ are also sorted.
+ * src/procmsg.c: procmsg_read_mark_file(): fixed a bug that the
+ target of sizeof was wrong and caused crash on Alpha architecture
+ (thanks to Motonobu Ichimura).
+
+2002-01-15
+
+ * src/foldersel.c:
+ foldersel_gnode_func(): made the names of special folders
+ translated strings.
+ foldersel_set_tree(): move the special folder to the top.
+ * src/inputdialog.[ch]: input_dialog_query_password(): new.
+ * src/imap.c
+ src/inc.c
+ src/news.c
+ src/send.c: use input_dialog_query_password() instead of their
+ own query functions.
+
+2002-01-14
+
+ * src/defs.h: modified the default font.
+ * src/folder.[ch]
+ src/mh.[ch]
+ src/imap.[ch]
+ src/news.[ch]: moved the class definition and some methods to
+ the proper location.
+
+2002-01-11
+
+ * src/mimeview.c: mimeview_save_as()
+ src/summaryview.c: summary_save_as(): put the default filename
+ based on the subject.
+ * src/utils.[ch]: added subst_chars() and subst_for_filename()
+ which substitute some special characters with underscore.
+ * src/filesel.c: filesel_select_file(): select the default filename.
+
+2002-01-10
+
+ * INSTALL
+ INSTALL.jp: added the description and the URL for libjconv.
+ * src/mainwindow.c: menu entries cleanup.
+
+2002-01-09
+
+ * README
+ README.jp
+ src/about.c: modified the copyright year.
+ * src/gtkstext.h: added the notice for modification by the Sylpheed
+ Team.
+
+2002-01-08
+
+ * INSTALL
+ INSTALL.jp: added the URL for compface.
+
+2002-01-07
+
+ * version 0.7.0
+
+2002-01-07
+
+ * src/headerwindow.c
+ src/logwindow.c
+ src/messageview.c
+ src/sourcewindow.c: set wmclass when creating windows.
+
+2002-01-04
+
+ * src/compose.c: compose_wrap_line_all(): fixed the bug that
+ caused infinite loop when wrapping certain patterns of quoted text.
+
+2002-01-02
+
+ * src/imap.c: imap_parse_envelope(): put the assertion after
+ imap_parse_address() to prevent segmentation fault.
+
+2001-12-31
+
+ * src/folderview.c
+ src/mainwindow.c: modified some labels of menu items.
+ * src/ldif.c: put the return value of fgetc() in a gint.
+ * src/importldif.c: don't brace null strings with _().
+ * src/compose.c: moved the position of Subject entry to the last.
+ Reorganized the menu.
+ compose_draft_cb(): added 'keep editing after saving to draft'
+ feature.
+
+2001-12-30
+
+ * src/mainwindow.c: reorganization of main menu. Removed 'Summary'
+ menu. Moved 'Help' menu to just the right of 'Configuration'.
+ Removed 'File - Close' menu item.
+
+2001-12-25
+
+ * src/mainwindow.c: some menu reorganization.
+ * AUTHORS: updated. Added more contributors.
+ * src/account.c: account_row_moved(): new. Moves displayed row to
+ the appropriate position when up / down button are pressed.
+ account_clist_set(): move displayed row to the appropriate position.
+ * src/compose.c
+ src/mainwindow.c: set title and wmclass when creating windows.
+
+2001-12-24
+
+ * src/gtkstext.c: fixed a bug that didn't show block cursor
+ correctly. Removed unnecessary GdkGC copy. Fixed cursor
+ coordinate.
+ * src/compose.c
+ src/gtkutils.[ch]
+ src/textview.[ch]
+ src/undo.c: modified to use GtkSText.
+ * src/menu.h: added #include <gtk/gtkmenu.h>.
+
+2001-12-23
+
+ * acconfig.h
+ configure.in: added XIM checking for GTK+.
+ * src/gtkstext.[ch]: new. Copied GtkText in GTK+ and renamed.
+
+2001-12-22
+
+ * src/filter.c: added #include <sys/types.h>.
+
+2001-12-21
+
+ * src/template.c: template_write_config(): fixed a typo.
+ * src/compose.c: toolbar_linewrap_cb(): call compose_wrap_line_all().
+ * src/filter.[ch]
+ src/prefs_filter.c: supported regular expression (thanks to
+ Yukihiro Nakai).
+ * src/undo.c: undo_paste_clipboard_cb(): fixed a bug that broke
+ undo state when pasted clipboard was empty.
+ undo_check_size(): use g_list_last().
+ undo_undo()
+ undo_redo(): fixed NULL checking and made a bit of optimization.
+ Some code cleanups.
+ * src/prefs_common.c: changed the default value of linewrap length
+ to 72.
+
+2001-12-20
+
+ * reorganization of pixmap management.
+ * src/stock_pixmap.[ch]: new. This module manages all static pixmaps.
+ * modified every files which directly use pixmaps data to use
+ stock_pixmap_*().
+ * src/undo.[ch]: renamed undo_set_undo_change_funct() to
+ undo_set_change_state_func(), and changed its argument from
+ GtkWidget* to gpointer.
+ undo_merge(): code cleanup.
+ * src/compose.c: renamed compose_set_undo() to
+ compose_undo_state_changed().
+
+2001-12-19
+
+ * src/account.c: account_find_from_address(): made it case
+ insensitive.
+ * src/addressbook.c: addressbook_create(): set wmclass.
+ * src/compose.c: compose_insert_file(): supported DOS/Win/Mac line
+ break.
+ * src/importldif.c
+ src/ldif.[ch]: merged from the claws branch.
+ * src/importldif.c: removed some warnings.
+ imp_ldif_field_list_toggle(): fixed button checking.
+ imp_ldif_dialog_create(): minor layout fix.
+ * src/ldif.c: removed some warnings.
+ * INSTALL
+ INSTALL.jp: updated confirmation list.
+ * src/vcard.c:
+ vcard_read_file()
+ vcard_test_read_file(): fixed a memory leak of tagtemp.
+ Some code cleanups (decreasing the indent level).
+ * src/addrindex.c
+ src/jpilot.[ch]
+ src/syldap.[ch]: disabled runtime library checking because JPilot
+ and LDAP libraries are linked on the build time, and the program
+ doesn't execute without them anyway.
+ * src/addressbook.c
+ src/addrindex.c: changed "J-Pilot" to "JPilot".
+ Removed warning for atoi().
+
+2001-12-18
+
+ * src/procmsg.c: procmsg_empty_trash()
+ src/mainwindow.c: main_window_empty_trash(): empty trash only if
+ it contains some messages.
+ * src/imap.c: search_array_str(): new.
+ imap_status(): fixed a bug that didn't parse the command response
+ correctly.
+
+2001-12-18
+
+ * merged undo function (by Jens Oberender).
+ * src/undo.[ch]: new.
+ undo_insert_text_cb(): fix for multibyte characters (obtain the
+ number of letters instead of bytes).
+ * src/compose.[ch]: added the code for undo.
+ * src/prefs_common.[ch]: added the interface for setting undo level.
+
+2001-12-16
+
+ * src/compose.c: compose_template_apply()
+ src/prefs_template.c: prefs_template_clist_set_row()
+ src/template.c: template_write_config(): don't replace To: and
+ Subject: entry in composition window if they are empty.
+
+2001-12-16
+
+ * version 0.6.6
+
+2001-12-15
+
+ * src/folderview.c: folderview_drag_motion_cb(): fixed a DnD bug.
+ * src/ldif.c: ldif_get_line(): ignore CR.
+ * src/mimeview.c: mimeview_show_message(): search also text/html
+ for first text part.
+
+2001-12-14
+
+ * src/prefs_account.c: prefs_account_save_config_all(): fixed a bug
+ that didn't update accountrc if account_list == NULL (thanks to
+ Watanabe).
+
+2001-12-14
+
+ * src/utils.h: added the macro Xstrcat_a() that concatenates
+ two strings and return alloca'd string.
+ * src/imap.c: imap_scan_tree_recursive(): fixed a bug that didn't
+ handle folder name which includes some spaces correctly
+ (based on the patch from Willem van Engen (thanks!)).
+ * src/compose.c: compose_wrap_line_all(): fixed the crash when
+ wrapping long lines if linewrap quotation is disabled and
+ a word spanning more than one line.
+
+2001-12-14
+
+ * applied the Tobias' patch with modification (thanks!).
+ * src/imap.[ch]:
+ imap_msg_set_perm_flags()
+ imap_msg_unset_perm_flags(): new. They set permanent flags to
+ a IMAP message.
+ * src/compose.c
+ src/summaryview.c: set flags on IMAP server when flags are changed.
+
+2001-12-11
+
+ * src/gtkutils.[ch]: gtkut_container_remove(): new. It's a wrapper
+ of gtk_container_remove() for workaround of a bug in
+ Gtk{Text,Entry} (thanks to Sergey Vlasov).
+ * src/compose.c
+ src/mainwindow.c
+ src/messageview.c
+ src/mimeview.c
+ src/summaryview.c
+ src/textview.c: replaced gtk_container_remove() with
+ gtkut_container_remove(), and removed previous partial fix.
+
+2001-12-09
+
+ * src/prefs_account.c: prefs_account_apply(): fixed a bug that
+ checked user ID on "local", but didn't on IMAP4.
+ * src/imap.c: imap_session_get(): fixed a crash bug when
+ rfolder->session == NULL.
+ * Makefile.am: changed the arguments of tar from 'chojf' to
+ '--bzip2 -chof'.
+ * src/summaryview.c: summary_toggle_view(): disclaim the selection
+ of textview before removing vpaned.
+
+2001-12-08
+
+ * src/messageview.c: messageview_change_view_type(): disclaim the
+ selection before removing textview. This solves the mysterious
+ copy-paste disability (thanks to Melvin Hadasht).
+ * src/textview.c: textview_set_font(): use
+ gtk_editable_claim_selection() instead of
+ gtk_editable_select_region().
+
+2001-12-06
+
+ * src/prefs_template.c: prefs_template_window_create(): supported
+ address completion on the To: entry.
+
+2001-12-04
+
+ * src/folder.c:
+ folder_count_total_msgs()
+ folder_count_total_msgs_func(): use g_node_traverse() to traverse
+ GNode.
+
+2001-12-03
+
+ * src/compose.c: fixed a bug that empty body was refused.
+ * src/prefs_template.c: fixed a bug that didn't set To: entry
+ correctly. Display error dialog if format is illegal.
+ * src/prefs_common.c
+ src/quote_fmt_lex.l
+ src/quote_fmt_parse.y: changed parenthesis "( )" to curly braces
+ "{ }" to prevent confusion on using parenthesis.
+ * src/html.c: html_get_parenthesis(): ignore CSS / script stuff.
+
+2001-11-29
+
+ * src/prefs_template.c: added colon to the header labels.
+
+2001-11-28
+
+ * src/compose.c
+ src/prefs_template.c
+ src/template.[ch]: added To field to the template.
+
+2001-11-27
+
+ * src/textview.c: textview_show_part(): use first found
+ message/rfc822 header.
+ * src/folderview.c: added "Search messages..." to the context menu.
+ * src/prefs_common.c: prefs_quote_description_create(): added
+ description for characters which need to be escaped.
+
+2001-11-26
+
+ * src/compose.c: compose_wrap_line_all(): more merging from claws.
+ GET_CHAR(): renamed GET_TEXT() and made it more generic.
+ Modified compose_wrap_line() and compose_wrap_line_all() to use
+ GET_CHAR().
+ * src/textview.c: textview_show_part(): show the header of nested
+ RFC822 attachment correctly.
+
+2001-11-25
+
+ * src/folder.[ch]
+ src/main.c: added --status option to get new, unread and total
+ message count from a running Sylpheed (merged from claws).
+ prohibit_duplicate_launch(): output '\n' only once.
+
+2001-11-23
+
+ * src/compose.c
+ src/gtkutils.[ch]: merged the new wrapping function.
+ gtkut_text_str_compare_n()
+ gtkut_text_str_compare()
+ gtkut_text_is_uri_string(): backport from the GtkSText in the
+ claws branch, and made modification.
+ * src/prefs_template.c
+ src/template.[ch]: added Subject to the template.
+
+2001-11-22
+
+ * src/compose.c: compose_write_headers(): added missing parenthesis
+ that generated invalid custom header (thanks to Masaaki Noro).
+ Allow Sender: custom header.
+
+2001-11-20
+
+ * src/procheader.c: procheader_date_parse(): workaround for
+ RFC-incompliant Date header.
+
+2001-11-20
+
+ * src/addrbook.c: removed redundant functions, and fixed generation
+ of spurious address book file names.
+ * src/addrindex.c: V-Card -> vCard.
+
+2001-11-19
+
+ * src/textview.c: get_email_part(): replaced isalnum() with
+ the macro IS_ASCII_ALNUM() which restricts the range of
+ characters to 7bit ASCII (thanks to Shimamoto).
+ * src/utils.c: remote_tzoffset_sec(): workaround for malformed
+ timezone offset.
+
+2001-11-18
+
+ * src/textview.c: textview_show_part(): show headers on nested
+ muitipart text.
+
+2001-11-17
+
+ * src/imap.c: imap_session_get()
+ src/news.c: news_session_get(): fixed segfault when reconnection
+ failed.
+ * src/grouplistdialog.c: removed redundant code, and expand nodes
+ that doesn't match the pattern.
+
+2001-11-16
+
+ * src/compose.c: modified so that it sends message when any of
+ To:, Cc:, Bcc:, or Newsgroups: fields have valid recipient.
+ compose_check_for_valid_recipient(): new.
+ * src/grouplistdialog.c: improved the UI.
+ Added appropriate description and search button.
+ Search doesn't get group list again.
+
+2001-11-15
+
+ * src/news.[ch]: news_session_get(): update the last access time
+ correctly.
+ news_group_list_free(): new.
+ * src/grouplistdialog.c: free resources correctly.
+
+2001-11-15
+
+ * src/folderview.c
+ src/grouplistdialog.[ch]: more merging of new newsgroup
+ subscription dialog.
+ * src/news.[ch]: renamed news_remove_group_list() to
+ news_remove_group_list_cache().
+
+2001-11-14
+
+ * src/defs.h: added MAX_ENTRY_LENGTH definition.
+ * src/compose.c: compose_add_entry_field(): create new entry with
+ max length.
+
+2001-11-13
+
+ * src/grouplistdialog.c: made non-leaf node selectable.
+ Give the complete newsgroup name for each nodes.
+
+2001-11-13
+
+ * src/grouplistdialog.c
+ src/news.[ch]: merging of new newsgroup subscription dialog
+ (still in progress. Don't use it yet!).
+
+2001-11-12
+
+ * src/utils.[ch]: decode_uri(): new. It decodes URL-encoded strings.
+ * src/compose.[ch]: compose_new_with_recipient(): accept mailto
+ URL.
+ compose_entries_set(): new. It parses mailto URL and put each
+ values into the entries.
+
+2001-11-12
+
+ * src/compose.c: compose_forward(): fixed a bug that forward
+ quote mark wasn't used (thanks to Hironori IWANE).
+ * src/codeconv.[ch]
+ src/mainwindow.c
+ src/prefs_common.c: added Thai encodings (thanks to Manrat
+ Chobchuen).
+
+2001-11-08
+
+ * src/socket.c: sock_connect_by_hostname(): removed h_errno.
+ * src/session.h
+ src/defs.h
+ src/imap.[ch]
+ src/news.c: added last_access_time to Session.
+ imap_session_get(): check connection only when access interval
+ has been exceeded.
+
+2001-11-07
+
+ * version 0.6.5
+
+2001-11-07
+
+ * src/socket.c: ssl_gets(): use SSL_peek.
+ * updated NEWS and AUTHORS.
+ * Makefile.am: fixed release target.
+
+2001-11-06
+
+ * src/template.c: changed the format of template file to
+ RFC2822-like.
+ * src/compose.c: compose_template_apply(): freeze the text widget
+ while inserting strings.
+
+2001-11-05
+
+ * po/POTFILES.in: removed src/template_select.c.
+ * src/summaryview.c: summary_set_header()
+ src/address.c: address_parse_str()
+ src/filter.c: filter_read_str()
+ src/news.c: news_parse_xover()
+ src/procheader.c: procheader_get_fromname()
+ src/utils.c: subject_compare():
+ replaced Xalloca() + strcpy() with Xstrdup_a().
+ * src/inputdialog.[ch]: added combo mode.
+ input_dialog_combo(): new.
+ * src/prefs_common.[ch]: added MIME open command setting.
+ prefs_common_{read, save}_config(): read / write command history.
+ * src/mimeview.c: mimeview_open_with(): use combo input dialog.
+ * src/utils.[ch]: add_history(): history list management function.
+
+2001-11-04
+
+ * src/compose.c: select templates from the menu.
+ compose_set_template_menu(): new.
+ compose_reflect_prefs_all(): new.
+ compose_template_apply(): new. Use dummy MsgInfo for parsing.
+ * src/template.[ch]: store template list to the static heap.
+ template_get_config(): new.
+ template_set_config(): new.
+ * src/prefs_template.c: don't store template list to the global area.
+ * src/template_select.[ch]: removed.
+ * src/quote_fmt_parse.y: check folderitem when quoting messages.
+ * src/mh.c: mh_add_msg(): try to copy file whenever link() failed
+ (thanks to OSHIRO Naoki).
+
+2001-11-03
+
+ * src/utils.[ch]: get_template_dir(): new.
+ * src/template.c: use get_template_dir().
+
+2001-11-02
+
+ * src/prefs_template.c: modified the dialog layout.
+ Added symbol description button.
+ * src/summaryview.c: show an arrow mark to the column of the sort
+ target.
+ summary_set_column_titles(): new.
+ * INSTALL
+ INSTALL.jp
+ README
+ README.jp
+ TODO
+ TODO.jp: updated the documents.
+
+2001-11-02
+
+ * src/Makefile.am: add missing checkbox_{on, off}.xpm.
+ * src/textview.c: textview_key_pressed()
+ src/mimeview.c: mimeview_key_pressed()
+ src/summaryview.c: summary_key_pressed(): delete messages with
+ Delete key.
+
+2001-11-01
+
+ * src/socket.c: ssl_gets(): fixed a bug that caused infinite loop
+ when SSL_read() returned 0.
+ * src/utils.[ch]: strcrchomp(): new. It removes CR from the tail
+ of strings.
+ * src/quote_fmt_parse.y: convert CRLF to LF when inserting messages.
+ Add prototype of yylex() to suppress the warning.
+ * merged the template function.
+ * src/prefs_template.[ch]
+ src/template.[ch]
+ src/template_select.[ch]: new.
+ Renamed prefs_templates_* -> prefs_template_*.
+ * src/compose.c: added template menu. Added replyinfo to Compose.
+ * src/mainwindow.c: added template setting menu.
+ * src/quote_fmt_lex.l: output literal tab and return as is.
+ * src/prefs_common.c: changed the pref. name of quote format to
+ 'reply_quote_{mark, format}' and 'fw_quote_{mark, format}'.
+
+2001-10-31
+
+ * src/prefs_common.[ch]: added Quote tab, and moved the quote
+ setting from Compose tab.
+ * merged the new quote format parser.
+ * src/quote_fmt_lex.h
+ src/quote_fmt.h
+ src/quote_fmt_lex.l
+ src/quote_fmt_parse.y: new files for quote format parser.
+ * configure.in: added checks for lex and yacc.
+ * src/compose.c: compose_quote_file(), compose_quote_parse_fmt():
+ removed.
+ compose_quote_fmt(): new.
+ * src/prefs_common.[ch]: added forward format setting to the
+ Quote tab. Updated the quote description dialog.
+ * src/quote_fmt_parse.y: fixed bugs that tried to read file even
+ if they couldn't get text part.
+
+2001-10-31
+
+ * src/pixmaps/checkbox_off.xpm
+ src/pixmaps/checkbox_on.xpm: new.
+ * src/account.c: display `get all' status with the checkbox pixmaps.
+
+2001-10-30
+
+ * src/send.c: code cleanup. Pass account prefs structure instead
+ of many arguments.
+ Query password for SMTP AUTH if not specified (thanks to Mio).
+
+2001-10-30
+
+ * src/procheader.c: procheader_parse(): fixed a bug that didn't
+ parse multiple message-id in In-Reply-To: header correctly
+ (thanks to KAJIWARA).
+
+2001-10-29
+
+ * src/account.c: enabled 'Get all' setting by clicking the 'G'
+ column of account list, and added some description.
+ * src/prefs_common.c: prefs_send_create(): added a description
+ for outgoing codeset.
+
+2001-10-28
+
+ * src/prefs_account.[ch]: moved inbox entry to the receive tab,
+ and added select button and short description.
+ * src/Makefile.am: added SYSCONFDIR to CPPFLAGS.
+ * src/procmime.c:
+ procmime_get_mime_type_table()
+ procmime_get_mime_type_list(): modified so that
+ $(SYSCONFDIR)/mime.types (or /etc/mime.types if not found) and
+ $(HOME)/.sylpheed/mime.types are read.
+
+2001-10-27
+
+ * src/prefs_account.c: moved the address auto-setting to the compose
+ tab.
+ prefs_account_create(): removed gtk_widget_show_all() for proper
+ window size.
+ * src/prefs_common.c: changed "Program path" to "Command".
+
+2001-10-26
+
+ * src/textview.c: textview_set_font(): support Russian charset
+ on EUC-JP locale.
+ * src/summaryview.c: summary_delete(): (hopefully) fixed the crash
+ bug on deleting.
+ * prefs_account.c
+ prefs_common.c
+ prefs_summary_column.c: minor improvements to the English.
+ * src/main.c: get_queued_message_num(): don't output the warning
+ when queueing folder is not found.
+
+2001-10-21
+
+ * version 0.6.4
+
+2001-10-21
+
+ * src/prefs_summary_column.[ch]:
+ made prefs_summary_column_get_config() public.
+ * src/summaryview.c: summary_ctree_create(): some code cleanup.
+ * configure.in: moved the position of SSL checking after LDAP
+ for linking problem.
+
+2001-10-21
+
+ * src/mainwindow.c
+ src/summaryview.c: allowed reedit in the outbox.
+ * src/prefs_summary_column.[ch]: new. UI for setting summary
+ columns.
+ * src/mainwindow.[ch]: main_window_set_summary_column(): new.
+ It calls summary_set_column_order().
+ * src/summaryview.[ch]:
+ summary_ctree_create(): new. separated from summary_create().
+ summary_set_column_order(): new. It destroys the current
+ CTree and replaces it with the new one.
+
+2001-10-19
+
+ * src/smtp.[ch]: smtp_from(): abort if auth failed.
+ * changed C++-style comments into C-style in some files, and
+ removed unnecessary commented out codes.
+ * src/addrcache.[ch]
+ src/addressbook.c
+ src/addrindex.[ch]
+ src/jpilot.[ch]
+ src/syldap.[ch]: updated the addressbook code, and fixed the
+ thread bug of LDAP.
+ * src/ldif.[ch]
+ src/importldif.[ch]: new.
+
+2001-10-18
+
+ * src/about.c: added some items to compiled-in features.
+ * src/addr_compl.c: changed LOG_MESSAGE to debug_print.
+ * src/addressbook.c: changed "V-Card" to "vCard".
+ addressbook_edit_address_cb(): added
+ invalidate_address_completion() to the point address is changed.
+ * src/codeconv.c: changed C++-style comments into C-style.
+
+2001-10-17
+
+ * src/compose.c: changed "Send" shortcut to Ctrl+Enter.
+
+2001-10-16
+
+ * src/inc.c: fixed a bug that crashed sylpheed if Cancel button
+ was clicked twice.
+
+2001-10-16
+
+ * src/procmsg.c: procmsg_get_thread_tree(): complete the unfinished
+ threads.
+ * src/summaryview.c:
+ summary_thread_init(): separated from summary_thread_build().
+ summary_thread_build(): removed the codes for initialization.
+ summary_set_ctree_from_list(): call summary_thread_init() instead
+ of summary_thread_build().
+ summary_filter(): fixed a bug that didn't moved messages despite
+ of immediate execution setting.
+
+2001-10-14
+
+ * src/procmsg.c: procmsg_get_thread_tree(): new. It generates the
+ reversed thread tree from message list.
+ * src/summaryview.c: summary_set_ctree_from_list(): prepend the
+ node to the head instead of appending to the tail. This prevents
+ the traverse of node list inside of the GtkCTree, and considerably
+ speeds up the summary display (the order is O(n^2) -> O(n)).
+
+2001-10-12
+
+ * src/prefs_common.c
+ src/summaryview.[ch]: initial modification for reorderable columns.
+
+2001-10-12
+
+ * src/procmsg.c: procmsg_get_mark_sum(), mark_sum_func(): fixed a
+ memory leak.
+ * src/folderview.c: folderview_button_pressed(): code cleanup, and
+ turn sensitivity off if main window is locked.
+ * src/syldap.c: syldap_read_data(): removed unnecessary and
+ unportable sched_yield().
+
+2001-10-11
+
+ * src/folderview.c: renamed "Update folder tree" context menu to
+ "Rescan folder tree", and made "Update folder tree" only updates
+ folder status.
+ folderview_update_all_node(): don't show message dialog.
+ * src/gtkutils.c: gtkut_widget_get_uposition()
+ src/mainwindow.c: main_window_popup(): clip the coordinate to
+ nonnegative value.
+
+2001-10-10
+
+ * src/utils.c: to_human_readable(): made a bit of optimization.
+ * src/summaryview.c: summary_delete(): fixed a focus problem.
+ summary_find_{prev,next}_msg(): new. They find previous/next
+ message that is not deleted.
+ * src/prefs_filter.c: scroll CList automatically if moved row
+ becomes not fully visible.
+
+2001-10-09
+
+ * updated some autotool scripts.
+ * src/codeconv.c: conv_encode_header(): fixed a bug that caused
+ infinite loop when failed to convert encoding.
+ * src/codeconv.[ch]: a fix for older version of libjconv
+ (jconv_info_get_current_codeset() returned "EUCJP" instead of
+ "EUC-JP").
+
+2001-10-08
+
+ * version 0.6.3
+
+2001-10-08
+
+ * src/compose.c: compose_write_to_file()
+ src/codeconv.c: conv_codeset_strdup(): more workaround for
+ libjconv problem on C locale.
+ * src/editldap_basedn.c: fixed segfault when opening dialog.
+ * src/utils.c: is_next_mbs()
+ src/compose.c: compose_wrap_line(), compose_wrap_line_all():
+ changed MB_CUR_MAX to MB_LEN_MAX for compliance to ANSI C.
+ * configure.in: increased the reqired version of GPGME to 0.2.3.
+ * src/pop.c: pop3_getauth_user_recv(): fixed a bug that closed
+ the receive dialog when POP3 server refused normal authentication.
+
+2001-10-07
+
+ * src/prefs_common.c: prefs_receive_create(): correction to English.
+ * src/compose.c: compose_set_ext_editor_sensitive(): fixed a bug
+ that didn't set the menu sensitivity correctly (thanks to
+ Melvin Hadasht).
+ * src/summaryview.c: delete messages permanently if the current
+ folder is trash and 'delete' operation is executed.
+ Fixed the bug that didn't select the last row correctly (thanks
+ to Alfons Hoogervorst).
+ * src/folder.[ch]: folder_item_remove_msgs(): new. It removes
+ all messages given in the list.
+
+2001-10-05
+
+ * src/summaryview.c: summary_show(): fixed a bug that didn't show
+ message even if the 'open unread message on entering folder'
+ option was turned on.
+
+2001-10-03
+
+ * src/procmime.c: procmime_get_text_content(): supported HTML.
+
+2001-10-02
+
+ * src/summaryview.[ch]: implemented new locking mechanism, and
+ replaced every static locks with summary_lock(), summary_unlock(),
+ and added locks to some extra functions.
+ This fixes a bug that caused segfault when 'd' (delete) key
+ was kept pressing.
+
+2001-10-01
+
+ * src/addressbook.c: addressbook_folder_load_person(): fixed a bug
+ that caused segfault (thanks to Stefaan A Eeckels).
+
+2001-09-30
+
+ * src/textview.[ch]: added textview_set_position().
+ * src/messageview.[ch]: added messageview_set_position().
+ * src/addrbook.c
+ src/addrcache.c
+ src/addressadd.c
+ src/addressbook.c
+ src/addrindex.c
+ src/addritem.c
+ src/editaddress.c
+ src/editbook.c
+ src/editgroup.c
+ src/editjpilot.c
+ src/editldap.c
+ src/editldap_basedn.c
+ src/editvcard.c
+ src/jpilot.c
+ src/mgutils.c
+ src/syldap.c
+ src/vcard.c: converted C++-style comments into C-style one.
+ * src/imap.c: QUOTE_IF_REQUIRED(): new macro. Copy string into
+ new buffer and quote with double quotes if required.
+ imap_status(), imap_cmd_login(), imap_cmd_list(),
+ imap_cmd_do_select(), imap_cmd_create(), imap_cmd_delete(),
+ imap_cmd_copy(): use QUOTE_IF_REQUIRED().
+ * compose.c: compose_write_to_file(): workaround for the problem
+ when using libjconv and 8bit codes cannot be converted on C
+ locale.
+ * codeconv.[ch]: added "ANSI_X3.4-1968" to encoding strings.
+ conv_codeset_strdup(): don't convert if source and destination
+ codeset are identical.
+
+2001-09-30
+
+ * src/textview.[ch]: textview_search_string_backward(): new.
+ Add the new member cur_pos to TextView.
+ Connect button_press_event with gtk_signal_connect_after() to
+ obtain the correct editable position.
+
+2001-09-27
+
+ * src/folder.c: folder_write_list_recursive(): preserve unthreaded
+ state.
+
+2001-09-26
+
+ * src/summaryview.c: modified the layout of popup menu.
+
+2001-09-25
+
+ * src/folder.c
+ src/folder.h
+ src/mainwindow.c
+ src/summaryview.c: applied the patch from Alfons that allows
+ threading setting for each folders (tnanks!).
+
+2001-09-23
+
+ * src/message_search.[ch]: new. A Dialog for searching in current
+ message.
+ * src/gtkutils.[ch]: gtkut_text_match_string(): new. Compare the
+ text in current position of GtkText and given wide-character
+ string.
+ * src/messageview.[ch]: messageview_search_string()
+ src/textview.[ch]: textview_search_string(): return TRUE if
+ found.
+ * src/textview.[ch]: remember the beginning of body.
+
+2001-09-21
+
+ * src/procmime.c: procmime_get_first_text_content(): modified so
+ that it search entire MIME structure.
+ * src/summary_search.c: summary_search_execute(): use
+ strdup_mbstowcs() instead of macro. Display matched message.
+
+2001-09-20
+
+ * src/inc.c: fix for background POP3 hangs and crashes (thanks to
+ Sergey Vlasov).
+ * src/summary_search.c: added body searching function.
+ * src/procmime.[ch]: procmime_find_string(): changed arguments
+ and return value. Added case sensitivity option.
+
+2001-09-20
+
+ * src/procmime.[ch]:
+ procmime_find_string()
+ procmime_find_string_part(): new. It searchs the string from
+ messages.
+ Renamed procmime_get_text_part() to
+ procmime_get_first_text_content().
+ procmime_get_text_content(): new. It returns the text contents
+ of the specified MIME part.
+ procmime_mimeinfo_next(): new. It returns the next node of
+ MimeInfo tree.
+
+2001-09-19
+
+ * src/procmime.c: procmime_get_text_part(): modified so that it
+ finds a text part in nested multipart message correctly.
+ * src/procmime.h: added an example of MimeInfo structure.
+ * src/mimeview.c: mimeview_show_message(): search the first text
+ part.
+
+2001-09-17
+
+ * src/mainwindow.c: ac_menu_popup_closed(): fixed the bug that
+ caused segfault. Changed 'Preferences per account...' menu item.
+
+2001-09-17
+
+ * version 0.6.2
+
+2001-09-16
+
+ * src/addrindex.c: translate the "Common address" and "Personal
+ address" from old addressbook.
+
+2001-09-12
+
+ * src/utils.c: get_quote_level(): some optimization and bugfixes.
+ * src/codeconv.[ch]: conv_get_current_locale(): new.
+ * src/editaddress.c: edit_person_page_basic(): reverse the order
+ of first and last name on some locales.
+
+2001-09-11
+
+ * src/compose.c: applied the patch from Yasumatsu that reformats
+ the current paragraph (thanks!). Modified so that it doesn't
+ reformat quoted paragraphs.
+ compose_create(): don't fill the entry automatically on reedit
+ mode.
+ * src/mainwindow.c
+ src/summaryview.[ch]: added the "Mark all read" option.
+ summary_mark_all_read(): new.
+
+2001-09-10
+
+ * src/vcard.c
+ src/mgutils.c
+ src/syldap.c
+ src/editldap.c
+ src/editldap_basedn.c
+ src/jpilot.c
+ src/editjpilot.c: removed all warnings.
+ * configure.in
+ src/jpilot.[ch]: fixed the problem that failed to detect JPilot
+ header files on the Debian system.
+ * src/mainwindow.c
+ src/summaryview.[ch]: enabled sorting by mark, unread, attachment,
+ and color label. Enabled moving to next/prev flagged messages.
+
+2001-09-09
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: modified the color balance.
+ * src/utils.[ch]: execute_sync(): new.
+ execute_command_line(): added the arg for async mode.
+ * src/inc.c: inc_mail(): use execute_command_line().
+
+2001-09-08
+
+ * src/prefs.[ch]
+ src/prefs_common.[ch]
+ src/prefs_account.c: modified the layout. Added the option to
+ launch the external editor automatically.
+ * src/compose.c: launch the external editor automatically if the
+ option is set.
+
+2001-09-06
+
+ * src/Makefile.am: added extra xpm's.
+
+2001-09-05
+
+ * src/addressbook.c: fixed a compilation problem when enabling
+ LDAP.
+ addressbook_open(): fixed a missing 'else'.
+
+2001-09-04
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/trash.xpm: replaced with the new blue icons.
+ * merged Match Grun's new addressbook code.
+ * src/pixmaps/address.xpm
+ src/pixmaps/book.xpm
+ src/pixmaps/category.xpm
+ src/pixmaps/interface.xpm
+ src/pixmaps/jpilot.xpm
+ src/pixmaps/ldap.xpm
+ src/pixmaps/vcard.xpm: new icons.
+ * src/addrbook.[ch]
+ src/addrcache.[ch]
+ src/addressadd.[ch]
+ src/addressitem.[ch]
+ src/addrindex.[ch]
+ src/addritem.[ch]
+ src/editaddress.[ch]
+ src/editbook.[ch]
+ src/editgroup.[ch]
+ src/editjpilot.[ch]
+ src/editldap.[ch]
+ src/editldap_basedn.[ch]
+ src/editvcard.[ch]
+ src/jpilot.[ch]
+ src/mgutils.[ch]
+ src/syldap.[ch]
+ src/vcard.[ch]: new. Many fixes to remove the huge amount of
+ warnings.
+ addrbook_build_avail_email_vis(): fixed a memory leak.
+
+2001-09-04
+
+ * NEWS: brought in the all of the changes previously put on the web.
+
+2001-09-03
+
+ * src/mainwindow.c
+ src/summaryview.c: modified the layout of menus.
+ * src/mainwindow.c: ac_menu_popup_closed(): fixed a bug that didn't
+ return a focus to the main window after selecting the account menu.
+
+2001-09-03
+
+ * version 0.6.1
+
+2001-09-03
+
+ * src/send.c: send_message_data(): fixed a bug that didn't process
+ body part correctly.
+
+2001-09-02
+
+ * src/inc.[ch]: changed inc_autocheck_(un)lock() to inc_(un)lock().
+ inc_mail(), inc_all_account_mail(): return immediately if locked.
+ * src/account.c
+ src/prefs_common.c
+ src/prefs_account.c: use inc_lock() and inc_unlock() instead of
+ inc_autocheck_timer_{remove,set}().
+ * src/summaryview.c: summary_set_colorlabel_color(): get the average
+ of label color and selected fg color for visibility.
+
+2001-09-01
+
+ * src/inc.[ch]: inc_autocheck_lock(), inc_autocheck_unlock(): new.
+ They increase/decrease the lock count.
+ inc_autocheck_func(): if locked, delay the autochecking 1 second.
+ inc_autocheck_timer_set_interval(): set interval by its argument.
+ * src/summaryview.c: summary_show(): lock the autochecking while
+ processing.
+ * src/main.c: app_will_exit(): remove autocheck timer.
+ * acconfig.h
+ src/defs.h: removed the definitions of PACKAGE and VERSION to
+ prevent unnecessary compilation.
+ * configure.in: changed AC_DEFINE_UNQUOTED of PACKAGE and VERSION
+ to AC_SUBST, and added src/version.h to AC_OUTPUT.
+ * src/version.h.in: new.
+ * src/intl.h: changed dgettext() to gettext().
+
+2001-08-31
+
+ * po/ja.po: fixed a typo that crashed Sylpheed with older version
+ of GTK+.
+ * configure.in: fixed a bug that didn't show results correctly.
+ Fixed a bug that --enable-compface and --enable-jconv disabled
+ the options.
+ * src/procmsg.c: procmsg_send_queue(): don't abort when sending
+ message failed.
+ * src/compose.c: compose_write_headers(): add Bcc: header to the
+ output file.
+ * src/send.c: send_message_data(): new. Separated from
+ send_message_smtp(). Remove Bcc: header before sending.
+
+2001-08-30
+
+ * version 0.6.0
+
+2001-08-30
+
+ * src/send.c: implemented sending with local sendmail command.
+ send_message_local(): new. It executes command with popen()
+ and send the contents of RFC822 message to the command.
+ * src/prefs_common.[ch]: enabled the external sending command option.
+ * src/defs.h: #define DEFAULT_SENDMAIL_CMD /usr/sbin/sendmail -t
+ * src/account.c: account_edit_create(): widened the protocol column.
+ * src/summaryview.c: summary_set_colorlabel_color(): cleanup of
+ the code.
+
+2001-08-30
+
+ * src/folder.c: folder_item_remove_msg(): scan the folder again
+ if the last message is removed.
+ * src/compose.c: compose_queue(), compose_draft_cb(): remove the
+ old reedited message after adding the new message.
+
+2001-08-29
+
+ * src/compose.c: compose_queue(): added AID: to the queueing header.
+ * src/send.c: send_message_queue(): look for AID: header, and use
+ the server specified in the account instead of SSV: header.
+ * src/summaryview.c
+ src/compose.[ch]: queued messages can be reedited now.
+ compose_remove_reedit_target(): new. It removes the old reedited
+ message.
+ compose_send(), compose_queue(), compose_draft_cb(): if reedit
+ mode, remove the old message.
+ * src/procmsg.c: procmsg_msg_exist(): fixed a bug that output
+ warning.
+
+2001-08-28
+
+ * applied the XML string table patch from Alfons Hoogervorst that
+ stores strings in a hash table and minimizes memory allocations
+ (thanks!).
+ * src/stringtable.[ch]: new.
+ removed all G and g_ prefix from type and function names since
+ they're not official GLib symbol names.
+ string_table_insert_string(): fixed a bug that might refer to an
+ invalid pointer on lookup, and also made a bit of optimization.
+
+2001-08-27
+
+ * merged the color label feature from the claws branch (thanks to
+ Satoshi Nagayasu and Alfons Hoogervoost).
+ * src/colorlabel.[ch]: new. Renamed from labelcolors.[ch].
+ Renamed labelcolors_*() to colorlabel_*().
+ * src/summaryview.[ch]: added color label support.
+ * src/procmsg.h: added color label flags to the permanent flags.
+ * updated to gettext 0.10.39.
+ * src/summaryview.[ch]: put the color label menu item to ItemFactory.
+ * sylpheed.desktop: added for GNOME.
+ * configure.in: added AC_MSG_CHECKING() for some options.
+ Output the configuration results when configure is finished.
+
+2001-08-27
+
+ * src/account.c: account_clist_set_row(): fixed a bug that failed
+ to compile if SSL was not enabled.
+
+2001-08-26
+
+ * merged the SSL support from the claws branch (thanks to Christoph
+ Hohmann).
+ * src/ssl.[ch]: new.
+ * src/socket.[ch]: added ssl_read(), ssl_write(), ssl_gets(), and
+ ssl_getline().
+ sock_close(): call ssl_done_socket() if SSL is active.
+ * src/md5.[ch]: removed MD5_CTX typedef and use MD5_CONTEXT to
+ prevent type confliction.
+ * src/prefs_account.[ch]: added SSL tab, and modified the expression.
+ * src/esmtp.[ch]: added esmtp_ehlo(), and esmtp_starttls().
+ Removed SSL initialization and HELO from esmtp_starttls().
+ esmtp_auth(): removed use_smtp_auth from its arguments.
+ * src/send.c: send_smtp_open(): added SSL support.
+ * src/smtp.c: smtp_helo(): call esmtp_ehlo() if esmtp is true.
+
+2001-08-25
+
+ * src/mimeview.c: mimeview_open_with(): braced '%s' with single
+ quote.
+
+2001-08-24
+
+ * src/main.c: open new account dialog if no account is set.
+ * src/utils.[ch]: log_verbosity_set(): new. It increase/decrease
+ the verbosity count.
+ log_print(): put to statusbar only if log_verbosity_count > 0.
+ log_message(): put to statusbar.
+ * src/inc.c: inc_pop3_session_do(): set log verbosity.
+ * src/mainwindow.c: main_window_set_menu_sensitive(): added the
+ "Compose new message" item.
+ main_window_show_cur_account(): removed "Current account: " string.
+ * src/summaryview.c: summary_show(): ignore the current marks if
+ main window is locked.
+ * src/compose.c: compose_attach_property(): fixed a bug that caused
+ segmentation fault.
+
+2001-08-23
+
+ * src/mainwindow.c: main_window_get_current_state(): new. It returns
+ the current state for the sensitivity of UI.
+ main_window_set_toolbar_sensitive(): use table like
+ main_window_set_menu_sensitive().
+
+2001-08-23
+
+ * src/mainwindow.[ch]: added progressbar and status label to the
+ statusbar.
+ main_window_close_cb(): don't exit if locked.
+ * src/inc.c: update the progressbar of main window, too.
+
+2001-08-22
+
+ * src/mainwindow.[ch]: main_window_set_toolbar_sensitive(): removed
+ the second argument, and determine the sensitivity with the
+ state of summary view.
+
+2001-08-21
+
+ * src/pop.c: pop3_getsize_list_recv(), pop3_retr_recv(),
+ pop3_delete_recv(): don't try to receive messages which are not
+ exist.
+
+2001-08-21
+
+ * src/mainwindow.c: main_window_lock(), main_window_unlock():
+ removed the whole menubar locking.
+ main_window_set_menu_sensitive(): process the sensitivity change
+ with a table, and deal with locking.
+
+2001-08-20
+
+ * src/summaryview.[ch]: summary_get_selection_type(): new.
+ It returns the current selection state of summary view.
+ summary_key_pressed(): abort on some commands if main window
+ is locked.
+ * src/mainwindow.[ch]: main_window_lock(), main_window_unlock():
+ increase/decrease the lock count.
+
+2001-08-19
+
+ * src/prefs_filter.c: prefs_filter_create(): added List-Id to the
+ default header list.
+ * src/prefs_common.[ch]: added the option for receive dialog mode
+ to the Interface tab.
+ * src/inc.[ch]: inc_progress_dialog_create(): don't make the dialog
+ transient, and show dialog only if the setting is
+ RECV_DIALOG_ALWAYS, or RECV_DIALOG_ACTIVE and a window is active.
+ * src/mainwindow.[ch]: main_window_lock(), main_window_unlock():
+ new. Lock / unlock the user-interface.
+ * src/progressdialog.c: progress_dialog_create(): don't make the
+ dialog modal.
+
+2001-08-18
+
+ * src/folderview.c: folderview_update_node(): suppressed unnecessary
+ recursive call.
+ * src/menu.[ch]: menu_button_position(): new. It calculates the
+ position of popup menu.
+ * src/mainwindow.c: toolbar_account_button_pressed(),
+ ac_label_button_pressed(): put the popup menu to the correct
+ position. Change the style of the button while opening the menu.
+ ac_menu_popup_closed(): new function called on selection_done
+ event.
+ * src/gtkutils.c: gtkut_ctree_node_next(): fixed a crash bug when
+ node == NULL.
+ * src/summaryview.c: applied the summary fix patch from Sergey Vlasov
+ (thanks!).
+ Fixed the bug that didn't select previous message in refresh mode
+ if threads were not expanded.
+ summary_select_node(): new.
+ * src/inc.c: applied the summary view update optimization patch from
+ Sergey Vlasov (thanks!).
+ If no new messages are received, don't perform summary refreshing.
+ In addition to the Vlasov's patch, POP3 receive information is
+ also used.
+ * src/inc.h: added a new member cur_total_num to Pop3State.
+ * src/pop.c: pop3_retr_recv(): increase state->cur_total_num.
+
+2001-08-14
+
+ * version 0.5.3
+
+2001-08-14
+
+ * src/summaryview.c: summary_set_row_marks(): got the color of
+ unread row set properly.
+ * src/folderview.c: foldreview_update_node(): don't use
+ gtk_style_copy(), and reuse previously allocated styles.
+ * README, README.jp: modified.
+
+2001-08-14
+
+ * src/pop.c: pop3_getsize_list_recv(): fixed a remotly exploitable
+ memory corruption bug (thanks to David Looney).
+ * src/inc.c: inc_all_account_mail(): call inc_finished() even if
+ there are no enabled accounts, or local spool only.
+ * src/summaryview.c: applied the summary update improvement patch
+ from Sergey Vlasov (thanks!). It keeps the position of the
+ message displayed. Selected and displayed message are also kept.
+ summary_get_msgnum(): new.
+ summary_get_current_msgnum(): removed.
+ summary_select_by_msgnum(): don't display the message.
+ * src/account.c: added "Get all" column.
+ account_clist_set_row(): show default and get-all flags with the
+ mark icon.
+ * src/utils.c: to_human_readable(): increased the number of decimals
+ of MB and GB to 2.
+
+2001-08-13
+
+ * implemented the long-awaited :) "Add sender to address book" feature.
+ * src/address.[ch]: added the argument for remarks to
+ address_item_new().
+ address_get_folder_list(): new. It traverses the address tree and
+ returns the folder list.
+ address_delete_object(): modified so that it removes the node
+ from the tree.
+ * src/addressbook.[ch]: addressbook_add_submenu(): new. It creates
+ a address folder menu and attaches it to the menu item.
+ addressbook_refresh(): reload the address book folder tree.
+ * src/summaryview.c: summary_set_add_sender_menu(): new. It attaches
+ the menu to add sender to address book.
+ summary_button_pressed(): call summary_set_add_sender_menu()
+ before popup the menu.
+
+2001-08-12
+
+ * src/summaryview.c: summary_thread_build(): fixed a bug that locked
+ up the process. Optimized the initial thread build.
+
+2001-08-12
+
+ * src/summaryview.c: made many code cleanups.
+ summary_show(): block/unblock the signal handlers instead of
+ disconnect/connect them.
+ summary_set_row_marks(): made the font of collapsed node bold if
+ it has cnildren marked as unread.
+ summary_thread_build(): block tree_expand signals while processing.
+ Use loop instead of the recursive function. Mark collapsed nodes
+ correctly.
+ summary_unthread(): block tree_collapse signals while processing.
+ Use loop instead of the recursive function.
+ summary_thread_func(), summary_unthread_func(): removed.
+ summary_tree_expanded(), summary_tree_collapsed(): new callback
+ functions.
+ * src/inc.[ch]: inc_pop3_session_do(): don't show alert panel when
+ failed to connect. Show more detailed status on the dialog.
+
+2001-08-10
+
+ * src/folderview.c: folderview_update_all_node(): new. It updates
+ all local folders.
+ * src/inc.c: update all local folders after incorporation if
+ scan_all_after_inc option is set.
+ * src/prefs_common.[ch]: added scan_all_after_inc option.
+ * src/folder.h: FOLDER_IS_LOCAL(): new macro.
+
+2001-08-09
+
+ * src/defs.h
+ src/headerview.c
+ src/headerwindow.c
+ src/textview.c
+ src/prefs_common.c
+ src/prefs_common.h: made bold and small font configurable.
+ src/summaryview.c: display unread messages with bold font.
+ * src/prefs_common.c
+ src/prefs_common.h
+ src/summaryview.c: added an option to enable/disable the
+ emphasis of unread messages.
+
+2001-08-08
+
+ * src/pixmaps/mark.xpm: modified.
+ * src/gtkutils.[ch]: gtkut_ctree_expand_parent_all(): new.
+ * src/summaryview.c: summary_set_ctree_from_list(): don't expand
+ the root messages of threads for performance improvement.
+ summary_show()
+ summary_select_next_unread()
+ summary_step(): expand threads when opening messages.
+ summary_thread_build(): expand threads if the option is turned on.
+ * src/prefs_common.[ch]: added "Expand threads" option.
+
+2001-08-08
+
+ * src/prefs_common.c: removed "Emulate the behavior of mouse
+ operation of Emacs-based mailer".
+ * src/prefs_common.c
+ src/prefs_account.c: changed the value of VSPACING_NARROW to 3.
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: reverted.
+
+2001-08-07
+
+ * src/address.[ch]:
+ address_folder_new()
+ address_group_new()
+ address_item_new(): changed the return value to AddressObject.
+ address_build_tree(): don't put assertion for file.
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: modified a bit.
+
+2001-08-06
+
+ * src/addressbook.c: fixed some bugs.
+
+2001-08-06
+
+ * separated the logic part of addressbook into another module
+ (still in progress).
+ * src/address.[ch]: new. It contains the logic part of addressbook.
+ * src/addressbook.[ch]: removed the logic part.
+
+2001-08-04
+
+ * src/textview.c: textview_show_header(): fixed a bug that a garbage
+ character was shown after header names.
+
+2001-08-02
+
+ * src/inc.c: inc_start(): don't abort with non-fatal error.
+
+2001-08-01
+
+ * version 0.5.2
+
+2001-08-01
+
+ * src/mimeview.c: mimeview_view_file(): added -x option to the
+ metamail to prevent the suspention of the main process.
+ mimeview_button_pressed(): deactivate `Open' menu item if
+ content-type is application/octet-stream.
+
+2001-07-31
+
+ * src/imap.c: imap_parse_atom(): parse escaped characters properly.
+ get_quoted(): new. It handles the escape character '\'.
+ * src/folder.c: folder_read_list(): don't output warning if
+ folderlist.xml doesn't exist.
+ * src/main.c: main(): write folder list after setup.
+ * src/textview.c: textview_create()
+ src/compose.c: compose_create(): set default tab width to 8.
+
+2001-07-29
+
+ * src/prefs_common.c: date_format_select_row(): fixed a bug that
+ caused segfault when selecting the list with key.
+
+2001-07-28
+
+ * src/mainwindow.c: main_window_popup(): deiconize the window
+ when popup (thanks to Henrik Carlqvist).
+ * src/procmime.c: procmime_scan_mime_type(): new.
+ procmime_scan_content_type(): use procmime_scan_mime_type().
+ procmime_scan_mime_header(): scan the extension of attached files
+ and add the correct MIME type if the Content-Type is
+ "application/octet-stream" (thanks to Don Quijote).
+ * src/compose.c: compose_toolbar_create(): added a new "Send later"
+ icon (thanks to Leandro Pereira).
+
+2001-07-27
+
+ * src/prefs_common.c: date_format_create(): modified the layout of
+ the dialog.
+
+2001-07-26
+
+ * src/account.c: account_find_from_address(): fixed a minor bug.
+ * src/prefs_common.c: incorporated the user-interface for setting
+ date format from the claws branch, and made some modification to
+ that.
+
+2001-07-25
+
+ * src/account.[ch]: account_edit_create(): modified the text of
+ default button.
+ account_find_from_address(): new.
+ * src/procmime.c:
+ procmime_scan_content_type(), procmime_scan_content_disposition():
+ fixed ESC code detection.
+ * src/compose.c: compose_reply(): automatically select account
+ according to the message header.
+ * src/prefs_common.[ch]: added member "reply_account_autosel".
+
+2001-07-25
+
+ * src/progressdialog.c: made the CList scrollable.
+ * src/inc.c: inc_start(): don't abort with non-fatal error.
+
+2001-07-24
+
+ * added English Sylpheed User's Manual by Paul Kater
+ (paul@nlpagan.net) (thanks!).
+ * configure.in
+ manual/Makefile.am
+ src/mainwindow.c: added support for English manual.
+ * manual/en/sylpheed*.html: added English documentation.
+ * AUTHORS: updated.
+
+2001-07-23
+
+ * src/nntp.c: nntp_ok(): fixed the bug that didn't handle a response
+ that didn't have any trailing messages.
+ * src/smtp.c: smtp_ok(): ditto.
+ * src/compose.c: compose_account_option_menu_create(): modified
+ the style of the account option menu.
+
+2001-07-22
+
+ * src/prefs_customheader.c: prefs_custom_header_clist_set_row():
+ remove return code from strings automatically.
+ prefs_custom_header_create(): added "X-Face" to the default
+ option.
+ * src/news.c: news_fetch_msg(), news_get_group_list()
+ src/imap.c: imap_fetch_msg(): create the cache directory before
+ writing.
+ * src/procmime.c:
+ procmime_scan_content_type()
+ procmime_scan_content_disposition(): convert JIS into EUC-JP
+ before parsing.
+ * src/codeconv.c: conv_unmime_header(): cleaned up a bit.
+ * src/compose.c: don't append attachment headers if the attach
+ pane is visible but the list is empty.
+ * src/recv.c: recv_bytes_write(): use g_malloc() instead of alloca().
+
+2001-07-18
+
+ * version 0.5.1
+
+2001-07-18
+
+ * src/compose.c: compose_quote_parse_fmt()
+ src/prefs_common.c: prefs_quote_description_create(): added the
+ symbol `%c' that allows to include Cc in reply format (thanks
+ to Cyril Bellot).
+ * src/base64.[ch]
+ src/procmime.c: procmime_decode_content(): applied the patch
+ from Sergey Vlasov that allows to decode base64 data with
+ unusual line length (not a multiple of 4) (thanks!).
+
+2001-07-17
+
+ * src/procmsg.[ch]: separated the permanent flags and temporary
+ flags into two variables, and made MsgFlags a structure that
+ includes them.
+ MSG_SET_PERM_FLAGS()
+ MSG_SET_TMP_FLAGS()
+ MSG_UNSET_PERM_FLAGS()
+ MSG_UNSET_TMP_FLAGS(): new macros.
+ * src/compose.c
+ src/imap.c
+ src/inc.c
+ src/messageview.c
+ src/mh.c
+ src/news.c
+ src/procheader.c
+ src/summaryview.c: modified for the new MsgFlags.
+ * src/utils.[ch]: hash_free_value_mem(): new. It frees the values
+ of hash table.
+
+2001-07-16
+
+ * src/inc.c: inc_pop3_recv_func(), inc_progress_update():
+ display current size with human-readable format.
+ * src/grouplistdialog.c: grouplist_recv_func(): ditto.
+ * TODO
+ TODO.jp: updated.
+
+2001-07-16
+
+ * src/codeconv.c:
+ conv_unmime_header(), conv_unmime_header_overwrite(): workaround
+ for raw-JIS code in header fields.
+ * src/folder.c:
+ folder_get_default_folder()
+ folder_get_default_inbox()
+ folder_get_default_outbox()
+ folder_get_default_draft()
+ folder_get_default_queue()
+ folder_get_default_trash(): fixed a bug that caused segfault
+ if folder_list is NULL.
+
+2001-07-15
+
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp
+ TODO
+ TODO.jp: updated.
+ * src/grouplistdialog.c: grouplist_dialog_set_list(): update UI
+ while retrieving newsgroup list.
+ grouplist_dialog_create(): added entry widget and status label.
+ grouplist_recv_func(): new.
+ refresh_clicked(): added exclusive lock variable.
+ clist_selected(): set text entry when the CList is selected.
+ renamed from group_clist_select().
+ entry_activated(): new.
+ grouplist_clear(): renamed from grouplist_free(). Also clears
+ list and entry widget.
+ * src/news.c: news_get_group_list(): sped up the list appending
+ (g_slist_append() becomes very slow if list size is large).
+ * src/defs.h: added UI_REFRESH_INTERVAL definition.
+ Changed the definition of NEWSGROUP_LIST.
+ * src/recv.c: recv_write()
+ src/send.c: send_message_smtp(): changed the UI refresh interval
+ to UI_REFRESH_INTERVAL (50msec).
+ * src/account.c: account_add(): fixed a bug that didn't update
+ folder tree when a news account was added.
+ * src/grouplistdialog.c: made exclusive lock variable global, and
+ lock at grouplist_dialog_set_list().
+ * src/textview.c: fixed a bug that disabled clickable URI if
+ message color was disabled.
+
+2001-07-15
+
+ * src/grouplistdialog.c: ok_clicked(), cancel_clicked(): don't
+ quit main loop if gtk_main_level() is 1.
+ grouplist_dialog_set_list(): freeze CList while appending the list.
+ grouplist_dialog(): show dialog before updating the list.
+
+2001-07-14
+
+ * src/folder.c: folder_write_list_recursive(): add the attribute
+ `collapsed' if a node have some children.
+ * src/grouplistdialog.[ch]: new. Newsgroups can be selected from
+ the list.
+ * src/news.[ch]:
+ news_get_group_list(): new. It returns newsgroup list.
+ news_remove_group_list(): new. It removes newsgroup list cache.
+ * src/folderview.c: folderview_new_news_group_cb(): call
+ grouplist_dialog() instead of input_dialog().
+
+2001-07-12
+
+ * autogen.sh: modified.
+ * src/folder.[ch]
+ src/folderview.c: made expand/collapse state of folders persistent
+ (thanks to Alfons).
+
+2001-07-06
+
+ * version 0.5.0
+
+2001-07-06
+
+ * src/imap.c: imap_remove_folder(): select INBOX with EXAMINE before
+ DELETE.
+ imap_cmd_do_select(): new. It toggles between SELECT and EXAMINE
+ according to the argument.
+ imap_cmd_select(): use imap_cmd_do_select().
+ imap_cmd_examine(): new.
+ * src/folderview.c: folderview_rm_imap_folder_cb(): select current
+ folder again when removing failed.
+
+2001-07-05
+
+ * version 0.5.0pre4
+
+ * manual/ja/sylpheed.sgml
+ manual/ja/*.html: updated the Japanese manual (thanks to Imai).
+ * src/summaryview.c: summary_set_row_marks(): fixed a bug that
+ didn't set foreground correctly.
+ * src/folderview.h
+ src/summaryview.h: removed the member color_normal from FolderView
+ and SummaryView.
+ * src/mainwindow.c: main_window_create(): removed color_normal.
+
+2001-07-04
+
+ * src/prefs_account.[ch]: the port numbers of IMAP4 and NNTP
+ became specifiable.
+ * src/imap.c: imap_session_get()
+ src/news.c: news_session_new_for_folder(), news_session_get():
+ use user-defined port number if specified.
+
+2001-07-03
+
+ * src/imap.c: imap_scan_tree_recursive(): get mailbox status when
+ scanning.
+ imap_scan_folder(): implemented. It updates the numbers of new,
+ unread and total messages.
+ imap_status(): new. It parses the response of STATUS command.
+ imap_status_uidnext(): removed.
+ imap_cmd_status(): removed.
+ * src/textview.c: textview_show_part(): fixed potential memory leaks.
+
+2001-07-03
+
+ * src/alertpanel.c: alertpanel_create(): fixed truncated message.
+ * src/rfc2015.c: rfc2015_decrypt_message(): fixed the case problem
+ of content-type (thanks to Ren?Rebe for the patch).
+ * src/codeconv.c: code_get_code_conv_func(): fixed the ISO-8859-1
+ detection.
+ * src/prefs_common.c: prefs_send_create(): made some more character
+ sets specifiable when not using libjconv.
+ * configure.in: disabled --enable-threads option temporarily.
+ * INSTALL
+ INSTALL.jp: deleted the description about --enable-threads option.
+
+2001-07-02
+
+ * updated gettext to 0.10.38.
+
+2001-07-01
+
+ * version 0.5.0pre3
+
+ * src/folderview.[ch]: folderview_set_all(): new.
+ * src/account.c: account_add(): call folderview_set_all() after
+ creating IMAP4 tree.
+ account_edit_create(): account preferences dialog can be opened
+ with double clicking of the list.
+ account_selected(): new.
+ account_clist_set(): made the CList focus set correctly.
+
+2001-06-30
+
+ * src/imap.c: imap_scan_tree(): call imap_create_trash() if trash
+ is not found.
+ imap_scan_tree_recursive(): search the sub folders of INBOX.
+ recognize Trash folder.
+ imap_create_tree(): separated the part of creating trash.
+ imap_create_trash(): new.
+ * src/folder.c: folder_build_tree(), folder_write_list_recursive():
+ preserve no_sub and no_select.
+ * src/summaryview.c: summary_show(): don't proceed if item->no_select
+ is TRUE.
+
+2001-06-29
+
+ * src/imap.c: imap_scan_tree(): fixed a bug that didn't set the
+ root folder correctly.
+
+2001-06-28
+
+ * src/folderview.[ch]:
+ folderview_update_tree(): new. It updates one folder tree.
+ folderview_update_tree_cb(): new.
+ Added "Update folder tree" to the popup menu, and modified some
+ expressions.
+
+2001-06-27
+
+ * src/imap.c: implemented the autoscan of IMAP4 folder list.
+ imap_scan_tree(): new. It scans the whole IMAP4 folder.
+ imap_scan_tree_recursive(): new. It traverses the IMAP4 folder tree.
+ imap_parse_list(): new. It parses the LIST response.
+ imap_get_real_path(): new. It converts local path into IMAP4 path.
+ * src/folder.h: added no_sub and no_select to FolderItem.
+ * src/folder.c: folder_tree_destroy(): reset some variables.
+ * src/folderview.c: folderview_scan_tree_func(): supported IMAP4.
+
+2001-06-26
+
+ * src/imap.c: imap_parse_envelope(): fixed a bug that didn't
+ parse the FETCH response that continues to the next line.
+ imap_parse_fetch_element(): removed.
+ imap_parse_atom(), imap_parse_one_address(), imap_parse_address(),
+ imap_parse_envelope(), imap_get_uncached_messages(): use GString
+ and sock_getline() to parse the FETCH response.
+ imap_remove_all_msg(): fixed a bug that didn't delete messages
+ correctly.
+ imap_parse_address(): fixed a bug that didn't concaternate
+ addresses correctly, using GString.
+ * src/socket.[ch]: sock_getline(), fd_getline(): new. They read
+ the whole line and return the newly allocated string.
+ * src/prefs_account.[ch]: added `IMAP server directory' entry.
+
+2001-06-25
+
+ * version 0.5.0pre2
+
+ * src/imap.c: imap_create_tree(): pass the path that is separated
+ by the local filesystem separator to imap_create_folder().
+ imap_create_folder(): examine the existence of folders using
+ LIST command instead of STATUS.
+ imap_cmd_list(): new.
+ imap_query_password(): new.
+ imap_session_new(): query password if it is not set.
+
+2001-06-24
+
+ * src/imap.c: imap_parse_envelope(): FETCH results can be parsed
+ with arbitrary order.
+ imap_parse_fetch_element(): new. it parses one pair of name and
+ value of FETCH results.
+ imap_parse_flags(): modified for more flexibility.
+ * src/utils.[ch]: set_log_file(): new. it opens a new file for
+ logging.
+ close_log_file(): new. it closes the opened log file.
+ log_print(), log_message(), log_warning(), log_error(): also
+ output to log file.
+
+2001-06-22
+
+ * src/imap.c: imap_cmd_status(): check the pointer to "value"
+ before the assignment (thanks to NISHIJIMA).
+
+2001-06-21
+
+ * src/folderview.c: folderview_drag_motion_cb(): don't allow DnD
+ across MH and IMAP4 folder (for now) (thanks to Hiramatu).
+ * src/foldersel.[ch]: don't show folders which can't be targets
+ for current folder.
+
+2001-06-20
+
+ * version 0.5.0pre1
+
+ * src/imap.c:
+ imap_get_msg_list()
+ imap_cmd_envelope()
+ imap_cmd_fetch()
+ imap_cmd_copy()
+ imap_cmd_store(): use UID instead of sequential number.
+ Renamed imap_set_article_flags() to imap_set_message_flags().
+ * src/summaryview.c: summary_execute(): don't update summary
+ even if current folder is IMAP4.
+ * src/utils.[ch]: remove_numbered_files(): changed the type of
+ arguments from gint to guint.
+
+2001-06-19
+
+ * src/imap.c: imap_cmd_login(), imap_cmd_select(), imap_cmd_status(),
+ imap_cmd_create(), imap_cmd_delete(), imap_cmd_copy(): don't
+ enclose with double quotation if string doesn't have space
+ (workaround for old Cyrus IMAP4 server).
+ imap_create_folder(): fixed a bug of separator substitution.
+ renamed imap_session_connect_if_not() to imap_session_get().
+ imap_get_msg_list(): delete all cached messages if use_cache
+ is off.
+ imap_delete_cached_messages(): remove cached files in between
+ the specified range by reading directory entry.
+ imap_parse_one_address(): set fromname same as the from address
+ if it is empty.
+ * src/utils.[ch]: remove_numbered_files(): new. The range is
+ specifiable.
+ * src/summaryview.c: summary_execute(): update summary if current
+ folder is IMAP4.
+ KEY_PRESS_EVENT_STOP(): new macro.
+ summary_key_pressed(): stop signal emission when calling
+ summary_execute().
+ summary_select_by_msgnum(): show message only if
+ msg_is_toggled_on is TRUE. Move current page to the selected
+ node.
+ * src/news.c; news_delete_old_articles(): remove cached files in
+ between the specified range by reading directory entry.
+ * src/folderview.c:
+ folderview_selected(), folderview_button_released(): fixed a bug
+ that didn't select folder correctly.
+
+2001-06-18
+
+ * src/mainwindow.c
+ src/summaryview.c
+ src/prefs_common.c: improvements to the English (thanks to Paul
+ Mangan).
+ * src/mainwindow.c: compose_cb()
+ src/summaryview.c: summary_key_pressed()
+ src/compose.c: compose_new_with_recipient(): newsgroups entry
+ is automatically filled when composing a new article.
+
+2001-06-17
+
+ * src/procmsg.c: procmsg_msg_list_free(): fixed a bug that didn't
+ free list correctly.
+
+2001-06-16
+
+ * version 0.4.99
+
+ * src/imap.c: imap_find_namespace(): replace namespace path
+ separator with slash before comparison.
+ imap_remove_folder(): use namespace.
+ imap_create_tree(): use namespece when creating Trash.
+ imap_get_msg_list(): fixed a bug that returned old list and caused
+ memory leak if exists == 0.
+ imap_select(): new. It's a wrapper for imap_cmd_select().
+ * src/foldersel.c: foldersel_set_tree(): show IMAP4 folder too.
+
+2001-06-15
+
+ * src/folderview.c:
+ folderview_new_folder_cb()
+ folderview_new_imap_folder_cb(): show error dialog when creation
+ or deletion of folder failed.
+ Made it allow users to create a folder which contains subfolders.
+ folderview_button_pressed(): disabled delete menu on the special
+ IMAP4 folder.
+ * AUTHORS: incorporated from claws branch. It now contains all
+ contributors.
+ * src/send.c: enabled cancellation.
+ EXIT_IF_CANCELLED(): new macro.
+ Added cancelled flag to SendProgressDialog.
+ * src/utils.[ch]: strtailchomp(): new. It removes the trailing
+ specified character.
+ * src/imap.c: imap_cmd_fetch(): a fix for MS Exchange 2000 server.
+
+2001-06-15
+
+ * src/imap.c: imap_create_tree(): new. It creates required
+ folders such as INBOX and Trash.
+ imap_do_copy(), imap_do_copy_msgs_with_dest(): don't expunge
+ if COPY failed.
+ imap_remove_all_msg(): return immediately if exists == 0.
+ * src/account.c: account_add(), account_set_missing_folder():
+ made them use folder->create_tree().
+
+2001-06-14
+
+ * src/imap.c: more namespace implementation.
+ imap_find_namespace(), imap_path_separator_subst(): new.
+
+2001-06-13
+
+ * src/imap.c: imap_parse_namespace(), imap_cmd_namespace(): new.
+
+2001-06-11
+
+ * src/summaryview.c: summary_show(): fixed a glitch in folder view.
+
+2001-06-08
+
+ * src/imap.[ch]: added imap_add_msg(), and imap_append_message(),
+ which appends file into IMAP4 folder.
+ imap_status(): new.
+ imap_create_folder(): check the existence of a folder before
+ create it.
+ renamed the prefix of low-level IMAP4rev1 functions to imap_cmd.
+ * src/account.c: account_add(), account_set_missing_folder():
+ create INBOX automatically when creating IMAP4 account.
+
+2001-06-07
+
+ * src/utils.[ch]: added itos_buf() that takes the buffer for its
+ argument.
+ * src/imap.[ch]: imap_copy_msg(), imap_copy_msgs_with_dest(): new.
+ * src/folder.c: added copy_msg and copy_msgs_with_dest methods
+ to the IMAP class.
+
+2001-06-06
+
+ * src/utils.[ch]: move_file(): new.
+ * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): modified to
+ use move_file(), and fixed a bug that didn't close file when
+ error occured.
+
+2001-06-06
+
+ * src/imap.c: renamed imap_delete_messages() and
+ imap_delete_all_messages() to imap_delete_cached_messages() and
+ imap_delete_all_cached_messages(). Some code cleanups.
+ * src/utils.[ch]: added a function remove_all_numbered_files().
+ * src/mh.c: mh_remove_all_msg()
+ src/imap.c: imap_delete_all_cached_messages():
+ use remove_all_numbered_files().
+ * src/mainwindow.c
+ src/summaryview.c
+ src/compose.[ch]: added `Reply to sender'.
+ compose_reply()
+ compose_reply_set_entry(): added an argument `ignore_replyto'.
+
+2001-06-05
+
+ * src/folderview.c: folderview_selected()
+ src/summaryview.c: summary_show(): fixed a bug that updated wrong
+ folder when remaining marks were processed.
+
+2001-06-04
+
+ * src/headerwindow.c: headerwindow_show_cb(): always try to show
+ msginfo, and use the selected message, not the displayed one.
+ * src/smtp.c: smtp_ok(): fixed sock_gets() error handling.
+
+2001-06-02
+
+ * src/folderview.c: folderview_selected()
+ src/mimeview.c: mimeview_selected(): ungrab the mouse event.
+ * src/summaryview.c: summary_show(): process the left marks if any.
+
+2001-05-27
+
+ * src/passphrase.c: enclosed with #if USE_GPGME.
+ * src/prefs_account.c: added NNTP AUTH check button.
+ * src/alertpanel.[ch]: alertpanel_create(): added new argument
+ `can_disable', all existing callers changed to pass FALSE;
+ created a check button to disable the message.
+ alertpanel_message_with_disable(): new.
+ alertpanel_show(): mask value with G_ALERT_VALUE_MASK.
+ alertpanel_button_toggled(): new.
+ alertpanel_button_clicked(), alertpanel_close(): set value using
+ G_ALERT_VALUE_MASK.
+ * src/prefs_common.[ch]: added option to toggle GnuPG signature
+ check popup window, and GnuPG warning.
+ * src/rfc2015.c: check_signature(): show signature check dialog
+ only if it is enabled.
+ * src/main.c: modified GnuPG checking.
+ * src/main.c
+ src/prefs_common.c: fixed some compilation bugs when enabled
+ GPGME.
+
+2001-05-26
+
+ * src/codeconv.c: conv_get_code_conv_func(): fix for ISO-8859-*
+ encodings with libjconv.
+ conv_encode_header(): fixed an endless loop bug when encountering
+ an invalid wide character (thanks to Alte).
+ * src/headerview.c: SET_FONT_STYLE(): fixed segfault with invalid
+ bold font.
+ * src/imap.c: imap_create_folder(): don't create folder if the
+ name is INBOX.
+ * src/mainwindow.c: main_window_reflect_prefs_all(): hide the
+ execute button when immediate execution is enabled.
+
+2001-05-22
+
+ * README
+ README.jp: added the "How to run" section.
+
+2001-05-19
+
+ * merged NNTP AUTH from the claws branch.
+ * src/news.[ch]: supported NNTP AUTH.
+ * src/nntp.[ch]: wrapped SockInfo with NNTPSockInfo for NNTP AUTH.
+ * INSTALL
+ INSTALL.jp: modified the confirmation list and the warning about
+ threads.
+
+2001-05-18
+
+ * src/gtkutils.[ch]: moved folderview_find_collapsed_parent() to
+ gtkut_ctree_find_collapsed_parent().
+ * src/folderview.c: folderview_select_node(): automatically expand
+ the parent folders when selected.
+ * configure.in: made the version number to 0.4.99 (0.5pre)
+ * src/main.c: main(): moved parse_cmd_opt() before gtk_init()
+ so that X is not necessary for --help and --version.
+ parse_cmd_opt(): changed g_get_prgname() to g_basename(argv[0]).
+ * src/folderview.c: folderview_update_node(): a fix for collapsed
+ nodes.
+
+2001-05-17
+
+ * src/main.c: lock_socket_input_cb(): changed fd_read() to fd_gets().
+ It caused garbages in --compose option.
+ * src/socket.[ch]: made fd_gets() public.
+
+2001-05-16
+
+ * src/gtkutils.[ch]: gtkut_ctree_node_next(): new.
+ * src/folderview.c: folderview_find_next_unread(): new.
+ folderview_select_next_unread(): modified so that it can find
+ the hidden folder.
+
+2001-05-15
+
+ * src/compose.c: compose_write_headers(): excluded also From, To,
+ Sender because they could be used for SPAM.
+ * src/folderview.c: add '+' mark to the collapsed folder that have
+ some unread folders.
+ folderview_search_new_recursive(),
+ folderview_have_new_children(),
+ folderview_search_unread_recursive(),
+ folderview_have_unread_children(),
+ folderview_find_collapsed_parent(): new.
+ folderview_update_node(): display the number of queued messages.
+
+2001-05-14
+
+ * src/folder.[ch]
+ src/mh.[ch]: modified *_add_msg() to use link(). Added the
+ argument to switch whether to remove the source file or not.
+ * src/compose.c
+ src/inc.c
+ src/mbox.c: modified the argument of folder_item_add_msg() and
+ removed some unlink()'s.
+
+2001-05-13
+
+ * src/prefs_customheader.[ch]: renamed prefs_headers_* to
+ prefs_custom_header_*. Removed `(New)' row and `Substitute'
+ button. Supported empty value.
+ prefs_custom_header_row_moved(): new. Connected "row_move" signal
+ to the function, and made it set header list.
+ * src/customheader.c: custom_header_get_str()
+ src/compose.c: compose_write_headers(): supported empty value.
+ * src/prefs_display_header.c: prefs_display_header_row_moved(): new.
+ Connected "row_move" signal to the function, and made it set
+ header list.
+ * src/compose.c: compose_write_headers(): modified the order of
+ headers, and made it encode the custom headers.
+ * src/prefs_customheader.c: prefs_custom_header_delete_cb()
+ src/prefs_filter.c: prefs_filter_delete_cb(): treat closing the
+ alert panel by ESC as "No".
+
+2001-05-13
+
+ * merged the custom header stuff from claws branch:
+ * src/customheader.[ch]
+ src/prefs_customheader.[ch]: new.
+ * src/customheader.c: custom_header_read_str(): use strtol() instead
+ of atoi() and check errors.
+ custom_header_find(): new function.
+ * src/compose.c: IS_IN_CUSTOM_HEADER(): new macro.
+ compose_write_headers(): made it replace headers with user-defined
+ headers except for some automatically generated headers.
+
+2001-05-11
+
+ * src/inc.c: connection_check_cb(): fixed a bug that caused
+ segmentation fault if connection was not established.
+ * src/compose.c: compose_create(): even if set_autobcc or set
+ autoreplyto is checked and the entries are empty, show them.
+
+2001-05-10
+
+ * src/textview.c: textview_show_mime_part(): modified the messages.
+ TEXT_INSERT(): new macro.
+ * po/ja.po: fixed.
+ * src/prefs_display_header.c: prefs_display_header_create():
+ modified the text of checkbutton.
+
+2001-05-09
+
+ * src/mimeview.c: added "Open with..." to the context menu.
+ * src/summaryview.c: summary_print()
+ src/inputdialog.c: input_dialog(): fixed memory leaks.
+ * src/textview.c: textview_show_mime_part(): updated the description.
+ * src/send.c: implemented sending progress dialog.
+ (TODO: automaton should be used.)
+ send_progress_dialog_create(), send_progress_dialog_destroy(),
+ send_cancel(): new.
+ send_message_smtp(): made it update the dialog for each stage.
+ * src/utils.[ch]: get_left_file_size(): new. Get the left bytes
+ of opened file.
+ * src/summaryview.c: summary_show(): when open_inbox_on_inc is set,
+ go to first unread message even if folder is same as previous.
+ * src/prefs_common.c: made color selection dialog transient, and
+ made escape key close the dialogs.
+
+2001-05-08
+
+ * version 0.4.66
+
+ * src/select-keys.c: delete_event_cb(): removed `;' from its end.
+ * src/recv.c: recv_write(): changed the interval to 10msec.
+ * src/prefs_display_header.c: modified the layout of the dialog,
+ and made the hidden headers list insensitive when `Show other
+ headers' is not checked.
+ * src/textview.c: changed strcasecmp() and strncasecmp() to
+ the corresponding glib functions.
+ * src/inc.c: get_spool(): make a temporary file in the home
+ directory.
+
+2001-05-07
+
+ * src/prefs_common.c
+ src/prefs_account.c
+ src/prefs_filter.c
+ src/account.c
+ src/alertpanel.c
+ src/filesel.c
+ src/foldersel.c
+ src/export.c
+ src/import.c
+ src/inputdialog.c
+ src/passphrase.c
+ src/select-keys.c
+ src/sigstatus.c: fixed a bug that accidentally destroyed dialogs
+ when closed them with delete_event (thanks to DINH).
+ Added *_deleted() and *delete_event() which handle delete_event
+ signal correctly.
+
+2001-05-06
+
+ * src/prefs_display_header.c: merged some changes from claws branch:
+ prefs_display_header_create(): allow reordering of headers by
+ dragging.
+ prefs_display_header_find_header(): new function.
+ prefs_display_header_clist_set_row(): don't allow duplicates.
+ * src/prefs_account.c: prefs_account_receive_create(): changed
+ the label of the check button.
+
+2001-05-05
+
+ * src/pop.c: pop3_getsize_list_recv(): if sscanf() failed, break
+ immediately.
+ * src/inc.h: removed cur_msg_bytes from Pop3State.
+ * src/inc.c: pop3_recv_func()
+ src/recv.[ch]: made the second arguments of RecvUIFunc current
+ total read bytes.
+ recv_write(): made it call UI func if elapsed time is greater
+ than 0.1 sec.
+ * src/recv.c: recv_write(): changed the interval to 300 usec.
+ * src/textview.c: textview_show_header(): if header is Subject,
+ unfold it.
+ * src/utils.[ch]: unfold_line(): new.
+ * src/procheader.[ch]: procheader_get_header_array(): new.
+ * src/prefs_display_header.c: updated defaults.
+
+2001-05-05
+
+ * some merge from the sylpheed-claws branch.
+ It allows user to specify displayed headers in message view.
+ (symbol names were also changed.)
+ * src/prefs_display_header.[ch]
+ src/displayheader.[ch]: new.
+ * src/prefs_display_header.c:
+ removed prefs_display_headers_other_headers_toggled().
+ removed "(New)" row from the list.
+ * src/defs.h: added DISPLAY_HEADER_RC.
+ * src/prefs_common.c: prefs_message_create(): added a button for
+ opening the display header setting dialog.
+ * src/prefs_common.h: added show_other_header and disphdr_list
+ to PrefsCommon.
+ * src/procheader.[ch]: procheader_get_header_list_from_file(),
+ procheader_get_header_array_asis(): new.
+ procheader_get_header_list(): modified so that it takes FILE
+ pointer for its argument.
+ procheader_header_array_destroy(), procheader_header_free(): new.
+ * src/main.c: main(): made it call prefs_display_header_*_config().
+ * src/textview.c: textview_scan_header(): modified so that it
+ sorts headers according to user setting.
+ src/textview_show_header(): made it call
+ textview_make_clickable_parts().
+ textview_make_clickable_parts(): added GdkFont to its arguments,
+ and removed GtkText from them.
+
+2001-05-04
+
+ * implemented auto-checking of new mail based on the patch from
+ Pierric Descamps (thanks!).
+ * src/inc.c: added inc_autocheck_timer_init(),
+ inc_autocheck_timer_set(), inc_autocheck_timer_remove(),
+ inc_autocheck_func() for auto-checking of new mail.
+ * src/main.c: main(): call inc_autocheck_timer_init().
+ * src/prefs_common.c: prefs_receive_create(): activated the
+ auto-checking UI. Added prefs_common_cancel(), and connected
+ some signals to that.
+ * src/prefs_common.c
+ src/prefs_account.c
+ src/prefs_filter.c
+ src/account.c: Disabled auto-checking while opening the dialog.
+ * src/headerview.c: headerview_show_xface(): fixed a bug that
+ showed a warning when header pane was hidden.
+
+2001-05-03
+
+ * src/inc.c
+ src/pop.c
+ src/recv.c: removed non-blocking socket mode support since it
+ does nothing.
+ * src/pop.c
+ src/inc.c: modified the messages of incorporation dialog.
+
+2001-05-02
+
+ * src/utils.h: made u32 the typedef of guint32.
+ added BIG_ENDIAN_HOST macro that is used by md5.c.
+ * src/md5.c: renamed md5c.c. Fixed the indentation. Fixed a bug
+ that didn't calculate MD5 correctly on big endian machines.
+
+2001-05-01
+
+ * version 0.4.65
+
+ * src/folder.c: folder_init(): added the method imap_remove_folder.
+ * src/folderview.c: folderview_rm_imap_folder_cb(): made it
+ actually remove folder from IMAP4 server.
+ * src/imap.[ch]: imap_create_folder(): made it actually create
+ folder on IMAP4 server.
+ imap_remove_folder(): added.
+ imap_create(), imap_delete(): added.
+ * src/summaryview.c: summary_execute_delete(): don't check trash
+ if folder type is not F_MH.
+ * thanks to Ishihara for the above changes.
+ * configure.in
+ ac/check-type.m4: better wint_t typedef detection (renamed
+ sv_CHECK_TYPE to SYLPHEED_CHECK_TYPE).
+
+2001-04-30
+
+ * src/recv.c: recv_bytes_write(): fixed another bug that caused
+ infinite loop and buffer overrun.
+
+2001-04-30
+
+ * src/socket.[ch]: renamed sock_read() and fd_read() to
+ sock_gets() and fd_gets() for preventing confusion.
+ Added sock_read() and fd_read() which is the wrapper of read().
+ * src/recv.c: recv_bytes_write(): fixed a bug that caused infinite
+ loop. Use sock_read() instead of fd_read().
+ * src/esmtp.c
+ src/imap.c
+ src/news.c
+ src/nntp.c
+ src/pop.c
+ src/recv.c
+ src/smtp.c: use sock_gets() instead of sock_read().
+ * src/imap.c: imap_session_new(): fixed the error detection
+ of imap_open().
+
+2001-04-28
+
+ * src/inc.c: made it displays current read bytes to the dialog.
+ * src/pop.c: recv_write(): call UI function before editing
+ strings.
+
+2001-04-27
+
+ * src/progressdialog.c: progress_dialog_create(): modified the
+ size of dialog and made it stretchable.
+ * src/smtp.c
+ src/esmtp.c: smtp_ok(), esmtp_ok(): fixed a bug that didn't
+ process an error response correctly (thanks to Ohmasa).
+ * src/pop.[ch]: added pop3_getsize_list_send(),
+ pop3_getsize_list_recv().
+ * src/recv.[ch]: added recv_set_ui_func() that makes recv_write()
+ call the callback function for each sock_read().
+ * src/inc.h: in Pop3State, renamed bytes to total_bytes, and added
+ cur_msg_bytes, cur_total_bytes, and sizes.
+ * src/inc.c: added inc_pop3_recv_func() that updates the progress
+ bar for each sock_read().
+
+2001-04-26
+
+ * src/mh.c: mh_is_maildir_one(): modified so that it uses
+ is_dir_exist().
+
+2001-04-25 Werner Koch <wk@gnupg.org>
+
+ * src/mh.c (mh_is_maildir_one, mh_is_maildir): New.
+ (mh_scan_tree_recursive): Do not include Maildir style directories
+ in the scan.
+
+ Changed the use of integers to describe sockets by an more abstract
+ data structure.
+
+ * src/automaton.h (struct _Automaton): Add help_sock.
+ * src/automaton.c (automaton_input_cb): Changed source to be
+ SockInfo and use wrapper for gdk_input_add.
+
+ * src/send.c (SEND_EXIT_IF_ERROR): Adjusted tests and removed test
+ for invalid socket because this is now done in sock_close. Set
+ sock to NULL.
+ (SEND_EXIT_IF_NOTOK): Set closed sock to NULL.
+ (send_smtp_open): Use only SockInfo.
+
+ * src/news.c (news_session_new): Use SockInfo here.
+ (news_session_destroy): Ditto and set sock to NULL.
+
+ * src/nntp.c: Use SockInfo instead of integers
+ * src/smtp.c: Ditto.
+ * src/pop.c: Ditto.
+ * src/recv.c: Ditto.
+
+ * src/inc.c (inc_pop3_session_do): Removed sock_sockinfo_free. Put
+ gdk_input_add into a wrapper.
+
+ * src/esmtp.c: Changed socket descriptors to use SockInfo.
+ * src/esmtp.h: Ditto, included socket.h.
+ * src/session.h (struct _Session): Likewise.
+ * src/imap.c (imap_open): Return SockInfo ptr and not an integer.
+ Removed access to internal data of SockInfo. Changed all callers
+ and functions to take SockInfo.
+ (imap_session_new): Use sock_close here.
+ (imap_session_destroy): Ditto.
+
+ * src/compose.c (compose_exec_ext_editor): Replaced sock_write by
+ fd_write.
+
+ * src/main.c (app_will_exit): Close lock socket using fd_close.
+ (prohibit_duplicate_launch): Use fd_xxx functions instead of sock_xxx.
+ (lock_socket_input_cb): Ditto.
+
+ * src/socket.h, src/socket.c: Prepared SockInfo structure to use
+ glib channels. Changed all sock_xxx to use SockInfo instead of an
+ integer.
+ (sock_connect_unix, sock_open_unix, sock_accept): Renamed to ..
+ (fd_connect_unix, fd_open_unix, fd_accept): .. this and changed all
+ callers.
+ (fd_read, fd_write, fd_close): New.
+ (sock_sockinfo_free): Removed.
+ * src/socket.c (sock_connect_nb): Use close instead sock_close here.
+ (sock_connect): Ditto.
+
+2001-04-26
+
+ * config.h.in: removed.
+ * ac/Makefile.am: added gnupg-check-typedef.m4 to MACROS.
+ * .cvsignore: added.
+ * src/inc.c
+ src/progressdialog.[ch]
+ src/pixmaps/complete.xpm
+ src/pixmaps/continue.xpm
+ src/pixmaps/error.xpm: applied the patch from Leandro Pereira
+ that displays the state of message incorporation (thanks!).
+ * src/inc.c: made the progress dialog change the text of status.
+
+2001-04-25
+
+ * removed po/*.gmo, configure, stamp-h.in, aclocal.m4, Makefile.in
+ from the cvs tree.
+ * COPYING: removed RSA copyright notice.
+ * removed po/sylpheed.pot, po/stamp-cat-id, po/cat-id-tbl.c.
+ * configure.in: added the check of sys/utsname.h.
+
+2001-04-24 Werner Koch <wk@gnupg.org>
+
+ Merged most of the changes from the W32 branch in.
+
+ * configure.in: Require gpgme >= 0.2.1
+
+ * acconfig.h (HAVE_U32_TYPEDEF): New.
+ * ac/gnupg-check-typedef.m4: New.
+ * configure.in: Check for u32 type and the size of some types.
+ * src/utils.h: Define the u32 type and related constants.
+
+ * src/about.c (about_create): Removed the note about MD5. We are
+ not any longer using the RSA Inc. implementation.
+ * src/md5ify.c, src/md5ify.h, src/md5global.h: Removed.
+ * src/md5c.c, src/md5c.h: Replaced by an FSF implementation and
+ renamed the function to standard lowercase convention. Changed all
+ callers.
+ (md5_hex_digest): New.
+ (md5_hmac): Add hmac function by Martin Schaaf with some
+ modifications.
+ (md5_hex_hmac): New.
+ * src/esmtp.c, src/esmtp.h (md5_hex_hmac): Removed.
+ (hmac_md5): Removed.
+ * src/pop.c (pop3_getauth_apop_send): Replaced the md5_digest by
+ the new md5_hex_digest function.
+
+ * src/about.c: Include utsname.h only if available
+
+ * src/utils.c, src/utils.h (get_home_dir): New to better cope with
+ special Windoze requirements. Changed all calls to
+ g_get_home_dir() to this function.
+
+ * simple-gettext.c: New.
+
+ * src/main.c (main): Issue a warning if GnuPG is not properly
+ installed.
+
+ * src/sigstatus.c, src/sigstatus.h: New.
+ * src/rfc2015.c (check_signature): Use the sigstatus window and
+ get the status texts from a utility function.
+
+ * src/select-keys.c: Removed the global select_keys var and
+ pass an allocated one along all functions.
+ (set_row): Display only keys capable of encryption.
+ (update_progress): Replaced the progressbar by
+ a windmill and a text showing for which key we are collecting
+ info. Removed progressbar everywhere else and updated callers.
+
+ * src/prefs_common.c (prefs_privacy_create) [__MINGW32__]: Do not
+ display the grab button.
+
+2001-04-24
+
+ * src/prefs_common.[ch]
+ src/procheader.c: applied the patch from Darko Koruga that
+ allows user to define their own format for displaying date in
+ summary view using strftime() (thanks!).
+ * src/prefs_common.c: prefs_quote_colors_dialog()
+ src/mainwindow.c: main_window_reflect_prefs_all(): made it
+ update message colors if the colors setting is changed.
+ * src/main.[ch]: made it remember the startup directory.
+ * src/export.c: export_mbox(): made it initially chdir to the
+ startup directory.
+ * src/filesel.c: filesel_select_file(): made it open the startup
+ directory at first.
+
+2001-04-23
+
+ * added option to warn about queued messages on exit [sergey]:
+
+ * src/compose.c: compose_queue(): call folder_item_scan()
+ and folderview_update_item() after queueing.
+ * src/folderview.c: folderview_update_node(): draw the queue
+ folder in bold font if there are queued messages.
+ * src/mainwindow.c: queued_messages(): new function.
+ app_exit_cb(): display warning if there are queued messages
+ if warn_queued_on_exit is set.
+ * prefs_common.[ch]: add warn_queued_on_exit option.
+
+ * src/mainwindow.c: moved queued_messages() to main.c, and renamed
+ it to get_queued_message_num().
+ * src/main.c: app_will_exit(): moved warning dialog code from
+ app_exit_cb(), and added manage_window_focus_in().
+
+ * enhanced GnuPG key selection support [sergey]:
+
+ * src/select-keys.c: updated to newer version from Win32
+ branch with support for selecting arbitrary keys.
+ * src/prefs_account.c: added the Privacy tab to the account
+ options window.
+ prefs_account_privacy_create(),
+ prefs_account_sign_key_set_data_from_radiobtn(),
+ prefs_account_sign_key_set_radiobtn(): new functions.
+ * src/prefs_account.h: new preferences sign_key_type, sign_key_id.
+ * src/rfc2015.c: set_signers(): new function.
+ pgp_sign(): add the account parameter, call set_signers().
+ rfc2015_sign(): add the account parameter, pass it to pgp_sign().
+ * src/rfc2015.h: rfc2015_sign(): updated prototype.
+ * src/compose.c: pass the current account to rfc2015_sign().
+
+2001-04-22
+
+ * src/mbox.c: export_to_mbox(): fixed a memory leak bug.
+
+2001-04-20
+
+ * src/mbox.[ch]: renamed export_mbox() to export_to_mbox().
+ Fixed a memory leak bug.
+ * src/export.[ch]: added for exporting folder to mbox.
+ * src/import.[ch]: made import_mbox() take default folder.
+ Added description to the dialog.
+ * src/summaryview.c: summary_show(): fixed a bug that kept the
+ toolbar buttons insensitive after receiving messages.
+ * src/export.c
+ src/import.c: fixed a bug that caused quitting of the program
+ when OK or Cancel button was clicked several time.
+ * src/prefs_common.[ch]
+ src/addressbook.c: added "Add address to destination when
+ double-clicked" option.
+
+2001-04-19
+
+ * src/prefs_common.[ch]: reorganized the items of settings,
+ and added Message tab.
+ * src/main.c: parse_cmd_opt(): added command line option --version.
+ * src/mh.c: made it unset MSG_DELETED flag when moved/copied to
+ special folders.
+ * src/prefs_common.[ch]
+ src/headerview.[ch]: the header pane can be toggled now.
+ * src/prefs_common.[ch]
+ src/textview.c: page scroll step is now selectable between
+ one page and half page.
+ * src/mbox.[ch]: added export_mbox() that reads all messages
+ in a folder, and store them into one mbox file.
+
+2001-04-18
+
+ * src/prefs_filter.[ch]: separated filter setting code from
+ prefs_common.c, and made it a separate dialog.
+
+2001-04-17
+
+ * version 0.4.64
+
+ * src/automaton.[ch]
+ src/inc.c: fixed the bug that made Sylpheed crash when clicking
+ Cancel button while getting new mail (thanks to Sergey Vlasov).
+ * src/xml.c: xml_build_tree()
+ src/addressbook.c: fixed a bug that caused infinite loop if an
+ illegal XML file was given.
+
+2001-04-16
+
+ * src/summaryview.c
+ src/inc.c: applied the patch from Sergey Vlasov that fixes the
+ problem when the "Go to inbox after receiving new mail" option
+ was turned off (thanks!).
+
+2001-04-15
+
+ * src/xml.[ch]: modified so that it supports some characters which
+ must be escaped, and multiple-lined tag.
+ * src/folder.c
+ src/addressbook.c: modified so that it escapes some characters
+ like '<', '>', '&', ''', '"'.
+
+2001-04-10
+
+ * version 0.4.63
+
+ * src/folder.[ch]
+ src/mainwindow.c
+ src/mh.[ch]
+ src/procmsg.[ch]
+ src/summaryview.[ch]: applied the patch from Darko Koruga that
+ adds copy message operation for the MH folders (thanks!).
+ * src/imap.c: disabled slash to dot conversion.
+ * src/imageview.c: fixed a bug that displayed an old image when
+ loading of a image failed (thanks to Darko Koruga).
+
+2001-04-09
+
+ * src/procmsg.c: procmsg_read_cache(): added setvbuf() to speed up
+ cache reading (thanks to Sergey Vlasov).
+ * src/inc.c
+ src/summaryview.[ch]
+ prefs_common.[ch]: applied the patch that keeps the same folder
+ after receiving new mail (thanks to Sergey Vlasov).
+ * src/textview.c
+ src/utils.[ch]: moved get_quote_level() to utils.c.
+
+2001-04-08
+
+ * ac/Makefile.am: added.
+ * Makefile.am
+ configure.in: added ac directory.
+
+2001-04-07
+
+ * src/summaryview.c: summary_filter(): made it move messages
+ immediately if immediate_exec option is set.
+ * src/prefs_common.[ch]
+ src/textview.[ch]
+ src/gtkutils.[ch]: applied the message coloring patch from
+ Stephen Anthony with some modification (thanks!).
+ * src/gtksctree.c
+ src/mimeview.c: modified the behavior of MimeView (thanks to
+ HIRAMATSU).
+
+2001-04-06
+
+ * src/utils.c: copy_file()
+ src/mh.c: applied (and modified) the patch from Darko Koruga
+ that enables to move messages across file systems (thanks!).
+ * src/procheader.c
+ src/utils.[ch]: applied the patch from Jorge Van Hemelryck
+ that converts the date of messages to the local time (thanks!).
+ * src/utils.c: remote_tzoffset_sec(): fixed a bug that the signs
+ of one-letter timezone were reversed.
+ * src/folder.c: folder_item_add_msg(): put the assertion for the
+ add_msg() method (thanks to TAKANO).
+
+2001-04-05
+
+ * src/procmime.c: procmime_decode_content(): fixed a bug that
+ corrupted quoted-printable encoded messages when they include
+ `=00' (thanks to Masahiro Tomita).
+ * src/gtksctree.c
+ src/mimeview.c
+ src/summaryview.c: modified the DnD behavior of MIME view
+ (thanks to HIRAMATSU).
+
+2001-04-04
+
+ * src/about.c: applied the patch from Sergey Vlasov that fixes
+ the appearance of the about dialog (thanks!).
+ * src/prefs_common.[ch]
+ src/rfc2015.[ch]
+ src/mimeview.c
+ src/procmime.[ch]
+ src/compose.[ch]
+ src/passphrase.c
+ src/textview.[ch]: applied the GnuPG support patch which had
+ ported from the sylpheed-win32 branch (thanks to Sergey Vlasov).
+ * INSTALL, INSTALL.jp: updated the description about GnuPG.
+
+2001-04-03
+
+ * src/utils.[ch]: added references_list_append() that parses
+ References header and makes it string list.
+ * src/compose.c: modified so that too long References header is
+ truncated, garbage characters are removed, and header is tidied
+ up (thanks to Matthias Intemann).
+
+2001-04-02
+
+ * src/addr_compl.c: applied the address completion bugfix patch
+ from Alfons Hoogervorst (thanks!).
+
+2001-04-01
+
+ * src/gtksctree.c: modified so that the tree_select_row signal
+ actually pass the column number.
+ * src/summaryview.c: summary_selected(): made generic mark and
+ unread mark can be toggled with clicking of the columns.
+ Added summary_mark_row_as_read() and summary_mark_row_as_unread().
+ * src/prefs_common.c
+ src/prefs_account.c: applied the layout fix patches from Sergey
+ Vlasov, and adjusted some widths of GtkEntry widgets.
+ * src/prefs.c: prefs_dialog_create(): enable notebook to take focus.
+ * src/inc.c: inc_start(): modified so that authentication dialogs
+ show server name too (thanks to Sergey Vlasov).
+
+2001-03-31
+
+ * src/mimeview.c: mimeview_key_pressed(): fixed a bug that caused
+ segmentation fault when a malformed multipart message is shown
+ (thanks to Sergey Vlasov).
+ * src/summaryview.c: summary_display_msg(): made it focus to the
+ summary view if the MIME list is empty.
+
+2001-03-30
+
+ * src/pixmaps/deleted.xpm
+ src/pixmaps/mark.xpm
+ src/summaryview.c: added deleted and mark icon.
+ * src/gtkutils.c: gtkut_widget_init(): changed gtk_widget_destroy()
+ to gtk_widget_unref().
+ * src/addr_compl.c: start_address_completion(): fixed the bug that
+ displayed warning when the address book was empty (thanks to
+ Chideok Hwang).
+
+2001-03-29
+
+ * src/summaryview.c: summary_show(): fixed a memory leak bug
+ (thanks to ChiDeok Hwang).
+ * src/pixmaps/forwarded.xpm
+ src/pixmaps/replied.xpm
+ src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm
+ src/compose.c
+ src/mainwindow.c
+ src/prefs_common.c
+ src/procmsg.h
+ src/summaryview.[ch]: applied the patch from Marc Hoper
+ that adds replied and forwarded mark to replying or forwarding
+ messages (thanks!). And new and unread mark were replaced
+ by the icons David Mehrmann created (thanks!).
+ * src/summaryview.c: made the width of unread and MIME column
+ fixed.
+ * src/prefs.c: prefs_config_parse_one_line(): made it check the
+ '=' separator (thanks to Sergey Vlasov).
+
+2001-03-26
+
+ * src/prefs_common.[ch]: moved smooth scroll option to the
+ interface tab.
+ * src/textview.c: made the one-line scroll also perform smooth
+ scrolling.
+
+2001-03-25
+
+ * src/prefs_common.[ch]
+ src/textview.c: applied the smooth scroll patch from Setoh and
+ Ninomiya (thanks!).
+
+2001-03-24
+
+ * src/summaryview.c: summary_attract_by_subject(): rewritten it
+ using hash table for speeding up.
+ * src/prefs_account.c: made filter_on_receive TRUE by default.
+ * src/mainwindow.c: reordered menu items.
+
+2001-03-23
+
+ * src/gtkutils.c: gtkut_clist_bindings_add(): fixed a bug that
+ caused address completion not to accept space and enter key.
+
+2001-03-22
+
+ * src/utils.[ch]
+ src/codeconv.c: fixed a bug that didn't encode non-ASCII headers
+ correctly.
+ * src/compose.c: fixed a bug that didn't decode some headers
+ correctly when replying or reediting drafts (thanks to Sergey
+ Vlasov).
+
+2001-03-21
+
+ * src/gtkutils.[ch]: added gtkut_widget_init() that modifies the
+ behaviors of some classes.
+ * src/main.c: main(): made it call gtkut_widget_init() first.
+ * src/summaryview.c: summary_create(): removed the key binding code.
+
+2001-03-19
+
+ * src/procmsg.[ch]: modified for the sake of readability.
+
+2001-03-18
+
+ * src/mainwindow.c: changed "Clean trash" to "Empty trash".
+ Added new menu items for folder manipulation.
+ allsel_cb(): made it change the target between summary view and
+ message view according to the input focus.
+ Removed "Select all" from Summary submenu.
+ * src/folderview.[ch]: added functions for creating/renaming/deleting
+ folder.
+ * src/procmsg.[ch]: made "marked" and "deleted" flag permanent, and
+ removed "important" flag.
+ * src/summaryview.c: added summary_set_row_marks() that sets style
+ of a row according to the flags, and made some functions use it.
+ * src/mainwindow.c: allsel_cb(): modified so that it selects
+ summary view correctly if message view is toggled off.
+
+2001-03-17
+
+ * src/socket.c: sock_connect_by_getaddrinfo(): fixed a resource
+ leak bug of socket, and rewrote the routine.
+ * src/inc.c: inc_mail(), inc_all_account_mail(): fixed a bug that
+ displayed the wrong unread number in the folder tree if a
+ folder was open and new messages arrived at the folder.
+ * src/socket.c: sock_connect_by_getaddrinfo(): fixed a bug
+ again.
+
+2001-03-15
+
+ * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): made it
+ check the existence of the destination file.
+ * src/procmsg.c: procmsg_set_flags(): made it count the last
+ number of the message list (and fixed a bug that didn't open
+ newly arrived message).
+
+2001-03-13
+
+ * src/prefs_common.c: prefs_send_create(): removed EUC-JP and
+ Shift_JIS from the outgoing codeset.
+
+2001-03-12
+
+ * version 0.4.62
+
+2001-03-11
+
+ * src/send.c: send_message_queue(): modified so that it finds
+ the account from the `From' and the server name of the queued
+ message.
+ * src/account.[ch]: added account_find_from_smtp_server() that
+ finds an account from the specified address and SMTP server.
+ * src/Makefile.am
+ src/mainwindow.c
+ src/summaryview.[ch]
+ src/sourcewindow.[ch]: integrated the viewing source patch from
+ DINH V. Ho燼(thanks!).
+
+2001-03-10
+
+ * src/addr_compl.[ch]
+ src/addressbook.c
+ src/compose.c: applied the enhanced address completion patch
+ from Alfons Hoogervorst (thanks!).
+ * src/addr_compl.c: replaced g_assert() with g_return(_val)_if_fail().
+ * src/folder.c: folder_init()
+ src/folderview.c: folderview_drag_motion_cb()
+ src/procmsg.c: procmsg_clean_trash()
+ src/summaryview.c: summary_start_drag()
+ src/imap.[ch]: integrated the IMAP4 move/remove function patch
+ from Suzuki Mio (thanks!).
+
+2001-03-08
+
+ * src/main.c: parse_cmd_opt(): made the --compose option realize
+ mailto: URI.
+ * src/utils.[ch]: execute_async(): supported quoted arguments
+ correctly.
+ strstr_with_skip_quote(), strsplit_with_quote(): quote-supported
+ version of g_strsplit().
+ * src/mimeview.c: mimeview_view_file()
+ src/prefs_common.c: added single quotation mark around the file
+ name.
+
+2001-03-07
+
+ * configure.in
+ src/compose.c
+ src/prefs.c
+ src/procmime.c
+ src/summaryview.c
+ src/mbox.c
+ src/recv.c
+ src/utils.[ch]: applied the security fix patch from Dmitry V.
+ Levin with some modification (thanks!). Added my_tmpfile() to
+ utils.[ch].
+ * src/main.c: added --receive-all command-line option.
+
+2001-03-06
+
+ * src/socket.c: sock_connect_thread(): fixed a bug that didn't
+ compile if both multithread and IPv6 are enabled (thanks to
+ Ishihara).
+ * src/utils.[ch]
+ src/compose.c: applied a patch from Jason McCarver that allows
+ FIFO for signature file (thanks!).
+ * src/textview.c: made some more refactoring.
+ * src/socket.c: sock_accept(): changed socklen_t to gint.
+
+2001-03-05
+
+ * src/main.c
+ src/textview.c: some code cleanups.
+
+2001-03-04
+
+ * src/compose.[ch]
+ src/main.c
+ src/textview.c: integrated the patch from Alfons Hoogervorst that
+ fixes some glitches in clickable URI and enables mail addresses
+ clickable, and enables the --compose command line option to
+ specify address (thanks!).
+
+2001-03-03
+
+ * src/esmtp.[ch]
+ src/smtp.[ch]
+ src/send.c
+ src/prefs_account.[ch]
+ src/Makefile.am: applied the SMTP AUTH patch from Martin Schaaf
+ and fixed its a few bugs (thanks!).
+ * src/textview.c: textview_key_pressed(): made it don't move focus
+ to summary view.
+ * src/main.c: parse_cmd_opt(): modified the help message.
+ * src/html.[ch]: added empty_line to HTMLParser and modified
+ the parser routines a bit.
+
+2001-03-01
+
+ * src/html.c: added eucjp_symbol_list, and added some characters
+ to ascii_symbol_list.
+
+2001-02-19
+
+ * src/codeconv.[ch]: added a member `charset' and `charset_str'
+ to CodeConverter.
+ * src/html.[ch]: added the symbol list for ISO-8859-1 codeset.
+ html_parser_new(): made it change the symbol hash table
+ according to the character set of the document.
+ html_parse_special(): made it recognize character code number.
+
+2001-02-17
+
+ * src/textview.c: added textview_show_html() that parses HTML and
+ display as a text.
+ textview_show_part(): made it call textview_show_html() if
+ the part is text/html.
+ * src/html.[ch]: implemented HTML parser.
+
+2001-02-15
+
+ * src/codeconv.[ch]: added CodeConverter, and its methods
+ (conv_code_converter_new(), conv_code_converter_destroy(), and
+ conv_convert()).
+ * src/textview.c: removed the branches by HAVE_LIBJCONV and
+ rewrote them using CodeConverter.
+
+2001-02-12
+
+ * src/mbox.c: proc_mbox(): workaround for duplicated From_ line.
+
+2001-02-11
+
+ * src/codeconv.c: some code cleanups.
+
+2001-02-05
+
+ * src/mainwindow.c: main_window_popup(): fixed a bug that didn't
+ popup the main window correctly.
+ * src/codeconv.h: fixed a bug that the definition of CS_EUC_CN and
+ CS_EUC_TW was reversed (thanks to Sakamoto).
+
+2001-02-04
+
+ * src/gtkutils.[ch]
+ src/main.c
+ src/mainwindow.[ch]
+ src/socket.[ch]: applied the patch from Hiramatu that enables
+ prohibition of multiple execution and remote control with
+ command line option (thanks!).
+
+2001-02-03
+
+ * src/summaryview.c: summary_button_pressed(), summary_selected():
+ made it toggle the view if middle button is clicked while message
+ view is hidden.
+ summary_drag_data_get(): fixed a memory leaking.
+ * src/Makefile.am
+ src/compose.c: compose_write_headers(): modified so that it uses
+ host_alias for X-Mailer or X-Newsreader field.
+
+2001-02-03
+
+ * version 0.4.61
+
+ * src/folderview.c: fixed a bug that prevented a folder from being
+ created if there were already folders that have the same name
+ somewhere at another place.
+
+2001-02-02
+
+ * src/folderview.c: folderview_update_all(): fixed a bug that
+ caused segmentation fault when a folder was selected after
+ updating the folder tree.
+ * src/compose.c: compose_send(): fixed a locking bug.
+ compose_write_headers(): fixed a bug that referred to cur_account.
+ compose_convert_header(): made it check the arguments.
+
+2001-02-01
+
+ * src/main.c: some cleanups and added --help option.
+
+2001-01-31
+
+ * src/send.c: re-enabled user-defined domain name setting.
+ * src/utils.c: is_next_mbs(): changed the size of temporary
+ multibyte array to MB_CUR_MAX.
+ strdup_mbstowcs(): added error check to mbstowcs().
+ strdup_wcstombs(): added error check to wcstombs().
+ * src/addr_compl.c: get_address_from_edit(): made it check the
+ return value of strdup_mbstowcs().
+ * src/codeconv.c: conv_encode_header(): added error checking
+ to strdup_mbstowcs().
+
+2001-01-30
+
+ * src/utils.c: log_error(): changed g_error() to g_warning() so
+ that it doesn't abort.
+ Added iswalnum().
+ * src/addr_compl.c: add_address(): fixed a bug that aborted the
+ program if the name or the address is empty.
+ get_address_from_edit(): supported multibyte characters.
+ * configure.in: fixed a typo.
+ * src/send.c: re-enabled user-defined SMTP port setting.
+
+2001-01-30
+
+ * version 0.4.60
+
+ * configure.in: added --enable-gpgme option, and disabled GPGME
+ by default.
+ * made GPGME related members in MimeInfo not used if disabled.
+ * src/rfc2015.c: some cleanups for warning.
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: updated.
+ * Makefile.am: modified bzip2 option.
+
+2001-01-29
+
+ * src/procmime.[ch]: added MIME_APPLICATION_OCTET_STREAM to
+ MIME type.
+ * src/mimeview.c: mimeview_view_file(): made it do nothing if
+ the MIME type is application/octet-stream.
+ * src/folderview.c: folderview_update_all(): made it show modal
+ dialog while updating folders.
+ * src/folderview.c: folderview_update_all(): fixed a bug that
+ didn't remove the dialog.
+
+2001-01-28
+
+ * src/mimeinfo.c: merged the patch from John E.P. Hynes that
+ launches the attached file using metamail (thanks!).
+ * src/procmime.[ch]: added procmime_get_tmp_file_name().
+ * src/compose.c
+ src/addr_compl.[ch]: merged the patch from Alfons Hoogervorst
+ that enables address completion in the address entry on the
+ composition window (thanks!).
+ * src/addr_compl.c: get_all_addresses(), read_address_book():
+ modified so that it uses xml_free_tree() for freeing the address
+ tree.
+
+2001-01-27
+
+ * src/utils.c: remove_dir_recursive(): fixed a bug that failed to
+ remove the current directory (thanks to Maki).
+ * src/summary_search.c: added `Select all matched' option to the
+ search dialog (thanks to Takahashi).
+ * src/pixmaps/stock_mail_attach.xpm
+ src/pixmaps/tb_address_book.xpm
+ src/compose.c: added some toolbar icons contributed from
+ Leandro Pereira (thanks!).
+
+2001-01-25
+
+ * src/rfc2015.c: passphrase_cb(): *finally* fixed a bug that caused
+ segmentation fault when the passphrase dialog was cancelled.
+ Hided the passphrase in the debug message.
+ * src/about.c: about_create(): fixed a bug that failed to compile
+ when none of the features were used.
+ * src/foldersel.c: foldersel_set_tree(): made it display all
+ MH folders.
+ * src/inc.c: inc_start(): fixed a bug that showed password dialog
+ continuously if it was cancelled.
+ * src/summaryview.c: summary_write_cache(): put an assertion after
+ folder_item_get_cache_file() to prevent the crash.
+ * thanks to Maki for the above four fixes.
+ * src/utils.h: added #include <alloca.h>.
+
+2001-01-24
+
+ * src/rfc2015.c: changed some g_message() used for error messages
+ to g_warning().
+
+2001-01-23
+
+ * src/procmsg.[ch]: modified READ_CACHE_DATA() macro so that
+ it can handle a string data of which length >= BUFFSIZE.
+ * src/rfc2015.c: rfc2015_encrypt(): changed return to `goto failure'.
+ * src/pixmaps/stock_mail_receive_all.xpm
+ src/pixmaps/stock_mail_reply_to_all.xpm
+ src/Makefile.am
+ src/mainwindow.c: main_window_toolbar_create(): added new toolbar
+ icons contributed from David Mehrmann (thanks!).
+ * src/inc.[ch]: overhauled the architecture so that it don't create
+ and destroy progress dialog for each incorporation in `get all'
+ mode.
+
+2001-01-22
+
+ * src/mh.c: mh_scan_tree_recursive(): fixed a bug that mistook
+ sub folders named `inbox', etc. as special folders.
+ * src/rfc2015.c: rfc2015_encrypt(): fixed a bug that didn't quote
+ boundary correctly.
+
+2001-01-21
+
+ * applied the GnuPG patch from Werner Koch (thanks!).
+ * removed Mixmaster support.
+ * src/rfc2015.c: changed g_error() to g_warning() and modified some
+ messages.
+ * src/about.c: about_create(): modified compiled-in features list.
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: updated.
+ * src/select-keys.c: create_dialog(): modified the layout.
+ * src/headerwindow.c
+ src/addressbook.c
+ src/logwindow.c: made it raise the window if the window is already
+ open.
+ * src/prefs_common.[ch]: added an option for immediate execution.
+ * src/summaryview.c: made it execute immediately when messages are
+ moved or deleted if immediate_exec option is turned on.
+ * src/summaryview.c: summary_delete(), summary_move_selected_to():
+ moved summary_step() before summary_execute().
+ * src/folderview.c: folderview_update_all(): made it scan folder
+ tree correctly.
+ * src/compose.c: compose_write_headers(): made it don't add
+ In-Reply-To header if to_list is empty.
+
+2001-01-09 Werner Koch <wk@gnupg.org>
+
+ * configure.in, acconfig.h: Check for GPGME.
+ * ac/: New directory for local autoconf macros.
+ * src/Makefile.am: Add support for GPGME
+
+ * src/main.c (idle_function_for_gpgme): New.
+ (main): Register this function.
+
+ * src/about.c: Add a note about GPGME.
+
+ * src/rfc2015.c, rfc2015.h: New.
+
+ * src/mimeview.c (mimeview_show_message): Check signature.
+ * src/procmime.c (procmime_scan_message): Ditto.
+
+ * src/messageview.c (messageview_show): Add decryption stuff.
+
+ * src/compose.c (compose_write_to_file): Encrypt the file if requested.
+ (compose_toggle_encrypt_cb): New
+ (compose_toggle_mixmaster_cb): New, just to be prepared for
+ Mixmaster support.
+ (compose_write_headers): Suppress some headers in mixmaster mode.
+
+ * src/prefs_common.c (prefs_common_create): Add Privacy notebook sheet.
+ (prefs_privacy_create): New. Also some new structures etc.
+ * src/compose.c (compose_create): Set encrypt button to prefs default.
+ * src/compose.h (struct _Compose): Add use_encryption, use_mixmaster.
+
+ * src/compose.c (compose_send): Add missing unlock before one return.
+
+2001-01-18
+
+ * src/gtksctree.[ch]
+ src/folderview.c
+ src/summaryview.[ch]: applied the patch from Hiramatu that enables
+ DnD from the summary view to the folder view and fixes some other
+ probrems (thanks!).
+ * src/mainwindow.c: scan_tree_func(): fixed a bug that caused
+ segmentation fault.
+ * src/imap.c: quoted user name in LOGIN and folder name in SELECT.
+ * src/gtksctree.c: gtk_sctree_button_press(): fixed a bug that
+ didn't toggle expansion of node.
+
+2001-01-17
+
+ * src/imap.c: applied the patch from Nishimura that updates the
+ message list more precisely and reads the message flags (thanks!).
+ * src/textview.c: textview_show_header(): made X-Newsreader field
+ be emphasized too.
+ * src/summaryview.c: summary_show(): made it flush events when
+ displaying summary.
+
+2001-01-15
+
+ * src/summaryview.c: applied the patch from Alfons that enabled
+ the horizontal scrollbar of summary view (thanks!).
+
+2001-01-13
+
+ * src/compose.c: compose_cb(): fixed a bug that didn't open the
+ composition window right after launching the program.
+ * src/setup.c: scan_tree_func(): fixed a bug that caused
+ segmentation fault.
+
+2001-01-13
+
+ * version 0.4.52
+
+ * src/textview.c: textview_set_font(): fixed a bug that caused
+ segmentation fault if the mode of the text widget was changed
+ between multibyte and singlebyte while the region was selected
+ (GTK+ bug?).
+
+2001-01-11
+
+ * src/mainwindow.c
+ src/summaryview.c: made it unable to delete or move messages when
+ in a news folder.
+ * src/prefs_common.c
+ src/news.c: added the option for maximum news article number.
+
+2001-01-10
+
+ * src/compose.c: compose_send(): changed the location of temporary
+ file. Made it use the default account if all of tried account
+ aren't mail one, and made it show alert dialog and abort when even
+ that failed.
+ * src/prefs_account.c: prefs_account_get_new_id(): made it preserve
+ last id number.
+ prefs_account_open(): made it fill in personal information
+ according to the default account when creating a new account.
+ * sylpheed.spec.in: added to autogenerate sylpheed.spec with the
+ proper version number (thanks to BONAIM).
+ * configure.in
+ Makefile.am: added entries for sylpheed.spec.in.
+
+2001-01-09
+
+ * src/compose.[ch]: modified so that it can change account
+ correctly.
+ * src/send.[ch]: modified so that it doesn't see cur_account.
+ * src/prefs_account.c: modified so that news setting doesn't
+ show SMTP server entry.
+
+2001-01-08
+
+ * src/folderview.c: fixed a bug that didn't sort special folders
+ correctly when a new folder is created or renamed.
+
+2001-01-07
+
+ * src/compose.[ch]: enabled to select account at composing window.
+ * src/folderview.c: made it display unread number next to folder
+ name.
+ * src/prefs_common.[ch]: added the option for unread number display.
+
+2001-01-06
+
+ * src/compose.[ch]: integrated news posting patch from DINH V. Ho`
+ and made many modifications (thanks!).
+ compose_write_headers(): made the spaces in newsgroups removed.
+ Supported Followup-To.
+ compose_destroy(): got the objects removed properly.
+ * src/news.c: merged news_post_to_group() and news_post() since
+ they doesn't have to do multiple posting.
+ * src/import.c: import_destsel_cb(): fixed a bug that failed to
+ import into the selected folder.
+ * src/prefs_account.c: modified the interfaces.
+
+2001-01-05
+
+ * src/codeconv.[ch]
+ prefs_common.c: changed "SHIFT-JIS" to "Shift_JIS" since the
+ string is registerd to IANA.
+ * src/nntp.[ch]: added nntp_post().
+ * src/news.[ch]: added news_post() and news_post_to_group().
+
+2001-01-04
+
+ * src/account.c: account_edit_open()
+ src/mainwindow.c: new_account_cb(): made it unable to edit
+ accounts if some composing windows are open.
+
+2001-01-03
+
+ * src/folder.[ch]: added folder_set_name().
+ * src/account.c: made a folder name of IMAP4/NNTP become the same
+ as the name of account.
+
+2001-01-02
+
+ * src/summaryview.c: summary_filter_func(): fixed a bug that failed
+ to filter messages.
+
+2001-01-02
+
+ * version 0.4.51
+
+ * src/mbox.c: fixed a bug that didn't incorporate spool file
+ correctly. Modified so that it recognizes From_ line as separator
+ of messages even if the previous line isn't empty line.
+ * src/send.c: send_message_queue()
+ src/procmsg.c: procmsg_send_queue(): Fixed a bug that printed
+ warning when it tried to delete a sent message.
+
+2001-01-01
+
+ * version 0.4.50
+
+ * src/folder.[ch]
+ src/news.[ch]: modified so that it actually gets news articles.
+ * src/utils.[ch]: added make_dir_hier() that creates directory
+ hierarchy.
+ * src/folder.c:
+ folder_item_get_cache_file(), folder_item_get_mark_file():
+ made it creates cache directory if it doesn't exist.
+ folder_add(): made it insert the added folder into the correct
+ position.
+ * src/imap.[ch]: modified so that it suits the new folder
+ architecture. Fixed a bug that caused segmentation fault
+ if authentication failed at imap_auth().
+ * src/folderview.c: implemented IMAP4 folder handling routines.
+
+2000-12-31
+
+ * src/prefs_account.[ch]: added account ID and nntp_server
+ to PrefsAccount. And added the interface for NNTP server.
+ * src/folderview.c: modified news folder handling routines.
+ * src/folder.[ch]: removed cache_dir from RemoteFolder, and
+ modified folder_item_get_path().
+
+2000-12-29
+
+ * src/folder.[ch]: added create_folder(), rename_folder(),
+ remove_folder() to Folder class.
+ * src/mh.[ch]: added mh_create_folder(), mh_rename_folder(), and
+ mh_remove_folder().
+ Implemented mh_create_tree() that creates MH directory tree.
+ mh_rename_folder(): modified so that the paths of sub folders
+ are set properly.
+ * src/folderview.c: modified folderview_new_folder_cb(),
+ folderview_rename_folder_cb(), and folderview_delete_folder_cb()
+ so that they work properly.
+ Added folderview_remove_mailbox_cb() and the menu entry that
+ remove mailbox from folder tree.
+ * src/setup.[ch]: added for initial setup.
+ * src/alertpanel.c: modified the appearance of the dialog.
+ * src/compose.c: fixed compose_save_to_outbox() and
+ compose_queue() so that it sets flags correctly.
+
+2000-12-28
+
+ * src/mainwindow.c: modified the strings of toolbar labels.
+
+2000-12-27
+
+ * src/gtkutils.[ch]: added gtkut_ctree_node_move_if_on_the_edge().
+ * src/summaryview.c: summary_display_msg(): made it scroll the
+ list if the message of the edge of that is displayed.
+
+2000-12-25
+
+ * src/folder.[ch]
+ src/mh.[ch]: added functions for moving messages.
+ * src/procmsg.[ch]: moved procmsg_move_messages_with_dest()
+ to folder.c and mh.c. Added procmsg_to_folder_hash_table().
+
+2000-12-24
+
+ * src/utils.[ch]: added get_tmp_file().
+ * src/pop.c
+ src/inc.c
+ src/folder.c: fixed a bug that failed to drop messages.
+ * src/mh.c: mh_scan_folder(): made it check new, unread, and total
+ number of the folder.
+
+2000-12-23
+
+ * src/folderview.c: added special folder setting routine.
+ * src/folder.[ch]: added a method is_msg_changed().
+ Implemented folder_find_item_from_path().
+ * src/summaryview.c: fixed some bugs that wrongly freed FolderItem's.
+ * autogen.sh: fixed so that the configure can take arguments.
+
+2000-12-22
+
+ * src/main.c
+ src/mainwindow.[ch]: added main_window_new_mailbox() that asks
+ the path of mailbox and create the one.
+ * src/folderview.c: made the folder tree and selected folder
+ expanded.
+
+2000-12-21
+
+ * src/mh.[ch]
+ src/folder.c: implemented mh_scan_tree() that scans the folder
+ recursively and create the tree.
+
+2000-12-19
+
+ * src/compose.c
+ src/defs.h
+ src/filter.[ch]
+ src/folder.[ch]
+ src/foldersel.[ch]
+ src/folderview.[ch]
+ src/imap.[ch]
+ src/import.c
+ src/inc.c
+ src/main.[ch]
+ src/mainwindow.c
+ src/mbox.[ch]
+ src/mh.[ch]
+ src/news.[ch]
+ src/prefs_common.c
+ src/procmsg.[ch]
+ src/summaryview.[ch]
+ src/xml.[ch]
+ src/Makefile.am: merged the development tree into the cvs tree.
+ Some functions are not unimplemented yet.
+
+2000-12-18
+
+ * version 0.4.9
+
+2000-12-11
+
+ * src/xml.[ch]: supported omitted tag (<tag />).
+ * src/procmsg.c: procmsg_msg_exist(): fixed a memory leak bug.
+ * src/imap.c: imap_parse_atom(): fixed a bug that caused
+ segmentation fault if the subject was empty (thanks to Tsutsui).
+ * src/folder.[ch]: updated.
+
+2000-12-10
+
+ * src/xml.[ch]: added xml_parse_file() that parses the whole XML
+ file specified and returns the tree.
+
+2000-12-09
+
+ * po/pt_BR.po: fixed some typos that caused segmentation fault.
+
+2000-12-07
+
+ * version 0.4.8
+
+ * src/session.h: added.
+ * src/folder.[ch]: updated.
+ * src/compose.c: compose_write_to_file()
+ src/codeconv.c: conv_get_outgoing_charset_str(): fixed a bug
+ that put a garbage to charset if the outgoing character set was
+ specified and non-ascii characters were used in subject.
+
+2000-12-04
+
+ * src/statusbar.c: statusbar_puts(): fixed a bug that locked the
+ progress if the status bar was hidden.
+
+2000-12-03
+
+ * src/folder.[ch]: added for the more object-oriented folder
+ management.
+
+2000-12-02
+
+ * version 0.4.7
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: made the state of status bar get preserved.
+ * src/compose.c: compose_insert_sig(): modified so that it doesn't
+ put a separator if a signature file doesn't exist.
+ * src/prefs_account.[ch]
+ src/inc.c: added the option that toggles whether to receive
+ messages when getting from all accounts.
+ * README
+ README.jp: updated the description and added some usages.
+
+2000-12-01
+
+ * src/Makefile.am
+ src/gtkshruler.[ch]
+ src/compose.[ch]: applied the patches from Alfons Hoogervorst
+ that makes the ruler of composition window graphical (thanks!).
+
+2000-11-27
+
+ * src/codeconv.c
+ src/mainwindow.c
+ src/prefs_common.c: replaced CS_WINDOWS_1251 with CS_CP1251.
+
+2000-11-27
+
+ * version 0.4.6
+
+ * src/compose.c: turned the color of quoted messages black again.
+
+2000-11-26
+
+ * src/about.c: added a clickable URI to the Sylpheed home page,
+ and a list of compiled-in features.
+ * src/compose.c: made the color of quoted messages blue.
+ * src/summaryview.c: added `Show all header' to the context menu.
+ * src/prefs_common.c: removed the threading option from the dialog.
+ * src/compose.c: fixed a bug that didn't parse the quotation format
+ correctly.
+
+2000-11-25
+
+ * src/compose.c: compose_set_ext_editor_sensitive(): modified so
+ that it toggles linewrap menu item and tool button.
+ * src/prefs_common.c: modified the default of the signature
+ separator.
+ * src/compose.[ch]: added ruler to the compose window.
+ * src/prefs_common.[ch]: added a member for the state of ruler
+ display.
+
+2000-11-24
+
+ * src/headerview.[ch]: added the destroy function.
+ * src/messageview.c: messageview_destroy(): fixed a memory leak
+ bug that didn't freed the HeaderView object.
+ * src/prefs.c: prefs_write_open(): fixed a memory leak bug.
+ * src/xml.c: xml_close_file(): fixed a memory leak bug (thanks
+ to Alfons Hoogervorst for the above three memory leak bug fixes).
+
+2000-11-23
+
+ * version 0.4.5
+
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: modified some descriptions.
+
+2000-11-22
+
+ * src/compose.c: implemented line-wrapping functions.
+ * src/prefs_common.[ch]: added the settings for line-wrapping.
+ * src/codeconv.[ch]: added Windows-1251 to the codesets.
+ conv_jistoeuc(): fixed a bug that caused segmentation fault
+ when some half-width kana characters appeared.
+ * src/summaryview.c: summary_select_all(): made it show message
+ on the status bar if the number of messages is large.
+
+2000-11-18
+
+ * src/compose.c: compose_reply(), compose_quote_parse_fmt():
+ modified so that it parses the quotation mark too.
+ Added %I that means the initial of sender to the format.
+ * src/codeconv.[ch]: added GB2312 and Big5 to the codesets.
+ Fixed a bug that set the wrong outgoing codeset.
+ * src/mainwindow.c
+ src/prefs_common.c: modified the menu item of Chinese codeset.
+
+2000-11-17
+
+ * src/codeconv.[ch]
+ src/prefs_common.[ch]: modified so that outgoing charset is
+ saved as a string, not a number.
+
+2000-11-16
+
+ * src/textview.c: textview_set_font(): changed the scheme of
+ selecting between font and fontset. And changed the default
+ font of ISO-8859-1.
+ * src/headerview.c: headerview_show_xface(): made it ignore
+ invalid X-Face.
+ * src/codeconv.c: conv_codeset_strdup(), conv_get_code_conv_func():
+ modified so that it consider the source codeset as ISO-2022-JP if
+ it is NULL and the current locale is Japanese.
+
+2000-11-14
+
+ * src/textview.c: textview_destroy(): fixed a bug that caused
+ segmentation fault if textview->msgfont is NULL (thanks to
+ Hiramatu).
+ * src/main.c
+ src/defs.h: applied the patch from Yanase that enables to
+ save the shortcuts of the menus (thanks!).
+
+2000-11-11
+
+ * src/mainwindow.[ch]: added main_window_set_menu_sensitive() that
+ toggles the sensitivity of menu items.
+ * src/summaryview.c: renamed summary_set_popup_sensitive() to
+ summary_set_menu_sensitive(), and made it set the sensitivity of
+ the main menu.
+
+2000-11-09
+
+ * src/textview.c: textview_init(): fixed a bug that didn't disable
+ the theme engine of GtkText (thanks to Hiramatu).
+ * src/compose.c: compose_quote_parse_fmt(): added %n and %N that
+ means the full name of sender and the first name.
+ * manual/ja/*.??ml: updated to the latest version.
+
+2000-11-07
+
+ * version 0.4.4
+
+ * src/defs.h: separated the definitions from main.h and applied the
+ patch from TOGAWA that sets DEFAULT_SPOOL_PATH and MAXPATHLEN
+ from the system headers (thanks!).
+ * src/codeconv.c: conv_get_current_charset(): fixes for lt_LT and
+ UTF-8 locale.
+ * src/textview.c: textview_set_font(): modified so that it sets
+ the correct font when the locale is multi-byte.
+ textview_destroy(): added proper codes for destruction.
+ textview_show_header(): fixed the coloration of X-Mailer.
+
+2000-11-06
+
+ * src/textview.[ch]: made TextView have single-byte and multi-byte
+ GtkText, and switch between them according to the given codeset.
+ * src/compose.c: compose_create(): modified the font setting
+ routine.
+
+2000-11-02
+
+ * src/textview.[ch]: moved the message font variable into TextView.
+ textview_set_font(): modified so that it uses gdk_font_load()
+ if the given codeset is US-ASCII or ISO-8859-*.
+
+2000-11-01
+
+ * src/codeconv.c
+ src/procmime.c
+ src/prefs_common.c
+ src/textview.c
+ src/compose.c: workaround for the 8bit code issue (used
+ gdk_font_load() instead of gdk_fontset_load() when the locale is
+ C, or not set).
+
+2000-11-01
+
+ * version 0.4.3
+
+ * src/compose.[ch]: added `Draft' tool button.
+ * src/imap.c: imap_parse_envelope(): fixed a parsing bug.
+ * README, README.jp: added the explanation of the locale setting.
+
+2000-10-31
+
+ * src/compose.c: made it overwrite the previous draft message when
+ reedited the draft and saved it again.
+ * src/procmsg.[ch]: added procmsg_msg_exist() that examine whether
+ the message really exists.
+ * src/folderview.[ch]: added folderview_scan_folder_a() and
+ folderview_scan_folder_foreach_a() that scan the specified
+ folders for each folderviews.
+ * src/mainwindow.[ch]: removed main_window_scan_folder() and
+ main_window_scan_folder_all().
+ Added `Reedit' to the menu.
+ * src/import.[ch]: removed MainWindow from the argument of
+ import_mbox().
+ * src/summaryview.c: removed the unnecessary items from the popup
+ menu. Changed summary_reedit_cb() to summary_reedit(), and made
+ it public.
+
+2000-10-30
+
+ * src/compose.h: added a member msginfo to Compose.
+ * src/procmsg.[ch]: added procmsg_msginfo_copy() that duplicates
+ the MsgInfo object.
+
+2000-10-25
+
+ * src/summaryview.c: made the the popup menu change the sensitivity
+ according to the context. Fixed a bug that showed the `clean trash'
+ dialog repeatedly if `D' key was pressed when the focus was on the
+ summary view.
+ * src/pixmaps/unread.xpm: changed the color of unread mark to blue.
+
+2000-10-22
+
+ * src/main.c: fixed g_thread initialization.
+
+2000-10-21
+
+ * src/codeconv.c: added pt_BR to locale_table.
+ * src/prefs_common.c: prefs_send_create(): added `US-ASCII',
+ `ISO-8859-1', and Japanese codeset to the option menu of outgoing
+ codeset when not using libjconv.
+ * src/compose.c: fixed the bug on saving draft again.
+
+2000-10-19
+
+ * src/compose.c: compose_write_headers(): fixed a bug that failed
+ to write headers if To: was empty when saving draft.
+
+2000-10-18
+
+ * src/procmime.[ch]
+ src/compose.c
+ src/headerwindow.[ch]
+ src/summaryview.c
+ src/messageview.[ch]
+ src/mimeview.c
+ src/textview.c
+ src/procmsg.[ch]
+ src/procheader.[ch]: modified so that they can handle queue folder
+ properly.
+ * src/compose.[ch]
+ src/summaryview.c: implemented draft-reediting function.
+ * src/mainwindow.c
+ src/summaryview.c
+ src/mimeview.c: replaced *(GtkWidget **) with the macro
+ GTK_WIDGET_PTR().
+
+2000-10-17
+
+ * src/procmsg.[ch]: procmsg_msginfo_free(): fixed a memory leak bug.
+ Added MSG_QUEUED and MSG_DRAFT to MsgFlags, and made it set them
+ if the folder is QUEUE_DIR or DRAFT_DIR.
+
+2000-10-14
+
+ * version 0.4.2
+
+ * src/headerview.c
+ src/messageview.c: modified the border of the headerview.
+ * src/gtkutils.h: added the macro GTK_WIDGET_PTR() that casts
+ an Sylpheed object to GtkWidget.
+ * src/utils.c: remove_return(), remove_space(): fixed a bug that
+ possibly caused segmentation fault.
+ * src/compose.[ch]
+ src/mainwindow.c
+ src/summaryview.c: implemented `forward as an attachment'.
+ * src/utils.[ch]: open_uri(): brought on URI opening function from
+ textview.c and manual.c.
+
+2000-10-13
+
+ * src/mainwindow.c
+ src/summaryview.c
+ src/compose.[ch]
+ src/prefs_common.[ch]: removed `Reply with quote', and added
+ `Reply to all', and added the option that decides whether to
+ quote message on replying.
+
+2000-10-12
+
+ * src/folderview.c: modified so that it uses gtkut_wait_for_draw()
+ instead of GTK_EVENTS_FLUSH() for statusbar redraw.
+ * src/codeconv.[ch]
+ src/mainwindow.c
+ src/prefs_common.c: added Baltic (ISO-8859-4,13) to the code sets.
+ * src/compose.c: compose_send(): modified so that it shows error
+ dialog when failed to send a message.
+
+2000-10-11
+
+ * src/account.c: account_edit_close(): fixed a bug that didn't set
+ current account when creating an account for the first time.
+ * configure.in: added es to ALL_LINGUAS.
+
+2000-10-10
+
+ * src/codeconv.c: conv_codeset_strdup(): made it use libkcc if
+ possible.
+ conv_get_code_conv_func(): modified so that it doesn't convert
+ codeset if it is unknown.
+ * src/folderview.c: folderview_update_msg_num(): modified style
+ changing routine.
+
+2000-10-09
+
+ * src/codeconv.c: conv_codeset_strdup(): modified so that it sets
+ codesets automatically if the arguments are NULL.
+ * src/textview.c: textview_write_line(): made it output warning
+ message on the text view if conversion failed.
+
+2000-10-06
+
+ * README, README.jp: modified the author of the manual.
+
+2000-10-05
+
+ * src/headerview.[ch]
+ src/messageview.[ch]: modified so that it uses GtkLabel widget
+ instead of GtkText.
+ * src/codeconv.c: conv_unmime_header(): modified so that it deletes
+ unreadable codes if the current locale is EUC-JP and libjconv is
+ used.
+
+2000-10-04
+
+ * src/procmime.[ch]
+ src/messageview.c
+ src/mimeview.c
+ src/textview.c: modified so that it parses MIME message more
+ preferably.
+ * src/imap.c: imap_parse_address(): fixed a bug.
+
+2000-10-03
+
+ * src/procmsg.[ch]: added procmsg_get_message_file_path().
+ * src/recv.c: recv_bytes_write(): added CR+LF -> LF conversion
+ routine.
+ * src/imap.[ch]: changed the name of the member `group' in
+ IMAPSession to `mbox'.
+ imap_gen_send(): modified so that it doesn't output the password
+ to the log.
+ Modified session destroying routine.
+ * src/folderview.c: folderview_write_cache(): made it preserve
+ the IMAP folder list.
+ * src/procmime.c: procmime_scan_multipart_message(): fixed a bug
+ that showed boundary at the end of an attached RFC822 part.
+ * src/prefs_common.c: changed the default of toolbar style to
+ both icon and text.
+
+2000-10-02
+
+ * src/imap.c: imap_get_uncached_messages(): modified so that it
+ doesn't get the cached envelopes.
+ imap_session_get_message_info(): made it read only the cache
+ if the session is not established.
+ * src/procmsg.c: procmsg_set_flags(): supported IMAP folder.
+ * src/news.c: news_get_article_info(): made it read only the cache
+ if the session is not established.
+
+2000-10-01
+
+ * src/textview.c: textview_write_line(): fixed a memory leak bug.
+ * src/folderview.[ch]: made it create IMAP4 folders from the
+ account information.
+ * src/imap.[ch]: imap_session_get(): modified so that it creates
+ IMAP4 session from the account information.
+
+2000-09-30
+
+ * src/imap.[ch]: added for IMAP4 support.
+ * src/summaryview.[ch]
+ src/procmsg.c
+ src/recv.[ch]: modified for IMAP4 support.
+ * src/folderview.c: more IMAP4 implementation.
+ * src/procmsg.[ch]: added procmsg_get_message_file() that retrieves
+ the specified message and return the file name.
+ * src/gtkutils.c: gtkut_widget_wait_for_draw(): fixed a bug that
+ locked up the process if the given widget was invisible.
+
+2000-09-28
+
+ * src/folderview.[ch]: added IMAP4-related code.
+
+2000-09-28
+
+ * version 0.4.1
+
+ * src/main.h: added IMAP_CACHE_DIR.
+ * src/utils.[ch]: added get_imap_cache_dir().
+ * src/procmsg.h: added M_IMAP to MsgType, and MSG_IMAP to MsgFlags.
+ Added macro MSG_IS_IMAP().
+ * src/codeconv.c: added `#include <locale.h>' for setlocale().
+ * sylpheed.spec: fixed %files section.
+
+2000-09-27
+
+ * version 0.4.0
+
+ * src/codeconv.c: conv_get_current_charset(): made it compare
+ string with strncasecmp().
+ * src/compose.c: comopse_reply_parse_header(): workaround for
+ the malformed References: header generated by OE5 :(
+
+2000-09-26
+
+ * src/prefs_common.c
+ src/prefs_account.c: modified the layout of the widgets.
+
+2000-09-26
+
+ * version 0.3.99
+
+ * src/*.[ch]: added copyright notice to the top of the source files.
+ * src/compose.c: compose_write_attach(): modified filename encode
+ routine.
+
+2000-09-25
+
+ * src/mainwindow.c: fixed the menu entry of manual.
+ * src/compose.c
+ src/codeconv.[ch]: moved compose_encode_header() into codeconv.c,
+ and applied the libjconv patch.
+ * src/utils.c: strdup_mbstowcs(), strdup_wcstombs(): used g_realloc()
+ to reduce the alloc'd memory to the optimal size.
+ * src/prefs_common.[ch]: added outgoing codeset option menu.
+ * src/compose.c: compose_send(): added exclusive lock to prevent
+ multiple-sending.
+ * configure.in: made '--enable-ipv6=no' the default.
+ * src/compose.c: compose_write_attach(): made it encode the name
+ of the attached file.
+ * src/procmsg.c: procmsg_get_last_message_number(): fixed a bug that
+ didn't check the type of file.
+ procmsg_move_messages_with_dest(): fixed a bug that failed to
+ move message if a directory that had the same name existed.
+ * src/utils.c: is_ascii_str(): modified so that '\t', ' ', '\r', '\n'
+ are included as ASCII characters.
+
+2000-09-24
+
+ * src/compose.c
+ src/procmime.[ch]: modified so that it actually works when using
+ libjconv :)
+ * src/codeconv.[ch]: added conv_codeset_strdup() that converts
+ the codeset of string according to the codeset specified in
+ arguments.
+ * src/utils.[ch]: added is_ascii_str() that determines whether the
+ string is 7bit-ASCII or not.
+ * src/procmime.[ch]
+ src/codeconv.[ch]: moved the character set related functions
+ into codeconv.c.
+ * merged the patch and the manual written by BONAIM (thanks!).
+
+2000-09-23
+
+ * configure.in
+ src/compose.c
+ src/gtkutils.c
+ src/mainwindow.c
+ src/procmime.[ch]
+ src/textview.c
+ src/unmime.[ch]: applied the patch from Higuchi that utilizes
+ libjconv and enables to handle many locales, including UTF-8
+ (Unicode) (thanks!).
+ * src/account.c: modified so that the account isn't changed when
+ another account is selected on account edit dialog.
+
+2000-09-20
+
+ * src/prefs_common.[ch]
+ src/textview.c: added an option that specifies whether to display
+ short headers on message view.
+ * src/codeconv.[ch]: added function conv_unmime_header() that
+ decodes MIME-encoded header and converts the character set.
+ And added conv_unreadable_latin(), and modified conv_latintodisp().
+ * src/messageview.[ch]: made the window get closed when escape key
+ is pressed.
+
+2000-09-17
+
+ * src/imageview.c: fixed a bug that caused segmentation fault if
+ message view was in new window.
+ * src/prefs_common.c: added `xemacs %s' to the external editor
+ command line list.
+
+2000-09-16
+
+ * version 0.3.29
+
+ * src/summaryview.c: enabled to open a new message window with
+ double-clicking.
+ * src/prefs_common.[ch]
+ src/messageview.c: made it preserve the window size of message
+ window.
+ * src/prefs_account.c: added `None (local)' to the option menu of
+ protocol.
+
+2000-09-15
+
+ * Makefile.am: added autogen.sh to EXTRA_DIST.
+
+2000-09-09
+
+ * src/prefs_common.c: applied the patch from Paul Rolland that
+ enables font selection dialog (thanks!).
+ * src/compose.[ch]
+ src/utils.[ch]: moved tzoffset() and compose_get_date() of
+ compose.[ch] into utils.[ch].
+ * src/main.[ch]: renamed the name of filter file to `filterrc'.
+
+2000-09-06
+
+ * src/compose.[ch]
+ src/utils.[ch]: modified address parsing routine so that it
+ parses quotes correctly.
+ * src/textview.c: textview_show_part(): modified so that it shows
+ the simplified headers if the part is text/plain.
+
+2000-09-03
+
+ * src/messageview.[ch]
+ src/summaryview.[ch]
+ src/mainwindow.c: enabled to open a message in new window.
+ * src/messageview.[ch]
+ src/mimeview.[ch]
+ src/textview.[ch]
+ src/imageview.[ch]: added destroy function, and modified the
+ key handling routines.
+
+2000-09-02
+
+ * src/socket.c: sock_connect_by_getaddrinfo(): fixed a bug that
+ caused segmentation fault (thanks to KUROSAWA).
+ * src/alertpanel.c: modified so that the focused button is
+ selectable.
+ * src/account.c
+ src/compose.c
+ src/folderview.c: modified so that the order of the buttons of
+ alert panel will be `Yes', `No'.
+
+2000-09-01
+
+ * src/utils.[ch]: added execute_async() and execute_command_line()
+ that execute command line using execvp().
+ * src/textview.c
+ src/mimeview.c
+ src/procmsg.c: replaced system() with execute_command_line()
+ for security.
+ * src/procmsg.c: turn back to system().
+ * src/utils.c: modified execute_command_line().
+
+2000-08-31
+
+ * src/mainwindow.c: main_window_get_size(): modified so that it
+ doesn't update the height of SummaryView if MessageView is
+ toggled off.
+ * src/compose.[ch]: applied the patch from NAKAGAWA that fixes some
+ probrems of external editor handling (thanks!).
+ * src/uuencode.[ch]
+ src/procmime.[ch]: applied the patch from Hiramatu that make it
+ supports Content-Transfer-Encoding: x-uuencode (thanks!).
+
+2000-08-30
+
+ * src/compose.[ch]
+ src/prefs_common.[ch]: implemented the external editor faculty.
+ * src/compose.c: compose_attach_property(): fixed some bugs on
+ changing the property of attached file.
+ * src/compose.c: fixed some bugs of external editor functions.
+
+2000-08-29
+
+ * version 0.3.28
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]
+ src/summaryview.c: applied the patch from Paul Rolland that
+ restores the size of widgets when restarting (thanks!).
+ * src/folderview.c
+ src/prefs_common.[ch]
+ src/summaryview.c: applied the patch from Paul Rolland that saves
+ the width of CTree columns (thanks!).
+
+2000-08-27
+
+ * src/headerview.c: modified the height of HeaderView.
+ * src/textview.c: textview_show_part(): made it process the message
+ as normal text if it is single-part RFC822 message.
+ * src/folderview.c
+ src/summaryview.c: some changes around the key handling.
+ * src/prefs_common.[ch]: substituted the word `assort' with `filter'.
+
+2000-08-26
+
+ * src/codeconv.[ch]: added conv_latintodisp() for ISO-8859-1 support.
+ * src/procheader.c: procheader_get_one_field(): fixed a bug that
+ caused segmentation fault if the first line of the file is space
+ or tab (thanks to Hiramatu).
+ * src/mimeview.c: mimeview_drag_data_get(): modified so that the
+ filename doesn't include G_DIR_SEPARATOR (thanks to Hiramatu).
+ * src/prefs_account.c
+ src/prefs_common.c: modified the dialog size.
+ * src/prefs.c: made the dialog window growable.
+
+2000-08-25
+
+ * version 0.3.27
+
+ * configure.in: removed unnecessary AC_CHECK_FUNC(gettext) that
+ caused the failure of the detection of libintl.
+ * src/filter.[ch]
+ src/prefs_common.c: implemented `not contain', and modified for
+ future enhancement.
+ * src/imageview.c: changed alertpanel_error() to g_warning() so that
+ it doesn't grab mouse events.
+ * src/compose.[ch]: added compose_list that holds the list of
+ Compose objects, and added the function compose_get_compose_list().
+ * src/main.c
+ src/mainwindow.c
+ src/summaryview.c: made it confirm if composing message exists.
+
+2000-08-23
+
+ * src/compose.c: compose_reply_set_entry(): fixed a bug that caused
+ segmentation fault when trying to reply the message in the queue
+ folder (thanks to Kotobuki).
+ compose_attach_property(): modified the property dialog routine
+ so that it can handle input error.
+ * src/mimeview.c: applied the patch from Hiramatu that enables
+ the drag 'n drop from MimeView (thanks!).
+ * src/headerview.[ch]
+ src/procheader.c
+ src/procmsg.h: applied the patches for X-Face support from
+ HIROSHIMA (thanks!).
+
+2000-08-22
+
+ * src/compose.c: compose_attach_property(): modified so that the
+ property dialog can actually change the property of attached file.
+
+2000-08-21
+
+ * configure.in
+ src/Makefile.am: updated for gdk_imlib.
+ * added AUTHORS and NEWS.
+ * configure.in
+ acconfig.h
+ src/Makefile.am: modified so that configure auto-detects gdk-pixbuf
+ and gdk_imlib library. And fixed a bug on IPv6 detecting.
+ * src/imageview.c: supported gdk-pixbuf.
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: added the mention about built-in image view.
+ * configure.in: modified so that configure can disable gdk-pixbuf
+ or/and gdk_imlib library.
+
+2000-08-20
+
+ * src/imageview.[ch]
+ src/main.c
+ src/messageview.[ch]
+ src/mimeview.[ch]: applied the patches from HIROSHIMA that enables
+ to display image (thanks!).
+
+2000-08-19
+
+ * version 0.3.26
+
+ * src/summaryview.c: summary_assort_func(): modified to avoid
+ `not receive' setting.
+
+2000-08-18
+
+ * src/filesel.c: applied the patch from HIROSHIMA that makes it
+ remember previous directory when opening the dialog (thanks!).
+ * src/summaryview.[ch]: added a function summary_redisplay_msg().
+ * src/mainwindow.c: set_charset_cb(): made it redisplay the message
+ that is currently shown when the character set is changed.
+ * src/inc.c
+ src/pop.c
+ src/prefs_common.c
+ src/filter.h: applied the patch from Tanaka that enables not to
+ receive specified messages according to the sorting rule (thanks!).
+
+2000-08-15
+
+ * src/procmsg.[ch]: added MSG_MIME to the type MsgFlags. And modified
+ so that it handles MSG_MIME flag, and it scans uncached messages
+ when cache reading failed even if it is specified not to scan
+ new messages.
+ * src/procheader.c: procheader_parse(): added the determination of
+ multipart MIME message.
+ * src/main.h: increased CACHE_VERSION.
+ * src/summaryview.[ch]: added the `MIME' column that shows whether
+ a message is multipart or not.
+ * src/prefs_common.[ch]: added the `MIME' column to the setting of
+ displaying item.
+ * added src/pixmaps/clip.xpm.
+ * src/summaryview.c
+ src/procmsg.[ch]: modified so that it prompts the print command
+ before printing.
+
+2000-08-14
+
+ * src/folderview.c: folderview_create()
+ src/summaryview.c: summary_create():
+ src/addressbook.c: addressbook_create(): set the expander style of
+ CTree to GTK_CTREE_EXPANDER_SQUARE.
+ * src/compose.c: modified the interface of property dialog.
+
+2000-08-13
+
+ * src/compose.c: added property dialog for attached file.
+
+2000-08-11
+
+ * src/procmsg.[ch]: added a function procmsg_print_message() that
+ prints the given message.
+ * src/summaryview.c: summary_print(): modified so that it prints
+ all selected messages.
+ * src/folderview.c: folderview_select_node(): fixed a bug that
+ didn't focus on folder tree if inbox was empty when incorporating.
+
+2000-08-10
+
+ * version 0.3.25
+
+ * src/prefs_commmon.[ch]: added `Other' tab and an option for
+ printing. And moved external browser option to there.
+ * src/mainwindow.c
+ src/summayview.[ch]: added print menu and implemented print
+ functions.
+
+2000-08-09
+
+ * src/prefs_account.c: made the default value of smtp_server to
+ NULL.
+ * src/folderview.c: folderview_update_msg_num(): modified so that
+ it doesn't emphasize trash folder even if it has new or unread
+ messages.
+
+2000-08-08
+
+ * src/filesel.c: filesel_select_file(): (perhaps) fixed a bug that
+ caused segmentation fault when file selection dialog was closed
+ and other dialog was open immediately.
+
+2000-08-05
+
+ * src/compose.c: compose_encode_header(): fixed a bug that caused
+ infinite loop if wctomb() failed.
+
+2000-08-04
+
+ * version 0.3.24
+
+ * src/mimeview.c: enabled to open an attached file with double click
+ and popup menu. And cleaned up the code.
+ * src/procmime.[ch]: added a function procmime_get_part() that
+ saves the part of multipart message.
+
+2000-08-03
+
+ * src/main.[ch]
+ src/mimeview.c
+ src/prefs_common.[ch]
+ src/procmime.[ch]
+ src/utils.[ch]: applied a patch that enables to launch attached
+ image, audio, and HTML file (thanks to Hashimoto).
+ * src/filter.c: filter_match_condition(): fixed a bug that caused
+ segmentation fault if the body of specified filter is NULL. And
+ made the filter considered as being matched on that case.
+
+2000-07-30
+
+ * src/summaryview.c:
+ summary_save_as(): fixed a bug that unabled to save news articles.
+ summary_display_msg(): added exclusive lock to prevent it from
+ reading another news article while it is already processing one.
+ * src/gtkutils.[ch]: added gtkut_widget_wait_for_draw() that waits
+ the draw signal to be emitted.
+ * src/mainwindow.c:
+ main_window_cursor_wait()
+ main_window_cursor_normal(): added gdk_flush() to change cursor
+ immediately.
+ * Makefile.am
+ libkcc/Makefile.am: added EXTRA_DIST for `make dist'. And added
+ a target `release' to Makefile.am.
+
+2000-07-28
+
+ * src/socket.c: supported IPv6.
+ * configure.in
+ acconfig.h: added checking for IPv6.
+ * prefs_common.c: changed the default of toolbar_style to icon only.
+
+2000-07-27
+
+ * initial cvs import.
+ * updated README and README.jp.
+
+2000-07-24
+
+ * version 0.3.23
+
+ * src/procmime.[ch]: modified the structure of MimeInfo so that it
+ can be handled as a node of tree.
+ Added procmime_mimeinfo_free_all() that frees all of the MimeInfo
+ recursively.
+ Added procmime_get_text_part() that scans a message and gets a text
+ part for quoting.
+ * src/mimeview.c: divided mimeview_scan_multipart_message() into
+ procmime_scan_multipart_message() and mimeview_set_multipart_tree().
+ * src/compose.c: compose_quote(), compose_forward():
+ made it quote the text part of multipart message properly.
+ Made it preserve the size of Compose window.
+ * src/prefs_common.[ch]: added compose_width and compose_height to
+ the members.
+ * src/textview.c: textview_show_part(): some code cleanups.
+ * src/codeconv.[ch]: added a function conv_get_code_conv_func().
+
+2000-07-20
+
+ * version 0.3.22
+
+ * src/codeconv.[ch]: fixed a bug that showed garbage characters if
+ the return code of the message was CR+LF. And added
+ conv_sjistoeuc().
+ * src/summaryview.c: summary_attract_by_subject(): made it move
+ the current view point to the selected row when executed.
+ * src/textview.c: textview_show_part(): modified the character set
+ determination routine.
+ * src/folderview.c: folderview_update_msg_num(): fixed a bug that
+ caused segmentation fault if boldfont was NULL.
+ * src/compose.c: compose_create(): made it sets itself as the target
+ of addressbook on window creation.
+
+2000-07-19
+
+ * src/compose.c: compose_send(): fixed a bug that didn't save
+ queued message to outbox when failed to send the message (thanks
+ to T. Yamamoto).
+
+2000-07-15
+
+ * src/inc.[ch]: modified so that it changes error message dialog
+ depending on the results.
+
+2000-07-14
+
+ * src/mainwindow.c: main_window_create(): set usize of account
+ button on the status bar to 1 so that it doesn't get expanded
+ more than necessary.
+ * src/account.[ch]: account_foreach(): made it abort the iteration
+ if the function returns nonzero.
+ * src/inc.[ch]
+ src/pop.c: modified so that it shows error message dialog if the
+ message processing is failed.
+
+2000-07-04
+
+ * version 0.3.21
+
+ * src/mainwindow.c: made it popup account selection menu when
+ account tool button or account status bar is pressed.
+ * src/folderview.c
+ src/prefs.c: suppressed the ENOENT perror messages.
+ * src/pop.c: made it fall back on LAST command if UIDL failed.
+
+2000-07-01
+
+ * src/procheader.c: procheader_parse(): fixed a bug that didn't
+ parse References: header correctly (thanks to YAMAGUCHI).
+
+2000-06-29
+
+ * version 0.3.20
+
+ * src/compose.c: compose_reply_set_entry(): fixed a bug that didn't
+ cc'd correctly when replying.
+ * src/mainwindow.c
+ src/summaryview.c: sorted out the main menu and the popup menu.
+
+2000-06-26
+
+ * version 0.3.19
+
+ * src/prefs_account.[ch]
+ src/compose.c: made it be able to set Cc:, Bcc:, and Reply-To:
+ automatically at composing (thanks to NAKAGAWA).
+
+2000-06-25
+
+ * src/prefs_common.[ch]
+ src/mainwindow.c
+ src/main.c: made it selectable whether to ask before cleaning
+ trash at the exit.
+ * src/prefs_common.c: cleaned up the code and the interface a bit.
+ * src/summaryview.c: modified the unthread functions for speeding
+ up.
+
+2000-06-24
+
+ * src/prefs_common.[ch]
+ src/summaryview.c: made it display recipient on the `From' column
+ if the address of the sender is the same as the current account
+ (thanks to NAKAGAWA).
+ * src/utils.[ch]: added a function extract_address() that extracts
+ the address from `From:' header string.
+ * src/mainwindow.c: allsel_cb(): fixed a bug that caused segmentation
+ fault if `Edit/Select all' was selected when the message view was
+ hidden (thanks to Tomita).
+
+2000-06-21
+
+ * src/summaryview.c: modified execution routine so that it only
+ unthreads nodes that are needed to be unthreaded.
+
+2000-06-19
+
+ * src/news.c: news_session_get(): implemented the reconnection on
+ being disconnected.
+ * src/nntp.[ch]: added nntp_mode().
+
+2000-06-18
+
+ * src/mbox.c: fixed a bug that didn't close mbox FILE pointer.
+ And support assortment on processing mbox.
+ * src/inc.c: inc_drop_message(): modified so that it uses hash table
+ to store the last message number of folders.
+ * src/summaryview.c
+ src/addressbook.c: modified the behavior of CTree at right-click.
+ * src/pop.c: pop3_getrange_uidl_recv(): fixed a potential buffer
+ overflow bug (thanks to Nishiyama).
+
+2000-06-17
+
+ * version 0.3.18
+
+ * src/pop.[ch]
+ src/inc.[ch]: implemented management of read message on POP server
+ by UIDL.
+ * src/utils.[ch]: removed (s)list_remove_all() because it can be
+ replaced with g_(s)list_free().
+ * src/summaryview.c: modified the arrangement of menu a bit.
+ * src/summaryview.c: summary_status_show(): made it doesn't display
+ server name but newsgroup.
+ * src/prefs_common.c
+ src/prefs_account.c: adjusted the calculation routine of dialog
+ size.
+
+2000-06-15
+
+ * version 0.3.17
+
+ * src/compose.c: compose_reply_set_entry(): modified so that it
+ cc's to the all addresses on To: and Cc: of the replied message.
+ And swapped the position of Subject: and To: entry.
+
+2000-06-14
+
+ * src/procheader.c: modified so that it can handle headers that
+ aren't separated by space.
+ * src/socket.c: sock_connect(): added a wait after connection to
+ prevent lockup (thanks to NINOMIYA).
+
+2000-06-13
+
+ * src/inc.c:
+ inc_mail()
+ inc_all_account_mail(): fixed a bug that caused segmentation
+ fault if no account exist.
+ * src/mainwindow.[ch]: made receive button unclickable when
+ no account exist.
+ * src/compose.c: compose_queue(): fixed a bug that didn't mark
+ queued message properly.
+ * src/utils.[ch]: separated code conversion functions into
+ src/codeconv.[ch].
+
+2000-06-13
+
+ * version 0.3.16
+
+ * src/mimeview.c: mimeview_save_as()
+ src/summaryview.c: summary_save_as(): made it ask whether to
+ overwrite the existing file.
+
+2000-06-12
+
+ * src/utils.c
+ src/recv.c
+ src/prefs.c
+ src/prefs_common.c
+ src/prefs_account.c
+ src/addressbook.c
+ src/compose.c
+ src/mbox.c: fixed a bug that failed to check write error when
+ disk was full and caused the loss of the file.
+
+2000-06-11
+
+ * src/mainwindow.c: main_window_clean_trash(): made it move focus
+ to folder view when finished.
+ * src/utils.[ch]: added code conversion functions for display.
+ And added strncpy2() that doesn't do zero fill and does
+ null-termination, unlike original strncpy().
+ * src/textview.c: modified so that it changes the code conversion
+ function according to charset. And supported charset=SHIFT_JIS.
+ * src/mainwindow.c
+ src/prefs_common.h
+ src/textview.c: made it possible to force character set of
+ a message.
+ * src/folderview.c: folderview_select_next_unread():
+ made it search unread folder from begin if it isn't found.
+
+2000-06-11
+
+ * version 0.3.15
+
+ * src/mainwindow.c: fixed a probrem again that main window was
+ stretched to the width of the toolbar.
+ * src/mbox.c
+ src/utils.c: is_header_line(): modified so that it recognizes
+ a header which doesn't have a space after colon (thanks to Hotta).
+ * src/filter.c: added `#include <strings.h>'.
+ * src/smtp.c: replaced snprintf() with g_snprintf().
+ * src/Makefile.am: added `-I$(top_srcdir)/intl' to INCLUDES for
+ included gettext.
+ * included sylpheed.spec.
+
+2000-06-10
+
+ * src/prefs_common.[ch]: enabled to set the pixels of line space
+ and decide whether to leave space on head of lines.
+ * src/summaryview.c: modified so that it clears message view
+ when displayed message is removed from the summary view.
+ * src/mimeview.c: fixed a bug that caused infinite loop if
+ terminal boundary of multipart message was not found (thanks to
+ Nishika).
+ * src/folderview.c: folderview_scan_mailbox(): made it ignore
+ dot directory.
+ * src/main.c: made it show warning dialog and exit if the file with
+ the same name already exists when creating directory.
+
+2000-06-09
+
+ * src/textview.c
+ src/prefs_common.[ch]: made it possible to leave space between
+ and on head of lines.
+
+2000-06-07
+
+ * src/compose.c
+ src/procmime.[ch]: made it scan /etc/mime.types and determine
+ the MIME type of the attached file.
+ * src/summaryview.c: made it clear message view if the summary
+ is unselected on the execution, and made it move focus to
+ folder view if the folder becomes empty.
+ * src/mainwindow.c: fixed a probrem that main window was stretched
+ to the width of the toolbar.
+ * src/inc.c: fixed a bug that caused multiple gtk_main() event loop
+ if `Check new mail on startup' was set.
+
+2000-06-06
+
+ * src/compose.c: fixed a probrem that had been unable to insert
+ a file to the current cursor position.
+
+2000-06-06
+
+ * version 0.3.14
+
+ * src/compose.[ch]: added `attach' button to the toolbar. And
+ replaced the icon of `insert' to the new one.
+
+2000-06-05
+
+ * src/mainwindow.[ch]: added `Execute' to the toolbar. And added
+ a function main_window_set_toolbar_sensitive() that sets the
+ sensitivity of the button of the toolbar.
+ * src/compose.c: fixed a bug that output wrong header if
+ a return code was included in the string of the text entry.
+
+2000-06-04
+
+ * src/mainwindow.[ch]: added `Delete' to the toolbar and the menu.
+ And added the same items in popup menu to the main menu.
+ * src/utils.[ch]: added functions for DnD support.
+ * src/compose.c: implemented file attachment and insertion with DnD
+ (thanks to Hiramatu).
+
+2000-06-04
+
+ * version 0.3.13
+
+ * src/summaryview.c: fixed a bug that passed null pointer to
+ is_dir_exist().
+
+2000-06-03
+
+ * src/alertpanel.[ch]: added functions alertpanel_message(),
+ alertpanel_notice(), and alertpanel_error(), and cleaned up
+ the code.
+ * src/folderview.c
+ src/compose.c
+ src/addressbook.c
+ src/summaryview.c
+ src/summary_search.c
+ src/prefs_account.c
+ src/foldersel.c: made them use alertpanel_error(),
+ alertpanel_warning() or alertpanel_notice() for error message
+ dialog.
+ * src/summaryview.[ch]: enable sorting in reversed order.
+ * src/inc.c: made it show error message dialog when failed to
+ connect or authorize.
+ * src/utils.h: added a macro FILE_OP_ERROR() and replaced many
+ perror() with it.
+
+2000-06-03
+
+ * version 0.3.12
+
+ * src/compose.c: fixed a bug that didn't save a message to outbox
+ when queued.
+ * src/send.c: send_message_queue(): fixed a bug that included
+ headers for queueing in the parsed data.
+ * src/mainwindow.c: send_queue_cb(): made it pop statusbar message
+ and update queue folder when finished.
+
+2000-06-02
+
+ * version 0.3.11
+
+ * src/filter.c
+ src/inc.c
+ src/compose.c: suppressed the warning messages.
+ * src/mainwindow.[ch]: added next unread message button and menu
+ items.
+ * src/summaryview.[ch]: added a function summary_select_next_unread()
+ that selects and opens next unread message.
+
+2000-06-01
+
+ * src/prefs_common.[ch]: added a setting to decide whether to open
+ unread message on entering a folder.
+ * src/summaryview.c: made it open the first unread message only if
+ the preference is set.
+ * src/compose.c: fixed a bug that freed the string obtained from
+ GtkEntry.
+
+2000-05-31
+
+ * src/compose.c: added `Send later' to the menu and the toolbar
+ which queues the message to send it later.
+
+2000-05-30
+
+ * src/mainwindow.c: added an interface to resend the queued message.
+ * src/compose.c: made it show alert dialog when a message will be
+ queued.
+
+2000-05-29
+
+ * src/procmsg.[ch]: added function procmsg_send_queue() that calls
+ send_message_queue() for each queued messages.
+
+2000-05-28
+
+ * src/inc.c: inc_drop_message(): modified so that it drops a message
+ to the default inbox folder if destination folder doesn't exist.
+ * src/compose.[ch]: added imput compatible queueing header to the
+ queued message.
+ * src/send.[ch]: added function send_message_queue() that send
+ queued message.
+
+2000-05-27
+
+ * configure.in
+ acconfig.h: made it enabled to decide wheter to use multithread
+ or not on configure.
+ * src/summaryview.c: fixed a bug that made thread when executed
+ despite of the setting (thanks to Hiroshima).
+ * src/socket.[ch]: changed the return value of public
+ sock_connect_*() function to the pointer to SockInfo object.
+ * src/procmime.c: procmime_scan_mime_header():
+ fixed a bug that returned NULL if the scanned part had no header
+ (thanks to shigeri).
+ * src/procmime.[ch]:
+ added function procmime_scan_content_disposition() that parses
+ Content-Disposition header field.
+ * src/mimeview.c: made it uses filename value in Content-Disposition
+ header.
+ * src/pop.c
+ * src/inc.c: modified so that password is prompted if the password
+ on preferences is empty and previous POP3 session has failed on
+ authorization.
+
+2000-05-23
+
+ * src/socket.[ch]: added non-blocking IO mode socket and
+ multithreaded connection support.
+ * src/inc.c: supported multithread connection.
+
+2000-05-22
+
+ * src/folderview.c: made the focus of SummaryView grabbed when
+ a folder is selected only if the messages exist.
+
+2000-05-20
+
+ * version 0.3.10
+
+ * po/ja.po: fixed a bug that head `/' of a menu label was missing
+ and caused segmentation fault when opened Compose window.
+
+2000-05-20
+
+ * version 0.3.9
+
+ * src/utils.c: get_domain_name(): modified so that it uses
+ gethostname().
+ * src/mimeview.c: added key binds for `Save as' and
+ `Display as text'.
+
+2000-05-19
+
+ * src/recv.c: fixed a bug that failed to return error value
+ when fputs() failed and caused the loss of received mails when
+ disk space was not left (thanks to Tajiri).
+ * src/compose.c: supported Reply-To.
+ * src/mimeview.c: improved key operation interface.
+
+2000-05-18
+
+ * src/mimeview.[ch]
+ src/procmime.[ch]
+ src/textview.[ch]: supported nested multipart message and
+ clean up the codes.
+ Supported encapsulated RFC822 message.
+
+2000-05-16
+
+ * src/compose.[ch]: made it free the alloc'd memory for attach
+ information when the compose window is destroyed.
+ Placed the attachment list and the text widget onto the paned
+ widget.
+ Enabled cut/copy/paste/select all on all of the editable widgets.
+ Implemented removal of attached file and popup menu on attachment
+ list.
+ * src/prefs_common.[ch]: added signature separator setting.
+ * src/alertpanel.[ch]: added a function alertpanel_warning().
+
+2000-05-14
+
+ * src/prefs_common.[ch]
+ src/textview.c: made open URI command customizable.
+ * src/compose.[ch]: implemented multipart MIME message composition
+ (attachment of file).
+ * src/textview.c
+ src/compose.c: fixed a bug that didn't turn off the GTK+ theme
+ engine again.
+
+2000-05-13
+
+ * version 0.3.8
+
+ * src/summaryview.c: added key binds for composing message
+ (w, a, A, f). Also added other key binds (y, D, Q).
+ * src/compose.c: made Cc entry take over the Cc of the replied
+ message.
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: replaced pixmap image.
+ * src/procheader.c: procheader_date_get_localtime():
+ changed the single figures of year from four to two.
+
+2000-05-12
+
+ * src/inc.c: made it ask password if it is not specified on account
+ preferences.
+ * src/prefs_account.h: added member tmp_pass to struct PrefsAccount
+ that preserves the temporary password.
+ * src/inputdialog.[ch]: added function input_dialog_with_invisible()
+ that prompts input with the string hidden.
+
+2000-05-11
+
+ * src/compose.c: fixed a bug that didn't turn off the GTK+ theme
+ engine if message font wasn't specified.
+
+2000-05-10
+
+ * version 0.3.7a
+
+ * src/summaryview.c: fixed a bug that stderr was forgotten on
+ fprintf().
+
+2000-05-10
+
+ * version 0.3.7
+
+ * src/pop.c: fixed a problem that if some POP3 commands returned
+ error, the previous operations were all cancelled.
+ * src/compose.c
+ src/textview.c: made workaround to the slow down of GtkText widget
+ when using Pixmap theme or its derivatives.
+
+2000-05-08
+
+ * src/inc.c: fixed a bug that caused X IO error when exec'd
+ nonexistent program.
+
+2000-05-07
+
+ * src/folderview.[ch]: added the member `mtime' to the struct
+ FolderInfo.
+ * src/summaryview.c: made the mtime of the folder checked that is
+ going to open.
+ * src/procmsg.c: added filesystem unchecking mode.
+
+2000-05-05
+
+ * src/textview.[ch]: implemented clickable URI (thanks to BONAIM).
+ And made `X-Mailer:' header emphasized if it contains `Sylpheed'.
+
+2000-05-04
+
+ * src/summaryview.c: summary_write_cache(): permission fix of
+ cache file.
+
+2000-05-04
+
+ * version 0.3.6a
+
+ * src/headerview.c: added headerview_clear() method.
+ * src/messageview.c: fixed a bug that didn't clear HeaderView
+ on messageview_clear().
+
+2000-05-04
+
+ * version 0.3.6
+
+ * src/messageview.c
+ src/textview.c: added *_clear() method.
+ * src/summaryview.c: made it clear MessageView when new folder
+ is open.
+
+2000-05-03
+
+ * src/inc.c: fixed a bug that went to the inbox that was specified
+ by each account when incorporating from all accounts.
+ * src/compose.c: made it confirm whether to discard the message or
+ not when the window will be closed.
+
+2000-05-03
+
+ * version 0.3.5
+
+ * src/pop.[ch]
+ src/inc.[ch]: re-supported APOP authentication.
+ * src/prefs_account.c: fixed a bug that had't saved protocol type.
+ * src/socket.h
+ src/statusbar.h: attached G_GNUC_PRINTF() to printf() like
+ functions.
+ * src/progressdialog.[ch]: changed the name of class from Progress
+ to ProgressDialog.
+
+2000-05-02
+
+ * src/summaryview.c: fixed a bug that caused segmentation fault
+ a news folder was selected without using ja message catalog.
+ * src/utils.h: attached G_GNUC_PRINTF() to printf() like functions.
+ * src/Makefile.am: added `-DG_LOG_DOMAIN=\"Sylpheed\"' to
+ INCLUDES.
+
+2000-05-01
+
+ * src/automaton.[ch]
+ src/inc.[ch]
+ src/pop.[ch]: re-implemented POP3 fetching routines using
+ finite-state automaton model (thanks to Hiramatu).
+ * src/inc.c: fixed a bug that caused unwilled quitting of program
+ when connection to mail server failed. And fixed a memory leak bug.
+ * src/summaryview.c: made the focus move to FolderView when left
+ cursor key is pressed.
+
+2000-04-30
+
+ * src/textview.c: textview_write_line(): modified quotation
+ discerning routine a bit.
+
+2000-04-29
+
+ * version 0.3.4
+
+ * src/procmime.[ch]: moved MIME decorder from src/textview.c to
+ src/procmime.c.
+ * src/mimeview.[ch]: implemented saving of multipart message. And
+ supported MIME encoded file name.
+ * src/summaryview.c: implemented `Save as'.
+
+2000-04-28
+
+ * src/prefs_common.[ch]: implemented an interface for setting the
+ display item of SummaryView.
+ * src/addressbook.c
+ src/account.c: made the column titles of those don't take key
+ focus.
+
+2000-04-26
+
+ * src/textview.c: implemented BASE64 decoding and display.
+
+2000-04-25
+
+ * src/prefs_common.[ch]: added members which decide whether
+ each item of SummaryView is displayed or not.
+ * src/headerwindow.c
+ src/logwindow.c: made those windows closed when escape key is
+ pressed.
+ * src/headerview.c: disused ScrolledWindow.
+ * src/base64.c: from64tobits(): modified so that it recognize '\n'
+ as the last of line as well as '\r'.
+
+2000-04-24
+
+ * src/headerview.c: disabled word wrap and line wrap of the text
+ widget.
+
+2000-04-24
+
+ * version 0.3.3
+
+ * src/prefs_common.c: prefs_assort_create(): added some headers
+ to the default headers for assortment.
+
+2000-04-23
+
+ * src/procmsg.c: fixed a bug that caused segmentation fault if
+ the permission of a message was denied on parsing the header
+ (thanks to wakai@UEC univ.).
+ * src/mimeview.c: made it pass key press event to SummaryView.
+
+2000-04-21
+
+ * src/main.h
+ src/alertpanel.c: modified font specifications so that they match
+ to better fonts.
+ * src/utils.[ch]: added wide-character functions for FreeBSD support.
+ Added the existence check of <wchar.h>.
+ * acconfig.h
+ configure.in: added wint_t and libxpg4 check for FreeBSD support.
+ * src/unmime.c: modified so that it checks the existence of
+ <alloca.h>.
+ Above three are a contribution from Sasaki. Thanks!
+
+2000-04-18
+
+ * src/main.h: decreased default height of window.
+
+2000-04-17
+
+ * src/procmime.c: fixed a bug that eliminated the parenthesis in
+ attribute value that was double-quoted.
+
+2000-04-15
+
+ * version 0.3.2
+
+ * src/mimeview: implemented multipart message parser and display.
+ * src/procmime.c: procmime_scan_content_type():
+ supported multiple elements.
+ * src/textview.c: supported multipart message and clean up the code.
+
+2000-04-14
+
+ * src/summaryview.c: added size column and sorting by size.
+ * src/mainwindow.c: added `Sort by size' to sort menu.
+ * src/procmime.c: fixed a bug that caused buffer overrun and
+ segmentation fault.
+ * src/procmime.c: generalized Content-Type parsing.
+
+2000-04-13
+
+ * version 0.3.1
+
+ * src/textview.c: supported MIME headers and
+ Content-Transfer-Encoding: quoted-printable.
+
+2000-04-12
+
+ * src/messageview.[ch]
+ src/textview.[ch]: separated MessageView into two classes.
+ * src/procmime.[ch]: added for MIME message handling.
+
+2000-04-11
+
+ * src/mimeview.[ch]: added for MIME message handling.
+ * configure.in: added wctype.h and wchar.h existence check.
+
+2000-04-10
+
+ * src/procmsg.[ch]
+ src/procheader.[ch]: some code cleanups.
+ * src/messageview.[ch]: integrated HeaderView.
+
+2000-04-09
+
+ * version 0.3.0
+
+2000-04-08
+
+ * src/addressbook.c: Made the tree sorted when folder/group is
+ added or edited.
+ * src/xml.c: xml_compare_tag(): fixed a bug that caused segmentation
+ fault if the current tag was empty.
+ * src/mainwindow.c: made the state of MainWindow saved.
+
+2000-04-08
+
+ * version 0.3.0pre1
+
+ * src/addressbook.c: fully implemented address group editing.
+ Fixed a bug that wrongly confirmed deletion of address when
+ escape key was pressed on alert dialog.
+
+2000-04-07
+
+ * src/addressbook.c: added menu bar. And enabled hierarchical
+ folder.
+ * src/prefs_account.c: modified so that it allows not to specify
+ pop server.
+ * src/inc.c: inc_account_mail(): modified so that if receiving
+ server isn't specified, it does nothing.
+
+2000-04-05
+
+ * version 0.2.9
+
+ * src/addressbook.c: almost fully implemented addressbook functions.
+
+2000-04-04
+
+ * src/compose.c: fixed a bug that caused segmentation fault when
+ `File->Insert file' was selected more than twice.
+
+2000-04-03
+
+ * version 0.2.9pre4
+
+ * src/addressbook.[ch]: implemented creation of new folder and group,
+ and deletion of folder and group. And fully implemented
+ addressbook_delete_object() which deletes the specified object
+ recursively.
+
+2000-04-02
+
+ * src/addressbook.c: implemented registration of address and multiple
+ appending to Compose address entry.
+ * src/menu.[ch]: added a function menu_set_insensitive_all() that
+ turn all menu items insensitive.
+ * src/folderview.c: some code cleanup.
+
+2000-04-01
+
+ * src/account.c
+ src/prefs_common.c: fixed a bug on getting the number of CList
+ rows.
+
+2000-03-30
+
+ * version 0.2.9pre3
+
+ * src/folderview.c: fixed a bug that caused warnings when tree was
+ expanded/collapsed on the first operation.
+
+2000-03-29
+
+ * src/addressbook.c: addressbook_list_selected(): made it be able
+ to handle multiple address.
+ * src/compose.c: modified so that when Bcc: is toggled, corresponding
+ AddressBook also toggle it.
+ * src/mainwindow.c:
+ main_window_create(): moved gtk_widget_set_uposition() before
+ gtk_widget_show() so as not to cause window flickering.
+ main_window_get_position(): replaced gdk_window_get_position()
+ with gdk_window_get_root_origin() to acquire correct window
+ position (Thanks to shigeri for these modifications).
+
+2000-03-27
+
+ * src/filesel.c: made it selects home directory on the first time
+ it is called.
+
+2000-03-26
+
+ * src/utils.c: conv_mb_alnum(): modified so that it uses character
+ conversion table.
+ * src/foldersel.c: made the folder tree take focus when the dialog
+ is shown.
+
+2000-03-26
+
+ * version 0.2.9pre2
+
+ * src/addressbook.c: implemented addressbook_export_to_file() and
+ related functions.
+
+2000-03-25
+
+ * src/xml.[ch]
+ src/addressbook.c: fixed the variable name for attribute.
+ * src/prefs_common.[ch]: added a member `conv_mb_alnum'.
+ * src/utils.[ch]: added conv_mb_alnum() that converts multi-byte
+ alphabet and numeric into single-byte one.
+ * src/messageview.c: messageview_show(): made it pass conv_mb_alnum()
+ when conv_mb_alnum flag is on.
+
+2000-03-25
+
+ * version 0.2.9pre1
+
+ * src/compose.c: modified so that when Addressbook is open by a
+ Compose and it is closed, target of Addressbook is reset.
+ * src/addressbook.c: made it work with Compose.
+
+2000-03-24
+
+ * configure.in: AM_PATH_{GLIB, GTK}: raised the required version of
+ GTK+ and GLIB to 1.2.6.
+ * src/xml.[ch]: more implementation of XML parser.
+ * src/addressbook.c: implemented addressbook parsing and displaying
+ routine.
+
+2000-03-21
+
+ * src/folderview.c: folderview_scan_folder(): modified so that if
+ a folder's message number is zero, set new, unread and total number
+ to zero.
+
+2000-03-20
+
+ * src/xml.[ch]: added for XML handling used by addressbook.
+ * src/folderview.c: modified so that Trash folder is skipped
+ when an unread folder is selected automatically by space key.
+
+2000-03-18
+
+ * src/summaryview.c: fixed a bug that cursor was turned into watch
+ forever when a newsgroup was selected.
+
+2000-03-18
+
+ * version 0.2.8
+
+2000-03-17
+
+ * src/mainwindow.[ch]: implemented counting on setting cursor
+ type. And modified the menu of `thread view' and `unthread view'.
+ * src/summaryview.c: enabled thread-toggling on opening folder.
+ * src/prefs_common.[ch]: added a member `enable_thread' to determine
+ whether summary view builds thread or not when a folder is open.
+
+2000-03-15
+
+ * src/summaryview.c: modified popup sensitivity function a bit.
+
+2000-03-13
+
+ * version 0.2.7
+
+ * src/addressbook.[ch]: more implementation of the interface of
+ addressbook.
+ * src/compose.c: connected to addressbook object.
+ * src/folderview.[ch]: folderview_compare_path():
+ modified so that absolute path is correctly compared.
+ And added folderview_select_node().
+ And modified folderview_scan_folder() so that it update the summary
+ when asked.
+ * src/import.c: made it update folder tree when imported mbox.
+ * src/summaryview.c: modified according to the changes of
+ folderview.c. And modified so that it display alert dialog if
+ source folder is identical to destination.
+ added summary_set_popup_sensitive() that set the sensitivity of
+ popup menu according to the context. And made all of the items of
+ popup menu insensitive when summary is cleared.
+ * src/procmsg.c: procmsg_move_messages_with_dest():
+ modified so that if source folder is identical to destination,
+ abort its process.
+ * src/summary_search.c
+ src/manage_window.c: modified so as not to print warning to console
+ when alert dialog appeared twice.
+ * src/filesel.c: made file selection dialog transient.
+
+2000-03-11
+
+ * src/manage_window.[ch]: added callback function
+ manage_window_focus_out().
+ * src/account.c
+ src/inputdialog.c
+ src/mainwindow.c
+ src/prefs_account.c
+ src/prefs_common.c
+ src/summary_search.c: added focus_out_event signal handler.
+ * src/addressbook.[ch]: added preliminary addressbook code.
+
+2000-03-06
+
+ * src/utils.h: added a macro Xalloca() that does alloca() and
+ handles the exception.
+ * src/import.c: made the import dialog transient window and enabled
+ cancelling by escape key.
+
+2000-03-04
+
+ * version 0.2.6
+
+ * src/compose.c: fixed a bug that caused memory leak when compose
+ window was closed.
+
+2000-03-03
+
+ * src/nntp.h: increased NNTP message buffer size for XOVER strings
+ which is too long.
+
+2000-02-28
+
+ * src/summaryview.c: binded step-forward and step-backward to each
+ Control-n and Control-p.
+ * src/filter.c: filter_read_str(): fixed a memory leak bug and
+ replaced g_malloc() for allocating the buffer with alloca().
+ * src/procheader.c: procheader_get_fromname(),
+ procheader_date_get_localtime()
+ src/utils.c: conv_euctojis()
+ src/compose.c: compose_quote_parse_fmt()
+ src/prefs.c: prefs_set_data_from_text()
+ prefs_set_text(): replaced g_malloc() with alloca().
+
+2000-02-26
+
+ * version 0.2.5
+
+ * src/logwindow.c: improved log_window_append() so that it shows
+ warning, error and normal message with different colors.
+ * src/utils.[ch]: added functions log_message(), log_warning(), and
+ log_error() that show normal message, warning, and error for each.
+ And modified many warning messages to use these.
+ * src/messageview.c: messageview_init(): made it set colors of
+ quotation and URI to black when failed to allocate colors.
+ * src/news.c: news_parse_xover(): replaced g_malloc() for allocating
+ the buffer with alloca().
+
+2000-02-25
+
+ * src/folderview.c: fixed a bug that didn't put previously selected
+ folder name in text entry. In addition to that, made some
+ modifications.
+
+2000-02-24
+
+ * version 0.2.4
+
+ * src/logwindow.[ch]: added log window that displays protocol log.
+ * src/about.c: adjusted the size of dialog.
+ * src/folderview.c: made it select a folder when double-clicked.
+
+2000-02-23
+
+ * src/prefs_common.[ch]: added an item `translate_header' that
+ decides whether header name like `From:' or `Subject:' is
+ translated or not.
+ * src/compose.c: made it show alert dialog when receiptor isn't
+ entered.
+ * src/inc.c: some code cleanups.
+
+2000-02-22
+
+ * version 0.2.3
+
+ * src/compose.c: made header entries move those focus to next
+ entry or text widget when activated. And sorted out the menu items.
+ * src/mainwindow.[ch]
+ src/prefs_common.[ch]
+ src/main.c: made it save the sizes of widgets and the position of
+ window when quitting.
+ * src/prefs_common.c: set a14, k14 fontset as default message font.
+ * src/about.c: changed the appearance of about dialog using text
+ widget and so on.
+ * src/recv.c: modified recv_write() so that it converts an escaped
+ From_ line.
+
+2000-02-20
+
+ * version 0.2.2
+
+ * src/compose.[ch]: supported Bcc.
+
+2000-02-19
+
+ * version 0.2.1
+
+ * src/utils.[ch]: added function to_number() that examines string
+ and if that is a number string, return its value.
+ * src/procmsg.c: fixed a bug that caused malfunction when non-digit
+ character was included in file name.
+
+2000-02-18
+
+ * version 0.2.0
+
+ * src/folderview.c: fixed a bug that caused segmentation fault
+ when opened folder node was deleted (thanks to Hiramatu).
+ And implemented folderview_rm_server_cb() which removes news server.
+ * src/mbox.c: modified a warning message.
+
+2000-02-13
+
+ * version 0.2.0alpha-pre8
+
+ * src/mainwindow.c: inc_all_account_mail_cb(): made it select inbox
+ folder to prevent the probrem when current folder is updated.
+ * src/summaryview.c: summary_execute(): made it write to summary
+ cache when executed.
+
+2000-02-12
+
+ * version 0.2.0alpha-pre7
+
+ * src/utils.[ch]: added path_cmp() that compares two paths ignoring
+ trailing directory separator.
+ * src/folderview.[ch]
+ src/summaryview.[ch]: modified so that folder tree is updated
+ when messages are moved or deleted.
+ * src/inc.c: some code cleanup.
+
+2000-02-11
+
+ * version 0.2.0alpha-pre6
+
+ * src/utils.[ch]: added get_domain_name() that return domain
+ name as a static string.
+ * src/compose.c: compose_generate_msgid(): modified so that even
+ if current address doesn't contain '@', it generates a decent
+ message ID.
+ * src/send.c: some code cleanup.
+
+2000-02-10
+
+ * src/folderview.c: modified the behavior of folder tree when
+ the folder is right-clicked.
+ * src/compose.c: compose_encode_header(): added irresponsible
+ buffer overrun check.
+
+2000-02-09
+
+ * version 0.2.0alpha-pre5
+
+ * updated gettext and libtool.
+ * configure.in: modified localedir definition so that message
+ catalogs are installed into correct directories.
+ * src/folderview.c
+ src/mainwindow.c: modified them so that a folder can be reopen
+ even if it is currently open.
+ * src/prefs_common.[ch]
+ src/messageview.c: added an option that toggle the coloration of
+ message.
+
+2000-02-08
+
+ * version 0.2.0alpha-pre4
+
+ * src/mainwindow.c
+ src/messageview.c: fixed a bug that broke memory on allocating
+ colors.
+
+2000-02-07
+
+ * src/folderview.c: some bug fixes on selecting folder.
+
+2000-02-07
+
+ * version 0.2.0alpha-pre3
+
+ * src/folderview.c
+ * src/summaryview.[ch]: some code cleanups.
+ * src/messageview.c: fixed a color allocating bug (maybe).
+
+2000-02-06
+
+ * version 0.2.0alpha-pre2
+
+ * src/folderview.[ch]: made folder view not open selected folder
+ unless return or space key is pressed, or clicked by mouse
+ button 1 or 2.
+ * src/inc.c: some code cleanups.
+ * TODO.jp: added some items.
+
+2000-02-05
+
+ * version 0.2.0alpha-pre1
+
+ * src/summaryview.[ch]: fixed a bug that broke summary thread
+ when deleted duplicated messages (thanks to BONAIM).
+ And some code cleanup.
+ * src/procmsg.[ch]: renamed procmsg_move_messages() to
+ procmsg_move_messages_with_dest(), and replaced former with
+ new function which doesn't specify destination.
+ * src/prefs_common.c
+ src/gtkutils.c: some memory leak fixes of linked lists.
+ * src/utils.[ch]: added list_remove_all() to remove all elements
+ of doubly-linked list.
+ * src/inc.[ch]: added inc_all_account_mail() that incorporates
+ new messages of all accounts.
+ * src/account.[ch]: added account_foreach() to process each accounts.
+ * added TODO.jp
+
+2000-02-04
+
+ * version 0.1.23alpha
+
+ * src/inc.c: made the folder tree update the message number
+ when incorporated new messages.
+ * src/folderview.[ch]: added a function folderview_scan_folder()
+ to scan one folder on the view, which is specified by folder name.
+
+2000-02-02
+
+ * version 0.1.22alpha
+
+ * src/prefs_account.[ch]: added the setting of assorting on
+ receiving.
+ * src/inc.c: supported assorting on receiving.
+ * src/procmsg.c: cleaned up the code.
+ * src/news.c: fixed a bug that locked up when failed to get xover.
+ * src/compose.c: made a message unmark that is put into specific
+ folders.
+
+2000-02-01
+
+ * version 0.1.21alpha
+
+ * src/folderview.c
+ src/summaryview.c: implemented the function 'go to next folder
+ when no unread message found.'
+ * src/summaryview.c: made connection state displayed on the
+ status bar when connecting to a news server.
+ * src/compose.c: changed X-Mailer: header field string a bit.
+ * src/prefs_common.c: implemented residual functions of assortment.
+
+2000-01-31
+
+ * version 0.1.20alpha
+
+ * src/prefs_common.c: implemented reading/writing/register/deletion
+ of assortment setting.
+ * src/mainwindow.c: slightly modified the appearance of statusbar.
+ * src/account.c: account_delete(): fixed a bug that didn't assigned
+ the pointer to GList when an account was deleted.
+
+2000-01-29
+
+ * src/procmsg.c: procmsg_get_mark_sum(): fixed a bug that failed
+ to read mark file (thanks to BONAIM).
+ * src/prefs_common.c: added the interface of assortment setting.
+
+2000-01-28
+
+ * src/summaryview.c: fixed a bug that didn't redraw marking properly
+ when displaying an unread message with left-click (thanks to
+ shigeri).
+
+2000-01-27
+
+ * src/summaryview.[ch]: added functions for assortment.
+ * src/about.c: added a button to close window.
+
+2000-01-26
+
+ * src/procmsg.c: fixed a bug that didn't add news flag correctly.
+ * src/compose.c: fixed a bug that can't reply to a news article.
+ * src/filter.[ch]: added for message filtering.
+ * src/procheader.[ch]: added procheader_get_unfolded_line()
+ to process filtering. And added procheader_get_header_list()
+ that reads headers of a message and store them on the memory,
+ and procheader_header_list_destroy() that removes all headers
+ read by procheader_get_header_list().
+
+2000-01-25
+
+ * version 0.1.19alpha
+
+ * src/news.c: modified so that it retrieves only overview information
+ that is not yet cached.
+ * src/procmsg.[ch]: modified for news handling.
+
+2000-01-24
+
+ * src/news.c: supported xover.
+ * src/mbox.c: fixed a bug that didn't handle empty line correctly
+ (Thanks to shigeri).
+
+2000-01-23
+
+ * version 0.1.18alpha
+
+ * src/procmsg.[ch]: modified some functions so that they can
+ handle news folder.
+ * src/news.c: added header cache routine.
+ * src/procheader.c: fixed a bug that caused memory leak when some
+ header was duplicated.
+ And added Newsgroups: in parsing headers.
+ * src/summaryview.c: added news article cache routine.
+ * src/compose.c: made it be able to reply/forward news article.
+
+2000-01-22
+
+ * src/compose.c: fixed a bug that failed to parse To: header
+ if a comma is included in double quotation (Thanks to shigeri).
+ * src/mbox.c: modified the code for processing mbox so that it
+ can handle unescaped From_ line correctly.
+
+2000-01-21
+
+ * version 0.1.17alpha
+
+ * src/foldersel.c: fixed a bug that didn't display folder tree.
+ And added the register routine for news server and group setting.
+
+2000-01-20
+
+ * version 0.1.16alpha
+
+ * src/statusbar.[ch]: added statusbar_puts_all().
+ statusbar_puts(): made it truncate a string that is too long.
+ * src/folderview.[ch]: changed CTree's row data from string
+ to FolderInfo structure.
+ And implemented popup menu that registers news server and group.
+ * src/messageview.c: modified short header display routine.
+
+2000-01-19
+
+ * added src/news.[ch] for NetNews session management.
+ * src/summaryview.[ch]: added NetNews reading codes.
+
+2000-01-18
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: made them preserve toolbar style.
+ * src/main.c: made it save configuration before exiting.
+ * src/summaryview.c: modified summary status display routine.
+ * added src/nntp.[ch] for handling low level NNTP session.
+
+2000-01-17
+
+ * added src/progress.[ch] for displaying progress.
+ * src/inc.c: modified progress dialog routines to use
+ src/progress.[ch].
+ * src/folderview.[ch]: added preliminary NetNews supporting code.
+
+2000-01-16
+
+ * version 0.1.15alpha
+
+ * src/main.c
+ src/folderview.c: some permission fixes.
+ * src/folderview.c: implemented folder creation/renaming/removing.
+ * src/utils.[ch]: added remove_dir_recursive() that removes
+ a directory recursively.
+
+2000-01-15
+
+ * src/mainwindow.[ch]: added toolbar style selection.
+ * added src/inputdialog.[ch] to prompt user to enter a string.
+ * src/summaryview.[ch]: modified the behavior of view on
+ normal mode.
+ * src/mbox.c: fixed a bug that couldn't lock file when
+ lockf() was used (Thanks to shigeri).
+
+2000-01-14
+
+ * version 0.1.14alpha
+
+ * src/mainwindow.[ch]: changed the appearance of toolbar.
+ And fixed window handling.
+ * src/summaryview.c: modified the messages displayed on status bar.
+ * src/compose.[ch]: added toolbar.
+ * src/*.xpm: borrowed some icons from gnome-libs (temporary).
+
+2000-01-13
+
+ * version 0.1.13alpha
+
+ * src/summaryview.c: fixed a bug of threading. And some code
+ cleanups. And rewrote the routine of deleting duplicated messages
+ using hash table.
+ * src/mainwindow.[ch]: added toolbar.
+
+2000-01-12
+
+ * version 0.1.12alpha
+
+ * src/summary_search.c: if the OS don't have wcsstr(), use wcswcs()
+ instead.
+ * src/summaryview.c: changed CTree creating routine as it creates
+ thread on the fly for speeding up.
+ * src/procmsg.c: rewrote message processing routines using hash
+ table for speeding up. It should be considerably faster than
+ before.
+
+2000-01-11
+
+ * version 0.1.11alpha
+
+ * po/ja.po: modified msgstr for Solaris standard gettext.
+ * src/main.c: added config.h inclusion.
+ * src/compose.c: changed to add replied message's In-Reply-To
+ message id to References header if it don't have References header.
+ * src/summaryview.c: changed threading routine to use hash table
+ for speeding up.
+
+2000-01-11
+
+ * version 0.1.10alpha
+
+ * po/ja.po: modified msgstr so as not to core dump on Solaris.
+ * src/main.c: added inclusion of locale.h.
+ (Thanks to Sato for above.)
+ * src/mbox.c
+ * src/socket.c: applied Solaris patch by shigeri with some
+ modification. (Thanks!)
+
+2000-01-10
+
+ * version 0.1.9alpha
+
+ * src/compose.c: compose_encode_header(): fixed some bugs.
+ And modified header generating routines to support proper
+ References header, and supported Organization header.
+ * src/procmsg.[ch]
+ src/procheader.c: removed Cc: and Reply-To: from cache data.
+ * src/procheader.[ch]: renamed header list structure to HeaderEntry.
+ * src/summaryview.[ch]: summary_thread_func(): some optimization.
+ And added summary_pass_key_press_event() to pass key press event
+ from other widgets.
+ * src/messageview.c: messageview_key_pressed(): modified so that
+ key event is passed to summary view even if message view is
+ separated. (Thanks to wakai@UEC univ. for pointing this out.)
+
+2000-01-09
+
+ * version 0.1.8alpha
+
+ * src/compose.c: implemented RFC1522, RFC2407 (loosely) compliant
+ header MIME encoding.
+ * src/procheader.c: some bug fixes of folded header line processing.
+ * src/headerview.c: headerview_show(): some bug fixes.
+
+2000-01-07
+
+ * version 0.1.7alpha
+
+ * src/utils.c: conv_euctojis(): fixed a bug that didn't add
+ kanji-out sequence [ \033 ( B ] when input string was ended
+ with kanji. (Thanks to Nozomu Kobayashi for pointing this out.)
+ * src/compose.c: compose_encode_header(): changed as it outputs
+ encoded string to another buffer.
+ And implemented a faculty to save sent message to outbox and
+ to queue message that failed to send (preliminary).
+ And, finally implemented proper To: and Cc: processing :)
+ * src/folderview.c: added preliminary right-clicking popup menu
+ for operating folders.
+ * some permission fixes at creating or copying file.
+
+2000-01-07
+
+ * version 0.1.6alpha
+
+ * src/procheader.c: fixed a bug that didn't null-terminate
+ header list and caused segmentation fault.
+
+2000-01-06
+
+ * version 0.1.5alpha
+
+ * src/procheader.[ch]: added function procheader_get_one_field()
+ that gets one header field that matches the header list.
+ And removed procheader_get_unfolded_line(), which is less generic.
+ And rewrote procheader_get_header_fields() using
+ procheader_get_one_field().
+ * src/summaryview.c: some bug fixes of key input scan routine.
+ * README, README.jp: modified documents a bit.
+
+2000-01-05
+
+ * src/menu.c: menu_set_sensitive(): fixed a bug that if a menu item
+ had a submenu, set sensitivity of the submenu, not the item.
+
+2000-01-05
+
+ * version 0.1.4alpha
+
+ * src/summaryview.c: fixed a bug that caused segmentation fault
+ when empty summary view was center-clicked.
+ And fixed a bug that freed moving folder strings when marked
+ as unread.
+ If current folder is trash, don't delete message.
+ * src/summaryview.[ch]
+ * src/mainwindow.c
+ * src/procmsg.[ch]: added update-cache mode (discards previous cache).
+
+2000-01-04
+
+ * src/procheader.[ch]: more optimization of header processing
+ routine. And added a new function procheader_get_header_fields()
+ that receives an array of header name as a parameter and
+ set header bodies.
+ * src/utils.[ch]: added remove_return() for removing return code.
+ * src/unmime.c: added remove_return() on the last of UnMimeHeader().
+
+2000-01-03
+
+ * src/compose.c: if message body is ascii only, set US-ASCII as
+ charset in Content-Type.
+ * src/main.[ch]
+ * src/prefs.c
+ * src/prefs_common.c
+ * src/prefs_account.c
+ * src/account.c: changed the location of rc files.
+ * src/account.c: enabled closing window when escape key is pressed.
+
+2000-01-02
+
+ * version 0.1.3alpha
+
+ * src/compose.c: fixed a bug that caused segmentation fault
+ when sending failed.
+ And relocated header-generation routines from src/send.c.
+ * src/send.c: moved header-generation routines to src/compose.c.
+ * src/prefs.c: added '~' to home directory expansion.
+ * src/prefs_account.[ch]: added signature file path configuration.
+ * src/prefs_common.[ch]: added spool path configuration.
+ * src/inc.c: changed the method of user name acquisition to use
+ g_get_user_name().
+
+2000-01-01
+
+ * version 0.1.2alpha
+
+ * added ChangeLog (this file), ChangeLog.jp.
+ * some code cleanups.
+ * added manage_window.[ch] for transient window management.
+ * src/procheader.c: optimized header processing routine a bit.
+ * src/send.c: fixed exception handling on connection.
+ * src/inc.c: added exception handling on getting user name.
+
+2000-01-01
+
+ * version 0.1.1alpha
+
+ * src/send.c: fixed a bug that didn't add Content-Type: header.
+
+2000-01-01
+
+ * version 0.1.0alpha
+
+ * initial release.
diff --git a/ChangeLog.jp b/ChangeLog.jp
new file mode 100644
index 00000000..d0195b4f
--- /dev/null
+++ b/ChangeLog.jp
@@ -0,0 +1,10781 @@
+2004-12-24
+
+ * version 1.0.0
+
+2004-12-22
+
+ * src/account.c: account_delete(): 対応するフォルダが選択されている
+ ときにリモートアカウントを削除した時にクラッシュするのを修正
+ (Debian BTS #284483)。
+
+2004-12-21
+
+ * NEWS, TODO, TODO.jp: 更新。
+ * manual/ja/sylpheed.sgml: 更新。
+
+2004-12-17
+
+ * src/action.c: parse_append_filename(): 全ての特殊文字を引用符なしに
+ エスケープするようにした(IWAMOTO Kouichi さんと Yoichi Imai さん
+ thanks)。
+ * AUTHORS: 更新。
+
+2004-12-16
+
+ * INSTALL
+ INSTALL.jp: 動作確認リストを更新。
+
+2004-12-15
+
+ * version 1.0.0rc
+
+2004-12-15
+
+ * src/compose.c: compose_wrap_line_all_full(): 空白挿入のロジックを
+ 修正。
+
+2004-12-15
+
+ * manual/ja/sylpheed.sgml: 更新。
+
+2004-12-15
+
+ * src/addrbook.c
+ src/addressbook.c
+ src/addrindex.c
+ src/jpilot.c
+ src/ldif.c
+ src/syldap.c
+ src/vcard.c: '... defined but not used' の警告を除去。
+
+2004-12-13
+
+ * src/compose.c: compose_wrap_line_all_full(): 次の行の最初の文字が
+ 空白でない場合、またはマルチバイトとシングルバイトの境界の場合
+ のみ行結合時に空白を挿入するようにした。
+
+2004-12-13
+
+ * src/action.c: parse_append_filename(): 特別文字をエスケープする
+ ようにした(IWAMOTO Kouichi さん thanks)。
+ * src/utils.c: subst_for_filename(): シングルクォートも置換する
+ ようにした。
+
+2004-12-10
+
+ * src/compose.c: compose_wrap_line_all_full(): 次の行の最初の文字が
+ 英数字でない場合の行の結合の問題を修正。
+
+2004-12-09
+
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb()
+ src/compose.c: compose_send(), compose_send_later_cb(): 送信時、
+ オフラインモードのときは ユーザにオンラインに切り替えるように
+ 促すようにした。
+
+2004-12-08
+
+ * src/imap.c: bitlength_clean_up.imap.c.patch を適用(64-bit 環境での
+ 整数長の問題を修正) (Alfons さん thanks)。
+
+2004-12-03
+
+ * version 1.0.0beta4
+
+2004-12-03
+
+ * src/pixmaps/regular.xpm: 未使用のアイコンを削除。
+ * README
+ README.jp: 更新。
+
+2004-12-02
+
+ * src/pop.c: pop3_write_msg_to_file(): 単体の CR を LF に変換しない
+ ようにした(Alfons さん thanks)。
+ * src/utils.[ch]: my_memmem(): my_memmem() を独自実装。
+
+2004-12-01
+
+ * manual/ja/sylpheed.sgml: 最新版に追従。
+
+2004-12-01
+
+ * src/pixmaps/unread.xpm: 色合いを調整。
+
+2004-12-01
+
+ * src/filter.c: C99 '//' コメントを削除。
+
+2004-11-30
+
+ * src/pixmaps/dir-close.cpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/dir-noselect.xpm
+ src/pixmaps/group.xpm: 色合いを調整。
+
+2004-11-29
+
+ * src/pixmaps/dir-close.cpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/dir-noselect.xpm
+ src/pixmaps/group.xpm: 新しい画像で置き換えた。
+
+2004-11-29
+
+ * src/pixmaps/folder.xpm: 削除。
+
+2004-11-26
+
+ * src/summaryview.c: 1文字のカラムタイトルをアイコンに変更。
+ * src/pixmaps/mail.xpm: 新規。
+
+2004-11-26
+
+ * src/summaryview.c: summary_execute(): サマリのステータスバー
+ メッセージを pop するようにした。
+
+2004-11-26
+
+ * src/prefs_common.c: Web ブラウザコマンドを追加。
+
+2004-11-26
+
+ * manual/ja/sylpheed.sgml: 最新版に追従。
+ * manual/ja/Makefile.am: ターゲット 'update-html' を追加。
+
+2004-11-22
+
+ * INSTALL
+ INSTALL.jp: 動作確認リストを更新。
+
+2004-11-19
+
+ * src/jpilot.c: コーディングスタイルを統一。
+ * src/mainwindow.c: 重複するアクセラレータを修正。
+
+2004-11-18
+
+ * src/procmsg.c: write_mark_func(): sizeof(gpointer) != guint となる
+ システムでの誤ったキャストを修正。
+
+2004-11-18
+
+ * src/mainwindow.c: 英語を修正(trashes -> trash)。
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): メニュー文字列
+ を更新。
+
+2004-11-18
+
+ * src/mainwindow.c: メニューラベル「ごみ箱を空にする」を「すべての
+ ごみ箱を空にする」に変更。
+
+2004-11-16
+
+ * version 1.0.0beta3
+
+2004-11-16
+
+ * src/pixmaps/error.xpm: CList の行に合うようにより小さなサイズにした。
+
+2004-11-16
+
+ * src/jpilot.c: JPilot アドレス帳の日本語対応パッチを適用
+ (IWAMOTO, Kouichi さん thanks)。
+
+2004-11-15
+
+ * src/compose.c
+ src/procmime.[ch]: 添付するテキストファイル中の 8bit 文字の割合が
+ 20% より高ければ BASE64 エンコーディングを使用し、そうでなければ
+ quoted-printable を使用(全くない場合は 7bit)。
+
+2004-11-12
+
+ * src/compose.c: compose_write_attach()
+ src/procmime.c: procmime_decode_content():
+ テキストファイルを BASE64 にエンコードする前に正規化し、デコード
+ した後に正規化を解除して RFC 2045 に準拠するようにした
+ (Nicolas Degory さん thanks)。
+
+2004-11-11
+
+ * src/pixmaps/complete.xpm
+ src/pixmaps/continue.xpm: CList の行に合うようにより小さなサイズ
+ にした。
+
+2004-11-11
+
+ * src/statusbar.c: statusbar_create(): 自動的に伸長しないように
+ ウィジェットの幅を1に指定。
+ * src/utils.[ch]: trim_string_before(): 指定した長さを超える先頭の
+ 文字を切り詰め、 "..." を追加。
+ * src/folderview.c
+ src/summaryview.c: trim_string_before() を使ってフォルダ名を表示
+ するようにした。
+
+2004-11-10
+
+ * src/defs.h
+ src/prefs_common.c: mozilla-firefox をデフォルトのブラウザにした。
+
+2004-11-09
+
+ * src/summaryview.c: summary_key_pressed()
+ src/textview.c: textview_key_pressed(): Shift または Alt とスペース
+ キーが押された場合バックスクロールするようにした。 Shift と Enter
+ キーが押された場合もバックスクロールするようにした。
+
+2004-11-09
+
+ * src/foldersel.c: foldersel_new_folder(): 新規に作成されたフォルダを
+ 選択するようにした。
+
+2004-11-08
+
+ * version 1.0.0beta2
+
+2004-11-08
+
+ * src/account.c
+ src/imap.c
+ src/inc.c
+ src/pop.c
+ src/prefs_account.[ch]: RecvProtocol::A_APOP を廃止し、 APOP の
+ オプションを追加。
+ prefs_account_protocol_set_optmenu(): リファクタリング。
+
+2004-11-07
+
+ * src/folderview.c: folderview_empty_trash_cb(): 未使用の変数を削除。
+
+2004-11-05
+
+ * src/summary_search.c: ワイドキャラクタ文字列の代わりに C 文字列
+ を使用。 AND/OR マッチができるようにした。
+
+2004-11-05
+
+ * src/folderview.[ch]
+ src/mainwindow.c: 選択フォルダに応じてファイル/フォルダ と
+ ファイル/メールボックス のメニューのセンシティビティを変更する
+ ようにした。
+ 「ファイル/フォルダ/新規フォルダを作成」からニュースグループの
+ 購読が行えるようにした。
+
+2004-11-04
+
+ * src/folderview.[ch]
+ src/mainwindow.c: フォルダ/メールボックスのメニューを再構成。
+ メインメニューで「メールボックスを削除」、「新着メッセージを
+ チェック」、「フォルダツリーを再構築」を有効にした。
+ フォルダのコンテキストメニューから「メールボックスを削除」を
+ 削除。
+
+2004-11-04
+
+ * src/folderview.c
+ src/mainwindow.c
+ src/procmsg.[ch]: フォルダのコンテキストメニューに「ごみ箱を
+ 空にする」を追加。
+
+2004-11-01
+
+ * src/filter.[ch]
+ src/summaryview.c: immediate_execution が off の場合は即座に移動
+ または削除しないようにした。
+
+2004-10-29
+
+ * version 1.0.0beta1
+
+2004-10-29
+
+ * gettext-0.14.1 に更新。
+
+2004-10-28
+
+ * src/compose.c: メニューを再構成。
+ * src/mh.c: デバッグ用の g_print() を削除。
+
+2004-10-27
+
+ * src/compose.c
+ src/prefs_template.c
+ src/template.[ch]: テンプレートのパラメータに Cc: を追加。
+
+2004-10-26
+
+ * src/prefs_filter_edit.c: 既存のルールの編集中の条件メニュー切替え
+ の問題を修正。
+
+2004-10-25
+
+ * src/filter.c: filter_action_exec(): ローカルフィルタリング時
+ FolderItem のカウンタを更新するようにした(フォルダビューの
+ メッセージカウントがおかしくなるのを修正)。
+
+2004-10-25
+
+ * src/mbox.c: proc_mbox(): folder_table が NULL かどうかをチェック
+ (警告を修正)。
+
+2004-10-21
+
+ * src/pixmaps/stock_add_16.xpm
+ src/pixmaps/stock_remove_16.xpm: gtk-2.4 のストックアイコンから変換。
+ * src/prefs_filter_edit.c: 追加/削除ボタンにアイコンを使用。
+ * src/stock_pixmap.[ch]: 追加/削除のアイコンを追加。
+
+2004-10-21
+
+ * src/pixmaps/stock_dialog_error_48.xpm
+ src/pixmaps/stock_dialog_info_48.xpm
+ src/pixmaps/stock_dialog_question_48.xpm
+ src/pixmaps/stock_dialog_warning_48.xpm: gtk-2.4 のストックアイコン
+ からダイアログアイコンを変換。
+ * src/alertpanel.[ch]: 警告ダイアログにアイコンを追加。
+ alertpanel_message(): AlertType を追加。
+ * src/stock_pixmaps.[ch]: ダイアログアイコンを追加。
+
+2004-10-08
+
+ * src/procmsg.c: 冗長なデバッグ出力を削除。
+
+2004-10-07
+
+ * version 0.9.99
+
+2004-10-07
+
+ * src/procmsg.c: procmsg_send_queue()
+ src/send_message.c: send_queue_info_free(): 不正なキューメッセージ
+ を送信しようとしたときに segmentation fault になるバグを修正。
+
+2004-10-06
+
+ * src/mainwindow.c: ファイルメニューにセパレータを追加。
+ * src/prefs_filter_edit.c: いくつかのデバッグ出力を削除。
+
+2004-10-05
+
+ * src/inputdialog.c: input_dialog_open(): 入力ダイアログが開いている
+ 間はメールの自動チェックを開始しないようにした。
+
+2004-10-04
+
+ * src/mh.c: mh_remove_all_msg()
+ src/procmsg.c: procmsg_empty_trash(): ごみ箱を空にした後メッセージ
+ 数のカウントがおかしくなるのを修正。
+
+2004-10-01
+
+ * src/prefs_filter.c: 自動作成されたルールを追加できないバグを修正。
+ * src/prefs_filter_edit.c: prefs_filter_edit_dialog_to_rule(): ルール
+ 名が存在するかどうかをチェック。
+
+2004-09-30
+
+ * src/filter.c: filter_apply_msginfo(): FilterRule::enabled == FALSE
+ の場合フィルタを適用しないようにした。
+ * src/prefs_filter.c: 「有効」カラムを実装。
+ * src/account.c: account_selected(): ダブルクリックの挙動を修正。
+
+2004-09-30
+
+ * src/colorlabel.c: メニューラベルサイズを調整。カラーメニューから
+ 「なし」を削除。
+ * src/filter.[ch]
+ src/prefs_filter_edit.c: カラーラベルアクションを実装。
+ * src/summaryview.c: summary_filter_func(): フラグアクションが実行
+ されたときにサマリのフラグを更新するようにした。
+
+2004-09-29
+
+ * src/prefs_filter_edit.c: カラーラベルを追加。
+ * src/colorlabel.c: メニューのラベルのサイズと輪郭線を修正。
+
+2004-09-28
+
+ * src/filter.[ch]
+ src/prefs_filter_edit.c: ルール作成時のエラー処理を改良。
+
+2004-09-28
+
+ * src/prefs_common.c: ビューのデフォルトのサイズを調整。
+
+2004-09-27
+
+ * src/filter.c
+ src/prefs_filter_edit.c: サイズ/経過日数条件を実装。
+ * src/menu.[ch]: menu_get_option_menu_active_user_data(): 新規。
+
+2004-09-22
+
+ * src/prefs_filter_edit.c: ヘッダの編集が完了したら以前の項目を
+ 選択するようにした。
+
+2004-09-22
+
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.c
+ src/procheader.[ch]: ユーザ定義ヘッダのダイアログを実装。
+
+2004-09-17
+
+ * src/filter.c:
+ filter_action_exec(): ローカルフィルタリングを修正。
+ strmatch_regex(): 大小文字無視の正規表現を使用。
+ * src/summaryview.[ch]: フィルタ結果をステータスバーに表示。
+
+2004-09-14
+
+ * src/filter.[ch]: フィルタルール適用タイミングを実装。
+ * src/prefs_fil_er_edit.c: prefs_filter_edit_action_hbox_set():
+ PF_ACTION_EXEC のパラメータを表示していなかったバグを修正。
+
+2004-09-10
+
+ * src/prefs_filter.c: prefs_filter_write_user_header_list(): fopen()
+ の代わりに prefs_file_open() を使用。
+
+2004-09-10
+
+ * src/defs.h
+ src/prefs_filter.c: ユーザ定義ヘッダリストのロード/セーブを
+ 実装。
+
+2004-09-09
+
+ * src/inc.c: inc_spool()
+ src/prefs_common.c: ファイルとディレクトリの両方を指定できるように
+ スプールパスの設定を修正。
+
+2004-09-09
+
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.[ch]: メッセージからのフィルタルールの作成
+ を実装。
+
+2004-09-07
+
+ * src/mimeview.c: mimeview_drag_data_get()
+ src/summaryview.c: summary_drag_data_get(): DnD の不正な URI
+ を修正。
+
+2004-09-06
+
+ * src/filter.[ch]
+ src/summaryview.c: ローカルフィルタを修正。
+ * src/mh.c: mh_copy_msgs(): 'else' が抜けていたのを修正。
+
+2004-09-06
+
+ * src/foldersel.c: foldersel_new_folder(): 潜在的なメモリ破壊を修正
+ し、追加後にフォルダリストを書き出すようにした。
+ * src/summaryview.c: summary_show(): メッセージリストを読み込んだ
+ 後に FolderItem::opened フラグを立てるようにした。
+
+2004-09-03
+
+ * src/filter.c
+ src/inc.c
+ src/mbox.c
+ src/mh.c
+ src/procmsg.[ch]
+ src/summaryview.c: FolderItem::mark_queue を使用して新着フラグを
+ 正しく扱うようにした。
+
+2004-08-31
+
+ * src/filter.c
+ src/inc.c: 新着フラグ管理の修正。
+
+2004-08-31
+
+ * src/prefs_filter.c: ダイアログを開いた時に最後の行に移動しない
+ ようにした。閉じる時に CList をクリアするようにした。
+
+2004-08-27
+
+ * src/filter.c
+ src/inc.c
+ src/pop.[ch]
+ src/prefs_filter_edit.c
+ src/summaryview.c: FLT_ACTION_EXEC と FLT_ACTION_DELETE を実装。
+
+2004-08-27
+
+ * src/prefs_filter.c: 新規ルールが追加されたら自動スクロールする
+ ようにした。
+ ルールがダブルクリックされたら編集ダイアログを開くようにした。
+ prefs_filter_copy_cb(): 実装。
+ * src/prefs_filter_edit.c: アクション「ルールの評価を停止」を実装。
+
+2004-08-26
+
+ * src/filter.[ch]
+ src/inc.c
+ src/mbox.c
+ src/prefs_filter_edit.c
+ src/summaryview.c: FilterResult を FilterInfo に改名し、メンバに
+ account を追加。
+ command test, size, age, account, on-receive 条件を実装。
+ * src/mh.c
+ src/procheader.c: procheader_parse_file(): ファイルサイズと
+ タイムスタンプも得るようにした。
+ * src/utils.c:
+ execute_async()
+ execute_sync()
+ execute_command_line(): 終了ステータスを返すようにした。
+
+2004-08-26
+
+ * src/filter.[ch]
+ src/inc.c: 実行した全てのアクションタイプを保存。
+ filter_rule_rename_dest_path(): 新システムに合わせて修正。
+ filter_rule_delete_action_by_dest_path(): パスにマッチする
+ アクションを削除。
+ * src/mbox.c: proc_mbox(): FLT_ACTION_NOT_RECEIVE を無視するように
+ した。
+ * src/prefs_filter.c: prefs_filter_delete_path(): 新システムに
+ 合わせて修正。
+ * src/summaryview.c:
+ summary_filter()
+ summary_filter_func(): 新システムに合わせて修正。
+
+2004-08-25
+
+ * src/filter.[ch]: メッセージ本文へのマッチを実装。
+ * src/procmime.[ch]:
+ procmime_find_string_part()
+ procmime_find_string(): マッチング関数ポインタを受け取るようにした。
+ * src/procmsg.[ch]: file_path (一時メッセージのみに使用)を MsgInfo
+ に追加。
+ procmsg_msginfo_copy()
+ procmsg_msginfo_free(): 残りのメンバを扱うようにした。
+ * src/summary_search.c: procmime_find_string() のための修正。
+ * src/summaryview.c: filter_apply_local() -> filter_apply_msginfo().
+ * src/utils.[ch]: 文字列マッチ用関数を追加。
+ * src/compose.c
+ src/undo.c: 余分なデバッグメッセージを削除。
+
+2004-08-24
+
+ * 新フィルタリングシステムを実装(現在進行中)。
+ * src/defs.h
+ src/filter.[ch]: フィルタリングの XML データの読み書きを実装。
+ * src/prefs_filter.[ch]
+ src/prefs_filter_edit.[ch]: 新フィルタリングシステムの UI を実装。
+ * src/inc.c
+ src/main.c
+ src/mbox.c
+ src/pop.c
+ src/summaryview.c: 新フィルタリングシステムに合わせて修正。
+ * src/menu.h: MENUITEM_ADD(): label が NULL の場合セパレータを作成
+ するようにした。
+ * src/procheader.[ch]: ユーティリティ関数を追加。
+ * src/utils.c: open_uri(): 警告メッセージを修正。
+
+2004-08-09
+
+ * src/main.c: "./gtkrc" をパースしないようにした。
+
+2004-08-04
+
+ * src/socket.c:
+ ssl_read()
+ ssl_peek(): データの読み込みの前に SSL をチェックするようにした
+ (ソケットが破壊されたときのフリーズを修正)。
+ * src/session.[ch]: session_set_access_time(): 新規。
+ * src/imap.c
+ src/news.c
+ src/nntp.c: サーバの応答の受信に成功したときのみ last_access_time
+ を更新するようにした。
+ * 上記について Cedric Pradalier さん thanks。
+
+2004-07-23
+
+ * src/xml.[ch]: コードの整理といくつかの関数の追加。
+
+2004-07-16
+
+ * src/pop.[ch]: pop3_getrange_uidl_recv(): 無効な UIDL のチェックを
+ 緩めた。
+
+2004-07-16
+
+ * src/account.[ch]
+ src/main.c
+ src/prefs.[ch]
+ src/prefs_account.[ch]
+ src/prefs_common.[ch]: *_{save,write}_config() を *_write_config()
+ に統一。
+
+2004-06-30
+
+ * src/procheader.c:
+ procheader_get_one_field()
+ procheader_get_unfolded_line(): シーケンス 'SP CR LF' が出現
+ したときに折り返し解除処理が正しく動作しないバグを修正
+ (NOGUCHI, Takuya さん thanks)。
+
+2004-06-23
+
+ * src/prefs_common.c: confirm_on_exit のデフォルトを FALSE にした。
+
+2004-06-23
+
+ * src/menu.[ch]: menu_set_active() を追加。
+ * src/compose.c: アカウントを選択するときに「表示/自動整形」モードを
+ 切り替えないようにした。
+
+2004-06-23
+
+ * src/compose.[ch]: メッセージ作成ウィンドウから自動整形を切り替え
+ られるようにした。
+
+2004-06-17
+
+ * version 0.9.12
+
+2004-06-17
+
+ * src/session.c: session_set_timeout(): interval が 0 のとき
+ timeout_tag をリセットしていなかったバグを修正。
+
+2004-06-16
+
+ * src/gtkstext.c: gtk_stext_update_text(): cache の null チェックを
+ 追加(Jim Hranicky さん thanks)。
+
+2004-06-15
+
+ * src/defs.h: 特定のプラットフォーム(例: FreeBSD)におけるキャッシュ
+ の非互換性問題に対処するために CACHE_VERSION を増加。
+ * src/procmsg.c: procmsg_read_cache(): エラーが発生したら読み込んだ
+ キャッシュデータを全て破棄するようにした。
+
+2004-06-10
+
+ * src/summaryview.[ch]: 使用不可能なときは「再編集」メニューを隠す
+ ようにした。
+
+2004-06-08
+
+ * src/inc.[ch]
+ src/send_message.c
+ src/session.[ch]: セッションのタイムアウトを実装。
+ * src/pop.h: Pop3ErrorValue から未使用の値を削除。
+
+2004-06-07
+
+ * src/inc.c: inc_all_account_mail(): コードの整理。
+
+2004-06-03
+
+ * src/procmsg.c: procmsg_read_cache_data_str(): いくつかの環境のため
+ に gint32 を guint32 に変更。
+ * src/summaryview.c: 「印刷」メニューを復活し、「振り分けルールを
+ 作成」メニューを削除。
+
+2004-06-01
+
+ * src/about.c: 著作権の年を修正。
+
+2004-05-28
+
+ * version 0.9.11
+
+2004-05-21
+
+ * src/smtp.c: RFC 2821 に準拠(Alfons さん thanks)。
+
+2004-05-20
+
+ * src/folderview.[ch]: スプリングローデッドフォルダを実装。
+
+2004-05-20
+
+ * src/folderview.c: folderview_button_pressed(): 開いているフォルダ
+ が選択されたときのみ「メッセージを検索...」メニュー項目を有効に
+ するようにした。
+
+2004-05-19
+
+ * src/compose.c
+ src/prefs_common.[ch]: 「送信に失敗したメッセージを送信待ちに
+ 入れる」オプションを削除。
+
+2004-05-18
+
+ * src/summaryview.c: コンテキストメニューを整理。
+ * src/mainwindow.c: メニュー項目 '/メッセージ/再編集' の位置を変更。
+
+2004-05-12
+
+ * src/procmsg.[ch]: キャッシュデータの整数値の型を g(u)int32 に
+ 固定。
+
+2004-05-11
+
+ * src/nntp.c: nntp_get_article(): broken なニュースサーバのために
+ 応答のプロトコルエラーを無視するようにした(Davide Scola さん
+ thanks)。
+
+2004-05-11
+
+ * src/gtkutils.[ch]: gtkut_editable_disable_im() を追加。
+ * src/passphrase.c: パスフレーズの入力時に XIM を無効にした。
+
+2004-05-11
+
+ * src/compose.c
+ src/folderview.c
+ src/inc.c
+ src/prefs_display_header.c
+ src/procmsg.h: AMD64 (とその他64-bitプラットフォーム) のための
+ 修正(Hiroyuki Ikezoe さん thanks)。
+
+2004-05-10
+
+ * src/inc.[ch]: gtk_timeout_add() を使用せず、代わりに
+ gettimeofday() を使用(稀にロックアップするのを防ぐため)。
+
+2004-03-19
+
+ * src/defs.h
+ src/inc.[ch]: 進捗ダイアログの更新方法を変更し、高速なネットワーク
+ におけるオーバーヘッドを軽減。
+
+2004-03-16
+
+ * src/nntp.c: nntp_session_new(): セッションの開始時に認証を試みる
+ ようにした(Shiino Yuki さん、 IWAMOTO, Kouichi さん thanks)。
+ * src/news.c
+ src/nntp.c: ソケットエラーが発生したときはセッションを破棄する
+ ようにした。
+
+2004-03-12
+
+ * src/mainwindow.c
+ src/summaryview.[ch]: 選択中のメッセージを振り分ける機能を追加。
+
+2004-03-12
+
+ * src/filter.[ch]
+ src/prefs_filter.c: フィルタシステムを再実装(UI は未実装)。
+
+2004-03-09
+
+ * src/filter.c: 「含まない」フラグのマッチングアルゴリズムを修正
+ (ヘッダが存在しない場合でもマッチし、複数の同一ヘッダを正しく扱う
+ ようにした)。
+ * src/imageview.c: get_resized_size(): リサイズの問題を起こしていた
+ typo を修正。
+
+2004-03-02
+
+ * src/folder.c
+ src/mh.c: MH フォルダの最後の番号のメッセージを削除したとき
+ FolderItem::last_num のみを更新し、その他の場合はスキャンしない
+ ようにした(移動時にメッセージ数の計算を誤るバグを修正)。
+
+2004-03-02
+
+ * src/folderview.c
+ src/summaryview.c: DnD 使用時は常にデフォルトでメッセージを移動する
+ ようにした(ニュースフォルダを除く)。 Ctrl キーが押された場合は
+ メッセージをコピーするようにした。
+ * src/mainwindow.c: main_window_empty_trash()
+ src/summaryview.c: summary_execute(): 不足していた
+ statusbar_pop_all() を追加。
+
+2004-02-29
+
+ * version 0.9.10
+
+2004-02-26
+
+ * src/prefs_common.c: "inc_local" のデフォルトを FALSE にした。
+
+2004-02-26
+
+ * src/account.c
+ src/folderview.c: IMAP4 アカウントをチェックするときはオンライン
+ モードに切り替えるようにした。その後ステータスバーを pop するように
+ した。
+ * src/inc.c: コードの整理。
+ * src/mainwindow.[ch]: main_window_get() と
+ main_window_toggle_online_if_offline() を追加。
+ * src/prefs_common.c: prefs_common_read_config(): 初回起動時に
+ オフラインモードにしてしまっていたバグを修正。
+
+2004-02-25
+
+ * src/imageview.c: ウィンドウのリサイズ時に自動リサイズするようにした。
+ クラッシュを防ぐために最小サイズを16ピクセルに制限。
+ imageview_init(): imlib 使用時は画像をキャッシュしないようにした。
+ imageview_show_image(): メモリリークを修正。
+ * src/mimeview.c: mimeview_init(): imageview_init() を呼ぶようにした。
+
+2004-02-24
+
+ * src/codeconv.[ch]: ISO-2022-JP-3 エンコーディングを追加。
+
+2004-02-24
+
+ * src/codeconv.c
+ src/mainwindow.c
+ src/messageview.c: KOI8-U エンコーディングを追加。
+ * src/prefs_common.c: prefs_message_create(): 画像リサイズオプション
+ の文字列を修正。
+
+2004-02-19
+
+ * src/addressbook.c: addressbook_list_selected(): 引数を修正。
+ * src/imageview.[ch]: 元の画像データを ImageView に保持し、
+ リサイズの切り替えができるようにした。
+ * src/messageview.[ch]
+ src/mimeview.[ch]: MessageView でなく MimeView で ImageView を
+ 扱うようにした。
+
+2004-02-16
+
+ * src/imap.c
+ src/news.c
+ src/summaryview.c: imap.c と news.c から statusbar_pop_all() を
+ 除去(summaryview.c 内で実行)。
+
+2004-02-12
+
+ * src/inc.[ch]
+ src/pop.[ch]: inc_drop_message() を Pop3Session の仮想関数にし、
+ pop3.c の inc.h への依存を除去。
+
+2004-02-12
+
+ * src/mainwindow.c
+ src/messageview.[ch]
+ src/textview.c: 新規ウィンドウのメッセージビューにステータスバーを
+ 追加。
+
+2004-02-10
+
+ * src/inc.[ch]: 逐次更新にハッシュテーブルを使用。
+ 更新間隔を2秒に変更。
+ * src/folder.[ch]
+ src/mh.c
+ src/procmsg.c
+ src/summaryview.c: フォルダのメッセージ数の集計を補正するために
+ FolderItem::unmarked_num を追加。
+
+2004-02-09
+
+ * src/inc.[ch]: フォルダビューを逐次更新するようにした。
+ * src/foldersel.c: 選択項目の完全な ID を表示。
+
+2004-02-06
+
+ * src/folderview.[ch]: コードの整理。
+ folderview_append_item(): 新規。フォルダをフォルダビューに追加する。
+ * src/foldersel.c: foldersel_new_folder(): folderview_append_item()
+ を使用。
+
+2004-02-06
+
+ * src/foldersel.c: 「新規フォルダを作成」機能を実装。
+ * src/folder.[ch]: folder_find_child_item_by_name(): 新規。
+ * src/utils.h: AUTORELEASE_STR(): malloc 文字列を自動開放(alloca)
+ 文字列に変換。
+
+2004-02-05
+
+ * src/folderview.c: folderview_new_imap_folder_cb() を
+ folderview_new_folder_cb() にまとめた。
+
+2004-02-04
+
+ * src/compose.c: compose_write_to_file(): 無駄な strlen() を除去
+ (Alfons さん thanks)。
+ * src/textview.c: textview_button_pressed(): アドレスをクリックした
+ とき正しいアカウントを選択するようにした。
+
+2004-01-29
+
+ * version 0.9.9
+
+2004-01-29
+
+ * src/folder.c: folder_item_fetch_all_msg()
+ src/folderview.c: folderview_download_cb(): 進捗をプログレスバーで
+ 表示。
+ * src/mainwindow.[ch]: 新たにプログレスバー用の関数を追加。
+
+2004-01-29
+
+ * src/summaryview.c: summary_key_pressed(): サマリビューの水平
+ スクロールバーが左端にあるときのみ GDK_Left でフォルダビューに
+ 切り替えるようにした(Alfons さん thanks)。
+
+2004-01-29
+
+ * src/codeconv.c: conv_euctojis(): JIS X 0201 カナ変換を設定可能に
+ した。
+ * src/prefs_common.[ch]: PrefsCommon::allow_jisx0201_kana (隠し設定)
+ を追加。
+
+2004-01-28
+
+ * src/codeconv.c: conv_euctojis(): JIS X 0201 カナから JIS X 0208
+ へ強制的に変換するようにした。
+
+2004-01-28
+
+ * src/imap.c: imap_get_msginfo(): 間違ってカウントされてしまうのを
+ 修正。
+
+2004-01-28
+
+ * src/base64.c
+ src/codeconv.c
+ src/compose.c
+ src/html.c
+ src/imap.c
+ src/pop.c
+ src/prefs_account.c
+ src/procmime.c
+ src/procmsg.c
+ src/quote_fmt_parse.y
+ src/quoted-printable.c
+ src/textview.c
+ src/unmime.c
+ src/utils.c
+ src/utils.h
+ src/xml.c: ctype 関数に対して引数の型が誤っていたのを修正(unsigned
+ char でなくて char を渡していた)。
+
+2004-01-27
+
+ * src/mainwindow.[ch]: MainWindow::messageview_cid を追加。
+ メッセージビューが隠された場合クリアするようにした。
+ * src/textview.c: リンクがクリックされたら URL をステータスバーに
+ 表示するようにした。
+ textview_uri_security_check(): 実際の URL と表示されている URL を
+ 比較し、偽の URL の可能性があれば警告を出すようにした。
+ * src/utils.[ch]:
+ is_uri_string(): 文字列が URL であれば TRUE を返す。
+ get_uri_path(): URL のスキーム部以外の部分を返す。
+
+2004-01-23
+
+ * src/folder.[ch]: folder_item_fetch_all_msg(): 新規。フォルダ中の
+ 全てのメッセージを取得する。
+ * src/folderview.c: 「ダウンロード」機能を実装。
+
+2004-01-23
+
+ * src/gtkutils.[ch]: 矢印メニューボタンをボタンに付加する ComboButton
+ を実装。
+ * src/mainwindow.[ch]: main_window_toolbar_create(): 返信、転送ボタン
+ にコンボボタンを追加。
+
+2004-01-22
+
+ * src/mainwindow.c: ツールバーによってウィンドウサイズが自動的に
+ 伸長してしまうのを修正。
+
+2004-01-21
+
+ * src/addr_compl.[ch]
+ src/gtkshruler.[ch]: 著作権表示を変更。
+
+2004-01-20
+
+ * src/gtkstext.c: find_line_params(): マルチバイトとシングルバイト
+ 文字の間でも改行するようにした。
+
+2004-01-20
+
+ * src/gtkstext.c: find_line_params(): ワードラップモードのとき
+ マルチバイト文字間でも改行するようにした。
+
+2004-01-05
+
+ * src/codeconv.c: conv_iconv_strdup(): LP64 環境でのクラッシュを修正
+ (James Noyes さん thanks)。
+ * src/compose.c: compose_select_account(): 自動的に署名/暗号化
+ オプションをオフにしないようにした。
+
+2003-12-17
+
+ * src/inc.[ch]: inc_account_mail() を public にした。
+ * src/mainwindow.c: 受信メニューをサブメニューにし、各アカウントから
+ の受信のための動的なメニューを追加。
+
+2003-12-15
+
+ * version 0.9.8a
+
+2003-12-15
+
+ * src/procmsg.c: procmsg_open_data_file(): DATA_READ が指定されて
+ バッファが与えられたらバッファをセットするようにした。
+ procmsg_open_cache_file_with_buffer(): 新規。
+ procmsg_read_cache(): ファイル I/O の後に setvbuf() を呼んでいた
+ (バッファ読み込みエラーを起こしていた)バグを修正。
+
+2003-12-12
+
+ * version 0.9.8
+
+2003-12-12
+
+ * configure.in: IPv6 にデフォルトで対応するようにした。
+
+2003-12-11
+
+ * src/inc.c: inc_mail(), inc_all_account_mail(): オフラインモードの
+ ときはユーザにオンラインに切り替えるように促すようにした。
+ * src/mainwindow.h: main_window_toggle_online() を追加。
+
+2003-12-11
+
+ * src/foldersel.c
+ src/folderview.[ch]
+ src/mainwindow.c
+ src/stock_pixmap.[ch]
+ src/pixmap/dir-noselect.xpm: no-select フォルダを薄いアイコンと
+ 文字列で表示。
+ * src/Makefile.am: offline.xpm, online.xpm, dir-noselect.xpm を
+ EXTRA_DIST に追加。
+
+2003-12-11
+
+ * src/folder.h: マクロ FOLDER_ITEM_CAN_ADD() を追加。
+ * src/folderview.c: folderview_drag_motion_cb(): コードの整理。
+ folderview_drag_received_cb(): no_select フォルダで、あるいは
+ それ自身から受け付けないようにした。
+ * src/foldersel.c: no_select フラグがセットされているフォルダを選択
+ 不可にした。
+
+2003-12-10
+
+ * src/imap.c: imap_do_copy_msgs(), imap_remove_msgs(): コードの整理。
+ メッセージを削除したときに MSG_INVALID フラグをセット。
+ * src/mh.c: mh_do_move_msgs(), mh_remove_msg(): メッセージを削除した
+ ときに MSG_INVALID フラグをセット。
+ * src/procmsg.[ch]:
+ procmsg_move_messages()
+ procmsg_copy_messages(): エラーステータスを返すようにした。
+ MsgTmpFlags に MSG_INVALID を追加。
+ * src/summaryview.c: summary_execute(): エラーを検出し、無効になった
+ ノードのみを削除するようにした。
+ summary_unthread_for_exec(): 閉じたツリー中のノードを削除しない
+ バグを修正。
+
+2003-12-06
+
+ * src/mainwindow.[ch]: ステータスバーにオンラインスイッチボタンを
+ 追加し、メニューに「/ファイル/オフラインにする」を追加。
+ * src/pixmaps/offline.xpm
+ src/pixmaps/online.xpm: 新規(Mozilla の
+ themes/classic/communicator/icons/ から拝借)。
+ * src/stock_pixmap.[ch]: online.xpm と offline.xpm を追加。
+ * src/textview.[ch]: textview_show_error(): 新規。
+ * src/summaryview.c: summary_display_msg_full(): メッセージが表示
+ された場合のみマークを更新。
+ * src/prefs_common.[ch]: PrefsCommon::online_mode を追加。
+ * src/news.c: news_session_get()
+ src/imap.c: imap_session_get(): オフラインモードのときは NULL を
+ 返すようにした。
+ * src/messageview.[ch]: messageview_show(): メッセージが表示できた
+ かどうかのステータスを返すようにした。失敗したときはエラー
+ メッセージをビューに表示するようにした。
+ * src/procmsg.c:
+ procmsg_get_message_file()
+ procmsg_open_message(): 取得に失敗したときに警告を表示しないように
+ した。
+
+2003-12-04
+
+ * src/html.c: html_get_tag(): 値を持たない属性に対応。
+
+2003-12-04
+
+ * src/codeconv.c: conv_get_code_conv_func(): src_charset と現在の
+ 文字コードが同一の場合、または現在の文字コードがマルチバイトで
+ ある場合のみ conv_latintodisp を返す(KOI8-R locale 上での
+ ISO-8859-5 の表示を修正)。
+
+2003-11-25
+
+ * autogen.sh: aclocal で m4 ディレクトリを含まないようにした。
+ * intl/libgnuintl.h: cvs から削除。
+ * po/.cvsignore: stamp-po と remove-potcdate.sed を追加。
+
+2003-11-24
+
+ * gettext-0.12.1 に移行。
+
+2003-11-21
+
+ * configure.in: struct dirent 中の d_type メンバのチェックを追加。
+ * src/mh.c: mh_scan_folder(): 利用可能な場合は d->d_type を使用。
+ mh_get_uncached_msgs(): 余分な stat() を削除。
+ mh_parse_msg(): 通常のファイルでない場合は NULL を返す。
+ mh_scan_tree_recursive(): 利用可能な場合は d->d_type を使用。
+ * src/utils.[ch]:
+ dirent_is_regular_file()
+ dirent_is_directory(): 新規。利用可能な場合はエントリのタイプを
+ 判別するのに d->d_type を使用。
+ remove_dir_recursive(): dirent_is_directory() を使用。
+
+2003-11-14
+
+ * src/folder.h: FolderItem に 'updated' フラグを追加。
+ * src/folderview.[ch]: folderview_update_all_updated(): 新規。全ての
+ 更新されたフォルダを更新する。
+ * src/imap.c: 内容の変更時に FolderView::update フラグをセット。
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb(): コードの整理。
+ * src/mh.c: コードの整理。
+ mh_scan_folder(): 新着メッセージを正しくカウントするようにした。
+ * src/procmsg.[ch]: コードの整理。
+ procmsg_open_cache_file(): 新規。
+ procmsg_open_mark_file(): 読み込み/書き込み/追加書き込みができる
+ ようにした。
+ procmsg_send_queue(): アカウントに対応する送信控を正しく選択する
+ ようにした。
+ * src/send_message.[ch]: send_get_queue_info(): 送信待ちメッセージ
+ からキュー情報を取得。
+ send_queue_info_free(): QueueInfo を開放。
+ send_message_queue(): ファイルの代わりに QueueInfo を引数にとる
+ ようにした。
+ * src/summaryview.c: summary_write_cache(): コードの整理。
+
+2003-11-10
+
+ * src/compose.c: compose_redirect_write_headers(): Resent-Cc: ヘッダ
+ を正しく付加するようにした。
+
+2003-11-05
+
+ * src/imap.c: imap_get_msg_list(): フラグを得るための SEARCH コマンド
+ に失敗した場合 FETCH コマンドに fallback するようにした。
+ imap_search_flags(): SEARCH コマンドを使用して UID の配列とフラグの
+ ハッシュテーブルを返す。
+ imap_fetch_flags(): FETCH コマンドを使用して UID の配列とフラグの
+ ハッシュテーブルを返す。
+
+2003-10-28
+
+ * src/summary_search.c: summary_search_execute(): 後方検索が有効な
+ ときの「一括検索」を修正。
+ 「一括検索」が有効なときは後方検索ボタンを無効にするようにした。
+
+2003-10-15
+
+ * version 0.9.7
+
+2003-10-15
+
+ * src/imap.c: imap_scan_tree(): ルートディレクトリの存在を STATUS
+ ではなく LIST でチェックするようにした。
+
+2003-10-07
+
+ * src/send_message.c: alertpanel_error() を呼ぶときのフォーマット
+ 文字列のバグ(悪意のある SMTP サーバによって攻撃可能)を修正
+ (Georgi Guninski さん thanks)。
+
+2003-10-03
+
+ * src/folder.[ch]
+ src/imap.[ch
+ src/mh.[ch]
+ src/news.[ch]: フォルダシステムのリファクタリング(claws の実装に
+ 基づく)。
+ * src/account.c
+ src/foldersel.c
+ src/folderview.c
+ src/mainwindow.c
+ src/messageview.c
+ src/procmsg.c
+ src/setup.c
+ src/summaryview.c: 全ての場所で FOLDER_TYPE() マクロを使用。
+
+2003-09-17
+
+ * version 0.9.6
+
+2003-09-17
+
+ * src/addressbook.c:
+ addressbook_folder_load_person()
+ addressbook_folder_load_group(): ループの後で ctree をソートする
+ ようにした(一つのフォルダに多くのアドレスがある場合のパフォーマンス
+ の問題を解決)(christian mock さん thanks)。
+
+2003-09-16
+
+ * src/folderview.c: folder_init(): コードを整理。
+ * src/summaryview.c: summary_init(): boldfont が正しくロードされたか
+ どうかをチェック。
+ * src/grouplistdialog.c: delete_event に適切なコールバックを使用する
+ ようにした(足永さん thanks)。
+ * src/imap.c: ゼロ長メッセージを許すようにした。
+ * src/recv.c: recv_bytes_write(): size == 0 の場合はすぐに戻るように
+ した。
+
+2003-09-16
+
+ * src/folderview.c: folderview_init(): フォントが読み込めない場合は
+ gtk のデフォルトに fallback するようにした(起動時のクラッシュを
+ 修正)。さらに不要なコードを除去。
+
+2003-09-15
+
+ * src/compose.c: compose_insert_sig(): マニュアル操作のときは現在の
+ カーソルの位置に署名を挿入するようにした。
+
+2003-09-11
+
+ * src/summaryview.c: summary_key_pressed(): メインウィンドウがロック
+ されていても delete キーを無視しないようにした。
+
+2003-09-10
+
+ * src/action.c: action 終了のコードを改良(RH9 で action 終了時に
+ 長時間待たされるのを修正) (Melvin さん thanks)。
+ * src/stringtable.[ch]: string_table_insert_string(): 警告
+ "dereferencing type-punned pointer will break strict-aliasing
+ rules" を除去するためにコードを修正。
+ 引数に gchar * の代わりに const gchar * を使用。
+
+2003-09-05
+
+ * src/utils.[ch]: generate_mime_boundary(): MIME boundary を作成する
+ 新規関数(rfc2015.c から移動)。
+ さらに特別文字を除去。
+ obsolete な lrand48() のかわりに random() を使用。
+ 重複を避けるために prefix の引数を追加。
+ 対 QP シーケンスとして常に "=_" を追加し、コードを単純化。
+ * src/rfc2015.c:
+ rfc2015_decrypt_message()
+ rfc2015_encrypt()
+ rfc2015_sign(): 継続する content 行を正しく扱っていなかったバグを
+ 修正。
+ * src/compose.c
+ src/rfc2015.c: generate_mime_boundary() を使用。
+
+2003-09-05
+
+ * src/folderview.c:
+ folderview_delete_folder_cb()
+ folderview_remove_mailbox_cb(): FolderItem を削除する前に現在表示
+ されているフォルダを閉じるようにした(フォルダ削除時のクラッシュを
+ 修正)。
+ * src/folder.h
+ src/imap.[ch]: imap_scan_tree()
+ src/mh.[ch]: mh_scan_tree(): スキャンに失敗したときは -1 を返す。
+ * src/summaryview.c: summary_clear_all(): メッセージビューもクリア。
+ * src/imap.c: imap_close(): 指定したフォルダが選択されていなければ
+ 失敗。
+ imap_scan_tree(): 指定したルートディレクトリが存在するかどうかを
+ 調べ、なければ作成するようにした。
+ imap_parse_list(): サーバがエラーを返したら警告を出力。
+ imap_find_namespace_from_list(): スラッシュで区切られていないパス
+ に対応。
+ imap_status(): 指定しなければ値を返さないようにした。
+
+2003-09-02
+
+ * sylpheed.spec.in: typo を修正。
+
+2003-09-02
+
+ * version 0.9.5
+
+2003-09-01
+
+ * src/inc.[ch]
+ src/main.c
+ src/mainwindow.c
+ src/prefs_common.[ch]: 手動受信時のみ受信ダイアログを表示する
+ オプションを追加し、 RECV_DIALOG_ACTIVE オプションを削除。
+
+2003-09-01
+
+ * src/compose.c: compose_write_headers(): MIME 境界の ':' も '_' に
+ 置換するようにした(broken なサーバへの対処として)。
+
+2003-08-28
+
+ * src/imap.c: imap_scan_tree_recursive(): コンパイルエラーを修正。
+
+2003-08-27
+
+ * src/prefs_filter.c: 「先頭」と「末尾」ボタンを追加。
+
+2003-08-26
+
+ * src/folder.[ch]: folder_item_remove_children(): 新規。 FolderItem
+ の下の全ての子を削除。
+ * src/folderview.c: folderview_rescan_tree(): メッセージを修正。
+ * src/imap.c: imap_scan_tree(), imap_scan_tree_recursive(): 以前の
+ FolderItem オブジェクトを再利用。
+
+2003-08-25
+
+ * src/folder.[ch]: FolderItem に自分自身の GNode への参照を追加。
+ folder_item_remove(): 全ての FolderItem を開放。
+ folder_tree_destroy(): folder_item_remove() を使用。
+ * src/folderview.c: folderview_sort_folders(): 特別フォルダの親が
+ 異なっても順序を保つようにした。
+ * src/imap.c: imap_scan_tree_recursive(): メモリリークを修正。
+ * src/mh.c: mh_scan_tree(): 以前の FolderItem を保持。
+ mh_remove_missing_folder_items(): ディレクトリをスキャンし、
+ 見つからないフォルダを削除。
+ mh_scan_tree_recursive(): 以前の FolderItem オブジェクトを再利用。
+
+2003-08-20
+
+ * src/mainwindow.c: ウィンドウサイズの変更を常に反映。
+ * src/folderview.c: folderview_init()
+ src/summaryview.c: summary_init(): pixmap を作成する前にウィジェット
+ を realize するようにした。
+ * src/prefs_common.[ch]: フォルダとメッセージビューの可視状態を
+ 記憶するようにした。
+
+2003-08-07
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: 分離されたビューのサイズと位置を記憶。
+ main_window_set_widgets(): ビュータイプを変更した時にヘッダビュー
+ の隠し項目が表示されていたバグを修正。
+ ウィンドウのサイズを指定する代わりに各ビューのサイズを指定。
+
+2003-08-01
+
+ * src/compose.c: compose_select_account(): リダイレクトモードで
+ 署名を追加しないようにした。
+ compose_insert_sig(): 署名文字列が存在しない場合は "\n\n" を
+ 挿入しないようにした。常にメッセージの終わりに署名を挿入。
+
+2003-08-01
+
+ * sylpheed.spec.in を改良(Andre Oliveira da Costa さん thanks)。
+
+2003-07-31
+
+ * フォルダシステムのコードを少し整理。
+ * src/compose.c: compose_queue(), compose_draft_cb(): コードの整理。
+ * src/folder.c: コードの整理。
+ * src/imap.c
+ src/mh.c: 関数内でメッセージ数を計算。
+ * src/procmsg.c: procmsg_set_flags(): メッセージ数を計算。
+ * src/summaryview.[ch]: SummaryView 内でメッセージ数を計算・保持
+ しないようにした。
+
+2003-07-30
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/procmsg.c
+ src/summaryview.c: *_msgs_with_dest() を *_msgs() に改名。
+
+2003-07-29
+
+ * src/imap.[ch]: プロトコル拡張を使用するために CAPABILITY を使用。
+ imap_greeting(): 最初のサーバグリーティングを解析。 PREAUTH 応答
+ にも対応。
+ imap_add_msgs()
+ imap_cmd_append(): UIDPLUS に対応していれば APPENDUID 応答を使用。
+
+2003-07-28
+
+ * src/imap.c: imap_get_flag_str(): バッファオーバーランを修正。
+
+2003-07-25
+
+ * version 0.9.4
+
+2003-07-25
+
+ * src/main.c: main(): 起動時に設定ファイルを保存しないようにした。
+
+2003-07-25
+
+ * src/imap.c:
+ imap_get_msg_list(): キャッシュ未使用のときの冗長な UID SEARCH ALL
+ を除去。
+ \Seen がセットされていたら MSG_NEW フラグを解除。
+ imap_get_uncached_messages(): first_uid と last_uid が両方とも 0
+ の場合は全てのメッセージを取得。
+
+2003-07-24
+
+ * src/imap.c: IMAP4 サーバの状態を常に正確に反映するように実装を改良。
+ imap_get_msg_list(): UID SEARCH コマンドを使用してメッセージの
+ 状態を調べるようにした。
+ imap_delete_cached_message(): 単一のメッセージキャッシュを削除する。
+ imap_get_uid(): 削除。
+ imap_cmd_search(): 新規。 UID SEARCH コマンドを発行し、 UID の配列
+ を返す。
+ imap_cmd_gen_recv(): 文字列長を無制限にした。
+ imap_get_uid_table(): UID 配列からハッシュテーブルを返す。
+
+2003-07-24
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/news.[ch]: Folder::close() メソッドを追加。
+ * src/summaryview.c: summary_clear_list(): folder_item_close() を
+ 呼ぶようにした。
+
+2003-07-23
+
+ * メッセージを他のフォルダから IMAP フォルダにコピーしたときフラグを
+ 引き継ぐようにした。
+ * src/imap.[ch]
+ src/mh.[ch]
+ imap_add_msg()
+ imap_add_msgs()
+ mh_add_msg()
+ mh_add_msgs(): ファイルを追加するときにフラグも指定できるようにした。
+ * src/folder.[ch]: 仮想関数に assertion を追加。
+ * src/procmsg.[ch]: procmsg_get_message_file_list(): MsgFileInfo
+ のリストを返すようにした。
+ procmsg_message_file_list_free(): 新規。
+
+2003-07-23
+
+ * src/procmsg.h: 移植性のため MsgPermFlags と MsgTmpFlags を enum
+ から guint32 に変更(Alfons さん thanks)。
+ * src/imap.c: imap_add_msgs(): 冗長な unlink() を削除。
+
+2003-07-22
+
+ * src/session.[ch]:
+ session_read_msg_cb()
+ session_read_data_cb(): リモートホストによって接続を切断された場合
+ に無限ループに陥るバグを修正(今井さん thanks)。
+ SessionState に SESSION_EOF を追加。
+ session_is_connected(): 新規。
+ * src/inc.[ch]: inc_put_error()
+ src/send_message.c: send_put_error(): ログメッセージも共に出力。
+
+2003-07-18
+
+ * IMAP4 のさらなる最適化。
+ * src/folder.[ch]: 複数のファイルをフォルダに追加するメソッド
+ add_msgs() を追加。
+ FolderItem 操作の冗長な scan() を削除。
+ * src/imap.[ch]: Folder::add_msgs() を実装し、他の Folder
+ インスタンスからの移動・コピーを最適化。
+ * src/mh.[ch]: Folder::add_msgs() を実装し、コードを整理。
+ mh_fetch_msg(): 必要であればフォルダをスキャン。
+ * src/procmsg.[ch]: procmsg_get_message_file_list(): メッセージリスト
+ からファイルのリストを返す。
+ * src/summaryview.c: 削除・移動・コピー操作で MSG_MARKED フラグを
+ 削除しないようにした。
+ summary_display_msg_full(): 冗長なメッセージの取得を削除。
+
+2003-07-17
+
+ * コマンドを発行するときにシーケンスセットを使用して IMAP4 の
+ 移動/コピー/削除/マーク操作を最適化(claws の実装を整理して適用)。
+ * src/imap.[ch]:
+ imap_set_message_flags()
+ imap_cmd_envelope()
+ imap_cmd_copy()
+ imap_cmd_store(): UID 番号の代わりにシーケンスセット文字列を
+ 受け取るようにした。
+ imap_do_copy_msgs_with_dest(): シーケンスセットを使用して最適化。
+ imap_cmd_fetch(): BODY の代わりに BODY.PEEK を使用。
+ imap_remove_all_msg()
+ imap_set_message_flags(): FLAGS の代わりに FLAGS.SILENT を使用。
+ * src/compose.c
+ src/summaryview.c: 各メッセージ毎にコマンドを発行するのではなく
+ imap_msg_list_{set,unset}_perm_flags() を使用するようにした。
+
+2003-07-15
+
+ * src/inc.c
+ src/prefs_account.[ch]
+ src/send_message.c
+ src/session.[ch]: 非ブロッキング SSL を有効/無効にするオプションを
+ 追加。
+
+2003-07-15
+
+ * src/compose.c: compose_attach_append(): message/rfc822 ファイルを
+ 添付するときにメッセージの件名を表示。
+
+2003-07-14
+
+ * src/session.[ch]:
+ session_recv_msg()
+ session_recv_data()
+ session_read_msg_cb()
+ session_read_data_cb(): sock_peek() を削除し、ユーザ空間でメッセージ
+ をバッファリングして最適化(今回は正しく実装)。
+
+2003-07-11
+
+ * src/session.c: メッセージの後のデータ受信を正しく扱えなかったため、
+ 前の変更を元に戻した。
+
+2003-07-11
+
+ * src/session.c
+ session_recv_msg()
+ session_read_msg_cb(): sock_peek() を削除し、ユーザ空間でメッセージ
+ をバッファリングして最適化。
+
+2003-07-11
+
+ * src/imap.[ch]: リファクタリング。
+ SockInfo を引数にもつ全ての関数を IMAPSession をとるように変更。
+ imap_cmd_count をインスタンス変数: IMAPSession::cmd_count にした。
+ imap_open(): TCP (または SSL)コネクションのみを確立するようにした。
+ imap_session_new(): グリーティングと認証をここで処理。
+
+2003-07-10
+
+ * src/imap.[ch]: CRAM-MD5 認証を実装し、コードを整理。
+ * src/prefs_account.[ch]: 受信タブに IMAP4 認証方式のオプション
+ メニューを追加し、他のプロトコルのフレームを隠すようにした。
+
+2003-07-10
+
+ * src/mainwindow.c: send_queue_cb(): エラーが起こった場合はフォルダ
+ を2重にスキャンしないようにした。
+ * src/procmsg.c: procmsg_send_queue(): 送信したメッセージ数を返す
+ ようにした。
+
+2003-07-09
+
+ * src/mainwindow.c:
+ main_window_set_toolbar_sensitive()
+ main_window_set_menu_sensitive(): メール受信中のファイル操作の
+ ロックを除去。
+
+2003-07-09
+
+ * src/folder.[ch]: folder_item_remove_msg(): メッセージ番号の代わりに
+ MsgInfo を引数にとるようにした。
+ * src/imap.[ch]: imap_remove_msg(): imap_remove_msgs() を使用して
+ 再実装。
+ * src/mh.[ch]: mh_do_move(): mh_do_move_msgs_with_dest() を使用して
+ 再実装。
+ mh_copy_msg(): mh_copy_msgs_with_dest() を使用して再実装。
+ * src/procmsg.c: procmsg_send_queue(): メッセージリストを使用する
+ ように修正。
+
+2003-07-08
+
+ * src/rfc2015.c: rfc2015_is_encrypted(): 警告を抑えるために
+ MimeInfo::mime_type をチェック。
+ * src/logwindow.c: log_window_append(): 行を削除するときに上に
+ スクロールしないようにした。
+
+2003-07-07
+
+ * src/compose.c: PGP/MIME 署名を使用するときは text/plain パートに
+ 'Content-Disposition: inline' を付加。
+
+2003-07-04
+
+ * version 0.9.3
+
+2003-07-04
+
+ * src/defs.h: UI_REFRESH_INTERVAL を 40msec から 50msec に変更。
+ * src/session.c: session_read_msg_cb(): sock_read() がエラーで
+ 返るときは常に失敗するようにした。
+ * src/socket.[ch]: sock_check(): 例外的な SSL の状態に対応。
+ sock_has_pending_data(): 削除。
+ デバッグ出力を削除。
+ * src/send_message.c: send_recv_message(): メッセージをステータスバー
+ に表示。
+
+2003-07-03
+
+ * src/inc.[ch]: 受信中に CList の受信済メッセージ数を更新。
+ * src/session.c: session_read_data_cb(): g_malloc() と memcpy() を
+ 取り除いて最適化。
+
+2003-07-02
+
+ * src/socket.[ch]: sock_add_watch(): 新規。 SSL をオリジナルの watch
+ 関数で監視する(SSL でない場合は g_io_add_watch() を使用)。
+ * src/session.[ch]: 以前の対処を削除し、 g_io_add_watch() を
+ sock_add_watch() で置き換えた。
+
+2003-07-01
+
+ * src/socket.[ch]: ソケットに未処理のデータが存在する場合 TRUE を
+ 返す sock_has_pending_data() を追加。
+ * src/session.c: session_recv_msg(), session_recv_data(): ソケットに
+ 未処理のデータがあるかどうかを調べ、ある場合はコールバックをすぐに
+ 呼ぶようにした(SSL での ESMTP EHLO 時に固まるのを修正)。
+
+2003-06-30
+
+ * src/socket.c: SSL 関数で戻り値をチェック。
+
+2003-06-30
+
+ * src/mimeview.c: mimeview_init(): GTK+ テーマによる速度低下を防ぐ
+ ために TextView を初期化(Yuri Arapov さん thanks)。
+
+2003-06-27
+
+ * src/session.c: session_read_data_cb(): コールバックを呼ぶ前に
+ Session::read_data_buf をクリアするようにした。
+
+2003-06-26
+
+ * src/socket.c: ソケット接続をプロトコル独立にした。
+ * src/session.c: デバッグ用 g_print() を削除。
+ * src/inc.c: ステータスバーの出力の冗長度を減らし、メインウィンドウ
+ のプログレスバーにカウンタを表示。
+
+2003-06-26
+
+ * src/session.c: #include <errno.h> が足りなかったので追加。
+
+2003-06-25
+
+ * src/session.[ch]: 性能とコードデザインの問題を解決するために
+ Session システムを非ブロッキング I/O で再実装。
+ * src/socket.[ch]: sock_connect_async() と sock_connect_async_cancel()
+ を追加し、非同期接続を可能にした。
+ sock_peek(): 実装を変更。
+ * src/pop.c: UIDL/LIST/RETR の応答の受信を最適化。
+
+2003-06-18
+
+ * src/procmsg.c: procmsg_get_thread_tree(): ノードが祖先(parent /
+ great parent)の場合(主に循環参照の場合に起こる) (メッセージ群の
+ サンプルを発見した Phillipe Gramoulle さんとパッチを提供した
+ Alfons さん thanks)。
+
+2003-06-16
+
+ * src/pop.c: pop3_get_uidl_table(): UIDL リストが見つからなかった場合
+ でも空のハッシュテーブルを返すようにした(初回にメッセージを取得
+ 出来ないバグを修正)。
+
+2003-06-10
+
+ * src/main.c: 指定した各フォルダのステータスを表示するオプション
+ '--status-full' を追加。オプション '--status' も続く引数でフォルダ
+ を指定可能(Yuri Arapov さん thanks)。
+ * src/folder.[ch]: folder_get_status(): 新規。フォルダの配列を引数
+ として受け取り、それらのステータスを返す。
+ folder_count_total_msgs(): 削除。
+
+2003-06-06
+
+ * version 0.9.2
+
+2003-06-06
+
+ * src/filesel.c
+ src/foldersel.c
+ src/inputdialog.c: ボタンがダブルクリックされたときに終了してしまう
+ のを防ぐために gtk_main() の代わりに gtk_main_iteration() を使用。
+
+2003-06-02
+
+ * src/addr_compl.c: invalidate_address_completion(): g_completion_list
+ が NULL かどうかをチェック(西山 和広さん thanks)。
+
+2003-06-02
+
+ * src/pop.c: pop3_session_recv_data_finished(): サーバに保存される
+ べきメッセージを削除していたバグを修正(Tristan Wallis さん thanks)。
+
+2003-05-27
+
+ * version 0.9.1
+
+2003-05-26
+
+ * src/socket.[ch]:
+ sock_set_io_timeout(): 新規。タイムアウトの間隔を指定する。
+ sock_gdk_input_add(): 既に使用されていないため削除。
+ * src/prefs_common.[ch]: タイムアウトの値を指定するオプションを追加。
+
+2003-05-26
+
+ * src/action.c: create_io_dialog() でユーザ文字列を隠していなかった
+ バグを修正(Markus Amersdorfer さん thanks)。
+ ChildInfo::type を削除し、 Children::action_type を追加。
+
+2003-05-23
+
+ * src/inc.c: inc_start(): 受信前に全てのパスワードを訊くようにした。
+ 余分なエラーダイアログをポップアップしないようにした。
+ inc_account_mail()
+ inc_all_account_mail()
+ inc_progress_dialog_set_list(): アカウントリストの表示を新しい
+ 関数に分離。
+ inc_progress_dialog_set_label()
+ inc_recv_data_finished()
+ inc_recv_message(): RETR が完了したときに正しくダイアログを更新。
+
+2003-05-22
+
+ * src/imap.c:
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): iconv() を使用しない場合コンパイル
+ に失敗するのを修正。
+
+2003-05-21
+
+ * src/procmime.c: procmime_scan_multipart_message(): message/rfc822
+ パートのパースを修正。
+
+2003-05-21
+
+ * src/pop.c: pop3_ok(): タイムアウトエラーを検出。
+
+2003-05-20
+
+ * src/imap.c: imap_locale_to_modified_utf7(): locale 文字列が '+'
+ を含む場合のエンコードのバグを修正。
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): たとえ iconv() がサポートされて
+ いなかったとしても少なくとも '&' をエスケープ/エスケープ解除する
+ ようにした。
+
+2003-05-20
+
+ * src/compose.c:
+ compose_insert_sig()
+ compose_get_signature_str(): 署名文字列に区切りも含むようにした。
+ 署名ファイルが見つからない場合は区切りを挿入しないようにした。
+ sig_path が NULL のとき暗黙のデフォルトの署名パス(~/.signature)
+ を使用しないようにした。
+
+2003-05-20
+
+ * src/codeconv.c
+ src/gtkshruler.c
+ src/news.c
+ src/procmsg.c
+ src/quote_fmt_parse.y
+ src/smtp.c: gcc-3.3 が出力する警告を抑制。
+ src/stringtable.c: string_entry_free() を使用。
+
+2003-05-19
+
+ * src/compose.c: compose_insert_sig(): 署名ファイルが見つからない
+ 場合に常に署名区切りを追加していたバグを修正。
+ compose_get_signature_str(): 署名ファイルが開けない場合にクラッシュ
+ するバグを修正。
+
+2003-05-16
+
+ * version 0.9.0
+
+2003-05-16
+
+ * src/session.c: session_recv_msg(): デバッグ出力を削除。
+
+2003-05-15
+
+ * src/imap.c:
+ imap_parse_atom()
+ imap_get_header()
+ imap_cmd_fetch(): サーバが返すデータサイズをチェック(BugTraq で
+ 発見された脆弱性を修正)。
+
+2003-05-14
+
+ * src/addr_compl.c: get_complete_address()
+ src/addressbook.c: addressbook_format_address()
+ src/compose.c: QUOTE_IF_REQUIRED(): 名前が atext (RFC 2822, 3.2.4.
+ Atom) で定義されていない文字を含んでいる場合は引用符で括るように
+ した。
+ * src/main.c: main(): Solaris におけるカラーの問題を解決するために
+ colormap と visual をセット(Markus Schwarzenberg さん thanks)。
+
+2003-05-12
+
+ * version 0.9.0pre1
+
+2003-05-12
+
+ * src/prefs_account.c: POP before SMTP オプションを一時的に削除。
+
+2003-05-09
+
+ * src/prefs_common.[ch]: 「サマリでカーソルキーを押したとき
+ メッセージを開く」の説明を変更。
+ * src/summaryview.c: summary_show(): always_show_msg が TRUE の場合
+ メッセージを開くようにした。
+
+2003-05-09
+
+ * src/logwindow.[ch]: メモリ消費量を削減するため、ログメッセージの
+ 最大行数を制限するようにした。
+
+2003-05-07
+
+ * src/compose.c: compose_insert_sig(): 署名文字列に不正なシーケンス
+ が含まれるときのクラッシュを修正。
+ * src/utils.[ch]: 正確さのため get_wcs_len() を get_mbs_len() に変更。
+
+2003-05-07
+
+ * MIME 構造の大きなリファクタリング。
+ * src/procmime.c: procmime_scan_message(): gpgme が有効のときは
+ メッセージを復号化するようにした。 content-type が multipart/*
+ または message/rfc822 の場合のみマルチパートツリーを作成。
+ procmime_scan_multipart_message(): message/rfc822 パートの走査
+ を修正。
+ * src/action.c: parse_append_msgpart()
+ src/messageview.c: messageview_show()
+ src/mimeview.c: mimeview_show_message(): procmsg_open_message() と
+ procmime_scan_mime_header() の代わりに procmime_scan_message()
+ を使用。
+ mimeview_set_multipart_tree(): 新しい MIME 構造に対応。
+ * src/textview.c: textview_show_part(): 不要なチェックを削除。
+ * src/procmsg.c: procmsg_open_message_decrypted(): 復号化に失敗した
+ 場合のファイルポインタを修正。
+
+2003-05-06
+
+ * src/ssl.c: ssl_init_socket_with_method(): log_warning() を
+ g_warning() で、 log_print() を debug_print() で置き換えた。
+ * src/pop.[ch]: エラーコード PS_NOTSUPPORTED を追加し、 UIDL が
+ サポートされていなければ LAST で再試行するようにした。
+
+2003-05-01
+
+ * src/codeconv.c: conv_get_code_conv_func(): dest_charset_str が NULL
+ のとき、現在の locale が EUC-JP の場合のみ EUC-JP に変換するように
+ した。
+
+2003-05-01
+
+ * src/action.c: execute_actions(): テキストウィジェットが未選択の
+ 場合クラッシュするのを修正(Paul さんと Melvin さん thanks)。
+ * src/action.c
+ src/prefs_actions.c: 著作権表示に Claws チームの表示がなかったので
+ 追加。
+
+2003-04-28
+
+ * src/session.c:
+ session_send_msg()
+ session_send_data(): メモリリークとデータ送信のバグを修正。
+ * src/send_message.c:
+ send_message_smtp(): フォーカス管理を修正。
+
+2003-04-25
+
+ * src/smtp.[ch]: エラーが発生したら応答文字列を SMTPSession::error_msg
+ にセットするようにした。
+ * src/send_message.c: エラーが発生したらエラーダイアログを表示。
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb(): ここではエラーダイアログを表示
+ しない。
+
+2003-04-25
+
+ * src/session.c: session_close(): state が SESSION_DISCONNECTED で
+ ない場合のみ子プロセスを kill するようにした。
+ * src/send_message.c: send_cancel_button_cb()
+ src/inc.c: inc_cancel(): Session::state を SESSION_DISCONNECTED に
+ セットしないようにした。
+ * src/prefs.[ch]: prefs_write_*() の名前を変更。
+ * src/address.[ch]: 削除。
+
+2003-04-24
+
+ * src/compose.c: compose_template_apply(): 宛先を上書きするようにした。
+
+2003-04-23
+
+ * src/procheader.c: procheader_date_parse(): デバッグ用 print を削除。
+ * src/session.c: 各 g_print を debug_print に変更。
+ session_child_input(): 不要な session_close() を削除(FALSE を
+ 返した後結局 close される)。
+ * src/send_message.c: send_message_smtp(): g_print を debug_print
+ に変更。
+
+2003-04-23
+
+ * src/procheader.c: procheader_procheader_date_parse(): タイムゾーン
+ が不明の場合はローカルタイムゾーンのオフセットを追加しないように
+ した。
+ Y2K 対応コードを RFC 2822 に従うようにした。
+ procheader_scan_date_string(): タイムゾーン指定がない日付文字列
+ への対処。
+ * src/utils.c: remote_tzoffset_sec(): タイムゾーンが不明の場合は
+ -1 を返すようにした。
+
+2003-04-22
+
+ * src/action.[ch]: リファクタリング。 また MIME モードにおけるバグ
+ と、エラー時のメモリリークを修正。
+ action_update_msgview_menu(): 新規。
+ * src/messageview.[ch]: "Tools/Actions" メニューを追加。ウィンドウ
+ リストを保持。
+ messageview_get_selected_mime_part(): MessageView が MIME モード
+ のとき、選択されたパートの MimeInfo を返す。
+ * src/mimeview.[ch]: mimeview_get_selected_part(): 選択されたパート
+ の MimeInfo を返す。
+ * src/summaryview.[ch]: summary_get_selected_msg_list(): 選択された
+ メッセージの MsgInfo リストを返す。
+
+2003-04-21
+
+ * src/prefs_filter.[ch]: 元のメッセージのヘッダをセット済キーワード
+ として含むようにした。ウィジェットのサイズを修正。
+ * src/utils.[ch]: 大小文字を区別しないハッシュ用に str_case_equal()
+ と str_case_hash() を追加。
+
+2003-04-18
+
+ * src/procmsg.c: procmsg_get_filter_keyword(): 自動検出されるヘッダ
+ に X-Sequence を追加。
+ * src/action.[ch]
+ src/prefs_actions.c
+ src/compose.c
+ src/mainwindow.c: 関数名を修正。
+ get_user_string(): 独自の実装の代わりに input_dialog() を使用。
+
+2003-04-17
+
+ * src/codeconv.[ch]: conv_encode_header(): addr_field が TRUE の
+ 場合はエンコード文字列に '(' と ')' を含めないようにした。
+ * src/compose.c: compose_convert_header(): フラグ 'addr_field' を
+ 追加。
+
+2003-04-16
+
+ * src/prefs_actions.[ch]: アクション実行ルーチンを action.[ch] に
+ 分離。
+
+2003-04-16
+
+ * src/prefs_actions.c: 少しコードの整理。
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): EILSEQ の処理を修正。
+
+2003-04-16
+
+ * src/inc.c:
+ inc_recv_data_progressive()
+ inc_recv_data_finished()
+ inc_recv_message()
+ send_recv_message()
+ send_send_data_progressive()
+ send_send_data_finished(): assertion を追加。
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): 潜在的なメモリ破壊バグを
+ 修正。
+
+2003-04-16
+
+ * src/codeconv.[ch]: conv_iconv_strdup(): 一部のエンコーディング変換
+ (UTF-7 等)を混乱させていたため、ソースバッファにヌル文字を含めない
+ ようにした。
+
+2003-04-15
+
+ * src/procmsg.c: procmsg_get_filter_keyword(): ヘッダの改行を除去し、
+ List-Id ヘッダから ID を抽出するようにした。
+ * src/utils.[ch]: extract_one_parenthesis_with_skip_quote(): 削除。
+ extract_list_id_str(): List-Id ヘッダから ID 文字列を抽出。
+
+2003-04-15
+
+ * src/prefs_actions.c: claws ブランチからマージ。いくつかのバグ修正
+ と機能追加。
+
+2003-04-14
+
+ * src/compose.c: compose_parse_header(): 再編集時に不要な改行が含ま
+ れるバグを修正。
+ * src/imap.c
+ src/pop.c: 'occured' という typo を修正。
+
+2003-04-11
+
+ * src/compose.[ch]: アカウント変更時の自動署名切り替えを実装。
+ compose_insert_sig(): 現在の署名を置換するフラグを追加。
+ compose_get_signature_str(): 新規。署名の文字列を返す。
+ compose_insert_command_output(): 削除。
+ compose_select_account(): アカウント変更時に compose_insert_sig()
+ を呼ぶようにした。
+ compose_destroy(): UndoMain オブジェクトのメモリリークを修正。
+ Compose::sig_str: 新規。現在の署名の文字列を保持する。
+ * src/gtkutils.[ch]: gtkut_stext_find(): 新規。
+ gtk_stext_clear() を gtkut_stext_clear() に改名。
+ * src/utils.[ch]: get_wcs_len(): マルチバイト文字列のワイドキャラクタ
+ 長を返す。
+ normalize_newlines(): CR+LF と CR を LF に変換する。
+ get_command_output(): コマンドの出力を返す。
+
+2003-04-08
+
+ * src/procmsg.[ch]: procmsg_get_filter_keyword(): 新規。メッセージの
+ フィルタ用キーワードを返す。
+ * src/summaryview.c: summary_filter_open():
+ procmsg_get_filter_keyword() を使用。
+ * src/messageview.c: create_filter_cb(): 実装。
+
+2003-04-07
+
+ * src/inc.c:
+ inc_start()
+ inc_put_error(): エラー時にサーバの応答を表示するようにした。
+ * src/pop.[ch]: Pop3Session::error_msg を追加し、エラー時に
+ サーバの応答をセットするようにした。
+
+2003-04-04
+
+ * src/messageview.[ch]: 別ウィンドウのメッセージビューの文字コード
+ 強制指定をメインウィンドウから分離。
+ textview_show_message()
+ textview_show_part()
+ textview_add_part(): 指定されていれば MessageView::forced_charset
+ を使用。
+
+2003-04-03
+
+ * src/mainwindow.c: ファイルメニューを少し修正。
+ * src/menu.[ch]: item factory の rc 文字列を扱う関数を追加。
+ * src/messageview.[ch]: メニューを追加し、メインウィンドウのメニュー
+ ショートカットを引き継ぐようにした。
+ msginfo (表示時に複製される)を MessageView に追加。
+ * src/prefs_common.c: prefs_keybind_apply_clicked():
+ menu_factory_clear_rc() を使用。
+
+2003-03-28
+
+ * send_message.c: send_message_smtp():
+ SMTP AUTH の認証方法の強制を再び有効にした。
+ 認証に失敗したら一時パスワードをクリアするようにした。
+ * smtp.c: エラーが発生した場合は警告をログに出力し、
+ SMTPSession::error_val をセットするようにした。
+ * smtp.h: エラー値を enum に変更。 SMTPSession::error_val を追加。
+ * src/mbox.c: proc_mbox(): フォルダの更新を強制するようにした。
+
+2003-03-28
+
+ * src/pop.h: エラー値を enum に変更。
+ * src/pop.c: pop3_retr_recv(): inc_drop_message() が失敗したら
+ PS_IOERR を返すようにした。
+ pop3_ok(): 現在の状態に基づいて適切なエラー値を返すようにした。
+ エラーが発生した場合は警告をログに出力するようにした。
+
+2003-03-27
+
+ * src/nntp.[ch]
+ src/news.[ch]: リファクタリング。 NNTPSockInfo を削除し、 nntp.c
+ で NNTPSession を使用するようにした。
+
+2003-03-27
+
+ * src/inc.c: inc_pop3_session_do(): Session::state == SESSION_ERROR
+ の場合は適切なエラーを返すようにした。
+ * po/POTFILES.in: src/automaton.c, src/send.c を削除。
+ src/send_message.c を追加。
+
+2003-03-26
+
+ * src/pop.[ch]
+ src/session.c: POP3 の受信が壊れていたのを修正。
+ session_recv_data_from_sock_unescape(): 終端記号が現れるまで読み
+ こみ、実際のサイズも返すようにした。
+
+2003-03-25
+
+ * src/automaton.[ch]: 削除。
+ * src/session.c: デバッグ出力をいくらか削除。
+ * src/smtp.c: smtp_session_recv_msg(): サーバが HELO コマンドに対して
+ EHLO スタイルの応答を返したときのための対処。
+ EHLO を除いて全ての複数行応答を無視するようにした(あらゆるコマンド
+ に対して許可されているため)。
+
+2003-03-25
+
+ * src/session.[ch]
+ src/pop.c: ドットでエスケープされている行をもつメッセージの受信を
+ 修正。
+ session_recv_data(): エスケープ解除のフラグを追加。
+ session_recv_data_from_sock_unescape(): 新規。メッセージを行毎に
+ 受信し、ドットでエスケープされている行をエスケープ解除する。
+ 以前の対処を削除。
+ * src/defs.h: UI_REFRESH_INTERVAL を 40 msec に減少。
+
+2003-03-25
+
+ * src/pop.[ch]: 与えられたサイズと実際のサイズが異なる場合に受信に
+ 失敗する問題への対処。
+
+2003-03-24
+
+ * src/pop.c: pop3_retr_eom_recv(): あるサーバは時々正しくない
+ メッセージサイズを返すため、無効なメッセージ終端を無視するように
+ した。
+ * src/news.c: news_session_new(): NNTPSession オブジェクトをゼロ
+ クリアするようにした。 SockInfo の二重開放を防ぐため、
+ Session::sock を nntp_sock->sock で初期化しないようにした。
+ * src/imap.c: IMAPSession オブジェクトをゼロクリアするようにした。
+ imap_cmd_append(): SockInfo を閉じないようにした。
+
+2003-03-22
+
+ * src/pop.c: pop3_session_recv_msg(): STLS を修正。
+
+2003-03-22
+
+ * src/inc.[ch]
+ src/pop.[ch]: 新 I/O システムを使って再実装。
+ * src/session.[ch]: session_recv_msg(): 新規。
+ session_send_data_to_sock()
+ session_recv_data_from_sock(): 進捗通知の頻度を下げた。
+
+2003-03-22
+
+ * src/smtp.c: smtp_auth_recv(): CRAM-MD5 認証を修正。
+
+2003-03-20
+
+ * src/session.[ch]: session_start_tls(): 新規。
+ session_recv_msg(): static にした。
+
+2003-03-20
+
+ * 非同期ネットワーク I/O を実装。
+ * src/session.[ch]: 子プロセスを通してサーバと通信するための
+ インタフェース。
+ * src/smtp.[ch]
+ src/send_message.[ch]: 新 I/O システムを使って書き直した。
+ * src/socket.[ch]: *_write() を *_write_all() に名称変更し、
+ *_write() を単なる write() のラッパーとした。
+ * src/utils.c: get_outgoing_rfc2822_str(): 新規。メッセージを SMTP
+ または NNTP で送信するために修正する。
+ file_read_stream_to_str(): 新規。
+
+2003-03-12
+
+ * src/textview.c: textview_button_pressed(): URI のリンクの範囲を
+ 訂正。
+ * src/compose.c: compose_wrap_line_all_full(): 折り返しの問題への
+ 対処のため、 UTF-8 の3バイト以上で表現される文字を2文字幅、2
+ バイト文字を1文字幅として扱うようにした。
+
+2003-03-12
+
+ * src/utils.c: subject_compare_for_sort(): ヌル文字列を許可(サマリの
+ ソートを修正)。
+
+2003-03-11
+
+ * HTML リンクを正しく実装。
+ * src/html.[ch]: HTMLAttr, HTMLTag: 属性 / タグのための新規構造体。
+ html_get_tag(): 新規。タグを解析して HTMLTag オブジェクトを返す。
+ html_parse_tag(): <a> タグと 'href' 属性もパース。
+ * src/textview.c: textview_write_link(): 新規。リンク文字列を作成。
+
+2003-03-10
+
+ * src/compose.c: compose_wrap_line_all_full(): 無限ループ /
+ クラッシュバグを修正(Darko Koruga さん thanks)。
+ compose_write_to_file(): 変換に失敗したがとにかく送信したいとき
+ に正しい charset 要素を出力するようにした。
+
+2003-03-10
+
+ * src/headerview.c: headerview_show()
+ src/textview.c: textview_write_line(): マルチバイト環境での
+ クラッシュを防ぐために表示文字列から表示不能な文字を削除するように
+ した。
+ * src/codeconv.[ch]: conv_unreadable_locale(): 新規。
+ conv_localetodisp() から分離。
+
+2003-03-10
+
+ * src/procmsg.c: procmsg_cmp_by_subject()
+ src/summaryview.c: summary_cmp_by_subject(): 件名を比較するときに
+ Re: を無視するようにした。
+ * src/utils.[ch]:
+ subject_compare_for_sort()
+ trim_subject_for_sort(): 新規。
+
+2003-03-07
+
+ * version 0.8.11
+
+2003-03-07
+
+ * src/defs.h: デフォルトの sendmail コマンドに -i オプションを追加。
+
+2003-03-06
+
+ * src/codeconv.[ch]: 足りない文字エンコーディングと locale を追加。
+
+2003-03-06
+
+ * src/procmsg.[ch]:
+ procmsg_get_mark_sum()
+ procmsg_open_mark_file()
+ procmsg_read_mark_file(): ディレクトリパスの代わりに FolderItem
+ を受け取るようにした。
+
+2003-03-05
+
+ * src/codeconv.c: conv_encode_header(): 長い非 ASCII 文字列を
+ エンコードするときに折り返し境界にある空白が失われるバグを修正
+ (Sergey Vlasov さん thanks)。
+ ハード行長制限(998文字)にかかるまで長い単語中で強制的に折り返
+ さないようにした(空白のない長いアドレスリストが壊れる問題への
+ 対処)。
+
+2003-03-03
+
+ * src/prefs_account.c: gpg も ssl も使用しない場合にコンパイルに失敗
+ するのを修正。
+
+2003-03-03
+
+ * src/codeconv.c: UTF-8 locale 対応を修正。
+ conv_get_code_conv_func(): locale のエンコーディングが UTF-8 の
+ 場合は conv_noconv を返すようにした。 ISO-8859-* から locale
+ エンコーディングへの変換の場合は conv_latintodisp を返すようにした。
+ conv_convert(): conv_codeset_strdup() の代わりに conv_iconv_strdup()
+ を呼ぶようにした。
+ conv_codeset_strdup(): 一部のコードを conv_iconv_strdup() に移動。
+
+2003-02-28
+
+ * src/prefs_account.[ch]: 署名にコマンドの出力を使用するオプション
+ を追加。
+ * src/compose.c: compose_insert_sig(): 指定された場合はコマンドの
+ 出力を使用。
+ compose_insert_command_output(): 新規。
+
+2003-02-28
+
+ * src/main.c: main(): --status コマンドが実行された時に sylpheed
+ が起動していない場合はロックソケットを削除。
+ lock_socket_remove(): 新規。
+
+2003-02-27
+
+ * src/codeconv.c: conv_codeset_strdup(): 現在のコードセットが
+ US-ASCII (または POSIX) の場合は変換しないようにした。
+
+2003-02-21
+
+ * src/codeconv.c: conv_iconv_strdup(): 無効な文字をスキップして
+ 変換を続けるようにした。
+
+2003-02-21
+
+ * src/summaryview.c: summary_selected(): ウィジェットのセンシティ
+ ビティを常に更新するようにした。
+
+2003-02-20
+
+ * src/utils.c: tzoffset_sec(): GMT+12 より大きいまたは GMT-12 より
+ 小さいタイムゾーンで誤った日付を表示していたバグを修正。
+
+2003-02-18
+
+ * src/prefs_common.[ch]
+ src/sourcewindow.c: ソースウィンドウのサイズを記憶するようにした。
+ * src/md5.c: gcc 3.1 でのコンパイルの問題を修正。
+
+2003-02-17
+
+ * src/about.c: about_create(): 著作件表示を修正。
+
+2003-02-17
+
+ * src/colorlabel.c: カラーラベルの矩形に pixmap を使わず、矩形を
+ 描画するようにし、パレットベースの画面のカラーマップに従うよう
+ にした(長期に渡る Solaris でのクラッシュを修正 - Alfons
+ Hoogervorst さん thanks)。
+
+2003-02-17
+
+ * src/procheader.c: procheader_date_parse(): 月の文字列を大小文字を
+ 区別しないようにした。
+ * src/prefs_filter.c: prefs_filter_close(): セレクションリストが
+ 空の場合のクラッシュを修正。
+
+2003-02-14
+
+ * src/quote_fmt_parse.y: gettext 翻訳可能な文字列を削除。
+ * src/unmime.c: unmime_header(): コード変換に失敗したときは壊れた
+ 文字を削除。
+ * src/codeconv.c: conv_encode_header(): 75 文字以上の長い単語が
+ 入力されるとヘッダを壊していたバグを修正。
+
+2003-02-13
+
+ * src/codeconv.c: isprintableeuckanji(): 1バイト目で 0xf4 を超える
+ 値を許可しないようにした(glibc の abort() 問題を修正)。
+ * src/html.c: html_read_line(): 現在の locale で表示不能な文字を
+ 削除。
+
+2003-02-11
+
+ * src/utils.[ch]:
+ trim_subject_for_compare(): trim_subject() を改名。
+ trim_subject(): 新規。件名の先頭の[...]または(...)を削除する。
+ * src/prefs_folder_item.c
+ src/folder.[ch]:
+ サマリ/返信時の件名を省略するオプションを追加。
+ * src/summaryview.c: summary_set_header(): フォルダオプションが設定
+ されていれば件名を短縮。
+ * src/compose.c: compose_reply_set_entry(): フォルダオプションが設定
+ されていれば件名を短縮。
+
+2003-02-09
+
+ * src/codeconv.c:
+ LBREAK_IF_REQUIRED(): 最初の単語の前で改行しないようにした(X-Face
+ ヘッダの問題を修正)。
+ conv_encode_header(): 1単語97文字まで許可するようにした。
+
+2003-02-07
+
+ * src/filter.c: filter_match_condition(): 2番目の条件が正規表現を
+ 無視していたバグを修正。
+ * src/news.h: NewsGroupInfo: メッセージ番号に guint を使用
+ (グループリストダイアログのメッセージ数を修正) (Thorsten Maerz
+ さん thanks)。
+
+2003-02-06
+
+ * src/codeconv.c: conv_encode_header(): コード変換失敗時に segfault
+ を起こすバグを修正。
+ conv_get_charset_str()
+ conv_get_charset_from_str(): ハッシュテーブルを使用して最適化。
+
+2003-02-06
+
+ * src/quote_fmt_parse.y:
+ SHOW_MESSAGE_NO_SIGNATURE, SHOW_QUOTED_MESSAGE_NO_SIGNATURE:
+ "\n-- \n" のみを署名の区切りとして扱うようにした。
+
+2003-02-05
+
+ * src/gtkutils.[ch]: gtkut_ctree_node_prev(): 新規。
+ * src/summary_search.c: summary_search_execute(): 閉じたノードも
+ 検索するようにした。
+
+2003-02-05
+
+ * src/codeconv.c:
+ conv_unreadable_latin(): 0x7f を表示不可文字に含めた。
+ conv_localetodisp(): デフォルトで 8bit 文字を削除しないようにした。
+ conv_get_current_charset()
+ conv_get_outgoing_charset(): locale 名の末尾に "@euro" が追加され
+ ていれば ISO-8859-15 を返すようにした。
+ * src/compose.c: compose_write_to_file(): コード変換に失敗したとき
+ 変換元と変換先のエンコーディングを表示するようにした。
+
+2003-02-04
+
+ * version 0.8.10
+
+2003-02-04
+
+ * src/procmsg.h: WRITE_CACHE_DATA(): 速度を少し向上(Colin Leroy
+ さん thanks)。
+ * src/mh.c: mh_get_msginfo(): NULL チェックを追加(Thorsten Maerz
+ さん thanks)。
+
+2003-02-03
+
+ * src/textview.c: textview_write_line(): conv が NULL の場合は
+ 変換しないようにした。
+
+2003-02-03
+
+ * src/codeconv.[ch]:
+ conv_guess_encoding() を conv_guess_ja_encoding() に変更。
+ conv_localetodisp(): 新規。(仮定された)現在の locale 文字列から
+ 表示不可な文字を削除する。
+ conv_codeset_strdup(): dest_code が NULL でかつ現在の locale
+ エンコーディングが US-ASCII ならば ISO-8859-1 に変換するようにした。
+ conv_get_code_conv_func(): 変換先文字コードに US-ASCII が指定され
+ ていれば conv_ustodisp を返すようにした。
+ * src/textview.c: textview_write_line(): 変換に失敗した場合は
+ strncpy2() の代わりに conv_localetodisp() を使用。
+
+2003-01-31
+
+ * src/codeconv.c: conv_iconv_strdup()
+ src/imap.c:
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): いくつかのシステムで警告を除去
+ するために ICONV_CONST マクロを使用。
+ * src/codeconv.c: conv_iconv_strdup(): iconv() の出力をフラッシュ
+ し、バッファを切り詰めるようにした。
+ 変換に失敗したら不完全な文字列の代わりに NULL を返すようにした。
+
+2003-01-30
+
+ * src/summaryview.c: summary_execute(): 現在選択されているノードが
+ 削除される場合は適切なノードを選択するようにした。
+ * src/gtkutils.[ch]: gtkut_ctree_node_is_selected(): 新規。指定した
+ ノードが選択されていれば TRUE を返す。
+
+2003-01-30
+
+ * src/summaryview.c: summary_status_show(): 削除あるいは移動時に
+ たまにクラッシュするのを修正。
+
+2003-01-29
+
+ * src/codeconv.c: conv_unreadable_eucjp(): EUC-JP の正当性チェック
+ をより厳密にした。
+ isprintableeuckanji(): 新規。 EUC-JP の正当性チェックにテーブルを
+ 使用するようにした。
+
+2003-01-17
+
+ * version 0.8.9
+
+2003-01-17
+
+ * INSTALL を更新。
+
+2003-01-17
+
+ * src/quoted-printable.c: qp_encode_line(): 元の文字列に CRLF が
+ あった場合に改行が重複するバグを修正。
+ * src/utils.[ch]
+ canonicalize_str(): 新規。新規に確保された正規化された文字列を
+ 返す。
+ uncanonicalize_file(): 新規。正規化を解除する(CRLF -> LF)。
+ uncanonicalize_file_replace(): 新規。
+ * src/compose.c: 処理の前に常に本文を正規化し、戻る前に正規化を
+ 解除するようにした。
+
+2003-01-17
+
+ * src/procmime.c: procmime_get_encoding_for_charset(): ロシア語
+ charset の場合は ENC_8BIT を選ぶようにした。
+ * src/compose.c: compose_write_to_file(): 8bit メッセージを署名する
+ 場合は base64 を使用するようにした。
+
+2003-01-16
+
+ * src/prefs_common.c: prefs_send_create(): Content-Transfer-Encoding
+ の設定の説明を追加。
+
+2003-01-16
+
+ * src/codeconv.c: ロシア語 locale のための locale_table の修正
+ (Sergey Vlasov さん thanks)。
+ * src/procmime.c: procmime_get_encoding_for_charset(): ISO-8859-5,
+ KOI8-*, Windows-1251 に対して ENC_BASE64 を返すようにした。
+ * src/compose.c: compose_attach_append(): message/rfc822 に対して
+ 正しい Content-Transfer-Encoding をセットするようにした。
+ compose_write_to_file(): ユーザ定義の Content-Transfer-Encoding
+ を有効にした。
+ * src/prefs_common.[ch]: ユーザ定義の Content-Transfer-Encoding
+ のオプションを追加。
+
+2003-01-15
+
+ * src/quoted-printable.[ch]: qp_encode_line(): 行が改行で終わらない
+ 場合のバグを修正。
+
+2003-01-15
+
+ * quoted-printable 符号化を実装。
+ * src/quoted-printable.[ch]: qp_encode_line(): 新規。
+ * src/compose.c:
+ compose_write_to_file()
+ compose_write_attach(): quoted-printable 符号化を実装。
+ compose_attach_property_create(): quoted-printable メニュー項目を
+ 有効にした。
+ * src/procmime.c: procmime_get_encoding_for_charset(): ISO-8859-*
+ と CP125* 文字セットの場合は ENC_QUOTED_PRINTABLE を返すように
+ した。
+ * src/Makefile.am: libiconv 対応のために sylpheed_LDADD に
+ $(LIBICONV) を追加。
+
+2003-01-14
+
+ * src/folderview.c
+ src/summaryview.c
+ src/utils.[ch]: get_abbrev_newsgroup_name(): ニュースグループ名
+ の省略方法を改良。
+
+2003-01-14
+
+ * configure.in: iconv 検出結果を表示。
+
+2003-01-13
+
+ * src/codeconv.[ch]: libjconv から iconv() へ移行。
+ conv_iconv_strdup(): 新規。
+ * src/about.c
+ src/imap.c
+ src/mainwindow.c
+ src/prefs_common.c: HAVE_LIBJCONV を HAVE_ICONV に置換。
+
+2003-01-10
+
+ * src/compose.c
+ src/folderview.c
+ src/prefs_folder_item.c: 英語の修正(property -> properties)。
+ * src/prefs_filter.c: エントリが保存されていなければ警告するように
+ した。
+ prefs_filter_dialog_to_filter(): 新規。
+
+2003-01-09
+
+ * src/codeconv.c: conv_encode_header(): 改行の後に生の文字列を出力
+ してしまうバグを修正。
+ * INSTALL を更新。
+
+2003-01-08
+
+ * src/codeconv.[ch]: コードの整理と最適化。
+ conv_code_converter_new()
+ conv_convert(): libjconv 使用時に conv_get_code_conv_func() で
+ 得られる関数を使用するようにした。
+ conv_codeset_strdup(): コードの整理。
+ conv_get_code_conv_func(): 変換先文字コードの引数を追加し、一般化
+ した。
+
+2003-01-06
+
+ * src/codeconv.c: LBREAK_IF_REQUIRED(): 文字が続く場合のみ改行する
+ ようにした。
+ * src/compose.c: compose_convert_header(): 末尾の空白を削除。
+ * src/customheader.c: custom_header_read_str(): 名前と値の空白を
+ 削除。
+ * src/prefs_customheader.c: prefs_custom_header_clist_set_row():
+ 名前と値の空白を削除。
+
+2002-12-25
+
+ * version 0.8.8
+
+2002-12-25
+
+ * src/codeconv.c: conv_encode_header(): 無効な文字が現われると無限
+ ループに陥るバグを修正。
+
+2002-12-25
+
+ * src/procmsg.[ch]: procmsg_sort_msg_list(): 新規。メッセージリスト
+ をソートする。
+ * src/summaryview.c: summary_show(): summary_sort() を削除
+ (folder_item_get_msg_list() 内部で行われるため)。これにより
+ サマリ表示の速度を向上。
+ マクロを使ってサマリのソート関数を整理。
+ * src/mh.c
+ src/imap.c
+ src/news.c
+ src/folder.[ch]: folder_item_get_msg_list(): FolderItem::sort_key
+ がセットされていればあらかじめソートしたリストを返すようにした。
+ FolderSortKey enum に SORT_BY_TO を追加。
+ * src/mainwindow.c: 「表示/ソート/宛先順」を追加。
+
+2002-12-20
+
+ * version 0.8.7
+
+2002-12-20
+
+ * src/codeconv.c: conv_encode_header(): 改行時の余分な空白の修正。
+ * src/compose.c: compose_convert_header(): 改行するために常に
+ 文字列を conv_encode_header() に渡すようにした。
+
+2002-12-20
+
+ * src/textview.c: textview_make_clickable_parts(): 誤った email
+ アドレスのパースを修正。
+
+2002-12-19
+
+ * src/defs.h: DEFAULT_BROWSER_CMD を追加。
+ * src/mimeview.c: mimeview_view_file()
+ src/prefs_common.c: prefs_other_create()
+ src/utils.c: open_uri(): デフォルトの web ブラウザを mozilla に
+ 変更し、 'netscape -remote' 中の 'remote' コマンド(非公開)を
+ 'new-window' に変更。
+
+2002-12-19
+
+ * src/compose.c: compose_send_control_enter(): メッセージ/送信
+ がアクセラレータキーを持っていない場合に Ctrl-Enter を押すと
+ クラッシュする問題を修正(Sergey Vlasov さん thanks)。
+
+2002-12-18
+
+ * src/mainwindow.c:
+ set_charset_cb()
+ sort_summary_cb()
+ sort_summary_type_cb(): メニュー項目をチェック解除したときの
+ 不要な処理を防ぐようにした。
+
+2002-12-18
+
+ * src/main.c: X なしでリモート操作を可能にするために gtk_init()
+ の前にコマンドラインオプションを処理するようにした(Ruslan N.
+ Balkin さん thanks)。
+ * src/codeconv.c: conv_encode_header(): 潜在的なバッファオーバー
+ フローを修正。
+
+2002-12-18
+
+ * src/Makefile.am: $(target_alias) を $(target_triplet) に変更
+ (autotools の仕様変更の模様)。
+
+2002-12-18
+
+ * src/imap.c: サーバが NAMESPACE コマンドをサポートしていないとき
+ LIST コマンドを使ってパスセパレータを取得するようにした(Brian
+ Sammon さんのパッチに基づく)。
+ imap_parse_list(): パスセパレータを返すための引数を追加。
+ imap_get_namespace_by_list(): 新規。
+
+2002-12-17
+
+ * src/addr_compl.c: add_address(): デバッグ出力を削除。
+ * src/gtkutils.[ch]: gtkut_window_popup()
+ src/mainwindow.c: main_window_popup(): ウィンドウのポップアップの
+ 挙動を修正する Sergey Vlasov さんのパッチを適用(thanks!)
+ * src/account.c: account_edit_create(): row_move シグナルに
+ signal_connect_after を使用して行位置のバグを修正。
+ account_row_moved(): CList を半ページスクロールするようにした。
+ * src/prefs_filter.c: prefs_filter_row_move(): CList を半ページ
+ スクロールするようにした。
+ * src/summaryview.c: summary_reply(): 表示されているメッセージが
+ 選択されている場合のみ選択部テキストを使用するようにした(Sergey
+ Vlasov さん thanks)。
+
+2002-12-13
+
+ * src/codeconv.c: conv_encode_header(): MIME ヘッダエンコーディング
+ のルーチンを再実装。現在の locale がシングルバイトであれば
+ Q 符号化を使用するようにした。
+ * src/utils.[ch]: is_next_nonascii(): ワイドキャラクタ文字列の代わり
+ にマルチバイト文字列をとるようにした。コントロールコードを非
+ ASCII とみなすようにした。
+ get_next_word_len(): 新規。次の単語の長さを返す。
+ is_next_mbs(), find_wspace(): 削除。
+ * src/quoted-printable.[ch]: 新規。
+ qp_decode_line(): QP 行を1行デコードする。
+ qp_decode_q_encoding(): MIME ヘッダ中の Q 符号化された文字列を
+ デコードする。
+ qp_get_q_encoding_len(): 文字列を Q 符号化したときの長さを返す。
+ qp_q_encode(): 文字列を Q 符号化する(RFC 2047)。
+ * src/unmime.c: quoted-printable 関連の関数を quoted-printable.c
+ に移動。
+
+2002-12-05
+
+ * src/send.c: send_message_local(): ドット1文字だけの行をエスケープ
+ するようにした(postfix の sendmail コマンドがそこで止まるため)。
+
+2002-12-05
+
+ * src/send.c: send_message_local(): 先頭がドットの行をエスケープ
+ しないようにした(Sergey Vlasov さん thanks)。
+
+2002-12-03
+
+ * autogen.sh: 現在の ltmain.sh を上書きするために
+ 'libtoolize --force --copy' を追加。
+ * acconfig.h: 削除。
+ * configure.in: GPGME の最低バージョンを 0.3.10 に上げた。
+ XIM のチェックを修正。
+ * ac/check-type.m4
+ ac/gnupg-check-typedef.m4: コメント用の引数を追加。
+
+2002-11-29
+
+ * src/imageview.[ch]: 衝突する imageview_show_image() の定義を修正
+ (Thorsten Maerz さん thanks)。
+
+2002-11-28
+
+ * src/compose.c: compose_entry_append(): サブジェクトエントリで
+ ", " を追加しないようにした。
+ * src/codeconv.c: conv_get_outgoing_charset(): テーブルから送信
+ 文字コードを得るようにした(日本語以外の locale では現在無効)。
+ conv_get_current_locale(): LC_CTYPE も参照するようにした。
+
+2002-11-27
+
+ * README: 隠し設定の説明を追加。
+
+2002-11-27
+
+ * src/prefs_common.[ch]: 全般の設定ダイアログを再構成。
+ enable_hscrollbar と bold_unread を隠しオプションにした。
+
+2002-11-26
+
+ * src/quote_fmt_parse.y: パースエラーを修正(Andreas Hinz さん thanks)。
+
+2002-11-26
+
+ * src/account.[ch]:
+ account_find_from_message_file()
+ account_find_from_msginfo(): 新規。指定したメッセージの 'From:'、
+ 'X-Sylpheed-Account-Id:'、'AID:' のようなヘッダからアカウントを
+ 検索する。
+ * src/compose.c:
+ compose_reedit(): メッセージの以前の作成時のアカウントを復元。
+ compose_write_headers(): 草稿モードの場合 'X-Sylpheed-Account-Id:'
+ ヘッダを追加。
+
+2002-11-26
+
+ * src/compose.c: compose_entry_set() を使ってコードを整理
+ (gtk_entry_set_text() を直接使用しない)。
+
+2002-11-25
+
+ * src/imap.c: imap_parse_namespace(): メモリリークを修正。
+
+2002-11-22
+
+ * autotools と libtool を最新版に更新。
+ * configure.in: AC_PREREQ(2.50) を追加。
+
+2002-11-22
+
+ * src/textview.c: textview_set_font(): UTF-8 locale でのメッセージ
+ 表示の修正(Sergey Vlasov さん thanks)。
+
+2002-11-21
+
+ * src/imageview.[ch]: imageview_show_image(): 指定されればウィンドウ
+ サイズに合うように画像をリサイズするようにした。
+ * src/prefs_common.[ch]: 「添付画像をリサイズする」オプションを追加。
+
+2002-11-20
+
+ * SMTP の実装をリファクタリング。
+ * src/session.h: Session に ui_func を追加。
+ * src/smtp.[ch]: 接続ルーチンを smtp_session_new() から smtp_connect()
+ に分離。
+ smtp_ok() 以外の全ての関数の引数を SockInfo から SMTPSession
+ に変更。
+ 各関数から UI コールバックを呼ぶようにした。
+ * src/send.c: send_message_smtp(): UI 更新のコードを
+ send_progress_dialog_update() に分離。
+
+2002-11-18
+
+ * src/smtp.[ch]: smtp_from() から smtp_auth() を分離。
+ * src/send.c: send_message_smtp(): smtp_auth() を呼び出し、その状態
+ をダイアログに表示。
+
+2002-11-18
+
+ * src/filter.c: strmatch_regex(): 拡張正規表現を使用(Fabien Devaux
+ さん thanks)。
+ * src/main.c: main(): assortrc -> filterrc 移行のためのコードを
+ 削除。
+ * src/gtkutils.c: gtkut_font_load(): 現在の locale が C または
+ POSIX の場合のみ gdk_font_load() を使用。
+ gtkut_stext_is_uri_string(): URI 文字列に "www." を含むようにした。
+ * src/textview.c: textview_make_clickable_parts(): URI 文字列に
+ "www." を含むようにした。
+
+2002-11-15
+
+ * version 0.8.6
+
+2002-11-13
+
+ * src/textview.c: textview_add_part(): 署名の状態を異なる色で表示。
+
+2002-11-12
+
+ * src/folder.c: folder_write_list_recursive(): To/Cc/Bcc/Reply-To
+ の文字列をエスケープするようにした。
+
+2002-11-11
+
+ * src/codeconv.c: conv_encode_header(): libjconv 未使用時に日本語
+ 以外の locale でヘッダの B-encoding を有効にした。
+
+2002-11-11
+
+ * src/inc.[ch]: INC_IO_ERROR を IncState に追加。それに対応する
+ エラーメッセージも追加。
+ inc_pop3_session_do(): PS_IOERR のとき INC_NOSPACE の代わりに
+ INC_IO_ERROR をセット。
+
+2002-11-07
+
+ * src/prefs_account.[ch]: 使われていないため
+ prefs_account_save_config() を削除。
+ * src/procmime.[ch]: procmime_mimeinfo_free_all() が全ての場合に
+ 使えるため procmime_mimeinfo_free() を削除。
+
+2002-11-06
+
+ * src/account.c: account_get_special_folder(): F_INBOX に対応し、
+ コードを整理。
+
+2002-11-06
+
+ * src/compose.[ch]: ComposeEntryType: COMPOSE_* を COMPOSE_ENTRY_*
+ に変更し、 COMPOSE_ENTRY_{REPLY_TO,SUBJECT,FOLLOWUP_TO} を追加。
+ compose_reply()
+ compose_forward()
+ compose_redirect(): FolderItem を引数に加え、 item の設定を反映
+ させるようにした。
+ compose_entry_set(): 新規。
+ compose_entry_append(): コードの整理。
+ compose_entries_set_from_item(): ComposeMode を引数にとるようにし、
+ FolderItem::use_auto_to_on_reply が有効になるようにした。
+ * src/summaryview.c: summary_reply(): folder_item を
+ compose_{reply,forward,redirect}() に渡すようにした。
+
+2002-11-05
+
+ * src/gtkutils.[ch]:
+ gtkut_font_load(): 新規。現在の locale によって font または fontset
+ を自動的に選択する。
+ gtkut_font_load_from_fontset(): 新規。フォントセット文字列から
+ フォントセットの代わりに単一のフォントの読み込みを試みる。
+ * src/alertpanel.c
+ src/folderview.c
+ src/headerview.c
+ src/summaryview.c: C または POSIX locale で 8-bit 文字を表示
+ できない問題に対処(fontset の代わりに font を使用)。
+ * src/compose.c
+ src/sourcewindow.c
+ src/textview.c: gtkut_font_load*() を使用してコードを整理。
+
+2002-10-29
+
+ * src/mh.c: mh_get_msginfo(): 正しいメッセージ番号をセット。
+
+2002-10-29
+
+ * src/folder.[ch]: 新規仮想メソッド Folder::get_msginfo() を追加。
+ メッセージ番号に対応する新規 MsgInfo を返す。
+ folder_item_get_msginfo(): 新規。
+ * src/imap.[ch]: imap_get_msginfo(): 新規。
+ * src/mh.[ch]: mh_get_msginfo(): 新規。
+ * src/news.[ch]: news_get_msginfo(): 新規。
+
+2002-10-28
+
+ * src/codeconv.c: conv_euctojis(): 不正なコードが出現したら無限
+ ループに陥るバグを修正。
+
+2002-10-25
+
+ * src/codeconv.c: conv_codeset_strdup()
+ src/html.[ch]: html_read_line(): 変換失敗の警告を出さないように
+ した。
+ enum HTMLState に HTML_CONV_FAILED を追加。
+
+2002-10-24
+
+ * フォルダ毎の自動指定アドレスを実装(まだ作業中)。
+ * src/compose.[ch]: compose_new(): 引数に FolderItem を追加し、
+ (mailto が空であれば)それからエントリを設定。
+ compose_entry_append(): 必要であればメニューを有効にするようにした。
+ compose_entries_set_from_item(): 新規。
+ * src/folder.[ch]: auto_to, use_auto_to_on_reply, auto_cc, auto_bcc,
+ auto_replyto を FolderItem に追加し、 apply_sub を ac_apply_sub
+ に名称変更。
+ folder_build_tree(), folder_read_folder_func(),
+ folder_write_list_recursive(): 上記メンバを追加。
+ * src/prefs_folder_item.[ch]: 自動指定アドレスを追加。
+ * src/pop.[ch]: Pop3State::prev_folder を削除。
+
+2002-10-11
+
+ * src/compose.c: ファイルマネージャからファイルを「移動」することで
+ ファイルをドロップできるようにした(Alfons さん thanks)。
+
+2002-10-10
+
+ * compose_reply_set_entry(): ML 返信のとき Reply-To を List-Post
+ より優先させるようにした。
+
+2002-10-09
+
+ * src/gtksctree.[ch]: gtk_sctree_set_anchor_row(): 新規。
+ * src/summaryview.c: summary_step(): 正しいセレクションアンカーを
+ 失うバグを修正。
+ summary_key_pressed(): gtk_ctree_select() の代わりに
+ gtk_sctree_select() を使用。
+ * src/inc.[ch]
+ src/pop.c
+ src/recv.c: ディスクフルとソケットエラーを区別するようにした
+ (Colin Leroy さん thanks)。
+
+2002-10-08
+
+ * src/account.c: account_edit_prefs(): 未使用の変数を削除。
+ * src/compose.[ch]: ComposeMode の WITH_QUOTE/WITHOUT_QUOTE フラグ
+ を分離。
+ compose_reply()
+ compose_reply_set_entry(): 返信形式を一つの引数で受け取るように
+ した。
+ * src/summaryview.c: summary_reply(): 条件分岐を削減。
+
+2002-10-08
+
+ * src/compose.c: compose_redirect(), compose_reedit(): 行終端から
+ CR を取り除くようにした(Sergey Vlasov さん thanks)。
+ * src/folderview.c: 「フォルダツリーを再スキャン」を「フォルダツリー
+ を再構築」に改名。
+
+2002-10-08
+
+ * src/folder.[ch]: 仮想メソッド Folder::remove_msgs() を追加。
+ * src/imap.[ch]: メッセージを一度に削除する imap_remove_msgs()
+ を実装。
+
+2002-10-07
+
+ * src/account.[ch]: account_open(): 新規。アカウント設定ダイアログ
+ を開き、終了時に UI に反映させる。
+ * src/folderview.c:
+ folderview_button_pressed()
+ folderview_property_cb(): リモートアカウントのルートフォルダの
+ プロパティを要求されたらアカウント設定ダイアログを開くようにした。
+
+2002-10-07
+
+ * src/account.c: account_destroy(): フォルダ中のアカウント情報への
+ 参照を解除するようにした。
+ * src/folder.[ch]: folder_unref_account_all(): 新規。全フォルダ中
+ の指定したアカウント情報への参照を解除する。
+ * src/folderview.c:
+ folderview_rm_imap_server_cb()
+ folderview_rm_news_server_cb(): folder_destroy() がアカウント情報
+ を参照しているため Folder を先に削除するようにした。
+
+2002-10-04
+
+ * src/account.c: account_find_from_item(): 正しいアカウントを選択
+ していなかったバグを修正。
+ * inc_pop3_session_do():
+ SSL の初期化に失敗したときのリソースのリークを修正。
+ キャンセルされたら一時的なイベントループからすぐに抜けるようにした。
+
+2002-10-04
+
+ * src/account.[ch]: account_find_from_item(): 新規。
+ * src/compose.c:
+ compose_reply(), compose_forward(), compose_redirect()
+ src/mainwindow.c: compose_cb(): 作成時に最適なアカウントを選択
+ するようにした。
+ * src/folder.[ch]: FolderItem::apply_sub を追加。
+ * src/menu.[ch]: menu_find_option_menu_index(): 新規。指定した
+ データを含むオプションメニューのインデックスを検索する。
+ * src/prefs_folder_item(): 作成タブと、フォルダアカウントの設定を
+ 追加。
+
+2002-10-04
+
+ * configure.in: lber ライブラリの検出に $LDAP_LIBS を追加。
+
+2002-10-03
+
+ * version 0.8.5
+
+2002-10-03
+
+ * src/procmsg.c: procmsg_msginfo_get_full_info(): メモリリークを
+ 修正し、エラーチェックを追加。
+
+2002-10-03
+
+ * src/compose.[ch]: フラグ Compose::use_newsgroups を追加し、
+ Compose::orig_account を削除。
+ compose_check_for_valid_recipient(): 有効なエントリのみをチェック。
+ compose_write_headers()
+ compose_redirect_write_headers(): エントリが有効になっている場合
+ のみ Newsgroups ヘッダを追加。
+ compose_send(): ニュースアカウントからメールアカウントを見つける
+ 方法を From アドレスをマッチさせるように変更。
+ * src/send.c: send_message_queue(): ニュースメッセージの送信待機
+ を有効にした。
+ * src/news.[ch]: news_post_stream(): 新規。
+
+2002-10-03
+
+ * configure.in: lber を先にチェックし、 ldap のチェック時に
+ $LDAP_LIBS を使用。
+
+2002-10-02
+
+ * po/*.po: クラッシュを引き起こす多くのフォーマット文字列のミス
+ を修正(Sergey Vlasov さん thanks)。
+
+2002-10-02
+
+ * src/procheader.c: procheader_parse_stream(): 完全パースの対象
+ に Cc ヘッダを追加。
+ * src/procmsg.[ch]: procmsg_msginfo_get_full_info(): 新規。指定
+ された情報から完全なメッセージ情報を返す。
+ * src/compose.c: compose_reply(), compose_forward(): Cc ヘッダの
+ ために完全なメッセージ情報を得るようにした。
+
+2002-10-02
+
+ * src/inc.c: inc_account_mail(), inc_all_account_mail(): IMAP4 と
+ NNTP のアカウントをチェックした後それらのフォルダのサマリを更新
+ するようにした。
+
+2002-10-01
+
+ * version 0.8.4
+
+2002-10-01
+
+ * src/prefs_common.c: prefs_compose_create(): 返信ボタンのオプション
+ のラベルを修正。
+ * configure.in: LDAP ライブラリ検出の AC_CHECK_LIB() の5番目の引数
+ に -lldap と -llber を追加。
+
+2002-09-30
+
+ * INSTALL
+ INSTALL.jp: 更新。
+
+2002-09-30
+
+ * src/mainwindow.c: 返信ボタンの挙動を通常の返信と ML への返信
+ とで切り替えるようにした。
+ * src/prefs_common.[ch]: 返信ボタンの機能を切り替えるオプション
+ を追加。
+
+2002-09-27
+
+ * src/compose.c: compose_new(): 効果が無く、ハングを引き起こすだけ
+ であるため XIM の workaround を削除。
+
+2002-09-26
+
+ * src/compose.[ch]: compose_reply(): ML への返信用のフラグを追加。
+ compose_parse_header(): List-Post ヘッダもパース。
+ compose_reply_set_entry(): ML への返信に対応(ML のアドレスが
+ 見つからなければ通常の返信に fallback する)。
+ * src/mainwindow.c
+ src/prefs_common.c
+ src/summaryview.c: 返信メニューを再構成し、「メーリングリストに
+ 返信」を追加。
+ * src/utils.[ch]: scan_mailto_url(): 新規。 mailto URL をスキャンし、
+ 新規に確保したパラメータを返す。
+
+2002-09-25
+
+ * src/account.c: account_read_config_all(): アカウント情報を設定
+ ファイルで初期化する前にデフォルトに設定するようにした。
+ * src/prefs_account.[ch]: prefs_account_new(): 新規。デフォルトの
+ 設定で初期化されたアカウント情報構造体を新規に作成して返す。
+
+2002-09-24
+
+ * src/addr_compl.c:
+ replace_address_in_edit(): newtext が NULL かどうかをチェック。
+ completion_window_button_press(): メモリリークを修正。
+ * src/pop.c: LOOKUP_NEXT_MSG(): recv_time が RECV_TIME_KEEP である
+ メッセージを期限切れにしないようにした。
+ pop3_getrange_uidl_recv(): ac_prefs->getall がセットされている
+ ときのみ get_all フラグをセット。
+ pop3_retr_recv(): フィルタで受信されなかったメッセージを削除
+ しないようにし、その場合 recv_time を RECV_TIME_KEEP に設定する
+ ようにした。
+ * src/pop.h: enum RecvTime を追加。
+ * src/inc.c: inc_drop_message(): フィルタで受信されない場合一時
+ メッセージファイルを unlink するようにした。
+
+2002-09-20
+
+ * src/mainwindow.c: 「編集/スレッドを選択」メニューを追加。
+ * src/summaryview.[ch]: コンテキストメニューに「スレッドを選択」を
+ 追加。
+ summary_select_thread(): 新規。現在のスレッドのメッセージを全て
+ 選択する。
+
+2002-09-19
+
+ * src/rfc2015.c: check_signature(): エラー処理とメモリリークを修正。
+
+2002-09-19
+
+ * src/rfc2015.c: check_signature(): 検証前にファイルパートの最後の
+ 空行を正しく除去し、正規化するようにした(Evolution その他 MUA
+ との非互換性を解消するはず)。
+ * src/utils.[ch]: copy_file_part(): 新規。指定した範囲のファイル
+ ストリームを別のファイルにコピーする。
+
+2002-09-19
+
+ * src/compose.c: compose_write_to_file(): 8-bit テキストの署名時に
+ は BASE64 エンコードを強制するようにした(Colin Leroy さん thanks)。
+
+2002-09-16
+
+ * src/prefs_common.c: prefs_send_create(): Cyrillic (Windows-1251)
+ 用の charset 文字列を修正。
+
+2002-09-15
+
+ * version 0.8.3
+
+2002-09-15
+
+ * src/codeconv.c: ru_RU.CP1251 の charset を Windows-1251 に変更し、
+ bg_BG locale を追加。
+
+2002-09-11
+
+ * src/compose.c: account_activated(): 選択されたアカウントに応じて
+ メニュー項目とエントリの状態を変更。
+ compose_select_account(): 新規。タイトルバー、メニュー項目、
+ エントリの状態を変更する。
+
+2002-09-11
+
+ * src/inc.c: inc_mail(): inc_spool() がエラーで帰ったときの
+ new_msgs を訂正。
+ open_inbox_on_inc がセットされているとき、受信中にサマリビューを
+ リフレッシュしないようにした。
+
+2002-09-10
+
+ * src/summaryview.c: summary_show(): open_inbox_on_inc がセット
+ されていてもリフレッシュするようにした(サマリのリフレッシュの
+ 問題を防ぐため)。
+ * src/imap.c: remove*_numbered_files() を呼ぶ前にディレクトリの
+ 存在をチェックして警告を除去。
+
+2002-09-06
+
+ * src/prefs_common.c: 英語を訂正。
+
+2002-09-06
+
+ * src/prefs_common.[ch]: オプション「新規ウィンドウで開いたときのみ
+ メッセージを既読としてマーク」を追加。
+
+2002-09-04
+
+ * src/folder.c:
+ folder_tree_destroy()
+ folder_write_list_recursive(): 整合性チェックを追加。
+ * src/imap.c: imap_scan_tree(): folder->node が NULL で session
+ を取得できない場合、空のフォルダノードを作成するようにした
+ (Alfons さんの提案に基づく)。
+
+2002-09-03
+
+ * src/textview.c: textview_key_pressed(): GDK_Delete イベントを
+ SummaryView に渡すようにした。
+ * src/summaryview.c: summary_key_pressed(): MIME モードのときに
+ 正しい TextView をスクロールするようにした。
+
+2002-09-02
+
+ * src/news.c: news_scan_group(): 誤ったメッセージ数計算を修正。
+
+2002-08-30
+
+ * 主要な POP3 のリファクタリング。
+ * src/inc.[ch]: Pop3State, inc_pop3_state_new(),
+ inc_pop3_state_destroy(), inc_get_uidl_table(), そして
+ inc_write_uidl_list() を pop.c に移動。
+ Pop3State::folder_table と Pop3State::inc_state を IncSession
+ に移動。
+ inc_start()
+ inc_put_error(): lockbusy 状態を追加。
+ inc_pop3_session_do(): inc_state を Pop3State::error_val から得る
+ ようにした。
+ inc_cancel(): ここで automaton を terminate せずにフラグをセット
+ するだけにしてクラッシュを回避。
+ * src/pop.[ch]
+ pop3_getauth_pass_recv()
+ pop3_getauth_apop_recv(): lockbusy 状態をチェック。
+ pop3_retr_recv(): Pop3State::cancelled フラグをチェック。
+ * src/automaton.[ch]: Automaton に 'cancelled' フラグを追加。
+ automaton_input_cb(): cancelled フラグが真の場合 terminate 。
+ * sylpheed.desktop: Type=Internet を Type=Application に修正。
+ Categories=Application;Network; を追加。
+
+2002-08-29
+
+ * src/inc.[ch]
+ src/pop.c
+ src/progressdialog.c: 状態カラムに詳細な情報を表示。
+ Pop3State に cur_total_recv_bytes を追加。
+ * src/prefs_common.[ch]: 完了時に受信ダイアログを閉じるかどうかを
+ 指定するオプションを追加。
+
+2002-08-28
+
+ * src/folder.[ch]: folder_get_path(): 新規。 Folder のルートパスを
+ 返す。
+ * src/imap.c
+ src/news.c
+ imap_folder_destroy()
+ imap_remove_msg()
+ imap_remove_all_msg()
+ news_folder_destroy(): Folder / メッセージを削除するときに
+ キャッシュディレクトリ / ファイルを削除するようにした。
+ * src/utils.c:
+ file_exist()
+ is_dir_exist()
+ is_file_entry_exist(): 引数が NULL かどうかをチェック。
+ remove_all_files()
+ remove_numbered_files()
+ remove_expired_files(): エラー時のメモリリークを修正。
+
+2002-08-28
+
+ * src/folder.[ch]
+ src/imap.[ch]
+ src/mh.[ch]
+ src/news.[ch]
+ src/session.[ch]
+ src/smtp.[ch]: Folder と Session のデストラクタを仮想メソッドに
+ した。
+
+2002-08-27
+
+ * src/compose.c: 通常行の結合を自動改行時のみ行うようにした。
+ * src/main.c: GnuPG の警告メッセージを修正。
+ * src/about.c: about_create(): コンパイル済機能一覧を修正。
+ * configure.in: LDAP ライブラリのチェックを改良(Alfons さん thanks)。
+
+2002-08-26
+
+ * version 0.8.2
+
+2002-08-26
+
+ * src/compose.c:
+ join_next_line()
+ compose_wrap_line_all(): インデントされていない行を結合する変更
+ を元に戻した。
+ * NEWS
+ TODO
+ TODO.jp: 更新。
+ * configure.in: 少なくとも gpgme-0.3.5 を要求するようにした。
+
+2002-08-23
+
+ * src/alertpanel.c: alertpanel_create(): 少し修正。
+ * NEWS を修正。
+
+2002-08-23
+
+ * NEWS を更新。
+
+2002-08-23
+
+ * src/alertpanel.c: alertpanel_create(): レイアウトを修正。
+ * src/rfc2015.c: check_signature(): エラー時に abort しないようにした。
+
+2002-08-22
+
+ * src/compose.c: compose_wrap_line_all(): ちらつきを抑えるために
+ 必要なときのみ widget を freeze するようにした。
+
+2002-08-21
+
+ * src/compose.c: 行折り返しを改良。
+ join_next_line()
+ compose_wrap_line_all(): インデントされていない行も結合。
+ dump_text(): マルチバイト文字も正しく扱うようにした。
+
+2002-08-21
+
+ * src/compose.c: compose_wrap_line_all(): 自動改行のための修正
+ (行の上限位置で空白が入力されたら次の行に移動)。
+
+2002-08-19
+
+ * src/inc.c: inc_get_uidl_table(): Martin Kluge さんによって報告
+ されたメモリリークを修正。
+
+2002-08-16
+
+ * src/mh.c: mh_scan_tree_recursive(): 混乱を避けるために Maildir
+ フォルダチェックを無効にした。
+
+2002-08-16
+
+ * src/folder.[ch]: folder_item_get_msg_list(): メソッド
+ Folder::get_msg_list() へのラッパーを追加。
+ * src/account.c: account_edit_prefs(), account_delete():
+ folderview_rescan_all() の代わりに folderview_set_all() を使用。
+ * src/folderview.[ch]:
+ folderview_check_new_all(): 新規。全フォルダを更新する。
+ folderview_rescan_tree(): 実行前に確認するようにした。
+ folderview_rescan_all(): もう使われないためコメントアウト。
+ folderview_update_item_foreach(): サマリの更新のフラグを追加。
+ * src/inc.c: inc_finished(): prefs_common.scan_all_after_inc が
+ セットされている場合のみサマリを更新するようにした。
+ inc_drop_message(): サマリの更新を強制するために対象フォルダの
+ mtime を 0 にセット。
+ inc_start(), get_spool(): フォルダビューを更新するときにサマリも
+ 更新するようにした。
+ * src/mainwindow.c: 「ファイル - フォルダツリーを再スキャン」を
+ 「ファイル - 全フォルダの新着メッセージをチェック」に変更。
+
+2002-08-09
+
+ * src/compose.c: compose_write_to_file(): 指定した場合メッセージ本文
+ をクリア署名するようにした。
+ compose_clearsign_text(): 新規。文字列をクリア署名したもので
+ 置き換える。
+ * src/prefs_account.c: クリア署名のオプションを追加。
+ * src/rfc2015.c: rfc2015_clearsign(): 新規。
+ pgp_sign(): クリア署名のフラグを追加。
+ * src/utils.[ch]: get_tmp_file(): 新規に確保された一意のファイル名
+ を返すようにした(呼び出し側で解放する必要がある)。
+ str_write_to_file(), file_read_to_str(): 新規。
+
+2002-08-08
+
+ * src/procmsg.c: procmsg_read_mark_file(): メモリリークを避ける
+ ためキーの重複をチェック。
+
+2002-08-08
+
+ * src/base64.c: memcpy() のために string.h を include した。
+ * src/gtksctree.c: 関数 abs() の代わりにマクロ ABS() を使用。
+ * src/prefs_account.c
+ src/prefs_common.c: sys/socket.h 中の関数 send() と衝突しないように
+ 'send' を 'p_send' に名称変更した。
+ * src/mainwindow.c: 不要な関数をコメントアウトした。
+ * src/utils.c: canonicalize_file_replace(): 警告メッセージを訂正。
+
+2002-08-08
+
+ * src/utils.[ch]: get_tmp_file(): 新規。 ~/.sylpheed/ 中のテンポラリ
+ ファイル用のディレクトリを返す。
+ * src/main.c: ~/.sylpheed/ 中にテンポラリディレクトリを作成。
+ * src/compose.c
+ src/inc.c: ~/.sylpheed/ 中にテンポラリファイルを作るようにし、
+ ファイル名を修正。
+ compose_exec_ext_editor(): g_get_tmp_dir() が '/tmp' 以外を返した
+ ときにテンポラリファイルの作成に失敗するバグを修正。
+
+2002-08-08
+
+ * src/utils.c: copy_file(): unlink するときに dest_bak != NULL か
+ どうかをチェック。
+
+2002-08-08
+
+ * src/utils.[ch]: canonicalize_file_replace(): 与えられたファイルと
+ 一時ファイルが同じファイルシステム上になかった場合にファイルの
+ 置き換えに失敗するバグを修正。
+ copy_file(): バックアップを保持するかどうかのフラグを追加。
+ move_file(): 移動先ファイルを上書きするかどうかのフラグを追加。
+
+2002-08-07
+
+ * src/socket.[ch]: IPv6 が有効な場合にリンクに失敗するのを修正。
+ * src/select-keys.c: キー選択ダイアログを修正。
+
+2002-08-07
+
+ * src/socket.[ch]: my_gethostbyname(): 新規。
+ * src/utils.c: get_domain_name(): 短いホスト名の代わりに FQDN を
+ 返すようにした(Bob Woodside さん thanks)。
+ * src/template.c: デバッグメッセージの冗長度を下げた。
+
+2002-08-06
+
+ * src/prefs_common.[ch]: obsolete なデフォルト署名鍵の設定を削除。
+ * src/utils.c: canonicalize_file(): fwrite() のエラーチェックを
+ 訂正。
+
+2002-08-06
+
+ * src/compose.c: compose_write_to_file():
+ 暗号化/署名の前に行末を正規化するようにした(他の MUA との相互運用
+ 性が修正されるはず)。
+ 不要な strdup を除去。
+ 草稿メッセージを暗号化/署名しないようにした。
+ * src/utils.[ch]:
+ canonicalize_file(), canonicalize_file_replace(): 新規。
+ * src/passphrase.c
+ src/select-keys.c: g_message() を debug_print() と g_warning()
+ に変更。
+ * src/mimeview.c: mimeview_check_signature(): 不要な MIME 構造の
+ スキャンを削除。
+ * src/textview.c: textview_add_part(): 署名のステータスを TextView
+ に表示。
+ * src/rfc2015.c
+ src/sigstatus.c: 翻訳可能な文字列といくつかの MIME ヘッダを修正。
+
+2002-08-06
+
+ * src/procmsg.c: procmsg_save_to_outbox(): 送信待ちから保存する
+ ときに一時ファイルを消去するのを忘れていたのを修正。
+
+2002-08-05
+
+ * src/compose.c
+ src/passphrase.[ch]
+ src/rfc2015.[ch]
+ src/prefs_account.[ch]
+ src/prefs_common.[ch]: claws ブランチから GnuPG 関連をマージ。
+ いくつかのメッセージを修正。
+
+2002-08-05
+
+ * src/textview.c: textview_scan_header(): メモリリークを修正
+ (Alfons さん thanks)。
+
+2002-08-04
+
+ * src/prefs_actions.c: execute_actions(): create_io_dialog() を
+ 正しい条件ブロックに入れた。
+
+2002-08-01
+
+ * src/compose.c: compose_wrap_line_all(): 文字バッファの初期化を
+ 修正。
+ * src/utils.c:
+ log_print()
+ log_message()
+ log_warning()
+ log_error(): ログメッセージにタイムスタンプを追加。
+
+2002-07-31
+
+ * src/socket.c: typo を修正(HAVE_SYS_SELECT -> HAVE_SYS_SELECT_H)
+
+2002-07-31
+
+ * src/socket.c: socket I/O タイムアウトを実装。
+ fd_recv(): 新規。
+ * src/pop.c: 正しくエラーをチェックしてエラー値を返すようにした。
+
+2002-07-31
+
+ * src/prefs_actions.c: アクションの入出力ダイアログを遅延させずに
+ 表示するようにした。ウィンドウをインセンシティヴにする代わりに
+ ダイアログをモーダルにした。 UI を整理。
+
+2002-07-29
+
+ * --attach コマンドラインオプションを実装。
+ * src/main.c:
+ Cmd::attach_files: ファイルパスを保存する新規メンバ。
+ parse_cmd_opt(): --attach オプションを追加。 --compose オプション
+ が暗黙に指定される。
+ prohibit_duplicate_launch()
+ lock_socket_input_cb(): "compose_attach" メッセージを追加。
+ * src/compose.c
+ src/mainwindow.c
+ src/textview.c: compose_new_with_recipient() を compose_new() に
+ 名称変更し、添付ファイルのための引数を追加。
+
+2002-07-29
+
+ * src/logwindow.c: 隠しているときは GtkText ウィジェットをフリーズ。
+ log_window_append(): メッセージと警告のヘッダを変更。
+
+2002-07-26
+
+ * src/news.c: 自動キャッシュ削除を実装。
+ news_delete_expired_caches(): 新規。
+ news_get_article_list(): 存在しないメッセージがリストから削除
+ されないバグを修正。
+ * src/procmsg.[ch]: procmsg_get_last_num_in_msg_list():
+ procmsg_get_last_num_in_cache() を名称変更。
+ * src/utils.[ch]: remove_expired_files(): 新規。
+
+2002-07-26
+
+ * src/inc.c
+ inc_mail(): 取込に外部コマンドを使ったときはサマリの更新を強制
+ するようにした。
+ inc_all_account_mail(): スプールのチェックの失敗時のバグを修正。
+
+2002-07-25
+
+ * version 0.8.1
+
+2002-07-24
+
+ * src/addressbook.c
+ src/editaddress.c
+ src/editgroup.c
+ src/editldap_basedn.c
+ src/importldif.c
+ src/prefs_common.c: gtk_editable_get_chars() が返す文字列を free
+ していなかったメモリリークを修正。少しコードを整理。
+ * src/importldif.h
+ src/vcard.h: C++ スタイルのコメントを除去。
+
+2002-07-23
+
+ * src/codeconv.c: conv_encode_header(): マルチバイトと us-ascii
+ 文字を両方含む文字列のエンコードの問題を修正。
+
+2002-07-23
+
+ * src/utils.c: remove_numbered_files(): ディレクトリを unlink()
+ しないようにした。
+ * src/codeconv.c:
+ conv_get_code_conv_func(): charset が指定されていなければ
+ conv_anytodisp() を返すようにした。
+ conv_unmime_header_overwrite()
+ conv_unmime_header(): ヘッダをデコードする前に conv_anytodisp()
+ するようにした。
+
+2002-07-14
+
+ * version 0.8.0
+
+2002-07-14
+
+ * src/compose.c: 「ツール/アクション」メニューを追加。
+
+2002-07-12
+
+ * src/base64.c: BASE64VAL() マクロのマイナーな修正。
+
+2002-07-11
+
+ * src/base64.c: base64_decode(): バッファオーバーランのバグを修正。
+
+2002-07-11
+
+ * src/codeconv.c
+ src/compose.c
+ src/smtp.c
+ src/unmime.c
+ src/base64.[ch]: BASE64 エンコード / デコードルーチンを書き直した。
+ base64_encode(), base64_decode(): 新規。
+ * src/rfc822.[ch]: 削除。
+ * COPYING
+ src/about.c: fetchmail の著作権表示を削除。
+
+2002-07-10
+
+ * src/codeconv.c
+ src/procmime.c
+ src/unmime.[ch]: MIME デコードルーチンを書き直した。
+ unmime_header()
+ unmime_quoted_printable_line(): 新規。
+ * src/procheader.c:
+ procheader_get_one_field()
+ procheader_get_unfolded_line(): CR も削除するようにした。
+
+2002-07-08
+
+ * libkcc: ソースツリーから削除。
+ * COPYING
+ src/about.c: libkcc の著作権表示を削除。
+ * src/codeconv.c: conv_guess_encoding(): スピードアップのために
+ 最初に ASCII コードをチェック。
+ * src/prefs_actions.c: 不要なスペース/タブを除去。
+
+2002-07-05
+
+ * src/prefs_actions.c: コーディングスタイルに準拠。
+ UI のデザインを修正。
+ * src/mainwindow.c: main_window_set_menu_sensitive(): 複数の
+ メッセージが選択されているときアクションメニューを有効に
+ するようにした。
+
+2002-07-05
+
+ * src/prefs_actions.[ch]: claws から「アクション」機能をマージ。
+ update_actions_menu(): メニュー削除を簡略化。
+ * src/mainwindow.c: 「アクション」メニューをツールと設定に追加。
+
+2002-07-04
+
+ * src/codeconv.[ch]: conv_jistoeuc(), conv_euctojis(),
+ conv_sjistoeuc(), conv_guess_encoding() を実装。 libkcc に依存
+ しないようにした。
+
+2002-07-04
+
+ * configure.in: strchr のチェックを追加。
+
+2002-07-02
+
+ * src/prefs_common.[ch]
+ src/inc.c: 受信エラーダイアログを抑制するオプションを追加。
+
+2002-07-01
+
+ * src/account.c: account_find_from_address(): ヘッダの複数のアドレス
+ に対応。
+
+2002-06-28
+
+ * src/gtksctree.[ch]: 行の移動後に無効にならないように
+ GtkSCTree::anchor_row を gint から GtkCTreeNode* に変更。
+ gtkutils.c に依存しないようにした。
+ * src/prefs_common.[ch]
+ src/summaryview.c: summary_selected(): サマリビューでカーソルキー
+ を押したときメッセージを表示するオプションを追加。
+
+2002-06-28
+
+ * configure.in
+ src/Makefile.am
+ src/compose.c: クロスコンパイル時に正しいシステム名を表示するように
+ "host_alias" を "target_alias" に変更(Patrice Mandin さん thanks)。
+
+2002-06-27
+
+ * src/prefs_account.[ch]: SMTP AUTH の認証方式を強制指定する
+ オプションメニューを追加。
+ * src/send.c
+ src/smtp.[ch]: smtp_from(), smtp_auth(): SMTP AUTH の認証方式を
+ 指定する引数を追加。
+ smtp_ehlo(): RFC に準拠しない AUTH 応答を許可するようにした。
+
+2002-06-25
+
+ * src/prefs_common.[ch]
+ src/compose.c: 「入力時に自動改行」を実装。
+
+2002-06-25
+
+ * src/summaryview.[ch]
+ src/mainwindow.c: 「移動/{次の,前の}新着メッセージ」メニューを追加。
+ 少しコードを整理。
+
+2002-06-20
+
+ * src/folderview.c
+ src/prefs_common.[ch]: フォルダビューで垂直スクロールバーの
+ ポリシーを指定する隠しオプションを追加。
+
+2002-06-19
+
+ * src/messageview.[ch]:
+ messageview_copy_clipboard(): MIME モードでテキストをコピーでき
+ ないバグを修正。
+ messageview_get_current_textview(): 新規。
+ messageview_get_text_widget(): 削除。
+ * src/quote_fmt_parse.y: msginfo が空でもメッセージを引用するように
+ した。
+ * src/compose.[ch]: 「引用としてペースト」を実装。
+ text_inserted(): 新しい "insert_text" シグナルのコールバック。
+ Compose::paste_as_quotation が TRUE ならペーストするテキストに
+ 引用符を付ける。
+
+2002-06-19
+
+ * src/compose.c: ファイルの Content-Type が text/* の場合は、その
+ 内容をチェックして最適な Content-Transfer-Encoding を指定
+ (湯浅さん thanks)。
+
+2002-06-18
+
+ * src/textview.c: textview_key_pressed(): メニューショートカットを
+ 作動させるためにキープレスイベントをメインウィンドウに渡すように
+ した(Alfons さん thanks)。
+
+2002-06-18
+
+ * src/folder.c: folder_build_tree(): 繰り下げを防ぐために mtime に
+ atoi() の代わりに strtoul() を使用。
+ * src/imap.c:
+ imap_move_msg()
+ imap_move_msgs_with_dest()
+ imap_copy_msgs_with_dest(): 複数メッセージのコピー/移動を妨げる
+ バグを修正。
+ imap_parse_envelope()
+ imap_cmd_envelope(): メッセージの完全な情報を取得し、パーサを
+ 単純化するために ENVELOPE の代わりに RFC822.HEADER を使用。
+ スレッド構築の際に References ヘッダが無視されていたバグを修正。
+ imap_parse_one_address()
+ imap_parse_address(): 削除。
+ imap_get_header(): 新規。 RFC822 ヘッダを読みこみ新たに確保された
+ 文字列を返す。
+ * src/procheader.[ch]: procheader_parse() を procheader_parse_stream()
+ に変更し、異なるインタフェースを追加。
+
+2002-06-17
+
+ * po/zh_TW.Big5.po: クラッシュを起こすミスを修正。
+
+2002-06-15
+
+ * version 0.7.8
+
+2002-06-13
+
+ * src/inc.c: inc_get_uidl_table(): 無効な時間がハッシュテーブルに
+ 挿入される可能性のあるバグを修正。
+ inc_write_uidl_list(): 少しコードを整理。
+ * src/mainwindow.c: main_window_get_current_state():
+ 空フォルダでの状態を実行不可にした。
+ * src/summaryview.c: summary_sort():
+ 空フォルダでソートしないようにした。
+ * src/pop.c: 少しコードを整理。
+
+2002-06-12
+
+ * src/prefs_account.c: CREATE_RADIO_BUTTONS(): typo を修正し、
+ ラジオボタンの挙動を修正。
+
+2002-06-11
+
+ * POP3 で「N 日後にメッセージを削除」機能を実装。
+ * src/inc.[ch]:
+ inc_get_uidl_table()
+ inc_write_uidl_list(): UIDL リストファイルの位置を RC_DIR/uidl-*
+ から RC_DIR/uidl/* に移動。各 UIDL に受信時刻を追加。
+ src/main.c: main(): RC_DIR/uidl/ ディレクトリを作成。
+ src/pop.[ch]: LOOKUP_NEXT_MSG(): ここで期限切れメッセージを削除。
+ Pop3MsgInfo に recv_time を追加。
+ src/prefs_account.[ch]: メッセージを残す日数のオプションを追加。
+
+2002-06-09
+
+ * version 0.7.7
+
+2002-06-07
+
+ * src/folder.c: folder_set_missing_folders(): 特別フォルダのタイプ
+ が変更された場合、起動時にそれらが増殖するバグを修正。
+ * src/folderview.c: folderview_remove_mailbox_cb(): ラベルを修正。
+
+2002-06-04
+
+ * src/compose.c: compose_reply(), compose_forward(): lockup を起こす
+ ので直前の変更を元に戻した。
+
+2002-06-04
+
+ * src/compose.c: compose_reply(), compose_forward(): 署名部分を
+ 自動改行しないようにした。
+ compose_new_with_recipient(): 起動直後の XIM の問題を回避。
+
+2002-06-04
+
+ * src/mainwindow.c: ソートの昇順 / 降順を別のメニュー項目から指定
+ できるようにした。
+ 「表示/ソート/ソートしない」メニュー項目を追加。
+ * src/summaryview.[ch]: summary_sort(): ソートタイプの引数を追加。
+
+2002-05-31
+
+ * 永続的なソート順を実装。
+ * src/folder.[ch]:
+ folder_build_tree(): 'sort_key' と 'sort_type' 属性を読み込む。
+ folder_write_list_recursive(): ソート状態を書き込む。
+ src/mainwindow.c
+ src/summaryview.[ch]: summary_show(): 必要であればソートする。
+ 降順ソートの場合先頭のノードを選択。
+ SummarySortType とソート状態の変数を SummaryView から削除。
+
+2002-05-30
+
+ * src/account.c
+ src/news.[ch]
+ src/nntp.[ch]
+ src/prefs_account.[ch]: SSL 上の NNTP を有効にした。
+ * src/nntp.c: nntp_group(): GROUP コマンドが一度失敗したときに
+ MODE READER コマンドを発行して再試行するようにした(broken な
+ ニュースサーバでの問題を回避できるらしい)。
+
+2002-05-30
+
+ * faq/it/*.html: DOS 改行を修正。
+ * faq/*/*.html: ">" を &quot; に変更。
+
+2002-05-29
+
+ * src/prefs_account.c: prefs_account_protocol_activated(): SSL タブ
+ の不要なフレームを隠すようにした。
+
+2002-05-29
+
+ * src/pop.[ch]
+ src/inc.c
+ src/prefs_account.[ch]: POP3 で STLS コマンドを有効にした。
+ * src/account.c: account_clist_set_row(): TLS の設定を表示。
+
+2002-05-28
+
+ * src/compose.c: compose_send_later_cb(): 「リダイレクト」機能に
+ 対応。
+ * src/imap.[ch]
+ src/ssl.h
+ src/prefs_account.[ch]: IMAP4 で STARTTLS コマンドを有効にした。
+ * src/send.c
+ src/smtp.[ch]: SSLSMTPType の代わりに SSLType を使用。
+
+2002-05-28
+
+ * src/utils.[ch]: make_dir(): mkdir() と chmod() のラッパー。
+ * src/compose.c: compose_create(): 不要な行を削除。
+
+2002-05-27
+
+ * src/news.c: news_scan_group(): 特定の場合に誤った値をセットする
+ バグを修正。
+ * src/prefs_account.c: 高度な設定 - フォルダ の設定の英語を修正。
+
+2002-05-23
+
+ * src/textview.c: textview_show_message(), textview_show_part():
+ GtkSText *text が正しくないオブジェクトを指していたバグを修正。
+ textview_add_part(): RFC822 ヘッダを追加するときに GtkSText を
+ フリーズするようにした。
+ textview_show_part(): シングルパート MIME メッセージをテキストと
+ して表示できないバグを修正。
+
+2002-05-22
+
+ * src/compose.c: compose_redirect_write_to_file():
+ change_file_mode_rw() の対象を訂正。 fclose() が成功したかどうか
+ をチェック。エラーが起こった場合は不完全なファイルを unlink 。
+
+2002-05-22
+
+ * src/compose.c:
+ compose_create(): リダイレクトモード時は草稿関連のメニューを無効
+ にするようにした。
+ compose_redirect_write_to_file(): fwrite() のエラーハンドリング
+ を修正。
+ * src/prefs_common.c: 「差出人が自分の場合は `差出人' カラムに宛先
+ を表示する」オプションをデフォルトでオフにした。
+
+2002-05-21
+
+ * src/compose.[ch]: 「リダイレクト」(または Bounce)機能を実装。
+ claws ブランチの実装に基づく。
+ compose_redirect(): 新規ウィンドウを作成し、編集不可にする。
+ compose_redirect_write_to_file(): いくつかを除いて元のメッセージ
+ のヘッダと本文をコピー。
+ compose_redirect_write_headers(): さらに "Resent-*" ヘッダを追加。
+ compose_create(): リダイレクトモード時のメニューセンシティビティ
+ をセット。
+
+2002-05-20
+
+ * src/codeconv.c: conv_encode_header(): エンコードされた文字列と
+ 次の折り返された文字列との間に不要なスペースが挿入されるバグを
+ 修正(とみたまさひろさん thanks)。
+
+2002-05-19
+
+ * src/mainwindow.[ch]: リファクタリングを行った。
+ main_window_toggle_message_view(): summary_toggle_view_real() を
+ ここに移動。
+ * src/messageview.[ch]: messageview_is_visible(): 新規。
+ * src/summary_search.c
+ src/summaryview.[ch]: SummaryView::msg_is_toggled_on: 削除。
+ 代わりに messageview_is_visible() を使用。
+
+2002-05-17
+
+ * src/mainwindow.c: 「すべてのスレッドを展開/閉じる」メニューを追加。
+ * src/summaryview.[ch]:
+ summary_expand_threads(), summary_collapse_threads(): 新規。
+
+2002-05-17
+
+ * src/mainwindow.c: 「/表示/表示・非表示/フォルダツリー」と
+ 「/表示/表示・非表示/メッセージビュー」トグルメニューの挙動を修正。
+ 「/表示/サマリビューを切替」メニューを削除し、その機能を
+ 「/表示/表示・非表示/メッセージビュー」に統合。
+ main_window_set_widgets(): トグルメニュー項目の状態を変更。
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): menurc 文字列を
+ 更新。
+
+2002-05-16
+
+ * src/mimeview.c: mimeview_set_multipart_tree(): テキスト以外の
+ シングルパート MIME の内容を message/rfc822 のパートの子として表示。
+ * src/procmime.c:
+ procmime_mimeinfo_next(): content-type がシングルパート MIME の
+ message/rfc822 パートのための修正。
+ procmime_scan_multipart_message(): 入れ子になった message/rfc822
+ パートの修正。 message/rfc822 の内容のサイズを訂正。
+ * src/textview.c: textview_show_part(): multipart/* と message/rfc822
+ の内容を展開。コードの整理。
+ textview_add_parts(): 新規。あるパート以下の全てのパートを textview
+ に追加する。
+ textview_clear(): body_pos と cur_pos をリセット。
+
+2002-05-16
+
+ * src/addr_compl.c: 挙動を向上させるために修正。
+ get_address_from_edit(): 鉤括弧中のカンマを無視。
+ completion_window_apply_selection(): 新規。現在の clist の選択行
+ の適用のみ行う。
+ completion_window_accept_selection(): 削除。
+ address_completion_complete_address_in_entry(): 少しコードを整理。
+ ここでエントリ中のアドレスを置換しない。
+ completion_window_select_row(): clist の選択を常に適用。
+ completion_window_key_press(): 選択をここでは適用しない。
+
+2002-05-15
+
+ * src/imap.c: imap_create_folder(): サブフォルダを含むフォルダを
+ 作成するために末尾のディレクトリセパレータを保つようにした。
+
+2002-05-14
+
+ * src/foldersel.c: ツリーを大小文字を区別せずにソート。
+ * src/mainwindow.c: allsel_cb()
+ src/messageview.c: messageview_select_all(): MIME ビューでの
+ 「すべて選択」を修正。
+ * src/mainwindow.c: 全般・アカウントの設定ボタンをツールバーから
+ 削除。
+
+2002-05-13
+
+ * src/compose.c: compose_account_option_menu_create(): ac->name が
+ NULL かどうかをチェック。
+
+2002-05-12
+
+ * version 0.7.6
+
+2002-05-12
+
+ * manual/ja/*: 日本語マニュアルを更新(今井さん thanks)。
+ manual/en/*: 英語マニュアルを更新。
+ * faq/de/*
+ faq/it/*: ドイツ語とイタリア語マニュアルを追加。
+ * faq/en/*
+ faq/es/*
+ faq/fr/*: FAQ を更新。
+ * src/manual.[ch]
+ src/mainwindow.c: ドイツ語とイタリア語を追加。
+
+2002-05-11
+
+ * src/prefs_account.c: IMAP または News アカウントを作成するときに
+ 「全受信で受信」オプションをデフォルトでオフにするようにした。
+
+2002-05-11
+
+ * src/imap.c: imap_scan_tree(): namespace をプレフィクスに使用しない
+ ようにした。
+ * src/prefs_folder_item.c: 識別子パスも表示。
+ table を使ってレイアウト。編集不可なエントリをウィンドウの背景色
+ で表示。
+ * src/procmime.c: procmime_get_tmp_file_name(): 安全なファイル名を
+ 生成。
+
+2002-05-11
+
+ * src/automaton.[ch]: Automaton に UI コールバックを追加。
+ * src/inc.c
+ src/pop.c: inc_progress_update() を直接呼ぶ代わりにコールバックを
+ 使用。
+ pop3_getrange_uidl_recv(): 「全受信」オプションが指定されている
+ ときは LAST に fallback しないようにした。
+
+2002-05-10
+
+ * src/folderview.c: 簡略表示されたニュースグループを正しくソート
+ するようにした。
+
+2002-05-10
+
+ * src/folderview.c
+ src/prefs_common.[ch]
+ src/summaryview.c: ニュースグループ名を簡略表示する最小の文字数
+ を指定するオプションを追加。
+
+2002-05-09
+
+ * src/folderview.c: folderview_check_new(): 選択できないフォルダを
+ スキップ。
+ * src/summaryview.c: コンテキストメニューに「振り分けルールを作成」
+ を追加。
+ * src/imap.c: コードの整理。
+ imap_scan_tree_recursive(): 各呼び出し時にパス区切りを取得。
+ imap_get_path_separator(): 新規。
+
+2002-05-08
+
+ * src/imap.[ch]: others/shared フォルダの namespace に対応(作業中)。
+ imap_parse_namespace(): others/shared namespace もパース。
+ imap_find_namespace(): others/shared namespace も検索。
+ * src/utils.[ch]:
+ strchr_parenthesis_close(): 閉じ括弧へのポインタを返す。
+ strsplit_parenthesis(): 括弧のリストを文字列の配列に分割。
+
+2002-05-08
+
+ * src/procheader.c: procheader_date_parse(): "Mon,6 May 2002 20:31:12
+ +0800" のような日時文字列をパースできないバグを修正。
+ procheader_scan_date_string(): 新規。 procheader_date_parse() から
+ 文字列スキャン部分を分離。
+
+2002-05-07
+
+ * src/summary_search.c: summary_search_execute(): サマリの行を選択
+ するときにロックを解除するようにした(Martin Schaaf さん thanks)。
+ * src/summaryview.c: summary_set_column_titles(): Win/Mac のスタイル
+ に合うように矢印の方向を逆にした。
+
+2002-05-02
+
+ * src/compose.c: compose_write_headers(): 必要であれば自分のアドレス
+ を引用符で囲むようにした。コードの整理。 Newsgroups と Cc を
+ カスタムヘッダで上書きしないようにした。
+ * src/imap.c: imap_add_msg(): 追加したメッセージの UID を返すように
+ した。
+ * src/compose.c: compose_queue(): queue フォルダの存在をチェック。
+ * src/imap.c: QUOTE_IF_REQUIRED(): その他の IMAP スペシャルキャラクタ
+ も引用符で囲むようにした。
+ imap_open(): 不要な引数を削除。
+
+2002-04-25
+
+ * src/utils.[ch]: trim_string(): 新規。指定した長さより長い文字を
+ 切り詰め、 "..." を追加する。
+ * src/folderview.c: ダイアログを表示するときフォルダ名を切り詰める
+ ようにした。
+
+2002-04-23
+
+ * src/imap.c: imap_create_folder(): root の INBOX フォルダにプレ
+ フィクスを付けないようにした。
+ * src/folderview.c: folderview_select()
+ src/summary_search.c: summary_search_execute(): 検索中にサマリ
+ ビューをロックするようにした(Martin Schaaf さん thanks)。
+
+2002-04-21
+
+ * version 0.7.5
+
+2002-04-21
+
+ * sylpheed*.png: 若居さんによる新しい app アイコンを追加(thanks!)。
+
+2002-04-21
+
+ * src/summaryview.c: summary_show(): 残ったマークを処理しないバグを
+ 修正。
+ * src/account.c: account_edit_prefs(): アカウント名が空の場合の
+ クラッシュバグを修正。
+ * src/prefs_account.c: prefs_account_apply(): アカウント名が空の場合
+ エラーダイアログを表示。
+ * src/imap.c: ログの量を減らすためにいくつかの log_print() を
+ debug_print() に変更。
+
+2002-04-21
+
+ * src/mh.c: mh_get_new_msg_filename(): 新規。新規メッセージのファイル
+ 名を返す。
+ mh_add_msg()
+ mh_do_move()
+ mh_do_move_msgs_with_dest()
+ mh_copy_msg()
+ mh_copy_msgs_with_dest(): mh_get_new_msg_filename() を使用。
+ * src/utils.[ch]: is_file_entry_exist() を追加。 stat() が成功したら
+ TRUE を返す。
+ * src/imap.c:
+ imap_fetch_msg(): 必要であれば FETCH の前にメールボックスを SELECT
+ するようにした。
+ imap_scan_folder(): UIDNEXT の値を用いて last_num をセット。
+ imap_select(): SELECT の必要がなければすぐに返るようにした。
+ 現在選択中のメールボックスのパスを保存。
+ imap_status(): UIDNEXT を追加。
+
+2002-04-20
+
+ * src/folder.c: folder_item_scan(): 警告を除去。
+ * src/inputdialog.[ch]: input_dialog_combo(): 大小文字の区別の指定の
+ ための引数を追加。
+
+2002-04-17
+
+ * src/mainwindow.c: main_window_create(): 最小サイズを制限。
+
+2002-04-17
+
+ * src/compose.c: 新しい自動改行ルーチンをマージ。
+ join_next_line(): マルチバイト文字を結合しないバグを修正。
+ get_indent_length(): enum と変数名を修正。
+ INDENT_CHARS: ':' をインデントしないようにした。
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): フォルダ識別子に対応。
+ folderview_rm_imap_folder_cb(): folderview_delete_folder_cb()
+ と統合。
+
+2002-04-15
+
+ * src/folder.[ch]: folder_item_scan(): スキャンに失敗したら -1 を
+ 返す。
+ * src/folderview.c: folderview_check_new(): folder_item_scan() に
+ 失敗したらチェックを中断。
+
+2002-04-15
+
+ * src/imap.c: imap_create_missing_folders(): INBOX と Trash のみを
+ 作成するようにした。
+ * src/prefs_folder_item.c: prefs_folder_item_set_dialog(): ニュース
+ フォルダのタイプを変えられないようにした。
+ prefs_folder_item_destroy(): prefs_dialog_destroy() を使用。
+ * src/prefs.[ch]: prefs_dialog_destroy(): 新規。
+
+2002-04-15
+
+ * src/prefs_account.[ch]: 「高度な設定」タブに特別フォルダの設定を
+ 追加。「 IMAP サーバディレクトリ」の設定もそこに移動。
+ * src/account.[ch]: account_get_special_folder(): 新規。アカウント
+ に対する最適な特別フォルダを返す。
+ * src/compose.c: account_get_special_folder() を使用。
+ * src/prefs_folder_item.[ch]: 新規。フォルダプロパティダイアログを
+ 実装し、特別フォルダの設定を実装(claws の大部分の機能はまだ統合
+ されておらず、構造は少し変更されている)。
+ * src/folderview.c: プロパティメニューを有効にした。
+
+2002-04-14
+
+ * src/textview.c: IS_RFC822_CHAR(): ',' や ';' 等のセパレータが
+ 現れたときにもパーサのスキャンを停止するようにした。
+
+2002-04-12
+
+ * src/mainwindow.c: メニューの順序を少し変更。
+ * src/compose.c: 'Ctrl-Enter' でいくつかの修飾キーを無視するように
+ した。
+ compose_reply_set_entry(): 「差出人に返信」がニュースグループで
+ 使えるようにした。
+
+2002-04-11
+
+ * src/compose.c: compose_create(): ジオメトリヒントを設定して
+ ウィンドウの最大サイズを制限するようにした。
+ * src/imap.c: imap_parse_list(): INBOX を \Noselect としてマーク
+ しないようにした。
+ imap_get_uncached_messages()
+ imap_cmd_fetch(): FETCH を含まない応答を無視するようにした。
+
+2002-04-11
+
+ * COPYING: ライセンス変更("NO-VIRUS CLAUSE" の削除と OpenSSL に対する
+ 条項の追加)。
+
+2002-04-09
+
+ * src/prefs_account.c
+ src/smtp.[ch]: OpenSSL 有効時にコンパイルできないバグを修正。
+
+2002-04-09
+
+ * src/smtp.[ch]
+ src/send.c
+ src/session.[ch]: SMTP プロトコル処理の最初の再構成。
+ SMTPSession: 新規クラス。 Session のサブクラス。
+ smtp_session_new(): send_smtp_open() をこの関数に移動。
+ smtp_from(): SMTP AUTH の呼び出しを smtp_auth() に移動。
+ smtp_auth(): SMTP AUTH メソッドにサーバの応答を使用。
+ smtp_ehlo(): サーバの応答を読み、認証タイプのフラグをセット。
+ smtp_helo(): EHLO コマンドを分離。
+ smtp_ok(): バッファが指定されていれば最後のサーバの応答を返す
+ ようにした。
+ * src/esmtp.[ch]: smtp.[ch] にマージ。
+ * src/imap.c: imap_session_destroy_all(): session_destroy() を使用。
+
+2002-04-08
+
+ * src/imap.c: imap_open(): IMAP4 セッションが確立できない場合警告
+ メッセージを出すようにした。
+
+2002-04-06
+
+ * src/compose.c: テンプレートを現在のカーソル位置に挿入できるように
+ した。
+ * src/mainwindow.c: いくつかのメニューをサブメニュー
+ '/表示/表示・非表示' の下に移動。
+
+2002-04-05
+
+ * src/filter.c
+ src/inc.c: folder_find_item_from_path() を
+ folder_find_item_from_identifier() に変更。
+ src/prefs_account.c
+ src/prefs_filter.c: フォルダパスを指定するのに
+ folder_item_get_identifier() を使用。
+
+2002-04-05
+
+ * src/folder.[ch]: 「フォルダ識別子」を実装(そして claws の実装に
+ 存在したバグを修正)。
+ folder_find_from_name(): 名前とタイプから Folder を検索。
+ folder_get_identifier(): Folder の id を返す。
+ folder_item_get_identifier(): FolderItem の id を返す。
+ folder_find_item_from_identifier(): id から FolderItem を返す。
+ folder_get_type_string(): フォルダタイプ文字列を返す。
+ folder_get_type_from_string(): 文字列から FolderType を返す。
+ (そして誤った g_strcasecmp() の用法を修正)。
+ * src/export.c
+ src/import.c: folder_item_get_identifier() と
+ folder_find_item_from_identifier() を使用。
+
+2002-04-03
+
+ * src/imap.c: imap_parse_atom(): 継続行を読んだ後に cur_pos が正しい
+ アドレスを指していなかったバグを修正。
+ imap_scan_folder(): 未読数が0のときは新着数を0にセット。
+ imap_parse_flags(): \Seen フラグが存在すれば新着・未読フラグを
+ 追加しないようにした。
+ * ac/Makefile.am: MACROS から gpgme.m4 を削除。
+
+2002-04-02
+
+ * 現在開いているフォルダにフラグを追加できない問題を修正。
+ * src/compose.c:
+ compose_send(): 保存後 outbox を更新。
+ compose_queue()
+ compose_draft_cb(): procmsg_add_flags() を使用。
+ * src/folder.[ch]: FolderItem に "opened" フラグと "mark_queue"
+ リストを追加。
+ * src/main.c: send_queue(): 全ての queue フォルダから送信。
+ * src/mainwindow.c: send_queue_cb(): 全ての queue フォルダから送信。
+ * src/procmsg.[ch]:
+ procmsg_flush_mark_queue(): 新規。全ての待ち状態のフラグをファイル
+ に書き出す。
+ procmsg_add_flags(): 新規。フォルダに指定されたフラグを追加。
+ procmsg_send_queue(): 送信待ちフォルダを指定するための引数を追加。
+ procmsg_save_to_outbox(): procmsg_add_flags() を使用。
+ * src/summaryview.c:
+ summary_show(): FolderItem の opened フラグを立てる。
+ summary_clear_list(): FolderItem の opened フラグを下げる。
+ summary_write_cache(): procmsg_flush_mark_queue() を呼ぶようにした。
+
+2002-04-01
+
+ * src/summaryview.[ch]: スペースが十分になければステータスラベルの
+ フォルダ名と選択数の末尾を削るようにした。
+
+2002-04-01
+
+ * src/imap.c: imap_create_special_folder(): INBOX の下に特別フォルダ
+ を作成するとき SpecialFolderItemType をセットしていなかったバグを
+ 修正。
+ * ac/gpgme.m4: 削除。
+ * ac/README: 追加。
+ * ac/missing/gdk-pixbuf.m4
+ ac/missing/gettext.m4
+ ac/missing/gpgme.m4
+ ac/missing/imlib.m4: 便宜のため追加。
+
+2002-03-29
+
+ * src/esmtp.c: esmtp_auth(): デコードされたチャレンジ文字列の後に
+ ゴミが表示されるバグを修正。メモリリークを修正。 strtok() を削除。
+ * src/compose.c: compose_draft_cb(): 草稿メッセージを既読として
+ マーク。
+ * src/folderview.c: folderview_update_node(): 送信控と草稿フォルダ
+ の強調をしないようにした。
+
+2002-03-28
+
+ * src/messageview.c: messageview_show(): メモリリークを修正。
+ * src/summaryview.c: summary_save_as(): コピーに失敗したらエラー
+ ダイアログを表示。
+ * src/about.c: about_show(): すでにウィンドウが開いているときに
+ アクティブにするようにした。
+
+2002-03-27
+
+ * src/compose.c: Subject が空のときは送信前に確認ダイアログを表示。
+ compose_check_entries(): 新規。
+ compose_send()
+ compose_send_later_cb(): compose_check_entries() を使用。
+ * src/imap.c: imap_parse_atom(): 応答解析をさらに修正。
+
+2002-03-26
+
+ * src/imap.c: imap_parse_atom(): 継続行応答を正しくパースしていな
+ かったバグとメモリリークを修正。
+
+2002-03-26
+
+ * src/undo.c: undo_insert_text_cb(): テキストの長さが大きいときに
+ クラッシュするバグを修正。
+ * src/gtkstext.c: gtk_stext_button_press(): セレクションが増大する
+ のを防ぐために、中ボタンでペーストした後セレクションをキャンセル
+ するようにした。
+
+2002-03-25
+
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): 対象フォルダがデフォルトのメール
+ ボックス内にあるときだけ振り分けルールを修正するようにした。
+ * src/utils.c: get_abbrev_newsgroup_name(): 冗長な行を削除。
+
+2002-03-23
+
+ * src/compose.c
+ src/mainwindow.c
+ src/prefs_common.c: 'Tool' メニューを 'Tools' に変更。
+ '重複メッセージを削除' を 'ツール' の下に移動。
+
+2002-03-23
+
+ * src/folderview.c: SET_SPECIAL_FOLDER(): 移動時に同じ親を保つように
+ した。
+ * src/imap.c: imap_create_special_folder(): フォルダの作成に失敗した
+ ときにクラッシュするバグを修正し、 INBOX の下へフォルダの作成を
+ 再度試みるようにした。
+ imap_scan_tree_recursive(): namespace プレフィクスが INBOX の場合
+ はそれを自動的に追加しないようにした。 INBOX の下の特別フォルダも
+ 探すようにした。
+ * src/foldersel.c: SET_SPECIAL_FOLDER(): 移動時に同じ親を保つように
+ した。
+
+2002-03-23
+
+ * src/utils.[ch]: get_abbrev_newsgroup_name(): 新規。省略された
+ ニュースグループ名を返す。
+ * src/folderview.c: folderview_update_node(): name と path が一致
+ する場合ニュースグループを省略名で表示。
+ * src/summaryview.c: summary_status_show(): ニュースグループを省略名
+ で表示。
+
+2002-03-23
+
+ * src/foldersel.c
+ src/folderview.c: ラベル 'Draft' を 'Drafts' に変更。
+ * src/imap.c: ディレクトリ名 'Draft' を 'Drafts' に変更。
+ imap_create_missing_folders(): Queue フォルダの draft への誤った
+ 代入を修正。
+
+2002-03-22
+
+ * IMAP サーバ上の送信控 / 草稿 / 送信待ちフォルダを有効にした。
+ * src/compose.c: compose_queue(), compose_draft_cb(): 存在すれば
+ アカウントの送信待ち、草稿フォルダを使用するようにした。
+ src/imap.[ch]:
+ imap_create_trash(): 削除。
+ imap_create_special_folder(): 新規。imap_create_trash() を一般化。
+ imap_create_missing_folders(): 足りないフォルダを自動的に作成。
+ imap_is_msg_changed(): ダミーのメソッドを追加。
+ imap_scan_tree_recursive(): 送信控、草稿、送信待ちフォルダも探す
+ ようにした。少しコードを整理。
+ imap_parse_envelope(): ヌルストリングをチェック。
+ src/procmsg.c: procmsg_read_cache(): IMAP フォルダのメッセージに
+ F_QUEUE と F_DRAFT フラグを追加。
+
+2002-03-20
+
+ * src/compose.c: compose_send(): アカウントの送信控フォルダが存在
+ すればそれを使用するようにした。
+ * src/procmsg.[ch]: procmsg_save_to_outbox(): 送信控を指定できる
+ ように API を変更。
+
+2002-03-20
+
+ * src/compose.c: メッセージを待機後に送信控に保存しないようにした。
+ compose_save_to_outbox(): procmsg.c に移動。
+ * src/procmsg.[ch]: procmsg_send_queue(): 送信に成功した場合送信控
+ に保存するようにした。
+ procmsg_save_to_outbox(): 新規。必要があれば送信待機用ヘッダを
+ 削除し、与えられたファイルを送信控に追加する。
+
+2002-03-20
+
+ * src/compose.c: compose_wrap_line(): '|' も引用文字として扱う
+ ようにした。
+ get_indent_length(): ':' と '#' も引用文字として扱うようにし、
+ strchr() を使って整理。
+
+2002-03-19
+
+ * src/mainwindow.c: いくつかのメニュー項目を修正。
+
+2002-03-19
+
+ * src/defs.h: OUTBOX_DIR を "outbox" から "sent" に変更
+ (現在の "outbox" は再スキャンまで保持されます)。
+ * src/folder.c: folder_set_missing_folders(): 足りないフォルダを
+ 生成。
+ * src/foldersel.c
+ src/folderview.c: 'Outbox' を 'Sent' に変更。
+ * src/main.c: folder_set_missing_folders() を呼ぶようにした。
+ * src/mh.c: mh_scan_tree(): 足りないフォルダを生成。
+ * src/summaryview.c: summary_set_menu_sensitive(): メニューの
+ センシティビティを正しくセットしないバグを修正。
+
+2002-03-18
+
+ * src/folderview.c
+ src/imap.[ch]: IMAP でのフォルダ名変更を実装(Mio さん thanks)。
+ folderview_rename_folder_cb(): 親フォルダが名称変更された場合
+ 現在のフォルダを再オープンするようにした。
+ imap_rename_folder(): 新規メソッドの実装。
+ imap_cmd_rename()
+ imap_rename_folder_func(): 新規。
+ imap_remove_folder(): キャッシュディレクトリも削除。
+
+2002-03-17
+
+ * src/imap.c: locale エンコーディング <-> 修正 utf-7 の変換を実装し、
+ フォルダ名の国際化に対応(鈴木未央さん thanks)。
+ imap_path_separator_subst(): 修正 utf-7 のエスケープ文字を扱える
+ ようにした。
+ imap_modified_utf7_to_locale()
+ imap_locale_to_modified_utf7(): 新規。
+ imap_create_trash(): imap ディレクトリが指定されているときに
+ ごみ箱フォルダを正しい位置に作成するよう修正。
+ imap_get_real_path(): デバッグ print を削除。
+
+2002-03-14
+
+ * src/socket.c: DNS lookup と connect() のタイムアウトを実装。
+ sock_connect_by_hostname(): タイムアウト対応とコードの整理。
+ sock_connect_with_timeout(): 新規。
+ sock_peek(): SSL peek を実装。
+
+2002-03-13
+
+ * src/messageview.c: messageview_show(): シングルパートの text/html
+ メッセージを通常のテキストビューで表示。
+ * src/account.c
+ src/addrbook.c
+ src/addrindex.c
+ src/compose.c
+ src/imap.c
+ src/inc.c
+ src/jpilot.c
+ src/ldif.c
+ src/mbox.c
+ src/mimeview.c
+ src/news.c
+ src/prefs.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_display_header.c
+ src/prefs_filter.c
+ src/procheader.c
+ src/procmime.c
+ src/procmsg.c
+ src/recv.c
+ src/rfc2015.c
+ src/send.c
+ src/sourcewindow.c
+ src/summaryview.c
+ src/template.c
+ src/textview.c
+ src/unmime.c
+ src/utils.c
+ src/vcard.c
+ src/xml.c: 全ての fopen() のオプションに 'b' を追加。
+
+2002-03-09
+
+ * version 0.7.4
+
+2002-03-09
+
+ * src/ssl.[ch]: コーディングスタイルを合わせた。
+ * src/compose.c: compose_send_later_cb(): ファイルの保存に失敗する
+ バグを修正。
+ * faq/Makefile.am
+ faq/en/Makefile.am
+ faq/en/sylpheed-faq*.html
+ faq/es/Makefile.am
+ faq/es/sylpheed-faq*.html
+ faq/fr/Makefile.am
+ faq/fr/sylpheed-faq*.html
+ configure.in
+ Makefile.am
+ src/Makefile.am
+ src/defs.h
+ src/mainwindow.c
+ src/manual.[ch]: 英語、スペイン語、フランス語の FAQ を追加。
+
+2002-03-07
+
+ * manual/en/sylpheed*.html: 最新版に更新。
+ * libkcc/jis.c
+ src/addrcache.c
+ src/addritem.c
+ src/ldif.c
+ src/mgutils.c: string.h を include して strlen() 等の warning
+ を取り除いた。
+ * src/folder.c
+ src/folderview.c
+ src/inc.c
+ src/logwindow.c
+ src/mainwindow.c
+ src/mimeview.c
+ src/prefs.c
+ src/prefs_common.c
+ src/procheader.c
+ src/send.c
+ src/session.c
+ src/sigstatus.c
+ src/summaryview.c: gcc-3.0 で 'deprecated use of label at end of
+ compound statement' の warning を避けるために switch の最後の
+ ラベルに break を追加。
+ * src/rfc2015.c: passphrase_cb(): r_hd の型を修正。
+
+2002-03-06
+
+ * src/inc.[ch]: IncProgressDialog へのポインタを静的なリストに
+ 保存するようにした。
+ inc_cancel_all(): 新規。全ての現在の受信をキャンセルする。
+ * src/mainwindow.c: 「受信を中止」メニューを追加。
+ * src/textview.c: シングルパート MIME メッセージのためのマイナー
+ な修正と、 textview_write_body() を少し整理。
+
+2002-03-05
+
+ * src/inc.c: inc_write_uidl_list(): UIDL コマンドを発行する前に
+ 何かエラーが起こると UIDL 情報が失われてしまうバグを修正。
+ src/inc.h: uidl_is_valid を Pop3State に追加。
+ src/pop.c: UIDL が有効になれば uidl_is_valid を TRUE にする。
+
+2002-03-03
+
+ * version 0.7.3
+
+2002-03-03
+
+ * src/mimeview.c: mimeview_create(): 最初のノートブックページを 0
+ にした。
+ * src/folderview.c: folderview_selected(): 選択行が隠れていたら
+ ビューをスクロールさせるようにした。
+ * src/prefs_filter.c: prefs_filter_register_cb(): ビューをスクロール
+ させ、追加された行を選択するようにした。
+ * src/summaryview.c: 空のメッセージ ID のスレッド化を修正。
+
+2002-03-02
+
+ * src/textview.c: textview_show_message(): message/rfc822 のパートを
+ 辿るようにした。
+ textview_add_part(): 添付テキストファイルの前に見出しを付けるよう
+ にした。
+ textview_show_header(): 改行を付加しないようにした。
+ * src/messageview.c: MIME モードでもメッセージ検索ができるようにした。
+
+2002-03-01
+
+ * src/messageview.c: messageview_show(): MimeView の TextView の
+ ヘッダの状態も指定するようにした。
+ * src/mimeview.c: mimeview_show_message(): メッセージを表示するのに
+ textview_show_message() を呼ぶようにした。
+ * src/textview.c: textview_add_part(): 新規。ビューをクリアせずに
+ メッセージパートの内容を追加する。
+ textview_show_message(): 全パートを適切なスタイルで表示。
+ textview_write_body(): textview_show_part() から分離。
+
+2002-02-28
+
+ * src/mainwindow.c
+ src/prefs_common.c: 表示と送信用のコードセットに ISO-8859-15 を
+ 追加。
+ * src/codeconv.c: conv_codeset_strdup(): コード変換に失敗したら
+ NULL を返し、呼び出し側がそれに対処するようにした。
+ * src/compose.c: compose_write_to_file(): コード変換に失敗したら
+ エラーダイアログを表示し、それをそのまま送信するかどうかをユーザ
+ に選択させるようにした。
+ * src/textview.c: textview_write_line(): コード変換に失敗したら
+ 元の文字列を表示するようにした。
+
+2002-02-27
+
+ * src/inc.c: get_spool(): copy_mbox() に失敗したとき mbox をロック
+ 解除していなかったバグを修正(Alexander Kabaev さん thanks)。
+ * src/prefs_account.[ch]: SMTP AUTH 用の別のユーザ ID / パスワード
+ の設定を追加。
+ * src/send.c: send_message_smtp(): SMTP AUTH 用の別のユーザ ID /
+ パスワードが指定されていればそれを使用。
+
+2002-02-26
+
+ * src/inc.[ch]
+ src/pop.[ch]: UIDL 管理のリファクタリング。
+ メッセージの情報を Pop3MsgInfo 構造体の配列に保持し、未取得
+ メッセージを完全に調べるようにした。
+
+2002-02-26
+
+ * src/filesel.c
+ src/foldersel.c
+ src/mainwindow.c: ウィンドウ/ダイアログの WMCLASS をセット。
+ * src/codeconv.c: conv_codeset_strdup(): jconv_alloc_conv() が
+ 失敗したら元の文字列を返すようにした。
+
+2002-02-25
+
+ * src/mh.c: mh_scan_tree_recursive(): ハードコードされたディレクトリ
+ 名をマクロに変更。
+
+2002-02-24
+
+ * src/messageview.c
+ src/mimeview.[ch]
+ src/summaryview.c: MIME メッセージの新しいノートブックタブインタ
+ フェースを実装。
+ * src/textview.[ch]: 行間に関する不具合を修正。
+
+2002-02-23
+
+ * src/prefs_filter.c:
+ prefs_filter_rename_path()
+ prefs_filter_delete_path(): flt->dest が NULL のときにクラッシュ
+ するのを修正。
+
+2002-02-23
+
+ * src/recv.[ch]: RecvUIFunc が FALSE を返したらデータ受信をキャンセル
+ するようにした。
+ * src/pop.c: pop3_retr_recv(): データ受信中にキャンセルされたとき
+ 誤って 'No space' を返すのを修正。
+ * src/inc.c: inc_pop3_recv_func(): キャンセルされたときはデータ受信
+ を中断し、潜在的なクラッシュバグを修正。
+ * src/grouplistdialog.c: データ受信のキャンセルができるようにした。
+ * src/news.c: news_get_group_list(): 受信に失敗したら現在の
+ セッションを destroy するようにした。
+
+2002-02-22
+
+ * src/manage_window.[ch]: メインウィンドウを隠しているときに
+ クラッシュするバグを修正。
+ MANAGE_WINDOW_SIGNALS_CONNECT(): 新規マクロ。
+ "unmap_event", "destroy" イベントを監視するようにした。
+ * src/account.c;
+ src/addressbook.c
+ src/compose.c
+ src/export.c
+ src/filesel.c
+ src/foldersel.c
+ src/grouplistdialog.c
+ src/import.c
+ src/inputdialog.c
+ src/mainwindow.c
+ src/message_search.c
+ src/passphrase.c
+ src/prefs_account.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_display_header.c
+ src/prefs_filter.c
+ src/prefs_template.c
+ src/summary_search.c
+ src/summaryview.c: ウィンドウ管理のためにシグナルを接続するのに
+ MANAGE_WINDOW_SIGNALS_CONNECT() マクロを使用するようにした。
+
+2002-02-21
+
+ * src/prefs_account.[ch]: 受信サイズ制限のオプションを追加。
+ * src/pop.c: 制限サイズより大きいメッセージをスキップ。
+ LOOKUP_NEXT_MSG(): 新規マクロ。
+ * src/compose.c: compose_attach_append(): ファイルが読み込み可能
+ かどうかをチェック。
+
+2002-02-21
+
+ * src/rfc2015.c: dump_mimeinfo() と dump_part() をコメントアウト。
+ g_message() を debug_print() と g_warning() に変更。
+ rfc2015_decrypt_message(): 復号化に失敗したあるいはキャンセルした
+ 場合にメッセージパートを複製していたバグを修正。コードの整理。
+ * src/passphrase.c: ダイアログを transient にした。
+ * src/prefs.c: prefs_config_parse_one_line(): debug_print() を削除。
+
+2002-02-20
+
+ * src/messageview.c
+ src/procmsg.[ch]: GPGME が有効な場合マルチパートメッセージの
+ 解析に失敗するバグを修正。
+ * src/rfc2015.c: 使用されていない copy_gpgmedata_to_temp() を
+ コメントアウト。
+ * src/prefs_account.c: prefs_account_privacy_create(): 縦方向の
+ 間隔を修正。
+
+2002-02-19
+
+ * src/menu.[ch]: menu_set_sensitive_all(): 新規。
+ menu_set_insensitive_all(): menu_set_sensitive_all() のラッパー
+ にした。
+ * src/prefs_account.c:
+ prefs_account_open()
+ prefs_account_protocol_set_optmenu(): アカウント作成後プロトコル
+ のタイプを変更不可にした。
+ * src/compose.c: compose_attach_parts(): MIME ツリーをトラバース
+ してネストされたマルチパート MIME メッセージから全ての添付された
+ ファイルを展開するようにした。
+
+2002-02-19
+
+ * src/procmsg.[ch]: procmsg_get_mark_sum(): 最小/最大の番号を得る
+ 引数と先頭の番号の制限を指定する引数を追加。
+ * src/folderview.c
+ src/inc.c: ニュースフォルダのメッセージチェックを有効にした。
+ * src/news.c: news_scan_group(): 実装。新着/未読メッセージ数を
+ GROUP コマンドの応答とマークデータから推測。
+ news_select_group(): 合計/最初/最後の番号を返すようにした。
+ * src/prefs_account.c: prefs_account_receive_create(): 「全受信」
+ チェックボタンのテキストを修正。
+
+2002-02-18
+
+ * src/account.c: 「全受信」チェックボックスを IMAP4 と NNTP で
+ 利用可能にした。
+ * src/inc.c: folderview_check_new() の引数を修正。
+ * src/prefs_account.c: "「全受信」でこのアカウントの新着メールを
+ チェックする" チェックボックスの修正。
+
+2002-02-18
+
+ * src/folderview.[ch]:
+ folderview_rescan_tree(), folderview_rescan_all():
+ folderview_update_tree() と folderview_update_all() を名称変更。
+ folderview_update_all_node(): 削除。
+ folderview_check_new(): 新規。引数が NULL の場合、全てのローカル
+ フォルダをチェックする。引数が指定されていれば、その(ローカルと
+ リモート)フォルダをチェックする。
+ * src/inc.c:
+ inc_account_mail()
+ inc_all_account_mail(): IMAP4 アカウントもチェックするようにした。
+
+2002-02-18
+
+ * src/folderview.c:
+ folderview_rename_folder_cb()
+ folderview_delete_folder_cb(): フォルダを改名/削除したときに
+ フィルタルールを修正。
+ * src/prefs_filter.[ch]:
+ prefs_filter_rename_path(): 新規。フィルタリスト中の振り分け先
+ のパスを改名する。
+ prefs_filter_delete_path(): 新規。振り分け先のパスがマッチすれば
+ フィルタルールを削除する。
+ * 上記について Neill Miller さん thanks。
+
+2002-02-17
+
+ * src/compose.c: 転送または再編集時に添付ファイルを受け継ぐように
+ した(claws ブランチのコードを書き直した)。
+ compose_attach_parts(): 新規。与えられたメッセージ中のファイル
+ を展開して添付する。
+ compose_attach_append(): 引数の型を変更。
+ * src/messageview.c: messageview_show(): GPG 復号のコードを
+ procmsg.c に移動。
+ * src/procmsg.[ch]: procmsg_open_message_decrypted(): 新規。
+
+2002-02-16
+
+ * version 0.7.2
+
+2002-02-16
+
+ * src/summary_search(): summary_search_execute(): メッセージビュー
+ が隠れている場合ビューをスクロールするようにした。
+
+2002-02-15
+
+ * src/foldersel.c: foldersel_set_tree(): 移動モードで異なるタイプ
+ のフォルダを選択可能にした。
+ * src/folderview.[ch]: folderview_update_msg_num(): 数を CTree の
+ ラベルと比較し、ここで folder_item を更新しないようにした。
+ * src/imap.c: imap_move_msg(), imap_move_msgs_with_dest():
+ 異なるタイプのフォルダ間での移動を実装。
+ * src/mh.c: SET_DEST_MSG_FLAGS(): 新規マクロ。
+ mh_do_move(), mh_do_move_msgs_with_dest(): 新規(以前の mh_move_msg()
+ と mh_move_msgs_with_dest() を改名)。
+ mh_move_msg(), mh_move_msgs_with_dest(): 異なるタイプのフォルダ
+ 間での移動を実装。
+ mh_copy_msg(), mh_copy_msgs_with_dest(): コードの整理。
+ * src/summaryview.c: summary_status_show(): folder_item をここで
+ 更新。
+ * po/POTFILES.in: headerwindow.c への参照を削除。
+ * src/summaryview.c: summary_step(): リストの先頭と末尾での挙動
+ を修正。
+
+2002-02-15
+
+ * src/mainwindow.c: main_window_set_menu_sensitive(): 「全ての
+ ヘッダを表示」のトグル状態を TextView の状態からセット。
+ * src/summaryview.[ch]: 「全てのヘッダ」をトグルスイッチにした。
+ 不要なメニューの更新を抑制。
+ summary_select_node(): 引数 'do_refresh' を追加。
+ コードの整理。
+
+2002-02-14
+
+ * src/utils.c: strsplit_with_quote(): この関数中で引用文字を削除
+ するようにした(メッセージ作成の外部エディタの問題を修正)
+ (Stefaan A Eeckels さん thanks)。
+ * src/mainwindow.[ch]: 「全てのヘッダを表示」をトグルスイッチにした。
+ main_window_menu_callback_block()
+ main_window_menu_callback_unblock(): 新規。
+ main_window_set_menu_sensitive(): メニューアイテムのトグル状態を
+ セット。
+ show_all_header_cb(): トグルメニューアイテムの状態を読むようにした。
+ * src/mainwindow.[ch]: 「スレッド表示」をトグルスイッチにした。
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): 「スレッド解除」
+ を削除。
+
+2002-02-13
+
+ * src/imap.c: imap_add_msg(): パス区切りを変換していなかったバグを
+ 修正(Sergey Vlasov さん thanks)。
+ * src/gtkutils.c: gtkut_editable_get_selection(): 選択部の長さが
+ 0 のときは NULL を返すようにした。
+ アサーションを修正。
+ * src/utils.c: str_open_as_stream(): str の長さが 0 のときはすぐに
+ 戻るようにした。
+ * src/headerwindow.[ch]: 削除。
+ * src/socket.[ch]
+ src/inc.c: 古いスレッド対応コードを削除。
+
+2002-02-12
+
+ * src/procmsg.c: procmsg_open_message(): デコードされたメッセージ
+ ファイルが存在すればそのストリームを返すように修正
+ (messageview.c で gpg 暗号解除に失敗するのを修正)。
+
+2002-02-11
+
+ * version 0.7.1
+
+2002-02-11
+
+ * src/compose.[ch]
+ src/gtkutils.[ch]
+ src/prefs_template.c
+ src/quote_fmt.h
+ src/quote_fmt_parse.y
+ src/summaryview.c
+ src/utils.[ch]: メッセージテキストの部分が選択されていれば、
+ メッセージ本文全体の代わりにそれを引用文として使うようにした
+ (Darko Koruga さん thanks)。
+ src/utils.[ch]: str_open_as_stream(): 新規。与えられた文字列
+ に対して一時的なストリームを返す。
+ * src/main.c: "--send" コマンドラインオプションを追加。
+ * src/compose.c: compose_reply_set_entry(): Reply-To と to_all が
+ 両方指定されていれば From のアドレスを Cc に追加。
+ * Makefile.am: .tar.bz2 パッケージ中の RPM spec ファイルの Source:
+ 行を修正。
+
+2002-02-07
+
+ * src/procmsg.c: procmsg_open_message(): キャッシュが存在しない
+ 場合はメッセージを取得するようにした。
+ * src/foldersel.[ch]: foldersel_folder_sel(): フォルダ選択の
+ タイプを指定する引数を追加。
+ * src/addressbook.c
+ src/compose.c
+ src/editaddress.c
+ src/editgroup.c
+ src/folderview.c
+ src/importldif.c
+ src/mainwindow.c
+ src/md5.c
+ src/mimeview.c
+ src/prefs_common.c
+ src/prefs_customheader.c
+ src/prefs_filter.c
+ src/summaryview.c: gcc 以外の C コンパイラでもコンパイルできる
+ ようにした(Shawn Houston さん thanks)。
+
+2002-02-06
+
+ * src/imap.c: imap_copy_msgs_with_dest(): リストのトラバース時の
+ バグを修正。
+ * src/prefs_common.c: キーバインドの設定を別ダイアログにした。
+ * src/addressbook.c: addressbook_format_address(): 表示名にカンマ
+ が含まれていれば "" を追加するようにした(渡部さん thanks)。
+ * src/addr_compl.c: get_complete_address(): 表示名にカンマが含まれて
+ いれば "" を追加するようにした。
+ get_address_from_edit(): 引用文字を正しく扱うようにした。
+ * src/addr_compl.c: get_complete_address()
+ src/addressbook.c: addressbook_format_address(): 表示名が空の
+ 場合にテキスト処理を誤るバグを修正。
+ * NEWS を更新。
+
+2002-02-05
+
+ * src/compose.c: compose_exec_ext_editor_real(): g_strsplit() を
+ strsplit_with_quote() で置き換えた。
+ * src/foldersel.c
+ src/folderview.c: folderview_drag_motion_cb(): 少しコードの整理。
+ * src/folderview.c:
+ folderview_drag_motion_cb()
+ folderview_drag_received_cb(): IMAP4 フォルダへのドロップを可能
+ にした。
+ * src/utils.c: get_file_size_as_crlf(): fread() の代わりに fgets()
+ を使用。
+ * src/imap.c
+ imap_copy_msg()
+ imap_copy_msgs_with_dest(): メッセージのソースが現在のメール
+ ボックスと異なっていれば imap_add_msg() を使用するようにした。
+ 正しい値を返すようにした。
+ imap_cmd_append(): APPEND コマンドを正しく実装。
+
+2002-02-04
+
+ * src/mainwindow.c
+ src/messageview.[ch]
+ src/summaryview.[ch]
+ src/textview.[ch]: 全ヘッダをメッセージビューに表示し、ヘッダ
+ ウィンドウはもう使用しないようにした。
+ * src/mainwindow.c
+ src/prefs_common.c: 「新規メッセージを作成」のデフォルトの
+ ショートカットを変更。
+ * src/mainwindow.c
+ src/summaryview.[ch]: summary_display_msg_selected(): 新規。
+ 「全てのヘッダを表示」を選択したら選択されたメッセージを表示
+ するようにした。
+ * src/mh.c
+ src/sourcewindow.c: いくつかの procmsg_get_message_file_path()
+ を procmsg_get_message_file() に変更し、メッセージが確実に
+ 取得されているようにした。
+ * src/folderview.c: folderview_drag_motion_cb(): 任意のフォルダ
+ から MH フォルダへの DnD を許可。
+ folderview_drag_received_cb(): ドラッグ元フォルダがニュース
+ あるいは IMAP の場合メッセージを移動するかわりにコピーするように
+ した。
+ * src/mainwindow.c
+ src/summaryview.c: ニュースフォルダからのコピーを許可。
+
+2002-02-03
+
+ * src/prefs_common.c: prefs_other_create(): 外部コマンドの設定の
+ デザインを修正。
+ prefs_keybind_apply_clicked(): Mew / Wanderlust キーバインド
+ プリセットをよりオリジナルに近づけた。
+ Mutt キーバインドプリセットを追加。
+ メッセージ作成のキーバインドも変更。
+ * src/compose.c: いくつかのメニューショートカットを変更。
+ * src/codeconv.c: タイ語のエンコーディング用に locale_table を修正。
+
+2002-02-01
+
+ * src/Makefile.am: $(GPGME_CFLAGS) を INCLUDES に追加。
+ * src/prefs_common.c: prefs_interface_create(): メニューショート
+ カットの説明を修正。
+
+2002-01-31
+
+ * src/gtkutils.[ch]: gtk_stext_clear() を追加。
+ * src/compose.[ch]
+ src/mainwindow.c
+ src/summaryview.[ch]: 複数転送ができるようにした。
+ * src/summaryview.c:
+ summary_set_marks_selected(): 選択行全てにマークを付けるようにした。
+ summary_reply(): summary_reply_cb() から移動。
+ * compose.[ch]: compose_forward(): メッセージリストを受けるように
+ 修正。
+ * src/mainwindow.c: 返信の処理を整理。
+ * src/summaryview.c: summary_reply(): メモリリークを修正。
+ summary_key_pressed(): ハードコードされたマーク/未読としてマーク
+ のショートカットを削除。
+ * src/mainwindow.c
+ src/prefs_common.c: メニューにマーク/未読としてマークのショート
+ カットを追加。
+
+2002-01-30
+
+ * src/compose.c: compose_wrap_line_all():
+ prefs_common.linewrap_quote が指定されていなくても引用部を整形
+ するようにした(prefs_common.linewrap_quote は単に返信時の自動
+ 改行のためにあるので)。
+ * src/prefs_account.c: prefs_account_open(): 新規アカウントを作成
+ するときに tmp_ac_prefs を初期化するようにした。
+ * src/mh.c: mh_get_msg_list(): ディレクトリの更新を検出するために
+ st_ctime も使うようにした。
+ * src/prefs_common.c: prefs_interface_create(): キーバインドセレクタ
+ の説明を修正。
+
+2002-01-29
+
+ * src/mimeview.c: ボタン / キーイベント処理を修正して多重ダイアログ
+ / 移動を修正。
+ * src/mimeview.[ch]
+ src/textview.c: MIME モードでいくつかのキープレスイベントを
+ MimeView に渡すようにした。
+ * src/prefs_filter.c: ルールの順序を正しくセットしないバグを修正。
+ * src/prefs_common.c: prefs_keybind_apply_clicked(): empty_menurc
+ の文字列を修正。
+
+2002-01-28
+
+ * src/mainwindow.c
+ src/prefs_common.c: メニューのショートカットを再構成。
+ 「表示 - サマリビューを切替」を追加。
+ * src/summaryview.[ch]: summary_toggle_view(): public な関数にした。
+ * src/prefs_common.[ch]: 「ショートカットキー」と「終了時」の位置を
+ 交換。
+ * src/importldif.c: imp_ldif_delete_event(): ダイアログをウィンドウ
+ マネージャで閉じたときの segfault を修正(より正しい方法で)。
+ * src/imageview.[ch]
+ src/messageview.c
+ src/mimeview.c: テキストと画像パートを切り替えたときの誤った
+ スクロール位置を修正。また不要な画像を開放するようにした
+ (Sergey Vlasov さん thanks)。
+ * src/prefs_common.c: 「新着メールを受信した後受信箱に移動する」
+ をデフォルトで無効にした。
+
+2002-01-28
+
+ * src/prefs_common.c: ショートカット簡易変更機能を実装。
+ * src/folderview.c: folderview_key_pressed()
+ src/summaryview.c: summary_key_pressed(): ハードコードされたキー
+ バインドをいくつか削除。
+
+2002-01-25
+
+ * src/procmime.c:
+ procmime_get_mime_type()
+ procmime_get_mime_type_table(): MIME タイプの検索を大小文字を
+ 区別しないようにした。
+ * src/gtkstext.c:
+ gtk_stext_delete_line(): 空行では改行を消すようにした。
+ gtk_stext_delete_to_line_end(): カーソルが行末にある場合は改行
+ を消すようにした。
+ (Yasuzaki Masayoshi さん thanks.)
+
+2002-01-23
+
+ * src/compose.c
+ src/gtkstext.[ch]: GtkSText 中のハードコードされているショート
+ カットを削除し、カスタマイズ可能にした。
+ * src/utils.[ch]: LF を CR+LF に変換したときのファイルサイズを
+ 返す get_file_size_as_crlf() を追加。
+
+2002-01-22
+
+ * src/compose.c: 以前動作していなかった 'Ctrl-Enter' と
+ 'Ctrl-(修飾キー)-Enter' ショートカットを有効にした。
+ * src/gtkstext.c: いくつかの Emacs キーバインドを無効にした。
+ gtk_stext_key_press(): カーソルの消滅を防ぐために Shift-Enter
+ が押されたときは選択部を伸長しないようにした。
+ * src/summaryview.c: summary_select_next_unread(): 始めから未読
+ メッセージを再検索するボタンをダイアログに追加。
+ * src/folderview.c: folderview_key_pressed(): 空フォルダ上で
+ スペースキーが押されたら次の未読フォルダへ移動するようにした。
+ 行を選択する前に CTree のフォーカスを移動するようにした。
+
+2002-01-21
+
+ * src/defs.h: modified the XLFD of default fonts.
+ * src/textview.c: textview_create(): フォントを読み込めない場合
+ segfault を起こすバグを修正。
+ * src/folderview.c
+ src/grouplistdialog.c: 購読グループを path で比較。
+ * src/prefs_filter.c: 「演算子」を「条件」に変更。
+
+2002-01-20
+
+ * src/compose.c: compose_wrap_line_all(): URL が改行マージンより
+ 長いときのクラッシュを修正。
+ * src/mainwindow.c
+ src/prefs_filter.[ch]
+ src/summaryview.[ch]: Luca Rosellini さんのパッチに基づいて
+ 「振り分けルールを作成」機能を追加。
+ * src/summaryview.c: summary_filter_open(): X-List と X-Mailing-list
+ を自動検出するヘッダに追加。
+
+2002-01-18
+
+ * configure.in: Mac OS X (Darwin) に対応。
+
+2002-01-16
+
+ * src/prefs_filter.c: inc_autocheck_timer_{remove|set}() の代わりに
+ inc_(un)lock() を使用。
+ * src/summaryview.c: summary_sort(): スレッド内のメッセージもソート
+ されるように gtk_ctree_sort_node() の代わりに
+ gtk_ctree_sort_recursive() を使用。
+ * src/procmsg.c: procmsg_read_mark_file(): sizeof の対象が間違って
+ いて、 Alpha アーキテクチャでクラッシュを起こすバグを修正(市村
+ さん thanks)。
+
+2002-01-15
+
+ * src/foldersel.c:
+ foldersel_gnode_func(): 特別フォルダの名前を翻訳済文字列にした。
+ foldersel_set_tree(): 特別フォルダを先頭に移動。
+ * src/inputdialog.[ch]: input_dialog_query_password(): 新規。
+ * src/imap.c
+ src/inc.c
+ src/news.c
+ src/send.c: 各自のクエリ関数の代わりに input_dialog_query_password()
+ を使用。
+
+2002-01-14
+
+ * src/defs.h: デフォルトフォントを修正。
+ * src/folder.[ch]
+ src/mh.[ch]
+ src/imap.[ch]
+ src/news.[ch]: クラス定義といくつかのメソッドを適切な位置に移動。
+
+2002-01-11
+
+ * src/mimeview.c: mimeview_save_as()
+ src/summaryview.c: summary_save_as(): subject に基づいてデフォルト
+ のファイル名を出すようにした。
+ * src/utils.[ch]: subst_chars() と、いくつかの特殊文字をアンダー
+ スコアで置換する subst_for_filename() を追加。
+ * src/filesel.c: filesel_select_file(): デフォルトのファイル名を
+ 選択するようにした。
+
+2002-01-10
+
+ * INSTALL
+ INSTALL.jp: libjconv の 説明と URL を追加。
+ * src/mainwindow.c: メニューエントリの整理。
+
+2002-01-09
+
+ * README
+ README.jp
+ src/about.c: copyright の年を修正。
+ * src/gtkstext.h: Sylpheed チームによる修正の表示を追加。
+
+2002-01-08
+
+ * INSTALL
+ INSTALL.jp: compface の URL を追加。
+
+2002-01-07
+
+ * version 0.7.0
+
+2002-01-07
+
+ * src/headerwindow.c
+ src/logwindow.c
+ src/messageview.c
+ src/sourcewindow.c: ウィンドウを生成するときに wmclass をセット
+ するようにした。
+
+2002-01-04
+
+ * src/compose.c: compose_wrap_line_all(): 特定のパターンの引用文
+ を折り返すときに無限ループに入るバグを修正。
+
+2002-01-02
+
+ * src/imap.c: imap_parse_envelope(): segmentation fault を防ぐ
+ ために imap_parse_address() の後に assertion を置いた。
+
+2001-12-31
+
+ * src/folderview.c
+ src/mainwindow.c: いくつかのメニュー項目のラベルを修正。
+ * src/ldif.c: fgetc() の戻り値を gint に入れるようにした。
+ * src/importldif.c: ヌル文字列を _() で括らないようにした。
+ * src/compose.c: Subject エントリの位置を最後に移動。
+ メニューを再構成。
+ compose_draft_cb(): 「草稿に保存後編集を続ける」機能を追加。
+
+2001-12-30
+
+ * src/mainwindow.c: メインメニューの再構成。「サマリ」メニューを削除。
+ 「ヘルプ」メニューを「設定」のすぐ右側に移動。「ファイル - 閉じる」
+ メニュー項目を削除。
+
+2001-12-25
+
+ * src/mainwindow.c: メニューを多少再構成。
+ * AUTHORS: 更新。さらに contributor を追加。
+ * src/account.c: account_row_moved(): 新規。上 / 下ボタンが押された
+ ときに表示行を正しい位置に移動。
+ account_clist_set(): 表示行を正しい位置に移動するようにした。
+ * src/compose.c
+ src/mainwindow.c: ウィンドウを生成するときにタイトルと wmclass
+ をセットするようにした。
+
+2001-12-24
+
+ * src/gtkstext.c: ブロックカーソルを正しく表示しないバグを修正。
+ 不要な GdkGC コピーを削除。カーソルの座標を修正。
+ * src/compose.c
+ src/gtkutils.[ch]
+ src/textview.[ch]
+ src/undo.c: GtkSText を使用するように修正。
+ * src/menu.h: #include <gtk/gtkmenu.h> を追加。
+
+2001-12-23
+
+ * acconfig.h
+ configure.in: GTK+ の XIM チェックを追加。
+ * src/gtkstext.[ch]: 新規。 GTK+ の GtkText をコピーし、名称変更。
+
+2001-12-22
+
+ * src/filter.c: #include <sys/types.h> を追加。
+
+2001-12-21
+
+ * src/template.c: template_write_config(): typo を修正。
+ * src/compose.c: toolbar_linewrap_cb(): compose_wrap_line_all() を
+ 呼ぶようにした。
+ * src/filter.[ch]
+ src/prefs_filter.c: 正規表現に対応(中井さん thanks)。
+ * src/undo.c: undo_paste_clipboard_cb(): ペーストしたクリップボード
+ が空のときアンドゥの状態を破壊するバグを修正。
+ undo_check_size(): g_list_last() を使用。
+ undo_undo()
+ undo_redo(): NULL チェックを修正し、少し最適化。
+ コードの整理。
+ * src/prefs_common.c: 自動改行の行長のデフォルトを72に変更。
+
+2001-12-20
+
+ * pixmap 管理の再構成。
+ * src/stock_pixmap.[ch]: 新規。このモジュールは全ての static な
+ pixmap を管理する。
+ * pixmap データを直接使う全てのファイルを stock_pixmap_*() を
+ 使用するように修正。
+ * src/undo.[ch]: undo_set_undo_change_funct() を
+ undo_set_change_state_func() に名称変更し、引数を GtkWidget*
+ から gpointer に変更。
+ undo_merge(): コードの整理。
+ * src/compose.c: compose_set_undo() を compose_undo_state_changed()
+ に名称変更。
+
+2001-12-19
+
+ * src/account.c: account_find_from_address(): 大小文字を区別しない
+ ようにした。
+ * src/addressbook.c: addressbook_create(): wmclass をセット。
+ * src/compose.c: compose_insert_file(): DOS/Win/Mac の改行に対応。
+ * src/importldif.c
+ src/ldif.[ch]: claws ブランチからマージ。
+ * src/importldif.c: 警告を除去。
+ imp_ldif_field_list_toggle(): ボタンのチェックを修正。
+ imp_ldif_dialog_create(): レイアウトをわずかに修正。
+ * src/ldif.c: 警告を除去。
+ * INSTALL
+ INSTALL.jp: 動作確認リストを更新。
+ * src/vcard.c:
+ vcard_read_file()
+ vcard_test_read_file(): tagtemp のメモリリークを修正。
+ コードの整理(インデントのレベルを削減)。
+ * src/addrindex.c
+ src/jpilot.[ch]
+ src/syldap.[ch]: JPilot と LDAP のライブラリはビルド時にリンクされ、
+ それらなしでは結局実行できないため、実行時のライブラリチェックを
+ 行わないようにした。
+ * src/addressbook.c
+ src/addrindex.c: "J-Pilot" を "JPilot" に変更。
+ atoi() の警告を除去。
+
+2001-12-18
+
+ * src/procmsg.c: procmsg_empty_trash()
+ src/mainwindow.c: main_window_empty_trash(): ごみ箱がメッセージを
+ 含んでいる場合のみ空にするようにした。
+ * src/imap.c: search_array_str(): 新規。
+ imap_status(): コマンドの応答を正しくパースしないバグを修正。
+
+2001-12-18
+
+ * undo 機能をマージ (Jens Oberender さん作)。
+ * src/undo.[ch]: 新規。
+ undo_insert_text_cb(): マルチバイト文字の修正(バイト数の代わりに
+ 文字数を得る)。
+ * src/compose.[ch]: undo のコードを追加。
+ * src/prefs_common.[ch]: アンドゥレベル設定用インタフェースを追加。
+
+2001-12-16
+
+ * src/compose.c: compose_template_apply()
+ src/prefs_template.c: prefs_template_clist_set_row()
+ src/template.c: template_write_config(): メッセージ作成ウィンドウ
+ の To: と Subject: エントリが空の場合は置き換えないようにした。
+
+2001-12-16
+
+ * version 0.6.6
+
+2001-12-15
+
+ * src/folderview.c: folderview_drag_motion_cb(): DnD のバグを修正。
+ * src/ldif.c: ldif_get_line(): CR を無視。
+ * src/mimeview.c: mimeview_show_message(): 最初のテキストパートと
+ して text/html も探すようにした。
+
+2001-12-14
+
+ * src/prefs_account.c: prefs_account_save_config_all(): account_list
+ == NULL の場合 accountrc を更新しないバグを修正(渡部さん thanks)。
+
+2001-12-14
+
+ * src/utils.h: 2つの文字列を結合して alloca 済の文字列を返すマクロ
+ Xstrcat_a() を追加。
+ * src/imap.c: imap_scan_tree_recursive(): スペースを含むフォルダ名
+ を正しく扱えないバグを修正(Willem van Engen さんのパッチに基づい
+ ています(thanks!))。
+ * src/compose.c: compose_wrap_line_all(): 引用部の自動改行が無効
+ で、単語が1行以上に渡っている場合にクラッシュするのを修正。
+
+2001-12-14
+
+ * Tobias さんのパッチを修正して適用(thanks!)。
+ * src/imap.[ch]:
+ imap_msg_set_perm_flags()
+ imap_msg_unset_perm_flags(): 新規。 IMAP メッセージに永続フラグを
+ セットする。
+ * src/compose.c
+ src/summaryview.c: フラグが変更されたら IMAP サーバ上のフラグも
+ 変更するようにした。
+
+2001-12-11
+
+ * src/gtkutils.[ch]: gtkut_container_remove(): 新規。 Gtk{Text,Entry}
+ のバグへの対処のための gtk_container_remove() のラッパー
+ (Sergey Vlasov さん thanks)。
+ * src/compose.c
+ src/mainwindow.c
+ src/messageview.c
+ src/mimeview.c
+ src/summaryview.c
+ src/textview.c: gtk_container_remove() を gtkut_container_remove()
+ で置換し、以前の部分的な修正を削除。
+
+2001-12-09
+
+ * src/prefs_account.c: prefs_account_apply(): 「ローカル」で
+ ユーザ ID をチェックし、 IMAP4 でチェックしていなかったバグを
+ 修正。
+ * src/imap.c: imap_session_get(): rfolder->session == NULL のとき
+ にクラッシュするバグを修正。
+ * Makefile.am: tar の引数を 'chojf' から '--bzip2 -chof' に変更。
+ * src/summaryview.c: summary_toggle_view(): vpaned を remove する
+ 前に textview のセレクションを放棄。
+
+2001-12-08
+
+ * src/messageview.c: messageview_change_view_type(): textview を
+ 外す前にセレクションを放棄するようにした。これで謎のコピー・
+ ペーストの障害が解決(Melvin Hadasht さん thanks)。
+ * src/textview.c: textview_set_font(): gtk_editable_select_region()
+ の代わりに gtk_editable_claim_selection() を使用するようにした。
+
+2001-12-06
+
+ * src/prefs_template.c: prefs_template_window_create(): To:
+ エントリでアドレス補完に対応。
+
+2001-12-04
+
+ * src/folder.c:
+ folder_count_total_msgs()
+ folder_count_total_msgs_func(): g_node_traverse() を使用して
+ GNode をトラバースするようにした。
+
+2001-12-03
+
+ * src/compose.c: 空の本文が拒否されるバグを修正。
+ * src/prefs_template.c: To: エントリを正しくセットしないバグを修正。
+ フォーマットが不正ならエラーダイアログを表示。
+ * src/prefs_common.c
+ src/quote_fmt_lex.l
+ src/quote_fmt_parse.y: 丸括弧を使ったときの混乱を避けるため、
+ 丸括弧「( )」を中括弧「{ }」に変更。
+ * src/html.c: html_get_parenthesis(): CSS / script を無視。
+
+2001-11-29
+
+ * src/prefs_template.c: ヘッダのラベルにコロンを追加。
+
+2001-11-28
+
+ * src/src/compose.c
+ src/prefs_template.c
+ src/template.[ch]: テンプレートに To フィールドを追加。
+
+2001-11-27
+
+ * src/textview.c: textview_show_part(): 最初に見つかった
+ message/rfc822 ヘッダを使用。
+ * src/folderview.c: 「メッセージを検索...」をコンテキストメニュー
+ に追加。
+ * src/prefs_common.c: prefs_quote_description_create(): エスケープ
+ する必要のある文字の説明を追加。
+
+2001-11-26
+
+ * src/compose.c: compose_wrap_line_all(): claws からさらにマージ。
+ GET_CHAR(): GET_TEXT() を名称変更し、より一般化した。
+ compose_wrap_line() と compose_wrap_line_all() を GET_CHAR() を
+ 使用するように修正。
+ * src/textview.c: textview_show_part(): ネストされた RFC822 の添付
+ のヘッダを正しく表示するようにした。
+
+2001-11-25
+
+ * src/folder.[ch]
+ src/main.c: 起動中の Sylpheed から新着、未読、合計メッセージ数
+ を得る --status オプションを追加。
+ prohibit_duplicate_launch(): '\n' を一度だけ出力。
+
+2001-11-23
+
+ * src/compose.c
+ src/gtkutils.[ch]: 新しい自動改行機能をマージ。
+ gtkut_text_str_compare_n()
+ gtkut_text_str_compare()
+ gtkut_text_is_uri_string(): claws ブランチの GtkSText から
+ バックポートし、修正。
+ * src/prefs_template.c
+ src/template.[ch]: テンプレートに Subject を追加。
+
+2001-11-22
+
+ * src/compose.c: compose_write_headers(): 括弧を付け忘れて無効な
+ カスタムヘッダを生成していたのを修正(野呂さん thanks)。
+ Sender: カスタムヘッダを許可。
+
+2001-11-20
+
+ * src/procheader.c: procheader_date_parse(): RFC 非準拠の Date
+ ヘッダへの対処。
+
+2001-11-20
+
+ * src/addrbook.c: 余分な関数を削除し、不正なアドレス帳ファイル名
+ が生成されるのを修正。
+ * src/addrindex.c: V-Card -> vCard。
+
+2001-11-19
+
+ * src/textview.c: get_email_part(): isalnum() を文字の範囲を
+ 7bit ASCII の範囲に押さえるマクロ IS_ASCII_ALNUM() で置き換えた
+ (島本さん thanks)。
+ * src/utils.c: remote_tzoffset_sec(): 異常なタイムゾーンオフセット
+ への対処。
+
+2001-11-18
+
+ * src/textview.c: textview_show_part(): ネストされたマルチパート
+ テキストでヘッダを表示。
+
+2001-11-17
+
+ * src/imap.c: imap_session_get()
+ src/news.c: news_session_get(): 再接続に失敗したときの segfault
+ を修正。
+ * src/grouplistdialog.c: 余分なコードを削除し、パターンにマッチ
+ しないノードを展開するようにした。
+
+2001-11-16
+
+ * src/compose.c: To:, Cc:, Bcc:, Newsgroups: のどれかが有効な
+ 宛先を持っていればメッセージを送信するように修正。
+ compose_check_for_valid_recipient(): 新規。
+ * src/grouplistdialog.c: UI を改良。
+ 適切な説明と検索ボタンを追加。
+ 検索でグループリストを再び取得しないようにした。
+
+2001-11-15
+
+ * src/news.c: news_session_get(): 最終アクセス時間を正しく更新する
+ ようにした。
+ news_group_list_free(): 新規。
+ * src/grouplistdialog.c: リソースを正しく解放するようにした。
+
+2001-11-15
+
+ * src/folderview.c
+ src/grouplistdialog.[ch]: 新ニュースグループ購読ダイアログの
+ さらなるマージ。
+ * src/news.[ch]: news_remove_group_list() を
+ news_remove_group_list_cache() に名称変更。
+
+2001-11-14
+
+ * src/defs.h: MAX_ENTRY_LENGTH の定義を追加。
+ * src/compose.c: compose_add_entry_field(): 最大長を指定して
+ 新規エントリを作成するようにした。
+
+2001-11-13
+
+ * src/grouplistdialog.c: リーフでないノードも選択可能にした。
+ 各ノードに完全なニュースグループ名を付けるようにした。
+
+2001-11-13
+
+ * src/grouplistdialog.c
+ src/news.[ch]: 新ニュースグループ購読ダイアログのマージ
+ (現在進行中。まだ使わないで下さい!)。
+
+2001-11-12
+
+ * src/utils.[ch]: decode_uri(): 新規。 URL エンコードされた文字列
+ をデコードする。
+ * src/compose.[ch]: compose_new_with_recipient(): mailto URL を
+ 受け付けるようにした。
+ compose_entries_set(): 新規。 mailto URL をパースし、各値を
+ エントリに入れる。
+
+2001-11-12
+
+ * src/compose.c: compose_forward(): 転送時の引用符を使用していな
+ かったバグを修正(岩根さん thanks)。
+ * src/codeconv.[ch]
+ src/mainwindow.c
+ src/prefs_common.c: タイ語のエンコーディングを追加(Manrat
+ Chobchuen さん thanks)。
+
+2001-11-08
+
+ * src/socket.c: sock_connect_by_hostname(): h_errno を削除。
+ * src/session.h
+ src/defs.h
+ src/imap.[ch]
+ src/news.c: Session に last_access_time を追加。
+ imap_session_get(): アクセス間隔が超過したときのみ接続を
+ チェックするようにした。
+
+2001-11-07
+
+ * version 0.6.5
+
+2001-11-07
+
+ * src/socket.c: ssl_gets(): SSL_peek を使用。
+ * NEWS と AUTHORS を更新。
+ * Makefile.am: release ターゲットを修正。
+
+2001-11-06
+
+ * src/template.c: テンプレートファイルのフォーマットを RFC2822
+ ライクに変更。
+ * src/compose.c: compose_template_apply(): 文字列を挿入している
+ 間テキストウィジェットを freeze するようにした。
+
+2001-11-05
+
+ * po/POTFILES.in: src/template_select.c を削除。
+ * src/summaryview.c: summary_set_header()
+ src/address.c: address_parse_str()
+ src/filter.c: filter_read_str()
+ src/news.c: news_parse_xover()
+ src/procheader.c: procheader_get_fromname()
+ src/utils.c: subject_compare():
+ Xalloca() + strcpy() を Xstrdup_a() で置換。
+ * src/inputdialog.[ch]: combo モードを追加。
+ input_dialog_combo(): 新規。
+ * src/prefs_common.[ch]: MIME オープンコマンドの設定を追加。
+ prefs_common_{read, save}_config(): コマンドヒストリの読み書き。
+ * src/mimeview.c: mimeview_open_with(): combo 入力ダイアログを使用。
+ * src/utils.[ch]: add_history(): ヒストリリスト管理関数。
+
+2001-11-04
+
+ * src/compose.c: テンプレートをメニューから選択するようにした。
+ compose_set_template_menu(): 新規。
+ compose_reflect_prefs_all(): 新規。
+ compose_template_apply(): 新規。パースするためにダミーの MsgInfo
+ を使用。
+ * src/template.[ch]: テンプレートリストを static なヒープに保存。
+ template_get_config(): 新規。
+ template_set_config(): 新規。
+ * src/prefs_template.c: テンプレートリストをグローバルな領域に保存
+ しないようにした。
+ * src/template_select.[ch]: 削除。
+ * src/quote_fmt_parse.y: メッセージを引用するときに folderitem を
+ チェック。
+ * src/mh.c: mh_add_msg(): link() が失敗したときは常にファイルを
+ コピーするようにした(大城さん thanks)。
+
+2001-11-03
+
+ * src/utils.[ch]: get_template_dir(): 新規。
+ * src/template.c: get_template_dir() を使用。
+
+2001-11-02
+
+ * src/prefs_template.c: ダイアログのレイアウトを修正。
+ 記号の説明ボタンを追加。
+ * src/summaryview.c: ソート対象のカラムに矢印マークを表示。
+ summary_set_column_titles(): 新規。
+ * INSTALL
+ INSTALL.jp
+ README
+ README.jp
+ TODO
+ TODO.jp: ドキュメントを更新。
+
+2001-11-02
+
+ * src/Makefile.am: checkbox_{on, off}.xpm が抜けていたので追加。
+ * src/textview.c: textview_key_pressed()
+ src/mimeview.c: mimeview_key_pressed()
+ src/summaryview.c: summary_key_pressed(): Delete キーでメッセージ
+ を削除するようにした。
+
+2001-11-01
+
+ * src/socket.c: ssl_gets(): SSL_read() が 0 を返したときに無限
+ ループに陥るバグを修正。
+ * src/utils.[ch]: strcrchomp(): 新規。文字列の末尾から CR を除去
+ する。
+ * src/quote_fmt_parse.y: メッセージ挿入時に CRLF を LF に変換。
+ 警告を抑制するために yylex() のプロトタイプを追加。
+ * テンプレート機能をマージ。
+ * src/prefs_template.[ch]
+ src/template.[ch]
+ src/template_select.[ch]: 新規。
+ prefs_templates_* -> prefs_template_* に名称変更。
+ * src/compose.c: テンプレートメニューを追加。 replyinfo を Compose
+ に追加。
+ * src/mainwindow.c: テンプレート設定メニューを追加。
+ * src/quote_fmt_lex.l: タブと改行文字をそのまま出力するようにした。
+ * src/prefs_common.c: 引用フォーマットの設定名を
+ 'reply_quote_{mark, format}' と 'fw_quote_{mark, format}' に変更。
+
+2001-10-31
+
+ * src/prefs_common.[ch]: 引用タブを追加し、引用設定を作成タブから
+ 移動。
+ * 新引用フォーマットパーサをマージ。
+ * src/quote_fmt_lex.h
+ src/quote_fmt.h
+ src/quote_fmt_lex.l
+ src/quote_fmt_parse.y: 引用フォーマットパーサ用新規ファイル。
+ * configure.in: lex と yacc のチェックを追加。
+ * src/compose.c: compose_quote_file(), compose_quote_parse_fmt():
+ 削除。
+ compose_quote_fmt(): 新規。
+ * src/prefs_common.[ch]: 引用タブに転送フォーマットの設定を追加。
+ 引用記号の説明ダイアログを更新。
+ * src/quote_fmt_parse.y: テキストパートが取得できなくてもファイルを
+ 読み込もうとするバグを修正。
+
+2001-10-31
+
+ * src/pixmaps/checkbox_off.xpm
+ src/pixmaps/checkbox_on.xpm: 新規。
+ * src/account.c: 「全受信」のステータスをチェックボックスの pixmap
+ で表示するようにした。
+
+2001-10-30
+
+ * src/send.c: コードの整理。たくさんの引数の代わりにアカウント
+ 設定構造体を渡すようにした。
+ SMTP AUTH のパスワードが指定されていない場合は尋ねるようにした。
+ (Mio さん thanks)。
+
+2001-10-30
+
+ * src/procheader.c: procheader_parse(): In-Reply-To: ヘッダの
+ 複数のメッセージ ID を正しくパースしていなかったバグを修正
+ (梶原さん thanks)。
+
+2001-10-29
+
+ * src/account.c: アカウント一覧の 'G' カラムのクリックによる
+ 「全受信」設定を可能にし、簡単な説明を加えた。
+ * src/prefs_common.c: prefs_send_create(): 送信コードセットの
+ 説明を追加。
+
+2001-10-28
+
+ * src/prefs_account.[ch]: 受信箱のエントリを受信タブに移動し、
+ 選択ボタンと簡単な説明を追加。
+ * src/Makefile.am: CPPFLAGS に SYSCONFDIR を追加。
+ * src/procmime.c:
+ procmime_get_mime_type_table()
+ procmime_get_mime_type_list(): $(SYSCONFDIR)/mime.types
+ (見つからない場合は /etc/mime.types) と
+ $(HOME)/.sylpheed/mime.types を読み込むように修正。
+
+2001-10-27
+
+ * src/prefs_account.c: アドレス自動指定を作成タブに移動。
+ prefs_account_create(): 正しいウィンドウサイズを得るために
+ gtk_widget_show_all() を削除。
+ * src/prefs_common.c: 「プログラムのパス」を「コマンド」に変更。
+
+2001-10-26
+
+ * src/textview.c: textview_set_font(): EUC-JP locale でロシア語
+ の文字集合に対応。
+ * src/summaryview.c: summary_delete(): (多分)削除時のクラッシュ
+ バグを修正。
+ * prefs_account.c
+ prefs_common.c
+ prefs_summary_column.c: 英語を少し改良。
+ * src/main.c: get_queued_message_num(): 送信待ちフォルダが見付から
+ ない場合に警告を出力しないようにした。
+
+2001-10-21
+
+ * version 0.6.4
+
+2001-10-21
+
+ * src/prefs_summary_column.[ch]:
+ prefs_summary_column_get_config() を public にした。
+ * src/summaryview.c: summary_ctree_create(): コードの整理。
+ * configure.in: リンク時の問題のために SSL のチェックの位置を
+ LDAP の後に移動。
+
+2001-10-21
+
+ * src/mainwindow.c
+ src/summaryview.c: 送信控で再編集できるようにした。
+ * src/prefs_summary_column.[ch]: 新規。サマリのカラムを設定するため
+ の UI 。
+ * src/mainwindow.[ch]: main_window_set_summary_column(): 新規。
+ summary_set_column_order() を呼ぶ。
+ * src/summaryview.[ch]:
+ summary_ctree_create(): 新規。summary_create() から分離。
+ summary_set_column_order(): 新規。現在の CTree を削除し、新たな
+ CTree で置き換える。
+
+2001-10-19
+
+ * src/smtp.[ch]: smtp_from(): 認証に失敗した場合中断するようにした。
+ * C++ スタイルのコメントを C スタイルに変更し、不要なコメントアウト
+ されたコードを削除。
+ * src/addrcache.[ch]
+ src/addressbook.c
+ src/addrindex.[ch]
+ src/jpilot.[ch]
+ src/syldap.[ch]: アドレス帳のコードを更新し、 LDAP のスレッド
+ のバグを修正。
+ * src/ldif.[ch]
+ src/importldif.[ch]: 新規。
+
+2001-10-18
+
+ * src/about.c: コンパイル済機能にいくつかの項目を追加。
+ * src/addr_compl.c: LOG_MESSAGE を debug_print に変更。
+ * src/addressbook.c: "V-Card" を "vCard" に変更。
+ addressbook_edit_address_cb(): invalidate_address_completion()
+ をアドレスが変更された箇所に追加。
+ * src/codeconv.c: C++ スタイルのコメントを C スタイルに変更。
+
+2001-10-17
+
+ * src/compose.c: 「送信」ショートカットを Ctrl+Enter に変更。
+
+2001-10-16
+
+ * src/inc.c: キャンセルボタンが2回押されたら sylpheed がクラッシュ
+ するバグを修正。
+
+2001-10-16
+
+ * src/procmsg.c: procmsg_get_thread_tree(): 未完成のスレッドを完成
+ させるようにした。
+ * src/summaryview.c:
+ summary_thread_init(): summary_thread_build() から分離。
+ summary_thread_build(): 初期化のためのコードを削除。
+ summary_set_ctree_from_list(): summary_thread_build() の代わりに
+ summary_thread_init() を呼ぶようにした。
+ summary_filter(): 即時実行の設定にも関わらずメッセージを移動しない
+ バグを修正。
+
+2001-10-14
+
+ * src/procmsg.c: procmsg_get_thread_tree(): 新規。メッセージリスト
+ から反転したスレッドツリーを生成する。
+ * src/summaryview.c: summary_set_ctree_from_list(): ノードを末尾
+ に追加する代わりに先頭に追加するようにした。これにより GtkCTree
+ 内部でのノードリストのトラバースを避けることができ、サマリ表示
+ をかなり高速化できる(O(n^2) -> O(n) のオーダー)。
+
+2001-10-12
+
+ * src/prefs_common.c
+ src/summaryview.[ch]: 順序変更可能なカラムのための最初の修正。
+
+2001-10-12
+
+ * src/procmsg.c: procmsg_get_mark_sum(), mark_sum_func(): メモリ
+ リークを修正。
+ * src/folderview.c: folderview_button_pressed(): コードの整理と、
+ メインウィンドウがロックされていたら sensitivity を off にする
+ ようにした。
+ * src/syldap.c: syldap_read_data(): 不要かつ移植性に問題のある
+ sched_yield() を削除。
+
+2001-10-11
+
+ * src/folderview.c: 「フォルダツリーを更新」コンテキストメニュー
+ を「フォルダツリーを再スキャン」に変更し、「フォルダツリーを更新」
+ をフォルダの状態のみを更新するようにした。
+ folderview_update_all_node(): メッセージダイアログを表示しない
+ ようにした。
+ * src/gtkutils.c: gtkut_widget_get_uposition()
+ src/mainwindow.c: main_window_popup(): 座標を非負の値に
+ クリッピングするようにした。
+
+2001-10-10
+
+ * src/utils.c: to_human_readable(): 少し最適化。
+ * src/summaryview.c: summary_delete(): フォーカスの問題を修正。
+ summary_find_{prev,next}_msg(): 新規。前/次の削除されていない
+ メッセージを検索する。
+ * src/prefs_filter.c: 移動した行が完全に表示されなくなった場合は
+ 自動的に CList をスクロールさせるようにした。
+
+2001-10-09
+
+ * いくつかの autotool スクリプトを更新。
+ * src/codeconv.c: conv_encode_header(): エンコーディングの変換に
+ 失敗した場合に無限ループを起こすバグを修正。
+ * src/codeconv.[ch]: 旧バージョンの libjconv のための修正
+ (jconv_info_get_current_codeset() が "EUC-JP" の代わりに "EUCJP"
+ を返していた)。
+
+2001-10-08
+
+ * version 0.6.3
+
+2001-10-08
+
+ * src/compose.c: compose_write_to_file()
+ src/codeconv.c: conv_codeset_strdup(): C locale 上での libjconv
+ 問題へのさらなる対処。
+ * src/editldap_basedn.c: ダイアログを開くときの segfault を修正。
+ * src/utils.c: is_next_mbs()
+ src/compose.c: compose_wrap_line(), compose_wrap_line_all():
+ ANSI C へ準拠させるために MB_CUR_MAX を MB_LEN_MAX へ変更。
+ * configure.in: 必要な GPGME のバージョンを 0.2.3 に上げた。
+ * src/pop.c: pop3_getauth_user_recv(): POP3 サーバが通常の認証を
+ 拒否したときに受信ダイアログを閉じるバグを修正。
+
+2001-10-07
+
+ * src/prefs_common.c: prefs_receive_create(): 英語の修正。
+ * src/compose.c: compose_set_ext_editor_sensitive(): メニューの
+ sensitivity を正しくセットしていなかったバグを修正(Melvin Hadasht
+ さん thanks)。
+ * src/summaryview.c: 現在のフォルダがごみ箱の場合に「削除」操作を
+ 実行したらメッセージを完全削除するようにした。
+ 最後の行を正しく選択しないバグを修正(Alfons Hoogervorst さん
+ thanks)。
+ * src/folder.[ch]: folder_item_remove_msgs(): 新規。リストで与え
+ られた全てのメッセージを削除する。
+
+2001-10-05
+
+ * src/summaryview.c: summary_show(): 「フォルダに入ったときに未読
+ メッセージを開く」オプションが ON になっていてもメッセージを
+ 表示しないバグを修正。
+
+2001-10-03
+
+ * src/procmime.c: procmime_get_text_content(): HTML に対応。
+
+2001-10-02
+
+ * src/summaryview.[ch]: 新たなロック機構を実装し、全ての静的な
+ ロックを summary_lock(), summary_unlock() で置き換え、いくつか
+ の関数にさらにロックを追加した。
+ これにより 'd' (削除) キーを押しっぱなしにしたときに segfault を
+ 起こすバグを修正。
+
+2001-10-01
+
+ * src/addressbook.c: addressbook_folder_load_person(): segfault を
+ 起こすバグを修正(Stefaan A Eeckels さん thanks)。
+
+2001-09-30
+
+ * src/textview.[ch]: textview_set_position() を追加。
+ * src/messageview.[ch]: messageview_set_position() を追加。
+ * src/addrbook.c
+ src/addrcache.c
+ src/addressadd.c
+ src/addressbook.c
+ src/addrindex.c
+ src/addritem.c
+ src/editaddress.c
+ src/editbook.c
+ src/editgroup.c
+ src/editjpilot.c
+ src/editldap.c
+ src/editldap_basedn.c
+ src/editvcard.c
+ src/jpilot.c
+ src/mgutils.c
+ src/syldap.c
+ src/vcard.c: C++ スタイルのコメントを C スタイルに変換。
+ * src/imap.c: QUOTE_IF_REQUIRED(): 新規マクロ。文字列を新規
+ バッファにコピーし、必要ならダブルクォートで括る。
+ imap_status(), imap_cmd_login(), imap_cmd_list(),
+ imap_cmd_do_select(), imap_cmd_create(), imap_cmd_delete(),
+ imap_cmd_copy(): QUOTE_IF_REQUIRED() を使用。
+ * compose.c: compose_write_to_file(): libjconv 使用時に C locale
+ で 8bit コードが変換できない問題に対処。
+ * codeconv.[ch]: エンコーディング文字列に "ANSI_X3.4-1968" を追加。
+ conv_codeset_strdup(): 変換元と変換先のコードセットが同一の
+ 場合は変換しないようにした。
+
+2001-09-30
+
+ * src/textview.[ch]: textview_search_string_backward(): 新規。
+ 新規メンバ cur_pos を TextView に追加。
+ 正しい editable の位置を得るために button_press_event を
+ gtk_signal_connect_after() で接続。
+
+2001-09-27
+
+ * src/folder.c: folder_write_list_recursive(): スレッド解除の状態
+ を保存。
+
+2001-09-26
+
+ * src/summaryview.c: ポップアップメニューの構成を変更。
+
+2001-09-25
+
+ * src/folder.c
+ src/folder.h
+ src/mainwindow.c
+ src/summaryview.c: フォルダ毎のスレッド表示設定ができるようにする
+ Alfons さんのパッチを適用(thanks!)。
+
+2001-09-23
+
+ * src/message_search.[ch]: 新規。現在のメッセージの検索ダイアログ。
+ * src/gtkutils.[ch]: gtkut_text_match_string(): 新規。 GtkText の
+ 現在位置のテキストと与えられたワイドキャラクタ文字列を比較。
+ * src/messageview.[ch]: messageview_search_string()
+ src/textview.[ch]: textview_search_string(): 見つかったら TRUE
+ を返すようにした。
+ * src/textview.[ch]: 本文の開始位置を記憶。
+
+2001-09-21
+
+ * src/procmime.c: procmime_get_first_text_content(): MIME 構造全体
+ を探索するように修正。
+ * src/summary_search.c: summary_search_execute(): マクロの代わりに
+ strdup_mbstowcs() を使用。マッチしたメッセージを表示するようにした。
+
+2001-09-20
+
+ * src/inc.c: バックグラウンドの POP3 プロセスのハングまたはクラッシュ
+ を修正(Sergey Vlasov さん thanks)。
+ * src/summary_search.c: 本文検索機能を追加。
+ * src/procmime.[ch]: procmime_find_string(): 引数と戻り値を変更。
+ 大小文字の区別のオプションを追加。
+
+2001-09-20
+
+ * src/procmime.[ch]:
+ procmime_find_string()
+ procmime_find_string_part(): 新規。メッセージから文字列を検索する。
+ procmime_get_text_part() を procmime_get_first_text_content() に
+ 名称変更。
+ procmime_get_text_content(): 新規。指定した MIME パートのテキスト
+ 内容を返す。
+ procmime_mimeinfo_next(): 新規。 MimeInfo ツリーの次のノードを
+ 返す。
+
+2001-09-19
+
+ * src/procmime.c: procmime_get_text_part(): 入れ子状のマルチパート
+ メッセージのテキストパートを正しく見つけるように修正。
+ * src/procmime.h: MimeInfo 構造体の例を追加。
+ * src/mimeview.c: mimeview_show_message(): 最初のテキストパートを
+ 探すようにした。
+
+2001-09-17
+
+ * src/mainwindow.c: ac_menu_popup_closed(): segfault を起こすバグ
+ を修正。「アカウント毎の設定...」メニュー項目を変更。
+
+2001-09-17
+
+ * version 0.6.2
+
+2001-09-16
+
+ * src/addrindex.c: 旧形式のアドレス帳の「共有アドレス」と「個人用
+ アドレス」を翻訳するようにした。
+
+2001-09-12
+
+ * src/utils.c: get_quote_level(): 最適化とバグ修正。
+ * src/codeconv.[ch]: conv_get_current_locale(): 新規。
+ * src/editaddress.c: edit_person_page_basic(): 特定のロカールで
+ 姓・名の順序を交換。
+
+2001-09-11
+
+ * src/compose.c: 現在の段落を整形するようにする安松さんのパッチを
+ 適用(thanks!)。引用された段落を整形しないように修正。
+ compose_create(): 再編集モードでエントリを自動的に埋めないように
+ した。
+ * src/mainwindow.c
+ src/summaryview.[ch]: 「全て読んだことにする」オプションを追加。
+ summary_mark_all_read(): 新規。
+
+2001-09-10
+
+ * src/vcard.c
+ src/mgutils.c
+ src/syldap.c
+ src/editldap.c
+ src/editldap_basedn.c
+ src/jpilot.c
+ src/editjpilot.c: 全ての警告を除去。
+ * configure.in
+ src/jpilot.[ch]: Debian システムで JPilot のヘッダファイルを
+ 検出できない問題を修正。
+ * src/mainwindow.c
+ src/summaryview.[ch]: マーク、未読、添付、そしてカラーラベル
+ によるソートができるようにした。前/次のフラグ付きメッセージ
+ への移動ができるようにした。
+
+2001-09-09
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: 色のバランスを修正。
+ * src/utils.[ch]: execute_sync(): 新規。
+ execute_command_line(): 非同期モード用の引数を追加。
+ * src/inc.c: inc_mail(): execute_command_line() を使用。
+
+2001-09-08
+
+ * src/prefs.[ch]
+ src/prefs_common.[ch]
+ src/prefs_account.c: レイアウトを修正。外部エディタを自動的に
+ 起動するオプションを追加。
+ * src/compose.c: オプションが指定されていたら外部エディタを自動的
+ に起動するようにした。
+
+2001-09-06
+
+ * src/Makefile.am: 残りの xpm を追加。
+
+2001-09-05
+
+ * src/addressbook.c: LDAP を有効にしたときにコンパイルできない問題
+ を修正。
+ addressbook_open(): 'else' がないのを修正。
+
+2001-09-04
+
+ * src/pixmaps/dir-close.xpm
+ src/pixmaps/dir-open.xpm
+ src/pixmaps/trash.xpm: 新しいブルーのアイコンで置き換えた。
+ * Match Grun さんの新アドレス帳のコードをマージ。
+ * src/pixmaps/address.xpm
+ src/pixmaps/book.xpm
+ src/pixmaps/category.xpm
+ src/pixmaps/interface.xpm
+ src/pixmaps/jpilot.xpm
+ src/pixmaps/ldap.xpm
+ src/pixmaps/vcard.xpm: 新規アイコン。
+ * src/addrbook.[ch]
+ src/addrcache.[ch]
+ src/addressadd.[ch]
+ src/addressitem.[ch]
+ src/addrindex.[ch]
+ src/addritem.[ch]
+ src/editaddress.[ch]
+ src/editbook.[ch]
+ src/editgroup.[ch]
+ src/editjpilot.[ch]
+ src/editldap.[ch]
+ src/editldap_basedn.[ch]
+ src/editvcard.[ch]
+ src/jpilot.[ch]
+ src/mgutils.[ch]
+ src/syldap.[ch]
+ src/vcard.[ch]: 新規。大量の warning を取り除くために修正。
+ addrbook_build_avail_email_vis(): メモリリークを修正。
+
+2001-09-04
+
+ * NEWS: 以前に web に置かれた全ての更新履歴を取り込んだ。
+
+2001-09-03
+
+ * src/mainwindow.c
+ src/summaryview.c: メニューの配置を修正。
+ * src/mainwindow.c: ac_menu_popup_closed(): アカウントメニューを
+ 選択後フォーカスをメインウィンドウに返さなかったバグを修正。
+
+2001-09-03
+
+ * version 0.6.1
+
+2001-09-03
+
+ * src/send.c: send_message_data(): ボディパートを正しく処理しな
+ かったバグを修正。
+
+2001-09-02
+
+ * src/inc.[ch]: inc_autocheck_(un)lock() を inc_(un)lock() に変更。
+ inc_mail(), inc_all_account_mail(): ロックされていればすぐに戻る
+ ようにした。
+ * src/account.c
+ src/prefs_common.c
+ src/prefs_account.c: inc_autocheck_timer_{remove,set}() の代わりに
+ inc_lock() と inc_unlock() を用いるようにした。
+ * src/summaryview.c: summary_set_colorlabel_color(): 視認性のために
+ ラベル色と選択前景色との平均をとるようにした。
+
+2001-09-01
+
+ * src/inc.[ch]: inc_autocheck_lock(), inc_autocheck_unlock(): 新規。
+ ロックカウントを増加/減少させる。
+ * inc_autocheck_func(): ロックされていれば、自動チェックを1秒遅ら
+ せるようにした。
+ inc_autocheck_timer_set_interval(): 引数で間隔を指定。
+ * src/summaryview.c: summary_show(): 処理中は自動チェックをロック
+ するようにした。
+ * src/main.c: app_will_exit(): 自動チェックタイマを削除。
+ * acconfig.h
+ src/defs.h: 不要なコンパイルを避けるために PACKAGE と VERSION
+ の定義を削除。
+ * configure.in: PACKAGE と VERSION の AC_DEFINE_UNQUOTED() を
+ AC_SUBST に変更し、 src/version.h を AC_OUTPUT に追加。
+ * src/version.h.in: 新規。
+ * src/intl.h: dgettext() を gettext() に変更。
+
+2001-08-31
+
+ * po/ja.po: 古いバージョンの GTK+ で Sylpheed をクラッシュさせる
+ typo を修正。
+ * configure.in: 結果を正しく表示していなかったバグを修正。
+ --enable-compface と --enable-jconv がオプションを無効にしていた
+ バグを修正。
+ * src/procmsg.c: procmsg_send_queue(): メッセージの送信に失敗しても
+ 中断しないようにした。
+ * src/compose.c: compose_write_headers(): 出力ファイルに Bcc:
+ ヘッダを付加するようにした。
+ * src/send.c: send_message_data(): 新規。send_message_smtp() から
+ 分離。送信前に Bcc: ヘッダを削除するようにした。
+
+2001-08-30
+
+ * version 0.6.0
+
+2001-08-30
+
+ * src/send.c: ローカルの sendmail コマンドによる送信を実装。
+ send_message_local(): 新規。コマンドを popen() で呼び出し、
+ RFC822 メッセージの内容をコマンドに送信する。
+ * src/prefs_common.[ch]: 外部送信コマンドのオプションを有効にした。
+ * src/defs.h: #define DEFAULT_SENDMAIL_CMD /usr/sbin/sendmail -t
+ * src/account.c: account_edit_create(): プロトコル行を広げた。
+ * src/summaryview.c: summary_set_colorlabel_color(): コードの整理。
+
+2001-08-30
+
+ * src/folder.c: folder_item_remove_msg(): 最後のメッセージが削除
+ されたらフォルダを再びスキャンするようにした。
+ * src/compose.c: compose_queue(), compose_draft_cb(): 新しいメッ
+ セージを追加した後に再編集対象のメッセージを削除するようにした。
+
+2001-08-29
+
+ * src/compose.c: compose_queue(): キューイングヘッダに AID: を追加。
+ * src/send.c: send_message_queue(): AID: ヘッダを探し、 SSV: の
+ 代わりにアカウントで指定されたサーバを使用するようにした。
+ * src/summaryview.c
+ src/compose.[ch]: 送信待ちメッセージを再編集可能にした。
+ compose_remove_reedit_target(): 新規。古い再編集対象のメッセージ
+ を削除する。
+ compose_send(), compose_queue(), compose_draft_cb(): 再編集
+ モードのときは、古いメッセージを削除するようにした。
+ * src/procmsg.c: procmsg_msg_exist(): 警告を出力するバグを修正。
+
+2001-08-28
+
+ * 文字列をハッシュテーブルに保存し、メモリ確保を最小化する Alfons
+ Hoogervorst さんからの XML string table パッチを適用(thanks!)。
+ * src/stringtable.[ch]: 新規。
+ official な GLib のシンボル名ではないため型と関数名から全ての
+ G と g_ プレフィクスを削除。
+ string_table_insert_string(): 検索時に無効なポインタを参照する
+ 可能性のあったバグを修正し、また少し最適化した。
+
+2001-08-27
+
+ * claws ブランチからカラーラベル機能をマージ(Satoshi Nagayasu さん
+ と Alfons Hoogervoost さん thanks)。
+ * src/colorlabel.[ch]: 新規。labelcolors.[ch] から名称変更。
+ labelcolors_*() を colorlabel_*() に改名。
+ * src/summaryview.[ch]: カラーラベルに対応。
+ * src/procmsg.h: 永続フラグにカラーラベルフラグを追加。
+ * gettext 0.10.39 に更新。
+ * src/summaryview.[ch]: カラーラベルのメニュー項目を ItemFactory
+ に置いた。
+ * sylpheed.desktop: GNOME 用に追加。
+ * configure.in: いくつかのオプションに AC_MSG_CHECKING() を追加。
+ configure が完了したときに設定結果を出力するようにした。
+
+2001-08-27
+
+ * src/account.c: account_clist_set_row(): SSL が有効になっていない
+ 場合にコンパイルに失敗するバグを修正。
+
+2001-08-26
+
+ * SSL 対応を claws ブランチからマージ(Christoph Hohmann さん thanks)。
+ * src/ssl.[ch]: 新規。
+ * src/socket.[ch]: ssl_read(), ssl_write(), ssl_gets(), そして
+ ssl_getline() を追加。
+ sock_close(): SSL が有効なら ssl_done_socket() を呼ぶようにした。
+ * src/md5.[ch]: 型の衝突を防ぐために MD5_CTX の typedef を削除し、
+ MD5_CONTEXT を使用するようにした。
+ * src/prefs_account.[ch]: SSL タブを追加し、表現を変更。
+ * src/esmtp.[ch]: esmtp_ehlo() と esmtp_starttls() を追加。
+ esmtp_starttls() から SSL 初期化と HELO を削除。
+ esmtp_auth(): 引数から use_smtp_auth を削除。
+ * src/send.c: send_smtp_open(): SSL 対応を追加。
+ * src/smtp.c: smtp_helo(): esmtp が真なら esmtp_ehlo() を呼ぶように
+ した。
+
+2001-08-25
+
+ * src/mimeview.c: mimeview_open_with(): '%s' をシングルクォートで
+ 囲った。
+
+2001-08-24
+
+ * src/main.c: アカウントが設定されていなければ新規アカウント
+ ダイアログを開くようにした。
+ * src/utils.[ch]: log_verbosity_set(): 新規。 verbosity count を
+ 増加/減少させる。
+ log_print(): log_verbosity_count > 0 の場合のみステータスバーに
+ 出力。
+ log_message(): ステータスバーに出力。
+ * src/inc.c: inc_pop3_session_do(): ログの verbosity を指定。
+ * src/mainwindow.c: main_window_set_menu_sensitive(): 「新規
+ メッセージを作成」項目を追加。
+ main_window_show_cur_accoun(): 「現在のアカウント: 」の文字列を
+ 削除。
+ * src/summaryview.c: summary_show(): メインウィンドウがロックされ
+ ていれば現在のマークを無視するようにした。
+ * src/compose.c: compose_attach_property(): segmentation fault
+ を起こすバグを修正。
+
+2001-08-23
+
+ * src/mainwindow.c: main_window_get_current_state(): 新規。 UI の
+ sensitivity のための、現在の状態を返す。
+ main_window_set_toolbar_sensitive():
+ main_window_set_menu_sensitive() のようにテーブルを使用。
+
+2001-08-23
+
+ * src/mainwindow.[ch]: ステータスバーにプログレスバーとステータス
+ ラベルを追加。
+ main_window_close_cb(): ロックされていれば終了しないようにした。
+ * src/inc.c: メインウィンドウのプログレスバーも更新するようにした。
+
+2001-08-22
+
+ * src/mainwindow.[ch]: main_window_set_toolbar_sensitive(): 2番目の
+ 引数を削除し、サマリビューの状態で sensitivity を決定するように
+ した。
+
+2001-08-21
+
+ * src/pop.c: pop3_getsize_list_recv(), pop3_retr_recv(),
+ pop3_delete_recv(): 存在しないメッセージを取得しようとしないよう
+ にした。
+
+2001-08-21
+
+ * src/mainwindow.c: main_window_lock(), main_window_unlock():
+ メニューバー全体のロックを削除。
+ main_window_set_menu_sensitive(): sensitivity の変更をテーブル
+ で行うようにし、ロックに対応。
+
+2001-08-20
+
+ * src/summaryview.[ch]: summary_get_selection_type(): 新規。サマリ
+ ビューの現在の選択状態を返す。
+ summary_key_pressed(): メインウィンドウがロックされていたら
+ いくつかのコマンドで抜けるようにした。
+ * src/mainwindow.[ch]: main_window_lock(), main_window_unlock():
+ ロックカウントを増加/減少させるようにした。
+
+2001-08-19
+
+ * src/prefs_filter.c: prefs_filter_create(): デフォルトのヘッダ
+ リストに List-Id を追加。
+ * src/prefs_common.[ch]: 受信ダイアログモードのオプションを
+ インタフェースタブに追加。
+ * src/inc.[ch]: inc_progress_dialog_create(): ダイアログを transient
+ にしないようにし、設定が RECV_DIALOG_ALWAYS か、または
+ RECV_DIALOG_ACTIVE でウィンドウがアクティブのときのみダイアログを
+ 表示するようにした。
+ * src/mainwindow.[ch]: main_window_lock(), main_window_unlock():
+ 新規。ユーザインタフェースをロック/ロック解除する。
+ * src/progressdialog.c: progress_dialog_create(): ダイアログを
+ モーダルにしないようにした。
+
+2001-08-18
+
+ * src/folderview.c: folderview_update_node(): 不要な再帰呼び出しを
+ 抑制。
+ * src/menu.[ch]: menu_button_position(): 新規。ポップアップメニュー
+ の位置を計算する。
+ * src/mainwindow.c: toolbar_account_button_pressed(),
+ ac_label_button_pressed(): ポップアップメニューを正しい位置に
+ 置くようにした。メニューを開いている間ボタンのスタイルを変化
+ させるようにした。
+ ac_menu_popup_closed(): selection_done イベント時に呼ばれる新規
+ 関数。
+ * src/gtkutils.c: gtkut_ctree_node_next(): node == NULL のときに
+ クラッシュするバグを修正。
+ * src/summaryview.c: Sergey Vlasov さんからのサマリ修正パッチを
+ 適用(thanks!)。
+ スレッドを展開しない場合に更新モードで以前のメッセージを選択
+ できないバグを修正。
+ summary_select_node(): 新規。
+ * src/inc.c: Sergey Vlasov さんからのサマリビュー更新最適化パッチ
+ を適用(thanks!)。
+ 新着メッセージが受信されなければ、サマリの更新を行わないようにした。
+ Vlasov 氏のパッチに加え、 POP3 の受信情報も同様に使用。
+ * src/inc.h: Pop3State に新メンバ cur_total_num を追加。
+ * src/pop.c: pop3_retr_recv(): state->cur_total_num を増加させる。
+
+2001-08-14
+
+ * version 0.5.3
+
+2001-08-14
+
+ * src/summaryview.c: summary_set_row_marks(): 未読の行の色が正しく
+ 指定されるようにした。
+ * src/folderview.c: foldreview_update_node(): gtk_style_copy() を
+ 使用せず、あらかじめ割り当てられた style を再使用するようにした。
+ * README, README.jp: 修正。
+
+2001-08-14
+
+ * src/pop.c: pop3_getsize_list_recv(): リモートから攻撃可能な
+ メモリ破壊バグを修正(David Looney さん thanks)。
+ * src/inc.c: inc_all_account_mail(): 有効なアカウントがない、
+ あるいはローカルスプールのみの場合でも inc_finished() を呼ぶ
+ ようにした。
+ * src/summaryview.c: サマリの更新を改良する Sergey Vlasov さん
+ からのパッチを適用(thanks!)。表示されているメッセージの位置が
+ 保持される。選択、表示されているメッセージも同様に保持される。
+ summary_get_msgnum(): 新規。
+ summary_get_current_msgnum(): 削除。
+ summary_select_by_msgnum(): メッセージを表示しないようにした。
+ * src/account.c: 「全受信」カラムを追加。
+ account_clist_set_row(): 通常使用と全受信のフラグをマークアイコン
+ で表示。
+ * src/utils.c: to_human_readable(): MB と GB の小数点以下の桁数
+ を 2 に増加。
+
+2001-08-13
+
+ * 待望の :)「差出人をアドレス帳に追加」機能を実装。
+ * src/address.[ch]: address_item_new() に備考のための引数を追加。
+ address_get_folder_list(): 新規。アドレスツリーをトラバースし、
+ フォルダのリストを返す。
+ address_delete_object(): ツリーからノードを削除するように修正。
+ * src/addressbook.[ch]: addressbook_add_submenu(): 新規。アドレス
+ フォルダのメニューを作成し、それをメニューアイテムに付加する。
+ addressbook_refresh(): アドレス帳のフォルダツリーを再読込する。
+ * src/summaryview.c: summary_set_add_sender_menu(): 新規。差出人
+ をアドレス帳に追加するためのメニューを付加する。
+ summary_button_pressed(): メニューをポップアップする前に
+ summary_set_add_sender_menu() を呼ぶようにした。
+
+2001-08-12
+
+ * src/summaryview.c: summary_thread_build(): プロセスを固まらせる
+ バグを修正。初期のスレッド構築を最適化。
+
+2001-08-12
+
+ * src/summaryview.c: 多数のコードの整理を行った。
+ summary_show(): シグナルハンドラを切断/接続する代わりにブロック/
+ ブロック解除するようにした。
+ summary_set_row_marks(): 閉じたノードが未読マークの付いた子を
+ 持っていればフォントをボールドで表示するようにした。
+ summary_thread_build(): 処理中に tree_expand シグナルをブロック
+ するようにした。再帰関数の代わりにループを使用するようにした。
+ 閉じたノードを正しくマークするようにした。
+ summary_unthread(): 処理中に tree_collapse シグナルをブロック
+ するようにした。再帰関数の代わりにループを使用するようにした。
+ summary_thread_func(), summary_unthread_func(): 削除。
+ summary_tree_expanded(), summary_tree_collapsed(): 新規コール
+ バック関数。
+ * src/inc.[ch]: inc_pop3_session_do(): 接続に失敗したときに警告パネル
+ を表示しないようにした。ダイアログにより詳細な状態を表示する
+ ようにした。
+
+2001-08-10
+
+ * src/folderview.c: folderview_update_all_node(): 新規。全ての
+ ローカルフォルダを更新する。
+ * src/inc.c: scan_all_after_inc オプションがセットされていれば
+ 受信後にローカルフォルダを更新するようにした。
+ * src/prefs_common.[ch]: scan_all_after_inc オプションを追加。
+ * src/folder.h: FOLDER_IS_LOCAL(): 新規マクロ。
+
+2001-08-09
+
+ * src/defs.h
+ src/headerview.c
+ src/headerwindow.c
+ src/textview.c
+ src/prefs_common.c
+ src/prefs_common.h: ボールドと小フォントを設定可能にした。
+ src/summaryview.c: 未読メッセージをボールドフォントで表示する
+ ようにした。
+ * src/prefs_common.c
+ src/prefs_common.h
+ src/summaryview.c: 未読メッセージの強調を有効/無効にするオプション
+ を追加。
+
+2001-08-08
+
+ * src/pixmaps/mark.xpm: 修正。
+ * src/gtkutils.[ch]: gtkut_ctree_expand_parent_all(): 新規。
+ * src/summaryview.c: summary_set_ctree_from_list(): パフォーマンス
+ 向上のためにスレッドのルートメッセージを展開しないようにした。
+ summary_show()
+ summary_select_next_unread()
+ summary_step(): メッセージを開くときにスレッドを展開するようにした。
+ summary_thread_build(): オプションが ON になっていたらスレッドを
+ 展開するようにした。
+ * src/prefs_common.[ch]: 「スレッドを展開する」オプションを追加。
+
+2001-08-08
+
+ * src/prefs_common.c: 「Emacs上のメーラのマウス操作時の挙動を
+ エミュレートする」を削除。
+ * src/prefs_common.c
+ src/prefs_account.c: VSPACING_NARROW の値を 3 に変更。
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: 元に戻した。
+
+2001-08-07
+
+ * src/address.[ch]:
+ address_folder_new()
+ address_group_new()
+ address_item_new(): 戻り値を AddressObject に変更。
+ address_build_tree(): file の assertion を出さないようにした。
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: 少し修正。
+
+2001-08-06
+
+ * src/addressbook.c: いくつかのバグを修正。
+
+2001-08-06
+
+ * アドレス帳のロジック部分を別モジュールに分離(現在進行中)。
+ * src/address.[ch]: 新規。アドレス帳のロジック部分を含む。
+ * src/addressbook.[ch]: ロジック部分を削除。
+
+2001-08-04
+
+ * src/textview.c: textview_show_header(): ヘッダ名の後にゴミ文字が
+ 表示されるバグを修正。
+
+2001-08-02
+
+ * src/inc.c: inc_start(): 致命的でないエラーで中断しないようにした。
+
+2001-08-01
+
+ * version 0.5.2
+
+2001-08-01
+
+ * src/mimeview.c: mimeview_view_file(): メインプロセスのサスペンド
+ を防ぐために metamail に -x オプションを追加。
+ mimeview_button_pressed(): content-type が application/octet-stream
+ の場合は `開く' メニュー項目を選択不可にした。
+
+2001-07-31
+
+ * src/imap.c: imap_parse_atom(): エスケープされた文字を正しく処理
+ するようにした。
+ get_quoted(): 新規。エスケープ文字 '\' を処理する。
+ * src/folder.c: folder_read_list(): folderlist.xml が存在しない
+ 場合警告を出力しないようにした。
+ * src/main.c: main(): セットアップの後フォルダリストを書き出すよう
+ にした。
+ * src/textview.c: textview_create()
+ src/compose.c: compose_create(): デフォルトのタブ幅を8にした。
+
+2001-07-29
+
+ * src/prefs_common.c: date_format_select_row(): リストをキーで選択
+ したときに segfault を起こすバグを修正。
+
+2001-07-28
+
+ * src/mainwindow.c: main_window_popup(): ポップアップ時にウィンドウ
+ を非アイコン化するようにした。
+ * src/procmime.c: procmime_scan_mime_type(): 新規。
+ procmime_scan_content_type(): procmime_scan_mime_type() を使用
+ するようにした。
+ procmime_scan_mime_header(): Content-Type が
+ "application/octet-stream" の場合は添付ファイルの拡張子を調べて
+ 正しい MIME タイプを付けるようにした。
+
+2001-07-27
+
+ * src/prefs_common.c: date_format_create(): ダイアログのレイアウト
+ を修正。
+
+2001-07-26
+
+ * src/account.c: account_find_from_address(): マイナーなバグを修正。
+ * src/prefs_common.c: claws ブランチから日付の形式の設定のユーザ
+ インタフェースを取り込み、いくつかの修正を加えた。
+
+2001-07-25
+
+ * src/account.[ch]: account_edit_create(): デフォルトボタンの文字列
+ を修正。
+ account_find_from_address(): 新規。
+ * src/procmime.c:
+ procmime_scan_content_type(), procmime_scan_content_disposition():
+ ESC コード検出を修正。
+ * src/compose.c: compose_reply(): メッセージヘッダに従ってアカウント
+ を自動的に選択するようにした。
+ * src/prefs_common.[ch]: メンバ "reply_account_autosel" を追加。
+
+2001-07-25
+
+ * src/progressdialog.c: CList をスクロール可能にした。
+ * src/inc.c: inc_start(): 致命的でないエラーで中断しないようにした。
+
+2001-07-24
+
+ * Paul Kater さん作の英語版 Sylpheed User's Manual (paul@nlpagan.net)
+ を追加(thanks!)。
+ * configure.in
+ manual/Makefile.am
+ src/mainwindow.c: 英語版マニュアルに対応。
+ * manual/en/sylpheed*.html: 英語の文書を追加。
+ * AUTHORS: 更新。
+
+2001-07-23
+
+ * src/nntp.c: nntp_ok(): 後に続くメッセージを持たない応答を処理
+ できないバグを修正。
+ * src/smtp.c: smtp_ok(): 同上。
+ * src/compose.c: compose_account_option_menu_create(): アカウント
+ オプションメニューの表示形式を変更。
+
+2001-07-22
+
+ * src/prefs_customheader.c: prefs_custom_header_clist_set_row():
+ 文字列から改行コードを自動的に取り除くようにした。
+ prefs_custom_header_create(): デフォルトの選択肢に "X-Face" を
+ 追加。
+ * src/news.c: news_fetch_msg(), news_get_group_list()
+ src/imap.c: imap_fetch_msg(): 書き込みの前にキャッシュディレクトリ
+ を作成するようにした。
+ * src/procmime.c:
+ procmime_scan_content_type()
+ procmime_scan_content_disposition(): パース前に JIS を EUC-JP
+ に変換するようにした。
+ * src/codeconv.c: conv_unmime_header(): 少しコードを整理。
+ * src/compose.c: 添付ペインが表示されているがリストが空の場合は
+ 添付ヘッダを付けないようにした。
+ * src/recv.c: recv_bytes_write(): alloca() の代わりに g_malloc()
+ を使用するようにした。
+
+2001-07-18
+
+ * version 0.5.1
+
+2001-07-18
+
+ * src/compose.c: compose_quote_parse_fmt()
+ src/prefs_common.c: prefs_quote_description_create(): Cc を
+ 返信フォーマットに含める記号 `%c' を追加(Cyril Bellot さん thanks)。
+ * src/base64.[ch]
+ src/procmime.c: procmime_decode_content(): 通常の行長(4の倍数)では
+ ない base64 データをデコードできるようにする Sergey Vlasov さん
+ からのパッチを適用(thanks!)。
+
+2001-07-17
+
+ * src/procmsg.[ch]: 永続フラグと一時フラグを2つの変数に分離し、
+ MsgFlags をそれらを含む構造体にした。
+ MSG_SET_PERM_FLAGS()
+ MSG_SET_TMP_FLAGS()
+ MSG_UNSET_PERM_FLAGS()
+ MSG_UNSET_TMP_FLAGS(): 新規マクロ。
+ * src/compose.c
+ src/imap.c
+ src/inc.c
+ src/messageview.c
+ src/mh.c
+ src/news.c
+ src/procheader.c
+ src/summaryview.c: 新しい MsgFlags のために変更。
+ * src/utils.[ch]: hash_free_value_mem(): 新規。ハッシュテーブルの
+ 値を解放する。
+
+2001-07-16
+
+ * src/inc.c: inc_pop3_recv_func(), inc_progress_update():
+ 現在のサイズを人間が読みやすい形式で表示。
+ * src/grouplistdialog.c: grouplist_recv_func(): 同上。
+ * TODO
+ TODO.jp: 更新。
+
+2001-07-16
+
+ * src/codeconv.c:
+ conv_unmime_header(), conv_unmime_header_overwrite(): ヘッダ
+ フィールドの生 JIS コードに対する対処。
+ * src/folder.c:
+ folder_get_default_folder()
+ folder_get_default_inbox()
+ folder_get_default_outbox()
+ folder_get_default_draft()
+ folder_get_default_queue()
+ folder_get_default_trash(): folder_list が NULL のときに segfault
+ を起こすバグを修正。
+
+2001-07-15
+
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp
+ TODO
+ TODO.jp: 更新。
+ * src/grouplistdialog.c: grouplist_dialog_set_list(): ニュース
+ グループのリストを受信中に UI を更新するようにした。
+ grouplist_dialog_create(): エントリウィジェットとステータスラベル
+ を追加。
+ grouplist_recv_func(): 新規。
+ refresh_clicked(): 排他ロック変数を追加。
+ clist_selected(): CList が選択されたらテキストエントリをセットする
+ ようにした。 group_clist_select() から改名。
+ entry_activated(): 新規。
+ grouplist_clear(): grouplist_free() から改名。リストとエントリ
+ ウィジェットもクリアするようにした。
+ * src/news.c: news_get_group_list(): リストの追加を高速化
+ (g_slist_append() はリストのサイズが大きくなると非常に遅くなる)。
+ * src/defs.h: UI_REFRESH_INTERVAL の定義を追加。
+ NEWSGROUP_LIST の定義を変更。
+ * src/recv.c: recv_write()
+ src/send.c: send_message_smtp(): UI の更新間隔を UI_REFRESH_INTERVAL
+ (50msec) に変更。
+ * src/account.c: account_add(): ニュースアカウントを追加したときに
+ フォルダツリーを更新していなかったバグを修正。
+ * src/grouplistdialog.c: 排他ロック変数をグローバルにし、
+ grouplist_dialog_set_list() でロックするようにした。
+ * src/textview.c: メッセージの色を無効にしたときにクリッカブル URI
+ も無効になっていたバグを修正。
+
+2001-07-15
+
+ * src/grouplistdialog.c: ok_clicked(), cancel_clicked():
+ gtk_main_level() が 1 ならメインループを抜けないようにした。
+ grouplist_dialog_set_list(): リストの追加中に CList をフリーズ
+ するようにした。
+ grouplist_dialog(): リストを更新する前にダイアログを表示する
+ ようにした。
+
+2001-07-14
+
+ * src/folder.c: folder_write_list_recursive(): ノードが子を持って
+ いれば `collapsed' 属性を追加するようにした。
+ * src/grouplistdialog.[ch]: 新規。ニュースグループを一覧から選択
+ 可能。
+ * src/news.[ch]
+ news_get_group_list(): 新規。ニュースグループのリストを返す。
+ news_remove_group_list(): 新規。ニュースグループリストのキャッシュ
+ を削除する。
+ * src/folderview.c: folderview_new_news_group_cb(): input_dialog()
+ の代わりに grouplist_dialog() を呼ぶようにした。
+
+2001-07-12
+
+ * autogen.sh: 修正。
+ * src/folder.[ch]
+ src/folderview.c: フォルダの開閉状態が保存されるようにした
+ (Alfons さん thanks)。
+
+2001-07-06
+
+ * version 0.5.0
+
+2001-07-06
+
+ * src/imap.c: imap_remove_folder(): DELETE の前に EXAMINE で INBOX
+ を選択するようにした。
+ imap_cmd_do_select(): 新規。引数に応じて SELECT と EXAMINE を
+ 切り替える。
+ imap_cmd_select(): imap_cmd_do_select() を使用するようにした。
+ imap_cmd_examine(): 新規。
+ * src/folderview.c: folderview_rm_imap_folder_cb(): 削除に失敗したら
+ 現在のフォルダを再度選択するようにした。
+
+2001-07-05
+
+ * version 0.5.0pre4
+
+ * manual/ja/sylpheed.sgml
+ manual/ja/*.html: 日本語マニュアルを更新(今井さん thanks)。
+ * src/summaryview.c: summary_set_row_marks(): フォアグラウンドを
+ 正しく指定していなかったバグを修正。
+ * src/folderview.h
+ src/summaryview.h: color_normal メンバを FolderView と SummaryView
+ から削除。
+ * src/mainwindow.c: main_window_create(): color_normal を削除。
+
+2001-07-04
+
+ * src/prefs_account.[ch]: IMAP4 と NNTP のポート番号を指定可能にした。
+ * src/imap.c: imap_session_get()
+ src/news.c: news_session_new_for_folder(), news_session_get():
+ 指定されていればユーザ定義のポート番号を使用するようにした。
+
+2001-07-03
+
+ * src/imap.c: imap_scan_tree_recursive(): スキャン中にメールボックス
+ のステータスを取得するようにした。
+ imap_scan_folder(): 実装。新着、未読、合計のメッセージ数を更新する。
+ imap_status(): 新規。 STATUS コマンドの応答を解析する。
+ imap_status_uidnext(): 削除。
+ imap_cmd_status(): 削除。
+ * src/textview.c: textview_show_part(): 潜在的なメモリリークを修正。
+
+2001-07-03
+
+ * src/alertpanel.c: alertpanel_create(): メッセージが途切れるのを修正。
+ * src/rfc2015.c: rfc2015_decrypt_message(): content-type の大小文字
+ 問題を修正(この patch に関して Rene Rebe さん thanks)。
+ * src/codeconv.c: code_get_code_conv_func(): ISO-8859-1 の検出部を
+ 修正。
+ * src/prefs_common.c: prefs_send_create(): libjconv 未使用時に
+ 追加でいくつかの文字コードセットを指定できるようにした。
+ * configure.in: 一時的に --enable-threads を無効にした。
+ * INSTALL
+ INSTALL.jp: --enable-threads オプションについての記述を削除。
+
+2001-07-01
+
+ * version 0.5.0pre3
+
+ * src/folderview.[ch]: folderview_set_all(): 新規。
+ * src/account.c: account_add(): IMAP4 ツリーを作成した後
+ folderview_set_all() を呼ぶようにした。
+ account_edit_create(): リストをダブルクリックしてアカウントの設定
+ ダイアログを開けるようにした。
+ account_selected(): 新規。
+ account_clist_set(): CList のフォーカスを正しくセットするようにした。
+
+2001-06-30
+
+ * src/imap.c: imap_scan_tree(): trash が見つからなければ
+ imap_create_tree() を呼ぶようにした。
+ imap_scan_tree_recursive(): INBOX のサブフォルダを探すようにした。
+ Trash フォルダを認識するようにした。
+ imap_create_tree(): trash を作成する部分を分割した。
+ imap_create_trash(): 新規。
+ * src/folder.c: folder_build_tree(), folder_write_list_recursive():
+ no_sub と no_select を保存するようにした。
+ * src/summaryview.c: summary_show(): item->no_select が真の場合
+ 続行しないようにした。
+
+2001-06-29
+
+ * src/imap.c: imap_scan_tree(): ルートフォルダを正しくセットして
+ いなかったバグを修正。
+
+2001-06-28
+
+ * src/folderview.[ch]:
+ folderview_update_tree(): 新規。一つのフォルダツリーを更新する。
+ folderview_update_tree_cb(): 新規。
+ 「フォルダツリーを更新」をポップアップメニューに追加し、表現を
+ いくつか変更。
+
+2001-06-27
+
+ * src/imap.c: IMAP4 フォルダリストの自動スキャンを実装。
+ imap_scan_tree(): 新規。 IMAP4 フォルダ全体をスキャンする。
+ imap_scan_tree_recursive(): 新規。 IMAP4 フォルダツリーを
+ トラバースする。
+ imap_parse_list(): 新規。ローカルパスを IMAP4 パスに変換する。
+ * src/folder.h: no_sub と no_select を FolderItem に追加。
+ * src/folder.c: folder_tree_destroy(): 変数をいくつかリセットする
+ ようにした。
+ * src/folderview.c: folderview_scan_tree_func(): IMAP4 に対応。
+
+2001-06-26
+
+ * src/imap.c: imap_parse_envelope(): 次の行に続く FETCH 応答を
+ 解析できなかったバグを修正。
+ imap_parse_fetch_element(): 削除。
+ imap_parse_atom(), imap_parse_one_address(), imap_parse_address(),
+ imap_parse_envelope(), imap_get_uncached_messages(): FETCH 応答
+ を解析するために GString と sock_getline() を使用するようにした。
+ imap_remove_all_msg(): メッセージを正しく削除していなかったバグを
+ 修正。
+ imap_parse_address(): アドレスを正しく結合していなかったバグを
+ GString を使用して修正。
+ * src/socket.[ch]: sock_getline(), fd_getline(): 新規。行全体を
+ 読み込み、新規にアロケートされた文字列を返す。
+ * src/prefs_account.[ch]: 「IMAPサーバディレクトリ」エントリを追加。
+
+2001-06-25
+
+ * version 0.5.0pre2
+
+ * src/imap.c: imap_create_tree(): imap_create_folder() にローカル
+ ファイルシステムのセパレータで区切られているパスを渡すようにした。
+ imap_create_folder(): STATUS コマンドの代わりに LIST を使って
+ フォルダの存在を調べるようにした。
+ imap_cmd_list(): 新規。
+ imap_query_password(): 新規。
+ imap_session_new(): パスワードが設定されていなければ尋ねるように
+ した。
+
+2001-06-24
+
+ * src/imap.c: imap_parse_envelope(): FETCH の結果を任意の順序で
+ 解析できるようにした。
+ imap_parse_fetch_element(): 新規。 FETCH の結果の名前と値のペア
+ を解析する。
+ imap_parse_flags(): より柔軟性を持たせるために修正。
+ * src/utils.[ch]: set_log_file(): 新規。ロギングのために新しい
+ ファイルを開く。
+ close_log_file(): 新規。開いたログファイルを閉じる。
+ log_print(), log_message(), log_warning(), log_error(): ログ
+ ファイルにも出力するようにした。
+
+2001-06-22
+
+ * src/imap.c: imap_cmd_status(): 代入の前に "value" へのポインタを
+ チェックするようにした(西島さん thanks)。
+
+2001-06-21
+
+ * src/folderview.c: folderview_drag_motion_cb(): MH と IMAP4 フォルダ
+ 間の DnD が(今のところ)できないようにした(平松さん thanks)。
+ * src/foldersel.[ch]: 現在のフォルダの対象になれないフォルダを
+ 表示しないようにした。
+
+2001-06-20
+
+ * version 0.5.0pre1
+
+ * src/imap.c
+ imap_get_msg_list()
+ imap_cmd_envelope()
+ imap_cmd_fetch()
+ imap_cmd_copy()
+ imap_cmd_store(): 連番の代わりに UID を使用するようにした。
+ imap_set_article_flags() を imap_set_message_flags() に名称変更。
+ * src/summaryview.c: summary_execute(): 現在のフォルダが IMAP4
+ でもサマリを更新しないようにした。
+ * src/utils.[ch]: remove_numbered_files(): 引数の型を gint から
+ guint にした。
+
+2001-06-19
+
+ * src/imap.c: imap_cmd_login(), imap_cmd_select(), imap_cmd_status(),
+ imap_cmd_create(), imap_cmd_delete(), imap_cmd_copy(): 文字列
+ にスペースが入っていなければダブルクォーテーションで囲まない
+ ようにした(古い Cyrus IMAP4 server への対処)。
+ imap_create_folder(): セパレータ置換のバグ修正。
+ imap_session_connect_if_not() を imap_session_get() に名称変更。
+ imap_get_msg_list(): use_cache が off のときは全てのキャッシュ済
+ メッセージを削除。
+ imap_delete_cached_messages(): ディレクトリエントリを読んで指定
+ した範囲のキャッシュ済ファイルを削除するようにした。
+ imap_parse_one_address(): fromname が空の場合は差出人アドレスと
+ 同じにするようにした。
+ * src/utils.[ch]: remove_numbered_files(): 新規。範囲を指定可能。
+ * src/summaryview.c: summary_execute(): 現在のフォルダが IMAP4
+ の場合サマリを更新するようにした。
+ KEY_PRESS_EVENT_STOP(): 新規マクロ。
+ summary_key_pressed(): summary_execute() を呼ぶときにシグナルの
+ 発行を止めるようにした。
+ summary_select_by_msgnum(): msg_is_toggled_on が TRUE のときだけ
+ メッセージを表示するようにした。現在のページを選択されたノード
+ のところへ移動するようにした。
+ * src/news.c; news_delete_old_articles(): ディレクトリエントリを
+ 読んで指定した範囲のキャッシュ済ファイルを削除するようにした。
+ * src/folderview.c:
+ folderview_selected(), folderview_button_released(): フォルダを
+ 正しく選択しなかったバグを修正。
+
+2001-06-18
+
+ * src/mainwindow.c
+ src/summaryview.c
+ src/prefs_common.c: 英語表現の改善(Paul Mangan さん thanks)。
+ * src/mainwindow.c: compose_cb()
+ src/summaryview.c: summary_key_pressed()
+ src/compose.c: compose_new_with_recipient(): 新規記事を作成する
+ ときにニュースグループのエントリを自動的に埋めるようにした。
+
+2001-06-17
+
+ * src/procmsg.c: procmsg_msg_list_free(): リストを正しく解放して
+ いなかったバグを修正。
+
+2001-06-16
+
+ * version 0.4.99
+
+ * src/imap.c: imap_find_namespace(): namespace のパス区切りを
+ 比較の前にスラッシュで置換するようにした。
+ imap_remove_folder(): namespace を使用。
+ imap_create_tree(): Trash を作成するときに namespace を使うように
+ した。
+ imap_get_msg_list(): exists == 0 のときに古いリストを返しメモリ
+ リークを起こしていたバグを修正。
+ imap_select(): 新規。 imap_cmd_select() のラッパー。
+ * src/foldersel.c: foldersel_set_tree(): IMAP4 フォルダも表示する
+ ようにした。
+
+2001-06-15
+
+ * src/folderview.c:
+ folderview_new_folder_cb()
+ folderview_new_imap_folder_cb(): フォルダの作成または削除に失敗
+ したらエラーダイアログを表示するようにした。
+ サブフォルダを含むフォルダを作成できるようにした。
+ folderview_button_pressed(): 特別な IMAP4 フォルダ上で削除メニュー
+ を無効にした。
+ * AUTHORS: claws ブランチから取込。全ての contributor を含んでいる。
+ * src/send.c: キャンセルを有効にした。
+ EXIT_IF_CANCELLED(): 新規マクロ。
+ SendProgressDialog に cancelled フラグを追加。
+ * src/utils.[ch]: strtailchomp(): 新規。末尾の指定した文字を取り除く。
+ * src/imap.c: imap_cmd_fetch(): MS Exchange 2000 サーバのための修正。
+
+2001-06-15
+
+ * src/imap.c: imap_create_tree(): 新規。 INBOX や Trash のような
+ 必要なフォルダを作成する。
+ imap_do_copy(), imap_do_copy_msgs_with_dest(): COPY が失敗したら
+ expunge しないようにした。
+ imap_remove_all_msg(): exists == 0 ならすぐに return するように
+ した。
+ * src/account.c: account_add(), account_set_missing_folder():
+ folder->create_tree() を使用するようにした。
+
+2001-06-14
+
+ * src/imap.c: さらに namespace を実装。
+ * imap_find_namespace(), imap_path_separator_subst(): 新規。
+
+2001-06-13
+
+ * src/imap.c: imap_parse_namespace(), imap_cmd_namespace(): 新規。
+
+2001-06-11
+
+ * src/summaryview.c: summary_show(): フォルダビューの不具合を修正。
+
+2001-06-08
+
+ * src/imap.[ch]: ファイルを IMAP4 フォルダに追加する
+ imap_add_msg() と imap_append_message() を追加。
+ imap_status(): 新規。
+ imap_create_folder(): フォルダを作成する前にその存在をチェック
+ するようにした。
+ 低レベル IMAP4rev1 関数のプレフィクスを imap_cmd に変更。
+ * src/account.c: account_add(), account_set_missing_folder():
+ IMAP4 アカウントを作成するときに INBOX を自動的に作成するように
+ した。
+
+2001-06-07
+
+ * src/utils.[ch]: 引数にバッファをとる itos_buf() を追加。
+ * src/imap.[ch]: imap_copy_msg(), imap_copy_msgs_with_dest(): 新規。
+ * src/folder.c: copy_msg と copy_msgs_with_dest メソッドを IMAP
+ クラスに追加。
+
+2001-06-06
+
+ * src/utils.[ch]: move_file(): 新規。
+ * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): move_file()
+ を使用するように修正。エラーが発生したときにファイルを閉じて
+ いなかったバグを修正。
+
+2001-06-06
+
+ * src/imap.c: imap_delete_messages() と imap_delete_all_messages()
+ を imap_delete_cached_messages() と
+ imap_delete_all_cached_messages() に名称変更。コードの整理。
+ * src/utils.[ch]: 関数 remove_all_numbered_files() を追加。
+ * src/mh.c: mh_remove_all_msg()
+ src/imap.c: imap_delete_all_cached_messages():
+ remove_all_numbered_files() を使用するようにした。
+ * src/mainwindow.c
+ src/summaryview.c
+ src/compose.[ch]: 「差出人に返信」を追加。
+ compose_reply()
+ compose_reply_set_entry(): 引数に `ignore_replyto' を追加。
+
+2001-06-05
+
+ * src/folderview.c: folderview_selected()
+ src/summaryview.c: summary_show(): 残ったマークを処理した場合に
+ 誤ったフォルダを更新していたバグを修正。
+
+2001-06-04
+
+ * src/headerwindow.c: headerwindow_show_cb(): 常に msginfo を表示
+ するようにし、表示されているメッセージではなく選択されているもの
+ を使用するようにした。
+ * src/smtp.c: smtp_ok(): sock_gets() のエラー処理を修正。
+
+2001-06-02
+
+ * src/folderview.c: folderview_selected()
+ src/mimeview.c: mimeview_selected(): マウスイベントの捕捉を解除
+ するようにした。
+ * src/summaryview.c: summary_show(): マークが残っていれば処理する
+ ようにした。
+
+2001-05-27
+
+ * src/passphrase.c: #if USE_GPGME で囲った。
+ * src/prefs_account.c: NNTP AUTH チェックボタンを追加。
+ * src/alertpanel.[ch]: alertpanel_create(): 新たな引数 `can_disable'
+ を追加。全ての呼び出し側を FALSE を渡すように変更。
+ メッセージを無効にするチェックボタンを作成。
+ alertpanel_message_with_disable(): 新規。
+ alertpanel_show(): G_ALERT_VALUE_MASK で値をマスクするようにした。
+ alertpanel_button_toggled(): 新規。
+ alertpanel_button_clicked(), alertpanel_close(): G_ALERT_VALUE_MASK
+ を使って値をセットするようにした。
+ * src/prefs_common.[ch]: GnuPG 署名検証ポップアップウィンドウと、
+ GnuPG の警告を切り替えるオプションを追加。
+ * src/rfc2015.c: check_signature(): 有効な場合のみ署名チェック
+ ダイアログを表示するようにした。
+ * src/main.c: GnuPG のチェックを修正。
+ * src/main.c
+ src/prefs_common.c: GPGME を有効にしたときのコンパイル時のバグを
+ いくつか修正。
+
+2001-05-26
+
+ * src/codeconv.c: conv_get_code_conv_func(): libjconv 使用時の
+ ISO-8859-* エンコーディングについて修正。
+ conv_encode_header(): 不正なワイドキャラクタが現れたとき無限ループ
+ になるバグを修正(Alte さん thanks)。
+ * src/headerview.c: SET_FONT_STYLE(): ボールドフォントが無効のとき
+ の segfault を修正。
+ * src/imap.c: imap_create_folder(): フォルダ名が INBOX のときは
+ フォルダを作成しないようにした。
+ * src/mainwindow.c: main_window_reflect_prefs_all(): 即座に実行が
+ 有効になっていれば実行ボタンを隠すようにした。
+
+2001-05-22
+
+ * README
+ README.jp: 「起動方法」セクションを追加。
+
+2001-05-19
+
+ * claws ブランチから NNTP AUTH をマージ。
+ * src/news.[ch]: NNTP AUTH に対応。
+ * src/nntp.[ch]: NNTP AUTH のために SockInfo を NNTPSockInfo で
+ ラップした。
+ * INSTALL
+ INSTALL.jp: 動作確認リストとスレッドに関する警告を修正。
+
+2001-05-18
+
+ * src/gtkutils.[ch]: folderview_find_collapsed_parent() を
+ gtkut_ctree_find_collapsed_parent() に移動。
+ * src/folderview.c: folderview_select_node(): 選択されたときに
+ 親フォルダを自動的に展開するようにした。
+ * configure.in: バージョン番号を 0.4.99 (0.5pre) にした。
+ * src/main.c: main(): --help と --version に X が不要になるように
+ parse_cmd_opt() を gtk_init() の前に移動。
+ parse_cmd_opt(): g_get_prgname() を g_basename(argv[0]) に変更。
+ * src/folderview.c: folderview_update_node(): 折り畳まれたノード
+ に対する修正。
+
+2001-05-17
+
+ * src/main.c: lock_socket_input_cb(): fd_read() を fd_gets() に
+ 変更。 --compose オプションでゴミを発生していた。
+ * src/socket.[ch]: fd_gets() を public にした。
+
+2001-05-16
+
+ * src/gtkutils.[ch]: gtkut_ctree_node_next(): 新規。
+ * src/folderview.c: folderview_find_next_unread(): 新規。
+ folderview_select_next_unread(): 隠れたフォルダも見付けられる
+ ように修正。
+
+2001-05-15
+
+ * src/compose.c: compose_write_headers(): SPAM に使用される可能性
+ があるので、 From, To, Sender も除外するようにした。
+ * src/folderview.c: 未読フォルダがある折り畳まれたフォルダに '+'
+ マークを付けるようにした。
+ folderview_search_new_recursive(),
+ folderview_have_new_children(),
+ folderview_search_unread_recursive(),
+ folderview_have_unread_children(),
+ folderview_find_collapsed_parent(): 新規。
+ folderview_update_node(): キューされたメッセージの数を表示する
+ ようにした。
+
+2001-05-14
+
+ * src/folder.[ch]
+ src/mh.[ch]: *_add_msg() を link() を使用するように修正。
+ 元のファイルを削除するかどうかを切替える引数を追加。
+ * src/compose.c
+ src/inc.c
+ src/mbox.c: folder_item_add_msg() の引数を修正し、いくつかの
+ unlink() を削除。
+
+2001-05-13
+
+ * src/prefs_customheader.[ch]: prefs_headers_* を
+ prefs_custom_header_* に名称変更。 `(New)' 行と `置換' ボタンを
+ 削除。空の内容に対応。
+ prefs_custom_header_row_moved(): 新規。 "row_move" シグナルを
+ それに接続し、ヘッダリストをセットするようにした。
+ * src/customheader.c: custom_header_get_str()
+ src/compose.c: compose_write_headers(): 空の内容に対応。
+ * src/prefs_display_header.c: prefs_display_header_row_moved(): 新規。
+ "row_move" シグナルをそれに接続し、ヘッダリストをセットするように
+ した。
+ * src/compose.c: compose_write_headers(): ヘッダの順序を修正し、
+ カスタムヘッダをエンコードするようにした。
+ * src/prefs_customheader.c: prefs_custom_header_delete_cb()
+ src/prefs_filter.c: prefs_filter_delete_cb(): ESC で警告パネル
+ を閉じるのを「いいえ」として扱うようにした。
+
+2001-05-13
+
+ * claws ブランチからカスタムヘッダ関連をマージ:
+ * src/customheader.[ch]
+ src/prefs_customheader.[ch]: 新規。
+ * src/customheader.c: custom_header_read_str(): atoi() の代わりに
+ strtol() を使用し、エラーをチェックするようにした。
+ * src/compose.c: IS_IN_CUSTOM_HEADER(): 新規マクロ。
+ compose_write_headers(): ヘッダをユーザ定義のヘッダで置換する
+ ようにした(いくつかの自動的に生成されるヘッダを除く)。
+
+2001-05-11
+
+ * src/inc.c: connection_check_cb(): 接続が確立しなかったときに
+ segmentation fault を起こすバグを修正。
+ * src/compose.c: compose_create(): set_autobcc または set_autoreplyto
+ がセットされていたら、それらが空でも表示するようにした。
+
+2001-05-10
+
+ * src/textview.c: textview_show_mime_part(): メッセージを修正。
+ TEXT_INSERT(): 新規マクロ。
+ * po/ja.po: 修正。
+ * src/prefs_display_header.c: prefs_display_header_create():
+ チェックボタンのテキストを修正。
+
+2001-05-09
+
+ * src/mimeview.c: コンテキストメニューに「アプリケーションから
+ 開く...」を追加。
+ * src/summaryview.c: summary_print()
+ src/inputdialog.c: input_dialog(): メモリリークを修正。
+ * src/textview.c: textview_show_mime_part(): 説明文を更新。
+ * src/send.c: 送信進捗ダイアログを実装。
+ (TODO: automaton を使用すべき。)
+ send_progress_dialog_create(), send_progress_dialog_destroy(),
+ send_cancel(): 新規。
+ send_message_smtp(): 各ステージでダイアログを更新するようにした。
+ * src/utils.[ch]: get_left_file_size(): 新規。オープンされたファイル
+ の残りのバイト数を得る。
+ * src/summaryview.c: summary_show(): open_inbox_on_inc がセットされ
+ ているときは、フォルダが前と同じであっても最初の未読メッセージに
+ 移動するようにした。
+ * src/prefs_common.c: カラーセレクションダイアログを transient に
+ し、エスケープキーでダイアログを閉じられるようにした。
+
+2001-05-08
+
+ * version 0.4.66
+
+ * src/select-keys.c: delete_event_cb(): 終端から `;' を取り除いた。
+ * src/recv.c: recv_write(): 間隔を10msec にした。
+ * src/prefs_display_header.c: ダイアログのレイアウトを修正し、
+ 「他のヘッダを表示」がチェックされていないときは表示しないヘッダ
+ のリストを insensitive にした。
+ * src/textview.c: strcasecmp() and strncasecmp() をそれぞれ対応する
+ glib の関数に変更。
+ * src/inc.c: get_spool(): ホームディレクトリの中に一時ファイルを
+ 作成するようにした。
+
+2001-05-07
+
+ * src/prefs_common.c
+ src/prefs_account.c
+ src/prefs_filter.c
+ src/account.c
+ src/alertpanel.c
+ src/filesel.c
+ src/foldersel.c
+ src/export.c
+ src/import.c
+ src/inputdialog.c
+ src/passphrase.c
+ src/select-keys.c
+ src/sigstatus.c: delete_event でダイアログを閉じたときにそれを
+ 誤って破壊していたバグを修正(DINH さん thanks)。
+ delete_event シグナルを正しく扱う *_deleted() と *delete_event()
+ を追加。
+
+2001-05-06
+
+ * src/prefs_display_header.c: claws ブランチからいくつかの変更を
+ マージ:
+ prefs_display_header_create(): ドラッグによるヘッダの並び換えが
+ できるようにした。
+ prefs_display_header_find_header(): 新規関数。
+ prefs_display_header_clist_set_row(): 重複を認めないようにした。
+ * src/prefs_account.c: prefs_account_receive_create(): チェック
+ ボタンのラベルを変更。
+
+2001-05-05
+
+ * src/pop.c: pop3_getsize_list_recv(): sscanf() が失敗したら、
+ すぐに break するようにした。
+ * src/inc.h: Pop3State から cur_msg_bytes を削除。
+ * src/inc.c: pop3_recv_func()
+ src/recv.[ch]: RecvUIFunc の第二引数を現在の合計バイト数にした。
+ recv_write(): 経過時間が0.1秒より大きければ UI 関数を呼ぶように
+ した。
+ * src/recv.c: recv_write(): 間隔を300 usec にした。
+ * src/textview.c: textview_show_header(): ヘッダが Subject の場合、
+ 一行にするようにした。
+ * src/utils.[ch]: unfold_line(): 新規。
+ * src/procheader.[ch]: procheader_get_header_array(): 新規。
+ * src/prefs_display_header.c: デフォルトを更新。
+
+2001-05-05
+
+ * sylpheed-claws ブランチからいくつかマージ。
+ メッセージビューに表示されるヘッダをユーザが指定できるようになった。
+ (シンボル名は変更。)
+ * src/prefs_display_header.[ch]
+ src/displayheader.[ch]: 新規。
+ * src/prefs_display_header.c:
+ prefs_display_headers_other_headers_toggled() を削除。
+ リストから "(新規)" 行を削除。
+ * src/defs.h: DISPLAY_HEADER_RC を追加。
+ * src/prefs_common.c: prefs_message_create(): 表示ヘッダの設定
+ ダイアログを開くボタンを追加。
+ * src/prefs_common.h: PrefsCommon に show_other_header と
+ disphdr_list を追加。
+ * src/procheader.[ch]: procheader_get_header_list_from_file(),
+ procheader_get_header_array_asis(): 新規。
+ procheader_get_header_list(): 引数に FILE ポインタをとるように
+ 修正。
+ procheader_header_array_destroy(), procheader_header_free() 新規。
+ * src/main.c: main(): prefs_display_header_*_config() を呼ぶように
+ した。
+ * src/textview.c: textview_scan_header(): ユーザの設定によって
+ ヘッダを並び換えるように修正。
+ src/textview_show_header(): textview_make_clickable_parts() を
+ 呼ぶようにした。
+ textview_make_clickable_parts(): 引数に GdkFont をとるようにし、
+ 引数から GtkText を除いた。
+
+2001-05-04
+
+ * Pierric Descamps さんのパッチに基づいて新着メールの自動チェック
+ を実装(thanks!)。
+ * src/inc.c: inc_autocheck_timer_init(), inc_autocheck_timer_set(),
+ inc_autocheck_timer_remove(), inc_autocheck_func() を新着メール
+ の自動チェックのために追加。
+ * src/main.c: main(): inc_autocheck_timer_init() を呼ぶようにした。
+ * src/prefs_common.c: prefs_receive_create(): 自動チェックの UI
+ をアクティブにした。 prefs_common_cancel() を追加し、いくつかの
+ シグナルをそれに接続。
+ * src/prefs_common.c
+ src/prefs_account.c
+ src/prefs_filter.c
+ src/account.c: ダイアログを開いているときは自動チェックを無効に
+ した。
+ * src/headerview.c: headerview_show_xface(): ヘッダペインを非表示
+ にしている場合に警告が出ていたバグを修正。
+
+2001-05-03
+
+ * src/inc.c
+ src/pop.c
+ src/recv.c: ノンブロッキングソケットモードの対応を削除(役に
+ 立っていないので)。
+ * src/pop.c
+ src/inc.c: 受信ダイアログのメッセージを修正。
+
+2001-05-02
+
+ * src/utils.h: u32 を guint32 の typedef にした。
+ md5.c で使用されるマクロ BIG_ENDIAN_HOST を追加。
+ * src/md5.c: md5c.c を名称変更。インデントを修正。ビッグエンディアン
+ なマシンで MD5 を正しく計算していなかったバグを修正。
+
+2001-05-01
+
+ * version 0.4.65
+
+ * src/folder.c: folder_init(): メソッド imap_remove_folder を追加。
+ * src/folderview.c: folderview_rm_imap_folder_cb(): 実際に IMAP4
+ サーバからフォルダを削除するようにした。
+ * src/imap.[ch]: imap_create_folder(): 実際に IMAP4 サーバにフォルダ
+ を作成するようにした。
+ imap_remove_folder(): 追加。
+ imap_create(), imap_delete(): 追加。
+ * src/summaryview.c: summary_execute_delete(): フォルダタイプが
+ F_MH でなければ trash をチェックしないようにした。
+ * 上記の変更に関して石原さんに感謝。
+ * configure.in
+ ac/check-type.m4: wint_t の typedef 検出を改良(sv_CHECK_TYPE を
+ SYLPHEED_CHECK_TYPE に改名)。
+
+2001-04-30
+
+ * src/recv.c: recv_bytes_write(): 無限ループとバッファオーバーラン
+ を起こすもう一つのバグを修正。
+
+2001-04-30
+
+ * src/socket.[ch]: 混乱を避けるため、 sock_read() と fd_read() を
+ sock_gets() と fd_read() に名称変更。 read() のラッパーである
+ sock_read() と fd_read() を追加。
+ * src/recv.c: recv_bytes_write(): 無限ループを起こすバグを修正。
+ fd_read() の代わりに sock_read() を使用するようにした。
+ * src/esmtp.c
+ src/imap.c
+ src/news.c
+ src/nntp.c
+ src/pop.c
+ src/recv.c
+ src/smtp.c: sock_read() の代わりに sock_gets() を使用するように
+ した。
+ * src/imap.c: imap_session_new(): imap_open() のエラー検出を修正。
+
+2001-04-28
+
+ * src/inc.c: ダイアログに現在の読み込んだバイト数を表示するように
+ した。
+ * src/pop.c: recv_write(): 文字列を編集する前に UI 関数を呼ぶように
+ した。
+
+2001-04-27
+
+ * src/progressdialog.c: progress_dialog_create(): ダイアログの
+ サイズを修正し、拡大可能にした。
+ * src/smtp.c
+ src/esmtp.c: smtp_ok(), esmtp_ok(): エラー応答を正しく処理して
+ いなかったバグを修正(大政さん thanks)。
+ * src/pop.[ch]: pop3_getsize_list_send() と pop3_getsize_list_recv()
+ を追加。
+ * src/recv.[ch]: recv_write() が各 sock_read() 毎にコールバック関数
+ を呼ぶようにする recv_set_ui_func() を追加。
+ * src/inc.h: Pop3State において、 bytes を total_bytes に改名し、
+ cur_msg_bytes, cur_total_bytes, そして sizes を追加。
+ * src/inc.c: 各 sock_read() 毎にプログレスバーを更新する
+ inc_pop3_recv_func() を追加。
+
+2001-04-26
+
+ * src/mh.c: mh_is_maildir_one(): is_dir_exist() を使用するように
+ 修正。
+
+2001-04-25 Werner Koch <wk@gnupg.org>
+
+ * src/mh.c (mh_is_maildir_one, mh_is_maildir): 新規。
+ (mh_scan_tree_recursive): スキャンで Maildir 型のディレクトリを
+ 含まないようにした。
+
+ 整数型で socket を表していたのを、より抽象的なデータ構造に変更。
+
+ * src/automaton.h (struct _Automaton): help_sock を追加。
+ * src/automaton.c (automaton_input_cb): source を SockInfo に追加
+ し、 gdk_input_add のラッパーを使用するようにした。
+
+ * src/send.c (SEND_EXIT_IF_ERROR): テストを修正し、無効な socket
+ のテストを取り除いた(sock_close で行われるため)。 sock を NULL
+ にセットするようにした。
+ (SEND_EXIT_IF_NOTOK): 閉じられた sock を NULL にセットするように
+ した。
+ (send_smtp_open): SockInfo のみを使用するようにした。
+
+ * src/news.c (news_session_new): SockInfo を使用。
+ (news_session_destroy): 同上、 sock を NULL にセット。
+
+ * src/nntp.c: 整数型の代わりに SockInfo を使用。
+ * src/smtp.c: 同上。
+ * src/pop.c: 同上。
+ * src/recv.c: 同上。
+
+ * src/inc.c (inc_pop3_session_do): sock_sockinfo_free を削除。
+ gdk_input_add をラッパーで包んだ。
+
+ * src/esmtp.c: socket 指示子を SockInfo を使うように変更。
+ * src/esmtp.h: 同上、 socket.h を include した。
+ * src/session.h (struct _Session): 同じく。
+ * src/imap.c (imap_open): 整数型でなく SockInfo を返すようにした。
+ SockInfo の内部データへのアクセスを削除。全ての呼び出し側と関数
+ が SockInfo をとるようにした。
+ (imap_session_new): sock_close を使用するようにした。
+ (imap_session_destroy): 同上。
+
+ * src/compose.c (compose_exec_ext_editor): sock_write を fd_write
+ で置き換えた。
+
+ * src/main.c (app_will_exit): lock socket を fd_close で close する
+ ようにした。
+ (prohibit_duplicate_launch): sock_xxx の代わりに fd_xxx を使用。
+ (lock_socket_input_cb): 同上。
+
+ * src/socket.h, src/socket.c: SockInfo 構造体を glib チャネルを
+ 使用するように準備。全ての sock_xxx を、整数型の代わりに SockInfo
+ を使用するように変更。
+ (sock_connect_unix, sock_open_unix, sock_accept): 名前を ..
+ (fd_connect_unix, fd_open_unix, fd_accept): .. これに変更し、全ての
+ 呼び出し側も変更。
+ (fd_read, fd_write, fd_close): 新規。
+ (sock_sockinfo_free): 削除。
+ * src/socket.c (sock_connect_nb): ここでは sock_close の代わりに
+ close を使用。
+ (sock_connect): 同上。
+
+2001-04-26
+
+ * config.h.in: 削除。
+ * ac/Makefile.am: gnupg-check-typedef.m4 を MACROS に追加。
+ * .cvsignore: 追加。
+ * src/inc.c
+ src/progressdialog.[ch]
+ src/pixmaps/complete.xpm
+ src/pixmaps/continue.xpm
+ src/pixmaps/error.xpm: メッセージの取り込みの状態を表示する
+ Leandro Pereira さんのパッチを適用(thanks!)。
+ * src/inc.c: 状態の文字列を切替えるようにした。
+
+2001-04-25
+
+ * cvs ツリーから po/*.gmo, configure, stamp-h.in, aclocal.m4,
+ Makefile.in を削除。
+ * COPYING: RSA の著作権表示を削除。
+ * po/sylpheed.pot, po/stamp-cat-id, po/cat-id-tbl.c を削除。
+ * configure.in: sys/utsname.h のチェックを追加。
+
+2001-04-24 Werner Koch <wk@gnupg.org>
+
+ W32 ブランチの大部分をマージ。
+
+ * configure.in: gpgme >= 0.2.1 を要求。
+
+ * acconfig.h (HAVE_U32_TYPEDEF): 新規。
+ * ac/gnupg-check-typedef.m4: 新規。
+ * configure.in: u32 型といくつかの型のサイズをチェック。
+ * src/utils.h: u32 型と関係する定数を定義。
+
+ * src/about.c (about_create): MD5 に関する表示を削除。RSA Inc の
+ 実装はもう使用されていません。
+ * src/md5ify.c, src/md5ify.h, src/md5global.h: 削除。
+ * src/md5c.c, src/md5c.h: FSF の実装で置換し、関数名を標準の小文字
+ の命名規則にしたがって変更。全ての呼び出し側を変更。
+ (md5_hex_digest): 新規。
+ (md5_hmac): Martin Schaaf さんによる hmac 関数を少し修正して追加。
+ (md5_hex_hmac): 新規。
+ * src/esmtp.c, src/esmtp.h (md5_hex_hmac): 削除。
+ (hmac_md5): 削除。
+ * src/pop.c (pop3_getauth_apop_send): md5_digest を新しい関数
+ md5_hex_digest で置換。
+
+ * src/about.c: 利用可能な場合のみ utsname.h を include するように
+ した。
+
+ * src/utils.c, src/utils.h (get_home_dir): 特別な Windoze の要求
+ によりよく対応するために追加。全ての g_get_home_dir() の呼び出し
+ をこの関数に変更。
+
+ * simple-gettext.c: 新規。
+
+ * src/main.c (main): GnuPG が正しくインストールされていなければ
+ 警告を出すようにした。
+
+ * src/sigstatus.c, src/sigstatus.h: 新規。
+ * src/rfc2015.c (check_signature): sigstatus ウィンドウを使用し、
+ ユーティリティ関数からステータステキストを得るようにした。
+
+ * src/select-keys.c: グローバルの select_keys 変数を削除し、
+ アロケートした変数を全ての関数で渡すようにした。
+ (set_row): 暗号化できる鍵のみを表示。
+ (update_progress): プログレスバーを、風車とどの鍵の情報を収集
+ しているかを示すテキストで置き換えた。他の全てのプログレスバー
+ を削除し、呼び出し側を更新。
+
+ * src/prefs_common.c (prefs_privacy_create) [__MINGW32__]: 捕捉
+ ボタンを表示しないようにした。
+
+2001-04-24
+
+ * src/prefs_common.[ch]
+ src/procheader.c: strftime() を使い、ユーザがサマリビューで
+ 日付の表示の書式を定義できるようにする Darko Koruga さんのパッチ
+ を適用(thanks!)。
+ * src/prefs_common.c: prefs_quote_colors_dialog()
+ src/mainwindow.c: main_window_reflect_prefs_all(): 色の設定が
+ 変更されたらメッセージの色を更新するようにした。
+ * src/main.[ch]: 起動時のディレクトリを記憶するようにした。
+ * src/export.c: export_mbox(): 最初に起動時のディレクトリに chdir
+ するようにした。
+ * src/filesel.c: filesel_select_file(): 最初に起動時のディレクトリ
+ を開くようにした。
+
+2001-04-23
+
+ * 終了時に送信待ちのメッセージがあれば警告するオプションを追加
+ [sergey]:
+
+ * src/compose.c: compose_queue(): 送信待機後に folder_item_scan()
+ と folderview_update_item() を呼ぶようにした。
+ * src/folderview.c: folderview_update_node(): 送信待ちのメッセージ
+ があれば送信待ちフォルダをボールドフォントで描画するようにした。
+ * src/mainwindow.c: queued_messages(): 新しい関数。
+ app_exit_cb(): warn_queued_on_exit がセットされていて、送信待ち
+ のメッセージがあれば警告を表示するようにした。
+ * prefs_common.[ch]: warn_queued_on_exit オプションを追加。
+
+ * src/mainwindow.c: queued_messages() を main.c に移動し、
+ get_queued_message_num() に名称変更。
+ * src/main.c: app_will_exit(): app_exit_cb() から警告ダイアログの
+ コードを移動し、manage_window_focus_in() を追加。
+
+ * GnuPG 鍵選択対応を拡張 [sergey]:
+
+ * src/select-keys.c: Win32 ブランチの最新版に更新し、任意の鍵の
+ 選択に対応。
+ * src/prefs_account.c: アカウントオプションウィンドウに「機密」
+ タブを追加。
+ prefs_account_privacy_create(),
+ prefs_account_sign_key_set_data_from_radiobtn(),
+ prefs_account_sign_key_set_radiobtn(): 新しい関数。
+ * src/prefs_account.h: 新しい設定: sign_key_type, sign_key_id.
+ * src/rfc2015.c: set_signers(): 新しい関数。
+ pgp_sign(): アカウントパラメータと set_signer() の呼出しを追加。
+ rfc2015_sign(): アカウントパラメータを追加し、pgp_sign() に
+ 渡すようにした。
+ * src/rfc2015.h: rfc2015_sign(): プロトタイプを更新。
+ * src/compose.c: 現在のアカウントを rfc2015_sign() に渡すように
+ した。
+
+2001-04-22
+
+ * src/mbox.c: export_to_mbox(): メモリリークのバグを修正。
+
+2001-04-20
+
+ * src/mbox.[ch]: export_mbox() を export_to_mbox() に変更。
+ メモリリークのバグを修正。
+ * src/export.[ch]: フォルダを mbox にエクスポートするために追加。
+ * src/import.[ch]: import_mbox() がデフォルトのフォルダをとる
+ ようにした。ダイアログに説明を追加。
+ * src/summaryview.c: summary_show(): メッセージの受信後にツールバー
+ のボタンが押せないままになっていたバグを修正。
+ * src/export.c
+ src/import.c: OK またはキャンセルボタンが数回押されたらプログラム
+ が終了してしまうバグを修正。
+ * src/prefs_common.[ch]
+ src/addressbook.c: 「ダブルクリックしたときにアドレスを宛先に
+ 追加する」オプションを追加。
+
+2001-04-19
+
+ * src/prefs_common.[ch]: 設定項目を再構成し、メッセージタブを追加。
+ * src/main.c: parse_cmd_opt(): コマンドラインオプション --version
+ を追加。
+ * src/mh.c: 特別フォルダに移動/コピーしたときは MSG_DELETED フラグ
+ を外すようにした。
+ * src/prefs_common.[ch]
+ src/headerview.[ch]: ヘッダペインをトグルできるようにした。
+ * src/prefs_common.[ch]
+ src/textview.c: ページスクロール単位を1ページと半ページで切替え
+ られるようにした。
+ * src/mbox.[ch]: フォルダ中の全メッセージを読み込み、それらを一つの
+ mbox ファイルに保存する export_mbox() を追加。
+
+2001-04-18
+
+ * src/prefs_filter.[ch]: 振り分け設定のコードを prefs_common.c
+ から分離し、別個のダイアログにした。
+
+2001-04-17
+
+ * version 0.4.64
+
+ * src/automaton.[ch]
+ src/inc.c: 新着メールの受信中にキャンセルボタンをクリックした
+ ときに Sylpheed がクラッシュするバグを修正(Sergey Vlasov さん
+ thanks)。
+ * src/xml.c: xml_build_tree()
+ src/addressbook.c: 不正な XML ファイルが与えられたときに無限
+ ループを起こすバグを修正。
+
+2001-04-16
+
+ * src/summaryview.c
+ src/inc.c: 「新着メールを受信した後受信箱に移動する」オプション
+ がオフになっていた場合の問題を修正する Sergey Vlasov さんからの
+ パッチを適用(thanks!)。
+
+2001-04-15
+
+ * src/xml.[ch]: エスケープされる必要のあるキャラクタと、複数行に
+ わたるタグに対応するように修正。
+ * src/folder.c
+ src/addressbook.c: '<', '>', '&', ''', '"' のようなキャラクタを
+ エスケープするように修正。
+
+2001-04-10
+
+ * version 0.4.63
+
+ * src/folder.[ch]
+ src/mainwindow.c
+ src/mh.[ch]
+ src/procmsg.[ch]
+ src/summaryview.[ch]: MH フォルダにメッセージのコピーの操作を
+ 追加する Darko Koruga さんのパッチを適用(thanks!)。
+ * src/imap.c: スラッシュからドットへの変換を無効にした。
+ * src/imageview.c: 画像の読み込みに失敗したとき古い画像を表示
+ していたバグを修正(Darko Koruga さん thanks)。
+
+2001-04-09
+
+ * src/procmsg.c: procmsg_read_cache(): キャッシュの読み込み速度を
+ 上げるために setvbuf() を追加(Sergey Vlasov さん thanks)。
+ * src/inc.c
+ src/summaryview.[ch]
+ prefs_common.[ch]: 新着メールを受け取ったときに同じフォルダを
+ 保つパッチを適用(Sergey Vlasov さん thanks)。
+ * src/textview.c
+ src/utils.[ch]: get_quote_level() を utils.c に移動。
+
+2001-04-08
+
+ * ac/Makefile.am: 追加。
+ * Makefile.am
+ configure.in: ac ディレクトリを追加。
+
+2001-04-07
+
+ * src/summaryview.c: summary_filter(): immediate_exec オプションが
+ 指定されていたらメッセージを即座に移動するようにした。
+ * src/prefs_common.[ch]
+ src/textview.[ch]
+ src/gtkutils.[ch]: Stephen Anthony さんのメッセージ色パッチを
+ いくらか修正して適用(thanks!)。
+ * src/gtksctree.c
+ src/mimeview.c: MimeView の挙動を修正(平松さん thanks)。
+
+2001-04-06
+
+ * src/utils.c: copy_file()
+ src/mh.c: ファイルシステムをまたいでメッセージを移動できるように
+ する Darko Koruga さんのパッチを適用(して修正)(thanks!)。
+ * src/procheader.c
+ src/utils.[ch]: メッセージの日付をローカル時間に変換する
+ Jorge Van Hemelryck さんのパッチを適用(thanks!)。
+ * src/utils.c: remote_tzoffset_sec(): 一文字のタイムゾーンの符号
+ が逆になっていたバグを修正。
+ * src/folder.c: folder_item_add_msg(): add_msg() メソッドに
+ assertion を追加(たかのさん thanks)。
+
+2001-04-05
+
+ * src/procmime.c: procmime_decode_content(): quoted-printable で
+ エンコードされたメッセージが `=00' を含んでいた場合それを壊して
+ いたバグを修正(とみたまさひろさん thanks)。
+ * src/gtksctree.c
+ src/mimeview.c
+ src/summaryview.c: MIME ビューの DnD の挙動を修正(平松さん thanks)。
+
+2001-04-04
+
+ * src/about.c: about ダイアログの外観を修正する Sergey Vlasov さん
+ からのパッチを適用(thanks!)。
+ * src/prefs_common.[ch]
+ src/rfc2015.[ch]
+ src/mimeview.c
+ src/procmime.[ch]
+ src/compose.[ch]
+ src/passphrase.c
+ src/textview.[ch]: sylpheed-win32 branch から port された GnuPG
+ 対応パッチを適用(Sergey Vlasov さん thanks)。
+ * INSTALL, INSTALL.jp: GnuPG についての説明を更新。
+
+2001-04-03
+
+ * src/utils.[ch]: References ヘッダをパースし、それを文字列のリスト
+ にする references_list_append() を追加。
+ * src/compose.c: 長すぎる References ヘッダを切り詰め、ゴミ文字を
+ 削除し、ヘッダを整理するように修正(Matthias Intemann さん thanks)。
+
+2001-04-02
+
+ * src/addr_compl.c: Alfons Hoogervorst さんのアドレス補完バグ修正
+ パッチを適用(thanks!)。
+
+2001-04-01
+
+ * src/gtksctree.c: tree_select_row シグナルが実際にカラム数を渡す
+ ように修正。
+ * src/summaryview.c: summary_selected(): 汎用マークと未読マークを
+ カラムのクリックでトグルできるようにした。
+ summary_mark_row_as_read() と summary_mark_row_as_unread() を追加。
+ * src/prefs_common.c: Sergey Vlasov さんのレイアウト修正パッチを適用
+ し、いくつかの GtkEntry ウィジェットの幅を調整した。
+ * src/prefs.c: prefs_dialog_create(): ノートブックがフォーカスを
+ 得られるようにした。
+ * src/inc.c: inc_start(): 認証ダイアログでサーバ名も表示されるように
+ 修正(Sergey Vlasov さん thanks)。
+
+2001-03-31
+
+ * src/mimeview.c: mimeview_key_pressed(): 異常なマルチパート
+ メッセージを表示したときに segmentation fault を起こすバグを
+ 修正(Sergey Vlasov さん thanks)。
+ * src/summaryview.c: summary_display_msg(): MIME リストが空の場合は
+ サマリビューにフォーカスするようにした。
+
+2001-03-30
+
+ * src/pixmaps/deleted.xpm
+ src/pixmaps/mark.xpm
+ src/summaryview.c: 削除とマークアイコンを追加。
+ * src/gtkutils.c: gtkut_widget_init(): gtk_widget_destroy() を
+ gtk_widget_unref() に変更。
+ * src/addr_compl.c: start_address_completion(): アドレス帳が空の
+ ときに警告が表示されるバグを修正(Chideok Hwang さん thanks)。
+
+2001-03-29
+
+ * src/summaryview.c: summary_show(): メモリリークのバグを修正
+ (ChiDeok Hwang さん thanks)。
+ * src/pixmaps/forwarded.xpm
+ src/pixmaps/replied.xpm
+ src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm
+ src/compose.c
+ src/mainwindow.c
+ src/prefs_common.c
+ src/procmsg.h
+ src/summaryview.[ch]: 返信・転送マークを返信または転送する
+ メッセージに付ける Harc Hoper さんからのパッチを適用(thanks!)。
+ そして新着・未読マークは David Mehrmann さんの作成したアイコン
+ で置き換えられた(thanks!)。
+ * src/summaryview.c: 未読と MIME の列の幅を固定にした。
+ * src/prefs.c: prefs_config_parse_one_line(): '=' セパレータを
+ チェックするようにした(Sergey Vlasov さん thanks)。
+
+2001-03-26
+
+ * src/prefs_common.[ch]: スムーズスクロールのオプションをインタ
+ フェースタブに移動。
+ * src/textview.c: 一行スクロールもスムーズスクロールを行うように
+ した。
+
+2001-03-25
+
+ * src/prefs_common.[ch]
+ src/textview.c: 瀬藤さんと二之宮さんからのスムーズスクロール
+ パッチを適用(thanks!)。
+
+2001-03-24
+
+ * src/summaryview.c: summary_attract_by_subject(): 高速化のために
+ ハッシュテーブルを使って書き換えた。
+ * src/prefs_account.c: filter_on_receive をデフォルトで TRUE にした。
+ * src/mainwindow.c: メニューの項目を並べ換えた。
+
+2001-03-23
+
+ * src/gtkutils.c: gtkut_clist_bindings_add(): アドレス補完がスペース
+ キーとエンターキーを受け付けないバグを修正。
+
+2001-03-22
+
+ * src/utils.[ch]
+ src/codeconv.c: 非 ASCII キャラクタを正しくエンコードしなかった
+ バグを修正。
+ * src/compose.c: 返信または草稿の再編集時に幾つかのヘッダを正しく
+ デコードしなかったバグを修正(Sergey Vlasov さん thanks)。
+
+2001-03-21
+
+ * src/gtkutils.[ch]: いくつかのクラスの振る舞いを変更する
+ gtkut_widget_init() を追加。
+ * src/main.c: main(): gtkut_widget_init() を先に呼ぶようにした。
+ * src/summaryview.c: summary_create(): キーバインドのコードを削除。
+
+2001-03-19
+
+ * src/procmsg.[ch]: 可読性のために修正。
+
+2001-03-18
+
+ * src/mainwindow.c: "Clean trash" を "Empty trash" に変更。
+ フォルダ操作のためのメニュー項目を追加。
+ allsel_cb(): インプットフォーカスに従ってサマリビューとメッセージ
+ ビューとの間でターゲットを切り替えるようにした。
+ サマリサブメニューから「全て選択」を削除。
+ * src/folderview.[ch]: フォルダを作成/名称変更/削除するための関数を
+ 追加。
+ * src/procmsg.[ch]: 「マーク」と「削除」フラグを永続するようにし、
+ 「重要」フラグを削除。
+ * src/summaryview.c: フラグに従って行のスタイルを設定する
+ summary_set_row_marks() を追加し、いくつかの関数がそれを使用する
+ ようにした。
+ * src/mainwindow.c: allsel_cb(): メッセージビューを非表示にしている
+ 場合も正しく選択されるように修正。
+
+2001-03-17
+
+ * src/socket.c: sock_connect_by_getaddrinfo(): ソケットのリソース
+ リークのバグを修正し、ルーチンを書き直した。
+ * src/inc.c: inc_mail(), inc_all_account_mail(): フォルダが開かれ
+ ていて、そのフォルダに新着メッセージが到着した場合にフォルダツリー
+ に間違った未読数を表示していたバグを修正。
+ * src/socket.c: sock_connect_by_getaddrinfo(): バグを再度修正。
+
+2001-03-15
+
+ * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): 移動先の
+ ファイルの存在をチェックするようにした。
+ * src/procmsg.c: procmsg_set_flags(): メッセージリストの最後の
+ 番号をカウントするようにした(そして新着メッセージが開けない
+ バグを修正)。
+
+2001-03-13
+
+ * src/prefs_common.c: prefs_send_create(): 送信コードセットから
+ EUC-JP と Shift_JIS を削除。
+
+2001-03-12
+
+ * version 0.4.62
+
+2001-03-11
+
+ * src/send.c: send_message_queue(): 送信待ちメッセージの `From'
+ とサーバ名からアカウントを検索するように修正。
+ * src/account.[ch]: 指定されたアドレスと SMTP サーバからアカウント
+ を見つける account_find_from_smtp_server() を追加。
+ * src/Makefile.am
+ src/mainwindow.c
+ src/summaryview.[ch]
+ src/sourcewindow.[ch]: DINH V. Hoa さんからのソース表示パッチを
+ 統合(thanks!)。
+
+2001-03-10
+
+ * src/addr_compl.[ch]
+ src/addressbook.c
+ src/compose.c: Alfons Hoogervorst さんからの機能強化された
+ アドレス補完パッチを適用(thanks!)。
+ * src/addr_compl.c: g_assert() を g_return(_val)_if_fail() で置き
+ 換えた。
+ * src/folder.c: folder_init()
+ src/folderview.c: folderview_drag_motion_cb()
+ src/procmsg.c: procmsg_clean_trash()
+ src/summaryview.c: summary_start_drag()
+ src/imap.[ch]: 鈴木未央さんからの IMAP4 移動/削除機能パッチを
+ 統合(thanks!)。
+
+2001-03-08
+
+ * src/main.c: parse_cmd_opt(): --compose オプションが mailto: の
+ URI を認識するようにした。
+ * src/utils.[ch]: execute_async(): 引用符で囲まれた引数を正しく
+ 処理するようにした。
+ strstr_with_skip_quote(), strsplit_with_quote(): 引用符対応版の
+ g_strsplit().
+ * src/mimeview.c: mimeview_view_file()
+ src/prefs_common.c: ファイル名の周りにシングルクォーテーション
+ マークを追加。
+
+2001-03-07
+
+ * configure.in
+ src/compose.c
+ src/prefs.c
+ src/procmime.c
+ src/summaryview.c
+ src/mbox.c
+ src/recv.c
+ src/utils.[ch]: Dmitry V. Levin さんからのセキュリティ修正パッチ
+ をいくらか修正して適用(感謝!)。 utils.[ch] に my_tmpfile() を
+ 追加。
+ * src/main.c: --receive-all コマンドラインオプションを追加。
+
+2001-03-06
+
+ * src/socket.c: sock_connect_thread(): マルチスレッドと IPv6 の
+ 両方が有効になっていたらコンパイルできないバグを修正
+ (石原さん thanks)。
+ * src/utils.[ch]
+ src/compose.c: 署名ファイルで FIFO が使えるようにする Jason
+ McCarver さんからのパッチを適用(感謝!)。
+ * src/textview.c: さらに少しリファクタリングを行った。
+ * src/socket.c: sock_accept(): socklen_t を gint に変更。
+
+2001-03-05
+
+ * src/main.c
+ * src/textview.c: コードを少し整理。
+
+2001-03-04
+
+ * src/compose.[ch]
+ src/main.c
+ src/textview.c: クリッカブル URI の不具合を修正しメールアドレス
+ をクリッカブルにし、そして --compose コマンドラインオプションで
+ アドレスを指定できるようにする Alfons Hoogervorst さんからの
+ パッチを統合(感謝!)。
+
+2001-03-03
+
+ * src/esmtp.[ch]
+ src/smtp.[ch]
+ src/send.c
+ src/prefs_account.[ch]
+ src/Makefile.am: Martin Schaaf さんの SMTP AUTH パッチを適用し、
+ そのバグをいくつか修正(感謝!)。
+ * src/textview.c: textview_key_pressed(): フォーカスをサマリビュー
+ に移動しないようにした。
+ * src/main.c: parse_cmd_opt(): ヘルプメッセージを修正。
+ * src/html.[ch]: HTMLParser に empty_line を追加し、パーサの
+ ルーチンを少し修正。
+
+2001-03-01
+
+ * src/html.c: eucjp_symbol_list を追加し、いくつかの文字を
+ ascii_symbol_list に追加。
+
+2001-02-19
+
+ * src/codeconv.[ch]: CodeConverter にメンバ `charset' と
+ `charset_str' を追加。
+ * src/html.[ch]: ISO-8859-1 コードセットのためのシンボルリストを
+ 追加。
+ html_parser_new(): ドキュメントのキャラクタセットに応じて
+ シンボルハッシュテーブルを変更するようにした。
+ html_parse_special(): 文字コード番号を認識するようにした。
+
+2001-02-17
+
+ * src/textview.c: HTML をパースし、テキストとして表示する
+ textview_show_html() を追加。
+ textview_show_part(): パートが text/html なら textview_show_html()
+ を呼ぶようにした。
+ * src/html.[ch]: HTML パーサを実装。
+
+2001-02-15
+
+ * src/codeconv.[ch]: CodeConverter と、そのメソッドを追加
+ (conv_code_converter_new(), conv_code_converter_destroy(), そして
+ conv_convert())。
+ * src/textview.c: HAVE_LIBJCONV による分岐を削除し、 CodeConverter
+ を用いて書き直した。
+
+2001-02-12
+
+ * src/mbox.c: proc_mbox(): 重複する From_ 行に対する対処。
+
+2001-02-11
+
+ * src/codeconv.c: 少しコードの整理。
+
+2001-02-05
+
+ * src/mainwindow.c: main_window_popup(): メインウィンドウを正しく
+ ポップアップしないバグを修正。
+ * src/codeconv.h: CS_EUC_CN と CS_EUC_TW の定義が逆になっていた
+ バグを修正(坂本さん thanks)。
+
+2001-02-04
+
+ * src/gtkutils.[ch]
+ src/main.c
+ src/mainwindow.[ch]
+ src/socket.[ch]: 多重起動を抑制し、コマンドラインオプションによる
+ リモートコントロールを可能にする平松さんからのパッチを適用
+ (thanks!)。
+
+2001-02-03
+
+ * src/summaryview.c: summary_button_pressed(), summary_selected():
+ メッセージビューが隠れているときに中央ボタンがクリックされたら
+ ビューを切り替えるようにした。
+ summary_drag_data_get(): メモリリークを修正。
+ * src/Makefile.am
+ src/compose.c: compose_write_headers(): X-Mailer または
+ X-Newsreader フィールドに host_alias を使用するように修正。
+
+2001-02-03
+
+ * version 0.4.61
+
+ * src/folderview.c: どこか別の場所に同名のフォルダが存在する場合に
+ フォルダを作成できないバグを修正。
+
+2001-02-02
+
+ * src/folderview.c: folderview_update_all(): フォルダツリーを更新
+ した後にフォルダが選択されると segmentation fault を起こすバグを
+ 修正。
+ * src/compose.c: compose_send(): ロック時のバグを修正。
+ compose_write_headers(): cur_account を参照していたバグを修正。
+ compose_convert_header(): 引数をチェックするようにした。
+
+2001-02-01
+
+ * src/main.c: コードの整理と、 --help オプションを追加。
+
+2001-01-31
+
+ * src/send.c: ユーザ定義のドメイン名の設定を再び有効にした。
+ * src/utils.c: is_next_mbs(): 一時的マルチバイト配列のサイズを
+ MB_CUR_MAX に変更。
+ strdup_mbstowcs(): mbstowcs() にエラーチェックを追加。
+ strdup_wcstombs(): wcstombs() にエラーチェックを追加。
+ * src/addr_compl.c: get_address_from_edit(): strdup_mbstowcs() の
+ 戻り値をチェックするようにした。
+ * src/codeconv.c: conv_encode_header(): strdup_mbstowcs() に
+ エラーチェックを追加。
+
+2001-01-30
+
+ * src/utils.c: log_error(): abort しないように g_error() を
+ g_warning() に変更。
+ iswalnum() を追加。
+ * src/addr_compl.c: add_address(): 名前あるいはアドレスが空の
+ 場合にプログラムを abort していたバグを修正。
+ get_address_from_edit(): マルチバイト文字に対応。
+ * configure.in: タイプミスを修正。
+ * src/send.c: ユーザ定義の SMTP ポートの設定を再び有効にした。
+
+2001-01-30
+
+ * version 0.4.60
+
+ * configure.in: --enable-gpgme オプションを追加し、デフォルトで
+ GPGME を無効にした。
+ * 無効の場合、 MimeInfo 中の GPGME 関連のメンバが使用されないように
+ した。
+ * src/rfc2015.c: 警告のための整理。
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: 更新。
+ * Makefile.am: bzip2 のオプションを修正。
+
+2001-01-29
+
+ * src/procmime.[ch]: MIME タイプに MIME_APPLICATION_OCTET_STREAM を
+ 追加。
+ * src/mimeview.c: mimeview_view_file(): MIME タイプが
+ application/octet-stream の場合は何もしないようにした。
+ * src/folderview.c: folderview_update_all(): フォルダのアップデート
+ 中はモーダルダイアログを表示するようにした。
+ * src/folderview.c: folderview_update_all(): ダイアログを削除できない
+ バグを修正。
+
+2001-01-28
+
+ * src/mimeinfo.c: 添付ファイルを metamail を使って開く John E.P.
+ Hynes さんからのパッチをマージ(感謝!)。
+ * src/procmime.[ch]: procmime_get_tmp_file_name() を追加。
+ * src/compose.c
+ src/addr_compl.[ch]: メッセージ作成ウィンドウのアドレスエントリ
+ でアドレス補完を可能にする Alfons Hoogervorst さんからのパッチ
+ をマージ(感謝!)。
+ * src/addr_compl.c: get_all_addresses(), read_address_book():
+ アドレスツリーを解放するのに xml_free_tree() を使用するように修正。
+
+2001-01-27
+
+ * src/utils.c: remove_dir_recursive(): カレントディレクトリを消そう
+ として失敗するバグを修正(牧さん thanks)。
+ * src/summary_search.c: 検索ダイアログに `一括検索' オプションを
+ 追加(高橋さん thanks)。
+ * src/pixmaps/stock_mail_attach.xpm
+ src/pixmaps/tb_address_book.xpm
+ src/compose.c: Leandro Pereira さんから寄贈していただいたツール
+ バーアイコンをいくつか追加(感謝!)。
+
+2001-01-25
+
+ * src/rfc2015.c: passphrase_cb(): パスフレーズダイアログをキャンセル
+ したときに segmentation fault を起こすバグを *ついに* 修正。
+ デバッグメッセージ中のパスフレーズを隠した。
+ * src/about.c: about_create(): どの機能も使用されなかったときに
+ コンパイルに失敗するバグを修正。
+ * src/foldersel.c: foldersel_set_tree(): 全ての MH フォルダを表示
+ するようにした。
+ * src/inc.c: inc_start(): パスワードダイアログをキャンセルしても
+ 何度も表示していたバグを修正。
+ * src/summaryview.c: summary_write_cache(): クラッシュを防ぐために
+ folder_item_get_cache_file() の後にアサーションを置いた。
+ * 上記の4つの修正に関して牧さんに感謝。
+ * src/utils.h: #include <alloca.h> を追加。
+
+2001-01-24
+
+ * src/rfc2015.c: エラーメッセージに使用されているいくつかの
+ g_messages() を g_warning() に変更。
+
+2001-01-23
+
+ * src/procmsg.[ch]: 長さ >= BUFFSIZE の文字列データを扱えるように
+ マクロ READ_CACHE_DATA() を修正。
+ * src/rfc2015.c: rfc2015_encrypt(): return を `goto failure' に変更。
+ * src/pixmaps/stock_mail_receive_all.xpm
+ src/pixmaps/stock_mail_reply_to_all.xpm
+ src/Makefile.am
+ src/mainwindow.c: main_window_toolbar_create(): David Mehrmann
+ さんから寄贈していただいた新しいツールバーアイコンを追加(感謝!)。
+ * src/inc.[ch]: 「全受信」モードで、受信ごとに進捗ダイアログを
+ 作成して削除することがないように構造を大幅に見直した。
+
+2001-01-22
+
+ * src/mh.c: mh_scan_tree_recursive(): `inbox' 等の名前のサブフォルダ
+ を特別なフォルダと誤って認識するバグを修正。
+ * src/rfc2015.c: rfc2015_encrypt(): boundary を正しく引用符で括って
+ いなかったバグを修正。
+
+2001-01-21
+
+ * Werner Koch さんからの GnuPG パッチを適用 (感謝!)。
+ * Mixmaster のサポートを削除。
+ * src/rfc2015.c: g_error() を g_warning() に変更し、いくつかの
+ メッセージを修正。
+ * src/about.c: about_create(): コンパイル済機能リストを修正。
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: 更新。
+ * src/select-keys.c: create_dialog(): レイアウトを修正。
+ * src/headerwindow.c
+ src/addressbook.c
+ src/logwindow.c: ウィンドウが既に開いていればウィンドウを前面に
+ 出すようにした。
+ * src/prefs_common.[ch]: 即座に実行する選択肢を追加。
+ * src/summaryview.c: immediate_exec オプションが有効になっていれば、
+ メッセージが移動または削除されたときに即座に実行するようにした。
+ * src/summaryview.c: summary_delete(), summary_move_selected_to():
+ summary_step() を summary_execute() の前に移動。
+ * src/folderview.c: folderview_update_all(): フォルダツリーを正しく
+ スキャンするようにした。
+ * src/compose.c: compose_write_headers(): to_list が空の場合、
+ In-Reply-To ヘッダを付けないようにした。
+
+2001-01-09 Werner Koch <wk@gnupg.org>
+
+ * configure.in, acconfig.h: GPGME のチェック。
+ * ac/: ローカルな autoconf マクロのための新規ディレクトリ。
+ * src/Makefile.am: GPGME 対応の追加。
+
+ * src/main.c (idle_function_for_gpgme): 新規。
+ (main): この関数を登録。
+
+ * src/about.c: GPGME についての表記を追加。
+
+ * src/rfc2015.c, rfc2015.h: 新規。
+
+ * src/mimeview.c (mimeview_show_message): 署名のチェック。
+ * src/procmime.c (procmime_scan_message): 同上。
+
+ * src/messageview.c (messageview_show): 復号化関係を追加。
+
+ * src/compose.c (compose_write_to_file): 要求されればファイルを暗号化。
+ (compose_toggle_encrypt_cb): 新規
+ (compose_toggle_mixmaster_cb): 新規、単に Mixmaster 対応のための準備。
+ (compose_write_headers): mixmaster モードでいくつかのヘッダを抑制。
+
+ * src/prefs_common.c (prefs_common_create): 「プライバシー」
+ ノートブックシートを追加。
+ (prefs_privacy_create): 新規。後いくつかの新規構造体等。
+ * src/compose.c (compose_create): 暗号化ボタンをデフォルトに指定
+ された状態に設定。
+ * src/compose.h (struct _Compose): use_encryption と use_mixmaster
+ を追加。
+
+ * src/compose.c (compose_send): return の前にロック解除が抜けている
+ のを追加。
+
+2001-01-18
+
+ * src/gtksctree.[ch]
+ src/folderview.c
+ src/summaryview.[ch]: サマリビューからフォルダビューへの DnD を
+ 可能にし、その他の問題を解決する平松さんからのパッチを適用(感謝!)。
+ * src/mainwindow.c: scan_tree_func(): segmentation fault を起こす
+ バグを修正。
+ * src/imap.c: LOGIN のユーザ名と SELECT のフォルダ名を引用符で
+ 括った。
+ * src/gtksctree.c: gtk_sctree_button_press(): ノードの展開状態を
+ トグルできないバグを修正。
+
+2001-01-17
+
+ * src/imap.c: メッセージのリストをより正確に更新し、メッセージの
+ フラグを読み取る西村さんからのパッチを適用(感謝!)。
+ * src/textview.c: textview_show_header(): X-Newsreader フィールド
+ も強調されるようにした。
+ * src/summaryview.c: summary_show(): サマリを表示するときに
+ イベントをフラッシュするようにした。
+
+2001-01-15
+
+ * src/summaryview.c: サマリビューの水平スクロールバーを有効にする
+ Alfons さんからのパッチを適用(感謝!)。
+
+2001-01-13
+
+ * src/compose.c: compose_cb(): プログラムを起動した直後にメッセー
+ ジ作成ウィンドウを開けなかったバグを修正。
+ * src/setup.c: scan_tree_func(): segmentation fault を起こすバグを
+ 修正。
+
+2001-01-13
+
+ * version 0.4.52
+
+ * src/textview.c: textview_set_font(): 領域が選択されている時に
+ テキストウィジェットのマルチバイトとシングルバイトモードが
+ 切り替わった場合に segmentation fault を起こすバグを修正(GTK+
+ のバグ?)。
+
+2001-01-11
+
+ * src/mainwindow.c
+ src/summaryview.c: ニュースフォルダにいるときはメッセージを削除
+ または移動できないようにした。
+ * src/prefs_common.c
+ src/news.c: 最大のニュース記事数のオプションを追加。
+
+2001-01-10
+
+ * src/compose.c: compose_send(): 一時ファイルの位置を変更。
+ 試したアカウントが全てメールアカウントでない場合はデフォルトの
+ アカウントを使用するようにした。それも失敗したときは警告
+ ダイアログを表示して中断するようにした。
+ * src/prefs_account.c: prefs_account_get_new_id(): 最後の id
+ 番号を保持するようにした。
+ prefs_account_open(): 新たなアカウントを作成するとき、デフォルト
+ のアカウントに従って個人情報を埋めるようにした。
+ * sylpheed.spec.in: 適切なバージョン番号の sylpheed.spec を自動
+ 生成するために追加(BONAIM さん thanks)。
+ * configure.in
+ Makefile.am: sylpheed.spec.in のためのエントリを追加。
+
+2001-01-09
+
+ * src/compose.[ch]: アカウントを正しく変更できるよう修正。
+ * src/send.[ch]: cur_account を見ないように修正。
+ * src/prefs_account.c: ニュースの設定で SMTP サーバのエントリを
+ 表示しないように修正。
+
+2001-01-08
+
+ * src/folderview.c: 新規フォルダが作成されたり名前が変更されたり
+ したときに特別なフォルダを正しくソートしていなかったバグを修正。
+
+2001-01-07
+
+ * src/compose.[ch]: メッセージ作成ウィンドウでアカウントを選択
+ できるようにした。
+ * src/folderview.c: フォルダ名の横に未読数を表示するようにした。
+ * src/prefs_common.[ch]: 未読数表示のためのオプションを追加。
+
+2001-01-06
+
+ * src/compose.[ch]: DINH V. Hoa さんからのニュース投稿パッチを
+ 統合し、多くの修正を加えた(感謝!)。
+ compose_write_headers(): ニュースグループの空白を削除するように
+ した。
+ Followup-To に対応。
+ compose_destroy(): 正しくオブジェクトを削除するようにした。
+ * src/news.c: news_post_to_group() と news_post() をまとめた
+ (複数回の投稿をする必要がないため)。
+ * src/import.c: import_destsel_cb(): 選択したフォルダへのインポート
+ に失敗するバグを修正。
+ * src/prefs_account.c: インタフェースを修正。
+
+2001-01-05
+
+ * src/codeconv.[ch]
+ prefs_common.c: "SHIFT-JIS" を "Shift_JIS" に変更(IANAに登録され
+ ているため)。
+ * src/nntp.[ch]: nntp_post() を追加。
+ * src/news.[ch]: news_post() と news_post_to_group() を追加。
+
+2001-01-04
+
+ * src/account.c: account_edit_open()
+ src/mainwindow.c: new_account_cb(): メッセージ作成ウィンドウが
+ 開いていたらアカウントを編集できないようにした。
+
+2001-01-03
+
+ * src/folder.[ch]: folder_set_name() を追加。
+ * src/account.c: IMAP4/NNTP のフォルダ名がアカウント名と同じに
+ なるようにした。
+
+2001-01-02
+
+ * src/summaryview.c: summary_filter_func(): メッセージの振り分けに
+ 失敗するバグを修正。
+
+2001-01-02
+
+ * version 0.4.51
+
+ * src/mbox.c: スプールファイルを正しく取りこめなかったバグを修正。
+ From_ 行の前に空行がなくてもメッセージの区切りとみなすように修正。
+ * src/send.c: send_message_queue()
+ src/procmsg.c: procmsg_send_queue(): 送信したメッセージを削除
+ しようとして警告を出すバグを修正。
+
+2001-01-01
+
+ * version 0.4.50
+
+ * src/folder.[ch]
+ src/news.[ch]: 実際にニュース記事を取得するように修正。
+ * src/utils.[ch]: ディレクトリ階層を作成する make_dir_hier() を追加。
+ * src/folder.c
+ folder_item_get_cache_file(), folder_item_get_mark_file():
+ キャッシュディレクトリが存在しなければ作成するようにした。
+ folder_add(): 追加されるフォルダを正しい場所に挿入するようにした。
+ * src/imap.[ch]: 新しいフォルダアーキテクチャに合うように修正。
+ imap_auth() で認証に失敗した場合 segmentation fault を起こすバグ
+ を修正。
+ * src/folderview.c: IMAP4 フォルダ操作ルーチンを実装。
+
+2000-12-31
+
+ * src/prefs_account.[ch]: PrefsAccount にアカウント ID と
+ nntp_server を追加。NNTP サーバのインタフェースを追加。
+ * src/folderview.c: ニュースフォルダ操作ルーチンを修正。
+ * src/folder.[ch]: RemoteFolder から cache_dir を削除し、
+ folder_item_get_path() を修正。
+
+2000-12-29
+
+ * src/folder.[ch]: create_folder(), rename_folder(), remove_folder()
+ を Folder クラスに追加。
+ * src/mh.[ch]: mh_create_folder(), mh_rename_folder(), そして
+ mh_remove_folder() を追加。
+ MH ディレクトリツリーを作成する mh_create_tree() を実装。
+ mh_rename_folder(): サブフォルダのパスが正しく設定されるように
+ 修正。
+ * src/folderview.c: folderview_new_folder_cb(),
+ folderview_rename_folder_cb(), folderview_delete_folder_cb()
+ を正しく動作するように修正。
+ フォルダツリーからメールボックスを削除する
+ folderview_remove_mailbox_cb() と メニューエントリを追加。
+ * src/setup.[ch]: 初期のセットアップのために追加。
+ * src/alertpanel.c: ダイアログの外観を変更。
+ * src/compose.c: フラグを正しくセットするように
+ compose_save_to_outbox() と compose_queue() を修正。
+
+2000-12-28
+
+ * src/mainwindow.c: ツールバーのラベルの文字列を修正。
+
+2000-12-27
+
+ * src/gtkutils.[ch]: gtkut_ctree_node_move_if_on_the_edge() を追加。
+ * src/summaryview.c: summary_display_msg(): リストの端のメッセージ
+ が表示されたらスクロールするようにした。
+
+2000-12-25
+
+ * src/folder.[ch]
+ src/mh.[ch]: メッセージを移動する関数を追加。
+ * src/procmsg.[ch]: procmsg_move_messages_with_dest() を folder.c
+ と mh.c に移動。 procmsg_to_folder_hash_table() を追加。
+
+2000-12-24
+
+ * src/utils.[ch]: get_tmp_file() を追加。
+ * src/pop.c
+ src/inc.c
+ src/folder.c: メッセージを受信するのに失敗していたバグを修正。
+ * src/mh.c: mh_scan_folder(): フォルダの新着、未読、総数を調べる
+ ようにした。
+
+2000-12-23
+
+ * src/folderview.c: 特別なフォルダを設定するルーチンを追加。
+ * src/folder.[ch]: メソッド is_msg_changed() を追加。
+ folder_find_item_from_path() を実装。
+ * src/summaryview.c: 間違って FolderItem を解放していたバグを修正。
+ * autogen.sh: configure が引数を取れるように修正。
+
+2000-12-22
+
+ * src/main.c
+ src/mainwindow.[ch]: メールボックスのパスを訊ね、作成する
+ main_window_new_mailbox() を追加。
+ * src/folderview.c: フォルダツリーと選択されたフォルダを展開する
+ ようにした。
+
+2000-12-21
+
+ * src/mh.[ch]
+ src/folder.c: フォルダを再帰的にスキャンし、ツリーを生成する
+ mh_scan_tree() を実装。
+
+2000-12-19
+
+ * src/compose.c
+ src/defs.h
+ src/filter.[ch]
+ src/folder.[ch]
+ src/foldersel.[ch]
+ src/folderview.[ch]
+ src/imap.[ch]
+ src/import.c
+ src/inc.c
+ src/main.[ch]
+ src/mainwindow.c
+ src/mbox.[ch]
+ src/mh.[ch]
+ src/news.[ch]
+ src/prefs_common.c
+ src/procmsg.[ch]
+ src/summaryview.[ch]
+ src/xml.[ch]
+ src/Makefile.am: 開発版ツリーを cvs ツリーにマージ。いくつかの
+ 関数はまだ実装されていません。
+
+2000-12-18
+
+ * version 0.4.9
+
+2000-12-11
+
+ * src/xml.[ch]: タグの省略形 (<tag />) に対応。
+ * src/procmsg.c: procmsg_msg_exist(): メモリリークのバグを修正。
+ * src/imap.c: imap_parse_atom(): subject が空の場合 segmentation
+ fault を起こすバグを修正(筒井さん thanks)。
+ * src/folder.[ch]: 更新。
+
+2000-12-10
+
+ * src/xml.[ch]: 指定された XML ファイル全体を解析し、木構造を返す
+ xml_parse_file() を追加。
+
+2000-12-09
+
+ * po/pt_BR.po: segmentation fault を起こす幾つかの typo を修正。
+
+2000-12-07
+
+ * version 0.4.8
+
+ * src/session.h: 追加。
+ * src/folder.[ch]: 更新。
+ * src/compose.c: compose_write_to_file()
+ src/codeconv.c: conv_get_outgoing_charset_str(): 送信キャラクタ
+ セットが指定されていて、非 ASCII なキャラクタが subject に使用
+ されていると charset にゴミを出力していたバグを修正。
+
+2000-12-04
+
+ * src/statusbar.c: statusbar_puts(): ステータスバーが非表示の場合に
+ 処理をロックしてしまっていたバグを修正。
+
+2000-12-03
+
+ * src/folder.[ch]: よりオブジェクト指向なフォルダ管理のために追加。
+
+2000-12-02
+
+ * version 0.4.7
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: ステータスバーの状態が保存されるようにした。
+ * src/compose.c: compose_insert_sig(): 署名ファイルが存在しない
+ ときは区切りを表示しないように修正。
+ * src/prefs_account.[ch]
+ src/inc.c: 全アカウントから受信するときにメッセージを受信するか
+ どうかを切り替えられる選択肢を追加。
+ * README
+ README.jp: 説明を更新し、使用方法をいくつか追加した。
+
+2000-12-01
+
+ * src/Makefile.am
+ src/gtkshruler.[ch]
+ src/compose.[ch]: メッセージ作成ウィンドウのルーラをグラフィカル
+ にする Alfons Hoogervorst さんからのパッチを適用(感謝!)。
+
+2000-11-27
+
+ * src/codeconv.c
+ src/mainwindow.c
+ src/prefs_common.c: CS_WINDOWS_1251 を CS_CP1251 で置き換えた。
+
+2000-11-27
+
+ * version 0.4.6
+
+ * src/compose.c: 引用メッセージの色を再び黒に戻した。
+
+2000-11-26
+
+ * src/about.c: Sylpheed ホームページへのクリッカブル URI と、
+ コンパイル時に組み込まれた機能のリストを追加。
+ * src/compose.c: 引用されたメッセージの色を青にした。
+ * src/summaryview.c: コンテキストメニューに「全てのヘッダを表示」
+ を追加。
+ * src/prefs_common.c: ダイアログからスレッド表示のオプションを削除。
+ * src/compose.c: 引用フォーマットを正しくパースしていないバグを
+ 修正。
+
+2000-11-25
+
+ * src/compose.c: compose_set_ext_editor_sensitive(): 行折り返しの
+ メニュー項目とツールボタンを切り替えるように修正。
+ * src/prefs_common.c: 署名の区切りのデフォルトを修正。
+ * src/compose.[ch]: 作成ウィンドウにルーラを追加。
+ * src/prefs_common.[ch]: ルーラ表示状態のメンバを追加。
+
+2000-11-24
+
+ * src/headerview.[ch]: destroy 用関数を追加。
+ * src/messageview.c: messageview_destroy(): HeaderView オブジェクト
+ を解放していなかったメモリリークのバグを修正。
+ * src/prefs.c: prefs_write_open(): メモリリークのバグを修正。
+ * src/xml.c: xml_close_file(): メモリリークのバグを修正(上記3つの
+ メモリリークのバグ修正に関して Alfons Hoogervorst さんに感謝)。
+
+2000-11-23
+
+ * version 0.4.5
+
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: 記述をいくつか修正。
+
+2000-11-22
+
+ * src/compose.c: 自動改行機能を実装。
+ * src/prefs_common.[ch]: 自動改行用の設定を追加。
+ * src/codeconv.[ch]: コードセットに Windows-1251 を追加。
+ conv_jistoeuc(): ある半角カナ文字が出現したときに segmentation
+ fault を起こすバグを修正。
+ * src/summaryview.c: summary_select_all(): メッセージ数が多い
+ 場合はステータスバーにメッセージを表示するようにした。
+
+2000-11-18
+
+ * src/compose.c: compose_reply(), compose_quote_parse_fmt():
+ 引用符もパースするように修正。
+ フォーマットにイニシャルを意味する %I を追加。
+ * src/codeconv.[ch]: コードセットに GB2312 と Big5 を追加。
+ 不正な送信コードセットを設定していたバグを修正。
+ * src/mainwindow.c
+ src/prefs_common.c: 中国語のコードセットのメニュー項目を修正。
+
+2000-11-17
+
+ * src/codeconv.[ch]
+ src/prefs_common.[ch]: 送信キャラクタセットが(数値でなく)
+ 文字列で保存されるように修正。
+
+2000-11-16
+
+ * src/textview.c: textview_set_font(): font と fontset を選択する
+ 方法を変更。そして ISO-8859-1 のデフォルトのフォントを変更。
+ * src/headerview.c: headerview_show_xface(): 無効な X-Face を
+ 無視するようにした。
+ * src/codeconv.c: conv_codeset_strdup(), conv_get_code_conv_func():
+ 変換元のコードセットが NULL で現在のロカールが日本語の場合、
+ 変換元のコードセットを ISO-2022-JP とみなすように修正。
+
+2000-11-14
+
+ * src/textview.c: textview_destroy(): textview->msgfont が NULL
+ の場合に segmentation fault を起こすバグを修正(平松さん thanks)。
+ * src/main.c
+ src/defs.h: メニューのショートカットを保存できるようにする
+ 柳瀬さんからのパッチを適用(感謝!)。
+
+2000-11-11
+
+ * src/mainwindow.[ch]: メニューアイテムのセンシティビティを切り替
+ える main_window_set_menu_sensitive() を追加。
+ * src/summaryview.c: summary_set_popup_sensitive() を
+ summary_set_menu_sensitive() に名称変更し、メインメニューの
+ センシティビティを設定するようにした。
+
+2000-11-09
+
+ * src/textview.c: textview_init(): GtkText のテーマエンジンを
+ 切っていなかったバグを修正(平松さん thanks)。
+ * src/compose.c: compose_quote_parse_fmt(): 差出人のフルネームと
+ ファーストネームを意味する %n と %N を追加。
+ * manual/ja/*.??ml: 最新版に更新。
+
+2000-11-07
+
+ * version 0.4.4
+
+ * src/defs.h: main.h から定義を分離し、 DEFAULT_SPOOL_PATH と
+ MAXPATHLEN をシステムのヘッダから設定する戸川さんからのパッチ
+ を適用(感謝!)。
+ * src/codeconv.c: conv_get_current_charset(): lt_LT と UTF-8
+ ロカールのための修正。
+ * src/textview.c: textview_set_font(): ロカールがマルチバイトの
+ 場合に正しいフォントを設定するように修正。
+ textview_destroy(): 破壊のための適切なコードを追加。
+ textview_show_header(): X-Mailer の色付けを修正。
+
+2000-11-06
+
+ * src/textview.[ch]: TextView がシングルバイトとマルチバイトの
+ GtkText を持つようにし、与えられたコードセットに従ってそれらを
+ 切り替えるようにした。
+ * src/compose.c: compose_create(): フォント設定ルーチンを修正。
+
+2000-11-02
+
+ * src/textview.[ch]: メッセージフォントの変数を TextView に移動。
+ textview_set_font(): 与えられたコードセットが US-ASCII または
+ ISO-8859-* なら gdk_font_load() を使うように修正。
+
+2000-11-01
+
+ * src/codeconv.c
+ src/procmime.c
+ src/prefs_common.c
+ src/textview.c
+ src/compose.c: 8bit コード問題への対処(locale が C 、あるいは
+ 設定されていないときは gdk_fontset_load() の代わりに
+ gdk_font_load() を使用)。
+
+2000-11-01
+
+ * version 0.4.3
+
+ * src/compose.[ch]: `草稿' ツールボタンを追加。
+ * src/imap.c: imap_parse_envelope(): パース時のバグを修正。
+ * README, README.jp: locale の設定の説明を追加。
+
+2000-10-31
+
+ * src/compose.c: 草稿を再編集してもう一度保存した場合、以前の草稿を
+ 上書きするようにした。
+ * src/procmsg.[ch]: メッセージが実際に存在するかどうかを調べる
+ procmsg_msg_exist() を追加。
+ * src/folderview.[ch]: 個々のフォルダビューに対して指定したフォルダを
+ 走査する folderview_scan_folder_a() と
+ folderview_scan_folder_foreach_a() を追加。
+ * src/mainwindow.[ch]: main_window_scan_folder() と
+ main_window_scan_folder_all() を削除。
+ メニューに `再編集' を追加。
+ * src/import.[ch]: import_mbox() の引数から MainWindow を削除。
+ * src/summaryview.c: ポップアップメニューから不要な項目を削除。
+ summary_reedit_cb() を summary_reedit() に変更し、public にした。
+
+2000-10-30
+
+ * src/compose.h: メンバ msginfo を Compose に追加。
+ * src/procmsg.[ch]: MsgInfo オブジェクトを複製する
+ procmsg_msginfo_copy() を追加。
+
+2000-10-25
+
+ * src/summaryview.c: 状況に応じてポップアップメニューのセンシ
+ ティビティを変更するようにした。フォーカスがサマリビューにあった
+ ときに `D' キーが押された場合、 `ごみ箱を空にする' ダイアログを
+ 繰り返し表示していたバグを修正。
+ * src/pixmaps/unread.xpm: 未読マークの色を青に変更。
+
+2000-10-22
+
+ * src/main.c: g_thread の初期化を修正。
+
+2000-10-21
+
+ * src/codeconv.c: locale_table に pt_BR を追加。
+ * src/prefs_common.c: prefs_send_create(): libjconv を使用しない
+ 場合に `US-ASCII'、`ISO-8859-1'、そして日本語コードセットを
+ 送信コードセットのオプションメニューに追加。
+ * src/compose.c: 草稿保存時のバグを再度修正。
+
+2000-10-19
+
+ * src/compose.c: compose_write_headers(): 草稿を保存するときに
+ To: が空の場合にヘッダの書込みに失敗するバグを修正。
+
+2000-10-18
+
+ * src/procmime.[ch]
+ src/compose.c
+ src/headerwindow.[ch]
+ src/summaryview.c
+ src/messageview.[ch]
+ src/mimeview.c
+ src/textview.c
+ src/procmsg.[ch]
+ src/procheader.[ch]: 送信待ちフォルダを適切に扱えるよう修正。
+ * src/compose.[ch]
+ src/summaryview.c: 草稿の再編集機能を実装。
+ * src/mainwindow.c
+ src/summaryview.c
+ src/mimeview.c: *(GtkWidget **) をマクロ GTK_WIDGET_PTR() で置き
+ 換えた。
+
+2000-10-17
+
+ * src/procmsg.[ch]: procmsg_msginfo_free(): メモリリークのバグを修正。
+ MsgFlags に MSG_QUEUED と MSG_DRAFT を追加し、フォルダが QUEUE_DIR
+ または DRAFT_DIR の場合にそれらをセットするようにした。
+
+2000-10-14
+
+ * version 0.4.2
+
+ * src/headerview.c
+ src/messageview.c: ヘッダビューの縁を修正。
+ * src/gtkutils.h: Sylpheed のオブジェクトを GtkWidget にキャストする
+ マクロ GTK_WIDGET_PTR() を追加。
+ * src/utils.c: remove_return(), remove_space(): segmentation fault
+ を起こす可能性のあったバグを修正。
+ * src/compose.[ch]
+ src/mainwindow.c
+ src/summaryview.c: `添付として転送' を実装。
+ * src/utils.[ch]: open_uri(): textview.c と manual.c から URI を
+ 開く関数を移動。
+
+2000-10-13
+
+ * src/mainwindow.c
+ src/summaryview.c
+ src/compose.[ch]
+ src/prefs_common.[ch]: `引用して返信' を削除し、`全員に返信' を
+ 追加。返信時にメッセージを引用するかどうかを選択できるオプション
+ を追加。
+
+2000-10-12
+
+ * src/folderview.c: ステータスバーの再描画に GTK_EVENTS_FLUSH()
+ の代わりに gtkut_wait_for_draw() を使用するように修正。
+ * src/codeconv.[ch]
+ src/mainwindow.c
+ src/prefs_common.c: コードセットにバルト諸国 (ISO-8859-4,13)
+ を追加。
+ * src/compose.c: compose_send(): メッセージの送信に失敗したときに
+ エラーダイアログを表示するように修正。
+
+2000-10-11
+
+ * src/account.c: account_edit_close(): 最初にアカウントを作成した
+ ときに現在のアカウントを設定しないバグを修正。
+ * configure.in: es を ALL_LINGUAS に追加。
+
+2000-10-10
+
+ * src/codeconv.c: conv_codeset_strdup(): 可能なら libkcc を使用する
+ ようにした。
+ conv_get_code_conv_func(): 不明なコードセットを変換しないように
+ した。
+ * src/folderview.c: folderview_update_msg_num(): スタイル変更
+ ルーチンを修正。
+
+2000-10-09
+
+ * src/codeconv.c: conv_codeset_strdup(): 引数が NULL の場合、
+ コードセットを自動的に指定するように修正。
+ * src/textview.c: textview_write_line(): 変換が失敗した場合は
+ テキストビューに警告メッセージを出力するようにした。
+
+2000-10-06
+
+ * README, README.jp: マニュアルの著者名を修正。
+
+2000-10-05
+
+ * src/headerview.[ch]
+ src/messageview.[ch]: GtkText ウィジェットの代わりに GtkLabel を
+ 使うように修正。
+ * src/codeconv.c: conv_unmime_header(): 現在の locale が EUC-JP で
+ かつ libjconv が使用されている場合に表示不能なコードを削除する
+ ように修正。
+
+2000-10-04
+
+ * src/procmime.[ch]
+ src/messageview.c
+ src/mimeview.c
+ src/textview.c: MIME メッセージをより望ましい形で解析するように
+ 修正。
+ * src/imap.c: imap_parse_address(): バグを修正。
+
+2000-10-03
+
+ * src/procmsg.[ch]: procmsg_get_message_file_path() を追加。
+ * src/recv.c: recv_bytes_write(): CR+LF -> LF 変換ルーチンを追加。
+ * src/imap.[ch]: IMAPSession 中のメンバ `group' の名前を `mbox'
+ に変更。
+ imap_gen_send(): パスワードをログに出力しないように修正。
+ セッション破棄ルーチンを修正。
+ * src/folderview.c: folderview_write_cache(): IMAP フォルダリストを
+ 保存するようにした。
+ * src/procmime.c: procmime_scan_multipart_message(): 添付された
+ RFC822 のパートで終端の境界が表示されてしまっていたバグを修正。
+ * src/prefs_common.c: デフォルトのツールバーのスタイルをアイコンと
+ テキストの両方に変更。
+
+2000-10-02
+
+ * src/imap.c: imap_get_uncached_messages(): キャッシュされたエンベ
+ ロープを取得しないように修正。
+ imap_session_get_message_info(): セッションが確立されていない
+ 場合はキャッシュのみを読み込むようにした。
+ * src/procmsg.c: procmsg_set_flags(): IMAP フォルダに対応。
+ *src/news.c: news_get_article_info(): セッションが確立されていない
+ 場合はキャッシュのみを読み込むようにした。
+
+2000-10-01
+
+ * src/textview.c: textview_write_line(): メモリリークのバグを修正。
+ * src/folderview.[ch]: アカウント情報から IMAP4 フォルダを作成する
+ ようにした。
+ * src/imap.[ch]: imap_session_get(): アカウント情報から IMAP4
+ セッションを生成するように修正。
+
+2000-09-30
+
+ * src/imap.[ch]: IMAP4 対応のために追加。
+ * src/summaryview.[ch]
+ src/procmsg.c
+ src/recv.[ch]: IMAP4 対応のために修正。
+ * src/folderview.c: さらに IMAP4 を実装。
+ * src/procmsg.[ch]: 指定されたメッセージを取得してそのファイル名を
+ 返す procmsg_get_message_file() を追加。
+ * src/gtkutils.c: gtkut_widget_wait_for_draw(): 与えられた
+ ウィジェットが不可視状態の場合に処理をロックしてしまうバグを修正。
+
+2000-09-28
+
+ * src/folderview.[ch]: IMAP4 関係のコードを追加。
+
+2000-09-28
+
+ * version 0.4.1
+
+ * src/main.h: IMAP_CACHE_DIR を追加。
+ * src/utils.[ch]: get_imap_cache_dir() を追加。
+ * src/procmsg.h: M_IMAP を MsgType に追加し、 MSG_IMAP を MsgFlags
+ に追加。マクロ MSG_IS_IMAP() を追加。
+ * src/codeconv.c: setlocale() のために `#include <locale.h>' を追加。
+ * sylpheed.spec: %files セクションを修正。
+
+2000-09-27
+
+ * version 0.4.0
+
+ * src/codeconv.c: conv_get_current_charset(): 文字列を strncasecmp()
+ で比較するようにした。
+ * src/compose.c: comopse_reply_parse_header(): OE5 によって生成
+ される異常な References: ヘッダの問題を回避 :(
+
+2000-09-26
+
+ * src/prefs_common.c
+ src/prefs_account.c: ウィジェットの配置を修正。
+
+2000-09-26
+
+ * version 0.3.99
+
+ * src/*.[ch]: ソースファイルの先頭に著作権表示を追加。
+ * src/compose.c: compose_write_attach(): ファイル名エンコード
+ ルーチンを修正。
+
+2000-09-25
+
+ * src/mainwindow.c: マニュアルのメニューエントリを修正。
+ * src/compose.c
+ src/codeconv.[ch]: compose_encode_header() を codeconv.c に移動し、
+ libjconv パッチを適用。
+ * src/utils.c: strdup_mbstowcs(), strdup_wcstombs(): 確保された
+ メモリを最適なサイズに縮めるために g_realloc() を使用。
+ * src/prefs_common.[ch]: 送信コードセットのオプションメニューを追加。
+ * src/compose.c: compose_send(): 多重送信を避けるために排他ロックを
+ 追加。
+ * configure.in: '--enable-ipv6=no' をデフォルトにした。
+ * src/compose.c: compose_write_attach(): 添付ファイル名を
+ エンコードするようにした。
+ * src/procmsg.c: procmsg_get_last_message_number(): ファイルタイプを
+ チェックしていなかったバグを修正。
+ procmsg_move_messages_with_dest(): 同名のディレクトリが存在した
+ 場合にメッセージの移動に失敗するバグを修正。
+ * src/utils.c: is_ascii_str(): '\t', ' ', '\r', '\n' が ASCII 文字
+ に含まれるように修正。
+
+2000-09-24
+
+ * src/compose.c
+ src/procmime.[ch]: libjconv 使用時に実際に動作するように修正 :)
+ * src/codeconv.[ch]: 引数で指定されたコードセットに従って文字列の
+ コードセットを変換する conv_codeset_strdup() を追加。
+ * src/utils.[ch]: 文字列が 7bit ASCII かどうかを判別する
+ is_ascii_str() を追加。
+ * src/procmime.[ch]
+ src/codeconv.[ch]: 文字集合関連の関数を codeconv.c に移動。
+ * BONAIM さん作のパッチとマニュアルを統合(感謝!)。
+
+2000-09-23
+
+ * configure.in
+ src/compose.c
+ src/gtkutils.c
+ src/mainwindow.c
+ src/procmime.[ch]
+ src/textview.c
+ src/unmime.[ch]: libjconv を使用し、UTF-8 (Unicode) を含む多数の
+ locale を扱えるようにする樋口さんからのパッチを適用(感謝!)。
+ * src/account.c: アカウント編集ダイアログで別のアカウントが選択され
+ たときにアカウントを切り替えないようにした。
+
+2000-09-20
+
+ * src/prefs_common.[ch]
+ src/textview.c: 簡略ヘッダをメッセージビューに表示するかどうかを
+ 指定するオプションを追加。
+ * src/codeconv.[ch]: MIME エンコードされたヘッダをデコードし、
+ キャラクタセットを変換する関数 conv_unmime_header() を追加。
+ conv_unreadable_latin() を追加し、 conv_latintodisp() を修正。
+ * src/messageview.[ch]: エスケープキーが押されたときにウィンドウを
+ 閉じるようにした。
+
+2000-09-17
+
+ * src/imageview.c: メッセージビューが新しいウィンドウの状態のとき
+ segmentation fault を起こすバグを修正。
+ * src/prefs_common.c: 外部エディタコマンドラインのリストに
+ `xemacs %s' を追加。
+
+2000-09-16
+
+ * version 0.3.29
+
+ * src/summaryview.c: ダブルクリックで新規メッセージウィンドウを
+ 開けるようにした。
+ * src/prefs_common.[ch]
+ src/messageview.c: メッセージウィンドウのウィンドウサイズを
+ 保存するようにした。
+ * src/prefs_account.c: プロトコルのオプションメニューに
+ `なし (ローカル)' を追加。
+
+2000-09-15
+
+ * Makefile.am: EXTRA_DIST に autogen.sh を追加。
+
+2000-09-09
+
+ * src/prefs_common.c: フォント選択ダイアログを有効にする
+ Paul Rolland さんからのパッチを適用(感謝!)。
+ * src/compose.[ch]
+ src/utils.[ch]: compose.[ch] の tzoffset() と compose_get_date()
+ を utils.[ch] に移動。
+ * src/main.[ch]: フィルタファイルの名前を `filterrc' に変更。
+
+2000-09-06
+
+ * src/compose.[ch]
+ src/utils.[ch]: 引用部を正しく解析するようにアドレスの解析
+ ルーチンを修正。
+ * src/textview.c: textview_show_part(): パートが text/plain の
+ 場合は簡略ヘッダを表示するように修正。
+
+2000-09-03
+
+ * src/messageview.[ch]
+ src/summaryview.[ch]
+ src/mainwindow.c: 新しいウィンドウでメッセージを開けるようにした。
+ * src/messageview.[ch]
+ src/mimeview.[ch]
+ src/textview.[ch]
+ src/imageview.[ch]: destroy 関数を追加し、キー処理ルーチンを修正。
+
+2000-09-02
+
+ * src/socket.c: sock_connect_by_getaddrinfo(): segmentation fault
+ を起こすバグを修正(黒沢さん thanks)。
+ * src/alertpanel.c: フォーカスされるボタンが選択可能なように修正。
+ * src/account.c
+ src/compose.c
+ src/folderview.c: 警告パネルのボタンの順序が `はい', `いいえ' に
+ なるように修正。
+
+2000-09-01
+
+ * src/utils.[ch]: コマンドラインを execvp() を使って実行する
+ execute_async() と execute_command_line() を追加。
+ * src/textview.c
+ src/mimeview.c
+ src/procmsg.c: セキュリティのために system() を
+ execute_command_line() で置き換えた。
+ * src/procmsg.c: system() に戻した。
+ * src/utils.c: execute_command_line() を修正。
+
+2000-08-31
+
+ * src/mainwindow.c: main_window_get_size(): MessageView が非表示
+ の場合は SummaryView の高さを更新しないように修正。
+ * src/compose.[ch]: 外部エディタ処理のいくつかの問題を修正する
+ なかがわさんからのパッチを適用(感謝!)。
+ * src/uuencode.[ch]
+ src/procmime.[ch]: Content-Transfer-Encoding: x-uuencode に対応
+ する平松さんからのパッチを適用(感謝!)。
+
+2000-08-30
+
+ * src/compose.[ch]
+ src/prefs_common.[ch]: 外部エディタ機能を実装。
+ * src/compose.c: compose_attach_property(): 添付ファイルの属性を
+ 変更するときのバグをいくつか修正。
+ * src/compose.c: 外部エディタ関数のバグをいくつか修正。
+
+2000-08-29
+
+ * version 0.3.28
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]
+ src/summaryview.c: 再起動時にウィジェットのサイズを復元する
+ Paul Rolland さんからのパッチを適用(感謝!)。
+ * src/folderview.c
+ src/prefs_common.[ch]
+ src/summaryview.c: CTree のカラム幅を保存する Paul Rolland さん
+ からのパッチを適用(感謝!)。
+
+2000-08-27
+
+ * src/headerview.c: HeaderView の高さを修正。
+ * src/textview.c: textview_show_part(): もしメッセージがシングル
+ パートの RFC822 メッセージなら、通常のテキストとして処理する
+ ようにした。
+ * src/folderview.c
+ src/summaryview.c: キー操作周りをいくつか変更。
+ * src/prefs_common.[ch]: `assort' という単語を `filter' で置き換えた。
+
+2000-08-26
+
+ * src/codeconv.[ch]: ISO-8859-1 に対応するために conv_latintodisp()
+ を追加。
+ * src/procheader.c: procheader_get_one_field(): ファイルの最初の行
+ がスペースまたはタブの場合に segmentation fault を起こすバグを
+ 修正(平松さん thanks)。
+ * src/mimeview.c: mimeview_drag_data_get(): ファイル名が
+ G_DIR_SEPARATOR を含まないように修正(平松さん thanks)。
+ * src/prefs_account.c
+ src/prefs_common.c: ダイアログサイズを修正。
+ * src/prefs.c: ダイアログウィンドウを広げられるようにした。
+
+2000-08-25
+
+ * version 0.3.27
+
+ * configure.in: libintl の検出を失敗させる不要な
+ AC_CHECK_FUNC(gettext) を削除。
+ * src/filter.[ch]
+ src/prefs_common.c: `not contain' を実装。そして将来の拡張のために
+ 修正。
+ * src/imageview.c: マウスイベントを掴まないように alertpanel_error()
+ を g_warning() に変更。
+ * src/compose.[ch]: Compose オブジェクトのリストを保持する
+ compose_list を追加、そして関数 compose_get_compose_list() を追加。
+ * src/main.c
+ src/mainwindow.c
+ src/summaryview.c: 作成中のメッセージが存在すれば確認するように
+ した。
+
+2000-08-23
+
+ * src/compose.c: compose_reply_set_entry(): 送信待ちフォルダの
+ メッセージに返信しようとしたときに segmentation fault を起こす
+ バグを修正(ことぶきさん thanks)。
+ compose_attach_property(): 入力エラーを処理できるようにプロパティ
+ ダイアログルーチンを修正。
+ * src/mimeview.c: MimeView からのドラッグ&ドロップを可能にする
+ 平松さんからのパッチを適用(感謝!)。
+ * src/headerview.[ch]
+ src/procheader.c
+ src/procmsg.h: 廣島さんからの X-Face 対応パッチを適用(感謝!)。
+
+2000-08-22
+
+ * src/compose.c: compose_attach_property(): プロパティダイアログで
+ 実際に添付ファイルの属性を変更できるように修正。
+
+2000-08-21
+
+ * configure.in
+ src/Makefile.am: gdk_imlib のために更新。
+ * AUTHORS と NEWS を追加。
+ * configure.in
+ acconfig.h
+ src/Makefile.am: configure が gdk-pixbuf と gdk_imlib ライブラリを
+ 自動検出するように修正。IPv6 検出のバグを修正。
+ * src/imageview.c: gdk-pixbuf に対応。
+ * README
+ README.jp
+ INSTALL
+ INSTALL.jp: 内蔵画像表示機能についての言及を追加。
+ * configure.in: configure が gdk-pixbuf と gdk_imlib ライブラリを
+ 無効にできるように修正。
+
+2000-08-20
+
+ * src/imageview.[ch]
+ src/main.c
+ src/messageview.[ch]
+ src/mimeview.[ch]: 画像を表示可能にする廣島さんからのパッチを適用
+ (感謝!)。
+
+2000-08-19
+
+ * version 0.3.26
+
+ * src/summaryview.c: summary_assort_func(): `受信しない' 設定を
+ 避けるように修正。
+
+2000-08-18
+
+ * src/filesel.c: ダイアログを開いたときに以前のディレクトリを記憶
+ しておくようにする廣島さんからのパッチを適用(感謝!)。
+ * src/summaryview.[ch]: 関数 summary_redisplay_msg() を追加。
+ * src/mainwindow.c: set_charset_cb(): 文字コードセットが変更された
+ ときに現在表示されているメッセージを再表示するようにした。
+ * src/inc.c
+ src/pop.c
+ src/prefs_common.c
+ src/filter.h: 振り分けルールによって特定のメッセージを受信しない
+ ようにできる田中さんからのパッチを適用(感謝!)
+
+2000-08-15
+
+ * src/procmsg.[ch]: MsgFlags 型に MSG_MIME を追加。MSG_MIME フラグを
+ 処理するように修正。新しいメッセージを調べないように指定されていて
+ も、キャッシュの読み込みに失敗したらキャッシュされていないメッセー
+ ジを調べるように修正。
+ * src/procheader.c: procheader_parse(): マルチパート MIME メッセージ
+ の判別を追加。
+ * src/main.h: CACHE_VERSION を増加。
+ * src/summaryview.[ch]: メッセージがマルチパートかどうかを表示する
+ `MIME' カラムを追加。
+ * src/prefs_common.[ch]: 表示項目の設定に `MIME' カラムを追加。
+ * src/pixmaps/clip.xpm を追加。
+ * src/summaryview.c
+ src/procmsg.[ch]: 印刷前に印刷コマンドの入力を促すように修正。
+
+2000-08-14
+
+ * src/folderview.c: folderview_create()
+ src/summaryview.c: summary_create():
+ src/addressbook.c: addressbook_create(): CTree のエキスパンダの
+ スタイルを GTK_CTREE_EXPANDER_SQUARE に指定。
+ * src/compose.c: プロパティダイアログのインタフェースを修正。
+
+2000-08-13
+
+ * src/compose.c: 添付ファイルのプロパティダイアログを追加。
+
+2000-08-11
+
+ * src/procmsg.[ch]: 与えられたメッセージを印刷する関数
+ procmsg_print_message() を追加。
+ * src/summaryview.c: summary_print(): 選択された全てのメッセージを
+ 印刷するように修正。
+ * src/folderview.c: folderview_select_node(): 受信箱が空の場合、
+ 取込時にフォルダツリーにフォーカスしないバグを修正。
+
+2000-08-10
+
+ * version 0.3.25
+
+ * src/prefs_commmon.[ch]: `その他' タブと、印刷オプションを追加。
+ また外部ブラウザオプションをそこへ移動。
+ * src/mainwindow.c
+ src/summayview.[ch]: 印刷メニューを追加し、印刷用関数を実装。
+
+2000-08-09
+
+ * src/prefs_account.c: smtp_server の値のデフォルトを NULL にした。
+ * src/folderview.c: folderview_update_msg_num(): ゴミ箱フォルダに
+ 新着、未読メッセージがあった場合でも強調しないように変更。
+
+2000-08-08
+
+ * src/filesel.c: filesel_select_file(): ファイル選択ダイアログを
+ 閉じた直後に他のダイアログ開かれた場合に segmentation fault を
+ 起こすバグを(多分)修正。
+
+2000-08-05
+
+ * src/compose.c: compose_encode_header(): wctomb() が失敗したときに
+ 無限ループを起こすバグを修正。
+
+2000-08-04
+
+ * version 0.3.24
+
+ * src/mimeview.c: ダブルクリックとポップアップメニューで添付
+ ファイルを開けるようにした。コードを整理。
+ * src/procmime.[ch]: マルチパートメッセージのパートを保存する
+ 関数 procmime_get_part() を追加。
+
+2000-08-03
+
+ * src/main.[ch]
+ src/mimeview.c
+ src/prefs_common.[ch]
+ src/procmime.[ch]
+ src/utils.[ch]: 添付された画像、音声、 HTML ファイルを開けるように
+ するパッチを適用(橋本さん thanks)。
+ * src/filter.c: filter_match_condition(): 指定されたフィルタの body
+ が NULL のとき segmentation fault を起こすバグを修正。そしてその
+ 場合はフィルタがマッチしたとみなすようにした。
+
+2000-07-30
+
+ * src/summaryview.c:
+ summary_save_as(): ニュース記事を保存できないバグを修正。
+ summary_display_msg(): 既にニュース記事を処理しているときに
+ 別のニュース記事が読まれるのを防ぐために排他ロックを追加。
+ * src/gtkutils.[ch]: draw シグナルが発行されるのを待つ
+ gtkut_widget_wait_for_draw() を追加。
+ * src/mainwindow.c:
+ main_window_cursor_wait()
+ main_window_cursor_normal(): カーソルを直ちに変更するために
+ gdk_flush() を追加。
+ * Makefile.am
+ libkcc/Makefile.am: `make dist' のために EXTRA_DIST を追加。
+ Makefile.am にターゲット `release' を追加。
+
+2000-07-28
+
+ * src/socket.c: IPv6 に対応。
+ * configure.in
+ acconfig.h: IPv6 の検出を追加。
+ * prefs_common.c: toolbar_style のデフォルトをアイコンのみに変更。
+
+2000-07-27
+
+ * 最初の cvs インポート。
+ * README と README.jp を更新。
+
+2000-07-24
+
+ * version 0.3.23
+
+ * src/procmime.[ch]: ツリーのノードとして扱えるように MimeInfo の
+ 構造体を変更。
+ 全ての MimeInfo を再帰的に解放する procmime_mimeinfo_free_all()
+ を追加。
+ 引用のためにメッセージを解析してテキストパートを取得する
+ procmime_get_text_part() を追加。
+ * src/mimeview.c: mimeview_scan_multipart_message() を
+ procmime_scan_multipart_message() と mimeview_set_multipart_tree()
+ に分割。
+ * src/compose.c: compose_quote(), compose_forward():
+ マルチパートメッセージのテキストパートを適切に引用するようにした。
+ Compose ウィンドウのサイズを保持するようにした。
+ * src/prefs_common.[ch]: メンバに compose_width と compose_height
+ を追加。
+ * src/textview.c: textview_show_part(): 少しコードを整理。
+ * src/codeconv.[ch]: 関数 conv_get_code_conv_func() を追加。
+
+2000-07-20
+
+ * version 0.3.22
+
+ * src/codeconv.[ch]: メッセージの改行コードが CR+LF の場合にゴミ文字
+ が表示されるバグを修正。 conv_sjistoeuc() を追加。
+ * src/summaryview.c: summary_attract_by_subject(): 実行した時に
+ 現在の表示位置を選択行のところに移動するようにした。
+ * src/textview.c: textview_show_part(): 文字セット判定ルーチンを
+ 修正。
+ * src/folderview.c: folderview_update_msg_num(): boldfont が NULL
+ の場合に segmentation fault を起こすバグを修正。
+ * src/compose.c: compose_create(): ウィンドウ作成時に自身をアドレス帳
+ のターゲットにするようにした。
+
+2000-07-19
+
+ * src/compose.c: compose_send(): 送信に失敗した場合に送信待ちに
+ 入れたメッセージを送信控に保存しなかったバグを修正(山本(孝)さん
+ thanks)。
+
+2000-07-15
+
+ * src/inc.[ch]: 結果によってエラーメッセージダイアログを変更する
+ ように修正。
+
+2000-07-14
+
+ * src/mainwindow.c: main_window_create(): ステータスバーの
+ アカウントボタンが必要以上に広がらないようにその usize を
+ 1 にした。
+ * src/account.[ch]: account_foreach(): 関数が非ゼロを返したら
+ 処理を中断するようにした。
+ * src/inc.[ch]
+ src/pop.c: メッセージ処理に失敗した場合、エラーメッセージ
+ ダイアログを表示するように修正。
+
+2000-07-04
+
+ * version 0.3.21
+
+ * src/mainwindow.c: アカウントツールボタンまたはアカウントステータス
+ バーが押されたらアカウント選択メニューをポップアップするように
+ した。
+ * src/folderview.c
+ src/prefs.c: ENOENT の perror メッセージを抑制。
+ * src/pop.c: UIDL が失敗した場合は LAST コマンドで代用するように
+ した。
+
+2000-07-01
+
+ * src/procheader.c: procheader_parse(): References: ヘッダを
+ 正しく解析していなかったバグを修正(山口さん thanks)。
+
+2000-06-29
+
+ * version 0.3.20
+
+ * src/compose.c: compose_reply_set_entry(): 返信時に正しく cc
+ しなかったバグを修正。
+ * src/mainwindow.c
+ src/summaryview.c: メインメニューとポップアップメニューを整理。
+
+2000-06-26
+
+ * version 0.3.19
+
+ * src/prefs_account.[ch]
+ src/compose.c: メッセージ作成時に Cc:, Bcc:, Reply-To: を自動的に
+ 指定できるようにした(なかがわさん thanks)。
+
+2000-06-25
+
+ * src/prefs_common.[ch]
+ src/mainwindow.c
+ src/main.c: 終了時にごみ箱を空にする前に尋ねるかどうかを選択
+ できるようにした。
+ * src/prefs_common.c: コードとインタフェースを少し整理。
+ * src/summaryview.c: 高速化のためにスレッド解除関数を修正。
+
+2000-06-24
+
+ * src/prefs_common.[ch]
+ src/summaryview.c: 差出人のアドレスが現在のアカウントと同じ
+ 場合に、`差出人' カラムに宛先を表示するようにした(なかがわさん
+ thanks)。
+ * src/utils.[ch]: `From:' ヘッダの文字列からアドレスを取り出す
+ 関数 extract_address() を追加。
+ * src/mainwindow.c: allsel_cb(): メッセージビューが非表示のときに
+ `編集/全て選択' が選択された場合に segmentation fault を起こす
+ バグを修正(とみたさん thanks)。
+
+2000-06-21
+
+ * src/summaryview.c: 必要なノードだけスレッド解除するように
+ 実行ルーチンを変更。
+
+2000-06-19
+
+ * src/news.c: news_session_get(): 接続が切れた時の再接続を実装。
+ * src/nntp.[ch]: nntp_mode() を追加。
+
+2000-06-18
+
+ * src/mbox.c: mbox の FILE ポインタを close していなかったバグを
+ 修正。 mbox の処理時の振り分けに対応。
+ * src/inc.c: inc_drop_message(): フォルダの最後のメッセージ番号
+ を記憶するためにハッシュテーブルを使用するように修正。
+ * src/summaryview.c
+ src/addressbook.c: 右クリック時の CTree の挙動を修正。
+ * src/pop.c: pop3_getrange_uidl_recv(): 潜在的なバッファオーバー
+ フローのバグを修正(西山さん thanks)。
+
+2000-06-17
+
+ * version 0.3.18
+
+ * src/pop.[ch]
+ src/inc.[ch]: UIDL による POP3 サーバ上の既読メッセージの管理を
+ 実装。
+ * src/utils.[ch]: g_(s)list_free() で置き換えられるので、
+ (s)list_remove_all() を削除。
+ * src/mainwindow.c: メニューの配置を少し変更。
+ * src/summaryview.c: summary_status_show(): サーバ名は表示せず、
+ ニュースグループだけ表示するようにした。
+ * src/prefs_common.c
+ src/prefs_account.c: ダイアログサイズの計算ルーチンを調整。
+
+2000-06-15
+
+ * version 0.3.17
+
+ * src/compose.c: compose_reply_set_entry(): 返信したメッセージの
+ To: と Cc: にある全てのアドレスに cc するように修正。
+ Subject: と To: のエントリの位置を入れ換えた。
+
+2000-06-14
+
+ * src/procheader.c: スペースで分離されていないヘッダを扱えるように
+ 修正。
+ * src/socket.c: sock_connect(): 固まるのを防ぐために接続の後
+ ウェイトを追加(二之宮さん thanks)。
+
+2000-06-13
+
+ * src/inc.c:
+ inc_mail()
+ inc_all_account_mail(): アカウントが存在しない場合に segmentation
+ fault を起こすバグを修正。
+ * src/mainwindow.[ch]: アカウントが存在しない場合は受信ボタンを
+ クリックできないようにした。
+ * src/compose.c: compose_queue(): 送信待機メッセージに正しく
+ マークを付けていなかったバグを修正。
+ * src/utils.[ch]: コード変換関数を src/codeconv.[ch] に分離。
+
+2000-06-13
+
+ * version 0.3.16
+
+ * src/mimeview.c: mimeview_save_as()
+ src/summaryview.c: summary_save_as(): 既存のファイルに上書きする
+ かどうかを尋ねるようにした。
+
+2000-06-12
+
+ * src/utils.c
+ src/recv.c
+ src/prefs.c
+ src/prefs_common.c
+ src/prefs_account.c
+ src/addressbook.c
+ src/compose.c
+ src/mbox.c: ディスクの空きがない場合に書き込みエラーのチェックに
+ 失敗し、ファイルを失ってしまうバグを修正。
+
+2000-06-11
+
+ * src/mainwindow.c: main_window_clean_trash(): 完了したときに
+ フォーカスをフォルダビューに移動させるようにした。
+ * src/utils.[ch]: 表示用のコード変換関数を追加。元の strncpy()
+ とは違って、ゼロフィルを行わず終端のヌル文字を付ける strncpy2()
+ を追加。
+ * src/textview.c: charset に従ってコード変換関数を変更するように
+ 修正。charset=SHIFT_JIS, charset=EUC-JP に対応。
+ * src/mainwindow.c
+ src/prefs_common.h
+ src/textview.c: メッセージのキャラクタセットを強制指定できる
+ ようにした。
+ * src/folderview.c: folderview_select_next_unread():
+ 未読フォルダが見つからなかった場合は始めから探すようにした。
+
+2000-06-11
+
+ * version 0.3.15
+
+ * src/mainwindow.c: メインウィンドウがツールバーの幅に伸ばされて
+ しまう問題を再度修正。
+ * src/mbox.c
+ src/utils.c: is_header_line(): コロンの後にスペースがないヘッダ
+ を認識するように修正 (堀田さん thanks)。
+ * src/filter.c: `#include <strings.h>' を追加。
+ * src/smtp.c: snprintf() を g_snprintf() で置き換えた。
+ * src/Makefile.am: 同梱の gettext のために INCLUDES に
+ `-I$(top_srcdir)/intl' を追加。
+ * sylpheed.spec を同梱。
+
+2000-06-10
+
+ * src/prefs_common.[ch]: 行間のピクセル数を設定できるようにした。
+ 行頭を空けるかどうかを指定できるようにした。
+ * src/summaryview.c: 表示されているメッセージがサマリビューから
+ 削除されたときにメッセージビューをクリアするようにした。
+ * src/mimeview.c: マルチパートメッセージの終端境界が見つからな
+ い場合に無限ループを起こしていたバグを修正(にしかさん thanks)。
+ * src/folderview.c: folderview_scan_mailbox(): ドット付き
+ ディレクトリを無視するようにした。
+ * src/main.c: ディレクトリの作成時に同名のファイルがすでに存在した
+ 場合、警告ダイアログを表示して終了するようにした。
+
+2000-06-09
+
+ * src/textview.c
+ src/prefs_common.[ch]: 行間と行頭を空けられるようにした。
+
+2000-06-07
+
+ * src/compose.c
+ src/procmime.[ch]: /etc/mime.types をスキャンし、添付ファイルの
+ MIME タイプを決定するようにした。
+ * src/summaryview.c: サマリが実行の時に非選択になった場合に
+ メッセージビューをクリアするようにし、フォルダが空になった
+ 場合にフォルダビューにフォーカスを移すようにした。
+ * src/mainwindow.c: メインウィンドウがツールバーの幅に伸ばされて
+ しまう問題を修正。
+ * src/inc.c: `起動時に新着メールをチェックする' がセットされていた
+ 場合、多重の gtk_main() イベントループを引き起こすバグを修正。
+
+2000-06-06
+
+ * src/compose.c: ファイルを現在のカーソルの位置に挿入できなかった
+ 問題を修正。
+
+2000-06-06
+
+ * version 0.3.14
+
+ * src/compose.[ch]: ツールバーに `添付' ボタンを追加。そして
+ `挿入' のアイコンを新しいものと置き換えた。
+
+2000-06-05
+
+ * src/mainwindow.[ch]: ツールバーに `実行' を追加。
+ ツールバーのボタンのセンシティビティを設定する関数
+ main_window_set_toolbar_sensitive() を追加。
+ * src/compose.c: テキストエントリの文字列に改行が入っていた場合に
+ 不正なヘッダを出力していたバグを修正。
+
+2000-06-04
+
+ * src/mainwindow.[ch]: ツールバーとメニューに `削除' を追加。
+ そしてポップアップメニューと同じ項目をメインメニューに追加。
+ * src/utils.[ch]: DnD サポート用の関数を追加。
+ * src/compose.c: DnD によるファイルの添付と挿入を実装
+ (平松さん thanks)。
+
+2000-06-04
+
+ * version 0.3.13
+
+ * src/summaryview.c: null ポインタを is_dir_exist() に渡していた
+ バグを修正。
+
+2000-06-03
+
+ * src/alertpanel.[ch]: 関数 alertpanel_message(),
+ alertpanel_notice(), そして alertpanel_error() を追加。
+ コードの整理。
+ * src/folderview.c
+ src/compose.c
+ src/addressbook.c
+ src/summaryview.c
+ src/summary_search.c
+ src/prefs_account.c
+ src/foldersel.c: エラーメッセージのダイアログに
+ alertpanel_error(), alertpanel_warning() または
+ alertpanel_notice() を使用するようにした。
+ * src/summaryview.[ch]: 逆順によるソートができるようにした。
+ * src/inc.c: 接続または認証に失敗したときにエラーメッセージ
+ ダイアログを表示するようにした。
+ * src/utils.h: マクロ FILE_OP_ERROR() を追加し、perror() の多くを
+ それで置き換えた。
+
+2000-06-03
+
+ * version 0.3.12
+
+ * src/compose.c: 送信待機した場合にメッセージを送信控に保存しな
+ かったバグを修正。
+ * src/send.c: send_message_queue(): 解析したデータに送信待機用
+ ヘッダを含んでしまっていたバグを修正。
+ * src/mainwindow.c: send_queue_cb(): 完了したときにステータスバーの
+ メッセージを pop し、送信待ちフォルダを更新するようにした。
+
+2000-06-02
+
+ * version 0.3.11
+
+ * src/filter.c
+ src/inc.c
+ src/compose.c: 警告メッセージを抑制。
+ * src/mainwindow.[ch]: 次の未読メッセージのボタンとメニュー項目を
+ 追加。
+ * src/summaryview.[ch]: 次の未読メッセージを選択して開く関数
+ summary_select_next_unread() を追加。
+
+2000-06-01
+
+ * src/prefs_common.[ch]: フォルダに入ったときに未読メッセージを
+ 開くかどうかを決める設定を追加。
+ * src/summaryview.c: 設定されている時のみ最初の未読メッセージを開く
+ ようにした。
+ * src/compose.c: GtkEntry から得た文字列を解放していたバグを修正。
+
+2000-05-31
+
+ * src/compose.c: 後で送信するためにメッセージを送信待機状態に
+ する `後で送信' をメニューとツールバーに追加。
+
+2000-05-30
+
+ * src/mainwindow.c: 送信待機状態のメッセージを再送信する
+ インタフェースを追加。
+ * src/compose.c: メッセージが送信待機されるときに警告ダイアログ
+ を表示するようにした。
+
+2000-05-29
+
+ * src/procmsg.[ch]: 送信待機状態のメッセージそれぞれに対して
+ send_message_queue() を呼ぶ関数 procmsg_send_queue() を追加。
+
+2000-05-28
+
+ * src/inc.c: inc_drop_message(): 行先のフォルダが存在しなければ、
+ メッセージをデフォルトの受信箱に落とすように修正。
+ * src/compose.[ch]: imput 互換のキューイング用ヘッダをキューされた
+ メッセージに追加。
+ * src/send.[ch]: キューされたメッセージを送信する関数
+ send_message_queue() を追加。
+
+2000-05-27
+
+ * configure.in
+ acconfig.h: configure 時にマルチスレッドを使うかどうかを
+ 決められるようにした。
+ * src/summaryview.c: 設定に関わらず実行したときにスレッドを作って
+ しまうバグを修正(廣島さん thanks)。
+ * src/sockinfo.[ch]: public な sock_connect_*() 関数の戻り値を
+ SockInfo オブジェクトへのポインタに変更。
+ * src/procmime.c: procmime_scan_mime_header():
+ スキャンしたパートにヘッダが無いときに NULL を返していたバグを
+ 修正(shigeri さん thanks)。
+ * src/procmime.[ch]:
+ Content-Disposition ヘッダフィールドを解析する関数
+ procmime_scan_content_disposition() を追加。
+ * src/mimeview.c: Content-Disposition ヘッダの filename の値を
+ 使用するようにした。
+ * src/pop.c
+ src/inc.c: 設定のパスワードが空で、以前の POP3 セッションが
+ 認証で失敗していた場合、パスワードの入力を促すように修正。
+
+2000-05-23
+
+ * src/socket.[ch]: 非ブロッキング IO モードソケットとマルチスレッド
+ 接続への対応を追加。
+ * src/inc.c: マルチスレッド接続に対応。
+
+2000-05-22
+
+ * src/folderview.c: メッセージが存在した時のみ、フォルダが選択
+ されたときに SummaryView にフォーカスが移るようにした。
+
+2000-05-20
+
+ * version 0.3.10
+
+ * po/ja.po: メニューラベルの先頭の `/' が抜けていて、Compose
+ ウィンドウを開いたときに segmentation fault を起こすバグを修正。
+
+2000-05-20
+
+ * version 0.3.9
+
+ * src/utils.c: get_domain_name(): gethostname() を使うように修正。
+ * src/mimeview.c: `名前を付けて保存' と `テキストとして表示' の
+ キーバインドを追加。
+
+2000-05-19
+
+ * src/recv.c: fputs() が失敗したときにエラー値を返すのに失敗し、
+ ディスクの空き容量がない場合に受信したメールを失っていたバグを修正
+ (田尻さん感謝)。
+ * src/compose.c: Reply-To に対応。
+ * src/mimeview.c: キー操作のインタフェースを改良。
+
+2000-05-18
+
+ * src/mimeview.[ch]
+ src/procmime.[ch]
+ src/textview.[ch]: ネストされたマルチパートメッセージに対応し、
+ コードを整理。
+ カプセル化された RFC822 メッセージに対応。
+
+2000-05-16
+
+ * src/compose.[ch]: メッセージ作成ウィンドウが削除されたときに添付
+ 情報のために確保されたメモリを解放するようにした。
+ 添付リストとテキストウィジェットをぺインウィジェットの上に配置した。
+ カット/コピー/ペースト/全て選択 を全ての editable ウィジェット上で
+ 可能にした。
+ 添付ファイルの削除と添付リスト上でのポップアップメニューを実装。
+ * src/prefs_common.[ch]: 署名の区切りの設定を追加。
+ * src/alertpanel.[ch]: 関数 alertpanel_warning() を追加。
+
+2000-05-14
+
+ * src/prefs_common.[ch]
+ src/textview.c: URI を開くコマンドをカスタマイズできるようにした。
+ * src/compose.[ch]: マルチパート MIME メッセージの作成(ファイルの
+ 添付)を実装。
+ * src/textview.c
+ src/compose.c: GTK+ のテーマエンジンを切っていなかったバグを再度
+ 修正。
+
+2000-05-13
+
+ * version 0.3.8
+
+ * src/summaryview.c: メッセージ作成用のキーバインドを追加
+ (w, a, A, f)。また、他のキーバインドも追加(y, D, Q)。
+ * src/compose.c: Cc エントリが、返信されたメッセージの Cc を引き継ぐ
+ ようにした。
+ * src/pixmaps/new.xpm
+ src/pixmaps/unread.xpm: pixmap イメージを置き換えた。
+ * src/procheader.c: procheader_date_get_localtime():
+ 年の桁数を4桁から2桁に変更。
+
+2000-05-12
+
+ * src/inc.c: アカウントの設定でパスワードが指定されていなければ
+ 訊ねるようにした。
+ * src/prefs_account.h: 一時的なパスワードを保存するメンバ tmp_pass
+ を構造体 PrefsAccount に追加。
+ * src/inputdialog.[ch]: 文字列を隠した状態で入力を促す関数
+ input_dialog_with_invisible() を追加。
+
+2000-05-11
+
+ * src/compose.c: メッセージフォントが指定されていない場合に GTK+ の
+ テーマエンジンを切っていなかったバグを修正。
+
+2000-05-10
+
+ * version 0.3.7a
+
+ * src/summaryview.c: fprintf() に stderr を入れ忘れていたバグを
+ 修正。
+
+2000-05-10
+
+ * version 0.3.7
+
+ * src/pop.c: いくつかの POP3 コマンドがエラーを返すと、その前の
+ 操作が全て無効になってしまう問題を修正。
+ * src/compose.c
+ src/textview.c: Pixmap テーマあるいはそれから派生したものを
+ 使ったときに GtkText ウィジェットが速度低下する問題に対処した。
+
+2000-05-08
+
+ * src/inc.c: 存在しないプログラムを実行しようとしたときに X IO
+ エラーを起こすバグを修正。
+
+2000-05-07
+
+ * src/src/folderview.[ch]: FolderInfo 構造体にメンバ `mtime' を追加。
+ * src/summaryview.c: 開こうとしているフォルダの mtime をチェックする
+ ようにした。
+ * src/procmsg.c: ファイルシステムをチェックしないモードを追加。
+
+2000-05-05
+
+ * src/textview.[ch]: クリッカブル URI を実装(BONAIM さん thanks)。
+ `X-Mailer:' ヘッダが `Sylpheed' を含んでいれば強調表示するように
+ した。
+
+2000-05-04
+
+ * src/summaryview.c: summary_write_cache(): キャッシュファイルの
+ パーミッションの修正。
+
+2000-05-04
+
+ * version 0.3.6a
+
+ * src/headerview.c: headerview_clear() メソッドを追加。
+ * src/messageview.c: messageview_clear() で HeaderView をクリア
+ しないバグを修正。
+
+2000-05-04
+
+ * version 0.3.6
+
+ * src/messageview.c
+ src/textview.c: *_clear() メソッドを追加。
+ * src/summaryview.c: 新しいフォルダを開いたときに MessageView を
+ クリアするようにした。
+
+2000-05-03
+
+ * src/inc.c: 全アカウントから受信したときにそれぞれアカウントによって
+ 指定されている受信箱に移動してしまうバグを修正。
+ * src/compose.c: ウィンドウが閉じられるときにメッセージを破棄する
+ かどうかを確認するようにした。
+
+2000-05-03
+
+ * version 0.3.5
+
+ * src/pop.[ch]
+ src/inc.[ch]: APOP 認証に再対応。
+ * src/prefs_account.c: プロトコルのタイプを保存していなかったバグを
+ 修正。
+ * src/socket.h
+ src/statusbar.h: printf() 的な関数に G_GNUC_PRINTF() を追加。
+ * src/progressdialog.[ch]: クラス名を Progress から ProgressDialog
+ に変更。
+
+2000-05-02
+
+ * src/summaryview.c: ja メッセージカタログを使わない状態でニュース
+ フォルダを選択した場合にセグメンテーションフォールトを起こす
+ バグを修正。
+ * src/utils.h: printf() 的な関数に G_GNUC_PRINTF() を追加。
+ * src/Makefile.am: INCLUDES に `-DG_LOG_DOMAIN=\"Sylpheed\"' を
+ 追加。
+
+2000-05-01
+
+ * src/automaton.[ch]
+ src/inc.[ch]
+ src/pop.[ch]: POP3 取得ルーチンを有限状態オートマトンモデルを
+ 使って再実装した(平松さん thanks)。
+ * src/inc.c: メールサーバとの接続が失敗したときに、意図しない
+ プログラムの終了を起こすバグを修正。メモリリークのバグを修正。
+ * src/summaryview.c: 左カーソルキーが押されたときにフォーカスを
+ FolderView に移動するようにした。
+
+2000-04-30
+
+ * src/textview.c: 引用の識別ルーチンを少し修正。
+
+2000-04-29
+
+ * version 0.3.4
+
+ * src/procmime.[ch]: MIME デコーダを src/textview.c から
+ src/procmime.c へ移した。
+ * src/mimeview.[ch]: マルチパートメッセージの保存を実装。
+ MIME エンコードされたファイル名に対応。
+ * src/summaryview.c: 「名前を付けて保存」を実装。
+
+2000-04-28
+
+ * src/prefs_common.[ch]: SummaryView の表示項目を設定するための
+ インタフェースを実装。
+ * src/addressbook.c
+ src/account.c: 列タイトルがキーフォーカスを得ないようにした。
+
+2000-04-26
+
+ * src/textview.c: BASE64 のデコーディングと表示を実装。
+
+2000-04-25
+
+ * src/prefs_common.[ch]: SummaryView の項目のそれぞれを表示するか
+ どうかを設定するメンバを追加。
+ * src/headerwindow.c
+ src/logwindow.c: エスケープキーが押されたときにウィンドウを閉じる
+ ようにした。
+ * src/headerview.c: ScrolledWindow を使わないようにした。
+ * src/base64.c: from64tobits(): '\r' と同様に '\n' を行末と認識する
+ ように修正。
+
+2000-04-24
+
+ * src/headerview.c: テキストウィジェットのワードラップとラインラップ
+ を無効にした。
+
+2000-04-24
+
+ * version 0.3.3
+
+ * src/prefs_common.c: prefs_assort_create(): デフォルトの振り分け用
+ ヘッダにいくつかヘッダを追加。
+
+2000-04-23
+
+ * src/procmsg.c: ヘッダの解析時にメッセージのパーミッションが拒否
+ された場合にセグメンテーションフォールトを起こすバグを修正
+ (わかい@電通大 さん thanks)。
+ * src/mimeview.c: キー押下イベントを SummaryView に渡すようにした。
+
+2000-04-21
+
+ * src/main.h
+ src/alertpanel.c: より良いフォントにマッチするようにフォントの
+ 指定を修正。
+ * src/utils.[ch]: FreeBSD に対応するためにワイドキャラクタ関数を
+ 追加。<wchar.h> の存在のチェックを追加。
+ * acconfig.h
+ configure.in: FreeBSD に対応するために wint_t と libxpg4 の
+ チェックを追加。
+ * src/unmime.c: <alloca.h> の存在をチェックするように修正。
+ 上記3つは佐々木さんからの contribution です。感謝!
+
+2000-04-18
+
+ * src/main.h: ウィンドウのデフォルトの高さを減らした。
+
+2000-04-17
+
+ * src/procmime.c: ダブルクォートされた属性値の中の括弧を削除して
+ いたバグを修正。
+
+2000-04-15
+
+ * version 0.3.2
+
+ * src/mimeview.c: マルチパートメッセージのパーサと表示を実装。
+ * src/procmime.c: procmime_scan_content_type():
+ 複数の要素に対応。
+ * src/textview.c: マルチパートメッセージに対応し、コードを整理。
+
+2000-04-14
+
+ * src/summaryview.c: サイズカラムとサイズによるソートを追加。
+ * src/mainwindow.c: ソートメニューに `サイズでソート' を追加。
+ * src/procmime.c: バッファオーバーランを起こし、セグメンテーション
+ フォールトを起こすバグを修正。
+
+2000-04-13
+
+ * version 0.3.1
+
+ * src/textview.c: MIME ヘッダと
+ Content-Transfer-Encoding: quoted-printable に対応。
+
+2000-04-12
+
+ * src/messageview.[ch]
+ src/textview.[ch]: MessageView を2つのクラスに分離。
+ * src/procmime.[ch]: MIME メッセージ操作用に追加。
+
+2000-04-11
+
+ * src/mimeview.[ch]: MIME メッセージ操作用に追加。
+ * configure.in: wctype.h と wchar.h のチェックを追加。
+
+2000-04-10
+
+ * src/procmsg.[ch]
+ src/procheader.[ch]: 少しコードを整理。
+ * src/messageview.[ch]: HeaderView を統合。
+
+2000-04-09
+
+ * version 0.3.0
+
+2000-04-08
+
+ * src/addressbook.c: フォルダ/グループが追加あるいは編集されたときに
+ ツリーをソートするようにした。
+ * src/xml.c: xml_compare_tag(): 現在のタグが空だった場合に
+ セグメンテーションフォールトを起こすバグを修正。
+ * src/mainwindow.c: MainWindow の状態を保存するようにした。
+
+2000-04-08
+
+ * version 0.3.0pre1
+
+ * src/addressbook.c: アドレスグループの編集を完全に実装。
+ 警告ダイアログでエスケープキーが押されたときに、アドレスの削除が
+ 誤って確認されてしまうバグを修正。
+
+2000-04-07
+
+ * src/addressbook.c: メニューバーを追加。階層フォルダを有効にした。
+ * src/prefs_account.c: pop サーバを指定しなくても構わないように修正。
+ * src/inc.c: inc_account_mail(): 受信サーバが指定されていない場合、
+ 何もしないように修正。
+
+2000-04-05
+
+ * version 0.2.9
+
+ * src/addressbook.c: アドレス帳の機能をほぼ実装。
+
+2000-04-04
+
+ * src/compose.c: `ファイル->ファイルを挿入' が2回以上選択された時に
+ セグメンテーションフォールトを起こすバグを修正。
+
+2000-04-03
+
+ * version 0.2.9pre4
+
+ * src/addressbook.[ch]: 新規フォルダとグループの作成を実装、そして
+ フォルダとグループの削除を実装。指定されたオブジェクトを再帰的に
+ 削除する addressbook_delete_object() を全て実装。
+
+2000-04-02
+
+ * src/addressbook.c: アドレスの登録と、メッセージ作成の
+ アドレスのエントリへの複数回の追加を実装。
+ * src/menu.[ch]: 全てのメニューの項目をインセンシティブにする関数
+ menu_set_insensitive_all() を追加。
+ * src/folderview.c: 少しコードを整理。
+
+2000-04-01
+
+ * src/account.c
+ src/prefs_common.c: CList の行数を得るときのバグを修正。
+
+2000-03-30
+
+ * version 0.2.9pre3
+
+ * src/folderview.c: 最初の操作でツリーが開閉されたときに警告を
+ 引き起こすバグを修正。
+
+2000-03-29
+
+ * src/addressbook.c: addressbook_list_selected(): 複数のアドレスを
+ 扱えるようにした。
+ * src/compose.c: Bcc: が切り替えられたとき、対応するアドレス帳も
+ それを切り替えるように修正。
+ * src/mainwindow.c:
+ main_window_create(): ウィンドウのちらつきを起こさないように
+ gtk_widget_set_uposition() を gtk_widget_show() の前に移動した。
+ main_window_get_position(): 正しいウィンドウの位置を得るために
+ gdk_window_get_position() を gdk_window_get_root_origin() で
+ 置き換えた(これらの修正に関して shigeri さんに感謝)。
+
+2000-03-27
+
+ * src/filesel.c: 最初に呼び出される時はホームディレクトリを選択する
+ ようにした。
+
+2000-03-26
+
+ * src/utils.c: conv_mb_alnum(): キャラクタ変換テーブルを使用する
+ ように修正。
+ * src/foldersel.c: ダイアログが表示されたときにフォルダツリーが
+ フォーカスされるようにした。
+
+2000-03-26
+
+ * version 0.2.9pre2
+
+ * src/addressbook.c: addressbook_export_to_file() と関連する関数を
+ 実装。
+
+2000-03-25
+
+ * src/xml.[ch]
+ src/addressbook.c: アトリビュート用の変数名を修正。
+ * src/prefs_common.[ch]: メンバ `conv_mb_alnum' を追加。
+ * src/utils.[ch]: マルチバイトの英数字をシングルバイトのそれに変換
+ する conv_mb_alnum() を追加。
+ * src/messageview.c: messageview_show(): conv_mb_alnum フラグが立って
+ いれば conv_mb_alnum() を通すようにした。
+
+2000-03-25
+
+ * version 0.2.9pre1
+
+ * src/compose.c: Addressbook が Compose によって開かれてその Compose
+ が閉じられるとき、Addressbook の対象をリセットするように修正。
+ * src/addressbook.c: Compose と連携するようにした。
+
+2000-03-24
+
+ * configure.in: AM_PATH_{GLIB, GTK}: 要求される GTK+ と GLIB の
+ バージョンを 1.2.6 に上げた。
+ * src/xml.[ch]: XML パーサをさらに実装。
+ * src/addressbook.c: アドレス帳の解析と表示を行うルーチンを実装。
+
+2000-03-21
+
+ * src/folderview.c: folderview_scan_folder(): フォルダのメッセージ数
+ が0なら、新着、未読、そして総数を0にするように修正。
+
+2000-03-20
+
+ * src/xml.[ch]: アドレス帳が使用する XML の操作のために追加。
+ * src/folderview.c: スペースキーで自動的に未読フォルダが選択
+ されるときに、ごみ箱フォルダをスキップするように修正。
+
+2000-03-18
+
+ * src/summaryview.c: ニュースグループが選択されたときにカーソルが
+ 永久に時計になってしまうバグを修正。
+
+2000-03-18
+
+ * version 0.2.8
+
+2000-03-17
+
+ * src/mainwindow.[ch]: カーソルのタイプの設定時のカウントを実装。
+ `スレッド表示' と `スレッド解除' のメニューを修正。
+ * src/summaryview.c: フォルダのオープン時のスレッドの切替ができる
+ ようにした。
+ * src/prefs_common.[ch]: フォルダのオープン時にサマリビューが
+ スレッドを構築するかどうかを決定するメンバ `enable_thread' を
+ 追加。
+
+2000-03-15
+
+ * src/summaryview.c: ポップアップのセンシティビティの関数を少し
+ 修正。
+
+2000-03-13
+
+ * version 0.2.7
+
+ * src/addressbook.[ch]: アドレス帳のインタフェースをさらに実装。
+ * src/compose.c: アドレス帳のオブジェクトに接続。
+ * src/folderview.[ch]: folderview_compare_path():
+ 絶対パスが正しく比較されるように修正。
+ folderview_select_node() を追加。
+ 要求されたときにサマリを更新するように folderview_scan_folder()
+ を修正。
+ * src/import.c: mbox を取り込んだときにフォルダツリーを更新
+ するようにした。
+ * src/summaryview.c: folderview.c の変更に従って修正。
+ 元のフォルダが移動先と同一なら警告ダイアログを表示するように修正。
+ 状況に応じてポップアップメニューのセンシティビティを設定する
+ summary_set_popup_sensitive() を追加。そしてサマリがクリアされた
+ ときにポップアップメニューの全ての項目をインセンシティブにする
+ ようにした。
+ * src/procmsg.c: procmsg_move_messages_with_dest():
+ 元のフォルダが移動先と同一なら処理を中断するように変更。
+ * src/summary_search.c
+ src/manage_window.c: 警告ダイアログが2回現れたときにコンソールに
+ 警告が表示されないように修正。
+ * src/filesel.c: ファイル選択ダイアログを一時ウィンドウにした。
+
+2000-03-11
+
+ * src/manage_window.[ch]: コールバック関数 manage_window_focus_out()
+ を追加。
+ * src/account.c
+ src/inputdialog.c
+ src/mainwindow.c
+ src/prefs_account.c
+ src/prefs_common.c
+ src/summary_search.c: focus_out_event シグナルハンドラを追加。
+ * src/addressbook.[ch]: 仮のアドレス帳のコードを追加。
+
+2000-03-06
+
+ * src/utils.h: alloca() を行い、また例外を処理するマクロ Xalloca() を
+ 追加。
+ * src/import.c: インポートダイアログを一時ウィンドウにし、エスケープ
+ キーでキャンセルできるようにした。
+
+2000-03-04
+
+ * version 0.2.6
+
+ * src/compose.c: メッセージ作成ウィンドウを閉じたときにメモリ
+ リークを起こすバグを修正。
+
+2000-03-03
+
+ * src/nntp.h: 長すぎる XOVER 文字列のために NNTP メッセージの
+ バッファサイズを増やした。
+
+2000-02-28
+
+ * src/summaryview.c: step-forward と step-backward を Control-n と
+ Control-p のそれぞれにバインドした。
+ * src/filter.c: filter_read_str(): メモリリークのバグを修正し、
+ バッファを確保する g_malloc() を alloca() で置き換えた。
+ * src/procheader.c: procheader_get_fromname(),
+ procheader_date_get_localtime()
+ src/utils.c: conv_euctojis(): g_malloc() を alloca() で置き換えた。
+ src/compose.c: compose_quote_parse_fmt()
+ src/prefs.c: prefs_set_data_from_text()
+ prefs_set_text(): g_malloc() を alloca() で置き換えた。
+
+2000-02-26
+
+ * version 0.2.5
+
+ * src/logwindow.c: 警告、エラーとメッセージを異なる色で表示する
+ ように log_window_append() を改良。
+ * src/utils.[ch]: 関数 log_message(), log_warning(), log_error()
+ を追加。それぞれ通常のメッセージ、警告、エラーを表示。
+ そして多数の警告メッセージをこれらを使うように修正。
+ * src/messageview.c: messageview_init(): 色の割り当てに失敗した
+ ときに引用と URI の色を黒に設定するようにした。
+ * src/news.c: news_parse_xover(): バッファを確保する g_malloc()
+ を alloca() で置き換えた。
+
+2000-02-25
+
+ * src/folderview.c: 以前に選択されたフォルダ名をテキストエントリに
+ 表示しないバグを修正。それに加えて、幾つかの修正を行った。
+
+2000-02-24
+
+ * version 0.2.4
+
+ * src/logwindow.[ch]: プロトコルログを表示するログウィンドウを
+ 追加。
+ * src/about.c: ダイアログのサイズを微調整。
+ * src/folderview.c: ダブルクリックしたときにフォルダを選択する
+ ようにした。
+
+2000-02-23
+
+ * src/prefs_common.[ch]: `From:' や `Subject:' のようなヘッダの
+ 項目を翻訳するかどうかを決める項目 `translate_header' を追加。
+ * src/compose.c: 宛先が入力されていない場合に警告ダイアログを
+ 表示するようにした。
+ * src/inc.c: 少しコードを整理。
+
+2000-02-22
+
+ * version 0.2.3
+
+ * src/compose.c: ヘッダのエントリが入力されたときに、その
+ フォーカスを次のエントリまたはテキストウィジェットに移動する
+ ようにした。メニューの項目を整理。
+ * src/mainwindow.[ch]
+ src/prefs_common.[ch]
+ src/main.c: 終了時にウィジェットのサイズとウィンドウの位置を
+ 保存するようにした。
+ * src/prefs_common.c: a14, k14 フォントセットをデフォルトの
+ メッセージフォントとして指定。
+ * src/about.c: about ダイアログの外観をテキストウィジェット等を
+ 使用して変更。
+ * src/recv.c: エスケープされた From_ 行を変換するように recv_write()
+ を修正。
+
+2000-02-20
+
+ * version 0.2.2
+
+ * src/compose.[ch]: Bcc に対応。
+
+2000-02-19
+
+ * version 0.2.1
+
+ * src/utils.[ch]: 文字列を調べて、数字列ならその値を返す関数
+ to_number() を追加。
+ * src/procmsg.c: 数字以外の文字がファイル名に含まれていた場合に
+ 誤動作を起こすバグを修正。
+
+2000-02-18
+
+ * version 0.2.0
+
+ * src/folderview.c: 開いているフォルダノードを削除したときに
+ segmentation fault を起こすバグを修正(平松さん thanks)。
+ そして、ニュースサーバを削除する folderview_rm_server_cb() を実装。
+ * src/mbox.c: 警告メッセージを修正。
+
+2000-02-13
+
+ * version 0.2.0alpha-pre8
+
+ * src/mainwindow.c: inc_all_account_mail_cb(): 現在のフォルダが
+ 更新されたときの問題を避けるために、受信箱を選択させるようにした。
+ * src/summaryview.c: summary_execute(): 実行されたときにサマリ
+ キャッシュに書き込むようにした。
+
+2000-02-12
+
+ * version 0.2.0alpha-pre7
+
+ * src/utils.[ch]: 末尾のディレクトリセパレータを無視して二つの
+ パスを比較する path_cmp() を追加。
+ * src/folderview.[ch]
+ src/summaryview.[ch]: メッセージを移動または削除したときに
+ フォルダツリーが行進されるように修正。
+ * src/inc.c: 少しコードを整理。
+
+2000-02-11
+
+ * version 0.2.0alpha-pre6
+
+ * src/utils.[ch]: ドメイン名を静的な文字列として返す
+ get_domain_name() を追加。
+ * src/compose.c: compose_generate_msgid(): 現在のアドレスが '@' を
+ 含まなくてもまともなメッセージ ID を生成するように修正。
+ * src/send.c: 少しコードを整理。
+
+2000-02-10
+
+ * src/folderview.c: フォルダが右クリックされたときのフォルダツリーの
+ 挙動を修正。
+ * src/compose.c: compose_encode_header(): 適当なバッファオーバーラン
+ チェックを追加。
+
+2000-02-09
+
+ * version 0.2.0alpha-pre5
+
+ * gettext と libtool を更新。
+ * configure.in: メッセージカタログが正しいディレクトリにインストール
+ されるように localedir の定義を修正。
+ * src/folderview.c
+ src/mainwindow.c: 現在開かれているフォルダでも開くことができる
+ ように修正。
+ * src/prefs_common.[ch]
+ src/messageview.c: メッセージの色を切り替えるオプションを追加。
+
+2000-02-08
+
+ * version 0.2.0alpha-pre4
+
+ * src/mainwindow.c
+ src/messageview.c: 色を確保する時にメモリを破壊していたバグを修正。
+
+2000-02-07
+
+ * src/folderview.c: フォルダ選択時のバグを幾つか修正。
+
+2000-02-07
+
+ * version 0.2.0alpha-pre3
+
+ * src/folderview.c
+ * src/summaryview.[ch]: 多少コードを整理。
+ * src/messageview.c: 色の割り当てのバグを修正(多分)。
+
+2000-02-06
+
+ * version 0.2.0alpha-pre2
+
+ * src/folderview.[ch]: リターンキーまたはスペースキーが押されるか、
+ マウスのボタン1か2によるクリック以外では、フォルダビューで
+ 選択されたフォルダを開かないようにした。
+ * src/inc.c: 多少コードを整理。
+ * TODO.jp: 項目を増やした。
+
+2000-02-05
+
+ * version 0.2.0alpha-pre1
+
+ * src/summaryview.[ch]: 重複メッセージを削除したときにサマリの
+ スレッドを壊すバグを修正(BONAIM さん thanks)。一部コードの整理。
+ * src/procmsg.[ch]: procmsg_move_messages() を
+ procmsg_move_messages_with_dest() に名称変更し、前者を行先を
+ 指定しない新しい関数で置き換えた。
+ * src/prefs_common.c
+ src/gtkutils.c: 連結リストのメモリリークを修正。
+ * src/utils.[ch]: 双方向連結リストの全要素を削除する
+ list_remove_all() を追加。
+ * src/inc.[ch]: 全アカウントの新着メッセージを受信する
+ inc_all_account_mail() を追加。
+ * src/account.[ch]: アカウントをそれぞれ処理するために
+ account_foreach() を追加。
+ * TODO.jp を追加。
+
+2000-02-04
+
+ * version 0.1.23alpha
+
+ * src/inc.c: 新着メッセージを受信した時にフォルダツリーのメッセージ
+ 数を更新するようにした。
+ * src/folderview.[ch]: フォルダ名を指定してフォルダビューの一つの
+ フォルダをスキャンする関数 folderview_scan_folder() を追加。
+
+2000-02-02
+
+ * version 0.1.22alpha
+
+ * src/prefs_account.[ch]: 受信時振り分けの設定を追加。
+ * src/inc.c: 受信時の振り分けに対応。
+ * src/procmsg.c; コードを整理。
+ * src/news.c: xover の取得に失敗したときに固まるバグを修正。
+ * src/compose.c: 特定のフォルダに入るメッセージのマークを解除
+ するようにした。
+
+2000-02-01
+
+ * version 0.1.21alpha
+
+ * src/folderview.c
+ src/summaryview.c: 「未読メッセージが見つからなかった場合、次の
+ フォルダに移動する」機能を実装。
+ * src/summaryview.c: ニュースサーバへの接続中に接続の状態を
+ ステータスバーに表示するようにした。
+ * src/compose.c: X-Mailer: ヘッダフィールドの文字列を少し変更。
+ * src/prefs_common.c: 振り分けの残りの機能を実装。
+
+2000-01-31
+
+ * version 0.1.20alpha
+
+ * src/prefs_common.c: 振り分け設定の読み込み/書き出し/登録/削除を
+ 実装。
+ * src/mainwindow.c: ステータスバーの外観を少し変更。
+ * src/account.c: account_delete(): アカウントが削除されたときに
+ GList へのポインタを代入しないバグを修正。
+
+2000-01-29
+
+ * src/procmsg.c: procmsg_get_mark_sum(): マークファイルの読み込み
+ に失敗するバグを修正(BONAIM さん thanks)。
+ * src/prefs_common.c: 振り分け設定のインタフェースを追加。
+
+2000-01-28
+
+ * src/summaryview.c: 左クリックで未読記事を表示するときにマークの
+ 表示が正しく更新されないバグを修正(shigeri さん thanks)。
+
+2000-01-27
+
+ * src/summaryview.[ch]: 振り分け用の関数を追加。
+ * src/about.c: ウィンドウを閉じるボタンを追加。
+ * src/news.c: 取得するヘッダの数を制限するようにした。
+
+2000-01-26
+
+ * src/procmsg.c: news フラグを正しく加えないバグを修正。
+ * src/compose.c: ニュース記事に返信できないバグを修正。
+ * src/filter.[ch]: メッセージのフィルタリング用に追加。
+ * src/procheader.[ch]: フィルタ処理のために
+ procheader_get_unfolded_line() を追加。そして、メッセージの
+ ヘッダを読み込んでメモリに格納する procheader_get_header_list()
+ を追加し、 procheader_get_header_list() によって読み込まれた
+ 全てのヘッダを削除する procheader_header_list_destroy() を追加した。
+
+2000-01-25
+
+ * version 0.1.19alpha
+
+ * src/news.c: キャッシュされていない概要情報だけを取得するように
+ 修正。
+ * src/procmsg.[ch]: ニュース操作用に修正。
+
+2000-01-24
+
+ * src/news.c: xover に対応。
+ * src/mbox.c: 空行を正しく扱えなかったバグを修正(shigeri さん
+ thanks)。
+
+2000-01-23
+
+ * version 0.1.18alpha
+
+ * src/procmsg.[ch]: ニュースフォルダを扱えるように幾つかの関数を
+ 修正。
+ * src/news.c: ヘッダのキャッシュルーチンを追加。
+ * src/procheader.c: ヘッダが重複していた場合にメモリリークを起こす
+ バグを修正。解析するヘッダに Newsgroups: を追加。
+ * src/summaryview.c: ニュース記事のキャッシュルーチンを追加。
+ * src/compose.c: ニュース記事に返信/転送できるようにした。
+
+2000-01-22
+
+ * src/compose.c: カンマがダブルクォーテーションの中に含まれていた
+ 場合に To: ヘッダの解析に失敗するバグを修正(shigeri さん thanks)。
+ * src/mbox.c: エスケープされていない From_ 行を正しく扱えるように
+ mbox ファイル処理のコードを修正。
+
+2000-01-21
+
+ * version 0.1.17alpha
+
+ * src/foldersel.c: フォルダツリーが表示されないバグを修正。
+ ニュースサーバとグループの設定を保存するルーチンを追加。
+
+2000-01-20
+
+ * version 0.1.16alpha
+
+ * src/statusbar.[ch]: statusbar_puts_all() を追加。
+ statusbar_puts(): 長すぎる文字列を切り詰めるようにした。
+ * src/folderview.[ch]: CTree の行データを文字列から FolderInfo
+ 構造体に変更。
+ そしてニュースサーバとグループを登録するポップアップメニューを
+ 実装。
+ * src/messageview.c: 短縮ヘッダ表示ルーチンを修正。
+
+2000-01-19
+
+ * NetNews のセッション管理用に src/news.[ch] を追加。
+ * src/summaryview.[ch]: NetNews を読むためのコードを追加。
+
+2000-01-18
+
+ * src/mainwindow.c
+ src/prefs_common.[ch]: ツールバーのスタイルを保存するようにした。
+ * src/main.c: 終了前に設定を保存するようにした。
+ * src/summaryview.c: サマリステータス表示ルーチンを修正。
+ * 低レベル NNTP セッションの処理のために src/nntp.[ch] を追加。
+
+2000-01-17
+
+ * 進行状況を表示する src/progress.[ch] を追加。
+ * src/inc.c: src/progress.[ch] を使用するようにプログレスダイアログ
+ ルーチンを修正。
+ * src/folderview.[ch]: 準備段階の NetNews 対応コードを追加。
+
+2000-01-16
+
+ * version 0.1.15alpha
+
+ * src/main.c
+ src/folderview.c: 幾つかパーミッションの修正。
+ * src/folderview.c: フォルダの作成/リネーム/削除を実装。
+ * src/utils.[ch]: ディレクトリを再帰的に削除する
+ remove_dir_recursive() を追加。
+
+2000-01-15
+
+ * src/mainwindow.[ch]: ツールバーの表示形式の選択を追加。
+ * ユーザに文字列を入力させるために src/inputdialog.[ch] を追加。
+ * src/summaryview.[ch]: 通常モード時のビューの挙動を変更。
+ * src/mbox.c: lockf() が使用されたときにファイルをロックできない
+ バグを修正 (shigeri さん thanks)。
+
+2000-01-14
+
+ * version 0.1.14alpha
+
+ * src/mainwindow.[ch]: ツールバーの外観を変更。ウィンドウ操作を修正。
+ * src/summaryview.c: ステータスバーに表示されるメッセージを変更。
+ * src/compose.[ch]: ツールバーを追加。
+ * src/*.xpm: gnome-libs からアイコンをいくつか拝借した(仮)。
+
+2000-01-13
+
+ * version 0.1.13alpha
+
+ * src/summaryview.c: スレッド化のバグを修正。コードの整理。
+ 重複メッセージ削除ルーチンをハッシュテーブルを使って書き換えた。
+ * src/mainwindow.[ch]: ツールバーを追加。
+
+2000-01-12
+
+ * version 0.1.12alpha
+
+ * src/summary_search.c: もし OS に wcsstr() がない場合、 wcswcs()
+ を代わりに使うようにした。
+ * src/summaryview.c: 高速化のため、その場でスレッドを作成するように
+ CTree 生成ルーチンを変更した。
+ * src/procmsg.c: 高速化のためにメッセージ処理ルーチンをハッシュ
+ テーブルを使って書き換えた。以前よりかなり速くなってる筈。
+
+2000-01-11
+
+ * version 0.1.11alpha
+
+ * po/ja.po: msgstr を Solaris の標準 gettext のために修正。
+ * src/main.c: config.h の include を追加。
+ * src/compose.c: もし返信されたメッセージに References ヘッダが
+ ない場合、In-Reply-To のメッセージ ID を References ヘッダに
+ 加えるように変更した。
+ * src/summaryview.c: 高速化のためにスレッド化ルーチンをハッシュ
+ テーブルを使用するように変更した。
+
+2000-01-11
+
+ * version 0.1.10alpha
+
+ * po/ja.po: Solaris でコアダンプしないように msgstr を修正。
+ * src/main.c: locale.h の include を追加。
+ (以上 Sato さんありがとうございます。)
+ * src/mbox.c
+ * src/socket.c: shigeri さんの Solaris パッチを多少修正して
+ 追加。(感謝!)
+
+2000-01-10
+
+ * version 0.1.9alpha
+
+ * src/compose.c: compose_encode_header(): いくつかバグを修正。
+ References ヘッダに正しく対応するようにヘッダ生成ルーチンを
+ 修正。Organization ヘッダに対応。
+ * src/procmsg.[ch]
+ src/procheader.c: キャッシュデータから Cc: と Reply-To: を除いた。
+ * src/procheader.[ch]: ヘッダリスト構造体の名称を HeaderEntry に変更。
+ * src/summaryview.c: summary_thread_func(): 少し最適化。
+ 他のウィジェットからキーイベントを渡すために
+ summary_pass_key_press_event() を追加。
+ * src/messageview.c: messageview_key_pressed(): メッセージビューが
+ 分離されていてもキーイベントがサマリビューに渡されるように
+ 修正した。(わかい@電通大 さんご指摘ありがとうございます。)
+
+2000-01-09
+
+ * version 0.1.8alpha
+
+ * src/compose.c: RFC1522, RFC2047 に(大体)準拠したヘッダの MIME
+ エンコーディングを実装。
+ * src/procheader.c: 折り返したヘッダ行の処理のバグをいくつか修正。
+ * src/headerview.c: headerview_show(): いくつかバグフィックス。
+
+2000-01-07
+
+ * version 0.1.7alpha
+
+ * src/utils.c: conv_euctojis(): 入力文字列が漢字で終わっていた
+ ときに漢字アウトシーケンス [ \033 ( B ] が付加されないバグを
+ 修正。(Nozomu Kobayashi さんご指摘ありがとうございます。)
+ * src/compose.c: compose_encode_header(): エンコードした文字列を
+ 別のバッファに出力するように変更した。
+ 送信したメッセージを送信控に保存する機能と、送信に失敗した
+ メッセージを送信待ちに入れる機能(仮)を実装した。
+ そして、やっとちゃんとした To: と Cc: の処理を実装 :)
+ * src/folderview.c: フォルダ操作のための仮の右クリックポップアップ
+ メニューを追加。
+ * ファイル作成/コピー時のパーミッションをいくつか修正。
+
+2000-01-07
+
+ * version 0.1.6alpha
+
+ * src/procheader.c: ヘッダのリストをヌルターミネートしていず、
+ segmentation fault を起こすバグを修正。
+
+2000-01-06
+
+ * version 0.1.5alpha
+
+ * src/procheader.[ch]: 関数 procheader_get_one_field() を追加。
+ この関数はヘッダのリストにマッチする1つのヘッダフィールドを得る。
+ そしてあまり汎用性のない procheader_get_unfolded_line() を削除し、
+ procheader_get_header_fields() を procheader_get_one_field() を
+ 使って書き換えた。
+ * src/summaryview.c: キー入力判定ルーチンをいくつかバグフィックス。
+ * README, README.jp: ドキュメントを少し修正。
+
+2000-01-05
+
+ * src/menu.c: menu_set_sensitive(): メニューアイテムがサブメニューを
+ 持っていたとき、アイテムでなくサブメニューのセンシティビティを
+ 切り替えてしまうバグを修正。
+
+2000-01-05
+
+ * version 0.1.4alpha
+
+ * src/summaryview.c: 空のサマリビューを中央クリックしたときに
+ segmentation fault を起こすバグを修正。
+ 未読マークを付けたときに移動するフォルダの文字列を解放してしまう
+ バグを修正。
+ 現在のフォルダがごみ箱のときはメッセージを削除しないようにした。
+ * src/summaryview.[ch]
+ * src/mainwindow.c
+ * src/procmsg.[ch]: キャッシュ更新モードを加えた(以前のキャッシュを
+ 破棄する)。
+
+2000-01-04
+
+ * src/procheader.c: ヘッダ処理ルーチンをさらに最適化。
+ 新たに関数 procheader_get_header_fields() を加えた。
+ この関数はヘッダ名の配列を引数として受け取り、ヘッダの内容を
+ セットする。
+
+2000-01-03
+
+ * src/compose.c: メッセージ本文が ascii 文字のみの場合、
+ Content-Type の charset として US-ASCII を指定するようにした。
+ * src/main.[ch]
+ * src/prefs.c
+ * src/prefs_common.c
+ * src/prefs_account.c
+ * src/account.c: 設定ファイルの位置を変更。
+ * src/account.c: ESCキーを押したときにウィンドウを閉じられるように
+ した。
+
+2000-01-02
+
+ * version 0.1.3alpha
+
+ * src/compose.c: 送信が失敗したときに segmentation fault を
+ 引き起こすバグを修正。
+ src/send.c からヘッダ生成ルーチンを移動した。
+ * src/send.c: ヘッダ生成ルーチンを src/compose.c に移動した。
+ * src/prefs.c: '~' をホームディレクトリに展開するようにした。
+ * src/prefs_account.[ch]: 署名ファイルパスの設定を追加。
+ * src/prefs_common.[ch]: スプールパスの設定を追加。
+ * src/inc.c: ユーザ名の取得方法を g_get_user_name() を使用する
+ ように変更した。
+
+2000-01-01
+
+ * version 0.1.2alpha
+
+ * ChangeLog, ChangeLog.jp (このファイル) を加えた。
+ * 少しコードを整理。
+ * 一時ウィンドウの管理のために manage_window.[ch] を追加。
+ * src/procheader.c: ヘッダ処理ルーチンを少し最適化。
+ * src/send.c: 接続時の例外処理を修正。
+ * src/inc.c: ユーザ名の取得時の例外処理を追加。
+
+2000-01-01
+
+ * version 0.1.1alpha
+
+ * src/send.c: Content-Type: ヘッダを付加しないバグを修正。
+
+2000-01-01
+
+ * version 0.1.0alpha
+
+ * 最初のリリース。
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 00000000..efc05716
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,141 @@
+Installation
+============
+
+This program requires GTK+ 1.2.6 or higher to be compiled.
+
+This program is developed on Debian GNU/Linux (woody/sid)
+(Linux 2.4.x + glibc 2.2), so it is possible not to work correctly
+on the other environment.
+
+It is confirmed to work on the following environments:
+
+Linux
+
+o Debian GNU/Linux (i386/sid) (glibc 2.3.2) (development environment)
+o Debian GNU/Linux (amd64/sid-based) (glibc 2.3.2) (development environment #2)
+o Debian GNU/Linux 3.0 (woody) (glibc 2.2.5)
+o Debian GNU/Linux 2.2 (potato) (glibc 2.1.3)
+o Fedora Core 2 / 3
+o RedHat Linux 5.2 (glibc 2.0.7)
+o RedHat Linux 6.0
+o RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x)
+o RedHat Linux 6.2 / 6.2J (glibc 2.1.x)
+o RedHat Linux 7.0 / 7.0J / 7.1 / 7.2 / 7.3 / 8.0 / 9.0
+o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs)
+o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC)
+o Vine Linux 2.1 / 2.1.5 / 2.5 / 2.6 / 3.0
+o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
+o TurboLinux 6.0 (glibc 2.1.2)
+o TurboLinux 7.0 (glibc 2.2.x)
+o Miracle Linux Standard Edition Version1.0
+o Miracle Linux for PostgreSQL Version1.0
+o Miracle Linux for Samba Version1.0
+o Laser5 Linux 6.0 / 6.2 / 6.4 (glibc 2.1.x)
+o Kondara MNU/Linux 1.0 (glibc 2.1.x) / 1.2 / 2.0
+o LinuxPPC2000 + Yukikaze(Japanization kit)
+o Linux2000G (Intel / PPC)
+o HOLON Linux 2.0 (Intel / PPC)
+o Linux for PPC Japanese Edition 2.0 (glibc 2.1.x)
+o Linux for PPC Japanese Edition 3.0 (glibc 2.1.x)
+o LinuxPPC Q4 2000 (glibc 2.1.x)
+o Linux MLD4/5
+o Plamo Linux 2.0 / 2.1 / 2.2.x / 3.0
+o Slackware 7.0 / 7.1 / 8.0 / 8.1 / 9.0 / 10.0
+o Mandrake Linux 7.0 / 7.1 / 7.2 / 8.0 / 8.1 / 9.0 / 9.1 / 10.0
+o SuSE Linux 6.3 (glibc 2.1.2) / 6.4
+o SuSE Linux 7.0 / 7.1 / 7.2 / 7.3 / 8.0 / 8.1 / 8.2
+o OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3)
+o Caldera OpenDesktop 2.4
+o Caldera Workstation 3.1
+o Conectiva Linux 4.0 / 5.0 / 7.0 / 8.0
+o Vector Linux 1.5
+o Yellow Dog Linux 2.0 (glibc 2.2.1)
+o Yellow Dog Linux 2.1 (PowerPC)
+o ASP Linux 7.2 (glibc 2.2.4)
+o Redmond Linux (Lycoris)
+o Gentoo Linux 1.x / 2004.2 (i386 / amd64)
+
+BSD
+
+o FreeBSD 3.2/3.4-RELEASE
+o FreeBSD 4.0/4.1/4.2/4.3/4.4/4.5/4.6-RELEASE
+o FreeBSD 5.3-RELEASE
+o FreeBSD 5.0-CURRENT
+o NetBSD 1.4.2
+o NetBSD 1.5 + XPG4DL
+o NetBSD 1.5.1 / 1.5.2
+o OpenBSD 2.7 / 2.8 / 2.9 / 3.0 / 3.1 / 3.6
+o BSD/OS 4.0.1
+
+Other commercial Unix
+
+o Solaris 2.5 / 2.5.1 / 2.6
+o Solaris 7 / 8 / 9
+o AIX 4.3.3
+o IRIX 6.3 / 6.4 / 6.5 6.5.8m
+o HP-UX 10.20 / 11.0 / 11i
+o Tru64 Unix 5.0 (OSF1 V5.0)
+o Mac OS X 10.1.4 (Darwin 5.4) + XDarwin (without XLocale support) + libxpg4
+o Mac OS X 10.2.3 (Darwin 6.3) + Apple X11 PublicBeta 0.1 + XLocale fix patch
+o Mac OS X 10.3 + X11 for Mac OS X
+
+Others
+
+o Windows (MSVC + GTK+ for win32) (in progress)
+
+Build it
+========
+
+Please make sure that gtk-devel and glib-devel (or similar) packages are
+installed before the compilation (you may also require flex (lex) and bison
+(yacc)).
+
+To compile and install, just type:
+
+% ./configure
+% make
+% su
+Password: [Enter password]
+# make install
+
+Additional libraries
+====================
+
+It is recommend to install gdk-pixbuf or gdk_imlib library before installing
+Sylpheed for built-in image view support, and compface library for X-Face
+support.
+
+You can get compface utilities and library from the following location:
+
+ http://freshmeat.net/projects/compface/
+
+Sylpheed supports US-ASCII, ISO-8859-1, and EUC-JP by default.
+If your system supports iconv() API, other character set / encoding
+(such as UTF-8, KOI8-R, and GB2312) will be also supported.
+
+GnuPG (>= 1.2.0) and GPGME (>= 0.3.10) are required for GnuPG (PGP) support
+(GPGME 0.4.x is not supported yet).
+
+You can get GnuPG and GPGME from the following location:
+
+ ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/
+ ftp://ftp.gnupg.org/pub/gcrypt/gnupg/
+
+Options for configure script
+============================
+
+ --disable-compface disable compface (X-Face) support
+ --disable-ipv6 disable IPv6 support
+ --enable-ssl SSL support (requires OpenSSL)
+ --enable-gpgme GnuPG support (requires GPGME and GnuPG)
+ --enable-ldap LDAP support
+ --enable-jpilot JPilot support
+
+For other options, refer to ./configure --help .
+
+
+If the installation of Sylpheed failed, check whether all the required
+libraries are correctly installed. If it still failed, please send bug
+report to:
+
+ Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
diff --git a/INSTALL.jp b/INSTALL.jp
new file mode 100644
index 00000000..4d68dc2e
--- /dev/null
+++ b/INSTALL.jp
@@ -0,0 +1,141 @@
+インストール方法
+================
+
+このプログラムをコンパイルするには GTK+ 1.2.6 以降が必要です。
+
+このプログラムは Debian GNU/Linux (woody/sid) (Linux 2.4.x + glibc 2.2.x)
+上で開発されているため、他の環境ではうまく動作しない可能性があります。
+
+以下の環境で動作が確認されています:
+
+Linux
+
+o Debian GNU/Linux (i386/sid) (glibc 2.3.2) (開発環境)
+o Debian GNU/Linux (amd64/sid-based) (glibc 2.3.2) (開発環境 #2)
+o Debian GNU/Linux 3.0 (woody) (glibc 2.2.5)
+o Debian GNU/Linux 2.2 (potato) (glibc 2.1.3)
+o Fedora Core 2 / 3
+o RedHat Linux 5.2 (glibc 2.0.7)
+o RedHat Linux 6.0
+o RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x)
+o RedHat Linux 6.2 / 6.2J (glibc 2.1.x)
+o RedHat Linux 7.0 / 7.0J / 7.1 / 7.2 / 7.3 / 8.0 / 9.0
+o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs)
+o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC)
+o Vine Linux 2.1 / 2.1.5 / 2.5 / 2.6 / 3.0
+o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
+o TurboLinux 6.0 (glibc 2.1.2)
+o TurboLinux 7.0 (glibc 2.2.x)
+o Miracle Linux Standard Edition Version1.0
+o Miracle Linux for PostgreSQL Version1.0
+o Miracle Linux for Samba Version1.0
+o Laser5 Linux 6.0 / 6.2 / 6.4 (glibc 2.1.x)
+o Kondara MNU/Linux 1.0 (glibc 2.1.x) / 1.2 / 2.0
+o LinuxPPC2000 + 雪風(日本語化 kit)
+o Linux2000G (Intel / PPC)
+o HOLON Linux 2.0 (Intel / PPC)
+o Linux for PPC Japanese Edition 2.0 (glibc 2.1.x)
+o Linux for PPC Japanese Edition 3.0 (glibc 2.1.x)
+o LinuxPPC Q4 2000 (glibc 2.1.x)
+o Linux MLD4/5
+o Plamo Linux 2.0 / 2.1 / 2.2.x / 3.0
+o Slackware 7.0 / 7.1 / 8.0 / 8.1 / 9.0 / 10.0
+o Mandrake Linux 7.0 / 7.1 / 7.2 / 8.0 / 8.1 / 9.0 / 9.1 / 10.0
+o SuSE Linux 6.3 (glibc 2.1.2) / 6.4
+o SuSE Linux 7.0 / 7.1 / 7.2 / 7.3 / 8.0 / 8.1 / 8.2
+o OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3)
+o Caldera OpenDesktop 2.4
+o Caldera Workstation 3.1
+o Conectiva Linux 4.0 / 5.0 / 7.0 / 8.0
+o Vector Linux 1.5
+o Yellow Dog Linux 2.0 (glibc 2.2.1)
+o Yellow Dog Linux 2.1 (PowerPC)
+o ASP Linux 7.2 (glibc 2.2.4)
+o Redmond Linux (Lycoris)
+o Gentoo Linux 1.x / 2004.2 (i386 / amd64)
+
+BSD
+
+o FreeBSD 3.2/3.4-RELEASE
+o FreeBSD 4.0/4.1/4.2/4.3/4.4/4.5/4.6-RELEASE
+o FreeBSD 5.3-RELEASE
+o FreeBSD 5.0-CURRENT
+o NetBSD 1.4.2
+o NetBSD 1.5 + XPG4DL
+o NetBSD 1.5.1
+o NetBSD 1.5.2
+o OpenBSD 2.7 / 2.8 / 2.9 / 3.0 / 3.1 / 3.6
+o BSD/OS 4.0.1
+
+その他商用 Unix
+
+o Solaris 2.5 / 2.5.1 / 2.6
+o Solaris 7 / 8 / 9
+o AIX 4.3.3
+o IRIX 6.3 / 6.4 / 6.5 6.5.8m
+o HP-UX 10.20 / 11.0 / 11i
+o Tru64 Unix 5.0 (OSF1 V5.0)
+o Mac OS X 10.1.4 (Darwin 5.4) + XDarwin (XLocale 無し) + libxpg4
+o Mac OS X 10.2.3 (Darwin 6.3) + Apple X11 PublicBeta 0.1 + XLocale fix patch
+o Mac OS X 10.3 + X11 for Mac OS X
+
+その他
+
+o Windows (MSVC + GTK+ for win32) (開発中)
+
+ビルド
+======
+
+コンパイル前に gtk-devel と glib-devel (あるいは相当する)パッケージが
+インストールされていることを確認してください(flex (lex) と bison (yacc)
+も必要かもしれません)。
+
+コンパイルしてインストールするには、次のように入力してください:
+
+% ./configure
+% make
+% su
+Password: [パスワードを入力]
+# make install
+
+追加ライブラリ
+==============
+
+インストール前に、ビルトイン画像表示対応のために gdk-pixbuf または gdk_imlib
+ライブラリ、そして X-Face 対応のために compface ライブラリをインストールして
+おくことをお勧めします。
+
+compface ユーティリティとライブラリは以下の場所から取得できます:
+
+ http://freshmeat.net/projects/compface/
+
+Sylpheed は標準で US-ASCII, ISO-8859-1, EUC-JP に対応しています。
+システムが iconv() API に対応している場合は、その他の文字集合 /
+符号化方式(UTF-8, KOI8-R, GB2312 等)にも対応します。
+
+GnuPG (PGP)対応を有効にしたい場合は、 GPGME 0.3.10 以降と GnuPG 1.2.0 以降が
+必要です(GPGME 0.4.x はまだサポートされていません)。
+
+GnuPG と GPGME は以下の場所から取得できます:
+
+ ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/
+ ftp://ftp.gnupg.org/pub/gcrypt/gnupg/
+
+configure スクリプトのオプション
+================================
+
+ --disable-compface compface (X-Face)対応を無効にする
+ --disable-ipv6 IPv6 対応を無効にする
+ --enable-ssl SSL 対応 (要 OpenSSL)
+ --enable-gpgme GnuPG 対応 (要 GPGME と GnuPG)
+ --enable-ldap LDAP 対応
+ --enable-jpilot JPilot 対応
+
+その他のオプションについては ./configure --help を参照してください。
+
+
+もし Sylpheed のインストールに失敗したら、必要なライブラリが正しく
+インストールされているかどうか確認してください。それでも駄目な場合、
+バグレポートを以下まで送ってください。
+
+ 山本 博之 / Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 00000000..b2ba8f4d
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,27 @@
+SUBDIRS = ac po intl src manual faq
+
+EXTRA_DIST = config.rpath \
+ ChangeLog.jp \
+ INSTALL.jp \
+ README.jp \
+ TODO.jp \
+ sylpheed.desktop \
+ sylpheed.spec \
+ sylpheed.spec.in \
+ sylpheed.png \
+ sylpheed-128x128.png \
+ sylpheed-64x64.png \
+ autogen.sh
+
+BZIP2_ENV =
+
+release: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ rm -f $(distdir)/sylpheed.spec
+ sed '/^Source:/s/\.tar\.gz$$/\.tar\.bz2/' sylpheed.spec \
+ > $(distdir)/sylpheed.spec
+ BZIP2=$(BZIP2_ENV) $(TAR) --bzip2 -chof $(distdir).tar.bz2 $(distdir)
+ -rm -rf $(distdir)
+
+ACLOCAL_AMFLAGS = -I m4
diff --git a/NEWS b/NEWS
new file mode 100644
index 00000000..6860141e
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,935 @@
+Changes of Sylpheed
+
+* 1.0.0
+
+ * The first official release.
+ * The escaping of special characters in action commands has been
+ modified.
+ * The crash on deleting a remote account has been fixed.
+
+* 1.0.0rc
+
+ * The IMAP4 parser has been fixed for 64-bit platforms.
+ * Users are now asked to switch to online mode when sending in offline.
+ * The line-joining problem of auto-wrapping has been fixed.
+ * Special characters are now properly escaped when executing action
+ commands.
+ * Some compiler warnings have been removed.
+
+* 1.0.0beta4
+
+ * The Japanese manual has been updated.
+ * Some icons have been modified, and unused icons have been removed.
+ * The menu strings have been fixed.
+ * The workaround for invalid CR characters on POP3 has been made.
+
+* 1.0.0beta3
+
+ * The Japanese JPilot address book has been supported.
+ * Back scrolling on Shift/Alt and Space key press has been enabled.
+ * Attached text files are now canonicalized before encoded to BASE64
+ to conform with RFC 2045.
+ * The optimal Content-Transfer-Encoding will be used when attaching
+ text files.
+ * The icons of the receive dialog have been modified.
+ * Mozilla Firefox has become a default web browser.
+ * The auto-expanding status bar has been fixed.
+
+* 1.0.0beta2
+
+ * don't move or delete immediately at local filtering when immediate
+ execution option is off.
+ * 'Empty trash' has been added to the folder context menu.
+ * 'Remove mailbox' has been removed from the folder context menu.
+ * 'File' menu in the main menu has been reorganized.
+ * AND/OR matching option has been added to the summary search dialog.
+ * APOP setting became a separate option for POP3.
+
+* 1.0.0beta1
+
+ * Icons are added to the alert dialog and filter edit dialog.
+ * Cc is added for the parameter of templates.
+ * The menu of composition window has been reorganized.
+ * Gettext has been upgraded to 0.14.1.
+ * Some minor bugs of filtering have been fixed.
+
+* 0.9.99
+
+ * The new filtering system, which has many new features, has been
+ implemented.
+ * The handling of 'New' flags for messages has been modified.
+ * The spool path setting can now take both file and directory.
+ * Invalid URIs used by DnD has been fixed.
+ * Other bugfixes have been made.
+
+* 0.9.12
+
+ * A session timeout for POP3/SMTP has been implemented.
+ * The 'Print' menu on the context menu has been restored.
+ * the value of CACHE_VERSION has been increased to prevent a cache
+ incompatibility problem on some platforms such as FreeBSD.
+
+* 0.9.11
+
+ * The spring-loaded folder has been implemented for the folder view.
+ * A function to filter selected messages has been added.
+ * Always move messages by default when using DnD (copy if Ctrl key is
+ pressed).
+ * On filtering, the matching algorithm of 'not contain' flag has
+ been fixed.
+ * NNTP servers that require authentication at the beginning of the
+ session has been supported.
+ * The method of updating the progress dialog has been modified.
+ * The context menu on the summary view has been cleaned up.
+ * The image viewer has been fixed.
+ * The cache handling has been fixed for AMD64 and other 64-bit platforms.
+ * The SMTP routine has been fixed to fully comply with RFC 2821.
+
+* 0.9.10
+
+ * A new folder can be created on the folder selection dialog now.
+ * The folder view is now updated progressively when receiving.
+ * Statasbar has been added to the message view window.
+ * The built-in image viewer has been improved, and its memory leaks
+ have been fixed.
+ * Ukrainian translation has been added.
+ * Other bugfixes have been made.
+
+* 0.9.9
+
+ * Word wrapping on multibyte locales has been improved.
+ * The receive menu has been improved.
+ * The combo button for toolbar has been implemented.
+ * The download feature for IMAP / News folders has been implemented.
+ * URL is now shown on the toolbar when links are clicked, and put
+ warning in case of fake URL.
+ * JIS X 0201 Kana (hankaku kana) will be converted into JIS X 0208
+ when sending.
+ * Crashes on 64-bit environments has been fixed.
+ * Other bugfixes have been made.
+
+* 0.9.8a
+
+ * The bug that caused the failure of cache data read has been fixed.
+
+* 0.9.8
+
+ * The offline mode has been implemented.
+ * The performance of the scanning of MH folders has been improved on
+ the platforms which support d_type in 'struct dirent'.
+ * The error checking on moving/deleting messages has become strict.
+ * When getting IMAP4 message list, it now fallbacks to FETCH command
+ if server doesn't fully support SEARCH command.
+ * Outbox for accounts are now correctly chosen when sending from queue.
+ * Gettext has been upgraded to 0.12.1.
+ * IPv6 support is now enabled by default.
+ * Other bugfixes have been made.
+
+* 0.9.7
+
+ * The vulnerability in SMTP response handling, which is exploitable by
+ a malicious SMTP server, has been fixed.
+ * The structure of folder system has been sorted out.
+ * The checking of the existence of IMAP root directory has been modified.
+
+* 0.9.6
+
+ * A crash bug when deleting currently opened folder has been fixed.
+ * The performance issue of the address book has been fixed.
+ * The behavior of manual signature insertion has been reverted.
+ * A crash bug on startup when a font can't be loaded has been fixed.
+ * The format of MIME boundary has been modified again.
+ * Other minor bugfixes have been made.
+
+* 0.9.5
+
+ * The size, the position, and the visibility of separated views are now
+ remembered.
+ * The per-folder settings are now preserved even if a folder tree is
+ rebuilt.
+ * The receive dialog's option to display the dialog only on manual
+ receiving has been added.
+ * 'Top' and 'Bottom' button has been added on the filter setting dialog.
+ * The UIDPLUS extension of IMAP4rev1 has been supported.
+ * The folder system has been cleaned up a bit.
+ * The sylpheed.spec file bundled in the source package has been improved.
+ * The format of MIME boundary has been modified.
+ * A memory leak and a buffer overrun have been fixed.
+
+* 0.9.4
+
+ * The performance of the operation of IMAP4 folders, such as move,
+ copy, delete and mark, has been greatly improved.
+ * The contents of IMAP4 folders are now always synchronized with the
+ server.
+ * Message flags are now properly taken over when copying messages into
+ IMAP4 folders from others.
+ * The CRAM-MD5 authentication mechanism has been supported for IMAP4rev1.
+ * Message move, copy and delete are now possible while receiving mails.
+ * The non-blocking SSL can be turned off as a workaround for the
+ connection problem.
+ * The bug that ran into infinite loop if connection was closed by remote
+ host has been fixed.
+ * The configuration files will not be overwritten on startup anymore.
+
+* 0.9.3
+
+ * The network I/O system has been rewritten to use non-blocking I/O,
+ and the performance of POP3 and SMTP has been improved much.
+ * '--status-full' option has been added. '--status' option now takes
+ arguments for folders.
+ * Minor bugfixes have been made.
+
+* 0.9.2
+
+ * The bug that removed messages from server if "Don't receive" action is
+ specified by the filter rule has been fixed.
+ * The bug that caused abort when a button is double-clicked on some
+ dialogs has been fixed.
+ * A warning that was displayed when address book was empty has been fixed.
+
+* 0.9.1
+
+ * The bug in handling folder names which include '+' in IMAP4 modified
+ UTF-7 conversion has been fixed.
+ * The parsing of message/rfc822 parts in multipart messages has been
+ fixed.
+ * Several bugs of auto signature replacement has been fixed.
+ * A bug that didn't hide user string in the Action dialog has been fixed.
+ * Socket I/O timeout interval is now configurable.
+
+* 0.9.0
+
+ * The multi-process network I/O has been implemented for POP3 and SMTP.
+ * The Action feature has been improved.
+ * The automatic signature replacement on account change has been
+ implemented.
+ * Hyperlinks of HTML messages are now correctly handled.
+ * The separated message view now has a menubar.
+ * Original messages' headers are now included as the preset keywords
+ on automatic filter creation.
+ * The verbose error messages are now displayed on POP3 and SMTP.
+ * The lines of the log window is now restricted to reduce the memory
+ usage.
+ * The Shift_JIS locale has been supported.
+ * The internal MIME structure has been cleaned up.
+ * Address names which have special characters are now correctly quoted.
+ * Slovak message catalog has been added.
+ * The header corruption bug on reediting has been fixed.
+ * The bug of UTF-7 encoding conversion has been fixed.
+ * A workaround for unknown timezones has been made.
+ * A workaround for wrapping problem on UTF-8 locale has been made.
+ * More workaround for crashes by illegal characters has been made.
+ * The crash bug in IMAP4 parser has been fixed.
+ * The crash bug of the composition window has been fixed.
+ * The colormap / visual problem on Solaris has been fixed.
+ * Other bugfixes have been made.
+
+* 0.8.11
+
+ * The folder option to remove parentheses and brackets at the beginning
+ of subject has been added.
+ * The option to use command output for signature has been added.
+ * The summary search now also looks for collapsed nodes.
+ * The size of the source window is now remembered.
+ * Euro locales (ISO-8859-15) have been supported.
+ * Many locales and encodings which were not supported before have been
+ added.
+ * Galician translation has been added.
+ * Support for Latin locales (ISO-8859) has been fixed.
+ * UTF-8 locale support has been fixed.
+ * The folding problem of headers has been fixed.
+ * The more workaround for abort problem in Japanese locale has been made.
+ * Other bugfixes have been made.
+
+* 0.8.10
+
+ * The validity check of EUC-JP code became more strict.
+ * The handling of strings which failed to be converted has been modified.
+ * Minor bugfixes and a speed improvement have been made.
+
+* 0.8.9
+
+ * Transition from libjconv to direct use of iconv() API has been made.
+ * Quoted-Printable encoding for outgoing messages has been enabled.
+ * Content-Transfer-Encoding for outgoing messages became user definable.
+ * The abbreviation method of newsgroup name has been improved.
+ * Russian locales support has been improved.
+ * Fixes for message canonicalization have been made.
+ * Bugs of header MIME encoding have been fixed.
+
+* 0.8.8
+
+ * The option to sort by recipient has been added.
+ * The performance of initial sorting when opening folders has been
+ improved.
+ * The bug which would run into infinite loop and eventual crash when
+ encountering invalid characters in header MIME encoding has been fixed.
+
+* 0.8.7
+
+ * The extended regular expression has been supported on filtering.
+ * The option to resize images to fit the size of view has been added.
+ * The previous account is now restored on reediting draft messages.
+ * The routine of MIME header encoding has been rewritten completely,
+ and Q-encoding for single-byte locales has been also implemented.
+ * Strings beginning with "www." are now treated as URI.
+ * The default WWW browser has been changed to Mozilla.
+ * The common preferences dialog has been reorganized a bit.
+ * The remote command operation can be executed without X now.
+ * Code cleanups for the implementation of SMTP has been made.
+ * Autotools and libtool have been updated.
+ * A fix for font loading problem has been made.
+ * Other minor bugfixes have been made.
+
+* 0.8.6
+
+ * Per-folder account setting has been implemented.
+ * Per-folder default To / Cc / Bcc / Reply-To setting on composition
+ has been implemented.
+ * The status of signature is now indicated using different colors.
+ * Reply-To header now has priority over List-Post header on list-reply.
+ * Multiple deletion of IMAP4 messages has been optimized.
+ * A workaround for the problem that couldn't display 8-bit characters in
+ C or POSIX locale has been made.
+ * The B-encoding of headers on locales other than Japanese (when not
+ using libjconv) has been enabled.
+ * 'Rescan folder tree' has been renamed to 'Rebuild folder tree'.
+ * The redundant error messages of code conversion failure has been
+ prohibited.
+ * The cancellation of POP3 session has been fixed.
+ * The error detection of POP3 has been improved.
+ * The LDAP library detection of configure script has been fixed once more.
+ * Other minor bugfixes and code cleanups have been made.
+
+* 0.8.5
+
+ * Many fatal errors which will lead to crash in message catalogs have
+ been fixed.
+ * Cc header is now correctly recognized on reply and forwarding.
+ * A problem of refresh of summary on IMAP4 and News folder has been fixed.
+ * A bug of changing accounts on composition window has been fixed.
+ * The LDAP library detection of configure script has been fixed again.
+ * Queueing of news messages has been enabled.
+
+* 0.8.4
+
+ * The 'Select thread' function is added.
+ * The 'Reply to mailing list' function is added.
+ * The 'Reply' button invokes 'Reply to list' by default (configurable).
+ * More fix for GnuPG signing and verification has been made.
+ * The bug that deleted messages that are not received by filter has
+ been fixed.
+ * The bug that couldn't exit normally after opening composition window
+ has been fixed.
+ * The LDAP library detection of configure script has been fixed.
+
+* 0.8.3
+
+ * The state of compose window is now changed automatically when the
+ account is selected.
+ * The option to only mark message as read when opened in new window has
+ been added.
+ * The receive progress dialog now shows detailed information in the
+ status list.
+ * The receive progress dialog can be kept open.
+ * The line-joining problem of auto-wrapping has been fixed.
+ * IMAP and News cache files/directores are now correctly purged if
+ they become unnecessary.
+ * The wrong news article number calculation has been fixed.
+ * The summary refresh problem has been fixed.
+
+* 0.8.2
+
+ * GnuPG improvements and fix
+ o The line endings are canonicalized correctly before signing.
+
+ WARNING: don't sign messages with Sylpheed prior to this version
+ since they didn't fully conform RFC3156 and may cause
+ incompatibility between other MUAs.
+
+ o The feature to store passphrase in memory temporarily has been
+ implemented.
+ o The ascii-armored encryption and clear text signing has been
+ implemented.
+ * Line-wrapping improvements and fix
+ o The cursor movement on auto-wrapping has been fixed.
+ o Flickers on auto-wrapping has been repressed.
+ * Socket I/O timeout has been implemented.
+ * The '--attach' command line option has been implemented.
+ * Automatic cache expiration for News has been implemented.
+ * Time stamp has been added to the log messages.
+ * Temporary files are created under ~/.sylpheed/tmp/.
+ * The problem of folder and summary view refresh on incorporation has
+ been fixed.
+ * The correct FQDN will be returned to server.
+ * Some major memory leaks have been fixed.
+ * Some other bugs have been fixed.
+
+* 0.8.1
+
+ * The regression of Japanese code conversion have been fixed.
+ * The problem in MIME header encoding has been fixed.
+ * Several memory leaks in the address book has been fixed.
+
+* 0.8.0
+
+ * The "Paste as quotation" feature has been implemented.
+ * The "Action" feature (function to pass contents of messages to external
+ programs) has been added.
+ * Automatic line-wrapping on input has been enabled.
+ * The Japanese encoding conversion routine has been rewritten and libkcc
+ has been removed.
+ * The MIME encode/decode routines based on fetchmail have been rewritten.
+ * The IMAP response parser has been improved.
+ * The authentication method on SMTP AUTH can be forced.
+ * The receive error dialog can be disabled.
+ * The option to change the displayed message automatically with cursor
+ key on the summary view has been added.
+ * The copy and paste problem in MIME mode has been mostly fixed.
+ * Some other minor bugfixes and improvements have been made.
+
+* 0.7.8
+
+ * The feature to leave messages on POP3 server for specified days has
+ been implemented.
+ * The SSL preferences which was broken at the previous version has been
+ fixed.
+
+* 0.7.7
+
+ * The 'Redirect' (aka Bounce) feature has been implemented.
+ * IMAP4 / POP3 STARTTLS command has been enabled.
+ * NNTP over SSL has been enabled.
+ * The sorting order of the summary view became persistent.
+ * The 'Expand / Collapse all threads' feature have been added.
+ * The sorting order of the folder tree became case insensitive.
+ * The common / account preferences button has been removed from the
+ toolbar.
+ * Some fixes and improvements for MIME view have been made.
+ * The behavior of the toggle menu of 'Folder tree' and 'Message view'
+ have been fixed.
+ * The behavior of address completion has been fixed.
+ * A bug in the header MIME encoding routine on Japanese locale has been
+ fixed.
+ * Some other bugfixes have been made.
+
+* 0.7.6
+
+ * The manual and FAQ have been updated, and German and Italian FAQ have
+ been added.
+ * IMAP shared folder has been supported.
+ * 'Create filter rule' has been added to the context menu.
+ * Only newsgroup names longer than specified length are abbreviated.
+ * 'Get all' doesn't check for new messages on IMAP or News account by
+ default.
+ * Minor improvements to the folder property dialog have been made.
+ * Special characters like parentheses can be used in password for IMAP
+ accounts now.
+ * Some crash bugs and other minor bugs have been fixed.
+
+* 0.7.5
+
+ * The license has been modified so that it will be compatible with
+ OpenSSL.
+ * Sent / Drafts / Queue folder on IMAP4 has been enabled.
+ * The internationalization of IMAP4 folder name has been implemented.
+ * IMAP4 folder renaming has been implemented.
+ * Some critical bugs in IMAP4 response parser have been fixed.
+ * Non-default mailboxes are now specifiable for inbox, sent, draft,
+ trash folder and the destination of filtering, using folder identifier.
+ * Folder property dialog has been implemented.
+ * Special folders can be specified from the folder property dialog.
+ * 'Outbox' has been changed to 'Sent'.
+ * Queued messages are now saved to Sent folder after they are actually
+ sent.
+ * The auto line-wrapping has been improved.
+ * 'Reply to sender' now works for newsgroups.
+ * The SMTP server response is now referred on SMTP AUTH.
+ * Templates can be inserted into the current cursor position now.
+ * Confirmation dialog is displayed on sending if subject is empty.
+ * Displayed newsgroup names are now abbreviated.
+ * The timeout of DNS lookup has been implemented.
+ * 'Ctrl-Enter' shortcut now works even if Num Lock is on.
+ * The new application icon has been added.
+ * New message checking on IMAP or news server will be aborted immediately
+ if some errors occurred.
+ * Some menu items have been modified.
+ * Some other bugfixes have been made.
+
+* 0.7.4
+
+ * The bug that lost UIDL information if any error occured before issuing
+ UIDL command was fixed.
+ * Message retrieving is now cancelable from the menu even if the dialog
+ is hidden.
+ * Some warnings on compiling with gcc-3.0 have been removed.
+ * The English manual has been updated.
+ * The FAQs in English, Spanish and French have been added.
+
+* 0.7.3
+
+ * Attached files will be inherited on forwarding or reediting.
+ * Filter rules will be also updated when renaming or deleting folders.
+ * 'Get all' and 'Check for new messages' now works for IMAP4 and News
+ accounts.
+ * Limit of Receive size for POP3 has been implemented.
+ * The new notebook tab interface for multipart messages has been
+ implemented, and text parts are displayed on the text view all together.
+ * Separate user ID and password can be used for SMTP AUTH.
+ * ISO-8859-15 support has been added.
+ * Cancellation of POP3 session is now handled correctly.
+ * Some bugfixes have been made.
+
+* 0.7.2
+
+ * Message moving between different type of folders has been enabled.
+ * PGP decryption failure bug has been fixed.
+ * IMAP4 APPEND command failure has been fixed.
+ * Selection reply bug has been fixed.
+ * The bug that the external editor fails to launch when quotation
+ characters are used in the command line, has been fixed.
+ * 'Show all header' and 'Thread view' became toggle switch.
+ * Some code cleanups have been made.
+
+* 0.7.1
+
+ * Message copy between different type of folders has been enabled.
+ * Multiple message forwarding has been enabled.
+ * Most of key bindings became customizable.
+ * The default menu shortcuts have been modified so that Ctrl is used
+ as the modifier key.
+ * Quick menu shortcut changer has been implemented.
+ * Quick filter rule creation has been implemented.
+ * "Show all header" now displays the headers in the current message
+ view.
+ * File save dialog has been improved.
+ * '--send' option has been added.
+ * Quoted part of message text on reply or forward is specifiable by
+ selecting it.
+ * From address is now added to Cc entry when 'Reply to all' is used
+ on the messages which have Reply-To header.
+ * Mac OS X (Darwin) has been supported.
+ * Ctrl-Enter now works on the composition window.
+ * It now compiles with C compilers other than gcc.
+ * Crash in mark processing on 64bit architecture has been fixed.
+ * Crash on font load failure has been fixed.
+ * Some address completion bugs have been fixed.
+ * Some many other bugs have been fixed.
+
+* 0.7.0
+
+ * Undo / redo function has been implemented.
+ * Regular expression has been supported in filtering.
+ * LDIF file import has been improved.
+ * The cursor on composition window blinks now.
+ * The feature to keep editing after saving to draft has been added.
+ * The position of Subject entry on composition window has been moved
+ to the last.
+ * The menu items have been reorganized.
+ * WMCLASS is set for some windows.
+ * A bug that causes infinite loop at line-wrapping has been fixed.
+ * Some bugfixes for template, addressbook and IMAP4 have been made.
+
+* 0.6.6
+
+ * The newsgroup subscription dialog has been enhanced.
+ * Template function has been improved.
+ * New wrapping function for composition window has been implemented.
+ * Mailto URL has been supported for the --compose option.
+ * The --status option to display current message count has been added.
+ * Workaround for RFC-incompliant Date header has been made.
+ * Check connection between IMAP or NNTP server only if access time
+ limit is expired.
+ * Thai encodings have been supported.
+ * Hungarian message catalog has been added.
+ * Copy and paste problems have been fixed.
+ * Some IMAP4 bugs have been fixed.
+ * Some other bugs have been fixed.
+
+* 0.6.5
+
+ * The template function has been implemented.
+ * The quotation format parser has been enhanced.
+ * The forwarding format has become customizable.
+ * The "Open with..." dialog on the MIME view now retains command history.
+ * An arrow mark is put on the column of the sorting target.
+ * The Delete key now deletes messages.
+ * The password for SMTP AUTH is asked now when not specified.
+ * The mime.types file is searched from several directories now.
+ * The preferences dialogs have been sorted out a bit.
+ * A freeze bug on using SSL has been fixed.
+ * Some bugs have been fixed.
+
+* 0.6.4
+
+ * The performance of summary display on large number of messages
+ has been improved.
+ * Columns of the summary view became reorderable.
+ * The default order of the summary view columns has been changed.
+ * Reedit has been enabled in the outbox.
+ * LDIF file import has been implemented.
+ * The crash bug of LDAP has been fixed.
+ * Some other bugs have been fixed.
+
+* 0.6.3
+
+ * Message body text search has been implemented.
+ * The text part of nested multipart message, or HTML only message
+ is now correctly quoted on replying.
+ * The status of threading is now preserved for each folders.
+ * Selective removal from trash folder has been enabled.
+ * User name and password of IMAP4 account which include spaces are now
+ handled correctly.
+ * Workaround for 8bit characters conversion failure on C locale when
+ using libjconv has been made.
+ * Some bugs that caused crashes have been fixed.
+
+* 0.6.2
+
+ * The new addressbook has been implemented (Match Grun).
+ * LDAP, vCard, and JPilot have been supported.
+ * The option to launch the external editor automatically has been added.
+ * Sorting by mark, unread, attachment, and color label has been enabled.
+ * Moving to the next or previous flagged messages has been enabled.
+ * The "Mark all read" function has been added.
+ * The function to reformat the current paragraph has been implemented.
+ * Some icons have been replaced.
+ * The layout of some menu items has been modified.
+ * Some other bugfixes have been made.
+
+* 0.6.1
+
+ * A crash bug caused by the typo of ja.po was fixed.
+ * Some bugs of configure were fixed.
+ * The bug that ignored Bcc: when using external command for sending was
+ fixed.
+ * A bug of auto-checking was fixed.
+ * Readability of the selected color-labelled line has been improved.
+ * Croatian message catalog has been added.
+
+* 0.6.0
+
+ * Some operations are enabled while receiving.
+ * A progress bar has been added to the status bar.
+ * SSL has been supported (POP3, SMTP, IMAP4).
+ * Color label is implemented.
+ * Sending with local sendmail command is enabled.
+ * Queued messages are now re-editable.
+ * Old messages will be removed after re-editing.
+ * Account information is now used when sending from queue.
+ * New account dialog will be displayed on the first run.
+ * Suppressed the output to status bar on IMAP4 and NNTP.
+ * The memory usage of the integrated XML parser has been reduced.
+ * The configure script has been improved.
+ * The bug that tried to fetch a nonexistent message on POP3 has been
+ fixed.
+ * The crash bugs of the summary view and the attachment property dialog
+ of the composition window has been fixed.
+
+* 0.5.3
+
+ * The performance of the summary view has been improved a bit.
+ * The option to expand / collapse message threads has been added.
+ * Unread messages are now displayed with bold font.
+ * The option to update all local folders after getting messages has
+ been added.
+ * "Add sender to address book" has been implemented.
+ * The position of displayed message is now kept after updating the
+ summary view.
+ * A security problem of POP3 has been fixed.
+ * Bold and small fonts are now configurable with ~/.sylpheed/sylpheedrc.
+ * Some other bugs have been fixed.
+
+* 0.5.2
+
+ * The English manual has been added.
+ * Polish message catalog has been added.
+ * Accounts are automatically selected on reply.
+ * Unnecessary return codes in user-defined header are removed.
+ * UI of date format setting has been improved.
+ * The bug that couldn't handle escaped characters on IMAP4 has been fixed.
+ * The bug that suspended the process after opening attached files has
+ been fixed.
+ * Workaround for raw-JIS code in header fields has been done again.
+ * The bug that couldn't handle some responses on NNTP has been fixed.
+ * Some other minor fixes have been done.
+
+* 0.5.1
+
+ * Expand/collapse state of folders is now preserved.
+ * Newsgroups can be selected from the list dialog.
+ * Workaround for raw-JIS code in header fields.
+ * The current read size in some dialogs are displayed with human-readable
+ format.
+ * Cc can be used in the reply format.
+ * Base64 data with unusual line length became decodable.
+
+* 0.5.0
+
+ * A fix for the bug that prevented the removal of selected IMAP4 folder.
+
+* 0.5.0pre4
+
+ * Gettext has been updated to 0.10.38.
+ * Some more outgoing character sets became specifiable without libjconv.
+ * --enable-threads option has been removed temporarily.
+ * IMAP4 mailbox status is now updated while scanning tree.
+ * IMAP4 and NNTP port number is now specifiable.
+ * The Japanese manual has been updated.
+ * Some UI and other fixes have been done.
+
+* 0.5.0pre3
+
+ * Autoscan of IMAP4 directory has been implemented.
+ * IMAP4 server directory prefix became specifiable.
+ * Some other bugfixes have been done.
+
+* 0.5.0pre2
+
+ * Bugfixes for IMAP4. Logs are now also output to file.
+
+* 0.5.0pre1
+
+ * Many bugfixes for IMAP4, and some modifications for user interface.
+
+* 0.4.99
+
+ * Attached files can be opened with arbitrary programs.
+ * The progress dialog is shown when sending a message.
+ * User-defined headers can be added.
+ * On the folder tree, unread mark is added to closed folders which have
+ some unread subfolders.
+ * Command line options such as --help and --version can now be executed
+ without X.
+ * NNTP authentication has been supported.
+ * Summary view shows a dialog to process the unexecuted marks when
+ changing the current folder.
+ * `Reply to sender' has been added.
+ * In IMAP4rev1, move, copy, delete and namespace have been implemented.
+ INBOX and trash folder are automatically added when creating a new
+ IMAP4 account.
+ * Many other bugfixes have been done.
+
+* 0.4.66
+
+ * The bug that didn't calculate MD5 correctly on big endian machines
+ (like PowerPC) has been fixed.
+ * The incorporation dialog has been improved.
+ * Auto mail checking has been implemented.
+ * Headers displayed on the message view are now customizable.
+ * Some other bugfixes have been done.
+
+* 0.4.65
+
+ * The items of preferences dialog have been reorganized.
+ * The header pane can be toggled on and off now.
+ * Page scroll step is now selectable between one page and half page.
+ * Messages can be exported as mbox format.
+ * GnuPG support code has been updated.
+ * The format of date in summary view became freely definable.
+ * The MD5 routine by RSA has been replaced by an FSF implementation.
+ * The progress dialog of POP3 has been considerably improved.
+ * IMAP4 folder creation/deletion is enabled.
+ * A bug in IMAP4 that caused infinite loop and buffer overrun has been
+ fixed.
+ * A socket is now handled with abstraction layer.
+ * Some other bugs have been fixed.
+
+* 0.4.64
+
+ * The built-in XML parser has been modified so that it escapes certain
+ characters, and supports multiple-lined tag.
+ * The bug that caused infinite loop when illegal XML file was given was
+ fixed.
+ * The problem when not moving to inbox after getting new mail was fixed.
+ * The bug that made Sylpheed crash when clicking Cancel button while
+ getting new mail was fixed.
+
+* 0.4.63
+
+ * Some menu items are sorted out.
+ * `Attract by subject' is speeded up.
+ * Smooth scrolling of message text is enabled.
+ * Generic mark and Deleted mark became permanent.
+ * Replied and Forwarded mark are enabled.
+ * The design of New and Unread mark is changed.
+ * Generic mark and Unread mark can be toggled with clicking summary view.
+ * Long References header is truncated now.
+ * Updated the GnuPG support code.
+ * Messages can be moved across file systems.
+ * Message date is converted into local time when displaying.
+ * The colors of quoted part and URI of messages can be specified, and
+ they are specifiable according to quotation level.
+ * It is enabled to keep the current folder after receiving new messages.
+ * The speed of cache reading is improved.
+ * Message copy is implemented.
+ * Many other bugfixes have been done.
+
+* 0.4.62
+
+ * Prohibition of multiple execution and operation by command line
+ options are enabled.
+ * Workaround was done for duplicated From_ line in mbox file.
+ * HTML - > text converter is implemented.
+ * SMTP AUTH is supported.
+ * FIFO is allowed for signature file.
+ * Security probrems related to tmpfile() and chmod() are fixed.
+ * A bug was fixed that couldn't open attached files which include space.
+ * Address completion is enhanced.
+ * Move and remove are enabled in IMAP4.
+ * Message source can be displayed.
+ * Some other bugfixes.
+
+* 0.4.61
+
+ * Bugs in address completion, sending, and folder view have been fixed.
+
+* 0.4.60
+
+ * The horizontal scroll bar is added on the summary view.
+ * Drag and drop from the summary view to the folder view is enabled.
+ * Preliminary support of GnuPG is added (needs GPGME).
+ * `Update folder tree' is performed correctly now.
+ * Receiving dialog is improved.
+ * `Select all matched' is enabled in the summary search.
+ * Some new toolbar icons are added.
+ * Attached files can be opened with metamail command.
+ * Address completion with tab key is enabled in the address entry on
+ the composition window.
+ * Some many other bugfixes.
+
+* 0.4.52
+
+ * News posting feature is implemented.
+ * Number of unread messages is now displayed at the side of folder name.
+ * Accounts are now selectable on the composition window.
+ * Some other bugfixes.
+
+* 0.4.51
+
+ * A bug was fixed that didn't incorporate spool file correctly.
+ * From_ line is now recognized as separator of messages even if the
+ previous line isn't empty.
+ * A bug was fixed that printed warning when sending message from queue.
+
+* 0.4.50
+
+ * The architecture were overhauled, and folders are now managed by
+ object-oriented approach.
+ * The location of mailbox became specifiable, and multiple mailboxes
+ are now manageable simultaneously.
+ * Summary scrolls only on the edge when messages are selected.
+ * News servers are now added using account creation.
+ * In IMAP4, the reading of existing folders is enabled.
+ * Interfaces are modified a bit.
+
+* 0.4.9
+
+ * Fixed some bugs and updated message catalogs.
+
+* 0.4.8
+
+ * Fixed a bug that locked the process if the status bar was hidden.
+ * Fixed a bug that put a garbage to charset if the outgoing character
+ set was specified and non-ascii characters were used in subject.
+ * Added Portuguese message catalog.
+
+* 0.4.7
+
+ * Changed the ruler to the more graphical one.
+ * Made the state of status bar get preserved.
+ * Made it configurable for each accounts whether to receive messages
+ when getting from all accounts.
+ * Updated README.
+
+* 0.4.6
+
+ * Added a ruler to the composition window.
+ * Added the list of the compiled-in features and clickable URI to the
+ official web site to the about dialog.
+ * Added `Show all header' to the right-click menu at the summary.
+ * Fixed a bug on quotation.
+ * Fixed memory leak bugs.
+ * Some other fixes.
+
+* 0.4.5
+
+ * Implemented line-wrapping functions.
+ * Added supports for some codesets.
+ * Added Chinese message catalog.
+ * Extended quotation format.
+ * Made the settings of the menu shortcuts preservable.
+ * Fixed a probrem that caused to show garbage characters if the codeset
+ wasn't set.
+ * Some other bug fixes.
+
+* 0.4.4
+
+ * Enhanced the support for 8bit code (ex. ISO-8859-1). Other bug fixes.
+
+* 0.4.3
+
+ * Implemented the draft message function.
+ * Made the summary get the proper display on the queue folder.
+ * Changed the color of unread mark from green to blue.
+ * Some other bug fixes.
+
+* 0.4.2
+
+ * Added preliminary IMAP4 codes.
+ * Enhanced the MIME message parsing routines.
+ * Changed the display method of HeaderView.
+ * Modified the codeset conversion routines.
+ * Added Spanish message catalog.
+ * Removed `Reply with quote', and added `Reply to all'.
+ * Implemented `Forward as an attachment'.
+ * Some other bug fixes.
+
+* 0.4.1
+
+ * Fixed the probrem of codeconv.c that prevented compiling.
+ * Modified sylpheed.spec.
+
+* 0.4.0
+
+ * Modified the layout of the preferences dialog widgets.
+ * Fixed the probrem of Japanese processing on FreeBSD.
+ * Workaround for the malformed References: header generated by OE5 :(
+
+* 0.3.99
+
+ * Applied Kondara patch and enabled to support many locales, including
+ UTF-8 (Unicode), when using libjconv.
+ * Integrated the manual written by BONAIM.
+ * Added the option that specifies whether to display short headers on
+ message view or not.
+ * Disabled IPv6 support by default.
+ * Added copyright notice to the source files.
+ * Some bug fixes.
+
+* 0.3.29
+
+ * Supported external editor.
+ * Supported Content-Transfer-Encoding: x-uuencode.
+ * Replaced system() with execvp().
+ * Modified the reversed order of `Yes' and `No' at some alert dialogs.
+ * Enabled to open a message with new window.
+ * Made it display the simplified headers if the part of multipart
+ message is text/plain.
+ * Enabled to use font selection dialog on the setting of message font.
+ * Modified so that it processes address correctly if the part of it is
+ quoted.
+ * Added `None (local)' to the menu of protocol on the account setting.
+ * Some other fixes.
+
+* 0.3.28
+
+ * Supported ISO-8859-1.
+ * Fixed the size of the dialogs.
+ * Made it saves the size of widgets and the width of columns.
+ * Added the French message catalog.
+ * Changed the variable name of filtering (check the auto-filtering
+ option again if you've turned it on before).
+ * Fixed some bugs.
+
diff --git a/README b/README
new file mode 100644
index 00000000..2b0b5be6
--- /dev/null
+++ b/README
@@ -0,0 +1,227 @@
+ Sylpheed - a GTK+ based, lightweight, and fast e-mail client
+
+ Copyright(C) 1999-2004 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+
+ 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
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ For more details see the file COPYING.
+
+
+What's Sylpheed
+===============
+
+Sylpheed is an e-mail client and news reader based on GTK+ GUI toolkit,
+and runs on X Window System.
+
+Sylpheed is a free software distributed under the GNU GPL.
+
+The development of Sylpheed sets the following things as its goal:
+
+ * Quick response by keeping CPU and memory usage to a minimum
+ * Fast processing even though a folder contains large number of messages
+ (more than 10 thousand)
+ * Enables intuitive operation by simple, graceful, and well-polished
+ interface
+ * Similar operation methods to other mailers.
+ * Readily available with simple configuration
+ * Fully equipped with features required as a mailer
+ * Full support of Japanese, and support of i18n
+ * Enables flexible interaction with external commands
+ * Stable, and don't lose any data (to the utmost) in case of crash
+
+The appearance and interface are similar to some popular e-mail clients for
+Windows, such as Outlook Express, Becky!, and Datula. The interface is also
+designed to emulate the Emacs-based mailers, and almost all commands are
+accessible with the keyboard. So you will able to migrate to Sylpheed
+without much discomfort in the case where you are accustomed to other
+mailers.
+
+The messages are managed by MH format, and you'll be able to use it together
+with another mailer based on MH format (like Mew). It has less possibility
+of losing mails on failures since one file corresponds to one mail. You can
+import or export mbox format messages. You can also utilize fetchmail or/and
+procmail, and external programs on receiving (like inc or imget).
+
+Currently implemented major features
+====================================
+
+Supported protocols
+
+ o POP3
+ o IMAP4rev1
+ o SMTP
+ o NNTP
+ o SSL/TLSv1 (POP3, SMTP, IMAP4rev1, NNTP)
+ o IPv6
+
+Features
+
+ o multiple accounts
+ o thread display
+ o powerful filtering
+ o MIME (attachments)
+ o integrated News reader
+ o SMTP AUTH support
+ o CRAM-MD5 authentication (SMTP AUTH / IMAP4rev1)
+ o APOP authentication (POP3)
+ o PGP signature / encryption (requires GPGME)
+ o built-in image view
+ o X-Face display
+ o user-defined headers
+ o color label
+ o Mew/Wanderlust compatible key bind
+ o multiple MH folder support
+ o mbox importing / exporting
+ o external editor
+ o message queueing
+ o automatic mail checking
+ o draft message
+ o template
+ o line-wrapping
+ o clickable URI
+ o XML-based address book
+ o newly arrived and unread message management
+ o printing
+ o offline mode
+ o remote operation by command line
+ o per-folder configuration
+ o LDAP, vCard, and JPilot support
+ o Drag & Drop
+ o autoconf, automake support
+ o internationalization of messages by gettext
+ o support of many code sets, including UTF-8 (Unicode)
+
+and more.
+
+Installation
+============
+
+See INSTALL for installation instructions.
+
+Usage
+=====
+
+Preparation before running
+--------------------------
+
+If you want to use characters other than English (aka US-ASCII),
+you must specify some environmental variables related to locale.
+For example:
+
+% export LANG=de_DE (sh, bash etc.)
+
+or
+
+% setenv LANG de_DE (csh, tcsh etc.)
+
+(replace de_DE to appropriate locale name)
+
+If you don't want translated messages, set LC_MESSAGES to "C"
+(and unset LC_ALL if specified).
+
+How to run
+----------
+
+Input `sylpheed' on a command line, or double-click the icon on a file
+manager to execute.
+
+Initial startup
+---------------
+
+When Sylpheed is executed for the first time, it automatically creates the
+configuration files under ~/.sylpheed/, and asks you the location of
+mailbox. The default is ~/Mail. If some files which are non-MH format
+already exist on the directory, you will have to specify another location.
+
+Required settings
+-----------------
+
+Initially, you have to create at least one account to send or receive
+messages (you can read messages that already exist without creating
+accounts). The configuration dialog will be shown by clicking
+"Configuration -> Create new account..." on the menu, or "Account" on
+the toolbar. Then, fill the required settings.
+
+Refer to the manual supplied with this program for the general usage.
+
+Hidden settings
+---------------
+
+You can configure most of the features in Sylpheed through the preferences
+dialog, but there are a few parameters which don't have user interface
+(you don't have to modify them in normal use). You must edit
+~/.sylpheed/sylpheedrc by an editor when Sylpheed is not running.
+
+allow_jisx0201_kana allow JIS X 0201 Kana (half-width kana) on
+ sending.
+ 0: off 1: on [default: 0]
+bold_font bold font used in folder, summary and text view
+small_font small font used in summary view etc.
+enable_hscrollbar enable horizontal scroll bar in summary view
+ 0: off 1: on [default: 1]
+bold_unread show unread messages using bold font in
+ summary view
+ 0: off 1: on [default: 1]
+folderview_vscrollbar_policy specify the policy of vertical scroll bar
+ of folder view
+ 0: always 1: automatic 2: never [default: 0]
+
+Information
+===========
+
+You can check the newest version and information about Sylpheed at:
+
+ http://sylpheed.good-day.net/
+
+There's also the manual of Sylpheed written by
+Yoichi Imai <yoichi@silver-forest.com> on:
+
+ http://y-imai.good-day.net/sylpheed/
+
+Feedback
+========
+
+Comments, ideas and (most of all) bug reports (and especially patches) are
+very welcome.
+
+Anonymous cvs
+=============
+
+You can get the newest source code with the anonymous cvs.
+
+First, set your CVSROOT environment variable to:
+
+ :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed
+
+Next, login with:
+
+ cvs login
+
+and just press Enter key to `CVS password:'.
+
+Move to an appropriate directory, and with the command:
+
+ cvs -z3 checkout sylpheed
+
+a source tree named `sylpheed' is created under the current directory.
+
+To update to the newest source tree, run the command:
+
+ cvs -z3 update
+
+on the top directory of the source tree.
+
+--
+Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
diff --git a/README.jp b/README.jp
new file mode 100644
index 00000000..9ccdeb16
--- /dev/null
+++ b/README.jp
@@ -0,0 +1,244 @@
+ Sylpheed - GTK+ ベースの軽量で高速な電子メールクライアント
+
+ Copyright(C) 1999-2004 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+
+ 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
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ For more details see the file COPYING.
+
+(参考訳)
+ このプログラムはフリーソフトウェアです。あなたは、 Free Software
+ Foundation によって公表されている GNU 一般使用許諾 (バージョン2、
+ または(任意に)それ以降のバージョンのどちらか) の条件に従って、
+ これを再配布、そして(あるいは)修正することができます。
+
+ このプログラムは有用であることを期待して配布されていますが、
+ 「何の保証もありません」。「商利用」あるいは「特定の目的への適合」への
+ 暗黙の保証さえありません。さらなる詳細は、GNU 一般使用許諾を参照
+ してください。
+
+ あなたはこのプログラムと共に GNU 一般使用許諾のコピーを入手している
+ はずですが、もしそうでなければ、 the Free SoftwareFoundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. まで書き送って
+ ください。
+
+ さらなる詳細は、 COPYING というファイルを参照してください。
+
+
+What's Sylpheed
+===============
+
+SylpheedはGUIツールキットにGTK+を使用した、 X Window System上で動作する
+電子メールクライアント&ニュースリーダーです。
+
+Sylpheed は GNU GPL に従って配布されているフリーソフトウェアです。
+
+Sylpheedは以下のことを目標にして開発されています。
+
+ * CPU・メモリの消費を最小限に抑えて軽快に動作
+ * 1フォルダ中に大量にメッセージが存在する場合(10000通以上)でも高速に処理
+ * シンプルで美しく、洗練されたインタフェースにより直観的な操作が可能
+ * 他のメーラに近い操作が可能
+ * 簡単な設定ですぐに使用可能
+ * メーラに必要とされる機能を完備
+ * 日本語に完全対応し、国際化にも対応
+ * 外部コマンドとの柔軟な連携が可能
+ * 安定動作し、万一クラッシュした場合でも極力データを消失しない
+
+外観やインタフェースは Outlook Express 、 Becky! 、 Datula といった、
+Windows では定番のメーラを参考にしています。また、操作系は Mew や
+Wanderlust 等の Emacs 系メーラを参考にしており、キーボードのみによる操作
+が可能となっています。そのため、他のメーラに慣れている場合でもそれほど
+違和感なく移行できると思います。
+
+メッセージは MH 形式で管理しており、他の MH 形式を使用したメーラ(Mew 等)
+と併用することが可能です。1ファイル1メールの形式のため、障害が発生した際に
+メールを失う危険性が少なくなっています。 mbox形式のメッセージをインポート・
+エクスポートすることも可能です。また、 fetchmail や procmail を利用したり、
+受信に外部プログラム(inc, imget 等)を使用することも可能です。
+
+現在実装されている主な機能
+==========================
+
+対応プロトコル
+
+ o POP3 対応
+ o IMAP4rev1 対応
+ o SMTP
+ o NNTP
+ o SSL/TLSv1 (POP3, SMTP, IMAP4rev1, NNTP)
+ o IPv6
+
+機能
+
+ o 複数アカウント
+ o スレッド表示
+ o 強力なフィルタリング
+ o MIME (ファイルの添付)
+ o 統合 ニュースリーダー
+ o SMTP AUTH 対応
+ o CRAM-MD5 認証 (SMTP AUTH / IMAP4rev1)
+ o APOP 認証 (POP3)
+ o PGP 署名・暗号化(要 GPGME)
+ o 画像表示機能を内蔵
+ o X-Face 表示
+ o ユーザ定義ヘッダ
+ o カラーラベル
+ o Mew/Wanderlust 互換キーバインド
+ o 複数の MH フォルダ対応
+ o mbox ファイルのインポート / エクスポート
+ o 外部エディタ
+ o 送信待機
+ o 自動メールチェック
+ o 草稿
+ o テンプレート
+ o 自動改行
+ o クリッカブル URI
+ o XML ベースのアドレス帳
+ o 新着・未読管理
+ o 印刷
+ o オフラインモード
+ o コマンドラインによるリモート操作
+ o フォルダ毎の設定
+ o LDAP, vCard, JPilot 対応
+ o ドラッグ & ドロップ
+ o autoconf, automake 対応
+ o gettext によるメッセージの国際化対応
+ o UTF-8 (Unicode) を含む多数の文字コードに対応
+
+等です。
+
+インストール方法
+================
+
+インストールの説明は INSTALL を参照してください。
+
+使用方法
+========
+
+起動前の準備
+------------
+
+日本語を使用したい場合、 Sylpheed を実行する前にロカールに関連する
+環境変数を指定しなければなりません(日本語 Linux ディストリビューション
+の場合は大抵すでに設定されています)。例えば、
+
+% export LANG=ja_JP.eucJP (sh, bash etc.)
+
+または
+
+% setenv LANG ja_JP.eucJP (csh, tcsh etc.)
+
+(ja_JP.eucJP は適切なロカール名に置き換えてください。)
+
+翻訳されたメッセージが必要なければ、 LC_MESSAGES を "C" に指定して
+ください(LC_ALL が指定されていれば外してください)。
+
+起動方法
+--------
+
+コマンドラインから sylpheed と入力するか、またはファイルマネージャ
+からアイコンをダブルクリックするなりして起動してください。
+
+初回起動時の注意
+----------------
+
+初回の起動時に、 ~/.sylpheed/ 以下に設定ファイルが自動的に作成されます。
+また、メールボックスの位置を質問します。デフォルトは ~/Mail です。もしそ
+のディレクトリに MH フォーマットではないファイルがすでに存在する場合、別
+の場所を指定しなければなりません。
+
+必要な設定
+----------
+
+メールの送受信を行うには、最初に少なくとも一つアカウントを作成しておく必
+要があります(アカウントを作成しなくても、既存のメールを読むことは可能です)。
+メニューの「設定(C) -> 新規アカウントの作成(N)...」、またはツールバーの
+「アカウント」をクリックすると、設定ダイアログが表示されるので、必要な設
+定を行ってください。
+
+一般的な使用法に関してはこのプログラムに付属のマニュアルを参照してください。
+
+隠し設定
+--------
+
+Sylpheed のほとんどの機能は設定ダイアログから設定できますが、ユーザインタ
+フェースを持たない設定項目がいくつかあります(通常は変更する必要はありません)。
+Sylpheed が起動していないときに ~/.sylpheed/sylpheedrc をエディタで編集
+する必要があります。
+
+allow_jisx0201_kana JIS X 0201 カナ(半角カナ)を送信時に許可します。
+ 0: off 1: on [デフォルト: 0]
+bold_font フォルダ、サマリ、テキストビューで使用される
+ ボールドフォント
+small_font サマリビュー等で使用される小フォント
+enable_hscrollbar サマリビューで水平スクロールバーを有効にする
+ 0: off 1: on [デフォルト: 1]
+bold_unread サマリビューで未読メッセージをボールド
+ フォントを使用して表示
+ 0: off 1: on [デフォルト: 1]
+folderview_vscrollbar_policy フォルダビューの垂直スクロールバーのポリシー
+ を指定
+ 0: 常に表示 1: 自動 2: 非表示 [デフォルト: 0]
+
+情報
+====
+
+最新バージョンや Sylpheed に関する情報は
+
+ http://sylpheed.good-day.net/
+
+でチェックできます。また、
+
+ http://y-imai.good-day.net/sylpheed/
+
+に 今井 陽一氏 <yoichi@silver-forest.com> 作の Sylpheed のマニュアルが
+あります。
+
+フィードバック
+==============
+
+意見、アイデア、バグレポート(これが一番重要)(と、特にパッチ)は
+大変歓迎します。
+
+Anonymous cvs
+=============
+
+anonymous cvs で最新のソースを取得することができます。
+
+まず環境変数 CVSROOT に
+
+ :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed
+
+を指定します。その後、
+
+ cvs login
+
+でログインし、 CVS password: に対しては単に Enter キーを押して下さい。
+
+適当なディレクトリに移動し、以下のコマンド
+
+ cvs -z3 checkout sylpheed
+
+で カレントディレクトリ以下に sylpheed というソースツリーが作成されます。
+
+最新のソースツリーにアップデートするには、ソースツリーのトップディレクトリで、
+
+ cvs -z3 update
+
+を実行して下さい。
+
+--
+山本 博之 / Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
diff --git a/TODO b/TODO
new file mode 100644
index 00000000..aaee5220
--- /dev/null
+++ b/TODO
@@ -0,0 +1,74 @@
+TODO
+====
+
+(The upper item has the greater priority or feasibility... maybe :-)
+
+o GTK+-2.x support
+o improvements of addressbook
+o POP before SMTP
+o original icons and logos
+o more efficient SMTP handling for multiple messages
+o more robust IMAP4 response parser
+o plug-in faculty
+o support for some formats other than MH and mbox (ex. Maildir)
+o priority (Priority:, X-Priority:, X-MSMail-Priority:)
+o notification of reception (Disposition-Notification-To:)
+o autosave
+o customization of toolbar
+o RFC 2231 (MIME filename encoding) compliant
+o S/MIME
+o full-text search using Namazu
+o virtual folder
+o console mode interface
+o mailing list manager
+o inline image display of multipart MIME messages
+o compressed folder
+o make the code cleaner
+o make the process faster
+o make the dubious English much decent :)
+
+Partially implemented features
+==============================
+. make the network related code much decent
+ (processing of time out, multi-threading etc.)
+. drag and drop
+. internationalization / multilingualization
+. PGP/GPG
+. display of HTML messages (can display by converting HTML to text)
+. progress display of time-consuming processes
+. parallel processing between sending-receiving and others
+. customization of key bindings
+
+Implemented features
+====================
+* multipart MIME (attachments of files)
+* sending from queue
+* clickable URI
+* management of read message on POP server by UIDL
+* IPv6 support
+* printing
+* reconnection when connection to news server is broken
+* X-Face support
+* preservation of position or size of window
+* external editor support
+* draft message
+* extension of quotation format
+* assignation of location of mail folder
+* account selection on composition window
+* posting to newsgroups
+* completion of mail address
+* prohibition of multiple execution (with Unix domain socket)
+* periodical check of newly arrived mails
+* modification of display color
+* designate the displayed headers
+* user-defined headers
+* IMAP4 support
+* list view of newsgroups and subscription of groups from there
+* SSL support
+* LDAP support
+* full-text search of messages (plain)
+* template function
+* regular expression support at filtering
+* autowrap / wordwrap
+* configuration for each folders
+* enhancement of filtering
diff --git a/TODO.jp b/TODO.jp
new file mode 100644
index 00000000..4f83d6b9
--- /dev/null
+++ b/TODO.jp
@@ -0,0 +1,75 @@
+TODO
+====
+
+(上のものほど重要度、実現可能性が高くなる、かも(^^;)
+
+o GTK+ 2.x 対応
+o アドレス帳の改良
+o POP before SMTP
+o オリジナルのアイコンとロゴ
+o より効率的な複数メッセージの SMTP 処理
+o より堅牢な IMAP4 応答パーサ
+o プラグイン機構
+o MH, mbox 以外の形式への対応 (Maildir 等)
+o 重要度 (Priority:, X-Priority:, X-MSMail-Priority:)
+o 受信確認 (Disposition-Notification-To:)
+o 自動保存
+o ツールバーのカスタマイズ
+o RFC 2231 (MIME ファイル名のエンコーディング) 対応
+o S/MIME
+o Namazu との連携による全文検索
+o 仮想フォルダ
+o コンソールモードインタフェース
+o メーリングリストマネージャ
+o マルチパートMIMEでのインライン画像表示
+o 圧縮フォルダ
+o コードをさらにきれいにする
+o 処理のさらなる高速化
+o 怪しげな英語をなんとかする :)
+
+一部実装済の機能
+================
+. ネットワーク関連のコードをまともにする
+ (タイムアウト処理、マルチスレッド化等)
+. ドラッグ & ドロップ
+. 国際化・多言語化
+. PGP/GPG
+. HTMLメールの表示 (HTMLをテキストに変換して表示可能)
+. 時間が掛かる処理の進捗状況表示
+. 送受信とそれ以外との並行処理
+. キーバインドのカスタマイズ
+
+実装済の機能
+============
+* マルチパートMIME (ファイルの添付)
+* 送信待ちからの送信
+* クリッカブルURI
+* UIDLによるPOPサーバ上の既読メッセージ管理
+* IPv6対応
+* 印刷機能
+* ニュースサーバとの接続が切れた時の再接続
+* X-Face 対応
+* ウィンドウの位置、サイズの保存
+* 外部エディタ対応
+* ちゃんとしたマニュアルを書く
+* 草稿
+* 引用形式の拡張
+* メールフォルダ位置の指定
+* 作成ウィンドウでのアカウントの選択
+* ニュースグループへの投稿
+* メールアドレスの補完
+* 二重起動防止 (with Unix domain socket)
+* 新着メールの定期的チェック
+* 表示色の変更
+* 表示されるヘッダの指定
+* ユーザ定義のヘッダ
+* IMAP4対応
+* ニュースグループのリスト表示とそこからの購読グループ追加
+* SSL対応
+* LDAP対応
+* メッセージの全文検索 (ベタ)
+* テンプレート機能
+* 振り分けで正規表現に対応する
+* 自動改行 / ワードラップ
+* フォルダ毎の設定
+* 振り分け処理の強化
diff --git a/ac/Makefile.am b/ac/Makefile.am
new file mode 100644
index 00000000..155a198e
--- /dev/null
+++ b/ac/Makefile.am
@@ -0,0 +1,10 @@
+MACROS = \
+ aclocal-include.m4 \
+ check-type.m4 \
+ gnupg-check-typedef.m4
+
+EXTRA_DIST = $(MACROS) \
+ missing/gdk-pixbuf.m4 \
+ missing/gettext.m4 \
+ missing/gpgme.m4 \
+ missing/imlib.m4
diff --git a/ac/README b/ac/README
new file mode 100644
index 00000000..39aab327
--- /dev/null
+++ b/ac/README
@@ -0,0 +1,6 @@
+If you encountered errors like:
+
+ aclocal: configure.in: ??: macro `AM_SOMETHING' not found in library
+
+when executing autogen.sh, copy the corresponding m4 files in the missing/
+directory into here (or install the development packages).
diff --git a/ac/aclocal-include.m4 b/ac/aclocal-include.m4
new file mode 100644
index 00000000..aac5f8a0
--- /dev/null
+++ b/ac/aclocal-include.m4
@@ -0,0 +1,12 @@
+# aclocal-include.m4
+#
+# This macro adds the name macrodir to the set of directories
+# that `aclocal' searches for macros.
+
+dnl SYLPHEED_ACLOCAL_INCLUDE(macrodir)
+AC_DEFUN([SYLPHEED_ACLOCAL_INCLUDE],
+[
+ test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
+
+ for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done
+])
diff --git a/ac/check-type.m4 b/ac/check-type.m4
new file mode 100644
index 00000000..90611451
--- /dev/null
+++ b/ac/check-type.m4
@@ -0,0 +1,27 @@
+dnl SYLPHEED_CHECK_TYPE(TYPE, DEFAULT [, INCLUDES, COMMENT])
+dnl
+dnl Like AC_CHECK_TYPE, but in addition to `sys/types.h', `stdlib.h' and
+dnl `stddef.h' checks files included by INCLUDES, which should be a
+dnl series of #include statements. If TYPE is not defined, define it
+dnl to DEFAULT.
+dnl
+AC_DEFUN(SYLPHEED_CHECK_TYPE,
+[AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(sylpheed_cv_type_$1,
+[AC_TRY_COMPILE([
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+$3
+], [
+#undef $1
+int a = sizeof($1);
+], sylpheed_cv_type_$1=yes, sylpheed_cv_type_$1=no)])dnl
+AC_MSG_RESULT($sylpheed_cv_type_$1)
+if test $sylpheed_cv_type_$1 = no; then
+ AC_DEFINE($1, $2, $4)
+fi
+])
diff --git a/ac/gnupg-check-typedef.m4 b/ac/gnupg-check-typedef.m4
new file mode 100644
index 00000000..4f782a6a
--- /dev/null
+++ b/ac/gnupg-check-typedef.m4
@@ -0,0 +1,16 @@
+dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME [, COMMENT])
+dnl Check whether a typedef exists and create a #define $2 if it exists
+dnl
+AC_DEFUN(GNUPG_CHECK_TYPEDEF,
+ [ AC_MSG_CHECKING(for $1 typedef)
+ AC_CACHE_VAL(gnupg_cv_typedef_$1,
+ [AC_TRY_COMPILE([#include <stdlib.h>
+ #include <sys/types.h>], [
+ #undef $1
+ int a = sizeof($1);
+ ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
+ AC_MSG_RESULT($gnupg_cv_typedef_$1)
+ if test "$gnupg_cv_typedef_$1" = yes; then
+ AC_DEFINE($2, 1, $3)
+ fi
+ ])
diff --git a/ac/missing/gdk-pixbuf.m4 b/ac/missing/gdk-pixbuf.m4
new file mode 100644
index 00000000..9da7a6a6
--- /dev/null
+++ b/ac/missing/gdk-pixbuf.m4
@@ -0,0 +1,166 @@
+# Configure paths for gdk-pixbuf
+# Elliot Lee 2000-01-10
+# stolen from Raph Levien 98-11-18
+# stolen from Manish Singh 98-9-30
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_GDK_PIXBUF([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for GDK_PIXBUF, and define GDK_PIXBUF_CFLAGS and GDK_PIXBUF_LIBS
+dnl
+AC_DEFUN(AM_PATH_GDK_PIXBUF,
+[dnl
+dnl Get the cflags and libraries from the gdk-pixbuf-config script
+dnl
+AC_ARG_WITH(gdk-pixbuf-prefix,[ --with-gdk-pixbuf-prefix=PFX Prefix where GDK_PIXBUF is installed (optional)],
+ gdk_pixbuf_prefix="$withval", gdk_pixbuf_prefix="")
+AC_ARG_WITH(gdk-pixbuf-exec-prefix,[ --with-gdk-pixbuf-exec-prefix=PFX Exec prefix where GDK_PIXBUF is installed (optional)],
+ gdk_pixbuf_exec_prefix="$withval", gdk_pixbuf_exec_prefix="")
+AC_ARG_ENABLE(gdk_pixbuftest, [ --disable-gdk_pixbuftest Do not try to compile and run a test GDK_PIXBUF program],
+ , enable_gdk_pixbuftest=yes)
+
+ if test x$gdk_pixbuf_exec_prefix != x ; then
+ gdk_pixbuf_args="$gdk_pixbuf_args --exec-prefix=$gdk_pixbuf_exec_prefix"
+ if test x${GDK_PIXBUF_CONFIG+set} = xset ; then
+ GDK_PIXBUF_CONFIG=$gdk_pixbuf_exec_prefix/gdk-pixbuf-config
+ fi
+ fi
+ if test x$gdk_pixbuf_prefix != x ; then
+ gdk_pixbuf_args="$gdk_pixbuf_args --prefix=$gdk_pixbuf_prefix"
+ if test x${GDK_PIXBUF_CONFIG+set} = xset ; then
+ GDK_PIXBUF_CONFIG=$gdk_pixbuf_prefix/bin/gdk-pixbuf-config
+ fi
+ fi
+
+ AC_PATH_PROG(GDK_PIXBUF_CONFIG, gdk-pixbuf-config, no)
+ min_gdk_pixbuf_version=ifelse([$1], ,0.2.5,$1)
+ AC_MSG_CHECKING(for GDK_PIXBUF - version >= $min_gdk_pixbuf_version)
+ no_gdk_pixbuf=""
+ if test "$GDK_PIXBUF_CONFIG" = "no" ; then
+ no_gdk_pixbuf=yes
+ else
+ GDK_PIXBUF_CFLAGS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --cflags`
+ GDK_PIXBUF_LIBS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --libs`
+
+ gdk_pixbuf_major_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ gdk_pixbuf_minor_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ gdk_pixbuf_micro_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_gdk_pixbuftest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS"
+ LIBS="$LIBS $GDK_PIXBUF_LIBS"
+dnl
+dnl Now check if the installed GDK_PIXBUF is sufficiently new. (Also sanity
+dnl checks the results of gdk-pixbuf-config to some extent
+dnl
+ rm -f conf.gdk_pixbuftest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main ()
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ system ("touch conf.gdk_pixbuftest");
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_gdk_pixbuf_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_gdk_pixbuf_version");
+ exit(1);
+ }
+
+ if (($gdk_pixbuf_major_version > major) ||
+ (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version > minor)) ||
+ (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version == minor) && ($gdk_pixbuf_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'gdk-pixbuf-config --version' returned %d.%d.%d, but the minimum version\n", $gdk_pixbuf_major_version, $gdk_pixbuf_minor_version, $gdk_pixbuf_micro_version);
+ printf("*** of GDK_PIXBUF required is %d.%d.%d. If gdk-pixbuf-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If gdk-pixbuf-config was wrong, set the environment variable GDK_PIXBUF_CONFIG\n");
+ printf("*** to point to the correct copy of gdk-pixbuf-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_gdk_pixbuf=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_gdk_pixbuf" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$GDK_PIXBUF_CONFIG" = "no" ; then
+ echo "*** The gdk-pixbuf-config script installed by GDK_PIXBUF could not be found"
+ echo "*** If GDK_PIXBUF was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the GDK_PIXBUF_CONFIG environment variable to the"
+ echo "*** full path to gdk-pixbuf-config."
+ else
+ if test -f conf.gdk_pixbuftest ; then
+ :
+ else
+ echo "*** Could not run GDK_PIXBUF test program, checking why..."
+ CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS"
+ LIBS="$LIBS $GDK_PIXBUF_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding GDK_PIXBUF or finding the wrong"
+ echo "*** version of GDK_PIXBUF. If it is not finding GDK_PIXBUF, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means GDK_PIXBUF was incorrectly installed"
+ echo "*** or that you have moved GDK_PIXBUF since it was installed. In the latter case, you"
+ echo "*** may want to edit the gdk-pixbuf-config script: $GDK_PIXBUF_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ GDK_PIXBUF_CFLAGS=""
+ GDK_PIXBUF_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(GDK_PIXBUF_CFLAGS)
+ AC_SUBST(GDK_PIXBUF_LIBS)
+ rm -f conf.gdk_pixbuftest
+])
diff --git a/ac/missing/gettext.m4 b/ac/missing/gettext.m4
new file mode 100644
index 00000000..a374f03f
--- /dev/null
+++ b/ac/missing/gettext.m4
@@ -0,0 +1,487 @@
+# gettext.m4 serial 28 (gettext-0.13)
+dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License. As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
+ define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Set USE_NLS.
+ AM_NLS
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH(included-gettext,
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ dnl Add a version number to the cache macros.
+ define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
+ define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+ define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+ [AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ gt_cv_func_gnugettext_libc=yes,
+ gt_cv_func_gnugettext_libc=no)])
+
+ if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ gt_cv_func_gnugettext_libintl,
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+ gt_cv_func_gnugettext_libintl=yes,
+ gt_cv_func_gnugettext_libintl=no)
+ dnl Now see whether libintl exists and depends on libiconv.
+ if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_func_gnugettext_libintl=yes
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if test "$gt_cv_func_gnugettext_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE(ENABLE_NLS, 1,
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE(HAVE_GETTEXT, 1,
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE(HAVE_DCGETTEXT, 1,
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
+ AC_SUBST(USE_INCLUDED_LIBINTL)
+ AC_SUBST(CATOBJEXT)
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST(INTLOBJS)
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST(INTLLIBS)
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST(LIBINTL)
+ AC_SUBST(LTLIBINTL)
+ AC_SUBST(POSUB)
+])
+
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_ISC_POSIX])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_C_CONST])dnl
+ AC_REQUIRE([bh_C_SIGNED])dnl
+ AC_REQUIRE([AC_C_INLINE])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl
+ AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+ AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+ AC_REQUIRE([gt_TYPE_WINT_T])dnl
+ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+ AC_REQUIRE([gt_TYPE_INTMAX_T])
+ AC_REQUIRE([gt_PRINTF_POSIX])
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([jm_GLIBC21])dnl
+ AC_REQUIRE([gt_INTDIV0])dnl
+ AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
+ AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
+ AC_REQUIRE([gt_INTTYPES_PRI])dnl
+ AC_REQUIRE([gl_XSIZE])dnl
+
+ AC_CHECK_TYPE([ptrdiff_t], ,
+ [AC_DEFINE([ptrdiff_t], [long],
+ [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+ ])
+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+ AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking])
+
+ dnl Use the _snprintf function only if it is declared (because on NetBSD it
+ dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+ gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+ gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+ dnl Use the *_unlocked functions only if they are declared.
+ dnl (because some of them were defined without being declared in Solaris
+ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+ dnl on Solaris 2.5.1 to run on Solaris 2.6).
+ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+ gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+ AC_SUBST([HAVE_POSIX_PRINTF])
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+ AC_SUBST([HAVE_ASPRINTF])
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+ AC_SUBST([HAVE_SNPRINTF])
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+ AC_SUBST([HAVE_WPRINTF])
+
+ AM_ICONV
+ AM_LANGINFO_CODESET
+ if test $ac_cv_header_locale_h = yes; then
+ AM_LC_MESSAGES
+ fi
+
+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+ dnl because plural.y uses bison specific features. It requires at least
+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+ dnl compile.
+ dnl bison is only needed for the maintainer (who touches plural.y). But in
+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+ dnl the rule in general Makefile. Now, some people carelessly touch the
+ dnl files or have a broken "make" program, hence the plural.c rule will
+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+ dnl present or too old.
+ AC_CHECK_PROGS([INTLBISON], [bison])
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ dnl Found it, now check the version.
+ AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+ [AC_TRY_COMPILE([$2], [
+#ifndef $1
+ char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+ if test $ac_cv_have_decl_$1 = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+ [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/ac/missing/gpgme.m4 b/ac/missing/gpgme.m4
new file mode 100644
index 00000000..e3b82d1c
--- /dev/null
+++ b/ac/missing/gpgme.m4
@@ -0,0 +1,69 @@
+dnl Autoconf macros for libgpgme
+dnl $Id: gpgme.m4,v 1.5 2002/08/23 19:48:30 werner Exp $
+
+
+dnl AM_PATH_GPGME([MINIMUM-VERSION,
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS
+dnl
+AC_DEFUN(AM_PATH_GPGME,
+[ AC_ARG_WITH(gpgme-prefix,
+ AC_HELP_STRING([--with-gpgme-prefix=PFX],
+ [prefix where GPGME is installed (optional)]),
+ gpgme_config_prefix="$withval", gpgme_config_prefix="")
+ if test x$gpgme_config_prefix != x ; then
+ gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix"
+ if test x${GPGME_CONFIG+set} != xset ; then
+ GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config
+ fi
+ fi
+
+ AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no)
+ min_gpgme_version=ifelse([$1], ,0.3.9,$1)
+ AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
+ ok=no
+ if test "$GPGME_CONFIG" != "no" ; then
+ req_major=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+ req_minor=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+ req_micro=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+ gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version`
+ major=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+ minor=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+ micro=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
+ if test "$major" -gt "$req_major"; then
+ ok=yes
+ else
+ if test "$major" -eq "$req_major"; then
+ if test "$minor" -gt "$req_minor"; then
+ ok=yes
+ else
+ if test "$minor" -eq "$req_minor"; then
+ if test "$micro" -ge "$req_micro"; then
+ ok=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test $ok = yes; then
+ GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags`
+ GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs`
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ GPGME_CFLAGS=""
+ GPGME_LIBS=""
+ AC_MSG_RESULT(no)
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(GPGME_CFLAGS)
+ AC_SUBST(GPGME_LIBS)
+])
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 00000000..8f52ed75
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+aclocal -I ac \
+ && libtoolize --force --copy \
+ && autoheader \
+ && automake --add-missing --foreign --copy \
+ && autoconf \
+ && ./configure $@
diff --git a/config.guess b/config.guess
new file mode 100755
index 00000000..82294713
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1453 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+timestamp='2004-11-12'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ amd64:OpenBSD:*:*)
+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ cats:OpenBSD:*:*)
+ echo arm-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ luna88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:MirBSD:*:*)
+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit 0 ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit 0 ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7 && exit 0 ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && exit 0
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ x86:Interix*:[34]*)
+ echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ exit 0 ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit 0 ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit 0 ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit 0 ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit 0 ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ *86) UNAME_PROCESSOR=i686 ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit 0 ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms && exit 0 ;;
+ I*) echo ia64-dec-vms && exit 0 ;;
+ V*) echo vax-dec-vms && exit 0 ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 00000000..4db13e50
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,548 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2003 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux*)
+ case $CC in
+ icc|ecc)
+ wl='-Wl,'
+ ;;
+ ccc)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ case "$host_os" in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = yes; then
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ hardcode_direct=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10* | hpux11*)
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4.2uw2*)
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ ;;
+ sysv5*)
+ hardcode_libdir_flag_spec=
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ ;;
+ aix4* | aix5*)
+ ;;
+ amigaos*)
+ ;;
+ beos*)
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ ;;
+ dgux*)
+ ;;
+ freebsd1*)
+ ;;
+ freebsd*)
+ ;;
+ gnu*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case "$host_cpu" in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux*)
+ ;;
+ netbsd*)
+ ;;
+ newsos6)
+ ;;
+ nto-qnx)
+ ;;
+ openbsd*)
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ ;;
+ osf3* | osf4* | osf5*)
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ ;;
+ sunos4*)
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 00000000..0f84ac2c
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1566 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+timestamp='2004-11-30'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | msp430 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | msp430-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16c)
+ basic_machine=cr16c-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure.in b/configure.in
new file mode 100644
index 00000000..36fc8713
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,359 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.50)
+AC_INIT(src/main.c)
+PACKAGE=sylpheed
+
+dnl version number
+MAJOR_VERSION=1
+MINOR_VERSION=1
+MICRO_VERSION=0
+INTERFACE_AGE=0
+BINARY_AGE=0
+EXTRA_VERSION=alpha1
+VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
+
+dnl set $target
+AC_CANONICAL_SYSTEM
+
+dnl
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
+dnl AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+dnl AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+
+dnl libtool versioning
+LT_RELEASE=$MAJOR_VERSION.$MINOR_VERSION
+LT_CURRENT=`expr $MICRO_VERSION - $INTERFACE_AGE`
+LT_REVISION=$INTERFACE_AGE
+LT_AGE=`expr $BINARY_AGE - $INTERFACE_AGE`
+AC_SUBST(LT_RELEASE)
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+
+dnl Specify a header configuration file
+AM_CONFIG_HEADER(config.h)
+
+AM_MAINTAINER_MODE
+
+dnl Checks for programs.
+dnl AC_ARG_PROGRAM
+AC_PROG_CC
+AC_ISC_POSIX
+AM_PROG_CC_STDC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_CPP
+dnl AC_PROG_RANLIB
+AM_PROG_LEX
+AC_PROG_YACC
+AM_PROG_LIBTOOL
+
+SYLPHEED_ACLOCAL_INCLUDE(ac)
+
+case "$target" in
+*-darwin*)
+ CFLAGS="$CFLAGS -traditional-cpp -fno-common"
+ ;;
+esac
+
+dnl checks for iconv
+AM_ICONV
+
+dnl
+dnl Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
+dnl
+syl_save_LIBS=$LIBS
+LIBS="$LIBS $GTK_LIBS"
+AC_CHECK_FUNCS(bind_textdomain_codeset)
+LIBS=$syl_save_LIBS
+
+dnl for gettext
+ALL_LINGUAS="bg cs da de el es et fr gl hr hu it ja ko nl pl pt_BR ro ru sk sl sr sv tr uk zh_CN zh_TW.Big5"
+GETTEXT_PACKAGE=sylpheed
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define text domain.])
+dnl AM_GLIB_GNU_GETTEXT
+AM_GNU_GETTEXT
+dnl AC_CHECK_FUNC(gettext, AC_CHECK_LIB(intl, gettext))
+localedir='${prefix}/${DATADIRNAME}/locale'
+AC_SUBST(localedir)
+
+manualdir='${prefix}/${DATADIRNAME}/${PACKAGE}/manual'
+AC_SUBST(manualdir)
+faqdir='${prefix}/${DATADIRNAME}/${PACKAGE}/faq'
+AC_SUBST(faqdir)
+
+dnl Checks for libraries.
+PKG_CHECK_MODULES(GTK, \
+ [ glib-2.0 gthread-2.0 gdk-pixbuf-2.0 gtk+-2.0 ], ,
+ [ AC_MSG_ERROR(Test for GTK+-2.0 failed. See the file 'INSTALL' for help.) ])
+AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+
+dnl --disable-deprecated switch for GTK2 purification
+AC_ARG_ENABLE(deprecated, [ --disable-deprecated Disable deprecated GTK functions. ],
+ [GTK_CFLAGS="$GTK_CFLAGS -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"], [])
+
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(GTK_LIBS)
+
+dnl Check for built-in image view support
+AC_ARG_ENABLE(gdk-pixbuf,
+ [ --disable-gdk-pixbuf Do not use gdk-pixbuf],
+ [ac_cv_enable_gdk_pixbuf=$enableval], [ac_cv_enable_gdk_pixbuf=yes])
+
+if test "$ac_cv_enable_gdk_pixbuf" = yes; then
+ AC_DEFINE(HAVE_GDK_PIXBUF, 1, Define if you use gdk-pixbuf to support image view)
+fi
+
+dnl GPGME is used to support OpenPGP
+AC_ARG_ENABLE(gpgme,
+ [ --enable-gpgme Enable GnuPG support using GPGME [default=no]],
+ [ac_cv_enable_gpgme=$enableval], [ac_cv_enable_gpgme=no])
+AC_MSG_CHECKING([whether to use GPGME])
+if test $ac_cv_enable_gpgme = yes; then
+ AC_MSG_RESULT(yes)
+ AM_PATH_GPGME(0.3.10, AC_DEFINE(USE_GPGME, 1, Define if you use GPGME to support OpenPGP.),
+ [use_gpgme=no
+ ac_cv_enable_gpgme=no])
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl for JPilot support in addressbook
+dnl no check for libraries; these are dynamically loaded
+AC_ARG_ENABLE(jpilot,
+ [ --enable-jpilot Enable JPilot support [default=no]],
+ [ac_cv_enable_jpilot=$enableval], [ac_cv_enable_jpilot=no])
+AC_MSG_CHECKING([whether to use JPilot])
+if test "$ac_cv_enable_jpilot" = yes; then
+ AC_MSG_RESULT(yes)
+ AC_CHECK_HEADERS(pi-args.h pi-appinfo.h pi-address.h,
+ [ AC_DEFINE(USE_JPILOT, 1, Define if you want JPilot support in addressbook.) ],
+ [ ac_cv_enable_jpilot=no ])
+ if test "$ac_cv_enable_jpilot" = no; then
+ AC_CHECK_HEADERS(libpisock/pi-args.h libpisock/pi-appinfo.h libpisock/pi-address.h,
+ [ ac_cv_enable_jpilot=yes
+ AC_DEFINE(USE_JPILOT, 1, Define if you want JPilot support in addressbook.) ])
+ fi
+ AC_MSG_CHECKING([whether jpilot is available])
+ AC_MSG_RESULT($ac_cv_enable_jpilot)
+
+ if test "$ac_cv_enable_jpilot" = yes; then
+ LIBS="$LIBS -lpisock"
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl for LDAP support in addressbook
+dnl no check for libraries; dynamically loaded
+AC_ARG_ENABLE(ldap,
+ [ --enable-ldap Enable LDAP support [default=no]],
+ [ac_cv_enable_ldap=$enableval], [ac_cv_enable_ldap=no])
+AC_MSG_CHECKING([whether to use LDAP])
+if test "$ac_cv_enable_ldap" = yes; then
+ AC_MSG_RESULT(yes)
+
+ dnl check for available libraries, and pull them in
+ AC_CHECK_LIB(resolv, res_query, LDAP_LIBS="$LDAP_LIBS -lresolv")
+ AC_CHECK_LIB(socket, bind, LDAP_LIBS="$LDAP_LIBS -lsocket")
+ AC_CHECK_LIB(nsl, gethostbyaddr, LDAP_LIBS="$LDAP_LIBS -lnsl")
+ AC_CHECK_LIB(lber, ber_get_tag, LDAP_LIBS="$LDAP_LIBS -llber",,
+ $LDAP_LIBS)
+
+ dnl we need libpthread for sylpheed ldap, until we find
+ dnl a better way to handle ldap requests asynchronously...
+ AC_CHECK_LIB(pthread, pthread_create, LDAP_LIBS="$LDAP_LIBS -lpthread")
+
+ AC_CHECK_HEADERS(ldap.h lber.h pthread.h,
+ [ ac_cv_enable_ldap=yes ],
+ [ ac_cv_enable_ldap=no ])
+
+ if test "$ac_cv_enable_ldap" = yes; then
+ AC_CHECK_LIB(ldap, ldap_open,
+ [ ac_cv_enable_ldap=yes ],
+ [ ac_cv_enable_ldap=no ],
+ $LDAP_LIBS)
+ fi
+
+ AC_MSG_CHECKING([whether ldap library is available])
+ AC_MSG_RESULT($ac_cv_enable_ldap)
+
+ if test "$ac_cv_enable_ldap" = yes; then
+ CFLAGS="$CFLAGS `$GLIB_CONFIG --cflags gthread`"
+ LDAP_LIBS="$LDAP_LIBS -lldap `$GLIB_CONFIG --libs gthread`"
+ AC_DEFINE(USE_LDAP, 1, Define if you want LDAP support in addressbook.)
+ AC_SUBST(LDAP_LIBS)
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl Check for OpenSSL
+AC_ARG_ENABLE(ssl,
+ [ --enable-ssl Enable SSL support using OpenSSL [default=no]],
+ [ac_cv_enable_ssl=$enableval], [ac_cv_enable_ssl=no])
+AC_MSG_CHECKING([whether to use OpenSSL])
+if test $ac_cv_enable_ssl = yes; then
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING([if openssl is available])
+ LIBS="$LIBS -lssl -lcrypto"
+ AC_TRY_LINK([
+#include <openssl/opensslv.h>
+], [ return OPENSSL_VERSION_NUMBER; ],
+ [ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_SSL, 1, Define if you use OpenSSL to support SSL.) ],
+ [ AC_MSG_RESULT(no)
+ LIBS="$ac_save_LIBS"
+ ac_cv_enable_ssl=no ])
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl Check for X-Face support
+AC_ARG_ENABLE(compface,
+ [ --disable-compface Do not use compface (X-Face)],
+ [ac_cv_enable_compface=$enableval], [ac_cv_enable_compface=yes])
+if test "$ac_cv_enable_compface" = yes; then
+ AC_CHECK_LIB(compface, uncompface,,[ac_cv_enable_compface=no])
+fi
+
+AC_CHECK_LIB(xpg4, setlocale)
+
+dnl for GThread support (currently disabled)
+dnl AC_ARG_ENABLE(threads,
+dnl [ --enable-threads Enable multithread support [default=no]],
+dnl [use_threads=$enableval], [use_threads=no])
+
+AC_MSG_CHECKING([whether to use threads])
+if test x"$use_threads" = xyes ; then
+ AC_MSG_RESULT(yes)
+ if test ! -z `$GLIB_CONFIG --help 2>&1 |grep 'gthread'` ; then
+ CFLAGS="$CFLAGS `$GLIB_CONFIG --cflags gthread`"
+ LIBS="$LIBS `$GLIB_CONFIG --libs gthread`"
+ AC_DEFINE(USE_THREADS, 1, Whether to use multithread or not)
+ else
+ AC_MSG_ERROR([Sylpheed requires GThread from GLib to use threading.])
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl check for IPv6 option
+AC_ARG_ENABLE(ipv6,
+ [ --disable-ipv6 Disable IPv6 support],
+ [ac_cv_enable_ipv6=$enableval], [ac_cv_enable_ipv6=yes])
+
+dnl automated checks for IPv6 support.
+AC_MSG_CHECKING([whether to use IPv6])
+if test x"$ac_cv_enable_ipv6" = xyes; then
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING([for IPv6 support])
+ AC_CACHE_VAL(ac_cv_ipv6,[
+ AC_TRY_COMPILE([#define INET6
+ #include <sys/types.h>
+ #include <netinet/in.h>],
+ [int x = IPPROTO_IPV6; struct in6_addr a;],
+ ac_cv_ipv6=yes, ac_cv_ipv6=no)
+ ])
+ AC_MSG_RESULT($ac_cv_ipv6)
+ if test $ac_cv_ipv6 = yes; then
+ AC_DEFINE(INET6, 1, Define if you want IPv6 support.)
+ else
+ AC_MSG_WARN(*** IPv6 will not be supported ***)
+ ac_cv_enable_ipv6=no
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl Check for d_type member in struct dirent
+AC_MSG_CHECKING([whether struct dirent has d_type member])
+AC_CACHE_VAL(ac_cv_dirent_d_type,[
+ AC_TRY_COMPILE([#include <dirent.h>],
+ [struct dirent d; d.d_type = DT_REG;],
+ ac_cv_dirent_d_type=yes, ac_cv_dirent_d_type=no)
+])
+AC_MSG_RESULT($ac_cv_dirent_d_type)
+if test $ac_cv_dirent_d_type = yes; then
+ AC_DEFINE(HAVE_DIRENT_D_TYPE, 1,
+ Define if `struct dirent' has `d_type' member.)
+fi
+
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(fcntl.h sys/file.h unistd.h paths.h \
+ sys/param.h sys/utsname.h sys/select.h \
+ wchar.h wctype.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_STRUCT_TM
+
+dnl AC_CHECK_TYPE(wint_t, unsigned int) does not work because wint_t
+dnl may be defined only in wchar.h (this happens with gcc-2.96).
+dnl So we need to use this extended macro.
+SYLPHEED_CHECK_TYPE(wint_t, unsigned int,
+[
+#if HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+], Define to `unsigned int' if <stddef.h> or <wchar.h> doesn't define.)
+
+GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF, Used to test for a u32 typedef)
+AC_CHECK_SIZEOF(unsigned short, 2)
+AC_CHECK_SIZEOF(unsigned int, 4)
+AC_CHECK_SIZEOF(unsigned long, 4)
+
+dnl Checks for library functions.
+AC_FUNC_ALLOCA
+AC_CHECK_FUNCS(gethostname mkdir mktime socket strstr strchr \
+ wcsstr wcswcs iswalnum iswspace towlower \
+ wcslen wcscpy wcsncpy \
+ uname flock lockf inet_aton inet_addr \
+ fchmod mkstemp)
+
+AC_OUTPUT([
+Makefile
+sylpheed.spec
+intl/Makefile
+ac/Makefile
+po/Makefile.in
+src/version.h
+src/Makefile
+faq/Makefile
+faq/de/Makefile
+faq/en/Makefile
+faq/es/Makefile
+faq/fr/Makefile
+faq/it/Makefile
+manual/Makefile
+manual/en/Makefile
+manual/ja/Makefile
+])
+
+dnl Output the configuration summary
+echo ""
+echo "$PACKAGE $VERSION"
+echo ""
+echo "image support : $ac_cv_enable_gdk_pixbuf"
+echo "GnuPG : $ac_cv_enable_gpgme"
+echo "JPilot : $ac_cv_enable_jpilot"
+echo "LDAP : $ac_cv_enable_ldap"
+echo "OpenSSL : $ac_cv_enable_ssl"
+echo "iconv : $am_cv_func_iconv"
+echo "compface : $ac_cv_enable_compface"
+echo "IPv6 : $ac_cv_enable_ipv6"
+echo ""
+echo "The binary will be installed in $prefix/bin"
+echo ""
+echo "Configure finished, type 'make' to build."
diff --git a/faq/Makefile.am b/faq/Makefile.am
new file mode 100644
index 00000000..d69aa494
--- /dev/null
+++ b/faq/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = de en es fr it
diff --git a/faq/de/Makefile.am b/faq/de/Makefile.am
new file mode 100644
index 00000000..74ba3849
--- /dev/null
+++ b/faq/de/Makefile.am
@@ -0,0 +1,11 @@
+faqdatadir = $(faqdir)/de
+
+faqdata_DATA = \
+ sylpheed-faq-1.html \
+ sylpheed-faq-2.html \
+ sylpheed-faq-3.html \
+ sylpheed-faq.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(faqdata_DATA)
diff --git a/faq/de/sylpheed-faq-1.html b/faq/de/sylpheed-faq-1.html
new file mode 100644
index 00000000..059e3dbe
--- /dev/null
+++ b/faq/de/sylpheed-faq-1.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Allgemeine Informationen</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=next>
+
+ <LINK HREF="sylpheed-faq.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-2.html">Weiter</A>
+Zurck
+<A HREF="sylpheed-faq.html#toc1">Inhalt</A>
+<HR>
+<H2><A NAME="s1">1. Sylpheed FAQ - Allgemeine Informationen</A></H2>
+
+<H2><A NAME="ss1.1">1.1 Frage 01: Gibt es FAQs in anderen Sprachen?</A>
+</H2>
+
+<P>Antwort: Ja. Hier sind Links zu verschiedenen bersetzungen der FAQs (&quot;Frequently Asked Questions&quot;, oft gestellte Fragen inklusive Antworten):
+<UL>
+<LI>
+<A HREF="http://www.enseirb.fr/~dinh/sylpheed/sylpheed-sylpheed-faq-fr.html">Franzsische SYLPHEED FAQ</A> Dank an DINH V. Hoa</LI>
+<LI>
+<A HREF="http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm">Japanische SYLPHEED FAQ</A> Dank an WAKAI "SilverRain" Kazunao</LI>
+<LI>
+<A HREF="http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html">Italienische SYLPHEED FAQ</A> Dank an Maurizio Codogno</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html">Deutsche SYLPHEED FAQ</A> HTML-Version und</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.txt">Deutsche SYLPHEED FAQ</A>, Text-Version, fr beide Dank an Ralf Schiffers</LI>
+<LI>
+<A HREF="http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html">Griechische SYLPHEED FAQ</A> Dank an Theofilos Intzoglou</LI>
+<LI>
+<A HREF="http://sylpheed.republika.pl">Polnische SYLPHEED FAQ</A> Dank an Przemyslaw Sulek</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedsylpheed-faq.html">Spanische SYLPHEED FAQ</A> HTML-Version, und</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedfaq.txt">Spanische SYLPHEED FAQ</A> Text-Version, Dank an Marcelo Ramos, und</LI>
+<LI>
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/">Spanische SYLPHEED FAQ</A>, Verlinkte HTML-Version, Dank an Ricardo Mones Lastra</LI>
+<LI>
+<A HREF="http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html">Schwedische SYLPHEED FAQ</A>, Dank an Mattias Stergren</LI>
+</UL>
+
+Die offizielle Homepage des Sylpheed Dokumentationsprojektes, mit FAQ und Handbuch in mehreren Sprachen befindet sich auf
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A><H2><A NAME="ss1.2">1.2 Frage 02: Was ist Sylpheed?</A>
+</H2>
+
+<P>Antwort: Sylpheed ist ein E-Mail Client (und Newsreader) basierend auf
+GTK+, fr das X Window System.
+Ziele bei der Entwicklung von Sylpheed sind
+<UL>
+<LI>Effizienz und Ressourcenschonung</LI>
+<LI>Schnelligkeit</LI>
+<LI>intuitive Bedienung</LI>
+<LI>einfache Konfigurierbarkeit</LI>
+<LI>eine Flle von Features und Optionen</LI>
+<LI>unter einer eleganten Oberflche</LI>
+</UL>
+<H2><A NAME="ss1.3">1.3 Frage 03: Woher bekomme ich Sylpheed?</A>
+</H2>
+
+<P>Antwort: Man bekommt Sylpheed auf <CODE>
+<A HREF="http://sylpheed.good-day.net">sylpheed.good-day.net</A></CODE>
+Hier findet man Links auf die Quellen als Tarball, und auf Seiten mit
+RPMs (fr SuSE, Redhat, Mandrake, etc.), DEB-Paketen fr Debian, und Paketen fr Solaris und BSD.
+<H2><A NAME="ss1.4">1.4 Frage 04: Wer entwickelt Sylpheed?</A>
+</H2>
+
+<P>Antwort: Hiroyuki Yamamoto (<CODE>hiro-y@kcn.ne.jp</CODE>)
+<H2><A NAME="ss1.5">1.5 Frage 05: Was bedeutet der Name Sylpheed?</A>
+</H2>
+
+<P>Antwort: Er bedeutet 'leicht wie Luft'. Er entstammt dem Namen der Windgeister, den Sylphen.
+<H2><A NAME="ss1.6">1.6 Frage 06: Wie speichert Sylpheed Nachrichten?</A>
+</H2>
+
+<P>Antwort: Sylpheed speichert Nachrichten im MH-Format, so wie es von MH und EMH benutzt wird.
+Maildir und mbox-Format werden (noch) nicht untersttzt, man kann mbox-Dateien aber direkt
+importieren.
+<H2><A NAME="ss1.7">1.7 Frage 07: Wieso funktioniert das automatische Abholen der Nachrichten nicht?</A>
+</H2>
+
+<P>Antwort: Das automatische Abholen funktioniert seit Version 0.5.1. Wer es bentigt,
+sollte keine ltere Version verwenden.
+<H2><A NAME="ss1.8">1.8 Frage 08: Kann Sylpheed Nachrichten filtern?</A>
+</H2>
+
+<P>Antwort: Ja. Der entsprechende Dialog befindet sich in &quot;Einstellungen -&gt; Filterung&quot;.
+Fr IMAP-Accounts ist (noch) keine Filterung implementiert.
+<H2><A NAME="ss1.9">1.9 Frage 09: Kann Sylpheed auf IMAP-Server zugreifen?</A>
+</H2>
+
+<P>Antwort: Ja, seit Version 0.4.99 wird IMAP untersttzt.
+<H2><A NAME="ss1.10">1.10 Frage 10: Kann Sylpheed lokale Unix Mailboxen abfragen?</A>
+</H2>
+
+<P>Antwort: Ja.
+<H2><A NAME="ss1.11">1.11 Frage 11: Untersttzt Sylpheed IPv6?</A>
+</H2>
+
+<P>Antwort: Ja, IPv6 wird von Sylpheed voll untersttzt.
+<H2><A NAME="ss1.12">1.12 Frage 12: Untersttzt Sylpheed digitale Signaturen und Verschlsselung mit GPG?</A>
+</H2>
+
+<P>Antwort: Ja. GPG wird untersttzt. Um es zu verwenden, siehe Frage 14 im Abschnitt Installieren.
+<H2><A NAME="ss1.13">1.13 Frage 13: Wie erkennt Sylpheed MIME Typen?</A>
+</H2>
+
+<P>Antwort: Sylpheed erkennt MIME Typen so wie Mutt.
+<H2><A NAME="ss1.14">1.14 Frage 14: Kann ich mit Sylpheed auch HTML-Nachrichten senden?</A>
+</H2>
+
+<P>Antwort: Nein. Reifliche Diskussionen ergaben, da HTML-Nachrichten generell unerwnscht sind.
+Wer es wirklich will, kann HTML-Seiten als Anhang an seine Nachrichten heften.
+Zustzlich finden sich verschiedene Patches fr erweiterte HTML-Verarbeitung auf den
+Sylpheed Patch Seiten (siehe weiter unten).
+<H2><A NAME="ss1.15">1.15 Frage 15: Besitzt Sylpheed eine Autovervollstndigung in Adressfeldern?</A>
+</H2>
+
+<P>Antwort: Ja. Sucht man nach einem Namen, der mit "<CODE>don</CODE>" beginnt,
+gibt man "<CODE>don</CODE>" ein (ohne Anfhrungszeichen) und drckt die TAB-Taste.
+Gibt es nur einen Namen mit "don" im Adressbuch, so wird dieser nun angezeigt,
+gibt es mehrere, so werden diese in einer Dropdown-Liste angezeigt.
+Das funktioniert sowohl mit Namen, wie auch mit E-Mail-Adressen.
+<H2><A NAME="ss1.16">1.16 Frage 16: Gut, aber wenn ich die TAB-Taste drcke, werden keine Namen angezeigt.</A>
+</H2>
+
+<P>Antwort: Um die Autovervollstndigung zu benutzen, mssen die Namen zunchst im
+Adressbuch eingetragen sein. Sonst geht's nicht.
+<H2><A NAME="ss1.17">1.17 Frage 17: Warum ist Sylpheed so schnell?</A>
+</H2>
+
+<P>Antwort: Dazu wurde es entwickelt!
+<H2><A NAME="ss1.18">1.18 Frage 18: Wo bekomme ich aktuelle Patches fr Sylpheed?</A>
+</H2>
+
+<P>Antwort: Auf der Sylpheed Patch Homepage:
+<CODE>
+<A HREF="http://www.teledix.net/sylpheed/">http://www.teledix.net/sylpheed/</A></CODE>
+<P>(Siehe auch im Abschnitt &quot;Installieren&quot;, wie man einen Patch anwendet)
+<H2><A NAME="ss1.19">1.19 Frage 19: Wohin schicke ich Patches, Fehlermeldungen, oder rede mit anderen Benutzern ber Sylpheed?</A>
+</H2>
+
+<P>Antwort: Um mit anderen Benutzern ber Sylpheed zu reden, abonniert man am besten die Sylpheed Mailingliste auf <CODE>http://sylpheed.good-day.net</CODE>. Hier kann man zwischen einer englischen und einer japanischen Mailingliste whlen.
+Will man die Welt mit Patches beglcken, so wendet man sich am besten an den Verwalter der Sylpheed Patch Homepage, <CODE>sylpheed@thewildbeast.co.uk</CODE>.
+<H2><A NAME="ss1.20">1.20 Frage 20: Wenn ich Nachrichten versende, wieso steht in der &quot;Content-Type&quot;-Kopfzeile US-ASCII, obwohl ich ISO-8859-1 angegeben habe?</A>
+</H2>
+
+<P>Antwort: Wenn keine ISO-8859-1 Zeichen (>= 0x80) im Text enthalten sind, wird als Zeichensatz automatisch US-ASCII verwendet, gem籖 einem Grundprinzip der Kommunikation, Informationen immer auf dem niedrigst ntigen technischen Nenner anzubieten.
+<H2><A NAME="ss1.21">1.21 Frage 21: Warum habe ich das Gefhl, da der Zeilenumbruch nicht funktioniert?</A>
+</H2>
+
+<P>Antwort: Zeilenumbrche sind etwas gewhnungsbedrftig.
+<P>Harte Zeilenumbrche knnen zwar jederzeit eingefgt werden, man kann
+aber prinzipiell beliebig lange Zeilen schreiben.
+Mit der Taste &quot;Zeilenumbruch&quot; knnen die Zeilen auf die eingestellte
+Zeilenlnge umgebrochen werden. Andernfalls geschieht dies automatisch, sobald
+die Nachricht abgesandt wird, oder in die Queue-Ablage kommt.
+Diese Vorgangsweise soll das Verfassen von Nachrichten vereinfachen.
+<P>Hierzu ein Beispiel, um den Vorteil zu illustrieren:
+<PRE>
+Diese lange, lange Zeile wird
+umgebrochen.
+</PRE>
+<P>Nun fgen wir in der ersten Zeile ein Wort ein:
+<PRE>
+Diese lange, lange Zeile wird
+hier
+umgebrochen.
+</PRE>
+
+Es wrde einige hndische Arbeit erfordern, um wieder zu
+einer anstndigen Formatierung zu gelangen.
+Diese Arbeit wird uns von Sylpheed abgenommen.
+<PRE>
+Diese lange, lange Zeile wird
+hier umgebrochen.
+</PRE>
+<H2><A NAME="ss1.22">1.22 Frage 22: Wo finde ich die neuesten FAQ fr Sylpheed?</A>
+</H2>
+
+<P>Antwort: Auf
+<A HREF="http://sylpheeddoc.sourceforge.net">sylpheeddoc.sourceforge.net</A> befinden sich FAQ und Handbuch des Sylpheeddoc Projektes. Beide Dokumente stehen in aktueller Version und mehreren Sprachen zur Verfgung.
+<H2><A NAME="ss1.23">1.23 Frage 23: Kann ich Mbox-Dateien in Sylpheed's MH Ablagen importieren?</A>
+</H2>
+
+<P>Antwort: Ja, man mu nur zuerst eine Ablage erstellen, in der Ablagenbersicht auswhlen und "Datei &gt; Importiere Mbox-Datei..." whlen.
+<H2><A NAME="ss1.24">1.24 Frage 24: Kann ich procmail benutzen, um meine Nachrichten in MH Ablagen zu sortieren?</A>
+</H2>
+
+<P>Antwort: Ja. Es ist nur notwendig, /. an die Adressen der MH Ablagen anzufgen, in den procmail Regeln. z.B.
+<P><CODE>0:</CODE>
+<P><CODE>* ^Subject:.*sylpheed</CODE>
+<P><CODE> sylpheedmail/.</CODE>
+<P>Nhere Einzelheiten findet man in der Dokumentation zu procmail.
+<H2><A NAME="ss1.25">1.25 Frage 25: Worauf sollte ich achten, wenn ich auf eine aktuelle Version von Sylpheed updaten will?</A>
+</H2>
+
+<P>Antwort:
+<UL>
+<LI>Upgrade auf 0.4.50: Rekonfiguration der Newsgruppen-Einstellungen wird empfohlen</LI>
+<LI>Upgrade auf 0.4.63: In den Einstellungen sollte die Farbe fr URLs angepasst werden</LI>
+<LI>Upgrade auf 0.4.65: Verschiedene Meneintrge wurden verschoben</LI>
+<LI>Upgrade auf 0.7.3: Viele Tastaturkrzel wurden gendert, und nun in Sets organisiert </LI>
+</UL>
+<H2><A NAME="ss1.26">1.26 Frage 26: Wie kann ich in Sylpheed die Ansicht schnell erneuern?</A>
+</H2>
+
+<P>Antwort: Mit &quot;Ansicht -&gt; Aktualisieren&quot;, oder dem entsprechenden Tastaturkrzel.
+<H2><A NAME="ss1.27">1.27 Frage 27: Warum kann ich gvim nicht als externen Editor verwenden?</A>
+</H2>
+
+<P>Antwort: Will man gvim als externen Editor verwenden, mu man es mit der no-fork Option starten, also in &quot;Einstellungen -&gt; Allgemeine Einstellungen&quot;, Reiter &quot;Weiteres&quot; &quot;gvim -f %s&quot; eintragen. Ansonsten forkt der Editor, ffnet ein eigenes Fenster, und bernimmt beim Beenden den Text nicht. (Danke, Ed Collins!)
+<HR>
+<A HREF="sylpheed-faq-2.html">Weiter</A>
+Zurck
+<A HREF="sylpheed-faq.html#toc1">Inhalt</A>
+</BODY>
+</HTML>
diff --git a/faq/de/sylpheed-faq-2.html b/faq/de/sylpheed-faq-2.html
new file mode 100644
index 00000000..02cd9a58
--- /dev/null
+++ b/faq/de/sylpheed-faq-2.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Installieren und Konfigurieren</TITLE>
+ <LINK HREF="sylpheed-faq-3.html" REL=next>
+ <LINK HREF="sylpheed-faq-1.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-3.html">Weiter</A>
+<A HREF="sylpheed-faq-1.html">Zurck</A>
+<A HREF="sylpheed-faq.html#toc2">Inhalt</A>
+<HR>
+<H2><A NAME="s2">2. Sylpheed FAQ - Installieren und Konfigurieren</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Frage 01: Was bentigt man um Sylpheed zu kompilieren?</A>
+</H2>
+
+<P>Antwort:
+<UL>
+<LI>Ein beliebiges, POSIX-konformes Unix, oder hnliches OS, z.B. Linux,
+FreeBSD, Solaris</LI>
+<LI>GTK+ 1.2.6 oder spter</LI>
+<LI>Ein gebruchlicher ANSI C Compiler (gcc 2.7.2.3 sollte reichen)</LI>
+</UL>
+
+Achtung: es wurde berichtet, da Sun C Sylpheed nicht kompiliert.
+<P>Optional:
+<UL>
+<LI>Imlib oder gdk-pixbuf (fr den eingebauten Bildbetrachter)</LI>
+<LI>libcompface (fr X-Faces)</LI>
+<LI>libjconv (fr I18N)</LI>
+<LI>GPGME (fr GnuPG, Signaturen und Verschlsselung)</LI>
+<LI>gegebenenfalls die entsprechenden GTK+-devel und Xfree86-devel.
+Ansonsten wird ./configure scheitern.</LI>
+</UL>
+<H2><A NAME="ss2.2">2.2 Frage 02: Wie konfiguriere ich Sylpheed?</A>
+</H2>
+
+<P>Antwort: Beim ersten Start von Sylpheed mu man angeben, wo man seine Nachrichten aufbewahren mchte. Voreingestellt ist $HOME/Mail. Man kan aber auch einen beliebigen, anderen, gltigen Verzeichnisnamen whlen. Sollten in diesem Verzeichnis aber bereits Dateien (nicht im MH-Format) existieren, mu man einen anderen Namen whlen.
+<P>Beim ersten Start werden auch automatisch Konfigurationsdateien im Verzeichnis $HOME/.sylpheed/ angelegt.
+<H2><A NAME="ss2.3">2.3 Frage 03: Wie konfiguriere ich einen Account?</A>
+</H2>
+
+<P>Antwort: Accounts knnen ber &quot;Einstellungen -&gt; Neuen Account erstellen...&quot; eingerichtet werden.
+<H2><A NAME="ss2.4">2.4 Frage 04: Wie viele Accounts kann ich in Sylpheed konfigurieren?</A>
+</H2>
+
+<P>Antwort: Sehr, sehr viele. Begrenzende Faktoren sind nur Festplattenkapazitt, verwendetes Filesystem oder hnliches.
+<H2><A NAME="ss2.5">2.5 Frage 05: Warum lscht Sylpheed meine E-Mails nicht, wenn ich &quot;Nachricht -&gt; Lschen&quot; drcke? Ich definiere einen Filter, aber Sylpheed filtert nicht. Ich habe eine Nachricht in eine andere Ablage verschoben, aber sie bewegt sich nicht.</A>
+</H2>
+
+<P>Antwort: Man mu auf &quot;Ausfhren&quot; klicken, oder in &quot;Einstellungen -&gt; Allgemeine Einstellungen&quot;, Reiter &quot;Benutzerschnittstelle&quot;, &quot;Sofort Ausfhren beim Bewegen oder Lschen&quot; whlen.
+<H2><A NAME="ss2.6">2.6 Frage 06: Kann ich spezielle Adressen/Ports fr meine Mailserver/Newsserver verwenden?</A>
+</H2>
+
+<P>Antwort: Ja, das geht. In den Accounteinstellungen knnen im Reiter "Einfach" die Adresse, und im Reiter "Speziell" die genauen Ports angegeben werden.
+<H2><A NAME="ss2.7">2.7 Frage 07: Kann Sylpheed Nachrichten in Threads darstellen?</A>
+</H2>
+
+<P>Antwort: Ja. Man kann diese Option in "Ansicht &gt; Threads einschalten" ein- und ausschalten.
+<H2><A NAME="ss2.8">2.8 Frage 08: Kann ich meine E-Mails in mehreren Ebenen von Unterablagen verwalten?</A>
+</H2>
+
+<P>Antwort: Sicher. Das ist kein Problem.
+<H2><A NAME="ss2.9">2.9 Frage 09: Warum verschickt Sylpheed meine Nachrichten nicht?</A>
+</H2>
+
+<P>Antwort: Man mu zumindest einen Account konfigurieren, um Nachrichten senden zu knnen.
+(Beim Installieren im LAN, nur mit lokaler Unix Mailbox, kann man darauf leicht vergessen).
+<H2><A NAME="ss2.10">2.10 Frage 10: Wie wende ich einen Patch an, nachdem ich ihn heruntergeladen habe?</A>
+</H2>
+
+<P>Antwort: Man kopiert den Patch ins Verzeichnis der Sylpheed-Sourcen, dann wendet man ihn wie folgt an:
+<P><CODE>% patch -p0 &lt; irgendein.patch</CODE>
+<P>Oder, wenn er als gz vorliegt:
+<P><CODE>% gzip -dc irgendein.patch.gz | patch -p0</CODE>
+<P>Nun das Kommando <CODE>./autogen.sh</CODE>, man lscht die Datei <CODE>/config.cache</CODE>
+(ausser man will in <CODE>/usr/local</CODE> installieren).
+<P>Dann ruft man <CODE>./configure</CODE> mit den gewnschten Optionen auf (fr die verfgbaren Optionen <CODE>./configure --help</CODE>), schlielich <CODE>make</CODE>.
+<H2><A NAME="ss2.11">2.11 Frage 11: Wie kompiliere ich Sylpheed mit compface Untersttzung (X-Faces)?</A>
+</H2>
+
+<P>Antwort: Man bentigt <CODE>libcompface</CODE>, um Sylpheed mit compface Untersttzung kompilieren zu knnen.
+<H2><A NAME="ss2.12">2.12 Frage 12: Wie kann ich ein eigenes compface Bild (X-Face) erzeugen?</A>
+</H2>
+
+<P>Antwort: Es gibt verschiedene Anwendungen fr das Konvertieren, wie das xbm2ikon Script aus dem faces-Paket, oder gif2xface aus den claws-tools.
+<P>Auerdem existiert dank Jeff Dairiki eine Online-Konvertierung, zusammen mit einem kompletten X-Face-Kurs auf
+<A HREF="http://www.dairiki.org/xface/">http://www.dairiki.org/xface/</A>.
+<H2><A NAME="ss2.13">2.13 Frage 13: Wie kann ich meinem Browser/einer anderen Anwendung ermglichen, Sylpheed als als E-Mail-Programm zu verwenden?</A>
+</H2>
+
+<P>Antwort: In den Einstellungen der anderen Anwendung gibt man <CODE>sylpheed --compose</CODE> an.
+<H2><A NAME="ss2.14">2.14 Frage 14: Wie bekomme ich GPG-Untersttzung in Sylpheed?</A>
+</H2>
+
+<P>Antwort: Mit einer aktuellen Version von GPGME gibt man beim Kompilieren von Sylpheed <CODE>--enable-gpgme</CODE> in der ./configure Anweisung an. Nach erfolgreichem Kompilieren sind die Reiter der &quot;Allgemeinen Einstellungen&quot; um den Reiter &quot;Privat&quot; bereichert.
+<H2><A NAME="ss2.15">2.15 Frage 15: Mutt erkennt Sylpheed's MH-Struktur nicht!</A>
+</H2>
+
+<P>Antwort: In diesem Fall sollte man den Befehl &quot;touch&quot; auf die Datei .xmhcache anwenden, die sich in jeder MH Ablage befindet. Dann sollte Mutt die Struktur erkennen knnen.
+<H2><A NAME="ss2.16">2.16 Frage 16: Das ffnen einer GIF-Datei in Sylpheed erzeugt einen Segmentation Fault.</A>
+</H2>
+
+<P>Antwort: Das kann durch folgenden Eintrag in /etc/mime.types behoben werden:
+<P><CODE>image/gif gif</CODE>
+<H2><A NAME="ss2.17">2.17 Frage 17: Wie kann ich mich von Sylpheed benachrichtigen lassen, wenn neue Nachrichten ankommen?</A>
+</H2>
+
+<P>Antwort: Dafr gibt es verschiedene Mglichkeiten:
+<UL>
+<LI>Es gibt einen Patch fr Sylpheed auf
+<A HREF="http://www.teledix.net/sylpheed/">http://www.teledix.net/sylpheed/</A> um neue Nachrichten anzuzeigen.</LI>
+<LI>Es gibt spezielle Anwendungen wie Gkrellm, KBiff oder KOrn, die neue Nachrichten anzeigen knnen. Gkrellm findet man auf
+<A HREF="http://www.gkrellm.net">http://www.gkrellm.net</A>, KBiff unter
+<A HREF="http://www.granroth.org/kbiff/">http://www.granroth.org/kbiff/</A>.</LI>
+</UL>
+<HR>
+<A HREF="sylpheed-faq-3.html">Weiter</A>
+<A HREF="sylpheed-faq-1.html">Zurck</A>
+<A HREF="sylpheed-faq.html#toc2">Inhalt</A>
+</BODY>
+</HTML>
diff --git a/faq/de/sylpheed-faq-3.html b/faq/de/sylpheed-faq-3.html
new file mode 100644
index 00000000..377611ce
--- /dev/null
+++ b/faq/de/sylpheed-faq-3.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Oberflche</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+Weiter
+<A HREF="sylpheed-faq-2.html">Zurck</A>
+<A HREF="sylpheed-faq.html#toc3">Inhalt</A>
+<HR>
+<H2><A NAME="s3">3. Sylpheed FAQ - Oberflche</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Frage 01: Wie kann ich Sylpheed in meiner Sprache anzeigen lassen?</A>
+</H2>
+
+<P>Antwort: Dafr mu man einige Umgebungsvariablen verndern, wie
+<CODE>LANG,LC_CTYPE, LC_MESSAGES</CODE> auf die gewnschte Sprache, z.B. de_AT.
+Normalerweise gengt es, <CODE>LANG</CODE> (oder <CODE>LC_ALL</CODE>) anzupassen.
+<H2><A NAME="ss3.2">3.2 Frage 02: Mir gefllt die voreingestellte Schriftart nicht. Kann ich sie ndern?</A>
+</H2>
+
+<P>Antwort: Ja. In &quot;Einstellungen -&gt; Allgemeine Einstellungen...&quot;, Reiter &quot;Anzeige&quot;.
+<H2><A NAME="ss3.3">3.3 Frage 03: Da sind zu viele Spalten in der Nachrichtenliste!</A>
+</H2>
+
+<P>Antwort: In &quot;Einstellungen -&gt; Allgemeine Einstellungen...&quot;, Reiter &quot;Anzeige&quot;,
+Setze Eintrge der Ablageninhaltsansicht. In diesem Dialog kann man die
+anzuzeigenden Informationen auswhlen.
+<H2><A NAME="ss3.4">3.4 Frage 04: Kann ich einen anderen Editor verwenden, um meine Nachrichten zu schreiben?</A>
+</H2>
+
+<P>Antwort: Ja. In &quot;Einstellungen -&gt; Allgemeine Einstellungen...&quot;, Reiter &quot;Weiteres&quot;,
+kann man unter &quot;Editor&quot; einen externen Editor whlen. Fr einen Kommandozeileneditor wie
+vi oder emacs mu man noch eine Shell (term, rxvt) angeben, z.B. <CODE>rxvt -e vi %s</CODE>
+<H2><A NAME="ss3.5">3.5 Frage 05: Wie kann ich die Schriftgre fr die Oberflche Sylpheed's verndern?</A>
+</H2>
+
+<P>Antwort: Die GTK+ Schriftart kann man in <CODE>~/.gtkrc</CODE> ndern, oder in
+<CODE>~/.gtkrc.mine</CODE>, (in <CODE>~/.gtkrc</CODE> enthalten).
+Zum Beispiel:
+<P><CODE>style &quot;default&quot;</CODE>
+<P><CODE>{</CODE>
+<P><CODE>font =</CODE>
+<P><CODE>&quot;-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1</CODE>
+<P><CODE>&quot;</CODE>
+<P><CODE>}</CODE>
+<P><CODE>widget_class &quot;*&quot; style &quot;default&quot;</CODE>
+<H2><A NAME="ss3.6">3.6 Frage 06: Sylpheed speichert meine gesendeten Nachrichten (in der Ablage &quot;Outbox&quot;). Wie kann ich das verhindern?</A>
+</H2>
+
+<P>Antwort: In &quot;Einstellungen -&gt; Allgemeine Einstellungen...&quot;, Reiter &quot;Senden&quot;, &quot;Gesendete Nachrichten in Outbox speichern&quot; deaktivieren. Das war's.
+<H2><A NAME="ss3.7">3.7 Frage 07: Wie kann ich die Tastaturkrzel in Sylpheed verndern?</A>
+</H2>
+
+<P>Antwort: Einfach. Um z.B. das Tastaturkrzel fr &quot;Ansicht -&gt; Zeige Quellen&quot;
+auf Strg+3 ndern, klickt man auf &quot;Ansicht&quot;, und fhrt mit der Maus ber
+&quot;Zeige Quellen&quot;, klickt aber nicht. Nun drckt man Strg+3, und sofort wird
+dies als neues Krzel angezeigt.
+<P>Sollte das Krzel fr eine andere Funktion eingetragen gewesen sein, so
+ist diese nun unbesetzt. Um ein Krzel zu lschen, drckt man statt einer
+Tastenkombination die &quot;Entf&quot;-Taste.
+<H2><A NAME="ss3.8">3.8 Frage 08: Kann ich Fenster auch ohne Maus schlieen?</A>
+</H2>
+
+<P>Antwort: Natrlich! Zwar nicht alle Fenster, aber die meisten lassen sich mit ESCape schlieen.
+Dazu gehren das Adressbuch, das Fenster zum Anzeigen des Quelltextes, oder der Kopfzeilen,
+und verschiedene andere. Ausprobieren.
+<H2><A NAME="ss3.9">3.9 Frage 09: Wie kann ich die Datumsanzeige in der Ablageninhaltsansicht verndern?</A>
+</H2>
+
+<P>Antwort: Seit Version 0.4.65 kann man die Datumsanzeige mit folgenden Optionen konfigurieren:
+%y = Jahr als Zahl %m = Monat als Zahl
+%d = Tag als Zahl %c = Datum/Zeit der Locale
+%A = Wochentagsname %a = Gekrzter Wochentagsname
+%B = Monatsname %b = Gekrzter Monatsname
+%H = Stunden (24h Anzeige) %I = Stunden (12h Anzeige)
+Genauere Informationen findet man unter
+&quot;Einstellungen -&gt; Allgemeine Einstellungen&quot;, Reiter &quot;Anzeige&quot;, Datumsformat &quot;...&quot;
+<H2><A NAME="ss3.10">3.10 Frage 10: Warum sehe ich keine compface Bilder (X-Faces)?</A>
+</H2>
+
+<P>Antwort: Dafr mu die Ansicht der Kopfzeilenleiste ber der Nachrichtenansicht aktiviert sein, &quot;Einstellungen -&gt; Allgemeine Einstellungen...&quot;, Reiter &quot;Nachricht&quot;, Zeige Kopfzeilenleiste ber Nachrichtenansicht.
+<H2><A NAME="ss3.11">3.11 Frage 11: Warum sehe ich immer noch keine X-Faces?</A>
+</H2>
+
+<P>Antwort: Mglicherweise wurde Sylpheed ohne Compface-Untersttzung kompiliert.
+Das erkennt man in &quot;Hilfe -&gt; ber&quot;, compiled-in features: libcompface. Siehe
+Frage 11 im Abschnitt Installieren/Konfigurieren.
+<H2><A NAME="ss3.12">3.12 Frage 12: Wieso ffnet die URL in der Nachricht nicht meinen Webbrowser?</A>
+</H2>
+
+<P>Antwort: Man mu die URL doppelclicken.
+<H2><A NAME="ss3.13">3.13 Frage 13: Ich kann Anhnge mit Leerzeichen im Namen nicht ffnen!</A>
+</H2>
+
+<P>Antwort: Versucht man einen Anhang an eine Hilfsanwendung zu bergeben,
+z.B. einen Videoplayer, und der Name des Anhangs enthlt Leerzeichen, dann mu man
+den %s Parameter mit ' schtzen: noatun '%s'
+<HR>
+Weiter
+<A HREF="sylpheed-faq-2.html">Zurck</A>
+<A HREF="sylpheed-faq.html#toc3">Inhalt</A>
+</BODY>
+</HTML>
diff --git a/faq/de/sylpheed-faq.html b/faq/de/sylpheed-faq.html
new file mode 100644
index 00000000..e24b14a1
--- /dev/null
+++ b/faq/de/sylpheed-faq.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ</TITLE>
+ <LINK HREF="sylpheed-faq-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-1.html">Weiter</A>
+Zurck
+Inhalt
+<HR>
+<H1>Sylpheed FAQ</H1>
+
+
+<H2>Paul Kater (paul@nlpagan.net)
+ <BR>Jens Oberender (j.obi@troja.net)
+ <BR>Nicolas Kaiser (nikai@nikai.net)
+ </H2>
+<P><HR>
+<EM> Sylpheed FAQ (fr Version 0.7.3)
+ </EM>
+<HR>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-faq-1.html">Sylpheed FAQ - Allgemeine Informationen</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-1.html#ss1.1">1.1 Frage 01: Gibt es FAQs in anderen Sprachen?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.2">1.2 Frage 02: Was ist Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.3">1.3 Frage 03: Woher bekomme ich Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.4">1.4 Frage 04: Wer entwickelt Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.5">1.5 Frage 05: Was bedeutet der Name Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.6">1.6 Frage 06: Wie speichert Sylpheed Nachrichten?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.7">1.7 Frage 07: Wieso funktioniert das automatische Abholen der Nachrichten nicht?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.8">1.8 Frage 08: Kann Sylpheed Nachrichten filtern?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.9">1.9 Frage 09: Kann Sylpheed auf IMAP-Server zugreifen?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.10">1.10 Frage 10: Kann Sylpheed lokale Unix Mailboxen abfragen?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.11">1.11 Frage 11: Untersttzt Sylpheed IPv6?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.12">1.12 Frage 12: Untersttzt Sylpheed digitale Signaturen und Verschlsselung mit GPG?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.13">1.13 Frage 13: Wie erkennt Sylpheed MIME Typen?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.14">1.14 Frage 14: Kann ich mit Sylpheed auch HTML-Nachrichten senden?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.15">1.15 Frage 15: Besitzt Sylpheed eine Autovervollstndigung in Adressfeldern?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.16">1.16 Frage 16: Gut, aber wenn ich die TAB-Taste drcke, werden keine Namen angezeigt.</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.17">1.17 Frage 17: Warum ist Sylpheed so schnell?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.18">1.18 Frage 18: Wo bekomme ich aktuelle Patches fr Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.19">1.19 Frage 19: Wohin schicke ich Patches, Fehlermeldungen, oder rede mit anderen Benutzern ber Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.20">1.20 Frage 20: Wenn ich Nachrichten versende, wieso steht in der &quot;Content-Type&quot;-Kopfzeile US-ASCII, obwohl ich ISO-8859-1 angegeben habe?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.21">1.21 Frage 21: Warum habe ich das Gefhl, da der Zeilenumbruch nicht funktioniert?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.22">1.22 Frage 22: Wo finde ich die neuesten FAQ fr Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.23">1.23 Frage 23: Kann ich Mbox-Dateien in Sylpheed's MH Ablagen importieren?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.24">1.24 Frage 24: Kann ich procmail benutzen, um meine Nachrichten in MH Ablagen zu sortieren?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.25">1.25 Frage 25: Worauf sollte ich achten, wenn ich auf eine aktuelle Version von Sylpheed updaten will?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.26">1.26 Frage 26: Wie kann ich in Sylpheed die Ansicht schnell erneuern?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.27">1.27 Frage 27: Warum kann ich gvim nicht als externen Editor verwenden?</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-faq-2.html">Sylpheed FAQ - Installieren und Konfigurieren</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-2.html#ss2.1">2.1 Frage 01: Was bentigt man um Sylpheed zu kompilieren?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.2">2.2 Frage 02: Wie konfiguriere ich Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.3">2.3 Frage 03: Wie konfiguriere ich einen Account?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.4">2.4 Frage 04: Wie viele Accounts kann ich in Sylpheed konfigurieren?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.5">2.5 Frage 05: Warum lscht Sylpheed meine E-Mails nicht, wenn ich &quot;Nachricht -&gt; Lschen&quot; drcke? Ich definiere einen Filter, aber Sylpheed filtert nicht. Ich habe eine Nachricht in eine andere Ablage verschoben, aber sie bewegt sich nicht.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.6">2.6 Frage 06: Kann ich spezielle Adressen/Ports fr meine Mailserver/Newsserver verwenden?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.7">2.7 Frage 07: Kann Sylpheed Nachrichten in Threads darstellen?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.8">2.8 Frage 08: Kann ich meine E-Mails in mehreren Ebenen von Unterablagen verwalten?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.9">2.9 Frage 09: Warum verschickt Sylpheed meine Nachrichten nicht?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.10">2.10 Frage 10: Wie wende ich einen Patch an, nachdem ich ihn heruntergeladen habe?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.11">2.11 Frage 11: Wie kompiliere ich Sylpheed mit compface Untersttzung (X-Faces)?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.12">2.12 Frage 12: Wie kann ich ein eigenes compface Bild (X-Face) erzeugen?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.13">2.13 Frage 13: Wie kann ich meinem Browser/einer anderen Anwendung ermglichen, Sylpheed als als E-Mail-Programm zu verwenden?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.14">2.14 Frage 14: Wie bekomme ich GPG-Untersttzung in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.15">2.15 Frage 15: Mutt erkennt Sylpheed's MH-Struktur nicht!</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.16">2.16 Frage 16: Das ffnen einer GIF-Datei in Sylpheed erzeugt einen Segmentation Fault.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.17">2.17 Frage 17: Wie kann ich mich von Sylpheed benachrichtigen lassen, wenn neue Nachrichten ankommen?</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-faq-3.html">Sylpheed FAQ - Oberflche</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-3.html#ss3.1">3.1 Frage 01: Wie kann ich Sylpheed in meiner Sprache anzeigen lassen?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.2">3.2 Frage 02: Mir gefllt die voreingestellte Schriftart nicht. Kann ich sie ndern?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.3">3.3 Frage 03: Da sind zu viele Spalten in der Nachrichtenliste!</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.4">3.4 Frage 04: Kann ich einen anderen Editor verwenden, um meine Nachrichten zu schreiben?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.5">3.5 Frage 05: Wie kann ich die Schriftgre fr die Oberflche Sylpheed's verndern?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.6">3.6 Frage 06: Sylpheed speichert meine gesendeten Nachrichten (in der Ablage &quot;Outbox&quot;). Wie kann ich das verhindern?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.7">3.7 Frage 07: Wie kann ich die Tastaturkrzel in Sylpheed verndern?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.8">3.8 Frage 08: Kann ich Fenster auch ohne Maus schlieen?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.9">3.9 Frage 09: Wie kann ich die Datumsanzeige in der Ablageninhaltsansicht verndern?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.10">3.10 Frage 10: Warum sehe ich keine compface Bilder (X-Faces)?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.11">3.11 Frage 11: Warum sehe ich immer noch keine X-Faces?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.12">3.12 Frage 12: Wieso ffnet die URL in der Nachricht nicht meinen Webbrowser?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.13">3.13 Frage 13: Ich kann Anhnge mit Leerzeichen im Namen nicht ffnen!</A>
+</UL>
+<HR>
+<A HREF="sylpheed-faq-1.html">Weiter</A>
+Zurck
+Inhalt
+</BODY>
+</HTML>
diff --git a/faq/en/Makefile.am b/faq/en/Makefile.am
new file mode 100644
index 00000000..2f011099
--- /dev/null
+++ b/faq/en/Makefile.am
@@ -0,0 +1,11 @@
+faqdatadir = $(faqdir)/en
+
+faqdata_DATA = \
+ sylpheed-faq-1.html \
+ sylpheed-faq-2.html \
+ sylpheed-faq-3.html \
+ sylpheed-faq.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(faqdata_DATA)
diff --git a/faq/en/sylpheed-faq-1.html b/faq/en/sylpheed-faq-1.html
new file mode 100644
index 00000000..e22eb0bd
--- /dev/null
+++ b/faq/en/sylpheed-faq-1.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - General information</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=next>
+
+ <LINK HREF="sylpheed-faq.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-2.html">Next</A>
+Previous
+<A HREF="sylpheed-faq.html#toc1">Contents</A>
+<HR>
+<H2><A NAME="s1">1. Sylpheed FAQ - General information</A></H2>
+
+<H2><A NAME="ss1.1">1.1 Q01 Are there FAQ's in other languages?</A>
+</H2>
+
+<P>A. Yes. Here are links to several translations:
+<UL>
+<LI>
+<A HREF="http://www.enseirb.fr/~dinh/sylpheed/sylpheed-sylpheed-faq-fr.html">SYLPHEED FAQ in French courtesy of DINH V. Hoa</A></LI>
+<LI>
+<A HREF="http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm">SYLPHEED FAQ in Japanese</A> courtesy of WAKAI "SilverRain" Kazunao</LI>
+<LI>
+<A HREF="http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html">SYLPHEED FAQ in Italian</A> courtesy of Maurizio Codogno</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html">SYLPHEED FAQ</A> in German (HTML-Version)</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.txt">the german text-only version</A>, both courtesy of Ralf Schiffers.</LI>
+<LI>
+<A HREF="http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html">SYLPHEED FAQ in Greek</A> courtesy of Theofilos Intzoglou.</LI>
+<LI>
+<A HREF="http://sylpheed.republika.pl">SYLPHEED FAQ in Polish</A> courtesy of Przemyslaw Sulek.</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedsylpheed-faq.html">HTML version</A> by Marcelo Ramos, also:</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedfaq.txt">Text version</A></LI>
+<LI>
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/">Linked HTML</A>, by Ricardo Mones Lastra, as well as</LI>
+<LI>
+<A HREF="http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html">Swedish FAQ</A>, courtesy of Mattias Stergren</LI>
+</UL>
+
+You can download this FAQ from
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A><H2><A NAME="ss1.2">1.2 Q02 What is Sylpheed?</A>
+</H2>
+
+<P>A. Sylpheed is an e-mail client (&amp; news reader) based on
+GTK+, running on the X Window System, and aiming for
+<UL>
+<LI>Quick response</LI>
+<LI>Graceful, and sophisticated interface</LI>
+<LI>Easy configuration, intuitive operation</LI>
+<LI>Abundant features</LI>
+</UL>
+<H2><A NAME="ss1.3">1.3 Q03 Where can I get Sylpheed?</A>
+</H2>
+
+<P>A. You can download it from <CODE>
+<A HREF="http://sylpheed.good-day.net">sylpheed.good-day.net</A></CODE>
+There are links to download the tarball sources, and
+also links to sites where you can download RPM's (for
+Redhat and Mandrake), DEB packages for Debian, and
+installations for Solaris and FreeBSD.
+<H2><A NAME="ss1.4">1.4 Q04 Who writes Sylpheed?</A>
+</H2>
+
+<P>A. Hiroyuki Yamamoto (<CODE>hiro-y@kcn.ne.jp</CODE>)
+<H2><A NAME="ss1.5">1.5 Q05 What does the name Sylpheed mean?</A>
+</H2>
+
+<P>A. It means 'light weight', like air. This comes from the
+name of the wind spirits, the Sylphs.
+<H2><A NAME="ss1.6">1.6 Q06 How does Sylpheed store mails?</A>
+</H2>
+
+<P>A. Mails are stored in the MH mailfile format as used by MH
+and EMH. Maildir and mbox format are not (yet)
+supported, although it is possible to import an mbox
+file into a Sylpheed mailbox.
+<H2><A NAME="ss1.7">1.7 Q07 Why does the auto collection of mail not work?</A>
+</H2>
+
+<P>A. Autocollection works since version 0.5.1. If you need it
+or want it, you should upgrade.
+<H2><A NAME="ss1.8">1.8 Q08 Does Sylpheed have mail filtering?</A>
+</H2>
+
+<P>A. Yes. You can find it in Configuration &gt; filtering tab.
+<P>Please note that filtering is not yet implemented for IMAP accounts.
+<H2><A NAME="ss1.9">1.9 Q09 Can Sylpheed handle IMAP mail?</A>
+</H2>
+
+<P>A. Yes. As of version 0.4.99 IMAP is supported.
+<H2><A NAME="ss1.10">1.10 Q10 Can Sylpheed handle local unix mailboxes?</A>
+</H2>
+
+<P>A. Yes.
+<H2><A NAME="ss1.11">1.11 Q11 Can Sylpheed handle IPv6?</A>
+</H2>
+
+<P>A. Yes, IPv6 is fully supported in Sylpheed.
+<H2><A NAME="ss1.12">1.12 Q12 Does Sylpheed support encryption like GPG?</A>
+</H2>
+
+<P>A. Yes. GPG is implemented and works fine. For activating it in Sylpheed, see Q14 in the Installation section.
+<H2><A NAME="ss1.13">1.13 Q13 How does Sylpheed check for MIME types?</A>
+</H2>
+
+<P>A. Sylpheed uses the Mutt type of mime checking.
+<H2><A NAME="ss1.14">1.14 Q14 Does Sylpheed allow me to write HTML styled messages?</A>
+</H2>
+
+<P>A. No. A discussion has gone around over this topic, and
+the outcome was that HTML mail is not wanted. If you
+really need to send HTML, you can of course attach a
+webpage to an e-mail. Several patches have been made to
+facilitate better HTML handling in Sylpheed. You can
+find these patches at the Sylpheed Patch Page (see
+further down in the document).
+<H2><A NAME="ss1.15">1.15 Q15 Does Sylpheed have name completion in the address fields?</A>
+</H2>
+
+<P>A. Yes. When you search for a name that starts with "<CODE>don</CODE>",
+type "<CODE>don</CODE>" (without the quotes) and press the TAB key.
+This will show you the correct name (when only one "don"
+exists in your addressbook. Otherwise a dropdown list
+appears, which allows you to select the name you want.
+E.g. Donald Duck, Don Johnson. But also e-mail addresses
+starting with "<CODE>don</CODE>" will appear in the list (like
+"<CODE>don.giovanni@maffia.org</CODE>").
+<H2><A NAME="ss1.16">1.16 Q16 Fine, but when I hit the TAB key I get an error message.</A>
+</H2>
+
+<P>A. When you want to use name completion, make sure that
+there are names in your address book. If there are no
+names, even Sylpheed has a hard time completing
+something.
+<H2><A NAME="ss1.17">1.17 Q17 Why is Sylpheed so fast?</A>
+</H2>
+
+<P>A. That's what it is designed for!
+<H2><A NAME="ss1.18">1.18 Q18 Where can I get the current patches for Sylpheed?</A>
+</H2>
+
+<P>A. The Sylpheed Patch homepage:
+<CODE>
+<A HREF="http://www.teledix.net/sylpheed/">The sylpheed patch homepage</A></CODE>
+(Also see section on Installation on how to install a
+patch)
+<H2><A NAME="ss1.19">1.19 Q19 How can I send in patches, report bugs, talk about Sylpheed with others?</A>
+</H2>
+
+<P>A. To talk to others, you should join the Sylpheed mailing
+list at <CODE>http://sylpheed.good-day.net</CODE>. Note that there is
+a japanese and an english list, so pick the right one!
+If you have made a patch that you want the world to know
+of, please get in touch with the manager of the Sylpheed
+Patch homepage, at <CODE>sylpheed@thewildbeast.co.uk</CODE>
+<H2><A NAME="ss1.20">1.20 Q20 When I send mail, the Content-Type header says the mail is in US-ASCII, even when I specified ISO-8859-1?</A>
+</H2>
+
+<P>A. If ISO-8859-1 characters (>= 0x80) are not used in the
+message body, Sylpheed will automatically set the
+charset value in the Content-Type header as US-ASCII.
+<H2><A NAME="ss1.21">1.21 Q21 Why does it look like word wrap is not working?</A>
+</H2>
+
+<P>A. Word wrapping is a bit peculiar perhaps. You can type
+lines as long as you like. By the time you send or queue
+a mail with long lines, Sylpheed will first wrap the
+lines to the line length you set up, and then the mail
+is queued. This is more convenient than you think. Once
+a line is wrapped (hard line breaks are inserted in the
+text) and you add something in a line there, the next
+line will move to a separate new line, leaving one or
+two words from the previous line "hanging there" alone.
+E.g.
+<PRE>
+ This is a long line
+ is wrapped.
+</PRE>
+<P>Now you add one word in the first line:
+<PRE>
+ This is a very long line
+ that
+ is wrapped
+</PRE>
+<P>This would cause you a lot of manual reformatting to get
+a presentable mail again.
+<H2><A NAME="ss1.22">1.22 Q22 Where can I find the latest FAQ on Sylpheed?</A>
+</H2>
+
+<P>A. Go to
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A> and check out the FAQ and manual from the sylpheeddoc project. Both documents are available in multiple languages there and usually contain the latest updates.
+<H2><A NAME="ss1.23">1.23 Q23 Can I import a mbox into Sylpheed's MH mailfolders?</A>
+</H2>
+
+<P>A. Yes, just create/select the folder you want your
+mails in, and select "Import mbox file" in the File
+menu.
+<H2><A NAME="ss1.24">1.24 Q24 Can I use procmail to sort my mails with the MH mail handling?</A>
+</H2>
+
+<P>A. Yes. Just make sure that you add /. to the end of a rule so procmail knows you are filtering into an MH mail folder. Example:
+<P><CODE>0:</CODE>
+<P><CODE>* ^Subject:.*sylpheed</CODE>
+<P><CODE> sylpheedmail/.</CODE>
+<P>Check man procmail for details.
+<H2><A NAME="ss1.25">1.25 Q25 When I upgrade Sylpheed, are there things I should be aware of?</A>
+</H2>
+
+<P>A. Yes!
+<P>Upgrade to 0.4.50: you should reconfigure your newsgroup settings
+<P>Upgrade to 0.4.63: you should set the URL string colors from the Configuration menu.
+<P>Upgrade to 0.4.65: some menu items have been moved
+<P>Upgrade to 0.7.3: many keybindings have changed
+<H2><A NAME="ss1.26">1.26 Q26 How can I quickly update the views in Sylpheed?</A>
+</H2>
+
+<P>A. Just press Alt-U or select "update" from the summary menu.
+<H2><A NAME="ss1.27">1.27 Q27 Why can't I use gvim as external editor?</A>
+</H2>
+
+<P>A. If one wishes to use gvim as an external editor it's necessary to start it with the no-fork option -f, i.e. in the configuration dialog box you need to enter "gvim -f %s". If not the editor forks and open up a separate file and when one quits the editor the changes are lost and don't show up in the composer window.
+<P>(Thanks, Ed Collins!)
+<HR>
+<A HREF="sylpheed-faq-2.html">Next</A>
+Previous
+<A HREF="sylpheed-faq.html#toc1">Contents</A>
+</BODY>
+</HTML>
diff --git a/faq/en/sylpheed-faq-2.html b/faq/en/sylpheed-faq-2.html
new file mode 100644
index 00000000..73b386cc
--- /dev/null
+++ b/faq/en/sylpheed-faq-2.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Installation and Configuration</TITLE>
+ <LINK HREF="sylpheed-faq-3.html" REL=next>
+ <LINK HREF="sylpheed-faq-1.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-3.html">Next</A>
+<A HREF="sylpheed-faq-1.html">Previous</A>
+<A HREF="sylpheed-faq.html#toc2">Contents</A>
+<HR>
+<H2><A NAME="s2">2. Sylpheed FAQ - Installation and Configuration</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Q01 What does it take to compile Sylpheed?</A>
+</H2>
+
+<P>A. Any POSIX compliant UNIX or similar OS eg. Linux,
+FreeBSD, Solaris
+GTK+ 1.2.6 or later
+A recent ANSI C compiler (gcc 2.7.2.3 should also
+work)
+Note: it is reported that Sun C will not compile
+Sylpheed.
+Optionally:
+<UL>
+<LI>Imlib or gdk-pixbuf (for built-in image view)</LI>
+<LI>libcompface (for X-Face)</LI>
+<LI>libjconv (for I18N)</LI>
+<LI>GPGME (for GnuPG)</LI>
+<LI>the equivalent of GTK+-devel and Xfree86-devel.</LI>
+</UL>
+
+Otherwise ./configure will fail.
+<H2><A NAME="ss2.2">2.2 Q02 How do I set up Sylpheed?</A>
+</H2>
+
+<P>A. When you run Sylpheed for the first time, it will
+ask you where you want to store your mailboxes. The
+default is &lt;homedir&gt;/Mail. You can change this to
+anything you like as long as it is a valid directory
+name.
+<P>Please note: When Sylpheed is executed for the first time, it automatically creates the configuration files under $HOME/.sylpheed/, and asks you the location of mailbox. The default is $HOME/Mail. If some files which are non-MH format already exist on the directory, you will have to specify another location.
+<H2><A NAME="ss2.3">2.3 Q03 How do I set up an account?</A>
+</H2>
+
+<P>A. After loading Sylpheed for the first time, you can
+add an e-mail account by clicking the
+"Configuration" menu. Select the option "Create new
+account" and fill in the appropriate fields.
+<H2><A NAME="ss2.4">2.4 Q04 How many accounts can I set up in Sylpheed?</A>
+</H2>
+
+<P>A. The number is unlimited. The limit is reached when
+your computer stops responding.
+<H2><A NAME="ss2.5">2.5 Q05 Why does Sylpheed not delete my mails when I press "delete"? I set a filter, and Sylpheed does not filter. I moved a mail to a different mailbox and it did not move.</A>
+</H2>
+
+<P>A. You have to click the "execute" button.
+The other solution: in the configuration settings
+(common preferences &gt; interface tab) you have to
+check the "execute commands immediately" box.
+<H2><A NAME="ss2.6">2.6 Q06 Can I set up special addresses/ports for my mailserver / newsserver?</A>
+</H2>
+
+<P>A. Yes, you can. In the configuration per account you
+can specify the exact port addresses you want to use.
+<H2><A NAME="ss2.7">2.7 Q07 Does Sylpheed have options for threading messages?</A>
+</H2>
+
+<P>A. Yes. You can switch it on and off in the Summary
+Menu, just select "Thread View" or press Ctrl+T.
+<H2><A NAME="ss2.8">2.8 Q08 Can I create multiple levels of subfolders to store mail?</A>
+</H2>
+
+<P>A. Absolutely. This is no problem.
+<H2><A NAME="ss2.9">2.9 Q09 Why isn't Sylpheed sending my mail out?</A>
+</H2>
+
+<P>A. You need to create at least one account in order to
+send. (This is a wonderful gotcha on LAN installs
+with only a local mailbox feed).
+<H2><A NAME="ss2.10">2.10 Q10 How do I apply a patch after downloading it?</A>
+</H2>
+
+<P>A. Copy patch to sylpheed directory
+Apply the patch:
+<P><CODE>% patch -p0 &lt; some.patch</CODE>
+<P>Or, if it's gzipped:
+<P><CODE>% gzip -dc some.patch.gz | patch -p0</CODE>
+<P>Run <CODE>./autogen.sh</CODE>, remove the generated <CODE>/config.cache</CODE>
+file (unless you want to install in prefix
+<CODE>/usr/local</CODE>).
+Run <CODE>./configure</CODE> with the appropriate options and
+then <CODE>make</CODE>.
+(Text as found on the Sylpheed patches page.)
+<H2><A NAME="ss2.11">2.11 Q11 How do I compile in support for compface pictures?</A>
+</H2>
+
+<P>A. You have to have a package called <CODE>libcompface</CODE>
+installed, so this is available for compiling into
+Sylpheed.
+<H2><A NAME="ss2.12">2.12 Q12 How do I make my own compface image?</A>
+</H2>
+
+<P>A. The faces package contains a program called xbm2ikon script,
+which converts a 48x48 xbm to the format suitable for
+compface. Thanks to Jeff Dairiki, you can have a complete online course in this. Visit
+<A HREF="http://www.dairiki.org/xface/">this page</A> for the details.
+<H2><A NAME="ss2.13">2.13 Q13 How can I tell my browser/newsclient/other program to use Sylpheed as e-mail program?</A>
+</H2>
+
+<P>A. In the settings part of the program, write
+<CODE>sylpheed --compose</CODE>
+<H2><A NAME="ss2.14">2.14 Q14 How do I enable GPG support in Sylpheed?</A>
+</H2>
+
+<P>A. When compiling Sylpheed, make sure you add <CODE>--enable-gpgme</CODE> in the ./configure command.
+When that completes successfully, there is a "privacy" section in the Common preferences.
+<H2><A NAME="ss2.15">2.15 Q15 Mutt does not recognize Sylpheed's MH structure</A>
+</H2>
+
+<P>A. For this to work you need to use the "touch" command in every MH folder. "touch" the file .xmhcache and Mutt should do just fine.
+<H2><A NAME="ss2.16">2.16 Q16 Viewing a GIF file within Sylpheed causes a segmentation fault.</A>
+</H2>
+
+<P>A. In case this happens, you can easily fix that by adding the following to /etc/mime.types:
+<P><CODE>image/gif gif</CODE>
+<H2><A NAME="ss2.17">2.17 Q17 How can I make Sylpheed notify me when new mail arrives?</A>
+</H2>
+
+<P>A. For this you can do several things:
+<P>* Look at the Sylpheed patch page at
+<A HREF="http://www.teledix.net/sylpheed/">Teledix.net</A> for a new mail patch.
+<P>* Download Gkrellm or a similar program that is able to notify you of new incoming mail. Gkrellm is available at
+<A HREF="http://www.gkrellm.net">the Gkrellm page</A><P>
+<HR>
+<A HREF="sylpheed-faq-3.html">Next</A>
+<A HREF="sylpheed-faq-1.html">Previous</A>
+<A HREF="sylpheed-faq.html#toc2">Contents</A>
+</BODY>
+</HTML>
diff --git a/faq/en/sylpheed-faq-3.html b/faq/en/sylpheed-faq-3.html
new file mode 100644
index 00000000..f406971f
--- /dev/null
+++ b/faq/en/sylpheed-faq-3.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Interface</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+Next
+<A HREF="sylpheed-faq-2.html">Previous</A>
+<A HREF="sylpheed-faq.html#toc3">Contents</A>
+<HR>
+<H2><A NAME="s3">3. Sylpheed FAQ - Interface</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Q01 How do I make Sylpheed display my language?</A>
+</H2>
+
+<P>A. You have to set some environment variables such as
+<CODE>LANG,LC_CTYPE, LC_MESSAGES</CODE> to your local language.
+Usually <CODE>LANG</CODE> (or <CODE>LC_ALL</CODE>) is sufficient.
+<H2><A NAME="ss3.2">3.2 Q02 I don't like the default font. Can I change that?</A>
+</H2>
+
+<P>A. Yes. In Configuration&gt;common preferences under the
+"Display" tab.
+<H2><A NAME="ss3.3">3.3 Q03 There are too many columns in the message list!!</A>
+</H2>
+
+<P>A. In Configuration&gt;common preferences under the
+"Display" tab you can press the button "Set display
+item of summary". That pops up a screen with all the
+options you can show or leave out of the message
+list.
+<H2><A NAME="ss3.4">3.4 Q04 Can I use a different editor to write my mails?</A>
+</H2>
+
+<P>A. You can. In Configuration&gt;common preferences under
+the "Other" tab you can define your editor of choice.
+Remember, if you want to use a command line editor
+like vi or emacs, to write the name of the shell
+(term, term, rxvt) with the -e parameter in front of
+the editor. E.g.: <CODE>rxvt -e vi %s</CODE>
+<H2><A NAME="ss3.5">3.5 Q05 How to change the font size in the Sylpheed interface?</A>
+</H2>
+
+<P>A. You can set the GTK+ font by <CODE>~/.gtkrc</CODE>, or
+<CODE>~/.gtkrc.mine</CODE>,
+(which is included by <CODE>~/.gtkrc</CODE>).
+For example:
+<CODE>style "default"
+{
+font =
+"-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1
+"
+}
+widget_class "*" style "default"</CODE>
+<H2><A NAME="ss3.6">3.6 Q06 Sylpheed saves my outgoing mail (in Outbox). Can I make it stop doing that?</A>
+</H2>
+
+<P>A. In Configuration&gt;common preferences there's a
+checkbox "Save sent message to outbox". Uncheck it,
+and it's solved.
+<H2><A NAME="ss3.7">3.7 Q07 How can I change the key-bindings (hot-keys) in Sylpheed?</A>
+</H2>
+
+<P>A. That is very simple. Suppose you want to assign a
+shortcut key to a function, e.g. sending all mail
+out should start when you press Ctrl-Y. Click the
+Message' menu and move the mouse over "Send all
+messages". Now you press Ctrl-Y. Immediately the menu
+text is updated and the function is in place. Please
+note that a previous function that Ctrl-Y was
+assigned to, will no longer have a shortcut key. If
+you want to remove the key binding, do the same
+thing, but press the "delete" key on the menu-item.
+Then the key binding is removed.
+<H2><A NAME="ss3.8">3.8 Q08 Can I close windows without the mouse?</A>
+</H2>
+
+<P>A. Of course!! Not all windows, but by pressing ESCape,
+you can close the addressbook, the window of viewing
+a mail-source (message&gt;view source), the window of
+viewing the headers, and several others. Just give
+it a try and you will find all of them.
+<H2><A NAME="ss3.9">3.9 Q09 Can I change the way the date is displayed in the message summary?</A>
+</H2>
+
+<P>A. As of 0.4.65 you can. The options are:
+%y = year in numbers %m = month in number
+%d = day in numbers %c = date/time for locale
+%A = full weekday name %a = short month name
+%B = full month name %b = short month name
+%H = hours in 24-clock %I = hours in 12-clock
+For more information go to the configuration menu,
+select Common preferences / Display and move the
+mouse cursor over the input box for the date display
+format.
+<H2><A NAME="ss3.10">3.10 Q10 Why can't I see the compface pictures?</A>
+</H2>
+
+<P>A. You need to enable displaying of the header pane in the
+general preferences
+<H2><A NAME="ss3.11">3.11 Q11 I still can't see the pictures. Why not?</A>
+</H2>
+
+<P>A. You may not have compiled in Compface support. See Q11
+in the Installation/Configuration section.
+<H2><A NAME="ss3.12">3.12 Q12 Why does the URL Launcher not launch my webbrowser?</A>
+</H2>
+
+<P>A. You need to double-click the url.
+<H2><A NAME="ss3.13">3.13 Q13 Attachments with spaces in the name won't open!</A>
+</H2>
+
+<P>A. When you try to launch a helper application, like an image viewer, with an attachment that has spaces in the name, put quotes around the %s
+parameter. Example: gedit '%s'
+<HR>
+Next
+<A HREF="sylpheed-faq-2.html">Previous</A>
+<A HREF="sylpheed-faq.html#toc3">Contents</A>
+</BODY>
+</HTML>
diff --git a/faq/en/sylpheed-faq.html b/faq/en/sylpheed-faq.html
new file mode 100644
index 00000000..2001bdd2
--- /dev/null
+++ b/faq/en/sylpheed-faq.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed FAQ</TITLE>
+ <LINK HREF="sylpheed-faq-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-1.html">Next</A>
+Previous
+Contents
+<HR>
+<H1>Sylpheed FAQ</H1>
+
+
+<H2>Paul Kater (paul@nlpagan.net)
+ and Jens Oberender (j.obi@troja.net)
+ </H2>
+<P><HR>
+<EM> Sylpheed FAQ (for version 0.7.3)
+ </EM>
+<HR>
+<P>This FAQ consists of the following sections:
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-faq-1.html">Sylpheed FAQ - General information</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-1.html#ss1.1">1.1 Q01 Are there FAQ's in other languages?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.2">1.2 Q02 What is Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.3">1.3 Q03 Where can I get Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.4">1.4 Q04 Who writes Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.5">1.5 Q05 What does the name Sylpheed mean?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.6">1.6 Q06 How does Sylpheed store mails?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.7">1.7 Q07 Why does the auto collection of mail not work?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.8">1.8 Q08 Does Sylpheed have mail filtering?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.9">1.9 Q09 Can Sylpheed handle IMAP mail?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.10">1.10 Q10 Can Sylpheed handle local unix mailboxes?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.11">1.11 Q11 Can Sylpheed handle IPv6?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.12">1.12 Q12 Does Sylpheed support encryption like GPG?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.13">1.13 Q13 How does Sylpheed check for MIME types?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.14">1.14 Q14 Does Sylpheed allow me to write HTML styled messages?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.15">1.15 Q15 Does Sylpheed have name completion in the address fields?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.16">1.16 Q16 Fine, but when I hit the TAB key I get an error message.</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.17">1.17 Q17 Why is Sylpheed so fast?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.18">1.18 Q18 Where can I get the current patches for Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.19">1.19 Q19 How can I send in patches, report bugs, talk about Sylpheed with others?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.20">1.20 Q20 When I send mail, the Content-Type header says the mail is in US-ASCII, even when I specified ISO-8859-1?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.21">1.21 Q21 Why does it look like word wrap is not working?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.22">1.22 Q22 Where can I find the latest FAQ on Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.23">1.23 Q23 Can I import a mbox into Sylpheed's MH mailfolders?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.24">1.24 Q24 Can I use procmail to sort my mails with the MH mail handling?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.25">1.25 Q25 When I upgrade Sylpheed, are there things I should be aware of?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.26">1.26 Q26 How can I quickly update the views in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.27">1.27 Q27 Why can't I use gvim as external editor?</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-faq-2.html">Sylpheed FAQ - Installation and Configuration</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-2.html#ss2.1">2.1 Q01 What does it take to compile Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.2">2.2 Q02 How do I set up Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.3">2.3 Q03 How do I set up an account?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.4">2.4 Q04 How many accounts can I set up in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.5">2.5 Q05 Why does Sylpheed not delete my mails when I press "delete"? I set a filter, and Sylpheed does not filter. I moved a mail to a different mailbox and it did not move.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.6">2.6 Q06 Can I set up special addresses/ports for my mailserver / newsserver?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.7">2.7 Q07 Does Sylpheed have options for threading messages?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.8">2.8 Q08 Can I create multiple levels of subfolders to store mail?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.9">2.9 Q09 Why isn't Sylpheed sending my mail out?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.10">2.10 Q10 How do I apply a patch after downloading it?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.11">2.11 Q11 How do I compile in support for compface pictures?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.12">2.12 Q12 How do I make my own compface image?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.13">2.13 Q13 How can I tell my browser/newsclient/other program to use Sylpheed as e-mail program?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.14">2.14 Q14 How do I enable GPG support in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.15">2.15 Q15 Mutt does not recognize Sylpheed's MH structure</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.16">2.16 Q16 Viewing a GIF file within Sylpheed causes a segmentation fault.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.17">2.17 Q17 How can I make Sylpheed notify me when new mail arrives?</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-faq-3.html">Sylpheed FAQ - Interface</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-3.html#ss3.1">3.1 Q01 How do I make Sylpheed display my language?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.2">3.2 Q02 I don't like the default font. Can I change that?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.3">3.3 Q03 There are too many columns in the message list!!</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.4">3.4 Q04 Can I use a different editor to write my mails?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.5">3.5 Q05 How to change the font size in the Sylpheed interface?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.6">3.6 Q06 Sylpheed saves my outgoing mail (in Outbox). Can I make it stop doing that?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.7">3.7 Q07 How can I change the key-bindings (hot-keys) in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.8">3.8 Q08 Can I close windows without the mouse?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.9">3.9 Q09 Can I change the way the date is displayed in the message summary?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.10">3.10 Q10 Why can't I see the compface pictures?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.11">3.11 Q11 I still can't see the pictures. Why not?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.12">3.12 Q12 Why does the URL Launcher not launch my webbrowser?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.13">3.13 Q13 Attachments with spaces in the name won't open!</A>
+</UL>
+<HR>
+<A HREF="sylpheed-faq-1.html">Next</A>
+Previous
+Contents
+</BODY>
+</HTML>
diff --git a/faq/es/Makefile.am b/faq/es/Makefile.am
new file mode 100644
index 00000000..a3e82c1d
--- /dev/null
+++ b/faq/es/Makefile.am
@@ -0,0 +1,11 @@
+faqdatadir = $(faqdir)/es
+
+faqdata_DATA = \
+ sylpheed-faq-1.html \
+ sylpheed-faq-2.html \
+ sylpheed-faq-3.html \
+ sylpheed-faq.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(faqdata_DATA)
diff --git a/faq/es/sylpheed-faq-1.html b/faq/es/sylpheed-faq-1.html
new file mode 100644
index 00000000..e35255a7
--- /dev/null
+++ b/faq/es/sylpheed-faq-1.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Preguntas Ms Frecuentes (FAQ) de Sylpheed: Informacin general</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=next>
+
+ <LINK HREF="sylpheed-faq.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-2.html">Pgina siguiente</A>
+Pgina anterior
+<A HREF="sylpheed-faq.html#toc1">ndice general</A>
+<HR>
+<H2><A NAME="s1">1. Informacin general</A></H2>
+
+<H2><A NAME="ss1.1">1.1 Estn disponibles los FAQs en otros idiomas?</A>
+</H2>
+
+<P>R.: Si, los siguientes enlaces corresponden a distintas traducciones
+disponibles:
+<UL>
+<LI>
+<A HREF="http://nlpagan.net/sylpheedfaq.htm">http://nlpagan.net/sylpheedfaq.htm</A> : FAQ original en Ingls, cortesa de Paul Kater, Jens Oberender y otros</LI>
+<LI>
+<A HREF="http://www.enseirb.fr/~dinh/sylpheed/sylpheed-sylpheed-faq-fr.html">http://www.enseirb.fr/~dinh/sylpheed/sylpheed-sylpheed-faq-fr.html</A> : FAQ de Sylpheed en Francs, cortesa de Dinh V. Hoa</LI>
+<LI>
+<A HREF="http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm">http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm</A> : FAQ de Sylpheed en Japons, cortesa de Wakai "SilverRain" Kazunao</LI>
+<LI>
+<A HREF="http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html">http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html</A> : FAQ de Sylpheed en Italiano, cortesa de Maurizio Codogno</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html">http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html</A> : FAQ de Sylpheed en Alemn (HTML) y
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.txt">http://www.synconet.de/privhome/rs/sylpheed_faq.txt</A> (solo texto), ambos cortesa de Ralf Schiffers</LI>
+<LI>
+<A HREF="http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html">http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html</A> : FAQ de Sylpheed en Griego, cortesa de Theofilos Intzoglou</LI>
+<LI>
+<A HREF="http://sylpheed.republika.pl">http://sylpheed.republika.pl</A> : FAQ de Sylpheed en Polaco, cortesa de Przemyslaw Sulek</LI>
+<LI>
+<A HREF="http://linux.fisek.com.tr/dfisek/sylpheed-sss.html">http://linux.fisek.com.tr/dfisek/sylpheed-sss.html</A> : FAQ de Sylpheed en turco, cortesa de Doruk Fisek</LI>
+<LI>
+<A HREF="http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html">http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html</A> : FAQ de Sylpheed en Sueco, cortesa de Mattias Stergren</LI>
+</UL>
+<P>Tambin puedes encontrar la ltima versin en lnea de este FAQ en
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/">http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/</A> (hay enlaces a diferentes formatos).
+<H2><A NAME="ss1.2">1.2 Qu es Sylpheed?</A>
+</H2>
+
+<P>R.: Sylpheed es un cliente de correo (y lector de noticias)
+basado en GTK+, que corre bajo el X Window System, y
+buscando:
+<UL>
+<LI> Rpida respuesta</LI>
+<LI> Interfaz sofisticado y agradable</LI>
+<LI> Fcil configuracin y manejo intuitivo</LI>
+<LI> Mltiples caractersticas</LI>
+</UL>
+<H2><A NAME="ss1.3">1.3 Dnde puedo obtener Sylpheed?</A>
+</H2>
+
+<P>R.: Se puede bajar de
+<A HREF="http://sylpheed.good-day.net">http://sylpheed.good-day.net</A>
+Hay enlaces para descargar las fuentes completas y
+tambin enlaces a sitios donde se pueden
+descargar RPM's (para RedHat y Mandrake), paquetes
+DEB para Debian, as como instalaciones para Solaris y
+FreeBSD.
+r
+<H2><A NAME="ss1.4">1.4 Quin ha realizado Sylpheed?</A>
+</H2>
+
+<P>R.: Hiroyuki Yamamoto <CODE>&lt;hiro-y@kcn.ne.jp&gt;</CODE>
+<H2><A NAME="ss1.5">1.5 Qu significa el nombre Sylpheed?</A>
+</H2>
+
+<P>R.: Significa de peso ligero, como el aire. Viene del nombre
+de los espritus del viento, las slfides (Sylphs en ingls).
+<H2><A NAME="ss1.6">1.6 Cmo almacena Sylpheed los correos?</A>
+</H2>
+
+<P>R.: Los correos son almacenados en el formato MH, usado por
+el propio MH y EMH. Los formatos <CODE>maildir</CODE> y <CODE>mbox</CODE> no
+estn (an) soportados, aunque es posible
+importar un fichero <CODE>mbox</CODE> en Sylpheed.
+<H2><A NAME="ss1.7">1.7 Por qu no funciona la recoleccin automtica de correo?</A>
+</H2>
+
+<P>R.: La recoleccin automtica funciona desde la versin 0.5.1. Si la
+necesita o la quiere deber actualizarse.
+<H2><A NAME="ss1.8">1.8 Tiene Sylpheed filtros para el correo?</A>
+</H2>
+
+<P>R.: Si. Los puedes encontar en la pestaa Configuracin&gt;Preferencias comunes&gt;Filtrado
+<P>NOTA: el filtrado an no est implementado para cuentas IMAP
+<H2><A NAME="ss1.9">1.9 Puede Sylpheed manejar correo IMAP?</A>
+</H2>
+
+<P>R.: Si. Desde la versin 0.4.99 IMAP esta soportado.
+<H2><A NAME="ss1.10">1.10 Puede Sylpheed manejar buzones locales de UNIX?</A>
+</H2>
+
+<P>R.: Si.
+<H2><A NAME="ss1.11">1.11 Puede Sylpheed manejar IPv6?</A>
+</H2>
+
+<P>R.: Si, IPv6 est completamente soportado en Sylpheed.
+<H2><A NAME="ss1.12">1.12 Soporta Sylpheed encriptacin como GPG?</A>
+</H2>
+
+<P>R.: Si. GPG est implementado y funciona correctamente.
+Para activarlo en Sylpheed vea la pregunta 14 en la seccin
+de Instalacin.
+<H2><A NAME="ss1.13">1.13 Cmo comprueba Sylpheed los tipos MIME?</A>
+</H2>
+
+<P>R.: Sylpheed usa la comprobacin de tipos MIME equivalente a la realizada por Mutt.
+<H2><A NAME="ss1.14">1.14 Me permite Sylpheed escribir mensajes en HTML?</A>
+</H2>
+
+<P>R.: No. Se discuti ampliamente este tema y el resultado fue
+que los mensajes HTML no son deseables. Si realmente necesita
+enviar HTML siempre puede adjuntar una pgina web al
+correo. Se han realizado varios parches para facilitar un mejor
+manejo del HTML en Sylpheed. Los podr encontrar en la
+Pgina de Parches de Sylpheed (ver ms adelante en este mismo documento).
+<H2><A NAME="ss1.15">1.15 Tiene Sylpheed autocompletado de nombres en los campos de direccin?</A>
+</H2>
+
+<P>R.: Si. Cuando busque un nombre que empieze por ``don'', teclee
+``don'' (sin las comillas) y pulse el tabulador. Esto le
+mostrar el nombre correcto si solamente existe un ``don''
+en su libro de direcciones, si no aparecer una lista
+desplegable que le permitir seleccionar el nombre
+deseado, p.ej. Donald Duck, Don Jonhson, pero tambin las
+direcciones de correo que empiecen por ``don'' aparecern en
+la lista, como ``don.giovanni@maffia.org''.
+<H2><A NAME="ss1.16">1.16 Bien, pero cuando pulso el tabulador aparece un mensaje de error.</A>
+</H2>
+
+<P>R.: Cuando quiera usar el autocompletado de nombres asegrese
+de que hay algn nombre en el libro de direcciones. Si no
+hay nombres hasta Sylpheed tiene dificultades para completar algo.
+<H2><A NAME="ss1.17">1.17 Por qu es tan rpido Sylpheed?</A>
+</H2>
+
+<P>R.: Es para lo que se ha diseado!
+<H2><A NAME="ss1.18">1.18 Dnde puedo conseguir los parches actuales para Sylpheed?</A>
+</H2>
+
+<P>R.: En la Pgina de Parches de Sylpheed:
+<A HREF="http://www.teledix.net/sylpheed/">http://www.teledix.net/sylpheed/</A>
+(Visite tambien la seccin de instalacin sobre como
+instalar un parche)
+<H2><A NAME="ss1.19">1.19 Cmo puedo enviar parches, informar de errores, hablar con otros sobre Sylpheed?</A>
+</H2>
+
+<P>R.: Para hablar con otros debera unirse a la lista de
+correo de Sylpheed en
+<A HREF="http://sylpheed.good-day.net">http://sylpheed.good-day.net</A>. Hay una
+lista japonesa y otra en ingls, elija la correcta!
+Si tiene algn parche que quiera dar a conocer al
+mundo pngase en contacto con el encargado de la pgina de
+parches de Sylpheed en <CODE>sylpheed@thewildbeast.co.uk</CODE>.
+<H2><A NAME="ss1.20">1.20 Cuando envio un correo la cabecera <CODE>Content-Type</CODE> dice que el</A>
+correo esta en <CODE>US-ASCII</CODE>, incluso si he especificado <CODE>ISO-8859-1</CODE></H2>
+
+<P>R.: Si no se usan caracteres <CODE>ISO-8859-1</CODE> (&gt;= 0x80) en el cuerpo del
+mensaje, Sylpheed automticamente pondr el valor
+del conjunto de caracteres en la cabecera <CODE>Content-Type</CODE> como <CODE>US-ASCII</CODE>.
+<H2><A NAME="ss1.21">1.21 Por qu parece que el partido de lneas no funciona?</A>
+</H2>
+
+<P>R.: El partido de lneas es quizs algo peculiar. Se pueden teclear
+las lneas tan largas como se deseen. Cuando se enva o se pone en cola
+un correo con lneas largas, Sylpheed primero partir las lneas
+a la longitud que haya sido establecida, y luedo encolar el
+mensaje. Esto es ms conveniente de lo que se pueda pensar, ya
+que una vez una lnea es partida (se insertan saltos de lnea
+en el texto) y cuando aades algo a esa lnea, la siguiente
+se mover a una nueva, dejando una o dos palabras de la anterior
+``colgando'' solas. Por ejemplo:
+<P><CODE><P> Esta es una lnea larga
+
+<P> es partida.
+</CODE>
+<P>Si ahora se aade una palabra en la primera lnea:
+<P><CODE><P> Esta es una lnea muy larga
+
+<P> que
+
+<P> es partida.
+</CODE>
+<P>Esto provocara un monton de trabajo manual para reformatear
+y dejar presentable el correo de nuevo.
+<H2><A NAME="ss1.22">1.22 Dnde puedo encontrar el ltimo FAQ de Sylpheed?</A>
+</H2>
+
+<P>R.: Puedes encontrar el FAQ y el manual buscando en el proyecto sylpheeddoc en
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A>. Tambin podrs encontrar enlaces a ambos documentos en otros idiomas, habitualmente con las ltimas actualizaciones.
+<H2><A NAME="ss1.23">1.23 Se puede importar un mbox en las carpetas de correo MH de Sylpheed?</A>
+</H2>
+
+<P>R.: Si, simplemente selecciona o crea la carpeta donde quieras los
+correos y selecciona ``Importar de fichero mbox`` en el men
+``Fichero``.
+<H2><A NAME="ss1.24">1.24 Se puede usar procmail para ordenar los correos con el manejo de correo MH?</A>
+</H2>
+
+<P>R.: Si. Asegrate de aadir /. al final de las reglas para que procmail sepa que esta filtrando hacia una carpeta de correo estilo MH. Ejemplo:
+<P><CODE>0:</CODE>
+<P><CODE>* ^Subject:.*sylpheed</CODE>
+<P><CODE> sylpheedmail/.</CODE>
+<P>Comprueba la pgina del manual de procmail para ms detalles.
+<H2><A NAME="ss1.25">1.25 Hay cosas que debera tener en cuenta cuando actualize Sylpheed?</A>
+</H2>
+
+<P>R.: Si! Al actualizar a
+<UL>
+<LI> 0.4.50: deberas reconfigurar las preferencias de los grupos de noticias.</LI>
+<LI> 0.4.63: deberas establecer los colores para las URL en el men de configuracin.</LI>
+<LI> 0.4.65: algunos elementos de men han sido reubicados.</LI>
+</UL>
+<H2><A NAME="ss1.26">1.26 Cmo puedo actualizar rpidamente las vistas en Sylpheed?</A>
+</H2>
+
+<P>R.: Simplemente pulse "Alt+U" o seleccione ``Actualizar`` del men ``Resumen``.
+<H2><A NAME="ss1.27">1.27 Por qu no puedo usar <CODE>gvim</CODE> como editor externo?</A>
+</H2>
+
+<P>R.: Si desea utilizar <CODE>gvim</CODE> como editor externo es necesario
+lanzarlo con la opcin de no-fork <CODE>-f</CODE>, es decir, en el cuadro
+de dilogo el comando deber ser <CODE>gvim -f %s</CODE>. Si no se hace as
+el editor realiza un fork, abriendo el fichero en el proceso hijo, y
+cuando se sale del editor los cambios realizados se pierden, y no se
+muestra nada en la ventana de composicin.
+(Cortesa de Ed Collins)
+<HR>
+<A HREF="sylpheed-faq-2.html">Pgina siguiente</A>
+Pgina anterior
+<A HREF="sylpheed-faq.html#toc1">ndice general</A>
+</BODY>
+</HTML>
diff --git a/faq/es/sylpheed-faq-2.html b/faq/es/sylpheed-faq-2.html
new file mode 100644
index 00000000..f2e3a0b5
--- /dev/null
+++ b/faq/es/sylpheed-faq-2.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Preguntas Ms Frecuentes (FAQ) de Sylpheed: Instalacin y Configuracin</TITLE>
+ <LINK HREF="sylpheed-faq-3.html" REL=next>
+ <LINK HREF="sylpheed-faq-1.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-3.html">Pgina siguiente</A>
+<A HREF="sylpheed-faq-1.html">Pgina anterior</A>
+<A HREF="sylpheed-faq.html#toc2">ndice general</A>
+<HR>
+<H2><A NAME="s2">2. Instalacin y Configuracin</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Qu es necesario para compilar Sylpheed?</A>
+</H2>
+
+<P>R.: Cualquier UNIX que siga el estandar POSIX o similar,
+(por ejemplo: Linux, FreeBSD, Solaris),
+GTK+ 1.2.6 o posterior y un compilador ANSI C reciente
+(gcc 2.7.2.3 debera servir)
+<P>
+Nota: se sabe que Sun C no sirve para compilar Sylpheed.
+<P>Opcionalmente:
+<UL>
+<LI> Imlib o gdk-pixbuf (para el visor de imgenes interno)</LI>
+<LI> libcompface (para X-Face)</LI>
+<LI> libjconv (para I18N)</LI>
+<LI> GPGME (para GnuPG)</LI>
+<LI> el equivalente de GTK+-devel y Xfree86-devel si no <CODE>./configure</CODE> fallar.</LI>
+</UL>
+<H2><A NAME="ss2.2">2.2 Cmo configuro Sylpheed?</A>
+</H2>
+
+<P>R.: Cuando ejecute Sylpheed por primera vez le preguntar donde quiere almacenar
+sus buzones de correo. El directorio por defecto es <CODE>~/Mail</CODE>, pero puede cambiarlo
+a cualquier otro que desee mientras sea un nombre de directorio vlido.
+<H2><A NAME="ss2.3">2.3 Cmo configuro una cuenta?</A>
+</H2>
+
+<P>R.: Despus de cargar Sylpheed la primera vez se puede aadir una cuenta de correo
+pulsando en el men de ``Configuracin``, seleccionando la opcin
+``Crear nueva cuenta...``
+y rellenando los campos del cuadro de dilogo con los valores adecuados.
+<H2><A NAME="ss2.4">2.4 Cuntas cuentas puedo configurar en Sylpheed?</A>
+</H2>
+
+<P>R.: El nmero es ilimitado. El lmite se alcanza cuando su ordenador deje de responder.
+<H2><A NAME="ss2.5">2.5 Por qu Sylpheed no borra mis correos cuando pulso ``Borrar``? O cuando establezco</A>
+un filtro y Sylpheed no filtra? O muevo correo a una carpeta diferente y no se mueve?</H2>
+
+<P>R.: Tienes que pulsar el botn ``Ejecutar``. Otra solucin consiste en marcar la casilla
+``Ejecutar comandos inmediatamente`` en las preferencias de configuracin
+(``Preferencias comunes &gt; Interfaz``).
+<H2><A NAME="ss2.6">2.6 Puedo establecer direcciones o puertos especiales para mi servidor de correo/noticias?</A>
+</H2>
+
+<P>R.: Si, puede. En la configuracin de cada cuenta se pueden especificar los puertos concretos
+que desee utilizar.
+<H2><A NAME="ss2.7">2.7 Tiene Sylpheed opciones para separar en hilos los mensajes?</A>
+</H2>
+
+<P>R.: Si. Se puede activar o desactivar en el men ``Resumen`` seleccionando
+``Vista jerrquica`` o pulsando "Ctrl+T".
+<H2><A NAME="ss2.8">2.8 Puedo crear varios niveles de subcarpetas para almacenar el correo?</A>
+</H2>
+
+<P>R.: Si, no hay ningn problema.
+<H2><A NAME="ss2.9">2.9 Por qu no esta Sylpheed enviando mis correos?</A>
+</H2>
+
+<P>R.: Necesita crear al menos una cuenta para poder enviar correo.
+<H2><A NAME="ss2.10">2.10 Cmo aplico un parche despus de haberlo descargado? </A>
+</H2>
+
+<P>R.: Copie el parche al directorio de Sylpheed. Aplquelo con la orden:
+<P><CODE>% patch -p0 &lt; nombre-del-parche.patch</CODE>
+<P>O, si el parche esta comprimido con gzip:
+<P><CODE>% gzip -dc nombre-del-parche.patch.gz | patch -p0</CODE>
+<P>Despus de esto deber ejecutar <CODE>./autogen.sh</CODE> y eliminar el fichero
+<CODE>./config.cache</CODE> generado (a menos que quiera instalar el programa bajo
+<CODE>/usr/local</CODE>). Ejecute <CODE>./configure</CODE> con las opciones deseadas y
+una vez finalizado, ejecute <CODE>make</CODE>. (Estas instrucciones son las que se
+encuentran en la Pgina de Parches de Sylpheed).
+<H2><A NAME="ss2.11">2.11 Cmo puedo compilar el soporte para los dibujos compface?</A>
+</H2>
+
+<P>R.: Deber tener instalado el paquete en el que est incluido <CODE>libcompface</CODE>
+(normalmente denominado <CODE>faces</CODE>), de manera que est disponible para compilar con Sylpheed.
+<H2><A NAME="ss2.12">2.12 Cmo puedo crear mi propia imagen compface?</A>
+</H2>
+
+<P>R.: Dentro del paquete <CODE>faces</CODE> existe el programa <CODE>xmb2icon</CODE> (un guin de shell)
+que convierte un fichero xbm de 48x48 pixels al formato adecuado para compface. Para conseguir una
+imagen en formato xbm puede utilizar un programa grfico como el Gimp.
+Gracias a Jeff Daikiri est disponible un curso completo en lnea sobre esto, visite
+<A HREF="http://www.dairiki.org/xface/">http://www.dairiki.org/xface/</A> para ms detalles.
+<H2><A NAME="ss2.13">2.13 Cmo le puedo indicar a mi navegador, cliente de noticias u otro programa que</A>
+utilize Sylpheed como cliente de correo?</H2>
+
+<P>R.: En la seccin de configuracin del programa correspondiente escriba:
+<CODE> sylpheed --compose</CODE>
+<H2><A NAME="ss2.14">2.14 Cmo puedo habilitar el soporte de GPG en Sylpheed?</A>
+</H2>
+
+<P>R.: Cuando compile Sylpheed asegrese de aadir la opcin <CODE>--enable-gpgme</CODE> al
+comando <CODE>./configure<CODE>Cuando la compilacin termine correctamente aparecer en el dilogo de Preferencias comunes una seccin de "Privacidad".</CODE></CODE>
+<H2><A NAME="ss2.15">2.15 Mutt no reconoce la estructura de carpetas MH de Sylpheed</A>
+</H2>
+
+<P>R.: Deber hacer <CODE>touch .xmhcache</CODE> en todas y cada una de las cada carpetas MH, y Mutt funcionar correctamente.
+<H2><A NAME="ss2.16">2.16 Sylpheed provoca una violacin de segmento cuando veo un fichero GIF</A>
+</H2>
+
+<P>R.: Si sucede esto se puede solucionar fcilmente aadiendo lo siguiente al
+fichero /etc/mime.types :
+<CODE>image/gif gif</CODE>
+<HR>
+<A HREF="sylpheed-faq-3.html">Pgina siguiente</A>
+<A HREF="sylpheed-faq-1.html">Pgina anterior</A>
+<A HREF="sylpheed-faq.html#toc2">ndice general</A>
+</BODY>
+</HTML>
diff --git a/faq/es/sylpheed-faq-3.html b/faq/es/sylpheed-faq-3.html
new file mode 100644
index 00000000..16cbe708
--- /dev/null
+++ b/faq/es/sylpheed-faq-3.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Preguntas Ms Frecuentes (FAQ) de Sylpheed: Interface</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+Pgina siguiente
+<A HREF="sylpheed-faq-2.html">Pgina anterior</A>
+<A HREF="sylpheed-faq.html#toc3">ndice general</A>
+<HR>
+<H2><A NAME="s3">3. Interface</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Cmo puedo hacer que Sylpheed muestre mi idioma?</A>
+</H2>
+
+<P>R.: Deber establecer el valor de algunas variables de entorno como
+<CODE>LANG</CODE>, <CODE>LC_CTYPE</CODE> o <CODE>LC_MESSAGES</CODE> al idioma deseado.
+Normalmente <CODE>LANG</CODE> (o <CODE>LC_ALL</CODE>) son suficientes.
+<H2><A NAME="ss3.2">3.2 No me gusta la fuente por defecto, puedo cambiarla?</A>
+</H2>
+
+<P>R.: Si. En el men ``Configuracin&gt;Preferencias comunes`` bajo
+la pestaa ``Visualizacin``.
+<H2><A NAME="ss3.3">3.3 Hay demasiadas columnas el la lista de mensajes!</A>
+</H2>
+
+<P>R.: En el men ``Configuracin&gt;Preferencias comunes`` bajo
+la pestaa ``Visualizacin`` puede pulsar el botn ``Cabeceras en
+la vista resumen``. Aparecer una ventana con todas las opciones
+que puede mostrar o quitar de la lista de mensajes.
+<H2><A NAME="ss3.4">3.4 Puedo utilizar un editor diferente para escribir mis correos?</A>
+</H2>
+
+<P>R.: Puede. En el men ``Configuracin&gt;Preferencias comunes`` bajo
+la pestaa ``Otras`` se puede especificar el editor deseado. Recuerde que
+si quiere usar un editor en linea de comandos, como <CODE>vi</CODE> o <CODE>emacs</CODE>,
+deber escribir el nombre del shell (<CODE>term</CODE>, <CODE>xterm</CODE>, <CODE>rxvt</CODE>)
+con el parmetro <CODE>-e</CODE> delante del editor. Por ejemplo: <CODE>rxvt -e vi %s</CODE>
+<H2><A NAME="ss3.5">3.5 Cmo puedo cambiar el tamao de la fuente en el interfaz de Sylpheed?</A>
+</H2>
+
+<P>R.: Puede establecer la fuente GTK+ en <CODE>~/.gtkrc</CODE> o <CODE>~/.gtkrc.mine</CODE>
+(que es incluido por el primero). Por ejemplo:
+<P><CODE><P> style "default"
+
+<P> {
+ <P> font = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1"
+
+<P> }
+
+<P> widget_class "*" style "default"
+</CODE>
+<H2><A NAME="ss3.6">3.6 Sylpheed guarda mi correo saliente (en Salida). Puedo evitar que haga esto?</A>
+</H2>
+
+<P>R.: En ``Configuracin&gt;Preferencias comunes`` hay una casilla denominada
+``Guardar mensajes salientes en Salida``. Djela en blanco y estar solucionado.
+<H2><A NAME="ss3.7">3.7 Cmo puedo cambiar las asociaciones de teclas (teclas calientes) en Sylpheed?</A>
+</H2>
+
+<P>R.: Esto es muy sencillo. Supongamos que quiere asignar una combinacin
+de teclas a una funcin, por ejemplo enviar todo el correo cuando se pulse ``Ctrl+Y''.
+Pulse en el men ``Mensajes`` y mueva el ratn sobre ``Enviar todo``.
+Ahora pulse ``Ctrl+Y''. Inmediatamente ver que el texto del men se actualiza para
+reflejar la nueva combinacin. Hay que hacer notar que la funcin a la que estaba asignada
+previamente ``Ctrl+Y'' ya no tendr ninguna combinacin de teclas asociada. En caso de
+que quiera eliminar la combinacin asociada a alguna funcin el procedimiento es el mismo,
+pero pulsando la tecla ``Supr'' sobre el elemento del men.
+<H2><A NAME="ss3.8">3.8 Puedo cerrar las ventanas sin utilizar el ratn?</A>
+</H2>
+
+<P>R.: Por supuesto! No todas las ventanas, pero pulsando la tecla de escape ("Esc")
+puede cerrar la agenda, la ventana en la que se ve la fuente del correo
+(``Mensaje&gt;Ver fuente``),
+la ventana de las cabeceras y varias ms. Intntelo y las encontrar todas.
+<H2><A NAME="ss3.9">3.9 Puedo cambiar la manera en la que aparece mostrada la fecha en la lista resumen de mensajes?</A>
+</H2>
+
+<P>R.: Desde la versin 0.4.65 se puede. Las opciones son las siguientes:
+<P>
+<UL>
+<LI><CODE>%y</CODE> ao en nmero</LI>
+<LI><CODE>%m</CODE> mes en nmero</LI>
+<LI><CODE>%d</CODE> da en nmero </LI>
+<LI><CODE>%c</CODE> fecha/hora local</LI>
+<LI><CODE>%A</CODE> da de la semana completo</LI>
+<LI><CODE>%a</CODE> nombre del da corto</LI>
+<LI><CODE>%B</CODE> da del mes completo </LI>
+<LI><CODE>%b</CODE> nombre del mes corto</LI>
+<LI><CODE>%H</CODE> hora (0-23)</LI>
+<LI><CODE>%I</CODE> hora (0-12)</LI>
+</UL>
+<P>Para ms informacin vaya al men de ``Configuracin``, seleccione
+``Preferencias comunes``, ``Visualizar``,
+y mueva el puntero del ratn sobre el recuadro de ``Formato de fecha``.
+<H2><A NAME="ss3.10">3.10 Por qu no puedo ver las imgenes compface?</A>
+</H2>
+
+<P>R.: Necesita habilitar la visualizacin del panel de cabeceras en
+las ``Preferencias generales``.
+<H2><A NAME="ss3.11">3.11 Todava no puedo ver las imgenes. Por qu?</A>
+</H2>
+
+<P>R.: Quizs no haya compilado el soporte para Compface. Vea la pregunta
+relativa a faces en la seccin de Instalacin/Configuracin.
+<H2><A NAME="ss3.12">3.12 Por qu el lanzador de URLs no lanza mi navegador web?</A>
+</H2>
+
+<P>R.: Es necesario que haga doble-click con el ratn sobre la URL.
+<H2><A NAME="ss3.13">3.13 Los ficheros adjuntos con espacios en el nombre no se abren!</A>
+</H2>
+
+<P>R.: Cundo intente lanzar una aplicacin auxiliar, como un visor de imgenes, con un adjunto que tenga
+espacios en el nombre ponga comillas simples alrededor del parmetro <CODE>%s</CODE>.
+Por ejemplo: <CODE>gedit '%s'</CODE>
+<HR>
+Pgina siguiente
+<A HREF="sylpheed-faq-2.html">Pgina anterior</A>
+<A HREF="sylpheed-faq.html#toc3">ndice general</A>
+</BODY>
+</HTML>
diff --git a/faq/es/sylpheed-faq.html b/faq/es/sylpheed-faq.html
new file mode 100644
index 00000000..4c672063
--- /dev/null
+++ b/faq/es/sylpheed-faq.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Preguntas Ms Frecuentes (FAQ) de Sylpheed</TITLE>
+ <LINK HREF="sylpheed-faq-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-1.html">Pgina siguiente</A>
+Pgina anterior
+ndice general
+<HR>
+<H1>Preguntas Ms Frecuentes (FAQ) de Sylpheed</H1>
+
+<H2>Ricardo Mones Lastra <CODE>&lt;mones@aic.uniovi.es&gt;</CODE></H2>
+<P><HR>
+<EM> Preguntas ms frecuentes (FAQ) de Sylpheed para la versin 0.7.4 - basado en el documento original en ingls de Paul Kater (paul@nlpagan.net)
+ y Jens Oberender (j.obi@troja.net)</EM>
+<HR>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-faq-1.html">Informacin general</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-1.html#ss1.1">1.1 Estn disponibles los FAQs en otros idiomas?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.2">1.2 Qu es Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.3">1.3 Dnde puedo obtener Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.4">1.4 Quin ha realizado Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.5">1.5 Qu significa el nombre Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.6">1.6 Cmo almacena Sylpheed los correos?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.7">1.7 Por qu no funciona la recoleccin automtica de correo?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.8">1.8 Tiene Sylpheed filtros para el correo?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.9">1.9 Puede Sylpheed manejar correo IMAP?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.10">1.10 Puede Sylpheed manejar buzones locales de UNIX?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.11">1.11 Puede Sylpheed manejar IPv6?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.12">1.12 Soporta Sylpheed encriptacin como GPG?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.13">1.13 Cmo comprueba Sylpheed los tipos MIME?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.14">1.14 Me permite Sylpheed escribir mensajes en HTML?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.15">1.15 Tiene Sylpheed autocompletado de nombres en los campos de direccin?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.16">1.16 Bien, pero cuando pulso el tabulador aparece un mensaje de error.</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.17">1.17 Por qu es tan rpido Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.18">1.18 Dnde puedo conseguir los parches actuales para Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.19">1.19 Cmo puedo enviar parches, informar de errores, hablar con otros sobre Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.20">1.20 Cuando envio un correo la cabecera <CODE>Content-Type</CODE> dice que el</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.21">1.21 Por qu parece que el partido de lneas no funciona?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.22">1.22 Dnde puedo encontrar el ltimo FAQ de Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.23">1.23 Se puede importar un mbox en las carpetas de correo MH de Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.24">1.24 Se puede usar procmail para ordenar los correos con el manejo de correo MH?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.25">1.25 Hay cosas que debera tener en cuenta cuando actualize Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.26">1.26 Cmo puedo actualizar rpidamente las vistas en Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.27">1.27 Por qu no puedo usar <CODE>gvim</CODE> como editor externo?</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-faq-2.html">Instalacin y Configuracin</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-2.html#ss2.1">2.1 Qu es necesario para compilar Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.2">2.2 Cmo configuro Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.3">2.3 Cmo configuro una cuenta?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.4">2.4 Cuntas cuentas puedo configurar en Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.5">2.5 Por qu Sylpheed no borra mis correos cuando pulso ``Borrar``? O cuando establezco</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.6">2.6 Puedo establecer direcciones o puertos especiales para mi servidor de correo/noticias?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.7">2.7 Tiene Sylpheed opciones para separar en hilos los mensajes?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.8">2.8 Puedo crear varios niveles de subcarpetas para almacenar el correo?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.9">2.9 Por qu no esta Sylpheed enviando mis correos?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.10">2.10 Cmo aplico un parche despus de haberlo descargado? </A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.11">2.11 Cmo puedo compilar el soporte para los dibujos compface?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.12">2.12 Cmo puedo crear mi propia imagen compface?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.13">2.13 Cmo le puedo indicar a mi navegador, cliente de noticias u otro programa que</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.14">2.14 Cmo puedo habilitar el soporte de GPG en Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.15">2.15 Mutt no reconoce la estructura de carpetas MH de Sylpheed</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.16">2.16 Sylpheed provoca una violacin de segmento cuando veo un fichero GIF</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-faq-3.html">Interface</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-3.html#ss3.1">3.1 Cmo puedo hacer que Sylpheed muestre mi idioma?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.2">3.2 No me gusta la fuente por defecto, puedo cambiarla?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.3">3.3 Hay demasiadas columnas el la lista de mensajes!</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.4">3.4 Puedo utilizar un editor diferente para escribir mis correos?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.5">3.5 Cmo puedo cambiar el tamao de la fuente en el interfaz de Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.6">3.6 Sylpheed guarda mi correo saliente (en Salida). Puedo evitar que haga esto?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.7">3.7 Cmo puedo cambiar las asociaciones de teclas (teclas calientes) en Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.8">3.8 Puedo cerrar las ventanas sin utilizar el ratn?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.9">3.9 Puedo cambiar la manera en la que aparece mostrada la fecha en la lista resumen de mensajes?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.10">3.10 Por qu no puedo ver las imgenes compface?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.11">3.11 Todava no puedo ver las imgenes. Por qu?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.12">3.12 Por qu el lanzador de URLs no lanza mi navegador web?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.13">3.13 Los ficheros adjuntos con espacios en el nombre no se abren!</A>
+</UL>
+<HR>
+<A HREF="sylpheed-faq-1.html">Pgina siguiente</A>
+Pgina anterior
+ndice general
+</BODY>
+</HTML>
diff --git a/faq/fr/Makefile.am b/faq/fr/Makefile.am
new file mode 100644
index 00000000..2b264204
--- /dev/null
+++ b/faq/fr/Makefile.am
@@ -0,0 +1,11 @@
+faqdatadir = $(faqdir)/fr
+
+faqdata_DATA = \
+ sylpheed-faq-1.html \
+ sylpheed-faq-2.html \
+ sylpheed-faq-3.html \
+ sylpheed-faq.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(faqdata_DATA)
diff --git a/faq/fr/sylpheed-faq-1.html b/faq/fr/sylpheed-faq-1.html
new file mode 100644
index 00000000..c820141b
--- /dev/null
+++ b/faq/fr/sylpheed-faq-1.html
@@ -0,0 +1,269 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>FAQ Sylpheed: FAQ Sylpheed - Informations gnrales</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=next>
+
+ <LINK HREF="sylpheed-faq.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-2.html">Page suivante</A>
+Page prcdente
+<A HREF="sylpheed-faq.html#toc1">Table des matires</A>
+<HR>
+<H2><A NAME="s1">1. FAQ Sylpheed - Informations gnrales</A></H2>
+
+<H2><A NAME="ss1.1">1.1 Q01 Existent-ils des FAQ dans d'autres langues&nbsp;?</A>
+</H2>
+
+<P>A. Oui, voici les liens vers les diffrentes traductions&nbsp;:
+<UL>
+<LI>La version de rfrence en anglais &nbsp;:
+<A HREF="http://sylpheeddoc.sourceforge.net/en/faq/sylpheed-sylpheed-faq.html">http://sylpheeddoc.sourceforge.net/en/faq/sylpheed-sylpheed-faq.html</A></LI>
+<LI>
+<A HREF="http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm">http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedsylpheed-faq-ja.htm</A>&nbsp;:
+SYLPHEED FAQ en japonais, traduit par WAKAI &nbsp;SilverRain&nbsp; Kazunao</LI>
+<LI>
+<A HREF="http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html">http://beatles.cselt.it/~mau/sylpheed/sylpheedsylpheed-faq.html</A>&nbsp;:
+SYLPHEED FAQ en italien traduit par Maurizio Codogno</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html">http://www.synconet.de/privhome/rs/sylpheed_sylpheed-faq.html</A>&nbsp;:
+SYLPHEED FAQ en allemand (version HTML)</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.txt">http://www.synconet.de/privhome/rs/sylpheed_faq.txt</A>&nbsp;:
+la version allemande, texte seulement. Ces deux versions sont de Ralf Schiffers.</LI>
+<LI>
+<A HREF="http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html">http://www.cs.uoi.gr/~csst9910/el_sylsylpheed-faq.html</A>&nbsp;:
+SYLPHEED FAQ en grec, de Theofilos Intzoglou.</LI>
+<LI>
+<A HREF="http://sylpheed.republika.pl">http://sylpheed.republika.pl</A>&nbsp;:
+SYLPHEED FAQ en polonais, de Przemyslaw Sulek.</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedsylpheed-faq.html">http://www.geocities.com/hackpando/sylpheedsylpheed-faq.html</A>&nbsp;:
+version HTML par Marcelo Ramos, aussi&nbsp;:</LI>
+<LI>
+<A HREF="http://www.geocities.com/hackpando/sylpheedfaq.txt">http://www.geocities.com/hackpando/sylpheedfaq.txt</A>&nbsp;:
+version texte</LI>
+<LI>
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/">http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es/</A>&nbsp;:
+version HTML, par Ricardo Mones Lastra, ainsi que</LI>
+<LI>
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es.dvi">http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es.dvi</A>&nbsp;:
+sylpheed-faq-es.dvi (Device independent)</LI>
+<LI>
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es.ps">http://www.aic.uniovi.es/mones/sylpheed/sylpheed-faq-es.ps</A>&nbsp;:
+La traduction en espagnol, en postscript.</LI>
+<LI>
+<A HREF="http://linux.fisek.com.tr/dfisek/sylpheed-sss.html">http://linux.fisek.com.tr/dfisek/sylpheed-sss.html</A>&nbsp;:
+Une version turque est disponible grce Doruk Fisek.</LI>
+<LI>
+<A HREF="http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html">http://hem.passagen.se/webplats/sylpheed-sylpheed-faq-se.html</A>&nbsp;:
+La version sudoise de Mattias Stergren.</LI>
+</UL>
+<H2><A NAME="ss1.2">1.2 Q02 Qu'est-ce que Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Sylpheed est un client de messagerie lectronique (E-mail)
+bas sur la bibliothque Gtk+, fonctionnant sur X-window et
+conu pour tre&nbsp;:
+<UL>
+<LI>rapide&nbsp;;</LI>
+<LI>avec une interface agrable et simple utiliser&nbsp;;</LI>
+<LI>de configuration simple et intuitive&nbsp;;</LI>
+<LI>avec de nombreuses fonctionnalits.</LI>
+</UL>
+<H2><A NAME="ss1.3">1.3 Q03 O trouver Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Vous pouvez le tlcharger partir de
+<A HREF="http://sylpheed.good-day.net">http://sylpheed.good-day.net</A>
+ partir de cette page, vous trouverez des liens pour tlcharger
+les sources, mais aussi les RPMs (pour les distributions Redhat et Mandrake)
+les paquetages DEB pour la distribution Debian, et des installations pour
+Solaris et FreeBSD.
+<H2><A NAME="ss1.4">1.4 Q04 Qui crit Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Hiroyuki Yamamoto (<CODE>hiro-y@kcn.ne.jp</CODE>)
+<H2><A NAME="ss1.5">1.5 Q05 Que signifie le nom, Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Il signifie &nbsp;lger&nbsp;, comme l'air et vient du nom de l'esprit des vents,
+le Sylphe.
+<H2><A NAME="ss1.6">1.6 Q06 Comment Sylpheed stocke-t-il les messages&nbsp;?</A>
+</H2>
+
+<P>A. Les messages sont stocks dans des fichiers au format MH
+(utilis par MH et EMH). Les formats Maildir et mbox, ne sont pas
+encore supports, bien qu'il soit possible d'importer un fichier
+mbox dans une bote aux lettres Sylpheed.
+<H2><A NAME="ss1.7">1.7 Q07 Pourquoi l'auto-collection des messages ne fonctionne-t-elle pas&nbsp;?</A>
+</H2>
+
+<P>A. L'autocollection ne fonctionne que depuis cette version, si vous en avez besoin,
+songez mettre jour votre installation de Sylpheed.
+<H2><A NAME="ss1.8">1.8 Q08 Sylpheed peut-il filtrer les messages&nbsp;?</A>
+</H2>
+
+<P>A. Oui. Vous trouverez cela dans le menu Configuration&gt; Filtres.
+Le filtrage n'est pas possible pour les comptes IMAP, pour le moment.
+<H2><A NAME="ss1.9">1.9 Q09 Sylpheed peut-il grer des comptes IMAP&nbsp;?</A>
+</H2>
+
+<P>A. Oui. partir de la version 0.4.99 IMAP est support.
+<H2><A NAME="ss1.10">1.10 Q10 Sylpheed peut-il accder une bote aux lettres locale Unix&nbsp;?</A>
+</H2>
+
+<P>A. Oui.
+<H2><A NAME="ss1.11">1.11 Q11 Est-ce que Sylpheed supporte IPv6&nbsp;?</A>
+</H2>
+
+<P>A. Oui, IPv6 est compltement support par Sylpheed.
+<H2><A NAME="ss1.12">1.12 Q12 Est-ce que Sylpheed supporte le cryptage, comme le GPG&nbsp;?</A>
+</H2>
+
+<P>A. Oui. GPG est support et fonctionne correctement.
+Voir la question Q14 dans la section 'installation' pour
+savoir comment activer cette fonction.
+<H2><A NAME="ss1.13">1.13 Q13 Comment Sylpheed vrifie-t-il les types MIME&nbsp;?</A>
+</H2>
+
+<P>A. Sylpheed utilise le meme type de vrification que Mutt.
+<H2><A NAME="ss1.14">1.14 Q14 Puis-je crire des messages au format HTML avec Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Non. Une discussion autour de ce sujet a eu lieu, et il en
+est ressortit que cette fonctionnalit n'est pas dsire.
+Si vous souhaitez quand meme envoyer de l'HTML, vous pouvez
+joindre une page HTML a votre message. De nombreux patches ont t cr蜑
+pour amliorer la gestion du HTML par Sylpheed. Vous pouvez trouver
+ces patches sur la page web des patches pour Sylpheed (voir plus loin
+dans ce document).
+<H2><A NAME="ss1.15">1.15 Q15 Sylpheed peut-il complter les noms du champ destinataire &nbsp;?</A>
+</H2>
+
+<P>A. Oui. Lorsque vous cherchez un nom qui commence par &nbsp;<CODE>don</CODE>&nbsp;,
+entrez &nbsp;<CODE>don</CODE>&nbsp; (sans les guiellemets) puis tapez la touche
+TAB. Cela affichera le nom correct lorsqu'un seul &nbsp;don&nbsp; existe
+dans votre carnet d'adresses. Sinon, une liste vous sera propose
+et vous pourrez slectionner le nom que vous cherchez, par exemple
+Donald Duck, ou Don Johnson. Les adresses de messagerie commenant
+par &nbsp;<CODE>don</CODE>&nbsp; seront aussi incluses dans la liste (comme par exemple
+&nbsp;<CODE>don.giovanni@maffia.org</CODE>&nbsp;).
+<H2><A NAME="ss1.16">1.16 Q16 Bien, mais lorsque je tape la touche TAB, j'obtiens un message d'erreur.</A>
+</H2>
+
+<P>A. Lorsque vous utilisez la recherche de nom, vrifiez que votre carnet
+d'adresses contient des noms. S'il est vide, ou qu'aucune correspondance
+ne peut tre trouve, Sylpheed ne peut rien complter.
+<H2><A NAME="ss1.17">1.17 Q17 Pourquoi Sylpheed est-il si rapide&nbsp;?</A>
+</H2>
+
+<P>A. Parce qu'il a t conu pour cela&nbsp;!
+<H2><A NAME="ss1.18">1.18 Q18 O puis-je trouver les derniers patches pour Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. La page web des patches pour Sylpheed se trouve l'adresse&nbsp;:
+<A HREF="http://www.teledix.net/sylpheed/">http://www.teledix.net/sylpheed/</A>
+(Voir aussi la section concernant l'installation pour plus de
+dtails sur l'installation des patches)
+<H2><A NAME="ss1.19">1.19 Q19 Comment puis-je envoyer un patch, signaler un bug, parler de Sylpheed avec d'autres personnes&nbsp;?</A>
+</H2>
+
+<P>A. Pour parler d'autres (fans de Sylpheed), rejoignez la liste de diffusion
+de Sylpheed &nbsp;:
+<A HREF="http://sylpheed.good-day.net">http://sylpheed.good-day.net</A>.
+Notez qu'il existe une liste en japonais et une autre en anglais,
+slectionnez la bonne&nbsp;!
+Si vous avez cr蜑 un patch et que vous voulez que le monde
+le sache, prenez contact avec le gestionnaire de la page des
+patches pour Sylpheed &nbsp;: <CODE>sylpheed@thewildbeast.co.uk</CODE>
+<H2><A NAME="ss1.20">1.20 Q20 Quand j'envoie un message, l'en-tte dfinit le contenu comme tant en US-ASCII mme lorsque je spcifie d'utiliser du ISO-8859-1&nbsp;?</A>
+</H2>
+
+<P>A. Si aucun caractre ISO-8859-1 (>= 0x80) n'est utilis dans le corps du
+message, Sylpheed dfinit automatiquement le type de contenu (dans
+l'en-tte du message) comme utilisant le jeux de caractre US-ASCII.
+<H2><A NAME="ss1.21">1.21 Q21 Pourquoi la mise en page (word wrap) semble ne pas fonctionner&nbsp;?</A>
+</H2>
+
+<P>A. La mise en page est un peu bizarre, peut-tre. En fait,
+vous pouvez entrer des lignes aussi longues que vous voulez, au moment
+d'envoyer le message, Sylpheed commence par mettre en page le message
+au nombre de caractres (par ligne) maximum que vous avez dfini.
+C'est mieux pens que vous ne le croyez. Une fois formate (des retours
+a la ligne sont insrs dans le texte), si vous ajoutez quelquechose
+au dbut de votre phrase, le reste de la phrase passera la ligne,
+laissant quelques mots seuls entre deux lignes (provenant de la
+premire ligne).
+<P>Par exemple&nbsp;:
+<PRE>
+ C'est une longue ligne
+ qui est formate.
+</PRE>
+<P>Maintenant, en ajoutant, un mot la premire ligne&nbsp;:
+<PRE>
+ C'est une trs longue
+ ligne
+ qui est formate.
+</PRE>
+<P>Cela peut ncessiter un trs grand nombre de remises en forme pour
+finalement obtenir un message bien format.
+<H2><A NAME="ss1.22">1.22 Q22 O puis-je trouver la dernire version de la FAQ Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Sur
+<A HREF="http://nlpagan.net/sylpheed-sylpheed-faq.html">http://nlpagan.net/sylpheed-sylpheed-faq.html</A> vous trouverez
+la version anglaise (version de rfrence) dans laquelle vous trouverez
+des liens vers les diffrentes traductions.
+<P>Vous pouvez aussi obtenir les FAQ et manuels partir de
+<A HREF="http://www.sourceforge.net">http://www.sourceforge.net</A> dans le projet sylpheeddoc.
+Ce projet contient les versions les plus jour des diffrentes
+traductions de ces documents.
+<H2><A NAME="ss1.23">1.23 Q23 Puis-je importer une bal mbox dans un dossier Sylpheed (MH)&nbsp;?</A>
+</H2>
+
+<P>A. Oui. Vous devez juste crer ou slectionner le dossier dans lequel
+vous souhaitez insrer vos messages, puis slectionner dans le menu
+&nbsp;Fichier&nbsp;, l'entre &nbsp;Importer un fichier mbox...&nbsp;.
+<H2><A NAME="ss1.24">1.24 Q24 Puis-je utiliser procmail pour trier mes messages&nbsp;?</A>
+</H2>
+
+<P>A. Oui. Vous devez simplement vrifier que vous avez ajout /. la
+fin de chaque rgle, afin que procmail sache que vous filtrez dans
+des dossiers MH. Par exemple&nbsp;:
+<P><CODE>0:</CODE>
+<P><CODE>* ^Subject:.*sylpheed</CODE>
+<P><CODE> sylpheedmail/.</CODE>
+<P>Voir le manuel de procmail pour plus de dtails.
+<H2><A NAME="ss1.25">1.25 Q25 Lors des mises jour de Sylpheed, dois-je faire attention quelquechose&nbsp;?</A>
+</H2>
+
+<P>A. Oui&nbsp;!
+<P>Mise jour vers 0.4.50&nbsp;: vous devez reconfigurer les newsgroups.
+<P>Mise jour vers 0.4.63&nbsp;: vous devez dfinir la couleur des URLs dans le menu
+de configuration.
+<P>Mise jour vers 0.4.65&nbsp;: certaines entres des menus ont t dplaces.
+<H2><A NAME="ss1.26">1.26 Q26 Comment mettre jour rapidement les diffrentes vues dans Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Utilisez Alt-U ou slectionnez &nbsp;mettre jour&nbsp; dans le menu &nbsp;Rsum&nbsp;.
+<H2><A NAME="ss1.27">1.27 Q27 Pourquoi ne puis-je pas utiliser gvim comme diteur&nbsp;?</A>
+</H2>
+
+<P>
+<P>A. Pour utiliser gvim comme diteur il est ncessaire de le lancer avec
+l'option -f (no-fork). Dans la fentre de configuration, vous devez saisir&nbsp;:
+&nbsp;gvim -f %s&nbsp;. Sans cela, l'diteur dmarre un nouveau process, ouvre un
+fichier et lorsque vous sortez de l'diteur les changements sont perdus et
+ne sont pas intgrs dans la fentre de composition.
+<P>
+<P>(Merci Ed Collins&nbsp;!)
+<P>
+<HR>
+<A HREF="sylpheed-faq-2.html">Page suivante</A>
+Page prcdente
+<A HREF="sylpheed-faq.html#toc1">Table des matires</A>
+</BODY>
+</HTML>
diff --git a/faq/fr/sylpheed-faq-2.html b/faq/fr/sylpheed-faq-2.html
new file mode 100644
index 00000000..3e99efd6
--- /dev/null
+++ b/faq/fr/sylpheed-faq-2.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>FAQ Sylpheed: FAQ Sylpheed - Installation et configuration</TITLE>
+ <LINK HREF="sylpheed-faq-3.html" REL=next>
+ <LINK HREF="sylpheed-faq-1.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-3.html">Page suivante</A>
+<A HREF="sylpheed-faq-1.html">Page prcdente</A>
+<A HREF="sylpheed-faq.html#toc2">Table des matires</A>
+<HR>
+<H2><A NAME="s2">2. FAQ Sylpheed - Installation et configuration</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Q01 Que faut-il pour compiler Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Un systme d'exploitation UNIX, respectant la norme POSIX
+ou similaire, par exemple Linux, FreeBSD ou Solaris.
+La bibliothque GTK+ 1.2.6 ou plus rcente.
+Un compilateur ANSI C rcent (gcc 2.7.2.3 devrait aussi fonctionner)
+Note&nbsp;: le compilateur Sun C ne peut pas tre utilis pour compiler Sylpheed.
+De faon optionnelle&nbsp;:
+<UL>
+<LI>la bibliothque Imlib ou gdk-pixbuf (pour la visualisation des images)</LI>
+<LI>la bibliothque libcompface (pour les icnes X-Face)</LI>
+<LI>la bibliothque libjconv (pour I18N)</LI>
+<LI>la bibliothque GPGME (pour le cryptage et la signature avec GnuPG)</LI>
+<LI>les quivalents des paquetages GTK+-devel et Xfree86-devel.</LI>
+</UL>
+
+Sans cela la configuration avec <CODE>./configure</CODE> chouera.
+<H2><A NAME="ss2.2">2.2 Q02 Comment installer Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Lorsque vous dmarrez Sylpheed pour la premire fois, il vous sera
+demand l'emplacement (rpertoire) ou vous souhaitez stocker vos dossiers.
+Par dfaut, il est dfini comme &lt;homedir&gt;/Mail (homedir tant votre rpertoire
+de connexion). Vous pouvez changer cette valeur comme bon vous semble,
+ condition qu'il s'agisse d'un rpertoire valide (sur lequel vous avez
+les droits d'criture, entre autres).
+<P>Lorsque Sylpheed est dmarr pour la premire fois, les fichiers
+de configuration sont automatiquement cr蜑s dans le rpertoire
+<CODE>$HOME/.sylpheed/</CODE> et il est demand a l'utilisateur
+de renseigner l'emplacement des boites aux lettres (la valeur
+par dfaut est: <CODE>$HOME/Mail</CODE>. Si ce rpertoire contient
+des fichiers qui ne sont pas au format MH, il vous faudra
+spcifier un autre rpertoire.
+<H2><A NAME="ss2.3">2.3 Q03 Comment dfinir un compte de messagerie&nbsp;?</A>
+</H2>
+
+<P>A. Aprs avoir dmarr Sylpheed pour la premire fois, vous pouvez
+ajouter un compte de messagerie en utilisant le menu &nbsp;Configuration&nbsp;.
+Slectionnez l'option &nbsp;Cration d'un nouveau compte&nbsp; et remplissez le
+formulaire qui est affich.
+<H2><A NAME="ss2.4">2.4 Q04 Quel est le nombre maximum de comptes supports par Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Le nombre n'est pas limit. La limite est atteinte lorsque votre
+ordinateur ne rpond plus.
+<H2><A NAME="ss2.5">2.5 Q05 Pourquoi Sylpheed ne supprime-t-il pas mes messages lorsque je presse le bouton &nbsp;Supprimer&nbsp;&nbsp;? J'ai dfini un filtre et Sylpheed ne filtre rien. J'ai dplac un message vers un autre dossier, et rien ne se passe.</A>
+</H2>
+
+<P>A. Vous devez cliquer sur le boutton &nbsp;Excuter&nbsp;. Une autre solution
+consiste slectionner l'option &nbsp;Excuter immdiatement...&nbsp; dans la
+section &nbsp;Interface&nbsp; des prfrences gnrales.
+<H2><A NAME="ss2.6">2.6 Q06 Comment dfinir une adresse ou un port pour le serveur de messagerie ou de news&nbsp;?</A>
+</H2>
+
+<P>A. Dans la configuration du compte vous pouvez dfinir le port et l'adresse du
+serveur pour ce compte.
+<H2><A NAME="ss2.7">2.7 Q07 Sylpheed peut-il trier les messages par fil de discussion&nbsp;?</A>
+</H2>
+
+<P>A. Oui. Vous pouvez le slectionner par l'option &nbsp;Vue par fil de conversation&nbsp; du
+menu &nbsp;Sommaire&nbsp;, ou en utilisant le raccourci Ctrl-T.
+<H2><A NAME="ss2.8">2.8 Q08 Puis-je crer plusieurs niveaux de dossiers pour ranger mes messages&nbsp;?</A>
+</H2>
+
+<P>A. Sans problme.
+<H2><A NAME="ss2.9">2.9 Q09 Pourquoi Sylpheed n'envoie-t-il pas mes messages&nbsp;?</A>
+</H2>
+
+<P>A. Vous devez crer au moins un compte pour pouvoir envoyer des messages.
+<H2><A NAME="ss2.10">2.10 Q10 Comment utiliser un patch aprs l'avoir tlcharg&nbsp;?</A>
+</H2>
+
+<P>A. Copier le patch dans le rpertoire Sylpheed,
+puis l'appliquer&nbsp;:
+<P><CODE>% patch -p0 &lt; some.patch</CODE>
+<P>ou, s'il est gzip&nbsp;:
+<P><CODE>% gzip -dc some.patch.gz | patch -p0</CODE>
+<P>Lancer <CODE>./autogen.sh</CODE>, supprimer le fichier <CODE>./config.cache</CODE>.
+Lancer <CODE>./configure</CODE> avec les options appropries, puis <CODE>make</CODE>.
+<H2><A NAME="ss2.11">2.11 Q11 Comment compiler avec le support des images 'compfaces'&nbsp;?</A>
+</H2>
+
+<P>A. Vous devez obtenir le paquetage <CODE>libcompface</CODE> et l'installer pour
+qu'il soit utilisable par Sylpheed.
+<H2><A NAME="ss2.12">2.12 Q12 Comment crer ma propre image 'compface'&nbsp;?</A>
+</H2>
+
+<P>A. Le paquetage <CODE>faces</CODE> contient un programme appel xbm2ikon, qui
+convertit une image xbm 48x48 au format ncessaire pour compface.
+Grce Jeff Dairiki, vous pouvez avoir un cours complet sur cela
+l'adresse&nbsp;:
+<A HREF="http://www.dairiki.org/xface/">http://www.dairiki.org/xface/</A><P>
+<H2><A NAME="ss2.13">2.13 Q13 Comment faire en sorte que mon navigateur internet (ou autre programme) utilise Sylpheed comme programme de messagerie&nbsp;?</A>
+</H2>
+
+<P>A. Dans les prfrences de ce programme, dfinir comme outil de messagerie&nbsp;:
+<CODE>sylpheed --compose</CODE>
+<H2><A NAME="ss2.14">2.14 Q14 Comment valider le support de GPG dans Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Lors de la compilation, vrifiez que vous avez ajout l'option
+<CODE>--enable-gpgme</CODE> lors de la configuration (avec <CODE>./configure</CODE>).
+<H2><A NAME="ss2.15">2.15 Q15 Mutt ne reconnat pas la structure des dossiers de Sylpheed.</A>
+</H2>
+
+<P>A. Pour remdier ce problme, vous devez crer un fichier <CODE>.xmhcache</CODE>
+vide dans chaque dossier. Pour cela, utilisez la commande <CODE>touch</CODE>.
+<H2><A NAME="ss2.16">2.16 Q17 Comment faire pour que Sylpheed signal l'arrive de nouveaux messages?</A>
+</H2>
+
+<P>A. Pour cela vous pouvez faire:
+<P>* Consulter la page des correctifs pour Sylpheed a
+<A HREF="http://www.teledix.net/sylpheed/">http://www.teledix.net/sylpheed/</A>
+pour y trouver le correctif ncessaire.
+<P>* Tlcharger Gkrellm ou un programme similaire qui signalera l'arrive
+de tout nouveau message. Gkrellm se trouve a
+<A HREF="http://www.gkrellm.net">http://www.gkrellm.net</A><P>
+<HR>
+<A HREF="sylpheed-faq-3.html">Page suivante</A>
+<A HREF="sylpheed-faq-1.html">Page prcdente</A>
+<A HREF="sylpheed-faq.html#toc2">Table des matires</A>
+</BODY>
+</HTML>
diff --git a/faq/fr/sylpheed-faq-3.html b/faq/fr/sylpheed-faq-3.html
new file mode 100644
index 00000000..75ac70af
--- /dev/null
+++ b/faq/fr/sylpheed-faq-3.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>FAQ Sylpheed: FAQ Sylpheed - L'interface</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+Page suivante
+<A HREF="sylpheed-faq-2.html">Page prcdente</A>
+<A HREF="sylpheed-faq.html#toc3">Table des matires</A>
+<HR>
+<H2><A NAME="s3">3. FAQ Sylpheed - L'interface</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Q01 Comment faire pour que Sylpheed parle ma langue&nbsp;?</A>
+</H2>
+
+<P>A. Vous devez dfinir les variables d'environnement telles que
+<CODE>LANG,LC_CTYPE, LC_MESSAGES</CODE>
+pour votre langue (par exemple &nbsp;fr_FR&nbsp; pour le franais).
+Normalement <CODE>LANG</CODE> (ou <CODE>LC_ALL</CODE>) est suffisant.
+<H2><A NAME="ss3.2">3.2 Q02 Je n'aime pas la police par dfaut, comment la changer&nbsp;?</A>
+</H2>
+
+<P>A. Dans le menu &nbsp;Configuration&nbsp;, slectionnez &nbsp;Prfrences gnrales&nbsp;, puis allez dans la section
+&nbsp;Affichage&nbsp;.
+<H2><A NAME="ss3.3">3.3 Q03 Il y a trop de colonnes dans la liste des messages (fentre du sommaire)&nbsp;!!</A>
+</H2>
+
+<P>A. Dans la configuration, prfrences gnrales, dans la section &nbsp;Affichage&nbsp;,
+cliquez sur le bouton &nbsp;lments affichs dans le sommaire&nbsp;.
+Cela fera apparatre une fentre dans laquelle vous pourrez choisir les
+lments afficher dans la fentre du sommaire.
+<H2><A NAME="ss3.4">3.4 Q04 Comment utiliser mon diteur prfr pour composer mes messages&nbsp;?</A>
+</H2>
+
+<P>A. Dans le menu de configuration, dans les prfrences gnrales, dans
+la section &nbsp;Autres&nbsp;, dfinissez l'diteur de votre choix.
+Attention, si vous slectionnez un editeur en mode console, tel que vi ou emacs
+vous devez le faire dmarrer partir d'un shell (term, xterm, rxvt,...)
+avec le paramtre -e pour dfinir l'diteur. Par exemple&nbsp;:
+<CODE>rxvt -e vi %s</CODE>
+<H2><A NAME="ss3.5">3.5 Q05 Comment changer la taille de la police dans Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. Vous pouvez dfinir la police Gtk+ dans le fichier <CODE>~/.gtkrc</CODE>,
+ou <CODE>~/.gtkrc.mine</CODE>,
+(qui est appel par <CODE>~/.gtkrc</CODE>).
+Par exemple&nbsp;:
+<CODE>style "default"
+{
+font =
+"-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1
+"
+}
+widget_class "*" style "default"</CODE>
+<H2><A NAME="ss3.6">3.6 Q06 Sylpheed sauvegarde mes messages sortants (dans Outbox). Comment arrter cela&nbsp;?</A>
+</H2>
+
+<P>A. Dans le menu de configuration, sous les prfrences gnrales,
+d-cocher la boite &nbsp;Sauvegarder les messages envoys dans la bote d'envoi&nbsp;.
+<H2><A NAME="ss3.7">3.7 Q07 Comment changer les raccourcis de Sylpheed&nbsp;?</A>
+</H2>
+
+<P>A. C'est trs simple. Imaginons que vous souhaitez assigner
+le raccourci Ctrl-Y la fonction &nbsp;Envoyer les messages en file d'attente&nbsp;.
+Cliquez sur le menu &nbsp;Messages&nbsp;, dplacez le curseur sur la fonction
+&nbsp;Envoyer les messages en file d'attente&nbsp;, et maintenant appuyez sur Ctrl-Y.
+Immdiatement, le texte du menu est mis jour et contient le
+raccourci que vous venez de dfinir. Notez que la fonction
+dont le raccourci tait Ctrl-Y (s'il y en avait une) n'a plus
+de raccourci.
+Pour supprimer un raccourci, appuyez sur la touche &nbsp;Suppr&nbsp; lorsque
+le curseur est sur la fonction, cela supprimera le raccourci associ.
+<H2><A NAME="ss3.8">3.8 Q08 Comment fermer les fentres sans utiliser la souris&nbsp;?</A>
+</H2>
+
+<P>A. Vous ne pouvez pas fermer toutes les fentres de cette faon,
+mais beaucoup se ferment en utilisant la touche &nbsp;Echap&nbsp; (Par exemple, la fentre du
+carnet d'adresses, la fentre d'affichage du code source du message, la
+fentre d'affichage des en-ttes, et d'autres).
+Essayez, vous verrez.
+<H2><A NAME="ss3.9">3.9 Q09 Comment puis-je changer le faon d'afficher la date dans la fentre du sommaire&nbsp;?</A>
+</H2>
+
+<P>A. partir de la version 0.4.65 vous le pouvez. Les options sont&nbsp;:
+%y = anne en chiffres %m = mois en chiffres
+%d = jours en chiffres %c = format par dfaut de la date et l'heure
+%A = nom du jour %a = nom du jour (abrg)
+%B = nom du mois %b = nom du mois (abrg)
+%H = heure (24 heures) %I = heure (12 heures)
+Pour plus d'informations, voir le menu de configuration, les prfrences
+gnrales, dans la section &nbsp;Affichage&nbsp;, utiliser la fentre d'entre
+du format de la date.
+<H2><A NAME="ss3.10">3.10 Q10 Pourquoi ne puis-je pas voir l'image 'compface'&nbsp;?</A>
+</H2>
+
+<P>A. Vous devez autoriser l'affichage de cet lment d'en-tte dans les prfrences.
+<H2><A NAME="ss3.11">3.11 Q11 Je ne vois toujours pas l'image, pourquoi&nbsp;?</A>
+</H2>
+
+<P>A. Vrifez que vous avez bien compil Sylpheed avec le support
+des images compfaces. Voir Q11 dans la section Installation/Configuration.
+<H2><A NAME="ss3.12">3.12 Q12 Pourquoi aucun navigateur n'est lanc lorsque je clique sur un URL&nbsp;?</A>
+</H2>
+
+<P>A. Il faut double-cliquer (deux fois rapidement).
+<H2><A NAME="ss3.13">3.13 Q13 Les pices jointes dont le nom contient un espace ne peuvent tre ouvertes&nbsp;!</A>
+</H2>
+
+<P>A. Lorsque vous lancez une application, telle que le visualiseur d'images,
+avec une pice jointe dont le nom contient des espaces, ajoutez des apostrophes
+autour du paramtre %s. Par exemple&nbsp;: gedit '%s'
+<HR>
+Page suivante
+<A HREF="sylpheed-faq-2.html">Page prcdente</A>
+<A HREF="sylpheed-faq.html#toc3">Table des matires</A>
+</BODY>
+</HTML>
diff --git a/faq/fr/sylpheed-faq.html b/faq/fr/sylpheed-faq.html
new file mode 100644
index 00000000..5bca2d77
--- /dev/null
+++ b/faq/fr/sylpheed-faq.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>FAQ Sylpheed</TITLE>
+ <LINK HREF="sylpheed-faq-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-1.html">Page suivante</A>
+Page prcdente
+Table des matires
+<HR>
+<H1>FAQ Sylpheed</H1>
+
+
+<H2>Franois Barriere (barriere.francois@libertysurf.fr)
+ </H2>
+<P><HR>
+<EM> FAQ Sylpheed base sur la version anglaise de
+ Paul Kater (paul@nlpagan.net)
+ et Jens Oberender (j.obi@troja.net).
+ Mise jour pour la version 0.7.3.
+ </EM>
+<HR>
+<P>Cette FAQ comprend les parties suivantes&nbsp;:
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-faq-1.html">FAQ Sylpheed - Informations gnrales</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-1.html#ss1.1">1.1 Q01 Existent-ils des FAQ dans d'autres langues&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.2">1.2 Q02 Qu'est-ce que Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.3">1.3 Q03 O trouver Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.4">1.4 Q04 Qui crit Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.5">1.5 Q05 Que signifie le nom, Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.6">1.6 Q06 Comment Sylpheed stocke-t-il les messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.7">1.7 Q07 Pourquoi l'auto-collection des messages ne fonctionne-t-elle pas&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.8">1.8 Q08 Sylpheed peut-il filtrer les messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.9">1.9 Q09 Sylpheed peut-il grer des comptes IMAP&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.10">1.10 Q10 Sylpheed peut-il accder une bote aux lettres locale Unix&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.11">1.11 Q11 Est-ce que Sylpheed supporte IPv6&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.12">1.12 Q12 Est-ce que Sylpheed supporte le cryptage, comme le GPG&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.13">1.13 Q13 Comment Sylpheed vrifie-t-il les types MIME&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.14">1.14 Q14 Puis-je crire des messages au format HTML avec Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.15">1.15 Q15 Sylpheed peut-il complter les noms du champ destinataire &nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.16">1.16 Q16 Bien, mais lorsque je tape la touche TAB, j'obtiens un message d'erreur.</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.17">1.17 Q17 Pourquoi Sylpheed est-il si rapide&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.18">1.18 Q18 O puis-je trouver les derniers patches pour Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.19">1.19 Q19 Comment puis-je envoyer un patch, signaler un bug, parler de Sylpheed avec d'autres personnes&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.20">1.20 Q20 Quand j'envoie un message, l'en-tte dfinit le contenu comme tant en US-ASCII mme lorsque je spcifie d'utiliser du ISO-8859-1&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.21">1.21 Q21 Pourquoi la mise en page (word wrap) semble ne pas fonctionner&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.22">1.22 Q22 O puis-je trouver la dernire version de la FAQ Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.23">1.23 Q23 Puis-je importer une bal mbox dans un dossier Sylpheed (MH)&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.24">1.24 Q24 Puis-je utiliser procmail pour trier mes messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.25">1.25 Q25 Lors des mises jour de Sylpheed, dois-je faire attention quelquechose&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.26">1.26 Q26 Comment mettre jour rapidement les diffrentes vues dans Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.27">1.27 Q27 Pourquoi ne puis-je pas utiliser gvim comme diteur&nbsp;?</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-faq-2.html">FAQ Sylpheed - Installation et configuration</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-2.html#ss2.1">2.1 Q01 Que faut-il pour compiler Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.2">2.2 Q02 Comment installer Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.3">2.3 Q03 Comment dfinir un compte de messagerie&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.4">2.4 Q04 Quel est le nombre maximum de comptes supports par Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.5">2.5 Q05 Pourquoi Sylpheed ne supprime-t-il pas mes messages lorsque je presse le bouton &nbsp;Supprimer&nbsp;&nbsp;? J'ai dfini un filtre et Sylpheed ne filtre rien. J'ai dplac un message vers un autre dossier, et rien ne se passe.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.6">2.6 Q06 Comment dfinir une adresse ou un port pour le serveur de messagerie ou de news&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.7">2.7 Q07 Sylpheed peut-il trier les messages par fil de discussion&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.8">2.8 Q08 Puis-je crer plusieurs niveaux de dossiers pour ranger mes messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.9">2.9 Q09 Pourquoi Sylpheed n'envoie-t-il pas mes messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.10">2.10 Q10 Comment utiliser un patch aprs l'avoir tlcharg&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.11">2.11 Q11 Comment compiler avec le support des images 'compfaces'&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.12">2.12 Q12 Comment crer ma propre image 'compface'&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.13">2.13 Q13 Comment faire en sorte que mon navigateur internet (ou autre programme) utilise Sylpheed comme programme de messagerie&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.14">2.14 Q14 Comment valider le support de GPG dans Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.15">2.15 Q15 Mutt ne reconnat pas la structure des dossiers de Sylpheed.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.16">2.16 Q17 Comment faire pour que Sylpheed signal l'arrive de nouveaux messages?</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-faq-3.html">FAQ Sylpheed - L'interface</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-3.html#ss3.1">3.1 Q01 Comment faire pour que Sylpheed parle ma langue&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.2">3.2 Q02 Je n'aime pas la police par dfaut, comment la changer&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.3">3.3 Q03 Il y a trop de colonnes dans la liste des messages (fentre du sommaire)&nbsp;!!</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.4">3.4 Q04 Comment utiliser mon diteur prfr pour composer mes messages&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.5">3.5 Q05 Comment changer la taille de la police dans Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.6">3.6 Q06 Sylpheed sauvegarde mes messages sortants (dans Outbox). Comment arrter cela&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.7">3.7 Q07 Comment changer les raccourcis de Sylpheed&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.8">3.8 Q08 Comment fermer les fentres sans utiliser la souris&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.9">3.9 Q09 Comment puis-je changer le faon d'afficher la date dans la fentre du sommaire&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.10">3.10 Q10 Pourquoi ne puis-je pas voir l'image 'compface'&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.11">3.11 Q11 Je ne vois toujours pas l'image, pourquoi&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.12">3.12 Q12 Pourquoi aucun navigateur n'est lanc lorsque je clique sur un URL&nbsp;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.13">3.13 Q13 Les pices jointes dont le nom contient un espace ne peuvent tre ouvertes&nbsp;!</A>
+</UL>
+<HR>
+<A HREF="sylpheed-faq-1.html">Page suivante</A>
+Page prcdente
+Table des matires
+</BODY>
+</HTML>
diff --git a/faq/it/Makefile.am b/faq/it/Makefile.am
new file mode 100644
index 00000000..619228de
--- /dev/null
+++ b/faq/it/Makefile.am
@@ -0,0 +1,11 @@
+faqdatadir = $(faqdir)/it
+
+faqdata_DATA = \
+ sylpheed-faq-1.html \
+ sylpheed-faq-2.html \
+ sylpheed-faq-3.html \
+ sylpheed-faq.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(faqdata_DATA)
diff --git a/faq/it/sylpheed-faq-1.html b/faq/it/sylpheed-faq-1.html
new file mode 100644
index 00000000..9b475031
--- /dev/null
+++ b/faq/it/sylpheed-faq-1.html
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="CoffeeCup HTML Editor 9.2">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Informazioni generali</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=next>
+
+ <LINK HREF="sylpheed-faq.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+Precedente
+<A HREF="sylpheed-faq.html#toc1">Contenuti</A>
+<A HREF="sylpheed-faq-2.html">Successivo</A>
+<HR>
+<H2><A NAME="s1">1. Sylpheed FAQ - Informazioni generali</A></H2>
+
+<H2><A NAME="ss1.1">1.1 Q01 Ci sono FAQ in altre lingue?</A>
+</H2>
+
+<P>A. S&igrave;. Qui ci sono i link per diverse traduzioni:
+<UL>
+<LI>http://www.enseirb.fr/&nbsp;dinh/sylpheed/sylpheed-FAQ-fr.html: SYLPHEED FAQ in francese grazie a DINH V. Hoa</LI>
+<LI>http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedfaq-ja.htm: SYLPHEED FAQ in giapponese grazie a WAKAI "SilverRain" Kazunao</LI>
+<LI>http://beatles.cselt.it/&nbsp;mau/sylpheed/sylpheedfaq.html: SYLPHEED FAQ in italiano grazie a Maurizio Codogno</LI>
+<LI>http://www.synconet.de/privhome/rs/sylpheed_faq.html: SYLPHEED FAQ in tedesco (versione HTML)</LI>
+<LI>http://www.synconet.de/privhome/rs/sylpheed_faq.txt: versione in tedesco solo testo, entrambe grazie a Ralf Schiffers.</LI>
+<LI>http://www.cs.uoi.gr/&nbsp;csst9910/el_sylfaq.html: SYLPHEED FAQ in greco grazie a Theofilos Intzoglou.</LI>
+<LI>http://sylpheed.republika.pl: SYLPHEED FAQ in polacco grazie a Przemyslaw Sulek.</LI>
+<LI>http://www.geocities.com/hackpando/sylpheedfaq.html: versione HTML di Marcelo Ramos, anche:</LI>
+<LI>http://www.geocities.com/hackpando/sylpheedfaq.txt: versione solo testo</LI>
+<LI>http://www.aic.uniovi.es/mones/sylpheed/faq-es/ : versione HTML, di Ricardo Mones Lastra, come pure</LI>
+<LI>http://www.aic.uniovi.es/mones/sylpheed/faq-es.dvi: FAQ-es.dvi (Device independent)</LI>
+<LI>http://www.aic.uniovi.es/mones/sylpheed/faq-es.ps: FAQ in spagnolo come Postscript file.</LI>
+<LI>http://linux.fisek.com.tr/dfisek/sylpheed-sss.html: Una FAQ in turco per Sylpheed &egrave; disponibile grazie alla traduzione di Doruk Fisek.</LI>
+<LI>http://hem.passagen.se/webplats/sylpheed-faq-se.html: FAQ svedese, grazie a Mattias Stergren</LI>
+</UL>
+
+Puoi scaricare questa FAQ in formato testo (in inglese) da http://nlpagan.net/sylpheedfaq.tar.gz
+<H2><A NAME="ss1.2">1.2 Q02 Cos'&egrave; Sylpheed?</A>
+</H2>
+
+<P>A. Sylpheed &egrave; un client di mail (&amp; lettore di news) basato su
+GTK+, eseguito su un X Window System, e progettato per
+<UL>
+<LI>Risposte rapide</LI>
+<LI>Interfaccia sofisticata e accattivante</LI>
+<LI>Facile configurazione, operazioni intuitive</LI>
+<LI>Abbondanti caratteristiche</LI>
+</UL>
+<H2><A NAME="ss1.3">1.3 Q03 Dove posso prendere Sylpheed?</A>
+</H2>
+
+<P>A. Lo puoi scaricare da <CODE>http://sylpheed.good-day.net</CODE> .
+Qui ci sono link per scaricare i sorgenti in formato .tar, e anche link
+verso siti dove puoi trovare gli RPM (per Redhat and Mandrake),
+pacchetti DEB per Debian, e installazioni per Solaris e FreeBSD.
+<H2><A NAME="ss1.4">1.4 Q04 Chi scrive Sylpheed?</A>
+</H2>
+
+<P>A. Hiroyuki Yamamoto (<CODE>hiro-y@kcn.ne.jp</CODE>)
+<H2><A NAME="ss1.5">1.5 Q05 Cosa significa il nome Sylpheed?</A>
+</H2>
+
+<P>A. Significa "peso leggero", come l'aria. Deriva dal nome
+degli spiriti del vento, i Sylphs.
+<H2><A NAME="ss1.6">1.6 Q06 In che modo Sylpheed memorizza le mail?</A>
+</H2>
+
+<P>A. Le mail sono memorizzate in file di formato MH per essere utilizzate
+da MH e EMH. I formati MailDir e mbox non sono, per il momento,
+supportati, tuttavia &egrave; possibile importare un file di tipo mbox
+in una mailbox di Sylpheed.
+<H2><A NAME="ss1.7">1.7 Q07 Perch&eacute; la collezione automatica delle mail non funziona?</A>
+</H2>
+
+<P>A. La collezione automatica &egrave; stata implementata in Sylpheed a partire dalla
+versione 0.5.1. Se hai bisogno di questa caratteristica o vuoi provarla, devi
+aggiornare la tua versione di Sylpheed.
+<H2><A NAME="ss1.8">1.8 Q08 Sylpheed pu&ograve; filtrare le mail?</A>
+</H2>
+
+<P>A. S&igrave;. Puoi trovarlo nel menu Configurazione &gt; Filtraggio.
+<P>ATTENZIONE. Il filtraggio delle mail non &egrave; ancora implementato per account di
+tipo IMAP.
+<H2><A NAME="ss1.9">1.9 Q09 Sylpheed pu&ograve; prelevare mail da un server IMAP?</A>
+</H2>
+
+<P>A. S&igrave;. IMAP &egrave; supportato dalla versione 0.4.99.
+<H2><A NAME="ss1.10">1.10 Q10 Sylpheed pu&ograve; prelevare mail da una casella UNIX di posta locale?</A>
+</H2>
+
+<P>A. S&igrave;.
+<H2><A NAME="ss1.11">1.11 Q11 Sylpheed utilizza il protocollo IPv6?</A>
+</H2>
+
+<P>A. S&igrave;, IPv6 &egrave; supportato appieno in Sylpheed.
+<H2><A NAME="ss1.12">1.12 Q12 Sylpheed supporta protocolli di crittografia tipo GPG?</A>
+</H2>
+
+<P>A. S&igrave;. GPG implementato e lavora egregiamente. Per attivarlo,
+vedi Q14 nella sezione Installazione.
+<H2><A NAME="ss1.13">1.13 Q13 Sylpheed come verifica i tipi MIME?</A>
+</H2>
+
+<P>A. Sylpheed utilizza un metodo di controllo per i tipi MIME come quello di MUTT.
+<H2><A NAME="ss1.14">1.14 Q14 Sylpheed permette la scrittura di mail in stile HTML?</A>
+</H2>
+
+<P>A. No. Una discussione &egrave; andata avanti per parecchio tempo circa questo argomento,
+e il risultato &egrave; stato che questa caratteristica era non richiesta. Se hai bisogno
+di questa caratteristica, puoi allegare una pagina web ad una mail.
+Diverse patch sono state create per facilitare questa operazione in Sylpheed.
+Puoi trovare queste patch alla Sylpheed Patch Page (vedi pi&ugrave; avanti in questo
+documento).
+<H2><A NAME="ss1.15">1.15 Q15 Sylpheed completa automaticamente i nomi nel campo indirizzo?</A>
+</H2>
+
+<P>A. S&igrave;. Quando cerchi un nome che inizia per "<CODE>don</CODE>",
+digita "<CODE>don</CODE>" (senza le virgolette) e premi il tasto TAB.
+Questo mostrer&agrave; il nome corretto (solo quando un solo "don"
+esiste nella rubrica. Negli altri casi compare una dropdown list,
+che ti permette di selezionare il nome che preferisci.
+E.g. Donald Duck, Don Johnson. Ma ricorda: appariranno nella lista solo gli
+indirizzi che iniziano per "<CODE>don</CODE>" (tipo "<CODE>don.giovanni@maffia.org</CODE>").
+<H2><A NAME="ss1.16">1.16 Q16 OK, ma quando premo il tasto TAB ottengo un errore.</A>
+</H2>
+
+<P>A. Quando vuoi utilizzare il completamento automatico dei nome, assicurati che
+ci siano dei nomi nella rubrica. Se non ce ne sono, sar&agrave; dura per Sylpheed capire
+che nome vuoi e quindi completarlo.
+<H2><A NAME="ss1.17">1.17 Q17 Perch&eacute; Sylpheed &egrave; cos&igrave; veloce?</A>
+</H2>
+
+<P>A. E' stato progettato per esserlo!
+<H2><A NAME="ss1.18">1.18 Q18 Dove posso prendere le ultime patch per Sylpheed?</A>
+</H2>
+
+<P>A. Alla Sylpheed Patch homepage:
+<CODE>http://www.teledix.net/sylpheed/</CODE>
+(Leggi la sezione Installazione su come installare una patch)
+<H2><A NAME="ss1.19">1.19 Q19 Come posso spedire patch, report di bug, discorrere circa Sylpheed con altri utenti?</A>
+</H2>
+
+<P>A. Per parlare con altri utenti, aderisci alla Sylpheed mailing
+list su <CODE>http://sylpheed.good-day.net</CODE>. ATTENZIONE: c'&egrave; una versione
+giapponese ed una inglese della lista, perci&ograve; scegli quella giusta!
+Se hai fatto una patch che vuoi far conoscere anchbe agli altri,
+contatto il manager della Sylpheed Patch homepage, all'indirizzo <CODE>sylpheed@thewildbeast.co.uk</CODE>
+<H2><A NAME="ss1.20">1.20 Q20 Quando spedisco una mail, il campo Content-Type dell'intestazione dice che la mail &egrave; in US-ASCII, anche se io ho specificato ISO-8859-1?</A>
+</H2>
+
+<P>A. Se non ci sono caratteri nel corpo del messaggio di tipo
+ISO-8859-1 (>= 0x80), Sylpheed modificher&agrave; automaticamente il valore del
+charset nel campo Content-Type dell'intestazione a US-ASCII.
+<H2><A NAME="ss1.21">1.21 Q21 Perch&eacute; sembra che il word wrap non funzioni?</A>
+</H2>
+
+<P>A. Word wrapping &egrave; una piccola peculiarit&agrave;. Puoi scrivere una linea di testo
+lunga quanto vuoi. Nel momento in cui spedisci o metti in coda la mail
+col la linea lunga, Sylpheed spezzer&agrave; la linea in tante linee non pi&ugrave; lunghe
+di quanto tu abbia configurato e poi la mail viene messa in coda.
+Questo &egrave; pi&ugrave; conveniente di quanto tu possa pensare. Una volta che la linea
+&egrave; spezzettata (interruzioni di linea sono inseriti nel testo)
+ed aggiungi qualcosa nella prima linea di queste, la linea successiva
+si muover&agrave; in una linea separata, lasciando una o due parole dalla linea
+precedente da sole.
+Esempio
+<PRE>
+ Questa &egrave; una linea lunga
+ &egrave; stata spezzata.
+</PRE>
+<P>Ora aggiungo una parola alla prima linea:
+<PRE>
+ Questa &egrave; una linea lunga
+ che
+ &egrave; stata spezzata.
+</PRE>
+<P>Ci&ograve; causerebbe una gran quantit&agrave; di riformattazione a mano per avere
+di nuovo una mail presentabile e leggibile.
+<H2><A NAME="ss1.22">1.22 Q22 Dove posso trovare l'ultima FAQ su Sylpheed?</A>
+</H2>
+
+<P>A. Vai a <CODE>http://nlpagan.net/sylpheedfaq.htm</CODE> dove le FAQ
+sono disponibili in inglese. Puoi anche trovare link a FAQ in altre lingue.
+<P>Puoi anche andare a http://www.sourceforge.net e prelevare le faq e il
+manuale dal progretto sylpheeddoc. Entrambi i documenti sono disponibili
+in diverse lingue e di solito contengono gli ultimi aggiornamenti.
+<H2><A NAME="ss1.23">1.23 Q23 Posso importare una casella di tipo mbox nella struttura di tipo MH di Sylpheed?</A>
+</H2>
+
+<P>A. s&igrave;, basta creare/selezionare la cartella dove vuoi mettere le tue mail,
+e selezionare "Importa mbox da file..." nel menu File.
+<H2><A NAME="ss1.24">1.24 Q24 Posso utilizzare 'procmail' per ordinare le mail con una struttura di tipo MH?</A>
+</H2>
+
+<P>A. S&igrave;. Assicurati solo di aggiungere /. alla fine dei ruoli cos&igrave; che
+procmail riconosce che tu stai filtrando in una cartella di tipo MH. Esempio:
+<P><CODE>0:</CODE>
+<P><CODE>* ^Subject:.*sylpheed</CODE>
+<P><CODE> sylpheedmail/.</CODE>
+<P>Leggi il man di procmail per maggiori dettagli.
+<H2><A NAME="ss1.25">1.25 Q25 Quando effettuo un'upgrade di Sylpheed, c'&egrave; qualcosa a cui devo stare attento?</A>
+</H2>
+
+<P>A. S&igrave;!
+<P>Aggiornamento alla 0.4.50: devi riconfigurare i tuoi settaggi per i newsgroup
+<P>Aggiornamento alla 0.4.63: devi configurare i colori per le stringhe URL dal menu Configurazione.
+<P>Aggiornamento alla 0.4.65: alcune voci di menu sono state spostate
+<H2><A NAME="ss1.26">1.26 Q26 Come posso aggiornare velocemente le viste in Sylpheed?</A>
+</H2>
+
+<P>A. Premi Alt-U o seleziona "update" dal menu Sommario.
+<H2><A NAME="ss1.27">1.27 Q27 Perch&eacute; non posso utilizzare 'gvim' come editor esterno?</A>
+</H2>
+
+<P>A. Se vuoi davvero utilizzare gvim come editor esterno, &egrave; necessario
+lanciarlo con l'opzione no-fork (parametro -f), ad esempio nel dialog box di
+configurazione devi inserire "gvim -f %s". Se non lo fai, l'editor forka e
+apre un file separato; quando si esce dall'editor i cambiamenti vengono persi
+e non vengono inseriti nella finestra di composizione.
+<P>(Grazie, Ed Collins!)
+<HR>
+Precedente
+<A HREF="sylpheed-faq.html#toc1">Contenuti</A>
+<A HREF="sylpheed-faq-2.html">Successivo</A>
+</BODY>
+</HTML>
diff --git a/faq/it/sylpheed-faq-2.html b/faq/it/sylpheed-faq-2.html
new file mode 100644
index 00000000..418c7a40
--- /dev/null
+++ b/faq/it/sylpheed-faq-2.html
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="CoffeeCup HTML Editor 9.2">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Installazione e Configurazione</TITLE>
+ <LINK HREF="sylpheed-faq-3.html" REL=next>
+ <LINK HREF="sylpheed-faq-1.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-1.html">Precedente</A>
+<A HREF="sylpheed-faq.html#toc2">Contenuti</A>
+<A HREF="sylpheed-faq-3.html">Successivo</A>
+<HR>
+<H2><A NAME="s2">2. Sylpheed FAQ - Installazione e Configurazione</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Q01 Cosa devo avere per compilare Sylpheed?</A>
+</H2>
+
+<P>A. QUalsiasi UNIX POSIX compliant o sistema operativo simile tipo Linux,
+FreeBSD, Solaris
+GTK+ 1.2.6 o successivi
+Un compilatore ANSI C recente (gcc 2.7.2.3 dovrebbe funzionare ancora)
+ATTENZIONE: &egrave; documentato che il compilatore Sun C non compila Sylpheed.
+Opzioni:
+<UL>
+<LI>Imlib o gdk-pixbuf (per visualizzare le immagini dal client)</LI>
+<LI>libcompface (per X-Face)</LI>
+<LI>libjconv (per I18N)</LI>
+<LI>GPGME (per GnuPG)</LI>
+<LI>l'equivalente del GTK+-devel e Xfree86-devel.</LI>
+</UL>
+
+Senza tutto ci&ograve; ./configure fallir&agrave;.
+<H2><A NAME="ss2.2">2.2 Q02 Come posso configurare Sylpheed?</A>
+</H2>
+
+<P>A. Quando esegui Sylpheed la prima volta, ti verr&agrave; chiesto dove vuoi
+memorizzare le tue mail. Il default &egrave; &lt;homedir&gt;/Mail. Puoi cambiarlo in
+qualsiasi cosa tu preferisci purch&eacute; sia un nome di directory valido.
+<P>ATTENZIONE: Quando esegui Sylpheed la prima volta, viene creato automaticamente
+il file di configurazione sotto $HOME/.sylpheed/, e ti viene richiesto dove
+posizionare la tua mailbox. Il default &egrave; $HOME/Mail. Se ci sono file preesistenti
+che non sono in formato MH, dovrai specificare un'altra directory.
+<H2><A NAME="ss2.3">2.3 Q03 Come posso configurare un account?</A>
+</H2>
+
+<P>A. Dopo aver eseguito la prima volta Sylpheed, puoi aggiungere un account
+selezionando il menu "Configuratione". Seleziona l'opzione "Crea nuovo account..."
+e riempi tutti i campi appropriati.
+<H2><A NAME="ss2.4">2.4 Q04 Quanti accout posso configurare?</A>
+</H2>
+
+<P>A. Il numero &egrave; illimitato. Hai raggiunto il limite quando il tuo computer
+finisce di risponderti.
+<H2><A NAME="ss2.5">2.5 Q05 Perch&eacute; Sylpheed non cancella le mie mail quando premo "delete"? Configuro un filtro, e Sylpheed non filtra. Sposto una mail in una cartella differente e questa non si muove.</A>
+</H2>
+
+<P>A. Devi premere il bottone "Esegui".
+Altra soluzione: nei settaggi della configurazione
+(Opzioni globali... &gt; tab "Interfaccia") devi selezionare l'opzione
+"Esegui immediatamente quando sposti o elimini dei messaggi".
+<H2><A NAME="ss2.6">2.6 Q06 Posso configurare indirizzi speciali/porte per i miei server di mail/news?</A>
+</H2>
+
+<P>A. Certamente. Nella configurazione di ogni singolo account puoi
+specificare la porta/indirizzo che vuoi usare.
+<H2><A NAME="ss2.7">2.7 Q07 Sylpheed ha qualche opzione per le discussioni?</A>
+</H2>
+
+<P>A. S&igrave;. Puoi abilitare o disabilitare dal menu Vista,
+selezionando l'opzione "Vista discussione" o premendo Ctrl+T.
+<H2><A NAME="ss2.8">2.8 Q08 Posso creare livelli multipli di sotto cartelle per memorizzare le mail?</A>
+</H2>
+
+<P>A. Certamente. Senza nessun problema.
+<H2><A NAME="ss2.9">2.9 Q09 Perch&eacute; Sylpheed non spedisce le mail in uscita?</A>
+</H2>
+
+<P>A. Devi creare almeno un account per poter spedire la posta.
+<H2><A NAME="ss2.10">2.10 Q10 Come posso applicare una patch dopo che l'ho scaricata?</A>
+</H2>
+
+<P>A. Copia la patch nella directory dove risiedono i sorgenti di Sylpheed.
+Applica la patch:
+<P><CODE>% patch -p0 &lt; some.patch</CODE>
+<P>Oppure, se &egrave; gzipped:
+<P><CODE>% gzip -dc some.patch.gz | patch -p0</CODE>
+<P>Esegui <CODE>./autogen.sh</CODE>, rimuovi il file <CODE>/config.cache</CODE>
+(sempre che tu non voglia installarlo nel prefix
+<CODE>/usr/local</CODE>).
+Esegui <CODE>./configure</CODE> con le opzioni appropriate e
+poi <CODE>make</CODE>.
+(Queste istruzioni le trovi nella home page delle patch di Sylpheed.)
+<H2><A NAME="ss2.11">2.11 Q11 Come posso compilare il supporto per le immagini di tipo compface?</A>
+</H2>
+
+<P>A. Devi avere installato sul tuo sistema un package di nome <CODE>libcompface</CODE>,
+cos&igrave; &egrave; disponibile per la compialzione di Sylpheed.
+<H2><A NAME="ss2.12">2.12 Q12 Come posso fare la mia immagine compface?</A>
+</H2>
+
+<P>A. Il package libcompface contiene un programma chiamato xbm2ikon,
+che converte un'immagine xbm 48x48 al formato richiesto da compface.
+Grazie a Jeff Dairiki, Puoi avere un corso completo online per questa caratteristica.
+Visita http://www.dairiki.org/xface/ per i dettagli.
+<H2><A NAME="ss2.13">2.13 Q13 Come posso specificare al mio browser/client di news/altro programma di usare Sylpheed come programma per le mail?</A>
+</H2>
+
+<P>A. Nella parte di configurazione del programma, scrivi
+<CODE>sylpheed --compose</CODE>
+<H2><A NAME="ss2.14">2.14 Q14 Come posso abilitare il supporto per GPG in Sylpheed?</A>
+</H2>
+
+<P>A. Quando compili Sylpheed, assicurati di aggiungere <CODE>--enable-gpgme</CODE> al ./configure.
+Quando la procedura di compilazione termina, troverai una sezione "privacy"
+nel menu Configurazione -&gt; Opzioni globali... .
+<H2><A NAME="ss2.15">2.15 Q15 Mutt non riconosce la struttura MH di Sylpheed</A>
+</H2>
+
+<P>A. Per farla riconoscere devi usare il comando "touch" in ogni cartella MH.
+"touch" il file .xmhcache e Mutt funzioner&agrave;.
+<H2><A NAME="ss2.16">2.16 Q16 Se visualizzo una GIF all'interno di Sylpheed ottengo un segmentation fault.</A>
+</H2>
+
+<P>A. Nel caso succedesse, puoi rimediare facilmente aggiungendo la seguente
+riga nel file /etc/mime.types:
+<P><CODE>image/gif gif</CODE>
+<H2><A NAME="ss2.17">2.17 Q17 Come posso fare che Sylpheed mi avverta quando arrivano nuove mail?</A>
+</H2>
+
+<P>A. Per questo hai diverse soluzioni:
+<P>* Verifica se nella Sylpheed patch page (http://www.teledix.net/sylpheed/) c'&egrave; una patch per le nuove mail.
+<P>* Scarica Gkrellm o un programma simile che pu&ograve; notificare l'arrivo di nuove
+mail. Gkrellm &egrave; disponibile su http://www.gkrellm.net
+<P>
+<HR>
+<A HREF="sylpheed-faq-1.html">Precedente</A>
+<A HREF="sylpheed-faq.html#toc2">Contenuti</A>
+<A HREF="sylpheed-faq-3.html">Successivo</A>
+</BODY>
+</HTML>
diff --git a/faq/it/sylpheed-faq-3.html b/faq/it/sylpheed-faq-3.html
new file mode 100644
index 00000000..c95c8dad
--- /dev/null
+++ b/faq/it/sylpheed-faq-3.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="CoffeeCup HTML Editor 9.2">
+ <TITLE>Sylpheed FAQ: Sylpheed FAQ - Interfaccia</TITLE>
+ <LINK HREF="sylpheed-faq-2.html" REL=previous>
+ <LINK HREF="sylpheed-faq.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-faq-2.html">Precedenti</A>
+<A HREF="sylpheed-faq.html#toc3">Contenuti</A>
+Successivo
+<HR>
+<H2><A NAME="s3">3. Sylpheed FAQ - Interfaccia</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Q01 Come posso settare la mia lingua su Sylpheed?</A>
+</H2>
+
+<P>A. Devi settare alcuni parametri dell'environment come
+<CODE>LANG, LC_CTYPE, LC_MESSAGES</CODE> nella tua lingua locale.
+Di solito <CODE>LANG</CODE> (o <CODE>LC_ALL</CODE>) &egrave; sufficiente.
+<H2><A NAME="ss3.2">3.2 Q02 Non mi piace il font di default. Posso cambiarlo?</A>
+</H2>
+
+<P>A. S&igrave;. In Configurazione &gt; Opzioni globali... sotto il tab "Visualizzazione".
+<H2><A NAME="ss3.3">3.3 Q03 Ci sono troppe colonne nella lista dei messaggi!!</A>
+</H2>
+
+<P>A. In Configurazione &gt; Opzioni globali... sotto il tab "Visualizzazione"
+premi il bottone "Imposta le voci visibili nel sommario".
+Questo mostra una finestra con tutte le opzioni che puoi vedere o non vedere nella
+lista dei messaggi.
+<H2><A NAME="ss3.4">3.4 Q04 Posso utilizzare un editor differente per scrivere le mie mail?</A>
+</H2>
+
+<P>A. Certamente. In Configurazione &gt; Opzioni globali... sotto il tab "Altro"
+puoi definire l'editor che preferisci.
+Ricorda, se vuoi usare un editor a linea di comando (non grafico) tipo vi o emacs,
+devi precedere il nome dell'editor con il terminale su cui eseguirlo
+(term, term, rxvt) col parametro -e. Esempio: <CODE>rxvt -e vi %s</CODE>
+<H2><A NAME="ss3.5">3.5 Q05 Come posso cambiare la dimensione del font nell'interfaccia di Sylpheed?</A>
+</H2>
+
+<P>A. Puoi settare il font del GTK+ con <CODE>~/.gtkrc</CODE>, o
+<CODE>~/.gtkrc.mine</CODE>,
+(che &egrave; incluso in <CODE>~/.gtkrc</CODE>).
+Per esempio:
+<CODE>style "default"
+{
+font =
+"-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1
+"
+}
+widget_class "*" style "default"</CODE>
+<H2><A NAME="ss3.6">3.6 Q06 Sylpheed salva le mie mail in uscita (in Outbox). Posso fermare questa opzione?</A>
+</H2>
+
+<P>A. In Configurazione &gt; Opzioni globali... sotto il tab "Invia" c'&egrave;
+l'opzione "Salva i messaggi inviati nella cartella 'In Uscita'".
+Deseleziona l'opzione e risolvi il tuo quesito.
+<H2><A NAME="ss3.7">3.7 Q07 Come posso cambiare la mappa dei tasti (tasti veloci) in Sylpheed?</A>
+</H2>
+
+<P>A. E' molto semplice. Supponi che vuoi assegnare una sequenza di tasti ad
+una funzione, esempio spedire tutte i messaggi accodati premendo Ctrl-Y.
+Seleziona il menu "Messaggio", posiziona il mouse sulla voce "Invia i messaggi
+accodati". Ora premi Ctrl-Y. Immediatamente il menu viene aggiornato con
+la modifica effettuata. ATTENZIONE: verifica che la sequenza di tasti non gi&agrave;
+assegnata prima di fare ci&ograve;. Se vuoi rimuovere il settaggio, fai la stessa cosa,
+ma premi il tasto "delete" sulla voce del menu. Questo rimuovera la sequenza di
+tasti veloce assegnata a quella voce.
+<H2><A NAME="ss3.8">3.8 Q08 Posso chiudere Sylpheed senza utilizzare il mouse?</A>
+</H2>
+
+<P>A. Certamente!! Non tutte le finestre, ma premendo il tasto ESCape,
+puoi chiudere la rubrica, la finestra di visualizzazione del messaggio sorgente
+(Vista&gt;Vista sorgente), la finestra di visualizza delle intestazioni e molte
+altre. Fai una prova e troverai quali delle finestre di Sylpheed funzionano allo
+stesso modo.
+<H2><A NAME="ss3.9">3.9 Q09 Posso cambiare il modo di visualizzazione della data nel sommario dei messaggi?</A>
+</H2>
+
+<P>A. Dalla versione 0.4.65 si pu&ograve;. Per avere una lista completa delle opzioni
+vai al menu Configurazione, seleziona Opzioni globali, tab Visualizzazione e
+il tasto vicino al box "Formato della Data".
+<H2><A NAME="ss3.10">3.10 Q10 Perch&eacute; non posso vedere l'immagine compface?</A>
+</H2>
+
+<P>A. Devi abilitare la visualizzzione del pannello intestazioni nelle opzioni
+globali.
+<H2><A NAME="ss3.11">3.11 Q11 Continuo a non vederla. Perch&eacute;?</A>
+</H2>
+
+<P>A. Non hai compilato Sylpheed col support Compface. Leggi Q11
+nella sezione Installazione e Configurazione.
+<H2><A NAME="ss3.12">3.12 Q12 Perch&eacute; l'URL Launcher non apre il web browser che ho definito?</A>
+</H2>
+
+<P>A. Devi fare un doppio click sull'URL.
+<H2><A NAME="ss3.13">3.13 Q13 Gli allegati con spazi nel nome non si aprono!</A>
+</H2>
+
+<P>A. Quando provi ad eseguire un'applicazione di supporto, tipo un visualizzatore
+di immagini, con l'allegato che ha spazi nel nome del file, metti la virgoletta
+singola attorno al parametro %s. Esempio: xv '%s'
+<HR>
+<A HREF="sylpheed-faq-2.html">Precedente</A>
+<A HREF="sylpheed-faq.html#toc3">Contenuti</A>
+Successivo
+</BODY>
+</HTML>
diff --git a/faq/it/sylpheed-faq.html b/faq/it/sylpheed-faq.html
new file mode 100644
index 00000000..477821e5
--- /dev/null
+++ b/faq/it/sylpheed-faq.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="CoffeeCup HTML Editor 9.2">
+ <TITLE>Sylpheed FAQ</TITLE>
+ <LINK HREF="sylpheed-faq-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+Precedente
+Contenuti
+<A HREF="sylpheed-faq-1.html">Successivo</A>
+<HR>
+<H1>Sylpheed FAQ</H1>
+
+
+<H2>Paul Kater (paul@nlpagan.net)
+ e Jens Oberender (j.obi@troja.net)
+ </H2>
+<P><HR>
+<EM> Sylpheed FAQ (per la versione 0.7.3)
+ </EM>
+<HR>
+<P>Queste FAQ consistono delle seguenti sezioni:
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-faq-1.html">Sylpheed FAQ - Informazioni Generali</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-1.html#ss1.1">1.1 Q01 Ci sono FAQ in altre lingue?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.2">1.2 Q02 Cos'&egrave; Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.3">1.3 Q03 Dove posso prendere Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.4">1.4 Q04 Chi scrive Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.5">1.5 Q05 Cosa significa il nome Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.6">1.6 Q06 In che modo Sylpheed memorizza le mail?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.7">1.7 Q07 Perch&eacute; la collezione automatica delle mail non funziona?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.8">1.8 Q08 Sylpheed pu&ograve; filtrare le mail?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.9">1.9 Q09 Sylpheed pu&ograve; prelevare mail da un server IMAP?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.10">1.10 Q10 Sylpheed pu&ograve; prelevare mail da una casella UNIX di posta locale?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.11">1.11 Q11 Sylpheed utilizza il protocollo IPv6?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.12">1.12 Q12 Sylpheed supporta protocolli di crittografia tipo GPG?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.13">1.13 Q13 Sylpheed come verifica i tipi MIME?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.14">1.14 Q14 Sylpheed permette la scrittura di mail in stile HTML?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.15">1.15 Q15 Sylpheed completa automaticamente i nomi nel campo indirizzo?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.16">1.16 Q16 OK, ma quando premo il tasto TAB ottengo un errore.</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.17">1.17 Q17 Perch&eacute; Sylpheed &egrave; cos&igrave; veloce?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.18">1.18 Q18 Dove posso prendere le ultime patch per Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.19">1.19 Q19 Come posso spedire patch, report di bug, discorrere circa Sylpheed con altri utenti?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.20">1.20 Q20 Quando spedisco una mail, il campo Content-Type dell'intestazione dice che la mail &egrave; in US-ASCII, anche se io ho specificato ISO-8859-1?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.21">1.21 Q21 Perch&eacute; sembra che il word wrap non funzioni?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.22">1.22 Q22 Dove posso trovare l'ultima FAQ su Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.23">1.23 Q23 Posso importare una casella di tipo mbox nella struttura di tipo MH di Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.24">1.24 Q24 Posso utilizzare 'procmail' per ordinare le mail con una struttura di tipo MH?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.25">1.25 Q25 Quando effettuo un'upgrade di Sylpheed, c'&egrave; qualcosa a cui devo stare attento?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.26">1.26 Q26 Come posso aggiornare velocemente le viste in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-1.html#ss1.27">1.27 Q27 Perch&eacute; non posso utilizzare 'gvim' come editor esterno?</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-faq-2.html">Sylpheed FAQ - Installatione e Configurazione</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-2.html#ss2.1">2.1 Q01 Cosa devo avere per compilare Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.2">2.2 Q02 Come posso configurare Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.3">2.3 Q03 Come posso configurare un account?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.4">2.4 Q04 Quanti accout posso configurare?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.5">2.5 Q05 Perch&eacute; Sylpheed non cancella le mie mail quando premo "delete"? Configuro un filtro, e Sylpheed non filtra. Sposto una mail in una cartella differente e questa non si muove.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.6">2.6 Q06 Posso configurare indirizzi speciali/porte per i miei server di mail/news?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.7">2.7 Q07 Sylpheed ha qualche opzione per le discussioni?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.8">2.8 Q08 Posso creare livelli multipli di sotto cartelle per memorizzare le mail?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.9">2.9 Q09 Perch&eacute; Sylpheed non spedisce le mail in uscita?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.10">2.10 Q10 Come posso applicare una patch dopo che l'ho scaricata?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.11">2.11 Q11 Come posso compilare il supporto per le immagini di tipo compface?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.12">2.12 Q12 Come posso fare la mia immagine compface?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.13">2.13 Q13 Come posso specificare al mio browser/client di news/altro programma di usare Sylpheed come programma per le mail?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.14">2.14 Q14 Come posso abilitare il supporto per GPG in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.15">2.15 Q15 Mutt non riconosce la struttura MH di Sylpheed</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.16">2.16 Q16 Se visualizzo una GIF all'interno di Sylpheed ottengo un segmentation fault.</A>
+<LI><A HREF="sylpheed-faq-2.html#ss2.17">2.17 Q17 Come posso fare che Sylpheed mi avverta quando arrivano nuove mail?</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-faq-3.html">Sylpheed FAQ - Interfaccia</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-faq-3.html#ss3.1">3.1 Q01 Come posso settare la mia lingua su Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.2">3.2 Q02 Non mi piace il font di default. Posso cambiarlo?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.3">3.3 Q03 Ci sono troppe colonne nella lista dei messaggi!!</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.4">3.4 Q04 Posso utilizzare un editor differente per scrivere le mie mail?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.5">3.5 Q05 Come posso cambiare la dimensione del font nell'interfaccia di Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.6">3.6 Q06 Sylpheed salva le mie mail in uscita (in Outbox). Posso fermare questa opzione?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.7">3.7 Q07 Come posso cambiare la mappa dei tasti (tasti veloci) in Sylpheed?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.8">3.8 Q08 Posso chiudere Sylpheed senza utilizzare il mouse?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.9">3.9 Q09 Posso cambiare il modo di visualizzazione della data nel sommario dei messaggi?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.10">3.10 Q10 Perch&eacute; non posso vedere l'immagine compface?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.11">3.11 Q11 Continuo a non vederla. Perch&eacute;?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.12">3.12 Q12 Perch&eacute; l'URL Launcher non apre il web browser che ho definito?</A>
+<LI><A HREF="sylpheed-faq-3.html#ss3.13">3.13 Q13 Gli allegati con spazi nel nome non si aprono!</A>
+</UL>
+<HR>
+Precedente
+Contenuti
+<A HREF="sylpheed-faq-1.html">Successivo</A>
+</BODY>
+</HTML>
diff --git a/install-sh b/install-sh
new file mode 100755
index 00000000..c122ef95
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644
index 00000000..75129192
--- /dev/null
+++ b/intl/ChangeLog
@@ -0,0 +1,4 @@
+2004-01-29 GNU <bug-gnu-gettext@gnu.org>
+
+ * Version 0.14.1 released.
+
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644
index 00000000..b4b846ca
--- /dev/null
+++ b/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.14.1
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644
index 00000000..dcdc4008
--- /dev/null
+++ b/intl/bindtextdom.c
@@ -0,0 +1,363 @@
+/* Implementation of the bindtextdomain(3) function
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs. */
+extern const char _nl_default_dirname[];
+#ifdef _LIBC
+extern const char _nl_default_dirname_internal[] attribute_hidden;
+#else
+# define INTUSE(name) name
+#endif
+
+/* List with bindings of specific domains. */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
+#endif
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+ to be used for the DOMAINNAME message catalog.
+ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+ modified, only the current value is returned.
+ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+ modified nor returned. */
+static void
+set_binding_values (const char *domainname,
+ const char **dirnamep, const char **codesetp)
+{
+ struct binding *binding;
+ int modified;
+
+ /* Some sanity checks. */
+ if (domainname == NULL || domainname[0] == '\0')
+ {
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ return;
+ }
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ modified = 0;
+
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding != NULL)
+ {
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The current binding has be to returned. */
+ *dirnamep = binding->dirname;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->dirname;
+ if (strcmp (dirname, result) != 0)
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ result = (char *) INTUSE(_nl_default_dirname);
+ else
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, dirname, len);
+#endif
+ }
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->dirname != INTUSE(_nl_default_dirname))
+ free (binding->dirname);
+
+ binding->dirname = result;
+ modified = 1;
+ }
+ }
+ *dirnamep = result;
+ }
+ }
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset == NULL)
+ /* The current binding has be to returned. */
+ *codesetp = binding->codeset;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->codeset;
+ if (result == NULL || strcmp (codeset, result) != 0)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, codeset, len);
+#endif
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->codeset != NULL)
+ free (binding->codeset);
+
+ binding->codeset = result;
+ binding->codeset_cntr++;
+ modified = 1;
+ }
+ }
+ *codesetp = result;
+ }
+ }
+ }
+ else if ((dirnamep == NULL || *dirnamep == NULL)
+ && (codesetp == NULL || *codesetp == NULL))
+ {
+ /* Simply return the default values. */
+ if (dirnamep)
+ *dirnamep = INTUSE(_nl_default_dirname);
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ else
+ {
+ /* We have to create a new binding. */
+ size_t len = strlen (domainname) + 1;
+ struct binding *new_binding =
+ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+ if (__builtin_expect (new_binding == NULL, 0))
+ goto failed;
+
+ memcpy (new_binding->domainname, domainname, len);
+
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The default value. */
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+ memcpy (result, dirname, len);
+#endif
+ dirname = result;
+ }
+ }
+ *dirnamep = dirname;
+ new_binding->dirname = (char *) dirname;
+ }
+ else
+ /* The default value. */
+ new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
+
+ new_binding->codeset_cntr = 0;
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset != NULL)
+ {
+ char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+ memcpy (result, codeset, len);
+#endif
+ codeset = result;
+ new_binding->codeset_cntr++;
+ }
+ *codesetp = codeset;
+ new_binding->codeset = (char *) codeset;
+ }
+ else
+ new_binding->codeset = NULL;
+
+ /* Now enqueue it. */
+ if (_nl_domain_bindings == NULL
+ || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+ {
+ new_binding->next = _nl_domain_bindings;
+ _nl_domain_bindings = new_binding;
+ }
+ else
+ {
+ binding = _nl_domain_bindings;
+ while (binding->next != NULL
+ && strcmp (domainname, binding->next->domainname) > 0)
+ binding = binding->next;
+
+ new_binding->next = binding->next;
+ binding->next = new_binding;
+ }
+
+ modified = 1;
+
+ /* Here we deal with memory allocation failures. */
+ if (0)
+ {
+ failed_codeset:
+ if (new_binding->dirname != INTUSE(_nl_default_dirname))
+ free (new_binding->dirname);
+ failed_dirname:
+ free (new_binding);
+ failed:
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ }
+
+ /* If we modified any binding, we flush the caches. */
+ if (modified)
+ ++_nl_msg_cat_cntr;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+char *
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
+{
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+char *
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
+{
+ set_binding_values (domainname, NULL, &codeset);
+ return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library. */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
diff --git a/intl/config.charset b/intl/config.charset
new file mode 100755
index 00000000..43d45fb7
--- /dev/null
+++ b/intl/config.charset
@@ -0,0 +1,608 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+# Copyright (C) 2000-2004 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# The table consists of lines of the form
+# ALIAS CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+# name MIME? used by which systems
+# ASCII, ANSI_X3.4-1968 glibc solaris freebsd darwin
+# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-3 Y glibc solaris
+# ISO-8859-4 Y osf solaris freebsd darwin
+# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-6 Y glibc aix hpux solaris
+# ISO-8859-7 Y glibc aix hpux irix osf solaris
+# ISO-8859-8 Y glibc aix hpux osf solaris
+# ISO-8859-9 Y glibc aix hpux irix osf solaris
+# ISO-8859-13 glibc
+# ISO-8859-14 glibc
+# ISO-8859-15 glibc aix osf solaris freebsd
+# KOI8-R Y glibc solaris freebsd darwin
+# KOI8-U Y glibc freebsd darwin
+# KOI8-T glibc
+# CP437 dos
+# CP775 dos
+# CP850 aix osf dos
+# CP852 dos
+# CP855 dos
+# CP856 aix
+# CP857 dos
+# CP861 dos
+# CP862 dos
+# CP864 dos
+# CP865 dos
+# CP866 freebsd darwin dos
+# CP869 dos
+# CP874 woe32 dos
+# CP922 aix
+# CP932 aix woe32 dos
+# CP943 aix
+# CP949 osf woe32 dos
+# CP950 woe32 dos
+# CP1046 aix
+# CP1124 aix
+# CP1125 dos
+# CP1129 aix
+# CP1250 woe32
+# CP1251 glibc solaris darwin woe32
+# CP1252 aix woe32
+# CP1253 woe32
+# CP1254 woe32
+# CP1255 glibc woe32
+# CP1256 woe32
+# CP1257 woe32
+# GB2312 Y glibc aix hpux irix solaris freebsd darwin
+# EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-TW glibc aix hpux irix osf solaris
+# BIG5 Y glibc aix hpux osf solaris freebsd darwin
+# BIG5-HKSCS glibc solaris
+# GBK glibc aix osf solaris woe32 dos
+# GB18030 glibc solaris
+# SHIFT_JIS Y hpux osf solaris freebsd darwin
+# JOHAB glibc solaris woe32
+# TIS-620 glibc aix hpux osf solaris
+# VISCII Y glibc
+# TCVN5712-1 glibc
+# GEORGIAN-PS glibc
+# HP-ROMAN8 hpux
+# HP-ARABIC8 hpux
+# HP-GREEK8 hpux
+# HP-HEBREW8 hpux
+# HP-TURKISH8 hpux
+# HP-KANA8 hpux
+# DEC-KANJI osf
+# DEC-HANYU osf
+# UTF-8 Y glibc aix hpux osf solaris
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+ linux-gnulibc1*)
+ # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "C ASCII"
+ echo "POSIX ASCII"
+ for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+ sv_FI sv_SE; do
+ echo "$l ISO-8859-1"
+ echo "$l.iso-8859-1 ISO-8859-1"
+ echo "$l.iso-8859-15 ISO-8859-15"
+ echo "$l.iso-8859-15@euro ISO-8859-15"
+ echo "$l@euro ISO-8859-15"
+ echo "$l.cp-437 CP437"
+ echo "$l.cp-850 CP850"
+ echo "$l.cp-1252 CP1252"
+ echo "$l.cp-1252@euro CP1252"
+ #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+ echo "$l.utf-8 UTF-8"
+ echo "$l.utf-8@euro UTF-8"
+ done
+ for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+ sl_SI sr sr_CS sr_YU; do
+ echo "$l ISO-8859-2"
+ echo "$l.iso-8859-2 ISO-8859-2"
+ echo "$l.cp-852 CP852"
+ echo "$l.cp-1250 CP1250"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in mk mk_MK ru ru_RU; do
+ echo "$l ISO-8859-5"
+ echo "$l.iso-8859-5 ISO-8859-5"
+ echo "$l.koi8-r KOI8-R"
+ echo "$l.cp-866 CP866"
+ echo "$l.cp-1251 CP1251"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in ar ar_SA; do
+ echo "$l ISO-8859-6"
+ echo "$l.iso-8859-6 ISO-8859-6"
+ echo "$l.cp-864 CP864"
+ #echo "$l.cp-868 CP868" # not a commonly used encoding
+ echo "$l.cp-1256 CP1256"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in el el_GR gr gr_GR; do
+ echo "$l ISO-8859-7"
+ echo "$l.iso-8859-7 ISO-8859-7"
+ echo "$l.cp-869 CP869"
+ echo "$l.cp-1253 CP1253"
+ echo "$l.cp-1253@euro CP1253"
+ echo "$l.utf-8 UTF-8"
+ echo "$l.utf-8@euro UTF-8"
+ done
+ for l in he he_IL iw iw_IL; do
+ echo "$l ISO-8859-8"
+ echo "$l.iso-8859-8 ISO-8859-8"
+ echo "$l.cp-862 CP862"
+ echo "$l.cp-1255 CP1255"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in tr tr_TR; do
+ echo "$l ISO-8859-9"
+ echo "$l.iso-8859-9 ISO-8859-9"
+ echo "$l.cp-857 CP857"
+ echo "$l.cp-1254 CP1254"
+ echo "$l.utf-8 UTF-8"
+ done
+ for l in lt lt_LT lv lv_LV; do
+ #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+ echo "$l ISO-8859-13"
+ done
+ for l in ru_UA uk uk_UA; do
+ echo "$l KOI8-U"
+ done
+ for l in zh zh_CN; do
+ #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+ echo "$l GB2312"
+ done
+ for l in ja ja_JP ja_JP.EUC; do
+ echo "$l EUC-JP"
+ done
+ for l in ko ko_KR; do
+ echo "$l EUC-KR"
+ done
+ for l in th th_TH; do
+ echo "$l TIS-620"
+ done
+ for l in fa fa_IR; do
+ #echo "$l ISIRI-3342" # a broken encoding
+ echo "$l.utf-8 UTF-8"
+ done
+ ;;
+ linux* | *-gnu*)
+ # With glibc-2.1 or newer, we don't need any canonicalization,
+ # because glibc has iconv and both glibc and libiconv support all
+ # GNU canonical names directly. Therefore, the Makefile does not
+ # need to install the alias file at all.
+ # The following applies only to glibc-2.0.x and older libcs.
+ echo "ISO_646.IRV:1983 ASCII"
+ ;;
+ aix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "IBM-850 CP850"
+ echo "IBM-856 CP856"
+ echo "IBM-921 ISO-8859-13"
+ echo "IBM-922 CP922"
+ echo "IBM-932 CP932"
+ echo "IBM-943 CP943"
+ echo "IBM-1046 CP1046"
+ echo "IBM-1124 CP1124"
+ echo "IBM-1129 CP1129"
+ echo "IBM-1252 CP1252"
+ echo "IBM-eucCN GB2312"
+ echo "IBM-eucJP EUC-JP"
+ echo "IBM-eucKR EUC-KR"
+ echo "IBM-eucTW EUC-TW"
+ echo "big5 BIG5"
+ echo "GBK GBK"
+ echo "TIS-620 TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ hpux*)
+ echo "iso88591 ISO-8859-1"
+ echo "iso88592 ISO-8859-2"
+ echo "iso88595 ISO-8859-5"
+ echo "iso88596 ISO-8859-6"
+ echo "iso88597 ISO-8859-7"
+ echo "iso88598 ISO-8859-8"
+ echo "iso88599 ISO-8859-9"
+ echo "iso885915 ISO-8859-15"
+ echo "roman8 HP-ROMAN8"
+ echo "arabic8 HP-ARABIC8"
+ echo "greek8 HP-GREEK8"
+ echo "hebrew8 HP-HEBREW8"
+ echo "turkish8 HP-TURKISH8"
+ echo "kana8 HP-KANA8"
+ echo "tis620 TIS-620"
+ echo "big5 BIG5"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "hp15CN GB2312"
+ #echo "ccdc ?" # what is this?
+ echo "SJIS SHIFT_JIS"
+ echo "utf8 UTF-8"
+ ;;
+ irix*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ ;;
+ osf*)
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "cp850 CP850"
+ echo "big5 BIG5"
+ echo "dechanyu DEC-HANYU"
+ echo "dechanzi GB2312"
+ echo "deckanji DEC-KANJI"
+ echo "deckorean EUC-KR"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "GBK GBK"
+ echo "KSC5601 CP949"
+ echo "sdeckanji EUC-JP"
+ echo "SJIS SHIFT_JIS"
+ echo "TACTIS TIS-620"
+ echo "UTF-8 UTF-8"
+ ;;
+ solaris*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-3 ISO-8859-3"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-6 ISO-8859-6"
+ echo "ISO8859-7 ISO-8859-7"
+ echo "ISO8859-8 ISO-8859-8"
+ echo "ISO8859-9 ISO-8859-9"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "koi8-r KOI8-R"
+ echo "ansi-1251 CP1251"
+ echo "BIG5 BIG5"
+ echo "Big5-HKSCS BIG5-HKSCS"
+ echo "gb2312 GB2312"
+ echo "GBK GBK"
+ echo "GB18030 GB18030"
+ echo "cns11643 EUC-TW"
+ echo "5601 EUC-KR"
+ echo "ko_KR.johap92 JOHAB"
+ echo "eucJP EUC-JP"
+ echo "PCK SHIFT_JIS"
+ echo "TIS620.2533 TIS-620"
+ #echo "sun_eu_greek ?" # what is this?
+ echo "UTF-8 UTF-8"
+ ;;
+ freebsd* | os2*)
+ # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+ # reuse FreeBSD's locale data for OS/2.
+ echo "C ASCII"
+ echo "US-ASCII ASCII"
+ for l in la_LN lt_LN; do
+ echo "$l.ASCII ASCII"
+ done
+ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+ echo "$l.ISO_8859-1 ISO-8859-1"
+ echo "$l.DIS_8859-15 ISO-8859-15"
+ done
+ for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+ echo "$l.ISO_8859-2 ISO-8859-2"
+ done
+ for l in la_LN lt_LT; do
+ echo "$l.ISO_8859-4 ISO-8859-4"
+ done
+ for l in ru_RU ru_SU; do
+ echo "$l.KOI8-R KOI8-R"
+ echo "$l.ISO_8859-5 ISO-8859-5"
+ echo "$l.CP866 CP866"
+ done
+ echo "uk_UA.KOI8-U KOI8-U"
+ echo "zh_TW.BIG5 BIG5"
+ echo "zh_TW.Big5 BIG5"
+ echo "zh_CN.EUC GB2312"
+ echo "ja_JP.EUC EUC-JP"
+ echo "ja_JP.SJIS SHIFT_JIS"
+ echo "ja_JP.Shift_JIS SHIFT_JIS"
+ echo "ko_KR.EUC EUC-KR"
+ ;;
+ netbsd*)
+ echo "646 ASCII"
+ echo "ISO8859-1 ISO-8859-1"
+ echo "ISO8859-2 ISO-8859-2"
+ echo "ISO8859-4 ISO-8859-4"
+ echo "ISO8859-5 ISO-8859-5"
+ echo "ISO8859-15 ISO-8859-15"
+ echo "eucCN GB2312"
+ echo "eucJP EUC-JP"
+ echo "eucKR EUC-KR"
+ echo "eucTW EUC-TW"
+ echo "BIG5 BIG5"
+ echo "SJIS SHIFT_JIS"
+ ;;
+ darwin*)
+ # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "C ASCII"
+ for l in en_AU en_CA en_GB en_US la_LN; do
+ echo "$l.US-ASCII ASCII"
+ done
+ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+ nl_NL no_NO pt_PT sv_SE; do
+ echo "$l ISO-8859-1"
+ echo "$l.ISO8859-1 ISO-8859-1"
+ echo "$l.ISO8859-15 ISO-8859-15"
+ done
+ for l in la_LN; do
+ echo "$l.ISO8859-1 ISO-8859-1"
+ echo "$l.ISO8859-15 ISO-8859-15"
+ done
+ for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+ echo "$l.ISO8859-2 ISO-8859-2"
+ done
+ for l in la_LN lt_LT; do
+ echo "$l.ISO8859-4 ISO-8859-4"
+ done
+ for l in ru_RU; do
+ echo "$l.KOI8-R KOI8-R"
+ echo "$l.ISO8859-5 ISO-8859-5"
+ echo "$l.CP866 CP866"
+ done
+ for l in bg_BG; do
+ echo "$l.CP1251 CP1251"
+ done
+ echo "uk_UA.KOI8-U KOI8-U"
+ echo "zh_TW.BIG5 BIG5"
+ echo "zh_TW.Big5 BIG5"
+ echo "zh_CN.EUC GB2312"
+ echo "ja_JP.EUC EUC-JP"
+ echo "ja_JP.SJIS SHIFT_JIS"
+ echo "ko_KR.EUC EUC-KR"
+ ;;
+ beos*)
+ # BeOS has a single locale, and it has UTF-8 encoding.
+ echo "* UTF-8"
+ ;;
+ msdosdjgpp*)
+ # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+ # localcharset.c falls back to using the full locale name
+ # from the environment variables.
+ echo "#"
+ echo "# The encodings given here may not all be correct."
+ echo "# If you find that the encoding given for your language and"
+ echo "# country is not the one your DOS machine actually uses, just"
+ echo "# correct it in this file, and send a mail to"
+ echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
+ echo "# and Bruno Haible <bruno@clisp.org>."
+ echo "#"
+ echo "C ASCII"
+ # ISO-8859-1 languages
+ echo "ca CP850"
+ echo "ca_ES CP850"
+ echo "da CP865" # not CP850 ??
+ echo "da_DK CP865" # not CP850 ??
+ echo "de CP850"
+ echo "de_AT CP850"
+ echo "de_CH CP850"
+ echo "de_DE CP850"
+ echo "en CP850"
+ echo "en_AU CP850" # not CP437 ??
+ echo "en_CA CP850"
+ echo "en_GB CP850"
+ echo "en_NZ CP437"
+ echo "en_US CP437"
+ echo "en_ZA CP850" # not CP437 ??
+ echo "es CP850"
+ echo "es_AR CP850"
+ echo "es_BO CP850"
+ echo "es_CL CP850"
+ echo "es_CO CP850"
+ echo "es_CR CP850"
+ echo "es_CU CP850"
+ echo "es_DO CP850"
+ echo "es_EC CP850"
+ echo "es_ES CP850"
+ echo "es_GT CP850"
+ echo "es_HN CP850"
+ echo "es_MX CP850"
+ echo "es_NI CP850"
+ echo "es_PA CP850"
+ echo "es_PY CP850"
+ echo "es_PE CP850"
+ echo "es_SV CP850"
+ echo "es_UY CP850"
+ echo "es_VE CP850"
+ echo "et CP850"
+ echo "et_EE CP850"
+ echo "eu CP850"
+ echo "eu_ES CP850"
+ echo "fi CP850"
+ echo "fi_FI CP850"
+ echo "fr CP850"
+ echo "fr_BE CP850"
+ echo "fr_CA CP850"
+ echo "fr_CH CP850"
+ echo "fr_FR CP850"
+ echo "ga CP850"
+ echo "ga_IE CP850"
+ echo "gd CP850"
+ echo "gd_GB CP850"
+ echo "gl CP850"
+ echo "gl_ES CP850"
+ echo "id CP850" # not CP437 ??
+ echo "id_ID CP850" # not CP437 ??
+ echo "is CP861" # not CP850 ??
+ echo "is_IS CP861" # not CP850 ??
+ echo "it CP850"
+ echo "it_CH CP850"
+ echo "it_IT CP850"
+ echo "lt CP775"
+ echo "lt_LT CP775"
+ echo "lv CP775"
+ echo "lv_LV CP775"
+ echo "nb CP865" # not CP850 ??
+ echo "nb_NO CP865" # not CP850 ??
+ echo "nl CP850"
+ echo "nl_BE CP850"
+ echo "nl_NL CP850"
+ echo "nn CP865" # not CP850 ??
+ echo "nn_NO CP865" # not CP850 ??
+ echo "no CP865" # not CP850 ??
+ echo "no_NO CP865" # not CP850 ??
+ echo "pt CP850"
+ echo "pt_BR CP850"
+ echo "pt_PT CP850"
+ echo "sv CP850"
+ echo "sv_SE CP850"
+ # ISO-8859-2 languages
+ echo "cs CP852"
+ echo "cs_CZ CP852"
+ echo "hr CP852"
+ echo "hr_HR CP852"
+ echo "hu CP852"
+ echo "hu_HU CP852"
+ echo "pl CP852"
+ echo "pl_PL CP852"
+ echo "ro CP852"
+ echo "ro_RO CP852"
+ echo "sk CP852"
+ echo "sk_SK CP852"
+ echo "sl CP852"
+ echo "sl_SI CP852"
+ echo "sq CP852"
+ echo "sq_AL CP852"
+ echo "sr CP852" # CP852 or CP866 or CP855 ??
+ echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
+ echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+ # ISO-8859-3 languages
+ echo "mt CP850"
+ echo "mt_MT CP850"
+ # ISO-8859-5 languages
+ echo "be CP866"
+ echo "be_BE CP866"
+ echo "bg CP866" # not CP855 ??
+ echo "bg_BG CP866" # not CP855 ??
+ echo "mk CP866" # not CP855 ??
+ echo "mk_MK CP866" # not CP855 ??
+ echo "ru CP866"
+ echo "ru_RU CP866"
+ echo "uk CP1125"
+ echo "uk_UA CP1125"
+ # ISO-8859-6 languages
+ echo "ar CP864"
+ echo "ar_AE CP864"
+ echo "ar_DZ CP864"
+ echo "ar_EG CP864"
+ echo "ar_IQ CP864"
+ echo "ar_IR CP864"
+ echo "ar_JO CP864"
+ echo "ar_KW CP864"
+ echo "ar_MA CP864"
+ echo "ar_OM CP864"
+ echo "ar_QA CP864"
+ echo "ar_SA CP864"
+ echo "ar_SY CP864"
+ # ISO-8859-7 languages
+ echo "el CP869"
+ echo "el_GR CP869"
+ # ISO-8859-8 languages
+ echo "he CP862"
+ echo "he_IL CP862"
+ # ISO-8859-9 languages
+ echo "tr CP857"
+ echo "tr_TR CP857"
+ # Japanese
+ echo "ja CP932"
+ echo "ja_JP CP932"
+ # Chinese
+ echo "zh_CN GBK"
+ echo "zh_TW CP950" # not CP938 ??
+ # Korean
+ echo "kr CP949" # not CP934 ??
+ echo "kr_KR CP949" # not CP934 ??
+ # Thai
+ echo "th CP874"
+ echo "th_TH CP874"
+ # Other
+ echo "eo CP850"
+ echo "eo_EO CP850"
+ ;;
+esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644
index 00000000..850acdee
--- /dev/null
+++ b/intl/dcgettext.c
@@ -0,0 +1,56 @@
+/* Implementation of the dcgettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCGETTEXT (const char *domainname, const char *msgid, int category)
+{
+ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+INTDEF(__dcgettext)
+weak_alias (__dcgettext, dcgettext);
+#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
new file mode 100644
index 00000000..35238e2c
--- /dev/null
+++ b/intl/dcigettext.c
@@ -0,0 +1,1219 @@
+/* Implementation of the internal dcigettext function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+ /* Guess whether integer division by zero raises signal SIGFPE.
+ Set to 1 only if you know for sure. In case of doubt, set to 0. */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+ || defined __m68k__ || defined __s390__
+# define INTDIV0_RAISES_SIGFPE 1
+# else
+# define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness. */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types. */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define getcwd __getcwd
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+# define getcwd(buf, max) getwd (buf)
+# else
+# if VMS
+# define getcwd(buf, max) (getcwd) (buf, max, 0)
+# else
+char *getcwd ();
+# endif
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy (void *dest, const void *src, size_t n);
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try. */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h. */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+ PATH_MAX but might cause redefinition warnings when sys/param.h is
+ later included (as on MORE/BSD 4.3). */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been. */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* This is the type used for the search tree where known translations
+ are stored. */
+struct known_translation_t
+{
+ /* Domain in which to search. */
+ char *domainname;
+
+ /* The category. */
+ int category;
+
+ /* State of the catalog counter at the point the string was found. */
+ int counter;
+
+ /* Catalog where the string was found. */
+ struct loaded_l10nfile *domain;
+
+ /* And finally the translation. */
+ const char *translation;
+ size_t translation_length;
+
+ /* Pointer to the string in question. */
+ char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations. We can use this
+ only if the system provides the `tsearch' function family. */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+# define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations. */
+static int
+transcmp (const void *p1, const void *p2)
+{
+ const struct known_translation_t *s1;
+ const struct known_translation_t *s2;
+ int result;
+
+ s1 = (const struct known_translation_t *) p1;
+ s2 = (const struct known_translation_t *) p2;
+
+ result = strcmp (s1->msgid, s2->msgid);
+ if (result == 0)
+ {
+ result = strcmp (s1->domainname, s2->domainname);
+ if (result == 0)
+ /* We compare the category last (though this is the cheapest
+ operation) since it is hopefully always the same (namely
+ LC_MESSAGES). */
+ result = s1->category - s2->category;
+ }
+
+ return result;
+}
+#endif
+
+#ifndef INTVARDEF
+# define INTVARDEF(name)
+#endif
+#ifndef INTUSE
+# define INTUSE(name) name
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+ textdomain(3). The default value for this is "messages". */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+/* Value used as the default domain for gettext(3). */
+const char *_nl_current_default_domain attribute_hidden
+ = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs. */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+ calls. */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions. */
+static char *plural_lookup (struct loaded_l10nfile *domain,
+ unsigned long int n,
+ const char *translation, size_t translation_len)
+ internal_function;
+static const char *guess_category_value (int category,
+ const char *categoryname)
+ internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) _nl_category_names[category]
+#else
+static const char *category_to_name (int category) internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done. */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+ void *address;
+ struct block_list *next;
+};
+# define ADD_BLOCK(list, addr) \
+ do { \
+ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+ /* If we cannot get a free block we cannot add the new element to \
+ the list. */ \
+ if (newp != NULL) { \
+ newp->address = (addr); \
+ newp->next = (list); \
+ (list) = newp; \
+ } \
+ } while (0)
+# define FREE_BLOCKS(list) \
+ do { \
+ while (list != NULL) { \
+ struct block_list *old = list; \
+ list = list->next; \
+ free (old->address); \
+ free (old); \
+ } \
+ } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations. */
+typedef struct transmem_list
+{
+ struct transmem_list *next;
+ char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+ easier methods therefore we make a difference here. */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+# define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+# define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+# define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+# define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+ if (enable_secure == 0) \
+ { \
+ if (getuid () != geteuid () || getgid () != getegid ()) \
+ enable_secure = 1; \
+ else \
+ enable_secure = -1; \
+ }
+#endif
+
+/* Get the function to evaluate the plural expression. */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ CATEGORY locale and, if PLURAL is nonzero, search over string
+ depending on the plural form determined by N. */
+char *
+DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
+ int plural, unsigned long int n, int category)
+{
+#ifndef HAVE_ALLOCA
+ struct block_list *block_list = NULL;
+#endif
+ struct loaded_l10nfile *domain;
+ struct binding *binding;
+ const char *categoryname;
+ const char *categoryvalue;
+ char *dirname, *xdomainname;
+ char *single_locale;
+ char *retval;
+ size_t retlen;
+ int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+ struct known_translation_t *search;
+ struct known_translation_t **foundp = NULL;
+ size_t msgid_len;
+#endif
+ size_t domainname_len;
+
+ /* If no real MSGID is given return NULL. */
+ if (msgid1 == NULL)
+ return NULL;
+
+#ifdef _LIBC
+ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+ /* Bogus. */
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+ __libc_rwlock_rdlock (_nl_state_lock);
+
+ /* If DOMAINNAME is NULL, we are interested in the default domain. If
+ CATEGORY is not LC_MESSAGES this might not make much sense but the
+ definition left this undefined. */
+ if (domainname == NULL)
+ domainname = _nl_current_default_domain;
+
+ /* OS/2 specific: backward compatibility with older libintl versions */
+#ifdef LC_MESSAGES_COMPAT
+ if (category == LC_MESSAGES_COMPAT)
+ category = LC_MESSAGES;
+#endif
+
+#if defined HAVE_TSEARCH || defined _LIBC
+ msgid_len = strlen (msgid1) + 1;
+
+ /* Try to find the translation among those which we found at
+ some time. */
+ search = (struct known_translation_t *)
+ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+ memcpy (search->msgid, msgid1, msgid_len);
+ search->domainname = (char *) domainname;
+ search->category = category;
+
+ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+ freea (search);
+ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+ {
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+ (*foundp)->translation_length);
+ else
+ retval = (char *) (*foundp)->translation;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+#endif
+
+ /* Preserve the `errno' value. */
+ saved_errno = errno;
+
+ /* See whether this is a SUID binary or not. */
+ DETERMINE_SECURE;
+
+ /* First find matching binding. */
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding == NULL)
+ dirname = (char *) INTUSE(_nl_default_dirname);
+ else if (IS_ABSOLUTE_PATH (binding->dirname))
+ dirname = binding->dirname;
+ else
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (binding->dirname) + 1;
+ size_t path_max;
+ char *ret;
+
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
+
+ for (;;)
+ {
+ dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, dirname);
+
+ __set_errno (0);
+ ret = getcwd (dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
+
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
+
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
+
+ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ }
+
+ /* Now determine the symbolic name of CATEGORY and its value. */
+ categoryname = category_to_name (category);
+ categoryvalue = guess_category_value (category, categoryname);
+
+ domainname_len = strlen (domainname);
+ xdomainname = (char *) alloca (strlen (categoryname)
+ + domainname_len + 5);
+ ADD_BLOCK (block_list, xdomainname);
+
+ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+ domainname, domainname_len),
+ ".mo");
+
+ /* Creating working area. */
+ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+ ADD_BLOCK (block_list, single_locale);
+
+
+ /* Search for the given string. This is a loop because we perhaps
+ got an ordered list of languages to consider for the translation. */
+ while (1)
+ {
+ /* Make CATEGORYVALUE point to the next element of the list. */
+ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+ ++categoryvalue;
+ if (categoryvalue[0] == '\0')
+ {
+ /* The whole contents of CATEGORYVALUE has been searched but
+ no valid entry has been found. We solve this situation
+ by implicitly appending a "C" entry, i.e. no translation
+ will take place. */
+ single_locale[0] = 'C';
+ single_locale[1] = '\0';
+ }
+ else
+ {
+ char *cp = single_locale;
+ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+ *cp++ = *categoryvalue++;
+ *cp = '\0';
+
+ /* When this is a SUID binary we must not allow accessing files
+ outside the dedicated directories. */
+ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+ /* Ingore this entry. */
+ continue;
+ }
+
+ /* If the current locale value is C (or POSIX) we don't load a
+ domain. Return the MSGID. */
+ if (strcmp (single_locale, "C") == 0
+ || strcmp (single_locale, "POSIX") == 0)
+ break;
+
+ /* Find structure describing the message catalog matching the
+ DOMAINNAME and CATEGORY. */
+ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+ if (domain != NULL)
+ {
+ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+ if (retval == NULL)
+ {
+ int cnt;
+
+ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+ {
+ retval = _nl_find_msg (domain->successor[cnt], binding,
+ msgid1, &retlen);
+
+ if (retval != NULL)
+ {
+ domain = domain->successor[cnt];
+ break;
+ }
+ }
+ }
+
+ if (retval != NULL)
+ {
+ /* Found the translation of MSGID1 in domain DOMAIN:
+ starting at RETVAL, RETLEN bytes. */
+ FREE_BLOCKS (block_list);
+#if defined HAVE_TSEARCH || defined _LIBC
+ if (foundp == NULL)
+ {
+ /* Create a new entry and add it to the search tree. */
+ struct known_translation_t *newp;
+
+ newp = (struct known_translation_t *)
+ malloc (offsetof (struct known_translation_t, msgid)
+ + msgid_len + domainname_len + 1);
+ if (newp != NULL)
+ {
+ newp->domainname =
+ mempcpy (newp->msgid, msgid1, msgid_len);
+ memcpy (newp->domainname, domainname, domainname_len + 1);
+ newp->category = category;
+ newp->counter = _nl_msg_cat_cntr;
+ newp->domain = domain;
+ newp->translation = retval;
+ newp->translation_length = retlen;
+
+ /* Insert the entry in the search tree. */
+ foundp = (struct known_translation_t **)
+ tsearch (newp, &root, transcmp);
+ if (foundp == NULL
+ || __builtin_expect (*foundp != newp, 0))
+ /* The insert failed. */
+ free (newp);
+ }
+ }
+ else
+ {
+ /* We can update the existing entry. */
+ (*foundp)->counter = _nl_msg_cat_cntr;
+ (*foundp)->domain = domain;
+ (*foundp)->translation = retval;
+ (*foundp)->translation_length = retlen;
+ }
+#endif
+ __set_errno (saved_errno);
+
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup (domain, n, retval, retlen);
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+ }
+ }
+
+ return_untranslated:
+ /* Return the untranslated MSGID. */
+ FREE_BLOCKS (block_list);
+ __libc_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+ if (!ENABLE_SECURE)
+ {
+ extern void _nl_log_untranslated (const char *logfilename,
+ const char *domainname,
+ const char *msgid1, const char *msgid2,
+ int plural);
+ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+ if (logfilename != NULL && logfilename[0] != '\0')
+ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+ }
+#endif
+ __set_errno (saved_errno);
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+char *
+internal_function
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+{
+ struct loaded_domain *domain;
+ nls_uint32 nstrings;
+ size_t act;
+ char *result;
+ size_t resultlen;
+
+ if (domain_file->decided == 0)
+ _nl_load_domain (domain_file, domainbinding);
+
+ if (domain_file->data == NULL)
+ return NULL;
+
+ domain = (struct loaded_domain *) domain_file->data;
+
+ nstrings = domain->nstrings;
+
+ /* Locate the MSGID and its translation. */
+ if (domain->hash_tab != NULL)
+ {
+ /* Use the hashing table. */
+ nls_uint32 len = strlen (msgid);
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ while (1)
+ {
+ nls_uint32 nstr =
+ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+ if (nstr == 0)
+ /* Hash table entry is empty. */
+ return NULL;
+
+ nstr--;
+
+ /* Compare msgid with the original string at index nstr.
+ We compare the lengths with >=, not ==, because plural entries
+ are represented by strings with an embedded NUL. */
+ if (nstr < nstrings
+ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+ && (strcmp (msgid,
+ domain->data + W (domain->must_swap,
+ domain->orig_tab[nstr].offset))
+ == 0)
+ : domain->orig_sysdep_tab[nstr - nstrings].length > len
+ && (strcmp (msgid,
+ domain->orig_sysdep_tab[nstr - nstrings].pointer)
+ == 0))
+ {
+ act = nstr;
+ goto found;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ /* NOTREACHED */
+ }
+ else
+ {
+ /* Try the default method: binary search in the sorted array of
+ messages. */
+ size_t top, bottom;
+
+ bottom = 0;
+ top = nstrings;
+ while (bottom < top)
+ {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp (msgid, (domain->data
+ + W (domain->must_swap,
+ domain->orig_tab[act].offset)));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ goto found;
+ }
+ /* No translation was found. */
+ return NULL;
+ }
+
+ found:
+ /* The translation was found at index ACT. If we have to convert the
+ string to use a different character set, this is the time. */
+ if (act < nstrings)
+ {
+ result = (char *)
+ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+ }
+ else
+ {
+ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+ }
+
+#if defined _LIBC || HAVE_ICONV
+ if (domain->codeset_cntr
+ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+ {
+ /* The domain's codeset has changed through bind_textdomain_codeset()
+ since the message catalog was initialized or last accessed. We
+ have to reinitialize the converter. */
+ _nl_free_domain_conv (domain);
+ _nl_init_domain_conv (domain_file, domain, domainbinding);
+ }
+
+ if (
+# ifdef _LIBC
+ domain->conv != (__gconv_t) -1
+# else
+# if HAVE_ICONV
+ domain->conv != (iconv_t) -1
+# endif
+# endif
+ )
+ {
+ /* We are supposed to do a conversion. First allocate an
+ appropriate table with the same structure as the table
+ of translations in the file, where we can put the pointers
+ to the converted strings in.
+ There is a slight complication with plural entries. They
+ are represented by consecutive NUL terminated strings. We
+ handle this case by converting RESULTLEN bytes, including
+ NULs. */
+
+ if (domain->conv_tab == NULL
+ && ((domain->conv_tab =
+ (char **) calloc (nstrings + domain->n_sysdep_strings,
+ sizeof (char *)))
+ == NULL))
+ /* Mark that we didn't succeed allocating a table. */
+ domain->conv_tab = (char **) -1;
+
+ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+ /* Nothing we can do, no more memory. */
+ goto converted;
+
+ if (domain->conv_tab[act] == NULL)
+ {
+ /* We haven't used this string so far, so it is not
+ translated yet. Do this now. */
+ /* We use a bit more efficient memory handling.
+ We allocate always larger blocks which get used over
+ time. This is faster than many small allocations. */
+ __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE 4080
+ static unsigned char *freemem;
+ static size_t freemem_size;
+
+ const unsigned char *inbuf;
+ unsigned char *outbuf;
+ int malloc_count;
+# ifndef _LIBC
+ transmem_block_t *transmem_list = NULL;
+# endif
+
+ __libc_lock_lock (lock);
+
+ inbuf = (const unsigned char *) result;
+ outbuf = freemem + sizeof (size_t);
+
+ malloc_count = 0;
+ while (1)
+ {
+ transmem_block_t *newmem;
+# ifdef _LIBC
+ size_t non_reversible;
+ int res;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ res = __gconv (domain->conv,
+ &inbuf, inbuf + resultlen,
+ &outbuf,
+ outbuf + freemem_size - sizeof (size_t),
+ &non_reversible);
+
+ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+ break;
+
+ if (res != __GCONV_FULL_OUTPUT)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+ inbuf = result;
+# else
+# if HAVE_ICONV
+ const char *inptr = (const char *) inbuf;
+ size_t inleft = resultlen;
+ char *outptr = (char *) outbuf;
+ size_t outleft;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ outleft = freemem_size - sizeof (size_t);
+ if (iconv (domain->conv,
+ (ICONV_CONST char **) &inptr, &inleft,
+ &outptr, &outleft)
+ != (size_t) (-1))
+ {
+ outbuf = (unsigned char *) outptr;
+ break;
+ }
+ if (errno != E2BIG)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+# endif
+# endif
+
+ resize_freemem:
+ /* We must allocate a new buffer or resize the old one. */
+ if (malloc_count > 0)
+ {
+ ++malloc_count;
+ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) realloc (transmem_list,
+ freemem_size);
+# ifdef _LIBC
+ if (newmem != NULL)
+ transmem_list = transmem_list->next;
+ else
+ {
+ struct transmem_list *old = transmem_list;
+
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+# endif
+ }
+ else
+ {
+ malloc_count = 1;
+ freemem_size = INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) malloc (freemem_size);
+ }
+ if (__builtin_expect (newmem == NULL, 0))
+ {
+ freemem = NULL;
+ freemem_size = 0;
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+# ifdef _LIBC
+ /* Add the block to the list of blocks we have to free
+ at some point. */
+ newmem->next = transmem_list;
+ transmem_list = newmem;
+
+ freemem = newmem->data;
+ freemem_size -= offsetof (struct transmem_list, data);
+# else
+ transmem_list = newmem;
+ freemem = newmem;
+# endif
+
+ outbuf = freemem + sizeof (size_t);
+ }
+
+ /* We have now in our buffer a converted string. Put this
+ into the table of conversions. */
+ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+ domain->conv_tab[act] = (char *) freemem;
+ /* Shrink freemem, but keep it aligned. */
+ freemem_size -= outbuf - freemem;
+ freemem = outbuf;
+ freemem += freemem_size & (alignof (size_t) - 1);
+ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+ __libc_lock_unlock (lock);
+ }
+
+ /* Now domain->conv_tab[act] contains the translation of all
+ the plural variants. */
+ result = domain->conv_tab[act] + sizeof (size_t);
+ resultlen = *(size_t *) domain->conv_tab[act];
+ }
+
+ converted:
+ /* The result string is converted. */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+ *lengthp = resultlen;
+ return result;
+}
+
+
+/* Look up a plural variant. */
+static char *
+internal_function
+plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
+ const char *translation, size_t translation_len)
+{
+ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+ unsigned long int index;
+ const char *p;
+
+ index = plural_eval (domaindata->plural, n);
+ if (index >= domaindata->nplurals)
+ /* This should never happen. It means the plural expression and the
+ given maximum value do not match. */
+ index = 0;
+
+ /* Skip INDEX strings at TRANSLATION. */
+ p = translation;
+ while (index-- > 0)
+ {
+#ifdef _LIBC
+ p = __rawmemchr (p, '\0');
+#else
+ p = strchr (p, '\0');
+#endif
+ /* And skip over the NUL byte. */
+ p++;
+
+ if (p >= translation + translation_len)
+ /* This should never happen. It means the plural expression
+ evaluated to a value larger than the number of variants
+ available for MSGID1. */
+ return (char *) translation;
+ }
+ return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY. */
+static const char *
+internal_function
+category_to_name (int category)
+{
+ const char *retval;
+
+ switch (category)
+ {
+#ifdef LC_COLLATE
+ case LC_COLLATE:
+ retval = "LC_COLLATE";
+ break;
+#endif
+#ifdef LC_CTYPE
+ case LC_CTYPE:
+ retval = "LC_CTYPE";
+ break;
+#endif
+#ifdef LC_MONETARY
+ case LC_MONETARY:
+ retval = "LC_MONETARY";
+ break;
+#endif
+#ifdef LC_NUMERIC
+ case LC_NUMERIC:
+ retval = "LC_NUMERIC";
+ break;
+#endif
+#ifdef LC_TIME
+ case LC_TIME:
+ retval = "LC_TIME";
+ break;
+#endif
+#ifdef LC_MESSAGES
+ case LC_MESSAGES:
+ retval = "LC_MESSAGES";
+ break;
+#endif
+#ifdef LC_RESPONSE
+ case LC_RESPONSE:
+ retval = "LC_RESPONSE";
+ break;
+#endif
+#ifdef LC_ALL
+ case LC_ALL:
+ /* This might not make sense but is perhaps better than any other
+ value. */
+ retval = "LC_ALL";
+ break;
+#endif
+ default:
+ /* If you have a better idea for a default value let me know. */
+ retval = "LC_XXX";
+ }
+
+ return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables. */
+static const char *
+internal_function
+guess_category_value (int category, const char *categoryname)
+{
+ const char *language;
+ const char *retval;
+
+ /* The highest priority value is the `LANGUAGE' environment
+ variable. But we don't use the value if the currently selected
+ locale is the C locale. This is a GNU extension. */
+ language = getenv ("LANGUAGE");
+ if (language != NULL && language[0] == '\0')
+ language = NULL;
+
+ /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+ `LC_xxx', and `LANG'. On some systems this can be done by the
+ `setlocale' function itself. */
+#ifdef _LIBC
+ retval = __current_locale_name (category);
+#else
+ retval = _nl_locale_name (category, categoryname);
+#endif
+
+ /* Ignore LANGUAGE if the locale is set to "C" because
+ 1. "C" locale usually uses the ASCII encoding, and most international
+ messages use non-ASCII characters. These characters get displayed
+ as question marks (if using glibc's iconv()) or as invalid 8-bit
+ characters (because other iconv()s refuse to convert most non-ASCII
+ characters to ASCII). In any case, the output is ugly.
+ 2. The precise output of some programs in the "C" locale is specified
+ by POSIX and should not depend on environment variables like
+ "LANGUAGE". We allow such programs to use gettext(). */
+ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+ return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+libc_freeres_fn (free_mem)
+{
+ void *old;
+
+ while (_nl_domain_bindings != NULL)
+ {
+ struct binding *oldp = _nl_domain_bindings;
+ _nl_domain_bindings = _nl_domain_bindings->next;
+ if (oldp->dirname != INTUSE(_nl_default_dirname))
+ /* Yes, this is a pointer comparison. */
+ free (oldp->dirname);
+ free (oldp->codeset);
+ free (oldp);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+
+ /* Remove the search tree with the known translations. */
+ __tdestroy (root, free);
+ root = NULL;
+
+ while (transmem_list != NULL)
+ {
+ old = transmem_list;
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+}
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644
index 00000000..48a3e09e
--- /dev/null
+++ b/intl/dcngettext.c
@@ -0,0 +1,57 @@
+/* Implementation of the dcngettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644
index 00000000..b64b0f5d
--- /dev/null
+++ b/intl/dgettext.c
@@ -0,0 +1,58 @@
+/* Implementation of the dgettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale. */
+char *
+DGETTEXT (const char *domainname, const char *msgid)
+{
+ return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
new file mode 100644
index 00000000..7815637f
--- /dev/null
+++ b/intl/dngettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dngettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale and skip message according to the plural form. */
+char *
+DNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
new file mode 100644
index 00000000..01bd5af5
--- /dev/null
+++ b/intl/eval-plural.h
@@ -0,0 +1,108 @@
+/* Plural expression evaluation.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value. */
+STATIC
+unsigned long int
+internal_function
+plural_eval (struct expression *pexp, unsigned long int n)
+{
+ switch (pexp->nargs)
+ {
+ case 0:
+ switch (pexp->operation)
+ {
+ case var:
+ return n;
+ case num:
+ return pexp->val.num;
+ default:
+ break;
+ }
+ /* NOTREACHED */
+ break;
+ case 1:
+ {
+ /* pexp->operation must be lnot. */
+ unsigned long int arg = plural_eval (pexp->val.args[0], n);
+ return ! arg;
+ }
+ case 2:
+ {
+ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+ if (pexp->operation == lor)
+ return leftarg || plural_eval (pexp->val.args[1], n);
+ else if (pexp->operation == land)
+ return leftarg && plural_eval (pexp->val.args[1], n);
+ else
+ {
+ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+ switch (pexp->operation)
+ {
+ case mult:
+ return leftarg * rightarg;
+ case divide:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg / rightarg;
+ case module:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg % rightarg;
+ case plus:
+ return leftarg + rightarg;
+ case minus:
+ return leftarg - rightarg;
+ case less_than:
+ return leftarg < rightarg;
+ case greater_than:
+ return leftarg > rightarg;
+ case less_or_equal:
+ return leftarg <= rightarg;
+ case greater_or_equal:
+ return leftarg >= rightarg;
+ case equal:
+ return leftarg == rightarg;
+ case not_equal:
+ return leftarg != rightarg;
+ default:
+ break;
+ }
+ }
+ /* NOTREACHED */
+ break;
+ }
+ case 3:
+ {
+ /* pexp->operation must be qmop. */
+ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+ }
+ }
+ /* NOTREACHED */
+ return 0;
+}
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644
index 00000000..52c25e72
--- /dev/null
+++ b/intl/explodename.c
@@ -0,0 +1,185 @@
+/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (const char *name)
+{
+ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+ && name[0] != '+' && name[0] != ',')
+ ++name;
+
+ return (char *) name;
+}
+
+
+int
+_nl_explode_name (char *name,
+ const char **language, const char **modifier,
+ const char **territory, const char **codeset,
+ const char **normalized_codeset, const char **special,
+ const char **sponsor, const char **revision)
+{
+ enum { undecided, xpg, cen } syntax;
+ char *cp;
+ int mask;
+
+ *modifier = NULL;
+ *territory = NULL;
+ *codeset = NULL;
+ *normalized_codeset = NULL;
+ *special = NULL;
+ *sponsor = NULL;
+ *revision = NULL;
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = 0;
+ syntax = undecided;
+ *language = cp = name;
+ cp = _nl_find_language (*language);
+
+ if (*language == cp)
+ /* This does not make sense: language has to be specified. Use
+ this entry as it is without exploding. Perhaps it is an alias. */
+ cp = strchr (*language, '\0');
+ else if (cp[0] == '_')
+ {
+ /* Next is the territory. */
+ cp[0] = '\0';
+ *territory = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+ && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= TERRITORY;
+
+ if (cp[0] == '.')
+ {
+ /* Next is the codeset. */
+ syntax = xpg;
+ cp[0] = '\0';
+ *codeset = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '@')
+ ++cp;
+
+ mask |= XPG_CODESET;
+
+ if (*codeset != cp && (*codeset)[0] != '\0')
+ {
+ *normalized_codeset = _nl_normalize_codeset (*codeset,
+ cp - *codeset);
+ if (strcmp (*codeset, *normalized_codeset) == 0)
+ free ((char *) *normalized_codeset);
+ else
+ mask |= XPG_NORM_CODESET;
+ }
+ }
+ }
+
+ if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+ {
+ /* Next is the modifier. */
+ syntax = cp[0] == '@' ? xpg : cen;
+ cp[0] = '\0';
+ *modifier = ++cp;
+
+ while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+ && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= XPG_MODIFIER | CEN_AUDIENCE;
+ }
+
+ if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+ {
+ syntax = cen;
+
+ if (cp[0] == '+')
+ {
+ /* Next is special application (CEN syntax). */
+ cp[0] = '\0';
+ *special = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPECIAL;
+ }
+
+ if (cp[0] == ',')
+ {
+ /* Next is sponsor (CEN syntax). */
+ cp[0] = '\0';
+ *sponsor = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPONSOR;
+ }
+
+ if (cp[0] == '_')
+ {
+ /* Next is revision (CEN syntax). */
+ cp[0] = '\0';
+ *revision = ++cp;
+
+ mask |= CEN_REVISION;
+ }
+ }
+
+ /* For CEN syntax values it might be important to have the
+ separator character in the file name, not for XPG syntax. */
+ if (syntax == xpg)
+ {
+ if (*territory != NULL && (*territory)[0] == '\0')
+ mask &= ~TERRITORY;
+
+ if (*codeset != NULL && (*codeset)[0] == '\0')
+ mask &= ~XPG_CODESET;
+
+ if (*modifier != NULL && (*modifier)[0] == '\0')
+ mask &= ~XPG_MODIFIER;
+ }
+
+ return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644
index 00000000..4992a8c9
--- /dev/null
+++ b/intl/finddomain.c
@@ -0,0 +1,192 @@
+/* Handle list of needed message catalogs
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains. */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+ the DOMAINNAME and CATEGORY parameters with respect to the currently
+ established bindings. */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (const char *dirname, char *locale,
+ const char *domainname, struct binding *domainbinding)
+{
+ struct loaded_l10nfile *retval;
+ const char *language;
+ const char *modifier;
+ const char *territory;
+ const char *codeset;
+ const char *normalized_codeset;
+ const char *special;
+ const char *sponsor;
+ const char *revision;
+ const char *alias_value;
+ int mask;
+
+ /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+ language[_territory[.codeset]][@modifier]
+
+ and six parts for the CEN syntax:
+
+ language[_territory][+audience][+special][,[sponsor][_revision]]
+
+ Beside the first part all of them are allowed to be missing. If
+ the full specified locale is not found, the less specific one are
+ looked for. The various parts will be stripped off according to
+ the following order:
+ (1) revision
+ (2) sponsor
+ (3) special
+ (4) codeset
+ (5) normalized codeset
+ (6) territory
+ (7) audience/modifier
+ */
+
+ /* If we have already tested for this locale entry there has to
+ be one data set in the list of loaded domains. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, 0, locale, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, domainname, 0);
+ if (retval != NULL)
+ {
+ /* We know something about this locale. */
+ int cnt;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+
+ if (retval->data != NULL)
+ return retval;
+
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ return cnt >= 0 ? retval : NULL;
+ /* NOTREACHED */
+ }
+
+ /* See whether the locale value is an alias. If yes its value
+ *overwrites* the alias name. No test for the original value is
+ done. */
+ alias_value = _nl_expand_alias (locale);
+ if (alias_value != NULL)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ locale = strdup (alias_value);
+ if (locale == NULL)
+ return NULL;
+#else
+ size_t len = strlen (alias_value) + 1;
+ locale = (char *) malloc (len);
+ if (locale == NULL)
+ return NULL;
+
+ memcpy (locale, alias_value, len);
+#endif
+ }
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = _nl_explode_name (locale, &language, &modifier, &territory,
+ &codeset, &normalized_codeset, &special,
+ &sponsor, &revision);
+
+ /* Create all possible locale entries which might be interested in
+ generalization. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, mask, language, territory,
+ codeset, normalized_codeset, modifier, special,
+ sponsor, revision, domainname, 1);
+ if (retval == NULL)
+ /* This means we are out of core. */
+ return NULL;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+ if (retval->data == NULL)
+ {
+ int cnt;
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ }
+
+ /* The room for an alias was dynamically allocated. Free it now. */
+ if (alias_value != NULL)
+ free (locale);
+
+ /* The space for normalized_codeset is dynamically allocated. Free it. */
+ if (mask & XPG_NORM_CODESET)
+ free ((void *) normalized_codeset);
+
+ return retval;
+}
+
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *here = runp;
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
+ free ((char *) here->filename);
+ free (here);
+ }
+}
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644
index 00000000..92c42faa
--- /dev/null
+++ b/intl/gettext.c
@@ -0,0 +1,63 @@
+/* Implementation of gettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+GETTEXT (const char *msgid)
+{
+ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644
index 00000000..4d66c3de
--- /dev/null
+++ b/intl/gettextP.h
@@ -0,0 +1,215 @@
+/* Header describing internals of libintl library.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h> /* Get size_t. */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+# include <iconv.h>
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gmo.h" /* Get nls_uint32. */
+
+/* @@ end of prolog @@ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+SWAP (i)
+ nls_uint32 i;
+{
+ return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* In-memory representation of system dependent string. */
+struct sysdep_string_desc
+{
+ /* Length of addressed string, including the trailing NUL. */
+ size_t length;
+ /* Pointer to addressed string. */
+ const char *pointer;
+};
+
+/* The representation of an opened message catalog. */
+struct loaded_domain
+{
+ /* Pointer to memory containing the .mo file. */
+ const char *data;
+ /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
+ int use_mmap;
+ /* Size of mmap()ed memory. */
+ size_t mmap_size;
+ /* 1 if the .mo file uses a different endianness than this machine. */
+ int must_swap;
+ /* Pointer to additional malloc()ed memory. */
+ void *malloced;
+
+ /* Number of static strings pairs. */
+ nls_uint32 nstrings;
+ /* Pointer to descriptors of original strings in the file. */
+ const struct string_desc *orig_tab;
+ /* Pointer to descriptors of translated strings in the file. */
+ const struct string_desc *trans_tab;
+
+ /* Number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Pointer to descriptors of original sysdep strings. */
+ const struct sysdep_string_desc *orig_sysdep_tab;
+ /* Pointer to descriptors of translated sysdep strings. */
+ const struct sysdep_string_desc *trans_sysdep_tab;
+
+ /* Size of hash table. */
+ nls_uint32 hash_size;
+ /* Pointer to hash table. */
+ const nls_uint32 *hash_tab;
+ /* 1 if the hash table uses a different endianness than this machine. */
+ int must_swap_hash_tab;
+
+ int codeset_cntr;
+#ifdef _LIBC
+ __gconv_t conv;
+#else
+# if HAVE_ICONV
+ iconv_t conv;
+# endif
+#endif
+ char **conv_tab;
+
+ struct expression *plural;
+ unsigned long int nplurals;
+};
+
+/* We want to allocate a string at the end of the struct. But ISO C
+ doesn't allow zero sized arrays. */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain. Used to store settings
+ from bindtextdomain() and bind_textdomain_codeset(). */
+struct binding
+{
+ struct binding *next;
+ char *dirname;
+ int codeset_cntr; /* Incremented each time codeset changes. */
+ char *codeset;
+ char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+ become invalid.
+ This variable is part of the external ABI of the GNU libintl. */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_locale_name (int category, const char *categoryname);
+#endif
+
+struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
+ const char *__domainname,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_load_domain (struct loaded_l10nfile *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_unload_domain (struct loaded_domain *__domain)
+ internal_function;
+const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
+ struct loaded_domain *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_free_domain_conv (struct loaded_domain *__domain)
+ internal_function;
+
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+ internal_function;
+
+#ifdef _LIBC
+extern char *__gettext (const char *__msgid);
+extern char *__dgettext (const char *__domainname, const char *__msgid);
+extern char *__dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+extern char *__ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+extern char *__dngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int n);
+extern char *__dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+extern char *__dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+extern char *__textdomain (const char *__domainname);
+extern char *__bindtextdomain (const char *__domainname,
+ const char *__dirname);
+extern char *__bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+ call them under their real name. */
+# undef _INTL_REDIRECT_INLINE
+# undef _INTL_REDIRECT_MACROS
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+extern char *libintl_dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644
index 00000000..e7c9cc14
--- /dev/null
+++ b/intl/gmo.h
@@ -0,0 +1,149 @@
+/* Description of GNU message catalog format: general file layout.
+ Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format. */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
+
+/* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+ when cross-compiling. */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+ This should be valid for all systems GNU cares about because
+ that doesn't include 16-bit systems, and only modern systems
+ (that certainly have <limits.h>) have 64+-bit integral types. */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+# else
+ /* The following line is intended to throw an error. Using #error is
+ not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ nls_uint32 magic;
+ /* The revision number of the file format. */
+ nls_uint32 revision;
+
+ /* The following are only used in .mo files with major revision 0 or 1. */
+
+ /* The number of strings pairs. */
+ nls_uint32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ nls_uint32 orig_tab_offset;
+ /* Offset of table with start offsets of translated strings. */
+ nls_uint32 trans_tab_offset;
+ /* Size of hash table. */
+ nls_uint32 hash_tab_size;
+ /* Offset of first hash table entry. */
+ nls_uint32 hash_tab_offset;
+
+ /* The following are only used in .mo files with minor revision >= 1. */
+
+ /* The number of system dependent segments. */
+ nls_uint32 n_sysdep_segments;
+ /* Offset of table describing system dependent segments. */
+ nls_uint32 sysdep_segments_offset;
+ /* The number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Offset of table with start offsets of original sysdep strings. */
+ nls_uint32 orig_sysdep_tab_offset;
+ /* Offset of table with start offsets of translated sysdep strings. */
+ nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file. */
+struct string_desc
+{
+ /* Length of addressed string, not including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1. */
+
+/* Descriptor for system dependent string segment. */
+struct sysdep_segment
+{
+ /* Length of addressed string, including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* Descriptor for system dependent string. */
+struct sysdep_string
+{
+ /* Offset of static string segments in file. */
+ nls_uint32 offset;
+ /* Alternating sequence of static and system dependent segments.
+ The last segment is a static segment, including the trailing NUL. */
+ struct segment_pair
+ {
+ /* Size of static segment. */
+ nls_uint32 segsize;
+ /* Reference to system dependent string segment, or ~0 at the end. */
+ nls_uint32 sysdepref;
+ } segments[1];
+};
+
+/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
+ regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
+#define SEGMENTS_END ((nls_uint32) ~0)
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644
index 00000000..093e3b1c
--- /dev/null
+++ b/intl/hash-string.h
@@ -0,0 +1,48 @@
+/* Description of GNU message catalog format: string hashing function.
+ Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* @@ end of prolog @@ */
+
+/* We assume to have `unsigned long int' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+static inline unsigned long int
+hash_string (const char *str_param)
+{
+ unsigned long int hval, g;
+ const char *str = str_param;
+
+ /* Compute the hash value for the given string. */
+ hval = 0;
+ while (*str != '\0')
+ {
+ hval <<= 4;
+ hval += (unsigned char) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644
index 00000000..96f9d955
--- /dev/null
+++ b/intl/intl-compat.c
@@ -0,0 +1,131 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+ Library.
+ Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix) to those
+ defined in the included GNU libintl library (with "libintl_" prefix).
+ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+ has the redirections primarily in the <libintl.h> include file.
+ It is also compiled into libgnuintl so that libgnuintl.so can be used
+ as LD_PRELOADable library on glibc systems, to provide the extra
+ features that the functions in the libc don't have (namely, logging). */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+
+DLL_EXPORTED
+char *
+gettext (const char *msgid)
+{
+ return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (const char *domainname, const char *msgid)
+{
+ return libintl_dgettext (domainname, msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dcgettext (const char *domainname, const char *msgid, int category)
+{
+ return libintl_dcgettext (domainname, msgid, category);
+}
+
+
+DLL_EXPORTED
+char *
+ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_dngettext (domainname, msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dcngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
+}
+
+
+DLL_EXPORTED
+char *
+textdomain (const char *domainname)
+{
+ return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (const char *domainname, const char *dirname)
+{
+ return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (const char *domainname, const char *codeset)
+{
+ return libintl_bind_textdomain_codeset (domainname, codeset);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644
index 00000000..eb995aaf
--- /dev/null
+++ b/intl/l10nflist.c
@@ -0,0 +1,421 @@
+/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# ifndef stpcpy
+# define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
+/* Define function which are usually not available. */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ. */
+static size_t
+argz_count__ (const char *argz, size_t len)
+{
+ size_t count = 0;
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len + 1;
+ len -= part_len + 1;
+ count++;
+ }
+ return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#else
+# ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+static void
+argz_stringify__ (char *argz, size_t len, int sep)
+{
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len;
+ len -= part_len + 1;
+ if (len > 0)
+ *argz++ = sep;
+ }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#else
+# ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+ INTUSE(__argz_stringify) (argz, len, sep)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *
+argz_next__ (char *argz, size_t argz_len, const char *entry)
+{
+ if (entry)
+ {
+ if (entry < argz + argz_len)
+ entry = strchr (entry, '\0') + 1;
+
+ return entry >= argz + argz_len ? NULL : (char *) entry;
+ }
+ else
+ if (argz_len > 0)
+ return argz;
+ else
+ return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X. */
+static inline int
+pop (int x)
+{
+ /* We assume that no more than 16 bits are used. */
+ x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+ x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+ x = ((x >> 4) + x) & 0x0f0f;
+ x = ((x >> 8) + x) & 0xff;
+
+ return x;
+}
+
+
+struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len,
+ int mask, const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate)
+{
+ char *abs_filename;
+ struct loaded_l10nfile **lastp;
+ struct loaded_l10nfile *retval;
+ char *cp;
+ size_t dirlist_count;
+ size_t entries;
+ int cnt;
+
+ /* If LANGUAGE contains an absolute directory specification, we ignore
+ DIRLIST. */
+ if (IS_ABSOLUTE_PATH (language))
+ dirlist_len = 0;
+
+ /* Allocate room for the full file name. */
+ abs_filename = (char *) malloc (dirlist_len
+ + strlen (language)
+ + ((mask & TERRITORY) != 0
+ ? strlen (territory) + 1 : 0)
+ + ((mask & XPG_CODESET) != 0
+ ? strlen (codeset) + 1 : 0)
+ + ((mask & XPG_NORM_CODESET) != 0
+ ? strlen (normalized_codeset) + 1 : 0)
+ + (((mask & XPG_MODIFIER) != 0
+ || (mask & CEN_AUDIENCE) != 0)
+ ? strlen (modifier) + 1 : 0)
+ + ((mask & CEN_SPECIAL) != 0
+ ? strlen (special) + 1 : 0)
+ + (((mask & CEN_SPONSOR) != 0
+ || (mask & CEN_REVISION) != 0)
+ ? (1 + ((mask & CEN_SPONSOR) != 0
+ ? strlen (sponsor) : 0)
+ + ((mask & CEN_REVISION) != 0
+ ? strlen (revision) + 1 : 0)) : 0)
+ + 1 + strlen (filename) + 1);
+
+ if (abs_filename == NULL)
+ return NULL;
+
+ /* Construct file name. */
+ cp = abs_filename;
+ if (dirlist_len > 0)
+ {
+ memcpy (cp, dirlist, dirlist_len);
+ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+ cp += dirlist_len;
+ cp[-1] = '/';
+ }
+
+ cp = stpcpy (cp, language);
+
+ if ((mask & TERRITORY) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, territory);
+ }
+ if ((mask & XPG_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, codeset);
+ }
+ if ((mask & XPG_NORM_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, normalized_codeset);
+ }
+ if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+ {
+ /* This component can be part of both syntaces but has different
+ leading characters. For CEN we use `+', else `@'. */
+ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+ cp = stpcpy (cp, modifier);
+ }
+ if ((mask & CEN_SPECIAL) != 0)
+ {
+ *cp++ = '+';
+ cp = stpcpy (cp, special);
+ }
+ if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+ {
+ *cp++ = ',';
+ if ((mask & CEN_SPONSOR) != 0)
+ cp = stpcpy (cp, sponsor);
+ if ((mask & CEN_REVISION) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, revision);
+ }
+ }
+
+ *cp++ = '/';
+ stpcpy (cp, filename);
+
+ /* Look in list of already loaded domains whether it is already
+ available. */
+ lastp = l10nfile_list;
+ for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+ if (retval->filename != NULL)
+ {
+ int compare = strcmp (retval->filename, abs_filename);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It's not in the list. */
+ retval = NULL;
+ break;
+ }
+
+ lastp = &retval->next;
+ }
+
+ if (retval != NULL || do_allocate == 0)
+ {
+ free (abs_filename);
+ return retval;
+ }
+
+ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+ /* Allocate a new loaded_l10nfile. */
+ retval =
+ (struct loaded_l10nfile *)
+ malloc (sizeof (*retval)
+ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+ * sizeof (struct loaded_l10nfile *)));
+ if (retval == NULL)
+ return NULL;
+
+ retval->filename = abs_filename;
+
+ /* We set retval->data to NULL here; it is filled in later.
+ Setting retval->decided to 1 here means that retval does not
+ correspond to a real file (dirlist_count > 1) or is not worth
+ looking up (if an unnormalized codeset was specified). */
+ retval->decided = (dirlist_count > 1
+ || ((mask & XPG_CODESET) != 0
+ && (mask & XPG_NORM_CODESET) != 0));
+ retval->data = NULL;
+
+ retval->next = *lastp;
+ *lastp = retval;
+
+ entries = 0;
+ /* Recurse to fill the inheritance list of RETVAL.
+ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+ entry does not correspond to a real file; retval->filename contains
+ colons. In this case we loop across all elements of DIRLIST and
+ across all bit patterns dominated by MASK.
+ If the DIRLIST is a single directory or entirely redundant (i.e.
+ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+ MASK, excluding MASK itself.
+ In either case, we loop down from MASK to 0. This has the effect
+ that the extra bits in the locale name are dropped in this order:
+ first the modifier, then the territory, then the codeset, then the
+ normalized_codeset. */
+ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
+ if ((cnt & ~mask) == 0
+ && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+ && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+ {
+ if (dirlist_count > 1)
+ {
+ /* Iterate over all elements of the DIRLIST. */
+ char *dir = NULL;
+
+ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+ != NULL)
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ else
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ retval->successor[entries] = NULL;
+
+ return retval;
+}
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+const char *
+_nl_normalize_codeset (const char *codeset, size_t name_len)
+{
+ int len = 0;
+ int only_digit = 1;
+ char *retval;
+ char *wp;
+ size_t cnt;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalnum ((unsigned char) codeset[cnt]))
+ {
+ ++len;
+
+ if (isalpha ((unsigned char) codeset[cnt]))
+ only_digit = 0;
+ }
+
+ retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+ if (retval != NULL)
+ {
+ if (only_digit)
+ wp = stpcpy (retval, "iso");
+ else
+ wp = retval;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalpha ((unsigned char) codeset[cnt]))
+ *wp++ = tolower ((unsigned char) codeset[cnt]);
+ else if (isdigit ((unsigned char) codeset[cnt]))
+ *wp++ = codeset[cnt];
+
+ *wp = '\0';
+ }
+
+ return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
new file mode 100644
index 00000000..3be7eb99
--- /dev/null
+++ b/intl/libgnuintl.h.in
@@ -0,0 +1,383 @@
+/* Message catalogs for internationalization.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H 1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
+ On systems that don't define it, use an arbitrary value instead.
+ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+ then includes <libintl.h> (i.e. this file!) and then only defines
+ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
+ in this case. */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats. Returns the
+ maximum minor revision number supported for a given major revision. */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+ ((major) == 0 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
+ precedence over _conio_gettext. */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* We redirect the functions to those prefixed with "libintl_". This is
+ necessary, because some systems define gettext/textdomain/... in the C
+ library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+ If we used the unprefixed names, there would be cases where the
+ definition in the C library would override the one in the libintl.so
+ shared library. Recall that on ELF systems, the symbols are looked
+ up in the following order:
+ 1. in the executable,
+ 2. in the shared libraries specified on the link command line, in order,
+ 3. in the dependencies of the shared libraries specified on the link
+ command line,
+ 4. in the dlopen()ed shared libraries, in the order in which they were
+ dlopen()ed.
+ The definition in the C library would override the one in libintl.so if
+ either
+ * -lc is given on the link command line and -lintl isn't, or
+ * -lc is given on the link command line before -lintl, or
+ * libintl.so is a dependency of a dlopen()ed shared library but not
+ linked to the executable at link time.
+ Since Solaris gettext() behaves differently than GNU gettext(), this
+ would be unacceptable.
+
+ The redirection happens by default through macros in C, so that &gettext
+ is independent of the compilation unit, but through inline functions in
+ C++, in order not to interfere with the name mangling of class fields or
+ class methods called 'gettext'. */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+ If he doesn't, we choose the method. A third possible method is
+ _INTL_REDIRECT_ASM, supported only by GCC. */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
+# define _INTL_REDIRECT_ASM
+# else
+# ifdef __cplusplus
+# define _INTL_REDIRECT_INLINE
+# else
+# define _INTL_REDIRECT_MACROS
+# endif
+# endif
+#endif
+/* Auxiliary macros. */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid);
+static inline char *gettext (const char *__msgid)
+{
+ return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext (const char *__msgid)
+ _INTL_ASM (libintl_gettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ LC_MESSAGES locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+ return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext (const char *__domainname, const char *__msgid)
+ _INTL_ASM (libintl_dgettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+{
+ return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+ _INTL_ASM (libintl_dcgettext);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+{
+ return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+ _INTL_ASM (libintl_ngettext);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n)
+{
+ return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+ _INTL_ASM (libintl_dngettext);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+static inline char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+{
+ return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+ _INTL_ASM (libintl_dcngettext);
+#endif
+
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+ return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain (const char *__domainname)
+ _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+ const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+ const char *__dirname)
+{
+ return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain (const char *__domainname, const char *__dirname)
+ _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+{
+ return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+ _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for format strings with positions in *printf(), following the
+ POSIX/XSI specification.
+ Note: These replacements for the *printf() functions are visible only
+ in source files that #include <libintl.h> or #include "gettext.h".
+ Packages that use *printf() in source files that don't refer to _()
+ or gettext() but for which the format string could be the return value
+ of _() or gettext() need to add this #include. Oh well. */
+
+#if !@HAVE_POSIX_PRINTF@
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list. */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if @HAVE_SNPRINTF@
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if @HAVE_ASPRINTF@
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if @HAVE_WPRINTF@
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+ libintl_set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644
index 00000000..65e5ebd1
--- /dev/null
+++ b/intl/loadinfo.h
@@ -0,0 +1,145 @@
+/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H 1
+
+/* Declarations of locale dependent catalog lookup functions.
+ Implemented in
+
+ localealias.c Possibly replace a locale name by another.
+ explodename.c Split a locale name into its various fields.
+ l10nflist.c Generate a list of filenames of possible message catalogs.
+ finddomain.c Find and open the relevant message catalogs.
+
+ The main function _nl_find_domain() in finddomain.c is declared
+ in gettextP.h.
+ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames. */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+ /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts. */
+#define CEN_REVISION 1
+#define CEN_SPONSOR 2
+#define CEN_SPECIAL 4
+#define XPG_NORM_CODESET 8
+#define XPG_CODESET 16
+#define TERRITORY 32
+#define CEN_AUDIENCE 64
+#define XPG_MODIFIER 128
+
+#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+ const char *filename;
+ int decided;
+
+ const void *data;
+
+ struct loaded_l10nfile *next;
+ struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+extern const char *_nl_normalize_codeset (const char *codeset,
+ size_t name_len);
+
+/* Lookup a locale dependent file.
+ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+ files of the same kind, sorted in decreasing order of ->filename.
+ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
+ SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
+ produced by _nl_explode_name(). FILENAME is the filename suffix.
+ The return value is the lookup result, either found in *L10NFILE_LIST,
+ or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
+ If the return value is non-NULL, it is added to *L10NFILE_LIST, and
+ its ->next field denotes the chaining inside *L10NFILE_LIST, and
+ furthermore its ->successor[] field contains a list of other lookup
+ results from which this lookup result inherits. */
+extern struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len, int mask,
+ const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate);
+
+/* Lookup the real locale name for a locale alias NAME, or NULL if
+ NAME is not a locale alias (but possibly a real locale name).
+ The return value is statically allocated and must not be freed. */
+extern const char *_nl_expand_alias (const char *name);
+
+/* Split a locale name NAME into its pieces: language, modifier,
+ territory, codeset, special, sponsor, revision.
+ NAME gets destructively modified: NUL bytes are inserted here and
+ there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
+ *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
+ pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
+ gets assigned the expanded *CODESET, if it is different from *CODESET;
+ this one is dynamically allocated and has to be freed by the caller.
+ The return value is a bitmask, where each bit corresponds to one
+ filled-in value:
+ XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
+ TERRITORY for *TERRITORY,
+ XPG_CODESET for *CODESET,
+ XPG_NORM_CODESET for *NORMALIZED_CODESET,
+ CEN_SPECIAL for *SPECIAL,
+ CEN_SPONSOR for *SPONSOR,
+ CEN_REVISION for *REVISION.
+ */
+extern int _nl_explode_name (char *name, const char **language,
+ const char **modifier, const char **territory,
+ const char **codeset,
+ const char **normalized_codeset,
+ const char **special, const char **sponsor,
+ const char **revision);
+
+/* Split a locale name NAME into a leading language part and all the
+ rest. Return a pointer to the first character after the language,
+ i.e. to the first byte of the rest. */
+extern char *_nl_find_language (const char *name);
+
+#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644
index 00000000..99c51b4c
--- /dev/null
+++ b/intl/loadmsgcat.c
@@ -0,0 +1,1420 @@
+/* Load needed message catalogs.
+ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP 1
+#else
+# undef HAVE_MMAP
+#endif
+
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+ Note that our fallback values need not be literal strings, because we don't
+ use them with preprocessor string concatenation. */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+ (sizeof (void *) == sizeof (long) ? "ld" : \
+ sizeof (void *) == sizeof (int) ? "d" : \
+ "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+ (sizeof (void *) == sizeof (long) ? "li" : \
+ sizeof (void *) == sizeof (int) ? "i" : \
+ "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+ (sizeof (void *) == sizeof (long) ? "lo" : \
+ sizeof (void *) == sizeof (int) ? "o" : \
+ "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+ (sizeof (void *) == sizeof (long) ? "lu" : \
+ sizeof (void *) == sizeof (int) ? "u" : \
+ "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+ (sizeof (void *) == sizeof (long) ? "lx" : \
+ sizeof (void *) == sizeof (int) ? "x" : \
+ "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+ (sizeof (void *) == sizeof (long) ? "lX" : \
+ sizeof (void *) == sizeof (int) ? "X" : \
+ "llX")
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions. This is required by the standard
+ because some ISO C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define open __open
+# define close __close
+# define read __read
+# define mmap __mmap
+# define munmap __munmap
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+ with all translations. This is important if the translations are
+ cached by one of GCC's features. */
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment. Return NULL if unsupported. */
+static const char *
+get_sysdep_segment_value (const char *name)
+{
+ /* Test for an ISO C 99 section 7.8.1 format string directive.
+ Syntax:
+ P R I { d | i | o | u | x | X }
+ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
+ /* We don't use a table of 14 times 6 'const char *' strings here, because
+ data relocations cost startup time. */
+ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+ {
+ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+ || name[3] == 'x' || name[3] == 'X')
+ {
+ if (name[4] == '8' && name[5] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId8;
+ if (name[3] == 'i')
+ return PRIi8;
+ if (name[3] == 'o')
+ return PRIo8;
+ if (name[3] == 'u')
+ return PRIu8;
+ if (name[3] == 'x')
+ return PRIx8;
+ if (name[3] == 'X')
+ return PRIX8;
+ abort ();
+ }
+ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId16;
+ if (name[3] == 'i')
+ return PRIi16;
+ if (name[3] == 'o')
+ return PRIo16;
+ if (name[3] == 'u')
+ return PRIu16;
+ if (name[3] == 'x')
+ return PRIx16;
+ if (name[3] == 'X')
+ return PRIX16;
+ abort ();
+ }
+ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId32;
+ if (name[3] == 'i')
+ return PRIi32;
+ if (name[3] == 'o')
+ return PRIo32;
+ if (name[3] == 'u')
+ return PRIu32;
+ if (name[3] == 'x')
+ return PRIx32;
+ if (name[3] == 'X')
+ return PRIX32;
+ abort ();
+ }
+ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId64;
+ if (name[3] == 'i')
+ return PRIi64;
+ if (name[3] == 'o')
+ return PRIo64;
+ if (name[3] == 'u')
+ return PRIu64;
+ if (name[3] == 'x')
+ return PRIx64;
+ if (name[3] == 'X')
+ return PRIX64;
+ abort ();
+ }
+ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+ && name[7] == 'S' && name[8] == 'T')
+ {
+ if (name[9] == '8' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST8;
+ if (name[3] == 'i')
+ return PRIiLEAST8;
+ if (name[3] == 'o')
+ return PRIoLEAST8;
+ if (name[3] == 'u')
+ return PRIuLEAST8;
+ if (name[3] == 'x')
+ return PRIxLEAST8;
+ if (name[3] == 'X')
+ return PRIXLEAST8;
+ abort ();
+ }
+ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST16;
+ if (name[3] == 'i')
+ return PRIiLEAST16;
+ if (name[3] == 'o')
+ return PRIoLEAST16;
+ if (name[3] == 'u')
+ return PRIuLEAST16;
+ if (name[3] == 'x')
+ return PRIxLEAST16;
+ if (name[3] == 'X')
+ return PRIXLEAST16;
+ abort ();
+ }
+ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST32;
+ if (name[3] == 'i')
+ return PRIiLEAST32;
+ if (name[3] == 'o')
+ return PRIoLEAST32;
+ if (name[3] == 'u')
+ return PRIuLEAST32;
+ if (name[3] == 'x')
+ return PRIxLEAST32;
+ if (name[3] == 'X')
+ return PRIXLEAST32;
+ abort ();
+ }
+ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST64;
+ if (name[3] == 'i')
+ return PRIiLEAST64;
+ if (name[3] == 'o')
+ return PRIoLEAST64;
+ if (name[3] == 'u')
+ return PRIuLEAST64;
+ if (name[3] == 'x')
+ return PRIxLEAST64;
+ if (name[3] == 'X')
+ return PRIXLEAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+ && name[7] == 'T')
+ {
+ if (name[8] == '8' && name[9] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST8;
+ if (name[3] == 'i')
+ return PRIiFAST8;
+ if (name[3] == 'o')
+ return PRIoFAST8;
+ if (name[3] == 'u')
+ return PRIuFAST8;
+ if (name[3] == 'x')
+ return PRIxFAST8;
+ if (name[3] == 'X')
+ return PRIXFAST8;
+ abort ();
+ }
+ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST16;
+ if (name[3] == 'i')
+ return PRIiFAST16;
+ if (name[3] == 'o')
+ return PRIoFAST16;
+ if (name[3] == 'u')
+ return PRIuFAST16;
+ if (name[3] == 'x')
+ return PRIxFAST16;
+ if (name[3] == 'X')
+ return PRIXFAST16;
+ abort ();
+ }
+ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST32;
+ if (name[3] == 'i')
+ return PRIiFAST32;
+ if (name[3] == 'o')
+ return PRIoFAST32;
+ if (name[3] == 'u')
+ return PRIuFAST32;
+ if (name[3] == 'x')
+ return PRIxFAST32;
+ if (name[3] == 'X')
+ return PRIXFAST32;
+ abort ();
+ }
+ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST64;
+ if (name[3] == 'i')
+ return PRIiFAST64;
+ if (name[3] == 'o')
+ return PRIoFAST64;
+ if (name[3] == 'u')
+ return PRIuFAST64;
+ if (name[3] == 'x')
+ return PRIxFAST64;
+ if (name[3] == 'X')
+ return PRIXFAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdMAX;
+ if (name[3] == 'i')
+ return PRIiMAX;
+ if (name[3] == 'o')
+ return PRIoMAX;
+ if (name[3] == 'u')
+ return PRIuMAX;
+ if (name[3] == 'x')
+ return PRIxMAX;
+ if (name[3] == 'X')
+ return PRIXMAX;
+ abort ();
+ }
+ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdPTR;
+ if (name[3] == 'i')
+ return PRIiPTR;
+ if (name[3] == 'o')
+ return PRIoPTR;
+ if (name[3] == 'u')
+ return PRIuPTR;
+ if (name[3] == 'x')
+ return PRIxPTR;
+ if (name[3] == 'X')
+ return PRIXPTR;
+ abort ();
+ }
+ }
+ }
+ /* Test for a glibc specific printf() format directive flag. */
+ if (name[0] == 'I' && name[1] == '\0')
+ {
+#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ /* The 'I' flag, in numeric format directives, replaces ASCII digits
+ with the 'outdigits' defined in the LC_CTYPE locale facet. This is
+ used for Farsi (Persian) and maybe Arabic. */
+ return "I";
+#else
+ return "";
+#endif
+ }
+ /* Other system dependent strings are not valid. */
+ return NULL;
+}
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+ Return the header entry. */
+const char *
+internal_function
+_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
+ struct loaded_domain *domain,
+ struct binding *domainbinding)
+{
+ /* Find out about the character set the file is encoded with.
+ This can be found (in textual form) in the entry "". If this
+ entry does not exist or if this does not contain the `charset='
+ information, we will assume the charset matches the one the
+ current locale and we don't have to perform any conversion. */
+ char *nullentry;
+ size_t nullentrylen;
+
+ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
+ domain->codeset_cntr =
+ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+ domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+ domain->conv = (iconv_t) -1;
+# endif
+#endif
+ domain->conv_tab = NULL;
+
+ /* Get the header entry. */
+ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+ if (nullentry != NULL)
+ {
+#if defined _LIBC || HAVE_ICONV
+ const char *charsetstr;
+
+ charsetstr = strstr (nullentry, "charset=");
+ if (charsetstr != NULL)
+ {
+ size_t len;
+ char *charset;
+ const char *outcharset;
+
+ charsetstr += strlen ("charset=");
+ len = strcspn (charsetstr, " \t\n");
+
+ charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+ memcpy (charset, charsetstr, len);
+ charset[len] = '\0';
+# endif
+
+ /* The output charset should normally be determined by the
+ locale. But sometimes the locale is not used or not correctly
+ set up, so we provide a possibility for the user to override
+ this. Moreover, the value specified through
+ bind_textdomain_codeset overrides both. */
+ if (domainbinding != NULL && domainbinding->codeset != NULL)
+ outcharset = domainbinding->codeset;
+ else
+ {
+ outcharset = getenv ("OUTPUT_CHARSET");
+ if (outcharset == NULL || outcharset[0] == '\0')
+ {
+# ifdef _LIBC
+ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+# if HAVE_ICONV
+ extern const char *locale_charset (void);
+ outcharset = locale_charset ();
+# endif
+# endif
+ }
+ }
+
+# ifdef _LIBC
+ /* We always want to use transliteration. */
+ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+ charset = norm_add_slashes (charset, NULL);
+ if (__gconv_open (outcharset, charset, &domain->conv,
+ GCONV_AVOID_NOCONV)
+ != __GCONV_OK)
+ domain->conv = (__gconv_t) -1;
+# else
+# if HAVE_ICONV
+ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+ we want to use transliteration. */
+# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+ || _LIBICONV_VERSION >= 0x0105
+ if (strchr (outcharset, '/') == NULL)
+ {
+ char *tmp;
+
+ len = strlen (outcharset);
+ tmp = (char *) alloca (len + 10 + 1);
+ memcpy (tmp, outcharset, len);
+ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+ outcharset = tmp;
+
+ domain->conv = iconv_open (outcharset, charset);
+
+ freea (outcharset);
+ }
+ else
+# endif
+ domain->conv = iconv_open (outcharset, charset);
+# endif
+# endif
+
+ freea (charset);
+ }
+#endif /* _LIBC || HAVE_ICONV */
+ }
+
+ return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog. */
+void
+internal_function
+_nl_free_domain_conv (struct loaded_domain *domain)
+{
+ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+ free (domain->conv_tab);
+
+#ifdef _LIBC
+ if (domain->conv != (__gconv_t) -1)
+ __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+ if (domain->conv != (iconv_t) -1)
+ iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME. If it is no valid
+ message catalog do nothing. */
+void
+internal_function
+_nl_load_domain (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding)
+{
+ int fd;
+ size_t size;
+#ifdef _LIBC
+ struct stat64 st;
+#else
+ struct stat st;
+#endif
+ struct mo_file_header *data = (struct mo_file_header *) -1;
+ int use_mmap = 0;
+ struct loaded_domain *domain;
+ int revision;
+ const char *nullentry;
+
+ domain_file->decided = 1;
+ domain_file->data = NULL;
+
+ /* Note that it would be useless to store domainbinding in domain_file
+ because domainbinding might be == NULL now but != NULL later (after
+ a call to bind_textdomain_codeset). */
+
+ /* If the record does not represent a valid locale the FILENAME
+ might be NULL. This can happen when according to the given
+ specification the locale file name is different for XPG and CEN
+ syntax. */
+ if (domain_file->filename == NULL)
+ return;
+
+ /* Try to open the addressed file. */
+ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ return;
+
+ /* We must know about the size of the file. */
+ if (
+#ifdef _LIBC
+ __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+ __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+ {
+ /* Something went wrong. */
+ close (fd);
+ return;
+ }
+
+#ifdef HAVE_MMAP
+ /* Now we are ready to load the file. If mmap() is available we try
+ this first. If not available or it failed we try to load it. */
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+
+ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+ {
+ /* mmap() call was successful. */
+ close (fd);
+ use_mmap = 1;
+ }
+#endif
+
+ /* If the data is not yet available (i.e. mmap'ed) we try to load
+ it manually. */
+ if (data == (struct mo_file_header *) -1)
+ {
+ size_t to_read;
+ char *read_ptr;
+
+ data = (struct mo_file_header *) malloc (size);
+ if (data == NULL)
+ return;
+
+ to_read = size;
+ read_ptr = (char *) data;
+ do
+ {
+ long int nb = (long int) read (fd, read_ptr, to_read);
+ if (nb <= 0)
+ {
+#ifdef EINTR
+ if (nb == -1 && errno == EINTR)
+ continue;
+#endif
+ close (fd);
+ return;
+ }
+ read_ptr += nb;
+ to_read -= nb;
+ }
+ while (to_read > 0);
+
+ close (fd);
+ }
+
+ /* Using the magic number we can test whether it really is a message
+ catalog file. */
+ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+ 0))
+ {
+ /* The magic number is wrong: not a message catalog file. */
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ return;
+ }
+
+ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+ if (domain == NULL)
+ return;
+ domain_file->data = domain;
+
+ domain->data = (char *) data;
+ domain->use_mmap = use_mmap;
+ domain->mmap_size = size;
+ domain->must_swap = data->magic != _MAGIC;
+ domain->malloced = NULL;
+
+ /* Fill in the information about the available tables. */
+ revision = W (domain->must_swap, data->revision);
+ /* We support only the major revisions 0 and 1. */
+ switch (revision >> 16)
+ {
+ case 0:
+ case 1:
+ domain->nstrings = W (domain->must_swap, data->nstrings);
+ domain->orig_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+ domain->trans_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+ domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+ domain->hash_tab =
+ (domain->hash_size > 2
+ ? (const nls_uint32 *)
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+ : NULL);
+ domain->must_swap_hash_tab = domain->must_swap;
+
+ /* Now dispatch on the minor revision. */
+ switch (revision & 0xffff)
+ {
+ case 0:
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ break;
+ case 1:
+ default:
+ {
+ nls_uint32 n_sysdep_strings;
+
+ if (domain->hash_tab == NULL)
+ /* This is invalid. These minor revisions need a hash table. */
+ goto invalid;
+
+ n_sysdep_strings =
+ W (domain->must_swap, data->n_sysdep_strings);
+ if (n_sysdep_strings > 0)
+ {
+ nls_uint32 n_sysdep_segments;
+ const struct sysdep_segment *sysdep_segments;
+ const char **sysdep_segment_values;
+ const nls_uint32 *orig_sysdep_tab;
+ const nls_uint32 *trans_sysdep_tab;
+ nls_uint32 n_inmem_sysdep_strings;
+ size_t memneed;
+ char *mem;
+ struct sysdep_string_desc *inmem_orig_sysdep_tab;
+ struct sysdep_string_desc *inmem_trans_sysdep_tab;
+ nls_uint32 *inmem_hash_tab;
+ unsigned int i, j;
+
+ /* Get the values of the system dependent segments. */
+ n_sysdep_segments =
+ W (domain->must_swap, data->n_sysdep_segments);
+ sysdep_segments = (const struct sysdep_segment *)
+ ((char *) data
+ + W (domain->must_swap, data->sysdep_segments_offset));
+ sysdep_segment_values =
+ alloca (n_sysdep_segments * sizeof (const char *));
+ for (i = 0; i < n_sysdep_segments; i++)
+ {
+ const char *name =
+ (char *) data
+ + W (domain->must_swap, sysdep_segments[i].offset);
+ nls_uint32 namelen =
+ W (domain->must_swap, sysdep_segments[i].length);
+
+ if (!(namelen > 0 && name[namelen - 1] == '\0'))
+ {
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ sysdep_segment_values[i] = get_sysdep_segment_value (name);
+ }
+
+ orig_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->orig_sysdep_tab_offset));
+ trans_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+ /* Compute the amount of additional memory needed for the
+ system dependent strings and the augmented hash table.
+ At the same time, also drop string pairs which refer to
+ an undefined system dependent segment. */
+ n_inmem_sysdep_strings = 0;
+ memneed = domain->hash_size * sizeof (nls_uint32);
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+ size_t needs[2];
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ size_t need = 0;
+ const struct segment_pair *p = sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ need += W (domain->must_swap, p->segsize);
+
+ sysdepref = W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdepref >= n_sysdep_segments)
+ {
+ /* Invalid. */
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is invalid. */
+ valid = 0;
+ break;
+ }
+
+ need += strlen (sysdep_segment_values[sysdepref]);
+ }
+
+ needs[j] = need;
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ n_inmem_sysdep_strings++;
+ memneed += needs[0] + needs[1];
+ }
+ }
+ memneed += 2 * n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+
+ if (n_inmem_sysdep_strings > 0)
+ {
+ unsigned int k;
+
+ /* Allocate additional memory. */
+ mem = (char *) malloc (memneed);
+ if (mem == NULL)
+ goto invalid;
+
+ domain->malloced = mem;
+ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_hash_tab = (nls_uint32 *) mem;
+ mem += domain->hash_size * sizeof (nls_uint32);
+
+ /* Compute the system dependent strings. */
+ k = 0;
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref)
+ != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is
+ invalid. */
+ valid = 0;
+ break;
+ }
+ }
+
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const char *static_segments =
+ (char *) data
+ + W (domain->must_swap, sysdep_string->offset);
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ /* Concatenate the segments, and fill
+ inmem_orig_sysdep_tab[k] (for j == 0) and
+ inmem_trans_sysdep_tab[k] (for j == 1). */
+
+ struct sysdep_string_desc *inmem_tab_entry =
+ (j == 0
+ ? inmem_orig_sysdep_tab
+ : inmem_trans_sysdep_tab)
+ + k;
+
+ if (W (domain->must_swap, p->sysdepref)
+ == SEGMENTS_END)
+ {
+ /* Only one static segment. */
+ inmem_tab_entry->length =
+ W (domain->must_swap, p->segsize);
+ inmem_tab_entry->pointer = static_segments;
+ }
+ else
+ {
+ inmem_tab_entry->pointer = mem;
+
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 segsize =
+ W (domain->must_swap, p->segsize);
+ nls_uint32 sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ size_t n;
+
+ if (segsize > 0)
+ {
+ memcpy (mem, static_segments, segsize);
+ mem += segsize;
+ static_segments += segsize;
+ }
+
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ n = strlen (sysdep_segment_values[sysdepref]);
+ memcpy (mem, sysdep_segment_values[sysdepref], n);
+ mem += n;
+ }
+
+ inmem_tab_entry->length =
+ mem - inmem_tab_entry->pointer;
+ }
+ }
+
+ k++;
+ }
+ }
+ if (k != n_inmem_sysdep_strings)
+ abort ();
+
+ /* Compute the augmented hash table. */
+ for (i = 0; i < domain->hash_size; i++)
+ inmem_hash_tab[i] =
+ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+ for (i = 0; i < n_inmem_sysdep_strings; i++)
+ {
+ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr =
+ 1 + (hash_val % (domain->hash_size - 2));
+
+ for (;;)
+ {
+ if (inmem_hash_tab[idx] == 0)
+ {
+ /* Hash table entry is empty. Use it. */
+ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+ break;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ }
+
+ domain->n_sysdep_strings = n_inmem_sysdep_strings;
+ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+ domain->hash_tab = inmem_hash_tab;
+ domain->must_swap_hash_tab = 0;
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+
+ freea (sysdep_segment_values);
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+ }
+ break;
+ }
+ break;
+ default:
+ /* This is an invalid revision. */
+ invalid:
+ /* This is an invalid .mo file. */
+ if (domain->malloced)
+ free (domain->malloced);
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ free (domain);
+ domain_file->data = NULL;
+ return;
+ }
+
+ /* Now initialize the character set converter from the character set
+ the file is encoded with (found in the header entry) to the domain's
+ specified character set or the locale's character set. */
+ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+ /* Also look for a plural specification. */
+ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (struct loaded_domain *domain)
+{
+ if (domain->plural != &__gettext_germanic_plural)
+ __gettext_free_exp (domain->plural);
+
+ _nl_free_domain_conv (domain);
+
+ if (domain->malloced)
+ free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
+# endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+
+ free (domain);
+}
+#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
new file mode 100644
index 00000000..4865f103
--- /dev/null
+++ b/intl/localcharset.c
@@ -0,0 +1,398 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "localcharset.h"
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# define OS2
+#endif
+
+#if !defined WIN32
+# if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+# else
+# if HAVE_SETLOCALE
+# include <locale.h>
+# endif
+# endif
+#elif defined WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+ possible multithread problem in the function get_charset_aliases. If we
+ are running in a threaded environment, and if two threads initialize
+ 'charset_aliases' simultaneously, both will produce the same value,
+ and everything will be ok if the two assignments to 'charset_aliases'
+ are atomic. But I don't know what will happen if the two assignments mix. */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+ read, else NULL. Its format is:
+ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file. */
+static const char *
+get_charset_aliases ()
+{
+ const char *cp;
+
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+#if !(defined VMS || defined WIN32)
+ FILE *fp;
+ const char *dir = relocate (LIBDIR);
+ const char *base = "charset.alias";
+ char *file_name;
+
+ /* Concatenate dir and base into freshly allocated file_name. */
+ {
+ size_t dir_len = strlen (dir);
+ size_t base_len = strlen (base);
+ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+ if (file_name != NULL)
+ {
+ memcpy (file_name, dir, dir_len);
+ if (add_slash)
+ file_name[dir_len] = DIRECTORY_SEPARATOR;
+ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+ }
+ }
+
+ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+ /* Out of memory or file not found, treat it as empty. */
+ cp = "";
+ else
+ {
+ /* Parse the file's contents. */
+ int c;
+ char buf1[50+1];
+ char buf2[50+1];
+ char *res_ptr = NULL;
+ size_t res_size = 0;
+ size_t l1, l2;
+
+ for (;;)
+ {
+ c = getc (fp);
+ if (c == EOF)
+ break;
+ if (c == '\n' || c == ' ' || c == '\t')
+ continue;
+ if (c == '#')
+ {
+ /* Skip comment, to end of line. */
+ do
+ c = getc (fp);
+ while (!(c == EOF || c == '\n'));
+ if (c == EOF)
+ break;
+ continue;
+ }
+ ungetc (c, fp);
+ if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+ break;
+ l1 = strlen (buf1);
+ l2 = strlen (buf2);
+ if (res_size == 0)
+ {
+ res_size = l1 + 1 + l2 + 1;
+ res_ptr = (char *) malloc (res_size + 1);
+ }
+ else
+ {
+ res_size += l1 + 1 + l2 + 1;
+ res_ptr = (char *) realloc (res_ptr, res_size + 1);
+ }
+ if (res_ptr == NULL)
+ {
+ /* Out of memory. */
+ res_size = 0;
+ break;
+ }
+ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+ strcpy (res_ptr + res_size - (l2 + 1), buf2);
+ }
+ fclose (fp);
+ if (res_size == 0)
+ cp = "";
+ else
+ {
+ *(res_ptr + res_size) = '\0';
+ cp = res_ptr;
+ }
+ }
+
+ if (file_name != NULL)
+ free (file_name);
+
+#else
+
+# if defined VMS
+ /* To avoid the troubles of an extra file charset.alias_vms in the
+ sources of many GNU packages, simply inline the aliases here. */
+ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+ section 10.7 "Handling Different Character Sets". */
+ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+ "ISO8859-2" "\0" "ISO-8859-2" "\0"
+ "ISO8859-5" "\0" "ISO-8859-5" "\0"
+ "ISO8859-7" "\0" "ISO-8859-7" "\0"
+ "ISO8859-8" "\0" "ISO-8859-8" "\0"
+ "ISO8859-9" "\0" "ISO-8859-9" "\0"
+ /* Japanese */
+ "eucJP" "\0" "EUC-JP" "\0"
+ "SJIS" "\0" "SHIFT_JIS" "\0"
+ "DECKANJI" "\0" "DEC-KANJI" "\0"
+ "SDECKANJI" "\0" "EUC-JP" "\0"
+ /* Chinese */
+ "eucTW" "\0" "EUC-TW" "\0"
+ "DECHANYU" "\0" "DEC-HANYU" "\0"
+ "DECHANZI" "\0" "GB2312" "\0"
+ /* Korean */
+ "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32
+ /* To avoid the troubles of installing a separate file in the same
+ directory as the DLL and of retrieving the DLL's directory at
+ runtime, simply inline the aliases here. */
+
+ cp = "CP936" "\0" "GBK" "\0"
+ "CP1361" "\0" "JOHAB" "\0"
+ "CP20127" "\0" "ASCII" "\0"
+ "CP20866" "\0" "KOI8-R" "\0"
+ "CP21866" "\0" "KOI8-RU" "\0"
+ "CP28591" "\0" "ISO-8859-1" "\0"
+ "CP28592" "\0" "ISO-8859-2" "\0"
+ "CP28593" "\0" "ISO-8859-3" "\0"
+ "CP28594" "\0" "ISO-8859-4" "\0"
+ "CP28595" "\0" "ISO-8859-5" "\0"
+ "CP28596" "\0" "ISO-8859-6" "\0"
+ "CP28597" "\0" "ISO-8859-7" "\0"
+ "CP28598" "\0" "ISO-8859-8" "\0"
+ "CP28599" "\0" "ISO-8859-9" "\0"
+ "CP28605" "\0" "ISO-8859-15" "\0";
+# endif
+#endif
+
+ charset_aliases = cp;
+ }
+
+ return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset ()
+{
+ const char *codeset;
+ const char *aliases;
+
+#if !(defined WIN32 || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# else
+
+ /* On old systems which lack it, use setlocale or getenv. */
+ const char *locale = NULL;
+
+ /* But most old systems don't have a complete set of locales. Some
+ (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
+ use setlocale here; it would return "C" when it doesn't support the
+ locale name the user has set. */
+# if HAVE_SETLOCALE && 0
+ locale = setlocale (LC_CTYPE, NULL);
+# endif
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ }
+
+ /* On some old systems, one used to set locale = "iso8859_1". On others,
+ you set it to "language_COUNTRY.charset". In any case, we resolve it
+ through the charset.alias file. */
+ codeset = locale;
+
+# endif
+
+#elif defined WIN32
+
+ static char buf[2 + 10 + 1];
+
+ /* Woe32 has a function returning the locale's codepage as a number. */
+ sprintf (buf, "CP%u", GetACP ());
+ codeset = buf;
+
+#elif defined OS2
+
+ const char *locale;
+ static char buf[2 + 10 + 1];
+ ULONG cp[3];
+ ULONG cplen;
+
+ /* Allow user to override the codeset, as set in the operating system,
+ with standard language environment variables. */
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ if (locale != NULL && locale[0] != '\0')
+ {
+ /* If the locale name contains an encoding after the dot, return it. */
+ const char *dot = strchr (locale, '.');
+
+ if (dot != NULL)
+ {
+ const char *modifier;
+
+ dot++;
+ /* Look for the possible @... trailer and remove it, if any. */
+ modifier = strchr (dot, '@');
+ if (modifier == NULL)
+ return dot;
+ if (modifier - dot < sizeof (buf))
+ {
+ memcpy (buf, dot, modifier - dot);
+ buf [modifier - dot] = '\0';
+ return buf;
+ }
+ }
+
+ /* Resolve through the charset.alias file. */
+ codeset = locale;
+ }
+ else
+ {
+ /* OS/2 has a function returning the locale's codepage as a number. */
+ if (DosQueryCp (sizeof (cp), cp, &cplen))
+ codeset = "";
+ else
+ {
+ sprintf (buf, "CP%u", cp[0]);
+ codeset = buf;
+ }
+ }
+
+#endif
+
+ if (codeset == NULL)
+ /* The canonical name cannot be determined. */
+ codeset = "";
+
+ /* Resolve alias. */
+ for (aliases = get_charset_aliases ();
+ *aliases != '\0';
+ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+ if (strcmp (codeset, aliases) == 0
+ || (aliases[0] == '*' && aliases[1] == '\0'))
+ {
+ codeset = aliases + strlen (aliases) + 1;
+ break;
+ }
+
+ /* Don't return an empty string. GNU libc and GNU libiconv interpret
+ the empty string as denoting "the locale's character encoding",
+ thus GNU libiconv would call this function a second time. */
+ if (codeset[0] == '\0')
+ codeset = "ASCII";
+
+ return codeset;
+}
diff --git a/intl/localcharset.h b/intl/localcharset.h
new file mode 100644
index 00000000..3b137e73
--- /dev/null
+++ b/intl/localcharset.h
@@ -0,0 +1,42 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644
index 00000000..bd6bb256
--- /dev/null
+++ b/intl/locale.alias
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete. If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us. Send it using the `glibcbug' script to
+# bugs@gnu.org.
+
+# Packages using this file:
+
+bokmal nb_NO.ISO-8859-1
+bokml nb_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+franais fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+no_NO nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian nb_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644
index 00000000..2eaf8813
--- /dev/null
+++ b/intl/localealias.c
@@ -0,0 +1,414 @@
+/* Handle aliases for locale names.
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+# define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY 1
+# define HAVE___FSETLOCKING 1
+
+/* We need locking here since we can be called from different places. */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Some optimizations for glibc. */
+#ifdef _LIBC
+# define FEOF(fp) feof_unlocked (fp)
+# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp) feof (fp)
+# define FGETS(buf, n, fp) fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+ const char *alias;
+ const char *value;
+};
+
+
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions. */
+static size_t read_alias_file (const char *fname, int fname_len)
+ internal_function;
+static int extend_alias_table (void);
+static int alias_compare (const struct alias_map *map1,
+ const struct alias_map *map2);
+
+
+const char *
+_nl_expand_alias (const char *name)
+{
+ static const char *locale_alias_path;
+ struct alias_map *retval;
+ const char *result = NULL;
+ size_t added;
+
+#ifdef _LIBC
+ __libc_lock_lock (lock);
+#endif
+
+ if (locale_alias_path == NULL)
+ locale_alias_path = LOCALE_ALIAS_PATH;
+
+ do
+ {
+ struct alias_map item;
+
+ item.alias = name;
+
+ if (nmap > 0)
+ retval = (struct alias_map *) bsearch (&item, map, nmap,
+ sizeof (struct alias_map),
+ (int (*) (const void *,
+ const void *)
+ ) alias_compare);
+ else
+ retval = NULL;
+
+ /* We really found an alias. Return the value. */
+ if (retval != NULL)
+ {
+ result = retval->value;
+ break;
+ }
+
+ /* Perhaps we can find another alias file. */
+ added = 0;
+ while (added == 0 && locale_alias_path[0] != '\0')
+ {
+ const char *start;
+
+ while (locale_alias_path[0] == PATH_SEPARATOR)
+ ++locale_alias_path;
+ start = locale_alias_path;
+
+ while (locale_alias_path[0] != '\0'
+ && locale_alias_path[0] != PATH_SEPARATOR)
+ ++locale_alias_path;
+
+ if (start < locale_alias_path)
+ added = read_alias_file (start, locale_alias_path - start);
+ }
+ }
+ while (added != 0);
+
+#ifdef _LIBC
+ __libc_lock_unlock (lock);
+#endif
+
+ return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (const char *fname, int fname_len)
+{
+ FILE *fp;
+ char *full_fname;
+ size_t added;
+ static const char aliasfile[] = "/locale.alias";
+
+ full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
+ memcpy (full_fname, fname, fname_len);
+ memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+ fp = fopen (relocate (full_fname), "r");
+ freea (full_fname);
+ if (fp == NULL)
+ return 0;
+
+#ifdef HAVE___FSETLOCKING
+ /* No threads present. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
+ added = 0;
+ while (!FEOF (fp))
+ {
+ /* It is a reasonable approach to use a fix buffer here because
+ a) we are only interested in the first two fields
+ b) these fields must be usable as file names and so must not
+ be that long
+ We avoid a multi-kilobyte buffer here since this would use up
+ stack space which we might not have if the program ran out of
+ memory. */
+ char buf[400];
+ char *alias;
+ char *value;
+ char *cp;
+
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* EOF reached. */
+ break;
+
+ cp = buf;
+ /* Ignore leading white space. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ /* A leading '#' signals a comment line. */
+ if (cp[0] != '\0' && cp[0] != '#')
+ {
+ alias = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate alias name. */
+ if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ /* Now look for the beginning of the value. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ if (cp[0] != '\0')
+ {
+ size_t alias_len;
+ size_t value_len;
+
+ value = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate value. */
+ if (cp[0] == '\n')
+ {
+ /* This has to be done to make the following test
+ for the end of line possible. We are looking for
+ the terminating '\n' which do not overwrite here. */
+ *cp++ = '\0';
+ *cp = '\n';
+ }
+ else if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ if (nmap >= maxmap)
+ if (__builtin_expect (extend_alias_table (), 0))
+ return added;
+
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
+
+ if (string_space_act + alias_len + value_len > string_space_max)
+ {
+ /* Increase size of memory pool. */
+ size_t new_size = (string_space_max
+ + (alias_len + value_len > 1024
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
+ return added;
+
+ if (__builtin_expect (string_space != new_pool, 0))
+ {
+ size_t i;
+
+ for (i = 0; i < nmap; i++)
+ {
+ map[i].alias += new_pool - string_space;
+ map[i].value += new_pool - string_space;
+ }
+ }
+
+ string_space = new_pool;
+ string_space_max = new_size;
+ }
+
+ map[nmap].alias = memcpy (&string_space[string_space_act],
+ alias, alias_len);
+ string_space_act += alias_len;
+
+ map[nmap].value = memcpy (&string_space[string_space_act],
+ value, value_len);
+ string_space_act += value_len;
+
+ ++nmap;
+ ++added;
+ }
+ }
+
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ while (strchr (buf, '\n') == NULL)
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ }
+
+ /* Should we test for ferror()? I think we have to silently ignore
+ errors. --drepper */
+ fclose (fp);
+
+ if (added > 0)
+ qsort (map, nmap, sizeof (struct alias_map),
+ (int (*) (const void *, const void *)) alias_compare);
+
+ return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+ size_t new_size;
+ struct alias_map *new_map;
+
+ new_size = maxmap == 0 ? 100 : 2 * maxmap;
+ new_map = (struct alias_map *) realloc (map, (new_size
+ * sizeof (struct alias_map)));
+ if (new_map == NULL)
+ /* Simply don't extend: we don't have any more core. */
+ return -1;
+
+ map = new_map;
+ maxmap = new_size;
+ return 0;
+}
+
+
+static int
+alias_compare (const struct alias_map *map1, const struct alias_map *map2)
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+ return strcasecmp (map1->alias, map2->alias);
+#else
+ const unsigned char *p1 = (const unsigned char *) map1->alias;
+ const unsigned char *p2 = (const unsigned char *) map2->alias;
+ unsigned char c1, c2;
+
+ if (p1 == p2)
+ return 0;
+
+ do
+ {
+ /* I know this seems to be odd but the tolower() function in
+ some systems libc cannot handle nonalpha characters. */
+ c1 = isupper (*p1) ? tolower (*p1) : *p1;
+ c2 = isupper (*p2) ? tolower (*p2) : *p2;
+ if (c1 == '\0')
+ break;
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ return c1 - c2;
+#endif
+}
diff --git a/intl/localename.c b/intl/localename.c
new file mode 100644
index 00000000..5662e54f
--- /dev/null
+++ b/intl/localename.c
@@ -0,0 +1,1142 @@
+/* Determine the current selected locale.
+ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
+/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* List of language codes, sorted by value:
+ 0x01 LANG_ARABIC
+ 0x02 LANG_BULGARIAN
+ 0x03 LANG_CATALAN
+ 0x04 LANG_CHINESE
+ 0x05 LANG_CZECH
+ 0x06 LANG_DANISH
+ 0x07 LANG_GERMAN
+ 0x08 LANG_GREEK
+ 0x09 LANG_ENGLISH
+ 0x0a LANG_SPANISH
+ 0x0b LANG_FINNISH
+ 0x0c LANG_FRENCH
+ 0x0d LANG_HEBREW
+ 0x0e LANG_HUNGARIAN
+ 0x0f LANG_ICELANDIC
+ 0x10 LANG_ITALIAN
+ 0x11 LANG_JAPANESE
+ 0x12 LANG_KOREAN
+ 0x13 LANG_DUTCH
+ 0x14 LANG_NORWEGIAN
+ 0x15 LANG_POLISH
+ 0x16 LANG_PORTUGUESE
+ 0x17 LANG_RHAETO_ROMANCE
+ 0x18 LANG_ROMANIAN
+ 0x19 LANG_RUSSIAN
+ 0x1a LANG_CROATIAN == LANG_SERBIAN
+ 0x1b LANG_SLOVAK
+ 0x1c LANG_ALBANIAN
+ 0x1d LANG_SWEDISH
+ 0x1e LANG_THAI
+ 0x1f LANG_TURKISH
+ 0x20 LANG_URDU
+ 0x21 LANG_INDONESIAN
+ 0x22 LANG_UKRAINIAN
+ 0x23 LANG_BELARUSIAN
+ 0x24 LANG_SLOVENIAN
+ 0x25 LANG_ESTONIAN
+ 0x26 LANG_LATVIAN
+ 0x27 LANG_LITHUANIAN
+ 0x28 LANG_TAJIK
+ 0x29 LANG_FARSI
+ 0x2a LANG_VIETNAMESE
+ 0x2b LANG_ARMENIAN
+ 0x2c LANG_AZERI
+ 0x2d LANG_BASQUE
+ 0x2e LANG_SORBIAN
+ 0x2f LANG_MACEDONIAN
+ 0x30 LANG_SUTU
+ 0x31 LANG_TSONGA
+ 0x32 LANG_TSWANA
+ 0x33 LANG_VENDA
+ 0x34 LANG_XHOSA
+ 0x35 LANG_ZULU
+ 0x36 LANG_AFRIKAANS
+ 0x37 LANG_GEORGIAN
+ 0x38 LANG_FAEROESE
+ 0x39 LANG_HINDI
+ 0x3a LANG_MALTESE
+ 0x3b LANG_SAAMI
+ 0x3c LANG_GAELIC
+ 0x3d LANG_YIDDISH
+ 0x3e LANG_MALAY
+ 0x3f LANG_KAZAK
+ 0x40 LANG_KYRGYZ
+ 0x41 LANG_SWAHILI
+ 0x42 LANG_TURKMEN
+ 0x43 LANG_UZBEK
+ 0x44 LANG_TATAR
+ 0x45 LANG_BENGALI
+ 0x46 LANG_PUNJABI
+ 0x47 LANG_GUJARATI
+ 0x48 LANG_ORIYA
+ 0x49 LANG_TAMIL
+ 0x4a LANG_TELUGU
+ 0x4b LANG_KANNADA
+ 0x4c LANG_MALAYALAM
+ 0x4d LANG_ASSAMESE
+ 0x4e LANG_MARATHI
+ 0x4f LANG_SANSKRIT
+ 0x50 LANG_MONGOLIAN
+ 0x51 LANG_TIBETAN
+ 0x52 LANG_WELSH
+ 0x53 LANG_CAMBODIAN
+ 0x54 LANG_LAO
+ 0x55 LANG_BURMESE
+ 0x56 LANG_GALICIAN
+ 0x57 LANG_KONKANI
+ 0x58 LANG_MANIPURI
+ 0x59 LANG_SINDHI
+ 0x5a LANG_SYRIAC
+ 0x5b LANG_SINHALESE
+ 0x5c LANG_CHEROKEE
+ 0x5d LANG_INUKTITUT
+ 0x5e LANG_AMHARIC
+ 0x5f LANG_TAMAZIGHT
+ 0x60 LANG_KASHMIRI
+ 0x61 LANG_NEPALI
+ 0x62 LANG_FRISIAN
+ 0x63 LANG_PASHTO
+ 0x64 LANG_TAGALOG
+ 0x65 LANG_DIVEHI
+ 0x66 LANG_EDO
+ 0x67 LANG_FULFULDE
+ 0x68 LANG_HAUSA
+ 0x69 LANG_IBIBIO
+ 0x6a LANG_YORUBA
+ 0x70 LANG_IGBO
+ 0x71 LANG_KANURI
+ 0x72 LANG_OROMO
+ 0x73 LANG_TIGRINYA
+ 0x74 LANG_GUARANI
+ 0x75 LANG_HAWAIIAN
+ 0x76 LANG_LATIN
+ 0x77 LANG_SOMALI
+ 0x78 LANG_YI
+ 0x79 LANG_PAPIAMENTU
+*/
+/* Mingw headers don't have latest language and sublanguage codes. */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_AMHARIC
+# define LANG_AMHARIC 0x5e
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_BURMESE
+# define LANG_BURMESE 0x55
+# endif
+# ifndef LANG_CAMBODIAN
+# define LANG_CAMBODIAN 0x53
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_CHEROKEE
+# define LANG_CHEROKEE 0x5c
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_EDO
+# define LANG_EDO 0x66
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_FRISIAN
+# define LANG_FRISIAN 0x62
+# endif
+# ifndef LANG_FULFULDE
+# define LANG_FULFULDE 0x67
+# endif
+# ifndef LANG_GAELIC
+# define LANG_GAELIC 0x3c
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUARANI
+# define LANG_GUARANI 0x74
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HAUSA
+# define LANG_HAUSA 0x68
+# endif
+# ifndef LANG_HAWAIIAN
+# define LANG_HAWAIIAN 0x75
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_IBIBIO
+# define LANG_IBIBIO 0x69
+# endif
+# ifndef LANG_IGBO
+# define LANG_IGBO 0x70
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_INUKTITUT
+# define LANG_INUKTITUT 0x5d
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KANURI
+# define LANG_KANURI 0x71
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LAO
+# define LANG_LAO 0x54
+# endif
+# ifndef LANG_LATIN
+# define LANG_LATIN 0x76
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MALTESE
+# define LANG_MALTESE 0x3a
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_OROMO
+# define LANG_OROMO 0x72
+# endif
+# ifndef LANG_PAPIAMENTU
+# define LANG_PAPIAMENTU 0x79
+# endif
+# ifndef LANG_PASHTO
+# define LANG_PASHTO 0x63
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_RHAETO_ROMANCE
+# define LANG_RHAETO_ROMANCE 0x17
+# endif
+# ifndef LANG_SAAMI
+# define LANG_SAAMI 0x3b
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SINHALESE
+# define LANG_SINHALESE 0x5b
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SOMALI
+# define LANG_SOMALI 0x77
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SUTU
+# define LANG_SUTU 0x30
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAGALOG
+# define LANG_TAGALOG 0x64
+# endif
+# ifndef LANG_TAJIK
+# define LANG_TAJIK 0x28
+# endif
+# ifndef LANG_TAMAZIGHT
+# define LANG_TAMAZIGHT 0x5f
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_TIBETAN
+# define LANG_TIBETAN 0x51
+# endif
+# ifndef LANG_TIGRINYA
+# define LANG_TIGRINYA 0x73
+# endif
+# ifndef LANG_TSONGA
+# define LANG_TSONGA 0x31
+# endif
+# ifndef LANG_TSWANA
+# define LANG_TSWANA 0x32
+# endif
+# ifndef LANG_TURKMEN
+# define LANG_TURKMEN 0x42
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VENDA
+# define LANG_VENDA 0x33
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef LANG_WELSH
+# define LANG_WELSH 0x52
+# endif
+# ifndef LANG_XHOSA
+# define LANG_XHOSA 0x34
+# endif
+# ifndef LANG_YI
+# define LANG_YI 0x78
+# endif
+# ifndef LANG_YIDDISH
+# define LANG_YIDDISH 0x3d
+# endif
+# ifndef LANG_YORUBA
+# define LANG_YORUBA 0x6a
+# endif
+# ifndef LANG_ZULU
+# define LANG_ZULU 0x35
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_BENGALI_INDIA
+# define SUBLANG_BENGALI_INDIA 0x00
+# endif
+# ifndef SUBLANG_BENGALI_BANGLADESH
+# define SUBLANG_BENGALI_BANGLADESH 0x01
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_ENGLISH_INDONESIA
+# define SUBLANG_ENGLISH_INDONESIA 0x0e
+# endif
+# ifndef SUBLANG_ENGLISH_HONGKONG
+# define SUBLANG_ENGLISH_HONGKONG 0x0f
+# endif
+# ifndef SUBLANG_ENGLISH_INDIA
+# define SUBLANG_ENGLISH_INDIA 0x10
+# endif
+# ifndef SUBLANG_ENGLISH_MALAYSIA
+# define SUBLANG_ENGLISH_MALAYSIA 0x11
+# endif
+# ifndef SUBLANG_ENGLISH_SINGAPORE
+# define SUBLANG_ENGLISH_SINGAPORE 0x12
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_FRENCH_WESTINDIES
+# define SUBLANG_FRENCH_WESTINDIES 0x07
+# endif
+# ifndef SUBLANG_FRENCH_REUNION
+# define SUBLANG_FRENCH_REUNION 0x08
+# endif
+# ifndef SUBLANG_FRENCH_CONGO
+# define SUBLANG_FRENCH_CONGO 0x09
+# endif
+# ifndef SUBLANG_FRENCH_SENEGAL
+# define SUBLANG_FRENCH_SENEGAL 0x0a
+# endif
+# ifndef SUBLANG_FRENCH_CAMEROON
+# define SUBLANG_FRENCH_CAMEROON 0x0b
+# endif
+# ifndef SUBLANG_FRENCH_COTEDIVOIRE
+# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
+# endif
+# ifndef SUBLANG_FRENCH_MALI
+# define SUBLANG_FRENCH_MALI 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_MOROCCO
+# define SUBLANG_FRENCH_MOROCCO 0x0e
+# endif
+# ifndef SUBLANG_FRENCH_HAITI
+# define SUBLANG_FRENCH_HAITI 0x0f
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_PUNJABI_INDIA
+# define SUBLANG_PUNJABI_INDIA 0x00
+# endif
+# ifndef SUBLANG_PUNJABI_PAKISTAN
+# define SUBLANG_PUNJABI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_ROMANIAN_ROMANIA
+# define SUBLANG_ROMANIAN_ROMANIA 0x00
+# endif
+# ifndef SUBLANG_ROMANIAN_MOLDOVA
+# define SUBLANG_ROMANIAN_MOLDOVA 0x01
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SINDHI_INDIA
+# define SUBLANG_SINDHI_INDIA 0x00
+# endif
+# ifndef SUBLANG_SINDHI_PAKISTAN
+# define SUBLANG_SINDHI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_TAMAZIGHT_ARABIC
+# define SUBLANG_TAMAZIGHT_ARABIC 0x01
+# endif
+# ifndef SUBLANG_TAMAZIGHT_LATIN
+# define SUBLANG_TAMAZIGHT_LATIN 0x02
+# endif
+# ifndef SUBLANG_TIGRINYA_ETHIOPIA
+# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
+# endif
+# ifndef SUBLANG_TIGRINYA_ERITREA
+# define SUBLANG_TIGRINYA_ERITREA 0x01
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+ "Directs 'setlocale()' to query 'category' and return the current
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+ those using GNU C Library). */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Determine the current locale's name, and canonicalize it into XPG syntax
+ language[_territory[.codeset]][@modifier]
+ The codeset part in the result is not reliable; the locale_charset()
+ should be used for codeset information instead.
+ The result must not be freed; it is statically allocated. */
+
+const char *
+_nl_locale_name (int category, const char *categoryname)
+{
+ const char *retval;
+
+#ifndef WIN32
+
+ /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+ On some systems this can be done by the 'setlocale' function itself. */
+# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+ retval = setlocale (category, NULL);
+# else
+ /* Setting of LC_ALL overwrites all other. */
+ retval = getenv ("LC_ALL");
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Next comes the name of the desired category. */
+ retval = getenv (categoryname);
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Last possibility is the LANG environment variable. */
+ retval = getenv ("LANG");
+ if (retval == NULL || retval[0] == '\0')
+ /* We use C as the default domain. POSIX says this is
+ implementation defined. */
+ retval = "C";
+ }
+ }
+# endif
+
+ return retval;
+
+#else /* WIN32 */
+
+ /* Return an XPG style locale name language[_territory][@modifier].
+ Don't even bother determining the codeset; it's not useful in this
+ context, because message catalogs are not specific to a single
+ codeset. */
+
+ LCID lcid;
+ LANGID langid;
+ int primary, sub;
+
+ /* Let the user override the system settings through environment
+ variables, as on POSIX systems. */
+ retval = getenv ("LC_ALL");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv (categoryname);
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv ("LANG");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+
+ /* Use native Win32 API locale ID. */
+ lcid = GetThreadLocale ();
+
+ /* Strip off the sorting rules, keep only the language part. */
+ langid = LANGIDFROMLCID (lcid);
+
+ /* Split into language and territory part. */
+ primary = PRIMARYLANGID (langid);
+ sub = SUBLANGID (langid);
+
+ /* Dispatch on language.
+ See also http://www.unicode.org/unicode/onlinedat/languages.html .
+ For details about languages, see http://www.ethnologue.com/ . */
+ switch (primary)
+ {
+ case LANG_AFRIKAANS: return "af_ZA";
+ case LANG_ALBANIAN: return "sq_AL";
+ case LANG_AMHARIC: return "am_ET";
+ case LANG_ARABIC:
+ switch (sub)
+ {
+ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+ case SUBLANG_ARABIC_OMAN: return "ar_OM";
+ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+ case SUBLANG_ARABIC_UAE: return "ar_AE";
+ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+ case SUBLANG_ARABIC_QATAR: return "ar_QA";
+ }
+ return "ar";
+ case LANG_ARMENIAN: return "hy_AM";
+ case LANG_ASSAMESE: return "as_IN";
+ case LANG_AZERI:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
+ case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
+ case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
+ }
+ return "az";
+ case LANG_BASQUE:
+ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
+ case LANG_BELARUSIAN: return "be_BY";
+ case LANG_BENGALI:
+ switch (sub)
+ {
+ case SUBLANG_BENGALI_INDIA: return "bn_IN";
+ case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
+ }
+ return "bn";
+ case LANG_BULGARIAN: return "bg_BG";
+ case LANG_BURMESE: return "my_MM";
+ case LANG_CAMBODIAN: return "km_KH";
+ case LANG_CATALAN: return "ca_ES";
+ case LANG_CHEROKEE: return "chr_US";
+ case LANG_CHINESE:
+ switch (sub)
+ {
+ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+ case SUBLANG_CHINESE_MACAU: return "zh_MO";
+ }
+ return "zh";
+ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
+ * What used to be called Serbo-Croatian
+ * should really now be two separate
+ * languages because of political reasons.
+ * (Says tml, who knows nothing about Serbian
+ * or Croatian.)
+ * (I can feel those flames coming already.)
+ */
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "hr_HR";
+ case SUBLANG_SERBIAN_LATIN: return "sr_CS";
+ case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
+ }
+ return "hr";
+ case LANG_CZECH: return "cs_CZ";
+ case LANG_DANISH: return "da_DK";
+ case LANG_DIVEHI: return "dv_MV";
+ case LANG_DUTCH:
+ switch (sub)
+ {
+ case SUBLANG_DUTCH: return "nl_NL";
+ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+ }
+ return "nl";
+ case LANG_EDO: return "bin_NG";
+ case LANG_ENGLISH:
+ switch (sub)
+ {
+ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+ * English was the language spoken in England.
+ * Oh well.
+ */
+ case SUBLANG_ENGLISH_US: return "en_US";
+ case SUBLANG_ENGLISH_UK: return "en_GB";
+ case SUBLANG_ENGLISH_AUS: return "en_AU";
+ case SUBLANG_ENGLISH_CAN: return "en_CA";
+ case SUBLANG_ENGLISH_NZ: return "en_NZ";
+ case SUBLANG_ENGLISH_EIRE: return "en_IE";
+ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+ case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
+ case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
+ case SUBLANG_ENGLISH_INDIA: return "en_IN";
+ case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
+ case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
+ }
+ return "en";
+ case LANG_ESTONIAN: return "et_EE";
+ case LANG_FAEROESE: return "fo_FO";
+ case LANG_FARSI: return "fa_IR";
+ case LANG_FINNISH: return "fi_FI";
+ case LANG_FRENCH:
+ switch (sub)
+ {
+ case SUBLANG_FRENCH: return "fr_FR";
+ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+ case SUBLANG_FRENCH_SWISS: return "fr_CH";
+ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+ case SUBLANG_FRENCH_MONACO: return "fr_MC";
+ case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
+ case SUBLANG_FRENCH_REUNION: return "fr_RE";
+ case SUBLANG_FRENCH_CONGO: return "fr_CG";
+ case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
+ case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
+ case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
+ case SUBLANG_FRENCH_MALI: return "fr_ML";
+ case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
+ case SUBLANG_FRENCH_HAITI: return "fr_HT";
+ }
+ return "fr";
+ case LANG_FRISIAN: return "fy_NL";
+ case LANG_FULFULDE:
+ /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
+ return "ff_NG";
+ case LANG_GAELIC:
+ switch (sub)
+ {
+ case 0x01: /* SCOTTISH */ return "gd_GB";
+ case 0x02: /* IRISH */ return "ga_IE";
+ }
+ return "C";
+ case LANG_GALICIAN: return "gl_ES";
+ case LANG_GEORGIAN: return "ka_GE";
+ case LANG_GERMAN:
+ switch (sub)
+ {
+ case SUBLANG_GERMAN: return "de_DE";
+ case SUBLANG_GERMAN_SWISS: return "de_CH";
+ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+ }
+ return "de";
+ case LANG_GREEK: return "el_GR";
+ case LANG_GUARANI: return "gn_PY";
+ case LANG_GUJARATI: return "gu_IN";
+ case LANG_HAUSA: return "ha_NG";
+ case LANG_HAWAIIAN:
+ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
+ return "cpe_US";
+ case LANG_HEBREW: return "he_IL";
+ case LANG_HINDI: return "hi_IN";
+ case LANG_HUNGARIAN: return "hu_HU";
+ case LANG_IBIBIO: return "nic_NG";
+ case LANG_ICELANDIC: return "is_IS";
+ case LANG_IGBO: return "ig_NG";
+ case LANG_INDONESIAN: return "id_ID";
+ case LANG_INUKTITUT: return "iu_CA";
+ case LANG_ITALIAN:
+ switch (sub)
+ {
+ case SUBLANG_ITALIAN: return "it_IT";
+ case SUBLANG_ITALIAN_SWISS: return "it_CH";
+ }
+ return "it";
+ case LANG_JAPANESE: return "ja_JP";
+ case LANG_KANNADA: return "kn_IN";
+ case LANG_KANURI: return "kr_NG";
+ case LANG_KASHMIRI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ks_PK";
+ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+ }
+ return "ks";
+ case LANG_KAZAK: return "kk_KZ";
+ case LANG_KONKANI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "kok_IN";
+ case LANG_KOREAN: return "ko_KR";
+ case LANG_KYRGYZ: return "ky_KG";
+ case LANG_LAO: return "lo_LA";
+ case LANG_LATIN: return "la_VA";
+ case LANG_LATVIAN: return "lv_LV";
+ case LANG_LITHUANIAN: return "lt_LT";
+ case LANG_MACEDONIAN: return "mk_MK";
+ case LANG_MALAY:
+ switch (sub)
+ {
+ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+ }
+ return "ms";
+ case LANG_MALAYALAM: return "ml_IN";
+ case LANG_MALTESE: return "mt_MT";
+ case LANG_MANIPURI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "mni_IN";
+ case LANG_MARATHI: return "mr_IN";
+ case LANG_MONGOLIAN:
+ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
+ case LANG_NEPALI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ne_NP";
+ case SUBLANG_NEPALI_INDIA: return "ne_IN";
+ }
+ return "ne";
+ case LANG_NORWEGIAN:
+ switch (sub)
+ {
+ case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
+ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+ }
+ return "no";
+ case LANG_ORIYA: return "or_IN";
+ case LANG_OROMO: return "om_ET";
+ case LANG_PAPIAMENTU: return "pap_AN";
+ case LANG_PASHTO:
+ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
+ case LANG_POLISH: return "pl_PL";
+ case LANG_PORTUGUESE:
+ switch (sub)
+ {
+ case SUBLANG_PORTUGUESE: return "pt_PT";
+ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+ }
+ return "pt";
+ case LANG_PUNJABI:
+ switch (sub)
+ {
+ case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
+ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
+ }
+ return "pa";
+ case LANG_RHAETO_ROMANCE: return "rm_CH";
+ case LANG_ROMANIAN:
+ switch (sub)
+ {
+ case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
+ case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
+ }
+ return "ro";
+ case LANG_RUSSIAN:
+ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
+ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
+ case LANG_SANSKRIT: return "sa_IN";
+ case LANG_SINDHI:
+ switch (sub)
+ {
+ case SUBLANG_SINDHI_INDIA: return "sd_IN";
+ case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
+ }
+ return "sd";
+ case LANG_SINHALESE: return "si_LK";
+ case LANG_SLOVAK: return "sk_SK";
+ case LANG_SLOVENIAN: return "sl_SI";
+ case LANG_SOMALI: return "so_SO";
+ case LANG_SORBIAN:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "wen_DE";
+ case LANG_SPANISH:
+ switch (sub)
+ {
+ case SUBLANG_SPANISH: return "es_ES";
+ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+ case SUBLANG_SPANISH_MODERN:
+ return "es_ES@modern"; /* not seen on Unix */
+ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+ case SUBLANG_SPANISH_PANAMA: return "es_PA";
+ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+ case SUBLANG_SPANISH_PERU: return "es_PE";
+ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+ case SUBLANG_SPANISH_CHILE: return "es_CL";
+ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+ }
+ return "es";
+ case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
+ case LANG_SWAHILI: return "sw_KE";
+ case LANG_SWEDISH:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "sv_SE";
+ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+ }
+ return "sv";
+ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
+ case LANG_TAGALOG: return "tl_PH";
+ case LANG_TAJIK: return "tg_TJ";
+ case LANG_TAMAZIGHT:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Tamazight locales appear on Unix. */
+ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
+ case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
+ }
+ return "ber_MA";
+ case LANG_TAMIL:
+ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
+ case LANG_TATAR: return "tt_RU";
+ case LANG_TELUGU: return "te_IN";
+ case LANG_THAI: return "th_TH";
+ case LANG_TIBETAN: return "bo_CN";
+ case LANG_TIGRINYA:
+ switch (sub)
+ {
+ case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
+ case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
+ }
+ return "ti";
+ case LANG_TSONGA: return "ts_ZA";
+ case LANG_TSWANA: return "tn_BW";
+ case LANG_TURKISH: return "tr_TR";
+ case LANG_TURKMEN: return "tk_TM";
+ case LANG_UKRAINIAN: return "uk_UA";
+ case LANG_URDU:
+ switch (sub)
+ {
+ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+ case SUBLANG_URDU_INDIA: return "ur_IN";
+ }
+ return "ur";
+ case LANG_UZBEK:
+ switch (sub)
+ {
+ case SUBLANG_UZBEK_LATIN: return "uz_UZ";
+ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
+ }
+ return "uz";
+ case LANG_VENDA: return "ve_ZA";
+ case LANG_VIETNAMESE: return "vi_VN";
+ case LANG_WELSH: return "cy_GB";
+ case LANG_XHOSA: return "xh_ZA";
+ case LANG_YI: return "sit_CN";
+ case LANG_YIDDISH: return "yi_IL";
+ case LANG_YORUBA: return "yo_NG";
+ case LANG_ZULU: return "zu_ZA";
+ default: return "C";
+ }
+
+#endif
+}
diff --git a/intl/log.c b/intl/log.c
new file mode 100644
index 00000000..cb6076e8
--- /dev/null
+++ b/intl/log.c
@@ -0,0 +1,98 @@
+/* Log file output.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print an ASCII string with quotes and escape sequences where needed. */
+static void
+print_escaped (FILE *stream, const char *str)
+{
+ putc ('"', stream);
+ for (; *str != '\0'; str++)
+ if (*str == '\n')
+ {
+ fputs ("\\n\"", stream);
+ if (str[1] == '\0')
+ return;
+ fputs ("\n\"", stream);
+ }
+ else
+ {
+ if (*str == '"' || *str == '\\')
+ putc ('\\', stream);
+ putc (*str, stream);
+ }
+ putc ('"', stream);
+}
+
+/* Add to the log file an entry denoting a failed translation. */
+void
+_nl_log_untranslated (const char *logfilename, const char *domainname,
+ const char *msgid1, const char *msgid2, int plural)
+{
+ static char *last_logfilename = NULL;
+ static FILE *last_logfile = NULL;
+ FILE *logfile;
+
+ /* Can we reuse the last opened logfile? */
+ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+ {
+ /* Close the last used logfile. */
+ if (last_logfilename != NULL)
+ {
+ if (last_logfile != NULL)
+ {
+ fclose (last_logfile);
+ last_logfile = NULL;
+ }
+ free (last_logfilename);
+ last_logfilename = NULL;
+ }
+ /* Open the logfile. */
+ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+ if (last_logfilename == NULL)
+ return;
+ strcpy (last_logfilename, logfilename);
+ last_logfile = fopen (logfilename, "a");
+ if (last_logfile == NULL)
+ return;
+ }
+ logfile = last_logfile;
+
+ fprintf (logfile, "domain ");
+ print_escaped (logfile, domainname);
+ fprintf (logfile, "\nmsgid ");
+ print_escaped (logfile, msgid1);
+ if (plural)
+ {
+ fprintf (logfile, "\nmsgid_plural ");
+ print_escaped (logfile, msgid2);
+ fprintf (logfile, "\nmsgstr[0] \"\"\n");
+ }
+ else
+ fprintf (logfile, "\nmsgstr \"\"\n");
+ putc ('\n', logfile);
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644
index 00000000..e73e00c4
--- /dev/null
+++ b/intl/ngettext.c
@@ -0,0 +1,65 @@
+/* Implementation of ngettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/intl/os2compat.c b/intl/os2compat.c
new file mode 100644
index 00000000..c8dc33e7
--- /dev/null
+++ b/intl/os2compat.c
@@ -0,0 +1,98 @@
+/* OS/2 compatibility functions.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#define OS2_AWARE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+/* A version of getenv() that works from DLLs */
+extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
+
+char *
+_nl_getenv (const char *name)
+{
+ unsigned char *value;
+ if (DosScanEnv (name, &value))
+ return NULL;
+ else
+ return value;
+}
+
+/* A fixed size buffer. */
+char libintl_nl_default_dirname[MAXPATHLEN+1];
+
+char *_nlos2_libdir = NULL;
+char *_nlos2_localealiaspath = NULL;
+char *_nlos2_localedir = NULL;
+
+static __attribute__((constructor)) void
+nlos2_initialize ()
+{
+ char *root = getenv ("UNIXROOT");
+ char *gnulocaledir = getenv ("GNULOCALEDIR");
+
+ _nlos2_libdir = gnulocaledir;
+ if (!_nlos2_libdir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
+ memcpy (_nlos2_libdir, root, sl);
+ memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
+ }
+ else
+ _nlos2_libdir = LIBDIR;
+ }
+
+ _nlos2_localealiaspath = gnulocaledir;
+ if (!_nlos2_localealiaspath)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
+ memcpy (_nlos2_localealiaspath, root, sl);
+ memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
+ }
+ else
+ _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
+ }
+
+ _nlos2_localedir = gnulocaledir;
+ if (!_nlos2_localedir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
+ memcpy (_nlos2_localedir, root, sl);
+ memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
+ }
+ else
+ _nlos2_localedir = LOCALEDIR;
+ }
+
+ if (strlen (_nlos2_localedir) <= MAXPATHLEN)
+ strcpy (libintl_nl_default_dirname, _nlos2_localedir);
+}
diff --git a/intl/os2compat.h b/intl/os2compat.h
new file mode 100644
index 00000000..4f74e8c0
--- /dev/null
+++ b/intl/os2compat.h
@@ -0,0 +1,46 @@
+/* OS/2 compatibility defines.
+ This file is intended to be included from config.h
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* When included from os2compat.h we need all the original definitions */
+#ifndef OS2_AWARE
+
+#undef LIBDIR
+#define LIBDIR _nlos2_libdir
+extern char *_nlos2_libdir;
+
+#undef LOCALEDIR
+#define LOCALEDIR _nlos2_localedir
+extern char *_nlos2_localedir;
+
+#undef LOCALE_ALIAS_PATH
+#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
+extern char *_nlos2_localealiaspath;
+
+#endif
+
+#undef HAVE_STRCASECMP
+#define HAVE_STRCASECMP 1
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+/* We have our own getenv() which works even if library is compiled as DLL */
+#define getenv _nl_getenv
+
+/* Older versions of gettext used -1 as the value of LC_MESSAGES */
+#define LC_MESSAGES_COMPAT (-1)
diff --git a/intl/osdep.c b/intl/osdep.c
new file mode 100644
index 00000000..b3725983
--- /dev/null
+++ b/intl/osdep.c
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#if defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning. */
+typedef int dummy;
+#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
new file mode 100644
index 00000000..8c04e642
--- /dev/null
+++ b/intl/plural-exp.c
@@ -0,0 +1,154 @@
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+ form determination. It represents the expression "n != 1". */
+static const struct expression plvar =
+{
+ .nargs = 0,
+ .operation = var,
+};
+static const struct expression plone =
+{
+ .nargs = 0,
+ .operation = num,
+ .val =
+ {
+ .num = 1
+ }
+};
+struct expression GERMANIC_PLURAL =
+{
+ .nargs = 2,
+ .operation = not_equal,
+ .val =
+ {
+ .args =
+ {
+ [0] = (struct expression *) &plvar,
+ [1] = (struct expression *) &plone
+ }
+ }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+ Initialization at run-time. */
+
+static struct expression plvar;
+static struct expression plone;
+struct expression GERMANIC_PLURAL;
+
+static void
+init_germanic_plural ()
+{
+ if (plone.val.num == 0)
+ {
+ plvar.nargs = 0;
+ plvar.operation = var;
+
+ plone.nargs = 0;
+ plone.operation = num;
+ plone.val.num = 1;
+
+ GERMANIC_PLURAL.nargs = 2;
+ GERMANIC_PLURAL.operation = not_equal;
+ GERMANIC_PLURAL.val.args[0] = &plvar;
+ GERMANIC_PLURAL.val.args[1] = &plone;
+ }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+void
+internal_function
+EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp,
+ unsigned long int *npluralsp)
+{
+ if (nullentry != NULL)
+ {
+ const char *plural;
+ const char *nplurals;
+
+ plural = strstr (nullentry, "plural=");
+ nplurals = strstr (nullentry, "nplurals=");
+ if (plural == NULL || nplurals == NULL)
+ goto no_plural;
+ else
+ {
+ char *endp;
+ unsigned long int n;
+ struct parse_args args;
+
+ /* First get the number. */
+ nplurals += 9;
+ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+ ++nplurals;
+ if (!(*nplurals >= '0' && *nplurals <= '9'))
+ goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+ n = strtoul (nplurals, &endp, 10);
+#else
+ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+ n = n * 10 + (*endp - '0');
+#endif
+ if (nplurals == endp)
+ goto no_plural;
+ *npluralsp = n;
+
+ /* Due to the restrictions bison imposes onto the interface of the
+ scanner function we have to put the input string and the result
+ passed up from the parser into the same structure which address
+ is passed down to the parser. */
+ plural += 7;
+ args.cp = plural;
+ if (PLURAL_PARSE (&args) != 0)
+ goto no_plural;
+ *pluralp = args.res;
+ }
+ }
+ else
+ {
+ /* By default we are using the Germanic form: singular form only
+ for `one', the plural form otherwise. Yes, this is also what
+ English is using since English is a Germanic language. */
+ no_plural:
+ INIT_GERMANIC_PLURAL ();
+ *pluralp = &GERMANIC_PLURAL;
+ *npluralsp = 2;
+ }
+}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
new file mode 100644
index 00000000..49e2c5bf
--- /dev/null
+++ b/intl/plural-exp.h
@@ -0,0 +1,118 @@
+/* Expression parsing and evaluation for plural form selection.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* This is the representation of the expressions to determine the
+ plural form. */
+struct expression
+{
+ int nargs; /* Number of arguments. */
+ enum operator
+ {
+ /* Without arguments: */
+ var, /* The variable "n". */
+ num, /* Decimal number. */
+ /* Unary operators: */
+ lnot, /* Logical NOT. */
+ /* Binary operators: */
+ mult, /* Multiplication. */
+ divide, /* Division. */
+ module, /* Modulo operation. */
+ plus, /* Addition. */
+ minus, /* Subtraction. */
+ less_than, /* Comparison. */
+ greater_than, /* Comparison. */
+ less_or_equal, /* Comparison. */
+ greater_or_equal, /* Comparison. */
+ equal, /* Comparison for equality. */
+ not_equal, /* Comparison for inequality. */
+ land, /* Logical AND. */
+ lor, /* Logical OR. */
+ /* Ternary operators: */
+ qmop /* Question mark operator. */
+ } operation;
+ union
+ {
+ unsigned long int num; /* Number value for `num'. */
+ struct expression *args[3]; /* Up to three arguments. */
+ } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+ the result in a thread-safe way. */
+struct parse_args
+{
+ const char *cp;
+ struct expression *res;
+};
+
+
+/* Names for the libintl functions are a problem. This source code is used
+ 1. in the GNU C Library library,
+ 2. in the GNU libintl library,
+ 3. in the GNU gettext tools.
+ The function names in each situation must be different, to allow for
+ binary incompatible changes in 'struct expression'. Furthermore,
+ 1. in the GNU C Library library, the names have a __ prefix,
+ 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
+ must follow ANSI C and not start with __.
+ So we have to distinguish the three cases. */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+# define PLURAL_PARSE __gettextparse
+# define GERMANIC_PLURAL __gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
+#elif defined (IN_LIBINTL)
+# define FREE_EXPRESSION libintl_gettext_free_exp
+# define PLURAL_PARSE libintl_gettextparse
+# define GERMANIC_PLURAL libintl_gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
+#else
+# define FREE_EXPRESSION free_plural_expression
+# define PLURAL_PARSE parse_plural_expression
+# define GERMANIC_PLURAL germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
+#endif
+
+extern void FREE_EXPRESSION (struct expression *exp)
+ internal_function;
+extern int PLURAL_PARSE (void *arg);
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
+ struct expression **pluralp,
+ unsigned long int *npluralsp)
+ internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval (struct expression *pexp,
+ unsigned long int n);
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644
index 00000000..addededf
--- /dev/null
+++ b/intl/plural.c
@@ -0,0 +1,1583 @@
+/* A Bison parser, made by GNU Bison 1.875a. */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+ 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
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* Written by Richard Stallman by simplifying the original so called
+ ``semantic'' parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+/* If NAME_PREFIX is specified substitute the variables and functions
+ names. */
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ EQUOP2 = 258,
+ CMPOP2 = 259,
+ ADDOP2 = 260,
+ MULOP2 = 261,
+ NUMBER = 262
+ };
+#endif
+#define EQUOP2 258
+#define CMPOP2 259
+#define ADDOP2 260
+#define MULOP2 261
+#define NUMBER 262
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 49 "plural.y"
+typedef union YYSTYPE {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+} YYSTYPE;
+/* Line 191 of yacc.c. */
+#line 151 "plural.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+#line 55 "plural.y"
+
+/* Prototypes for local functions. */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (int nargs, enum operator op, struct expression * const *args)
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum operator op, struct expression *right)
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum operator op, struct expression *left, struct expression *right)
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum operator op, struct expression *bexp,
+ struct expression *tbranch, struct expression *fbranch)
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+
+
+/* Line 214 of yacc.c. */
+#line 237 "plural.c"
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+ typedef signed char yysigned_char;
+#else
+ typedef short yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 9
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 54
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 16
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 3
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 13
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 27
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 262
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const unsigned char yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
+ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 6, 7,
+ 8, 9, 11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const unsigned char yyprhs[] =
+{
+ 0, 0, 3, 5, 11, 15, 19, 23, 27, 31,
+ 35, 38, 40, 42
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yysigned_char yyrhs[] =
+{
+ 17, 0, -1, 18, -1, 18, 3, 18, 12, 18,
+ -1, 18, 4, 18, -1, 18, 5, 18, -1, 18,
+ 6, 18, -1, 18, 7, 18, -1, 18, 8, 18,
+ -1, 18, 9, 18, -1, 10, 18, -1, 13, -1,
+ 11, -1, 14, 18, 15, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const unsigned char yyrline[] =
+{
+ 0, 150, 150, 158, 162, 166, 170, 174, 178, 182,
+ 186, 190, 194, 199
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+ "$accept", "start", "exp", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const unsigned short yytoknum[] =
+{
+ 0, 256, 257, 63, 124, 38, 258, 259, 260, 261,
+ 33, 262, 58, 110, 40, 41
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const unsigned char yyr1[] =
+{
+ 0, 16, 17, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const unsigned char yyr2[] =
+{
+ 0, 2, 1, 5, 3, 3, 3, 3, 3, 3,
+ 2, 1, 1, 3
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const unsigned char yydefact[] =
+{
+ 0, 0, 12, 11, 0, 0, 2, 10, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 13, 0, 4,
+ 5, 6, 7, 8, 9, 0, 3
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yysigned_char yydefgoto[] =
+{
+ -1, 5, 6
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -10
+static const yysigned_char yypact[] =
+{
+ -9, -9, -10, -10, -9, 8, 36, -10, 13, -10,
+ -9, -9, -9, -9, -9, -9, -9, -10, 26, 41,
+ 45, 18, -2, 14, -10, -9, 36
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yysigned_char yypgoto[] =
+{
+ -10, -10, -1
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -1
+static const unsigned char yytable[] =
+{
+ 7, 1, 2, 8, 3, 4, 15, 16, 9, 18,
+ 19, 20, 21, 22, 23, 24, 10, 11, 12, 13,
+ 14, 15, 16, 16, 26, 14, 15, 16, 17, 10,
+ 11, 12, 13, 14, 15, 16, 0, 0, 25, 10,
+ 11, 12, 13, 14, 15, 16, 12, 13, 14, 15,
+ 16, 13, 14, 15, 16
+};
+
+static const yysigned_char yycheck[] =
+{
+ 1, 10, 11, 4, 13, 14, 8, 9, 0, 10,
+ 11, 12, 13, 14, 15, 16, 3, 4, 5, 6,
+ 7, 8, 9, 9, 25, 7, 8, 9, 15, 3,
+ 4, 5, 6, 7, 8, 9, -1, -1, 12, 3,
+ 4, 5, 6, 7, 8, 9, 5, 6, 7, 8,
+ 9, 6, 7, 8, 9
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const unsigned char yystos[] =
+{
+ 0, 10, 11, 13, 14, 17, 18, 18, 18, 0,
+ 3, 4, 5, 6, 7, 8, 9, 15, 18, 18,
+ 18, 18, 18, 18, 18, 12, 18
+};
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrlab1
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up");\
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.first_line = Rhs[1].first_line; \
+ Current.first_column = Rhs[1].first_column; \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval)
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+
+# define YYDSYMPRINT(Args) \
+do { \
+ if (yydebug) \
+ yysymprint Args; \
+} while (0)
+
+# define YYDSYMPRINTF(Title, Token, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yysymprint (stderr, \
+ Token, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (cinluded). |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short *bottom, short *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ short *bottom;
+ short *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (/* Nothing. */; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+ int yyrule;
+#endif
+{
+ int yyi;
+ unsigned int yylineno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+ yyrule - 1, yylineno);
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+ YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (Rule); \
+} while (0)
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YYDSYMPRINT(Args)
+# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined (__GLIBC__) && defined (_STRING_H)
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ register const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+# endif
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+#endif /* !YYERROR_VERBOSE */
+
+
+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvaluep;
+
+ if (yytype < YYNTOKENS)
+ {
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+# ifdef YYPRINT
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+ }
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+ YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yydestruct (int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yytype, yyvaluep)
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvaluep;
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM);
+# else
+int yyparse ();
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+ /* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ short yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK (yyvsp--, yyssp--)
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. so pushing a state here evens the stacks.
+ */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+#line 151 "plural.y"
+ {
+ if (yyvsp[0].exp == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = yyvsp[0].exp;
+ }
+ break;
+
+ case 3:
+#line 159 "plural.y"
+ {
+ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 4:
+#line 163 "plural.y"
+ {
+ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 5:
+#line 167 "plural.y"
+ {
+ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 6:
+#line 171 "plural.y"
+ {
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 7:
+#line 175 "plural.y"
+ {
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 8:
+#line 179 "plural.y"
+ {
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 9:
+#line 183 "plural.y"
+ {
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+
+ case 10:
+#line 187 "plural.y"
+ {
+ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+ }
+ break;
+
+ case 11:
+#line 191 "plural.y"
+ {
+ yyval.exp = new_exp_0 (var);
+ }
+ break;
+
+ case 12:
+#line 195 "plural.y"
+ {
+ if ((yyval.exp = new_exp_0 (num)) != NULL)
+ yyval.exp->val.num = yyvsp[0].num;
+ }
+ break;
+
+ case 13:
+#line 200 "plural.y"
+ {
+ yyval.exp = yyvsp[-1].exp;
+ }
+ break;
+
+
+ }
+
+/* Line 999 of yacc.c. */
+#line 1212 "plural.c"
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+
+
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (YYPACT_NINF < yyn && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ int yytype = YYTRANSLATE (yychar);
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("syntax error, unexpected ") + 1;
+ yysize += yystrlen (yytname[yytype]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[yytype]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("syntax error; also virtual memory exhausted");
+ }
+ else
+#endif /* YYERROR_VERBOSE */
+ yyerror ("syntax error");
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ {
+ /* Pop the error token. */
+ YYPOPSTACK;
+ /* Pop the rest of the stack. */
+ while (yyss < yyssp)
+ {
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[*yyssp], yyvsp);
+ YYPOPSTACK;
+ }
+ YYABORT;
+ }
+
+ YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+ yydestruct (yytoken, &yylval);
+ yychar = YYEMPTY;
+
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action. |
+`----------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ yydestruct (yystos[yystate], yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
+
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*----------------------------------------------.
+| yyoverflowlab -- parser overflow comes here. |
+`----------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+
+
+#line 205 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
+
diff --git a/intl/plural.y b/intl/plural.y
new file mode 100644
index 00000000..4d33bd7c
--- /dev/null
+++ b/intl/plural.y
@@ -0,0 +1,381 @@
+%{
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+%}
+%pure_parser
+%expect 7
+
+%union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions. */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (int nargs, enum operator op, struct expression * const *args)
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum operator op, struct expression *right)
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum operator op, struct expression *left, struct expression *right)
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum operator op, struct expression *bexp,
+ struct expression *tbranch, struct expression *fbranch)
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
+ There is no unary minus and no bitwise operators.
+ Operators with the same syntactic behaviour have been merged into a single
+ token, to save space in the array generated by bison. */
+%right '?' /* ? */
+%left '|' /* || */
+%left '&' /* && */
+%left EQUOP2 /* == != */
+%left CMPOP2 /* < > <= >= */
+%left ADDOP2 /* + - */
+%left MULOP2 /* * / % */
+%right '!' /* ! */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start: exp
+ {
+ if ($1 == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = $1;
+ }
+ ;
+
+exp: exp '?' exp ':' exp
+ {
+ $$ = new_exp_3 (qmop, $1, $3, $5);
+ }
+ | exp '|' exp
+ {
+ $$ = new_exp_2 (lor, $1, $3);
+ }
+ | exp '&' exp
+ {
+ $$ = new_exp_2 (land, $1, $3);
+ }
+ | exp EQUOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp CMPOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp ADDOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp MULOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | '!' exp
+ {
+ $$ = new_exp_1 (lnot, $2);
+ }
+ | 'n'
+ {
+ $$ = new_exp_0 (var);
+ }
+ | NUMBER
+ {
+ if (($$ = new_exp_0 (num)) != NULL)
+ $$->val.num = $1;
+ }
+ | '(' exp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/intl/printf-args.c b/intl/printf-args.c
new file mode 100644
index 00000000..f6f3219e
--- /dev/null
+++ b/intl/printf-args.c
@@ -0,0 +1,119 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "printf-args.h"
+
+#ifdef STATIC
+STATIC
+#endif
+int
+printf_fetchargs (va_list args, arguments *a)
+{
+ size_t i;
+ argument *ap;
+
+ for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+ switch (ap->type)
+ {
+ case TYPE_SCHAR:
+ ap->a.a_schar = va_arg (args, /*signed char*/ int);
+ break;
+ case TYPE_UCHAR:
+ ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+ break;
+ case TYPE_SHORT:
+ ap->a.a_short = va_arg (args, /*short*/ int);
+ break;
+ case TYPE_USHORT:
+ ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+ break;
+ case TYPE_INT:
+ ap->a.a_int = va_arg (args, int);
+ break;
+ case TYPE_UINT:
+ ap->a.a_uint = va_arg (args, unsigned int);
+ break;
+ case TYPE_LONGINT:
+ ap->a.a_longint = va_arg (args, long int);
+ break;
+ case TYPE_ULONGINT:
+ ap->a.a_ulongint = va_arg (args, unsigned long int);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ ap->a.a_longlongint = va_arg (args, long long int);
+ break;
+ case TYPE_ULONGLONGINT:
+ ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+ break;
+#endif
+ case TYPE_DOUBLE:
+ ap->a.a_double = va_arg (args, double);
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ ap->a.a_longdouble = va_arg (args, long double);
+ break;
+#endif
+ case TYPE_CHAR:
+ ap->a.a_char = va_arg (args, int);
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ ap->a.a_wide_char = va_arg (args, wint_t);
+ break;
+#endif
+ case TYPE_STRING:
+ ap->a.a_string = va_arg (args, const char *);
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ ap->a.a_wide_string = va_arg (args, const wchar_t *);
+ break;
+#endif
+ case TYPE_POINTER:
+ ap->a.a_pointer = va_arg (args, void *);
+ break;
+ case TYPE_COUNT_SCHAR_POINTER:
+ ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ ap->a.a_count_short_pointer = va_arg (args, short *);
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ ap->a.a_count_int_pointer = va_arg (args, int *);
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ ap->a.a_count_longint_pointer = va_arg (args, long int *);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+ break;
+#endif
+ default:
+ /* Unknown type. */
+ return -1;
+ }
+ return 0;
+}
diff --git a/intl/printf-args.h b/intl/printf-args.h
new file mode 100644
index 00000000..f11e64c0
--- /dev/null
+++ b/intl/printf-args.h
@@ -0,0 +1,137 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get wchar_t. */
+#ifdef HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t. */
+#ifdef HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list. */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+ TYPE_NONE,
+ TYPE_SCHAR,
+ TYPE_UCHAR,
+ TYPE_SHORT,
+ TYPE_USHORT,
+ TYPE_INT,
+ TYPE_UINT,
+ TYPE_LONGINT,
+ TYPE_ULONGINT,
+#ifdef HAVE_LONG_LONG
+ TYPE_LONGLONGINT,
+ TYPE_ULONGLONGINT,
+#endif
+ TYPE_DOUBLE,
+#ifdef HAVE_LONG_DOUBLE
+ TYPE_LONGDOUBLE,
+#endif
+ TYPE_CHAR,
+#ifdef HAVE_WINT_T
+ TYPE_WIDE_CHAR,
+#endif
+ TYPE_STRING,
+#ifdef HAVE_WCHAR_T
+ TYPE_WIDE_STRING,
+#endif
+ TYPE_POINTER,
+ TYPE_COUNT_SCHAR_POINTER,
+ TYPE_COUNT_SHORT_POINTER,
+ TYPE_COUNT_INT_POINTER,
+ TYPE_COUNT_LONGINT_POINTER
+#ifdef HAVE_LONG_LONG
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+ arg_type type;
+ union
+ {
+ signed char a_schar;
+ unsigned char a_uchar;
+ short a_short;
+ unsigned short a_ushort;
+ int a_int;
+ unsigned int a_uint;
+ long int a_longint;
+ unsigned long int a_ulongint;
+#ifdef HAVE_LONG_LONG
+ long long int a_longlongint;
+ unsigned long long int a_ulonglongint;
+#endif
+ float a_float;
+ double a_double;
+#ifdef HAVE_LONG_DOUBLE
+ long double a_longdouble;
+#endif
+ int a_char;
+#ifdef HAVE_WINT_T
+ wint_t a_wide_char;
+#endif
+ const char* a_string;
+#ifdef HAVE_WCHAR_T
+ const wchar_t* a_wide_string;
+#endif
+ void* a_pointer;
+ signed char * a_count_schar_pointer;
+ short * a_count_short_pointer;
+ int * a_count_int_pointer;
+ long int * a_count_longint_pointer;
+#ifdef HAVE_LONG_LONG
+ long long int * a_count_longlongint_pointer;
+#endif
+ }
+ a;
+}
+argument;
+
+typedef struct
+{
+ size_t count;
+ argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_fetchargs (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
new file mode 100644
index 00000000..d19f903d
--- /dev/null
+++ b/intl/printf-parse.c
@@ -0,0 +1,537 @@
+/* Formatted output to strings.
+ Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Get size_t, NULL. */
+#include <stddef.h>
+
+/* Get intmax_t. */
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+
+/* malloc(), realloc(), free(). */
+#include <stdlib.h>
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#if WIDE_CHAR_VERSION
+# define PRINTF_PARSE wprintf_parse
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+#else
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+ const CHAR_T *cp = format; /* pointer into format */
+ size_t arg_posn = 0; /* number of regular arguments consumed */
+ size_t d_allocated; /* allocated elements of d->dir */
+ size_t a_allocated; /* allocated elements of a->arg */
+ size_t max_width_length = 0;
+ size_t max_precision_length = 0;
+
+ d->count = 0;
+ d_allocated = 1;
+ d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
+ if (d->dir == NULL)
+ /* Out of memory. */
+ return -1;
+
+ a->count = 0;
+ a_allocated = 0;
+ a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+ { \
+ size_t n = (_index_); \
+ if (n >= a_allocated) \
+ { \
+ size_t memory_size; \
+ argument *memory; \
+ \
+ a_allocated = xtimes (a_allocated, 2); \
+ if (a_allocated <= n) \
+ a_allocated = xsum (n, 1); \
+ memory_size = xtimes (a_allocated, sizeof (argument)); \
+ if (size_overflow_p (memory_size)) \
+ /* Overflow, would lead to out of memory. */ \
+ goto error; \
+ memory = (a->arg \
+ ? realloc (a->arg, memory_size) \
+ : malloc (memory_size)); \
+ if (memory == NULL) \
+ /* Out of memory. */ \
+ goto error; \
+ a->arg = memory; \
+ } \
+ while (a->count <= n) \
+ a->arg[a->count++].type = TYPE_NONE; \
+ if (a->arg[n].type == TYPE_NONE) \
+ a->arg[n].type = (_type_); \
+ else if (a->arg[n].type != (_type_)) \
+ /* Ambiguous type for positional argument. */ \
+ goto error; \
+ }
+
+ while (*cp != '\0')
+ {
+ CHAR_T c = *cp++;
+ if (c == '%')
+ {
+ size_t arg_index = ARG_NONE;
+ DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
+
+ /* Initialize the next directive. */
+ dp->dir_start = cp - 1;
+ dp->flags = 0;
+ dp->width_start = NULL;
+ dp->width_end = NULL;
+ dp->width_arg_index = ARG_NONE;
+ dp->precision_start = NULL;
+ dp->precision_end = NULL;
+ dp->precision_arg_index = ARG_NONE;
+ dp->arg_index = ARG_NONE;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+
+ /* Read the flags. */
+ for (;;)
+ {
+ if (*cp == '\'')
+ {
+ dp->flags |= FLAG_GROUP;
+ cp++;
+ }
+ else if (*cp == '-')
+ {
+ dp->flags |= FLAG_LEFT;
+ cp++;
+ }
+ else if (*cp == '+')
+ {
+ dp->flags |= FLAG_SHOWSIGN;
+ cp++;
+ }
+ else if (*cp == ' ')
+ {
+ dp->flags |= FLAG_SPACE;
+ cp++;
+ }
+ else if (*cp == '#')
+ {
+ dp->flags |= FLAG_ALT;
+ cp++;
+ }
+ else if (*cp == '0')
+ {
+ dp->flags |= FLAG_ZERO;
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Parse the field width. */
+ if (*cp == '*')
+ {
+ dp->width_start = cp;
+ cp++;
+ dp->width_end = cp;
+ if (max_width_length < 1)
+ max_width_length = 1;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ dp->width_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->width_arg_index == ARG_NONE)
+ {
+ dp->width_arg_index = arg_posn++;
+ if (dp->width_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+ }
+ else if (*cp >= '0' && *cp <= '9')
+ {
+ size_t width_length;
+
+ dp->width_start = cp;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->width_end = cp;
+ width_length = dp->width_end - dp->width_start;
+ if (max_width_length < width_length)
+ max_width_length = width_length;
+ }
+
+ /* Parse the precision. */
+ if (*cp == '.')
+ {
+ cp++;
+ if (*cp == '*')
+ {
+ dp->precision_start = cp - 1;
+ cp++;
+ dp->precision_end = cp;
+ if (max_precision_length < 2)
+ max_precision_length = 2;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory
+ later. */
+ goto error;
+ dp->precision_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->precision_arg_index == ARG_NONE)
+ {
+ dp->precision_arg_index = arg_posn++;
+ if (dp->precision_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+ }
+ else
+ {
+ size_t precision_length;
+
+ dp->precision_start = cp - 1;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->precision_end = cp;
+ precision_length = dp->precision_end - dp->precision_start;
+ if (max_precision_length < precision_length)
+ max_precision_length = precision_length;
+ }
+ }
+
+ {
+ arg_type type;
+
+ /* Parse argument type/size specifiers. */
+ {
+ int flags = 0;
+
+ for (;;)
+ {
+ if (*cp == 'h')
+ {
+ flags |= (1 << (flags & 1));
+ cp++;
+ }
+ else if (*cp == 'L')
+ {
+ flags |= 4;
+ cp++;
+ }
+ else if (*cp == 'l')
+ {
+ flags += 8;
+ cp++;
+ }
+#ifdef HAVE_INTMAX_T
+ else if (*cp == 'j')
+ {
+ if (sizeof (intmax_t) > sizeof (long))
+ {
+ /* intmax_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (intmax_t) > sizeof (int))
+ {
+ /* intmax_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+#endif
+ else if (*cp == 'z' || *cp == 'Z')
+ {
+ /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+ because the warning facility in gcc-2.95.2 understands
+ only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
+ if (sizeof (size_t) > sizeof (long))
+ {
+ /* size_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (size_t) > sizeof (int))
+ {
+ /* size_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else if (*cp == 't')
+ {
+ if (sizeof (ptrdiff_t) > sizeof (long))
+ {
+ /* ptrdiff_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (ptrdiff_t) > sizeof (int))
+ {
+ /* ptrdiff_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Read the conversion character. */
+ c = *cp++;
+ switch (c)
+ {
+ case 'd': case 'i':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_LONGINT;
+ else if (flags & 2)
+ type = TYPE_SCHAR;
+ else if (flags & 1)
+ type = TYPE_SHORT;
+ else
+ type = TYPE_INT;
+ break;
+ case 'o': case 'u': case 'x': case 'X':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_ULONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_ULONGINT;
+ else if (flags & 2)
+ type = TYPE_UCHAR;
+ else if (flags & 1)
+ type = TYPE_USHORT;
+ else
+ type = TYPE_UINT;
+ break;
+ case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+#ifdef HAVE_LONG_DOUBLE
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGDOUBLE;
+ else
+#endif
+ type = TYPE_DOUBLE;
+ break;
+ case 'c':
+ if (flags >= 8)
+#ifdef HAVE_WINT_T
+ type = TYPE_WIDE_CHAR;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_CHAR;
+ break;
+#ifdef HAVE_WINT_T
+ case 'C':
+ type = TYPE_WIDE_CHAR;
+ c = 'c';
+ break;
+#endif
+ case 's':
+ if (flags >= 8)
+#ifdef HAVE_WCHAR_T
+ type = TYPE_WIDE_STRING;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_STRING;
+ break;
+#ifdef HAVE_WCHAR_T
+ case 'S':
+ type = TYPE_WIDE_STRING;
+ c = 's';
+ break;
+#endif
+ case 'p':
+ type = TYPE_POINTER;
+ break;
+ case 'n':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_COUNT_LONGLONGINT_POINTER;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_COUNT_LONGINT_POINTER;
+ else if (flags & 2)
+ type = TYPE_COUNT_SCHAR_POINTER;
+ else if (flags & 1)
+ type = TYPE_COUNT_SHORT_POINTER;
+ else
+ type = TYPE_COUNT_INT_POINTER;
+ break;
+ case '%':
+ type = TYPE_NONE;
+ break;
+ default:
+ /* Unknown conversion character. */
+ goto error;
+ }
+ }
+
+ if (type != TYPE_NONE)
+ {
+ dp->arg_index = arg_index;
+ if (dp->arg_index == ARG_NONE)
+ {
+ dp->arg_index = arg_posn++;
+ if (dp->arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->arg_index, type);
+ }
+ dp->conversion = c;
+ dp->dir_end = cp;
+ }
+
+ d->count++;
+ if (d->count >= d_allocated)
+ {
+ size_t memory_size;
+ DIRECTIVE *memory;
+
+ d_allocated = xtimes (d_allocated, 2);
+ memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+ if (size_overflow_p (memory_size))
+ /* Overflow, would lead to out of memory. */
+ goto error;
+ memory = realloc (d->dir, memory_size);
+ if (memory == NULL)
+ /* Out of memory. */
+ goto error;
+ d->dir = memory;
+ }
+ }
+ }
+ d->dir[d->count].dir_start = cp;
+
+ d->max_width_length = max_width_length;
+ d->max_precision_length = max_precision_length;
+ return 0;
+
+error:
+ if (a->arg)
+ free (a->arg);
+ if (d->dir)
+ free (d->dir);
+ return -1;
+}
+
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef PRINTF_PARSE
diff --git a/intl/printf-parse.h b/intl/printf-parse.h
new file mode 100644
index 00000000..8aec50e2
--- /dev/null
+++ b/intl/printf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const char* dir_start;
+ const char* dir_end;
+ int flags;
+ const char* width_start;
+ const char* width_end;
+ size_t width_arg_index;
+ const char* precision_start;
+ const char* precision_end;
+ size_t precision_arg_index;
+ char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ char_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+char_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/intl/printf.c b/intl/printf.c
new file mode 100644
index 00000000..878646c2
--- /dev/null
+++ b/intl/printf.c
@@ -0,0 +1,371 @@
+/* Formatted output to strings, using POSIX/XSI format strings with positions.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdio.h>
+
+#if !HAVE_POSIX_PRINTF
+
+#include <stdlib.h>
+#include <string.h>
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+#define STATIC static
+
+/* Define auxiliary functions declared in "printf-args.h". */
+#include "printf-args.c"
+
+/* Define auxiliary functions declared in "printf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnprintf libintl_vasnprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnprintf libintl_asnprintf
+#include "asnprintf.c"
+#endif
+
+DLL_EXPORTED
+int
+libintl_vfprintf (FILE *stream, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vfprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ if (fwrite (result, 1, length, stream) == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fprintf (FILE *stream, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vprintf (const char *format, va_list args)
+{
+ return libintl_vfprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_printf (const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vsprintf (char *resultbuf, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vsprintf (resultbuf, format, args);
+ else
+ {
+ size_t length = (size_t) ~0 / (4 * sizeof (char));
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_sprintf (char *resultbuf, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsprintf (resultbuf, format, args);
+ va_end (args);
+ return retval;
+}
+
+#if HAVE_SNPRINTF
+
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define system_vsnprintf _vsnprintf
+# else
+ /* Unix. */
+# define system_vsnprintf vsnprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return system_vsnprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, maxlength - 1);
+ resultbuf[maxlength - 1] = '\0';
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsnprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_ASPRINTF
+
+DLL_EXPORTED
+int
+libintl_vasprintf (char **resultp, const char *format, va_list args)
+{
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ if (result == NULL)
+ return -1;
+ *resultp = result;
+ return length;
+}
+
+DLL_EXPORTED
+int
+libintl_asprintf (char **resultp, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vasprintf (resultp, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_FWPRINTF
+
+#include <wchar.h>
+
+#define WIDE_CHAR_VERSION 1
+
+/* Define auxiliary functions declared in "wprintf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnwprintf libintl_vasnwprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnwprintf libintl_asnwprintf
+#include "asnprintf.c"
+#endif
+
+# if HAVE_DECL__SNWPRINTF
+ /* Windows. */
+# define system_vswprintf _vsnwprintf
+# else
+ /* Unix. */
+# define system_vswprintf vswprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return vfwprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ size_t i;
+ for (i = 0; i < length; i++)
+ if (fputwc (result[i], stream) == WEOF)
+ break;
+ if (i == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfwprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vwprintf (const wchar_t *format, va_list args)
+{
+ return libintl_vfwprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_wprintf (const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vwprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return system_vswprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
+ resultbuf[maxlength - 1] = 0;
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vswprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#endif
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
new file mode 100644
index 00000000..167374e3
--- /dev/null
+++ b/intl/ref-add.sin
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ ta
+ :a
+ s/ @PACKAGE@ / @PACKAGE@ /
+ tb
+ s/ $/ @PACKAGE@ /
+ :b
+ s/^/# Packages using this file:/
+}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
new file mode 100644
index 00000000..613cf37f
--- /dev/null
+++ b/intl/ref-del.sin
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+ s/# Packages using this file://
+ s/ @PACKAGE@ / /
+ s/^/# Packages using this file:/
+}
diff --git a/intl/relocatable.c b/intl/relocatable.c
new file mode 100644
index 00000000..bf7c7085
--- /dev/null
+++ b/intl/relocatable.c
@@ -0,0 +1,449 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* Specification. */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xalloc.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'. */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILESYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix. */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+ const char *curr_prefix_arg)
+{
+ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+ /* Optimization: if orig_prefix and curr_prefix are equal, the
+ relocation is a nop. */
+ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+ {
+ /* Duplicate the argument strings. */
+ char *memory;
+
+ orig_prefix_len = strlen (orig_prefix_arg);
+ curr_prefix_len = strlen (curr_prefix_arg);
+ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (memory != NULL)
+#endif
+ {
+ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+ orig_prefix = memory;
+ memory += orig_prefix_len + 1;
+ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+ curr_prefix = memory;
+ return;
+ }
+ }
+ orig_prefix = NULL;
+ curr_prefix = NULL;
+ /* Don't worry about wasted memory here - this function is usually only
+ called once. */
+}
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+ /* Now notify all dependent libraries. */
+#if DEPENDS_ON_LIBCHARSET
+ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname)
+{
+ const char *curr_installdir;
+ const char *rel_installdir;
+
+ if (curr_pathname == NULL)
+ return NULL;
+
+ /* Determine the relative installation directory, relative to the prefix.
+ This is simply the difference between orig_installprefix and
+ orig_installdir. */
+ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+ != 0)
+ /* Shouldn't happen - nothing should be installed outside $(prefix). */
+ return NULL;
+ rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+ /* Determine the current installation directory. */
+ {
+ const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
+ const char *p = curr_pathname + strlen (curr_pathname);
+ char *q;
+
+ while (p > p_base)
+ {
+ p--;
+ if (ISSLASH (*p))
+ break;
+ }
+
+ q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+ if (q == NULL)
+ return NULL;
+#endif
+ memcpy (q, curr_pathname, p - curr_pathname);
+ q[p - curr_pathname] = '\0';
+ curr_installdir = q;
+ }
+
+ /* Compute the current installation prefix by removing the trailing
+ rel_installdir from it. */
+ {
+ const char *rp = rel_installdir + strlen (rel_installdir);
+ const char *cp = curr_installdir + strlen (curr_installdir);
+ const char *cp_base =
+ curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
+
+ while (rp > rel_installdir && cp > cp_base)
+ {
+ bool same = false;
+ const char *rpi = rp;
+ const char *cpi = cp;
+
+ while (rpi > rel_installdir && cpi > cp_base)
+ {
+ rpi--;
+ cpi--;
+ if (ISSLASH (*rpi) || ISSLASH (*cpi))
+ {
+ if (ISSLASH (*rpi) && ISSLASH (*cpi))
+ same = true;
+ break;
+ }
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS - case insignificant filesystem */
+ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+ break;
+#else
+ if (*rpi != *cpi)
+ break;
+#endif
+ }
+ if (!same)
+ break;
+ /* The last pathname component was the same. opi and cpi now point
+ to the slash before it. */
+ rp = rpi;
+ cp = cpi;
+ }
+
+ if (rp > rel_installdir)
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ return NULL;
+
+ {
+ size_t curr_prefix_len = cp - curr_installdir;
+ char *curr_prefix;
+
+ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (curr_prefix == NULL)
+ return NULL;
+#endif
+ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+ curr_prefix[curr_prefix_len] = '\0';
+
+ return curr_prefix;
+ }
+ }
+}
+
+#endif /* !IN_LIBRARY || PIC */
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL. */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__
+
+/* Determine the full pathname of the shared library when it is loaded. */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+ (void) reserved;
+
+ if (event == DLL_PROCESS_ATTACH)
+ {
+ /* The DLL is being loaded into an application's address range. */
+ static char location[MAX_PATH];
+
+ if (!GetModuleFileName (module_handle, location, sizeof (location)))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#if defined __linux__ && __GLIBC__ >= 2
+ /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+ fp = fopen ("/proc/self/maps", "r");
+ if (fp)
+ {
+ unsigned long address = (unsigned long) &find_shared_library_fullname;
+ for (;;)
+ {
+ unsigned long start, end;
+ int c;
+
+ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+ break;
+ if (address >= start && address <= end - 1)
+ {
+ /* Found it. Now see if this line contains a filename. */
+ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+ continue;
+ if (c == '/')
+ {
+ size_t size;
+ int len;
+
+ ungetc (c, fp);
+ shared_library_fullname = NULL; size = 0;
+ len = getline (&shared_library_fullname, &size, fp);
+ if (len >= 0)
+ {
+ /* Success: filled shared_library_fullname. */
+ if (len > 0 && shared_library_fullname[len - 1] == '\n')
+ shared_library_fullname[len - 1] = '\0';
+ }
+ }
+ break;
+ }
+ while (c = getc (fp), c != EOF && c != '\n')
+ continue;
+ }
+ fclose (fp);
+ }
+#endif
+}
+
+#endif /* WIN32 / Unix */
+
+/* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+ Guaranteed to work only on Linux and Woe32. */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+ find_shared_library_fullname ();
+ tried_find_shared_library_fullname = true;
+ }
+#endif
+ return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+ if (!initialized)
+ {
+ /* At this point, orig_prefix and curr_prefix likely have already been
+ set through the main program's set_program_name_and_installdir
+ function. This is sufficient in the case that the library has
+ initially been installed in the same orig_prefix. But we can do
+ better, to also cover the cases that 1. it has been installed
+ in a different prefix before being moved to orig_prefix and (later)
+ to curr_prefix, 2. unlike the program, it has not moved away from
+ orig_prefix. */
+ const char *orig_installprefix = INSTALLPREFIX;
+ const char *orig_installdir = INSTALLDIR;
+ const char *curr_prefix_better;
+
+ curr_prefix_better =
+ compute_curr_prefix (orig_installprefix, orig_installdir,
+ get_shared_library_fullname ());
+ if (curr_prefix_better == NULL)
+ curr_prefix_better = curr_prefix;
+
+ set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+ initialized = 1;
+ }
+#endif
+
+ /* Note: It is not necessary to perform case insensitive comparison here,
+ even for DOS-like filesystems, because the pathname argument was
+ typically created from the same Makefile variable as orig_prefix came
+ from. */
+ if (orig_prefix != NULL && curr_prefix != NULL
+ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+ {
+ if (pathname[orig_prefix_len] == '\0')
+ /* pathname equals orig_prefix. */
+ return curr_prefix;
+ if (ISSLASH (pathname[orig_prefix_len]))
+ {
+ /* pathname starts with orig_prefix. */
+ const char *pathname_tail = &pathname[orig_prefix_len];
+ char *result =
+ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+ if (result != NULL)
+#endif
+ {
+ memcpy (result, curr_prefix, curr_prefix_len);
+ strcpy (result + curr_prefix_len, pathname_tail);
+ return result;
+ }
+ }
+ }
+ /* Nothing to relocate. */
+ return pathname;
+}
+
+#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
new file mode 100644
index 00000000..48c5b71e
--- /dev/null
+++ b/intl/relocatable.h
@@ -0,0 +1,77 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This can be enabled through the configure --enable-relocatable option. */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions. Note that because
+ this is a private .h file, we don't need to use __declspec(dllimport)
+ in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+extern RELOCATABLE_DLL_EXPORTED void
+ set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+ a fresh pathname. If this is a problem because your program calls
+ relocate() frequently, think about caching the result. */
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames. */
+#define relocate(pathname) (pathname)
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644
index 00000000..8745a843
--- /dev/null
+++ b/intl/textdomain.c
@@ -0,0 +1,141 @@
+/* Implementation of the textdomain(3) function.
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain. */
+extern const char _nl_default_default_domain[] attribute_hidden;
+
+/* Default text domain in which entries for gettext(3) are to be found. */
+extern const char *_nl_current_default_domain attribute_hidden;
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN libintl_textdomain
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+char *
+TEXTDOMAIN (const char *domainname)
+{
+ char *new_domain;
+ char *old_domain;
+
+ /* A NULL pointer requests the current setting. */
+ if (domainname == NULL)
+ return (char *) _nl_current_default_domain;
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ old_domain = (char *) _nl_current_default_domain;
+
+ /* If domain name is the null string set to default domain "messages". */
+ if (domainname[0] == '\0'
+ || strcmp (domainname, _nl_default_default_domain) == 0)
+ {
+ _nl_current_default_domain = _nl_default_default_domain;
+ new_domain = (char *) _nl_current_default_domain;
+ }
+ else if (strcmp (domainname, old_domain) == 0)
+ /* This can happen and people will use it to signal that some
+ environment variable changed. */
+ new_domain = old_domain;
+ else
+ {
+ /* If the following malloc fails `_nl_current_default_domain'
+ will be NULL. This value will be returned and so signals we
+ are out of core. */
+#if defined _LIBC || defined HAVE_STRDUP
+ new_domain = strdup (domainname);
+#else
+ size_t len = strlen (domainname) + 1;
+ new_domain = (char *) malloc (len);
+ if (new_domain != NULL)
+ memcpy (new_domain, domainname, len);
+#endif
+
+ if (new_domain != NULL)
+ _nl_current_default_domain = new_domain;
+ }
+
+ /* We use this possibility to signal a change of the loaded catalogs
+ since this is most likely the case and there is no other easy we
+ to do it. Do it only when the call was successful. */
+ if (new_domain != NULL)
+ {
+ ++_nl_msg_cat_cntr;
+
+ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+ free (old_domain);
+ }
+
+ __libc_rwlock_unlock (_nl_state_lock);
+
+ return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
new file mode 100644
index 00000000..8a62282d
--- /dev/null
+++ b/intl/vasnprintf.c
@@ -0,0 +1,887 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "vasnwprintf.h"
+#else
+# include "vasnprintf.h"
+#endif
+
+#include <stdio.h> /* snprintf(), sprintf() */
+#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
+#include <string.h> /* memcpy(), strlen() */
+#include <errno.h> /* errno */
+#include <limits.h> /* CHAR_BIT */
+#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#ifdef HAVE_WCHAR_T
+# ifdef HAVE_WCSLEN
+# define local_wcslen wcslen
+# else
+ /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+ a dependency towards this library, here is a local substitute.
+ Define this substitute only once, even if this file is included
+ twice in the same compilation unit. */
+# ifndef local_wcslen_defined
+# define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+ const wchar_t *ptr;
+
+ for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+ ;
+ return ptr - s;
+}
+# endif
+# endif
+#endif
+
+#if WIDE_CHAR_VERSION
+# define VASNPRINTF vasnwprintf
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+# define PRINTF_PARSE wprintf_parse
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+ /* On Windows, the function swprintf() has a different signature than
+ on Unix; we use the _snwprintf() function instead. */
+# define SNPRINTF _snwprintf
+# else
+ /* Unix. */
+# define SNPRINTF swprintf
+# endif
+#else
+# define VASNPRINTF vasnprintf
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+# define PRINTF_PARSE printf_parse
+# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define SNPRINTF _snprintf
+# else
+ /* Unix. */
+# define SNPRINTF snprintf
+# endif
+#endif
+
+CHAR_T *
+VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
+{
+ DIRECTIVES d;
+ arguments a;
+
+ if (PRINTF_PARSE (format, &d, &a) < 0)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+#define CLEANUP() \
+ free (d.dir); \
+ if (a.arg) \
+ free (a.arg);
+
+ if (printf_fetchargs (args, &a) < 0)
+ {
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+ {
+ size_t buf_neededlength;
+ CHAR_T *buf;
+ CHAR_T *buf_malloced;
+ const CHAR_T *cp;
+ size_t i;
+ DIRECTIVE *dp;
+ /* Output string accumulator. */
+ CHAR_T *result;
+ size_t allocated;
+ size_t length;
+
+ /* Allocate a small buffer that will hold a directive passed to
+ sprintf or snprintf. */
+ buf_neededlength =
+ xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+ if (buf_neededlength < 4000 / sizeof (CHAR_T))
+ {
+ buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
+ buf_malloced = NULL;
+ }
+ else
+#endif
+ {
+ size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
+ if (size_overflow_p (buf_memsize))
+ goto out_of_memory_1;
+ buf = (CHAR_T *) malloc (buf_memsize);
+ if (buf == NULL)
+ goto out_of_memory_1;
+ buf_malloced = buf;
+ }
+
+ if (resultbuf != NULL)
+ {
+ result = resultbuf;
+ allocated = *lengthp;
+ }
+ else
+ {
+ result = NULL;
+ allocated = 0;
+ }
+ length = 0;
+ /* Invariants:
+ result is either == resultbuf or == NULL or malloc-allocated.
+ If length > 0, then result != NULL. */
+
+ /* Ensures that allocated >= needed. Aborts through a jump to
+ out_of_memory if needed is SIZE_MAX or otherwise too big. */
+#define ENSURE_ALLOCATION(needed) \
+ if ((needed) > allocated) \
+ { \
+ size_t memory_size; \
+ CHAR_T *memory; \
+ \
+ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
+ if ((needed) > allocated) \
+ allocated = (needed); \
+ memory_size = xtimes (allocated, sizeof (CHAR_T)); \
+ if (size_overflow_p (memory_size)) \
+ goto out_of_memory; \
+ if (result == resultbuf || result == NULL) \
+ memory = (CHAR_T *) malloc (memory_size); \
+ else \
+ memory = (CHAR_T *) realloc (result, memory_size); \
+ if (memory == NULL) \
+ goto out_of_memory; \
+ if (result == resultbuf && length > 0) \
+ memcpy (memory, result, length * sizeof (CHAR_T)); \
+ result = memory; \
+ }
+
+ for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+ {
+ if (cp != dp->dir_start)
+ {
+ size_t n = dp->dir_start - cp;
+ size_t augmented_length = xsum (length, n);
+
+ ENSURE_ALLOCATION (augmented_length);
+ memcpy (result + length, cp, n * sizeof (CHAR_T));
+ length = augmented_length;
+ }
+ if (i == d.count)
+ break;
+
+ /* Execute a single directive. */
+ if (dp->conversion == '%')
+ {
+ size_t augmented_length;
+
+ if (!(dp->arg_index == ARG_NONE))
+ abort ();
+ augmented_length = xsum (length, 1);
+ ENSURE_ALLOCATION (augmented_length);
+ result[length] = '%';
+ length = augmented_length;
+ }
+ else
+ {
+ if (!(dp->arg_index != ARG_NONE))
+ abort ();
+
+ if (dp->conversion == 'n')
+ {
+ switch (a.arg[dp->arg_index].type)
+ {
+ case TYPE_COUNT_SCHAR_POINTER:
+ *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+ break;
+#endif
+ default:
+ abort ();
+ }
+ }
+ else
+ {
+ arg_type type = a.arg[dp->arg_index].type;
+ CHAR_T *p;
+ unsigned int prefix_count;
+ int prefixes[2];
+#if !USE_SNPRINTF
+ size_t tmp_length;
+ CHAR_T tmpbuf[700];
+ CHAR_T *tmp;
+
+ /* Allocate a temporary buffer of sufficient size for calling
+ sprintf. */
+ {
+ size_t width;
+ size_t precision;
+
+ width = 0;
+ if (dp->width_start != dp->width_end)
+ {
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->width_arg_index].a.a_int;
+ width = (arg < 0 ? (unsigned int) (-arg) : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->width_start;
+
+ do
+ width = xsum (xtimes (width, 10), *digitp++ - '0');
+ while (digitp != dp->width_end);
+ }
+ }
+
+ precision = 6;
+ if (dp->precision_start != dp->precision_end)
+ {
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->precision_arg_index].a.a_int;
+ precision = (arg < 0 ? 0 : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->precision_start + 1;
+
+ precision = 0;
+ do
+ precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+ while (digitp != dp->precision_end);
+ }
+ }
+
+ switch (dp->conversion)
+ {
+
+ case 'd': case 'i': case 'u':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'o':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'x': case 'X':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ break;
+
+ case 'f': case 'F':
+# ifdef HAVE_LONG_DOUBLE
+ if (type == TYPE_LONGDOUBLE)
+ tmp_length =
+ (unsigned int) (LDBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ else
+# endif
+ tmp_length =
+ (unsigned int) (DBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+ tmp_length =
+ 12; /* sign, decimal point, exponent etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'c':
+# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
+ if (type == TYPE_WIDE_CHAR)
+ tmp_length = MB_CUR_MAX;
+ else
+# endif
+ tmp_length = 1;
+ break;
+
+ case 's':
+# ifdef HAVE_WCHAR_T
+ if (type == TYPE_WIDE_STRING)
+ {
+ tmp_length =
+ local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
+
+# if !WIDE_CHAR_VERSION
+ tmp_length = xtimes (tmp_length, MB_CUR_MAX);
+# endif
+ }
+ else
+# endif
+ tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
+ break;
+
+ case 'p':
+ tmp_length =
+ (unsigned int) (sizeof (void *) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading 0x */
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (tmp_length < width)
+ tmp_length = width;
+
+ tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+ }
+
+ if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
+ tmp = tmpbuf;
+ else
+ {
+ size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
+
+ if (size_overflow_p (tmp_memsize))
+ /* Overflow, would lead to out of memory. */
+ goto out_of_memory;
+ tmp = (CHAR_T *) malloc (tmp_memsize);
+ if (tmp == NULL)
+ /* Out of memory. */
+ goto out_of_memory;
+ }
+#endif
+
+ /* Construct the format string for calling snprintf or
+ sprintf. */
+ p = buf;
+ *p++ = '%';
+ if (dp->flags & FLAG_GROUP)
+ *p++ = '\'';
+ if (dp->flags & FLAG_LEFT)
+ *p++ = '-';
+ if (dp->flags & FLAG_SHOWSIGN)
+ *p++ = '+';
+ if (dp->flags & FLAG_SPACE)
+ *p++ = ' ';
+ if (dp->flags & FLAG_ALT)
+ *p++ = '#';
+ if (dp->flags & FLAG_ZERO)
+ *p++ = '0';
+ if (dp->width_start != dp->width_end)
+ {
+ size_t n = dp->width_end - dp->width_start;
+ memcpy (p, dp->width_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+ if (dp->precision_start != dp->precision_end)
+ {
+ size_t n = dp->precision_end - dp->precision_start;
+ memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+
+ switch (type)
+ {
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ case TYPE_ULONGLONGINT:
+ *p++ = 'l';
+ /*FALLTHROUGH*/
+#endif
+ case TYPE_LONGINT:
+ case TYPE_ULONGINT:
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+#endif
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+#endif
+ *p++ = 'l';
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ *p++ = 'L';
+ break;
+#endif
+ default:
+ break;
+ }
+ *p = dp->conversion;
+#if USE_SNPRINTF
+ p[1] = '%';
+ p[2] = 'n';
+ p[3] = '\0';
+#else
+ p[1] = '\0';
+#endif
+
+ /* Construct the arguments for calling snprintf or sprintf. */
+ prefix_count = 0;
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+ }
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+ }
+
+#if USE_SNPRINTF
+ /* Prepare checking whether snprintf returns the count
+ via %n. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+#endif
+
+ for (;;)
+ {
+ size_t maxlen;
+ int count;
+ int retcount;
+
+ maxlen = allocated - length;
+ count = -1;
+ retcount = 0;
+
+#if USE_SNPRINTF
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ arg, &count); \
+ break; \
+ case 1: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], arg, &count); \
+ break; \
+ case 2: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], prefixes[1], arg, \
+ &count); \
+ break; \
+ default: \
+ abort (); \
+ }
+#else
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ count = sprintf (tmp, buf, arg); \
+ break; \
+ case 1: \
+ count = sprintf (tmp, buf, prefixes[0], arg); \
+ break; \
+ case 2: \
+ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+ arg); \
+ break; \
+ default: \
+ abort (); \
+ }
+#endif
+
+ switch (type)
+ {
+ case TYPE_SCHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_schar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UCHAR:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_SHORT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_short;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_USHORT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_INT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_int;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UINT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_LONGINT:
+ {
+ long int arg = a.arg[dp->arg_index].a.a_longint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGINT:
+ {
+ unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ {
+ long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGLONGINT:
+ {
+ unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_DOUBLE:
+ {
+ double arg = a.arg[dp->arg_index].a.a_double;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ {
+ long double arg = a.arg[dp->arg_index].a.a_longdouble;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_CHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ {
+ wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_STRING:
+ {
+ const char *arg = a.arg[dp->arg_index].a.a_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ {
+ const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_POINTER:
+ {
+ void *arg = a.arg[dp->arg_index].a.a_pointer;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ default:
+ abort ();
+ }
+
+#if USE_SNPRINTF
+ /* Portability: Not all implementations of snprintf()
+ are ISO C 99 compliant. Determine the number of
+ bytes that snprintf() has produced or would have
+ produced. */
+ if (count >= 0)
+ {
+ /* Verify that snprintf() has NUL-terminated its
+ result. */
+ if (count < maxlen && result[length + count] != '\0')
+ abort ();
+ /* Portability hack. */
+ if (retcount > count)
+ count = retcount;
+ }
+ else
+ {
+ /* snprintf() doesn't understand the '%n'
+ directive. */
+ if (p[1] != '\0')
+ {
+ /* Don't use the '%n' directive; instead, look
+ at the snprintf() return value. */
+ p[1] = '\0';
+ continue;
+ }
+ else
+ {
+ /* Look at the snprintf() return value. */
+ if (retcount < 0)
+ {
+ /* HP-UX 10.20 snprintf() is doubly deficient:
+ It doesn't understand the '%n' directive,
+ *and* it returns -1 (rather than the length
+ that would have been required) when the
+ buffer is too small. */
+ size_t bigger_need =
+ xsum (xtimes (allocated, 2), 12);
+ ENSURE_ALLOCATION (bigger_need);
+ continue;
+ }
+ else
+ count = retcount;
+ }
+ }
+#endif
+
+ /* Attempt to handle failure. */
+ if (count < 0)
+ {
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+#if !USE_SNPRINTF
+ if (count >= tmp_length)
+ /* tmp_length was incorrectly calculated - fix the
+ code above! */
+ abort ();
+#endif
+
+ /* Make room for the result. */
+ if (count >= maxlen)
+ {
+ /* Need at least count bytes. But allocate
+ proportionally, to avoid looping eternally if
+ snprintf() reports a too small count. */
+ size_t n =
+ xmax (xsum (length, count), xtimes (allocated, 2));
+
+ ENSURE_ALLOCATION (n);
+#if USE_SNPRINTF
+ continue;
+#endif
+ }
+
+#if USE_SNPRINTF
+ /* The snprintf() result did fit. */
+#else
+ /* Append the sprintf() result. */
+ memcpy (result + length, tmp, count * sizeof (CHAR_T));
+ if (tmp != tmpbuf)
+ free (tmp);
+#endif
+
+ length += count;
+ break;
+ }
+ }
+ }
+ }
+
+ /* Add the final NUL. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+
+ if (result != resultbuf && length + 1 < allocated)
+ {
+ /* Shrink the allocated memory if possible. */
+ CHAR_T *memory;
+
+ memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
+ if (memory != NULL)
+ result = memory;
+ }
+
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ *lengthp = length;
+ return result;
+
+ out_of_memory:
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ out_of_memory_1:
+ CLEANUP ();
+ errno = ENOMEM;
+ return NULL;
+ }
+}
+
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef VASNPRINTF
diff --git a/intl/vasnprintf.h b/intl/vasnprintf.h
new file mode 100644
index 00000000..65f1bc13
--- /dev/null
+++ b/intl/vasnprintf.h
@@ -0,0 +1,61 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get size_t. */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+# define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+# define __format__ format
+# define __printf__ printf
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL. */
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+ __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/intl/vasnwprintf.h b/intl/vasnwprintf.h
new file mode 100644
index 00000000..d3cef4cb
--- /dev/null
+++ b/intl/vasnwprintf.h
@@ -0,0 +1,46 @@
+/* vswprintf with automatic memory allocation.
+ Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _VASNWPRINTF_H
+#define _VASNWPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get wchar_t, size_t. */
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL. */
+extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
+extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNWPRINTF_H */
diff --git a/intl/wprintf-parse.h b/intl/wprintf-parse.h
new file mode 100644
index 00000000..24a2cfc2
--- /dev/null
+++ b/intl/wprintf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _WPRINTF_PARSE_H
+#define _WPRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const wchar_t* dir_start;
+ const wchar_t* dir_end;
+ int flags;
+ const wchar_t* width_start;
+ const wchar_t* width_end;
+ size_t width_arg_index;
+ const wchar_t* precision_start;
+ const wchar_t* precision_end;
+ size_t precision_arg_index;
+ wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+wchar_t_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ wchar_t_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+wchar_t_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
+
+#endif /* _WPRINTF_PARSE_H */
diff --git a/intl/xsize.h b/intl/xsize.h
new file mode 100644
index 00000000..362e24b7
--- /dev/null
+++ b/intl/xsize.h
@@ -0,0 +1,109 @@
+/* xsize.h -- Checked size_t computations.
+
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get SIZE_MAX. */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+ type size_t. Example:
+ void* p = malloc (header_size + n * element_size).
+ These computations can lead to overflow. When this happens, malloc()
+ returns a piece of memory that is way too small, and the program then
+ crashes while attempting to fill the memory.
+ To avoid this, the functions and macros in this file check for overflow.
+ The convention is that SIZE_MAX represents overflow.
+ malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+ implementation that uses mmap --, it's recommended to use size_overflow_p()
+ or size_in_bounds_p() before invoking malloc().
+ The example thus becomes:
+ size_t size = xsum (header_size, xtimes (n, element_size));
+ void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t. */
+#define xcast_size_t(N) \
+ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+ size_t sum = size1 + size2;
+ return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+ return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+ return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+ /* No explicit check is needed here, because for any n:
+ max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
+ return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+ The count must be >= 0 and the element size must be > 0.
+ This is a macro, not an inline function, so that it works correctly even
+ when N is of a wider tupe and N > SIZE_MAX. */
+#define xtimes(N, ELSIZE) \
+ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow. */
+#define size_overflow_p(SIZE) \
+ ((SIZE) == SIZE_MAX)
+/* Check against overflow. */
+#define size_in_bounds_p(SIZE) \
+ ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100644
index 00000000..274587e9
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,6426 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.6
+TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 220 $"
+
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell, and then maybe $echo will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
+ ;;
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
+ ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS="
+"}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ $echo "$modename: not configured to build any kind of library" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid () {
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag () {
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ CC_quoted="$CC_quoted $arg"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ CC_quoted="$CC_quoted $arg"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit $EXIT_FAILURE
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+ arg="$1"
+ shift
+
+ case $arg in
+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ execute_dlfiles)
+ execute_dlfiles="$execute_dlfiles $arg"
+ ;;
+ tag)
+ tagname="$arg"
+ preserve_args="${preserve_args}=$arg"
+
+ # Check whether tagname contains only valid characters
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ $echo "$progname: invalid tag name: $tagname" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $tagname in
+ CC)
+ # Don't test for the "default" C tag, as we know, it's there, but
+ # not specially marked.
+ ;;
+ *)
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+ taglist="$taglist $tagname"
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+ else
+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ eval "$prev=\$arg"
+ ;;
+ esac
+
+ prev=
+ prevopt=
+ continue
+ fi
+
+ # Have we seen a non-optional argument yet?
+ case $arg in
+ --help)
+ show_help=yes
+ ;;
+
+ --version)
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit $EXIT_SUCCESS
+ ;;
+
+ --config)
+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+ done
+ exit $EXIT_SUCCESS
+ ;;
+
+ --debug)
+ $echo "$progname: enabling shell trace mode"
+ set -x
+ preserve_args="$preserve_args $arg"
+ ;;
+
+ --dry-run | -n)
+ run=:
+ ;;
+
+ --features)
+ $echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $echo "enable shared libraries"
+ else
+ $echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $echo "enable static libraries"
+ else
+ $echo "disable static libraries"
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ --finish) mode="finish" ;;
+
+ --mode) prevopt="--mode" prev=mode ;;
+ --mode=*) mode="$optarg" ;;
+
+ --preserve-dup-deps) duplicate_deps="yes" ;;
+
+ --quiet | --silent)
+ show=:
+ preserve_args="$preserve_args $arg"
+ ;;
+
+ --tag) prevopt="--tag" prev=tag ;;
+ --tag=*)
+ set tag "$optarg" ${1+"$@"}
+ shift
+ prev=tag
+ preserve_args="$preserve_args --tag"
+ ;;
+
+ -dlopen)
+ prevopt="-dlopen"
+ prev=execute_dlfiles
+ ;;
+
+ -*)
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+
+ *)
+ nonopt="$arg"
+ break
+ ;;
+ esac
+done
+
+if test -n "$prevopt"; then
+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+ # Infer the operation mode.
+ if test -z "$mode"; then
+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+ $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+ case $nonopt in
+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+ mode=link
+ for arg
+ do
+ case $arg in
+ -c)
+ mode=compile
+ break
+ ;;
+ esac
+ done
+ ;;
+ *db | *dbx | *strace | *truss)
+ mode=execute
+ ;;
+ *install*|cp|mv)
+ mode=install
+ ;;
+ *rm)
+ mode=uninstall
+ ;;
+ *)
+ # If we have no mode, but dlfiles were specified, then do execute mode.
+ test -n "$execute_dlfiles" && mode=execute
+
+ # Just use the default operation mode.
+ if test -z "$mode"; then
+ if test -n "$nonopt"; then
+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+ else
+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+ fi
+ fi
+ ;;
+ esac
+ fi
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$modename --help --mode=$mode' for more information."
+
+ # These modes are in order of execution frequency so that they run quickly.
+ case $mode in
+ # libtool compile mode
+ compile)
+ modename="$modename: compile"
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+
+ for arg
+ do
+ case "$arg_mode" in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ if test -n "$libobj" ; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ arg_mode=target
+ continue
+ ;;
+
+ -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ * )
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+ case $lastarg in
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ lastarg="\"$lastarg\""
+ ;;
+ esac
+
+ base_compile="$base_compile $lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ $echo "$modename: you must specify an argument for -Xcompile"
+ exit $EXIT_FAILURE
+ ;;
+ target)
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ *)
+ # Get the name of the library object.
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ xform='[cCFSifmso]'
+ case $libobj in
+ *.ada) xform=ada ;;
+ *.adb) xform=adb ;;
+ *.ads) xform=ads ;;
+ *.asm) xform=asm ;;
+ *.c++) xform=c++ ;;
+ *.cc) xform=cc ;;
+ *.ii) xform=ii ;;
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+ *.f90) xform=f90 ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+ case $libobj in
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *)
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$obj"; then
+ xdir=
+ else
+ xdir=$xdir/
+ fi
+ lobj=${xdir}$objdir/$objname
+
+ if test -z "$base_compile"; then
+ $echo "$modename: you must specify a compilation command" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ $run $rm $removelist
+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ removelist="$removelist $output_obj $lockfile"
+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $run ln "$progpath" "$lockfile" 2>/dev/null; do
+ $show "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+ $echo $srcfile > "$lockfile"
+ fi
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+
+ $run $rm "$libobj" "${libobj}T"
+
+ # Create a libtool object file (analogous to a ".la" file),
+ # but don't create it if we're doing a dry run.
+ test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $srcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ fi
+
+ if test ! -d "${xdir}$objdir"; then
+ $show "$mkdir ${xdir}$objdir"
+ $run $mkdir ${xdir}$objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
+ fi
+ fi
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ $run $rm "$lobj" "$output_obj"
+
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ test -n "$output_obj" && $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ $show "$mv $output_obj $lobj"
+ if $run $mv $output_obj $lobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the PIC object to the libtool object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ else
+ # No PIC object so indicate it doesn't exist in the libtool
+ # object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ else
+ command="$base_compile $srcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ $run $rm "$obj" "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ $show "$mv $output_obj $obj"
+ if $run $mv $output_obj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+ else
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+ fi
+
+ $run $mv "${libobj}T" "${libobj}"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $run $rm "$lockfile"
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool link mode
+ link | relink)
+ modename="$modename: link"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args="$nonopt"
+ base_compile="$nonopt $@"
+ compile_command="$nonopt"
+ finalize_command="$nonopt"
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -all-static | -static)
+ if test "X$arg" = "X-all-static"; then
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ else
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ fi
+ build_libtool_libs=no
+ build_old_libs=yes
+ prefer_static_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ compile_command="$compile_command @OUTPUT@"
+ finalize_command="$finalize_command @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ compile_command="$compile_command @SYMFILE@"
+ finalize_command="$finalize_command @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ if test ! -f "$arg"; then
+ $echo "$modename: symbol file \`$arg' does not exist"
+ exit $EXIT_FAILURE
+ fi
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat $save_arg`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit $EXIT_FAILURE
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ done
+ else
+ $echo "$modename: link input file \`$save_arg' does not exist"
+ exit $EXIT_FAILURE
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+ finalize_command="$finalize_command $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+ continue
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
+ exit $EXIT_FAILURE
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs -framework System"
+ continue
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # gcc -m* arguments should be passed to the linker via $compiler_flags
+ # in order to pass architecture information to the linker
+ # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo
+ # but this is not reliable with gcc because gcc may use -mfoo to
+ # select a different linker, different libraries, etc, while
+ # -Wl,-mfoo simply passes -mfoo to the linker.
+ -m*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -static)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit $EXIT_FAILURE
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d "$output_objdir"; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplications in $postdeps and $predeps
+ duplicate_compiler_generated_deps=yes
+ ;;
+ *)
+ duplicate_compiler_generated_deps=$duplicate_deps
+ ;;
+ esac
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if (${SED} -e '2q' $lib |
+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ library_names=
+ old_library=
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ if test "$deplibs_check_method" != pass_all; then
+ $echo
+ $echo "*** Warning: Trying to link with static lib archive $deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because the file extensions .$libext of this argument makes me believe"
+ $echo "*** that it is just a static archive that I should not used here."
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the"
+ $echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+
+ # Read the .la file
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var"; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on
+ # some systems (darwin)
+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
+ $echo
+ if test "$linkmode" = prog; then
+ $echo "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $echo "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ cmds=$extract_expsyms_cmds
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ cmds=$old_archive_from_expsyms_cmds
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a module then we can not link against
+ # it, someone is ignoring the new warnings I added
+ if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
+ $echo "** Warning, lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $echo
+ $echo "** And there doesn't seem to be a static archive available"
+ $echo "** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $echo
+ $echo "*** Warning: This system can not link to static lib archive $lib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $echo "*** But as you try to build a module library, libtool will still create "
+ $echo "*** a static module, that should work as long as the dlopening application"
+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test "$absdir" != "$libdir"; then
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="$absdir"
+ fi
+ depdepl=
+ case $host in
+ *-*-darwin*)
+ # we do not want to link against static libs,
+ # but need to link against shared
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$path/$depdepl" ; then
+ depdepl="$path/$depdepl"
+ fi
+ # do not add paths which are already there
+ case " $newlib_search_path " in
+ *" $path "*) ;;
+ *) newlib_search_path="$newlib_search_path $path";;
+ esac
+ fi
+ path=""
+ ;;
+ *)
+ path="-L$path"
+ ;;
+ esac
+ ;;
+ -l*)
+ case $host in
+ *-*-darwin*)
+ # Again, we only want to link against shared libraries
+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+ for tmp in $newlib_search_path ; do
+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
+ eval depdepl="$tmp/lib$tmp_libs.dylib"
+ break
+ fi
+ done
+ path=""
+ ;;
+ *) continue ;;
+ esac
+ ;;
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $depdepl "*) ;;
+ *) deplibs="$depdepl $deplibs" ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+ fi
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ if test "$module" = no; then
+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit $EXIT_FAILURE
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
+ $echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+ fi
+
+ set dummy $rpath
+ if test "$#" -gt 2; then
+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+ fi
+ install_libdir="$2"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+ fi
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ IFS="$save_ifs"
+
+ if test -n "$8"; then
+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$2"
+ number_minor="$3"
+ number_revision="$4"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ ;;
+ no)
+ current="$2"
+ revision="$3"
+ age="$4"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $revision in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ case $age in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
+ irix | nonstopux)
+ major=`expr $current - $age + 1`
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ iface=`expr $revision - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ major=.`expr $current - $age`
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ iface=`expr $current - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+ fi
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$echo "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ if test -n "$removelist"; then
+ $show "${rm}r $removelist"
+ $run ${rm}r $removelist
+ fi
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs -framework System"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $rm conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $rm conftest
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" -ne "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which I believe you do not have"
+ $echo "*** because a test_compile did reveal that the linker did not use it for"
+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+ $LTCC -o conftest conftest.c $i
+ # Did it work?
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because a test_compile did reveal that the linker did not use this one"
+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null \
+ | grep " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval $echo \"$potent_lib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+ -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ done
+ fi
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
+ | grep . >/dev/null; then
+ $echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $echo
+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
+ $echo "*** a static module, that should work as long as the dlopening"
+ $echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $echo "*** The inter-library dependencies that have been dropped here will be"
+ $echo "*** automatically added whenever a program is linked with this library"
+ $echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $echo
+ $echo "*** Since this library must not contain undefined symbols,"
+ $echo "*** because either the platform does not support them or"
+ $echo "*** it was explicitly requested with -no-undefined,"
+ $echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ $show "using reloadable object file for export list..."
+ skipped_export=:
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex"; then
+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise.
+ $echo "creating reloadable object files..."
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ delfiles=
+ last_robj=
+ k=1
+ output=$output_objdir/$save_output-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$save_output-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$save_output-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ if ${skipped_export-false}; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+ fi
+
+ # Set up a command to remove the reloadale object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+ done
+
+ $echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+
+ # Append the command to remove the reloadable object files
+ # to the just-reset $cmds.
+ eval cmds=\"\$cmds~\$rm $delfiles\"
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+ fi
+
+ case $output in
+ *.lo)
+ if test -n "$objs$old_deplibs"; then
+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ libobj="$output"
+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $run $rm $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ cmds=$reload_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $run eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ cmds=$reload_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+ fi
+
+ if test "$preload" = yes; then
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+ test "$dlopen_self_static" = unknown; then
+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+ fi
+ fi
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ case $host in
+ *darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ if test "$tagname" = CXX ; then
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ fi
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ dlsyms=
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ dlsyms="${outputname}S.c"
+ else
+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+ fi
+ fi
+
+ if test -n "$dlsyms"; then
+ case $dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${outputname}.nm"
+
+ $show "$rm $nlist ${nlist}S ${nlist}T"
+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+ # Parse the name list into a source file.
+ $show "creating $output_objdir/$dlsyms"
+
+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ $show "generating symbol list for \`$output'"
+
+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for arg in $progfiles; do
+ $show "extracting global C symbols from \`$arg'"
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$output.exp"
+ $run $rm $export_symbols
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ else
+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+ $run eval 'mv "$nlist"T "$nlist"'
+ fi
+ fi
+
+ for arg in $dlprefiles; do
+ $show "extracting global C symbols from \`$arg'"
+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+ $run eval '$echo ": $name " >> "$nlist"'
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -z "$run"; then
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $mv "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if grep -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ grep -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+ else
+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ fi
+
+ $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ fi
+
+ pic_flag_for_symtable=
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+ esac;;
+ *-*-hpux*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag";;
+ esac
+ esac
+
+ # Now compile the dynamic symbol file.
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+ # Clean up the generated files.
+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+ # Transform the symbol file into the correct name.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ *)
+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ $show "$link_command"
+ $run eval "$link_command"
+ status=$?
+
+ # Delete the generated files.
+ if test -n "$dlsyms"; then
+ $show "$rm $output_objdir/${outputname}S.${objext}"
+ $run $rm "$output_objdir/${outputname}S.${objext}"
+ fi
+
+ exit $status
+ fi
+
+ if test -n "$shlibpath_var"; then
+ # We should set the shlibpath_var
+ rpath=
+ for dir in $temp_rpath; do
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*)
+ # Absolute path.
+ rpath="$rpath$dir:"
+ ;;
+ *)
+ # Relative path: add a thisdir entry.
+ rpath="$rpath\$thisdir/$dir:"
+ ;;
+ esac
+ done
+ temp_rpath="$rpath"
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+ $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+
+ # Now create the wrapper script.
+ $show "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $echo for shipping.
+ if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+ esac
+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if our run command is non-null.
+ if test -z "$run"; then
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ cwrappersource=`$echo ${objdir}/lt-${output}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+EOF
+
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha (name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+ size_t size;
+ char *p;
+ char tmp[LT_PATHMAX + 1];
+
+ assert(path != NULL);
+
+ /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
+#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
+
+ /* prepend the current directory */
+ /* doesn't handle '~' */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+ $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variable:
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$echo are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ echo=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$echo works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$echo will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $echo >> $output "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $echo >> $output "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" || \\
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $mkdir \"\$progdir\"
+ else
+ $rm \"\$progdir/\$file\"
+ fi"
+
+ $echo >> $output "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $echo \"\$relink_command_output\" >&2
+ $rm \"\$progdir/\$file\"
+ exit $EXIT_FAILURE
+ fi
+ fi
+
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $rm \"\$progdir/\$program\";
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $rm \"\$progdir/\$file\"
+ fi"
+ else
+ $echo >> $output "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $echo >> $output "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $echo >> $output "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $echo >> $output "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $echo >> $output "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2*)
+ $echo >> $output "\
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $echo >> $output "\
+ exec \$progdir/\$program \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $echo >> $output "\
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ exit $EXIT_FAILURE
+ fi
+ else
+ # The program doesn't exist.
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit $EXIT_FAILURE
+ fi
+fi\
+"
+ chmod +x $output
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ # Add in members from convenience archives.
+ for xlib in $addlibs; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+ eval cmds=\"$old_archive_cmds\"
+
+ if len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ $echo "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+ # encoded into archives. This makes 'ar r' malfunction in
+ # this piecewise linking case whenever conflicting object
+ # names appear in distinct ar calls; check, warn and compensate.
+ if (for obj in $save_oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+ $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+ AR_FLAGS=cq
+ fi
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ eval cmd=\"$cmd\"
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$generated"; then
+ $show "${rm}r$generated"
+ $run ${rm}r$generated
+ fi
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ $show "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+
+ # Only create the output if not a dry run.
+ if test -z "$run"; then
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ fi
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool install mode
+ install)
+ modename="$modename: install"
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+ # Aesthetically quote it.
+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$arg "
+ arg="$1"
+ shift
+ else
+ install_prog=
+ arg="$nonopt"
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog$arg"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest="$arg"
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*) ;;
+
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest="$arg"
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog $arg"
+ done
+
+ if test -z "$install_prog"; then
+ $echo "$modename: you must specify an install program" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ $echo "$modename: no file or destination specified" 1>&2
+ else
+ $echo "$modename: you must specify a destination" 1>&2
+ fi
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Strip any trailing slash from the destination.
+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$destdir" = "X$dest" && destdir=.
+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files
+ if test "$#" -gt 2; then
+ $echo "$modename: \`$dest' is not a directory" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ library_names=
+ old_library=
+ relink_command=
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+ test "X$dir" = "X$file/" && dir=
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names
+ if test -n "$2"; then
+ realname="$2"
+ shift
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ for linkname
+ do
+ if test "$linkname" != "$realname"; then
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ fi
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ cmds=$postinstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Install the pseudo-library for information purposes.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ instname="$dir/$name"i
+ $show "$install_prog $instname $destdir/$name"
+ $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ if test -n "$destfile"; then
+ $show "$install_prog $file $destfile"
+ $run eval "$install_prog $file $destfile" || exit $?
+ fi
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+ $show "$install_prog $staticobj $staticdest"
+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+ notinst_deplibs=
+ relink_command=
+
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ # Check the variables that should have been set.
+ if test -z "$notinst_deplibs"; then
+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ # If there is no directory component, then add one.
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ fi
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ if test "$finalize" = yes && test -z "$run"; then
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir="$tmpdir/libtool-$$"
+ save_umask=`umask`
+ umask 0077
+ if $mkdir "$tmpdir"; then
+ umask $save_umask
+ else
+ umask $save_umask
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ ${rm}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
+ fi
+ else
+ # Install the binary that we compiled earlier.
+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
+ $show "$install_prog$stripme $file $destfile"
+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+ test -n "$outputname" && ${rm}r "$tmpdir"
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ $show "$install_prog $file $oldlib"
+ $run eval "$install_prog \$file \$oldlib" || exit $?
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
+ # Do each command in the postinstall commands.
+ cmds=$old_postinstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$future_libdirs"; then
+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+ fi
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ test -n "$run" && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+ ;;
+
+ # libtool finish mode
+ finish)
+ modename="$modename: finish"
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ cmds=$finish_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd" || admincmds="$admincmds
+ $cmd"
+ done
+ IFS="$save_ifs"
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $run eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ test "$show" = : && exit $EXIT_SUCCESS
+
+ $echo "----------------------------------------------------------------------"
+ $echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $echo " $libdir"
+ done
+ $echo
+ $echo "If you ever happen to want to link against installed libraries"
+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ $echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $echo " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $echo " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $echo
+ $echo "See any operating system documentation about shared libraries for"
+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ $echo "----------------------------------------------------------------------"
+ exit $EXIT_SUCCESS
+ ;;
+
+ # libtool execute mode
+ execute)
+ modename="$modename: execute"
+
+ # The first argument is the command name.
+ cmd="$nonopt"
+ if test -z "$cmd"; then
+ $echo "$modename: you must specify a COMMAND" 1>&2
+ $echo "$help"
+ exit $EXIT_FAILURE
+ fi
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ if test ! -f "$file"; then
+ $echo "$modename: \`$file' is not a file" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit $EXIT_FAILURE
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ ;;
+
+ *)
+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+ args="$args \"$file\""
+ done
+
+ if test -z "$run"; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
+ fi
+ $echo "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+ ;;
+
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
+ rm="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
+ -*) rm="$rm $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ if test -z "$rm"; then
+ $echo "$modename: you must specify an RM program" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ . $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+ if test "$mode" = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ cmds=$postuninstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ cmds=$old_postuninstall_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+ # Read the .lo file
+ . $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" \
+ && test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" \
+ && test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$noexename
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
+ ;;
+
+ "")
+ $echo "$modename: you must specify a MODE" 1>&2
+ $echo "$generic_help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+ esac
+
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+-n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --finish same as \`--mode=finish'
+ --help display this help message and exit
+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
+ --quiet same as \`--silent'
+ --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ --version print version information
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool@gnu.org>."
+ exit $EXIT_SUCCESS
+ ;;
+
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+compile)
+ $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -static always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+execute)
+ $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+finish)
+ $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+install)
+ $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+link)
+ $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -static do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+uninstall)
+ $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+*)
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$help" 1>&2
+ exit $EXIT_FAILURE
+ ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit $EXIT_SUCCESS
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/manual/Makefile.am b/manual/Makefile.am
new file mode 100644
index 00000000..6b1c7b98
--- /dev/null
+++ b/manual/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = en ja
diff --git a/manual/en/Makefile.am b/manual/en/Makefile.am
new file mode 100644
index 00000000..f7ecdd59
--- /dev/null
+++ b/manual/en/Makefile.am
@@ -0,0 +1,28 @@
+manualdatadir = $(manualdir)/en
+
+manualdata_DATA = \
+ sylpheed-1.html \
+ sylpheed-10.html \
+ sylpheed-11.html \
+ sylpheed-12.html \
+ sylpheed-13.html \
+ sylpheed-14.html \
+ sylpheed-15.html \
+ sylpheed-16.html \
+ sylpheed-17.html \
+ sylpheed-18.html \
+ sylpheed-19.html \
+ sylpheed-2.html \
+ sylpheed-20.html \
+ sylpheed-3.html \
+ sylpheed-4.html \
+ sylpheed-5.html \
+ sylpheed-6.html \
+ sylpheed-7.html \
+ sylpheed-8.html \
+ sylpheed-9.html \
+ sylpheed.html
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(manualdata_DATA)
diff --git a/manual/en/sylpheed-1.html b/manual/en/sylpheed-1.html
new file mode 100644
index 00000000..77f188a3
--- /dev/null
+++ b/manual/en/sylpheed-1.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: What is Sylpheed?</TITLE>
+ <LINK HREF="sylpheed-2.html" REL=next>
+
+ <LINK HREF="sylpheed.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-2.html">Next</A>
+Previous
+<A HREF="sylpheed.html#toc1">Contents</A>
+<HR>
+<H2><A NAME="s1">1. What is Sylpheed?</A></H2>
+
+<P>
+<P>
+<P>
+<P>
+<H2><A NAME="ss1.1">1.1 Introduction to Sylpheed.</A>
+</H2>
+
+<P>Sylpheed is a fast e-mail and news client. It will run on just about any Linux or Unix compliant system.
+<P>The power of Sylpheed is that it is
+<UL>
+<LI>light on resources</LI>
+<LI>very fast</LI>
+<LI>intuitive for most people</LI>
+<LI>easy to work with</LI>
+<LI>loaded with features</LI>
+<LI>graceful and sophisticated in its interface</LI>
+</UL>
+<H2><A NAME="ss1.2">1.2 Interface</A>
+</H2>
+
+<P>The appearance and interface are similar to some popular e-mail clients for Windows, such as Outlook Express, Becky!, and Datula. The interface is also designed to emulate the mailers on Emacsen, and almost all commands are accessible with the keyboard.
+<P>The messages are managed by MH format, and you'll be able to use it together with another mailer based on MH format (like Mew). You can also utilize fetchmail or/and procmail, and external programs for receiving (like inc or imget).
+i
+<H2><A NAME="ss1.3">1.3 Main features</A>
+</H2>
+
+<P>Currently implemented features are:
+<UL>
+<LI>Unlimited multiple account handling</LI>
+<LI>Thread display</LI>
+<LI>Filtering </LI>
+<LI>MIME (attachments) </LI>
+<LI>built-in image view </LI>
+<LI>X-Face support </LI>
+<LI>External editor support </LI>
+<LI>Message queueing </LI>
+<LI>Draft message function </LI>
+<LI>Line-wrapping </LI>
+<LI>Clickable URI </LI>
+<LI>XML-based addressbook </LI>
+<LI>LDAP addressbook </LI>
+<LI>Jpilot addressbook (for Palm types handhelds)</LI>
+<LI>Newly arrived and unread message management </LI>
+<LI>Multiple MH folder support </LI>
+<LI>Mew/Wanderlust compatible key bindings </LI>
+<LI>News reader function </LI>
+<LI>Printing </LI>
+<LI>UIDL support </LI>
+<LI>APOP authentication </LI>
+<LI>SMTP AUTH support</LI>
+<LI>IPv6 support </LI>
+<LI>GPG encryption and signature</LI>
+<LI>Autoconf, automake support </LI>
+<LI>Support of i18n of messages by gettext </LI>
+<LI>Supports many locales, including UTF-8 (Unicode), when using libjconv </LI>
+<LI>IMAP4 compliant</LI>
+</UL>
+
+This list is not complete, but this will at least show you the most common features in Sylpheed.
+<H2><A NAME="ss1.4">1.4 Methods for managing messages</A>
+</H2>
+
+<P>There are several ways to manage messages. The best known is <CODE>not at all.</CODE>
+<P>Too many people receive lots of e-mails and just let them end up in the INBOX folder. Which after a while becomes unmanageable. Try to locate that one mail about an important event you got 5 days ago, in a mailbox that has over 5000 messages in it. Even when sorted on date, it might take you a tremendous time to locate it.
+<P>For this there are <CODE>mailfolders and mailboxes.</CODE>
+<P>When you read on in this manual, you will learn about creating mailboxes and also folders that can contain more mailboxes. What are these good for?
+<P>Overview. Simple as that. In different mailboxes you can store different kinds of mails. Suppose you are a member of a kiting club. And you get at least 30 e-mails per day from that club. The smart thing to do now is to create a separate mailbox for these mails. So when an e-mail comes in from the kiting club, you can move it to the kiting club mailbox. That way you know that you have all your kiting e-mails in one place.
+<P>Tedious, you say? To move 30 mails a day to that box, when they come in at random moments? You bet that is a tedious job. You can be certain that you will miss that very important one about transport to the kiting ground where you will have the contest of biggest and most beautiful kite!
+<P>Well, also for this there is a solution. Those are called <CODE>filters</CODE>.
+<P>Filters can automate the process of moving e-mails to new locations. Further on in this manual you will also learn about setting up filters, so you do not have to move these kiting e-mails to the kiting club mailbox.
+<P>
+<H3>Okay, so what is the difference between a mailbox and a mailfolder?</H3>
+
+<P>This is actually the exact same thing as you do on your harddisk. You create directories in which you can put files and more directories.
+<P>In the case of Sylpheed, you can create a mailbox in which you can put more mailboxes that somehow belong together. For example, you could create a mailbox (folder) that contains the mailboxes for all the mailing lists you belong to.
+<P>A word of clarification is perhaps in need here. In Sylpheed, a maillbox is nothing more than a directory. And in a directory you can create a new directory. But also files. And Sylpheed stores each e-mail in a separate file on disk.
+An example of how a mailbox tree could look is
+<P>
+<P>
+<P>
+<P>
+<P>As you can see, there is no real limit to the way you can set up your mailboxes. As long as you have diskspace available, you can create mailboxes and mailboxes within mailboxes.
+<P>Of course, you should observe some common sense when you start creating mailboxes. To keep all mail in one place is not a good idea, but to create a maze of mailboxes is not a good idea either!
+<H2><A NAME="ss1.5">1.5 Features for the future</A>
+</H2>
+
+<P>This is a special chapter. As with all open source programs, many features can be requested by you, the user of Sylpheed. The best way to join in on the talks is to join one of the mailing lists on Sylpheed. For this, you can turn to the Information section of this manual and read up on how to join a mailing list.
+<HR>
+<A HREF="sylpheed-2.html">Next</A>
+Previous
+<A HREF="sylpheed.html#toc1">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-10.html b/manual/en/sylpheed-10.html
new file mode 100644
index 00000000..c00e4c23
--- /dev/null
+++ b/manual/en/sylpheed-10.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Composing Messages</TITLE>
+ <LINK HREF="sylpheed-11.html" REL=next>
+ <LINK HREF="sylpheed-9.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc10" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-11.html">Next</A>
+<A HREF="sylpheed-9.html">Previous</A>
+<A HREF="sylpheed.html#toc10">Contents</A>
+<HR>
+<H2><A NAME="s10">10. Composing Messages</A></H2>
+
+<H2><A NAME="ss10.1">10.1 Composing a New Message</A>
+</H2>
+
+<P>When you start writing a new message, you are presented a nice dialog in which you can enter all kinds of information. In the From: line you find a dropdown list. In there you can select the e-mail account you want to use as the sending account.
+<P>In the To: / Cc: / Bcc: part, you write the e-mail address of the receiver. You can enter several e-mail addresses, as long as they are separated by commas. An important utility here is the button "Address". When you click that, you see the address book. You can point at an address, click the "To:", "Cc:" or "Bcc:" button, and Sylpheed will place the address in the selected line. The Bcc: may be greyed out. In order to make that accessible, you need to add the Bcc: line to the message. You do that through the Message menu, and checking the Bcc option.
+<P>In the Subject line you enter a short descriptive text what your message will be about.
+<P>You can move between these lines by pressing TAB (to skip to the next line) and SHIFT-TAB (to go back up). When you press TAB in the last line, you will be moved to the message body.
+<P>Did you select a signature file in the settings for the active account, it will be in the message text already. You can now write your message. When you are done, you can click Send, Send later or Draft in the toolbar. Send attempts to send the message immediately. Send later will place it in the Send folder, and Draft will place it in the Draft folder.
+<H2><A NAME="ss10.2">10.2 Replying to a Message</A>
+</H2>
+
+<P>To reply to a message, you use the "reply" function. In Sylpheed you activate this through either the "Reply" button, or by pressing Alt-R.
+<P>A new message window will be created, with the e-mail address of the recipient and the subject already set for you. Most of the things described in Composing a new message are also applicable to this window.
+<H2><A NAME="ss10.3">10.3 Replying to a Message with Quotation</A>
+</H2>
+
+<P>If you want to have Sylpheed quote the text you are replying to, you need to go into the Configuration menu. There you select Common preferences, go to the Compose tab, and check the "Quote message when replying" box. There you can also edit the quotation mark (the mark put in front of each quoted line in the reply mail) and the reply attribution (which is placed in front of the reply text).
+<H2><A NAME="ss10.4">10.4 Forwarding Messages</A>
+</H2>
+
+<P>Forwarding a message means: you send the entire message, including headers (Sender address, date sent etc.) on to someone else. For this you press the "Forward" button, or you press Ctrl-F. A new message window is created, containing the text of the selected message. You can then supply the name(s) of the recipient(s) of the message as in composing a new message, perhaps add a few lines of text to the message and send it on its way.
+<HR>
+<A HREF="sylpheed-11.html">Next</A>
+<A HREF="sylpheed-9.html">Previous</A>
+<A HREF="sylpheed.html#toc10">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-11.html b/manual/en/sylpheed-11.html
new file mode 100644
index 00000000..c4bfeb03
--- /dev/null
+++ b/manual/en/sylpheed-11.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Address Book</TITLE>
+ <LINK HREF="sylpheed-12.html" REL=next>
+ <LINK HREF="sylpheed-10.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc11" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-12.html">Next</A>
+<A HREF="sylpheed-10.html">Previous</A>
+<A HREF="sylpheed.html#toc11">Contents</A>
+<HR>
+<H2><A NAME="s11">11. Address Book</A></H2>
+
+<P>
+<P>
+<P>
+<P>
+<P>In the address book, accessible through Alt-A, the Addressbook button, or through the tool menu, you store e-mail addresses of the people and places you want to write more often.
+<P>
+<P>
+<H2><A NAME="ss11.1">11.1 Adding and Deleting Addresses</A>
+</H2>
+
+<P>Adding an address to the address book is quite easy too. Rightclick the folder or group you want to add the address to, select "new address" and fill in the dialog that comes up. You can also directly click the Add button in the address book window, and the dialog comes up. In this case the address is moved into the folder/group that is selected at the moment of adding.
+<P>Deleting an address is equally simple. Find the address, click it once, and press the Delete button.
+<P>
+<H2><A NAME="ss11.2">11.2 Folders and Groups</A>
+</H2>
+
+<P>The address book, like the mail folders, can be expanded into an entire tree of sections. For this you right-click on the folder where you want to add a new folder, and select "new folder". Then you can enter a descriptive name for the folder, click Ok, and your folder is created.
+<P>In this same way you can create a new group in a folder. Right-click on the folder, select "new group", enter a name for it, and that's it.
+<P>
+<H2><A NAME="ss11.3">11.3 Combination with Message Composition Window</A>
+</H2>
+
+<P>Open the address-book through one of the available ways (toolbar, shortcut key).
+Finding an e-mail address: enter part of the start of the name or the address you are looking for and press the TAB key. A dropdown list will appear with the selections that have been found to match. Select one and press enter. After that you can use the To:, Cc: or Bcc: buttons to add the address to an e-mail, if you are writing one. Otherwise these buttons are greyed out and not functional.
+<HR>
+<A HREF="sylpheed-12.html">Next</A>
+<A HREF="sylpheed-10.html">Previous</A>
+<A HREF="sylpheed.html#toc11">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-12.html b/manual/en/sylpheed-12.html
new file mode 100644
index 00000000..48ced2f1
--- /dev/null
+++ b/manual/en/sylpheed-12.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Filtering Messages</TITLE>
+ <LINK HREF="sylpheed-13.html" REL=next>
+ <LINK HREF="sylpheed-11.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc12" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-13.html">Next</A>
+<A HREF="sylpheed-11.html">Previous</A>
+<A HREF="sylpheed.html#toc12">Contents</A>
+<HR>
+<H2><A NAME="s12">12. Filtering Messages</A></H2>
+
+<P>Written by Nick Selby (sylpheed@nickselby.com)
+<P>
+<P>
+<H2><A NAME="ss12.1">12.1 Filtering Messages</A>
+</H2>
+
+<P>Sylpheed provides powerful filters to allow users to automatically pre-sort incoming
+mail based on a set of rules that the user defines. As a most simple example, let's
+say you work at the Acme Grommet Company, and you want all e-mail from your co-workers
+to be placed in one mailbox. To accomplish this, you would set up a filter that would
+place all mail whose "From" header includes the phrase "acmegrommet.com" into a specific mailbox.
+<P>Sylpheed allows you much more control than just that simple setup; you may create
+filters based on several variables, including an "If this AND that" or "If the message
+contains this OR does NOT contain that" etc. It's very cool.
+<H3>Finding The Filter Setting Dialog</H3>
+
+<P>The filter settings dialog is located in the Configuration menu, under the title
+"Filter Setting". You may also use establish a keyboard shortcut (see Keyboard Shortcuts).
+<P>
+<P>
+<P>
+<P>
+<H3>Setting Up Filters</H3>
+
+<P>Operator(s) and Processing instructions combine to create a Filter Rule.
+<P>* Operators
+The dialog's first setting option establishes the Operator, the variable that will
+tell the filter what specific text to look for to trigger a filter. Each Filter Rule may have up to two operator sets.
+<P>Each Operator variable contains three sections: Header, Keyword and Predicate.
+<P>Header is a drop-down box which defines in which message header Sylpheed's filter will search. Choices range from Subject to X-Mailer.
+<P>Keyword is a a text box in which you may enter the text for which the filter will search.
+<P>Predicate allows you to choose to filter based on whether the operator
+contains, or does not contain, the text you enter in the Keyword field.
+<P>Example: Create an Operator in which the X-Mailer field of an incoming message contains the word 'Eudora'.
+<UL>
+<LI>Step 1. Under the Header drop-down box, select X-Mailer.</LI>
+<LI>Step 2. In the Keyword text box, type 'eudora' (case insensitive)</LI>
+<LI>Step 3. Determine appropriate Predicate setting. Default is "Contains".</LI>
+</UL>
+
+The second Operator setting, which is set identically to the first, also allows the
+user to select an AND/OR setting declaring the relationship between the two operators.
+<P>Example: Create an Operator set which will process mail with a "From" header of
+bob@acmegrommet.com AND a subject of "2001 Spring Grommet Collection"
+<UL>
+<LI>Step 1. Under the first Operator set's Header drop-down box, select "From".</LI>
+<LI>Step 2. In the "Keyword" text box, type 'bob@acmegrommet.com' (case insensitive)</LI>
+<LI>Step 3. Leave "Predicate" setting on default, "Contains"</LI>
+<LI>Step 4. Leave "AND/OR" box on default setting, "AND"</LI>
+<LI>Step 5. Under the second Operator set's "Header" drop-down box, select "Subject".</LI>
+<LI>Step 6. In the "Keyword" text box, type '2001 spring grommet collection' (case insensitive)</LI>
+<LI>Step 7. Leave "Predicate" setting on default, "Contains"</LI>
+</UL>
+<H3>Message Processing</H3>
+
+<P>Once you've established the Operator(s) that will define which messages will be
+processed, it's time to tell Sylpheed what to do with messages that match the
+operator(s). You may choose between two radio button-selected settings: "Destination" and "Don't Receive".
+<P>Selecting "Destinations" will enable you to route the mail into
+a mailbox which you specify.
+<P>Selecting "Don't Receive" will instruct Sylpheed to not download messages with that
+operator. Note that with "Don't Receive", Sylpheed merely leaves the message on your mailserver - it does not delete it.
+<P>To specify a mailbox to which you want the message transfered, click on the radio
+button to the left of the word "Destination" in the dialog. (Currently, in order to
+specify a mailbox you must have created that mailbox prior to activating the Filter
+Setting dialog.) Clicking the "Select" button will open a pop-up window containing all
+mail folders currently active in your copy of Sylpheed. Select the mailbox you wish by
+either (a) double clicking on the mail folder name or (b) clicking the mail folder name and then clicking "OK".
+<P>To specify that the message not be retrieved, and left on your mail server, click the
+radio button to the left of the words "Don't Receive".
+<H3>Filter Registration</H3>
+
+<P>Now that you have set the Operator and the Processing Rule, all that's left to do is
+tell Sylpheed to save the entire Filter Rule. If you skip this step, the filter won't work.
+<P>The "Register Rules" configuration has three options: "Register", "Substitute" and "Delete".
+<UL>
+<LI>"Register" saves the Filter Rule.</LI>
+<LI>"Substitute" modifies an existing registered Filter Rule.</LI>
+<LI>"Delete" will remove a previously registered Filter Rule. </LI>
+</UL>
+
+Example of Registering A Filter Rule: Create a Filter Rule that moves all mail with
+the subject of "Sylpheed Manual" into the (previously created) mail folder "Sylpheed Manual Mail".
+<UL>
+<LI>Step 1. Under the first Operator set's "Header" drop-down box, select "Subject".</LI>
+<LI>Step 2. In the "Keyword" text box, type 'sylpheed manual' (case insensitive)</LI>
+<LI>Step 3. Leave "Predicate" setting on default, "Contains". Leave second Operator set empty.</LI>
+<LI>Step 4. Click "Destinations" radio button; select "Sylpheed Manual Mail" folder</LI>
+<LI>Step 5. Click "Register"</LI>
+<LI>Step 6. Click OK</LI>
+</UL>
+
+Example of Substituting A Filter Rule: Modify a previously created Filter Rule that
+moves all mail with the subject of "Sylpheed Manual" to sort mail not to the
+mail folder "Sylpheed Manual Mail" but rather the mail folder "Sylpheed Questions"
+<UL>
+<LI>Step 1. Under the first Operator set's Header drop-down box, select Subject.</LI>
+<LI>Step 2. In the Keyword text box, type 'sylpheed manual' (case insensitive)</LI>
+<LI>Step 3. Leave Predicate setting on default, "Contains". Leave second Operator set empty.</LI>
+<LI>Step 4. Click "Destinations" radio button; select "Sylpheed Questions" folder</LI>
+<LI>Step 5. Click "Substitute"</LI>
+<LI>Step 6. Click OK</LI>
+</UL>
+
+Example of Deleting a Filter Rule: Remove the previously created Filter Rule which refers to Subject:Sylpheed Questions.
+<UL>
+<LI>Step 1. In the "Registered Rules" select box, highlight the filter entitled "Subject:Sylpheed Manual: :::Sylpheed Questions:1:1:m"</LI>
+<LI>Step 2. Click the "Delete" Button</LI>
+<LI>Step 3. Confirm the deletion by clicking "Yes" in the confirmation pop-up that asks, "Do you really want to delete this rule?</LI>
+<LI>Step 4. Click "OK"</LI>
+</UL>
+<H3>Registered Rule Order</H3>
+
+<P>One caveat about all this: the order in which Filter Rules are created could adversely
+affect your intended message sorting, and one needs to consider this when creating or updating Filter Rules.
+<P>For example, a Filter Rule saying, "Move anything containing 'ABC' to Mailbox X" listed above another Filter Rule saying "Move anything containing 'ABCDEF' to Mailbox Y" will cause the latter of these filters not to process.
+<P>Think about the way Sylpheed goes down its list: first, it would say.."Hmm, any messages with ABC? Ah, there's one! Move it." Then it would think, "Okay, any messages with ABCDEF?" To which the answer would be "no" - that ABCDEF was already filtered because it contained "ABC".
+<P>Bummer.
+<P>In order to avoid this, you must ensure that the more complex Filter Rule is processed first, by placing it higher than a similar, conflicting Filter Rule.
+<P>To move a Registered Rule higher or lower within the Registered Rule box, select the rule you would like to move, and click on the "Up" or "Down" buttons. This will "move" the rule up or down, above or below a potentially conflicting Filter Rule.
+<H2><A NAME="ss12.2">12.2 How to Filter Messages</A>
+</H2>
+
+<P>Filtering messages can be done in several ways:
+<UL>
+<LI>Sylpheed automatically filters incoming mail from POP servers.</LI>
+<LI>If you incorporate mail from a unix mailbox, then in the Common preferences (Configuration menu), you need to check the box called "Filter on incorporation". You find this box in the Receive tab in the space "Local spool".</LI>
+<LI>You can also select the option "Filter messages" from the Summary menu.</LI>
+</UL>
+
+Please note that, at time of writing, Sylpheed does -NOT YET- has filtering of IMAP messages enabled.
+<P>
+<H2><A NAME="ss12.3">12.3 Filtering mail with Procmail</A>
+</H2>
+
+<P>If you feel that Sylpheed has not enough options to perform filtering for you, then you can look at Sylpheed Claws which has more options for filtering. You can find the Claws version (the cutting edge, experimental version of Sylpheed) sylpheed-claws.sourceforge.net.
+<P>Another option, if you do not want to work with an experimental version of Sylpheed, is Procmail. Procmail is a powerful mail filtering program that is triggered from the Mail Transport Agent (i.e. Sendmail, Postfix, Qmail). Procmail is called by default from these programs after receiving e-mail.
+<P>The trick to procmail is to tell it that mail has to be filtered into MH mail folders. This is not difficult though.
+<P>Normally procmail moves mail into MBOX format, this is one large file containing all mails in a folder. MH uses separate files for each e-mail. All you need to do is point the destination of a procmail rule to &lt;destination folder&gt;/. It is the "slash dot" that does the trick.
+<HR>
+<A HREF="sylpheed-13.html">Next</A>
+<A HREF="sylpheed-11.html">Previous</A>
+<A HREF="sylpheed.html#toc12">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-13.html b/manual/en/sylpheed-13.html
new file mode 100644
index 00000000..4f446413
--- /dev/null
+++ b/manual/en/sylpheed-13.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Handling MIME types</TITLE>
+ <LINK HREF="sylpheed-14.html" REL=next>
+ <LINK HREF="sylpheed-12.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc13" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-14.html">Next</A>
+<A HREF="sylpheed-12.html">Previous</A>
+<A HREF="sylpheed.html#toc13">Contents</A>
+<HR>
+<H2><A NAME="s13">13. Handling MIME types</A></H2>
+
+<H2><A NAME="ss13.1">13.1 How Sylpheed checks for Mime types</A>
+</H2>
+
+<P>
+<P>(Thanks to Adriaan Penning for writing this!)
+<P>
+<P>Two files, mime.types and mailcap, are involved in determining the mime type of an attachment, and the application associated with that mime type. The mime.types file is used to determine the mimetype of attachments you add when composing a message. The mime.types file consists of lines like:
+<P>
+<P>application/pdf pdf
+<P>
+<P>Sylpheed looks for this file in SYSCONFDIR (determined at compile time), /etc/ and $HOME/.sylpheed/
+<P>If this file doesn't exist or has the wrong format, every attachment will have `application/octet-stream' as it's mime type, so the recipients mail client may not know what application to use to view the attachment.
+<P>To change the default application that sylpheed uses to view an attachment that somebody mailed you, look for a mailcap file like /etc/mailcap or $HOME/.mailcap
+<P>For example, you can add a line like this in $HOME/.mailcap if you want to view pdf files with xpdf:
+<P>
+<P>application/pdf ; xpdf %s
+<P>
+<HR>
+<A HREF="sylpheed-14.html">Next</A>
+<A HREF="sylpheed-12.html">Previous</A>
+<A HREF="sylpheed.html#toc13">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-14.html b/manual/en/sylpheed-14.html
new file mode 100644
index 00000000..77682fd8
--- /dev/null
+++ b/manual/en/sylpheed-14.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Conversion of Other Mail Format into Sylpheed (MH Format)</TITLE>
+ <LINK HREF="sylpheed-15.html" REL=next>
+ <LINK HREF="sylpheed-13.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc14" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-15.html">Next</A>
+<A HREF="sylpheed-13.html">Previous</A>
+<A HREF="sylpheed.html#toc14">Contents</A>
+<HR>
+<H2><A NAME="s14">14. Conversion of Other Mail Format into Sylpheed (MH Format)</A></H2>
+
+<H2><A NAME="ss14.1">14.1 Importing Messages of mbox Format</A>
+</H2>
+
+<P>Sylpheed lets you import messages of the Mbox format from the File menu. First you create
+the mail folder where you want the messages to end up in, then you select File->import
+Mbox file. Use the browse function to select the Mbox file and the Sylpheed mail folder,
+and press Ok. And voila, there is your mail, imported.
+<P>That was easy, wasn't it?
+<H2><A NAME="ss14.2">14.2 Importing from Windows Mailers (Becky!, AL-Mail, Outlook Express4, etc.)</A>
+</H2>
+
+<P>For import possibilities of the mail folders of these and more mail programs you
+can download the program mbx2mbox at sourceforge.net. The project is located at
+<A HREF="http://mbx2mbox.sourceforge.net">http://mbx2mbox.sourceforge.net.</A><H2><A NAME="ss14.3">14.3 Importing dbx Format of Outlook Express 5</A>
+</H2>
+
+<P>For import possibilities of the mail folders of these and more mail programs you
+can download the program mbx2mbox at sourceforge.net. The project is located at
+<A HREF="http://mbx2mbox.sourceforge.net">http://mbx2mbox.sourceforge.net.</A><H2><A NAME="ss14.4">14.4 Exporting from Sylpheed MH format to mbox</A>
+</H2>
+
+<P>Sylpheed offers a way to export a mailbox to the standard mbox format through the
+File menu. Just select the "Export to mbox file..." option and you can select the
+folder to export (assisted by a browse dialog) and also select or enter the name
+of the mbox file you wish to generate.
+<HR>
+<A HREF="sylpheed-15.html">Next</A>
+<A HREF="sylpheed-13.html">Previous</A>
+<A HREF="sylpheed.html#toc14">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-15.html b/manual/en/sylpheed-15.html
new file mode 100644
index 00000000..fb42e8d8
--- /dev/null
+++ b/manual/en/sylpheed-15.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: NetNews</TITLE>
+ <LINK HREF="sylpheed-16.html" REL=next>
+ <LINK HREF="sylpheed-14.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc15" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-16.html">Next</A>
+<A HREF="sylpheed-14.html">Previous</A>
+<A HREF="sylpheed.html#toc15">Contents</A>
+<HR>
+<H2><A NAME="s15">15. NetNews</A></H2>
+
+<P>What is netnews?
+<P>Netnews, also called Usenet, is a collection of "news servers" that contain a great deal of information. News, as it is called in short, can be about anything. About making your own wine, about old cars or radios. You name it, and there probably is a newsgroup about it.
+<P>This is what we will set up here. Accessing newsgroups. Note that this is different from e-mails. You can almost compare it to a mailing list, but yet the concept is a bit different.
+<H2><A NAME="ss15.1">15.1 Adding and Deleting Servers</A>
+</H2>
+
+<P>
+<H3>Adding a news server</H3>
+
+<P>To add a news server, go to the configuration menu and select the "create new account" option.
+There you can name the news-account to anything of your liking. This is important, so you can identify the account later.
+<P>In the BASIC tab, in the block 'personal information' you also can enter your own name, your e-mail address (so you can reply to news message by e-mail), optionally your organization (if you are organized at all).
+<P>In the block 'Server information' you select the "News (NNTP)" protocol. Forget about "Inbox", that does not matter in this setup. Next you enter the name of the newsserver you want to connect to. You can get that name from your ISP, if you don't already have that.
+<P>If you need to log into the news server, check the box next to "This server requires authentication", and then fill the fields for User ID and Password.
+<P>Next step is to go to the Send tab. Since Receive is only there for e-mail, there is no need to do anything there. You can't even do anything in the Receive tab, for that matter. So, in Send you can select a few options:
+<UL>
+<LI>If you want a date header field added to posts</LI>
+<LI>If Sylpheed should generate a Message-ID</LI>
+<LI>If you want to add user-defined headers</LI>
+</UL>
+
+The next items only apply to when you reply to a news message through e-mail. You can set an automatic CC, BCC or Reply-To address here. In case your ISP requires SMTP authentication, you can select the checkbox here below.
+<P>The next tab, Compose, allows you to select a default signature file. This will be added to each post to the newsgroups you do.
+<P>Finally, in the "Advanced" tab, you can specify the port on which Sylpheed has to connect to the news server. The default is 119, and only in rare cases you should have to do something about that.
+<P>Now you click "OK" and the account is created! You can verify this by checking the folder pane in Sylpheed. There you will see a new folder created with the name of the account you entered, and (news) behind it.
+<P>
+<H3>Deleting a news-server.</H3>
+
+<P>If you want to delete a news-account, right-click the news-folder and select "Remove news account". After confirming that you want this to be done, the account and all files related will be removed.
+<H2><A NAME="ss15.2">15.2 Subscribing and Unsubscribing to NewsGroups</A>
+</H2>
+
+<P>Okay. Here the real stuff begins. First you have to let Sylpheed load the list of news groups that is on the news system. Right-click the new NEWS folder and select "Subscribe to newsgroups". Sylpheed will tell you that the groups need to be downloaded, so sit back and wait a while. Of course, during time, new groups are added, and dead groups are removed. For this you can click the "refresh" button in the newsgroup dialog, so a new list is downloaded and you are up to date
+<P>After a while the groups are loaded and displayed in a window. Now you can look up a group that is interesting, for example comp.os.linux.networking. Click the name once and then select OK. The group will be added to the news folder as a subfolder. When you now click the name of the new subfolder, Sylpheed will connect to the news server and download the headers (subject lines, in e-mail talk), to your computer. Some groups have -large- amounts of articles, so this may take a while!!
+<P>
+<H2><A NAME="ss15.3">15.3 Reading News</A>
+</H2>
+
+<P>When the articles are displayed, in the summary view, you can click one of them to be downloaded so you can read it. This will usually go very quickly on discussion groups.
+<P>If you want to respond to a message, press Alt-R (or press "Reply") and a message window will pop up, with the name of the newsgroup already in the "To" field. Depending on whether or not you selected quoting of the message, the original message will be in the body of the message already. Write away, then send, and soon the entire world will be able to read what you wrote on the subject.
+<P>Starting a new message in a newsgroup is equally simple: press Alt-N (or click "New"), the name of the newsgroup is in the "To" field, and you can write your question or reply.
+<H3>A note about binary files</H3>
+
+<P>In newsgroups you can download binary files. These are programs, images etc. Often these are posted as so called UUencoded files. Sylpheed will as upto version 0.5.1 not decode UUencoded files. You need to save these articles to disk as separate files, and use a separate decoder program, like juju, to decode the garble of text. A UUencoded file usually looks something like this:
+<P>begin 666 sundown.jpg
+<P>after which you will find nicely formatted blocks of characters that don't seem to mean anything.
+<HR>
+<A HREF="sylpheed-16.html">Next</A>
+<A HREF="sylpheed-14.html">Previous</A>
+<A HREF="sylpheed.html#toc15">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-16.html b/manual/en/sylpheed-16.html
new file mode 100644
index 00000000..fbcffec4
--- /dev/null
+++ b/manual/en/sylpheed-16.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Customization (General Setup)</TITLE>
+ <LINK HREF="sylpheed-17.html" REL=next>
+ <LINK HREF="sylpheed-15.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc16" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-17.html">Next</A>
+<A HREF="sylpheed-15.html">Previous</A>
+<A HREF="sylpheed.html#toc16">Contents</A>
+<HR>
+<H2><A NAME="s16">16. Customization (General Setup)</A></H2>
+
+<P>Sylpheed offers you several ways to customize it's interface for your personal use.
+<P>
+<H2><A NAME="ss16.1">16.1 General Setup Window</A>
+</H2>
+
+<P>For making changes to Sylpheed's interface, you need to open the "common preferences" in the Configuration menu.
+<P>In here you will find a tabbed window that offers the following possibility to customize Sylpheed.
+<H2><A NAME="ss16.2">16.2 Description of Each Entry</A>
+</H2>
+
+<P>In the third tab, "Compose", the following settings can be changed:
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI>Quoting the original text of a message</LI>
+<LI>Define the quoting character that is put in front of each line of text.</LI>
+<LI>Define the text that is placed in front of the quoted text</LI>
+<LI>An optional signature separator. This is a combination of characters that are placed in front of a signature text.</LI>
+<LI>Whether or not to insert the signature automatically</LI>
+<LI>Define if the account that recieved the message should automatically be used as the account from which the reply is sent. This also influences the signature to be selected.</LI>
+<LI>Set the position of the line where wrapping should occur.</LI>
+<LI>Select if the quoted text should be wrapped also.</LI>
+<LI>Indicate if e-mail text should be wrapped or not. If you choose not to select wrapping, then the lines you wrote will not be chopped up by carriage return/line feed characters.</LI>
+</UL>
+
+In the fourth tab, "Display", you can set or unset the following options:
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI><CODE>Font.</CODE> You can set the font that is used to display the messages.</LI>
+<LI><CODE>Translate header name.</CODE> This options changes the behaviour of the different headers.</LI>
+<LI><CODE>Unread number.</CODE> This toggles the display of the number of unread messages next to each mailbox.</LI>
+<LI><CODE>Display recipient.</CODE> With this option you can tell Sylpheed to show the recipient in the summary view when you are the one who sent the message.</LI>
+<LI><CODE>Enable horizontal scrollbar.</CODE> This option enables or disables showing the horizontal toolbar beneath the summary view. With the bar disabled, you cannot scroll to the right to see extremely long message subjects.</LI>
+<LI><CODE>Expand threads.</CODE> If you disable this options and you have enabled the Threaded view through the Summary menu, threads are shown as collapsed lines with a '+' sign in front of them. Enable this option to show all the messages in a thread.</LI>
+<LI><CODE>Display unread with bold font.</CODE> If you enable this checkbox, messages in the summary view that have not been read yet are shown in a bold font. Unchecking this option will of course show all messages in the default font.</LI>
+<LI><CODE>Date format.</CODE> This option puts you in charge of the way the date of an e-mail message is shown. You can click the "..." button to open a new window. In there you see the codings that you can use to format the date. As you change the codings, an example is shown beneath the coding sequence of how your date will look.</LI>
+<LI><CODE>Set display item.</CODE> This button allows you to select the specific columns that will be shown in the summary view.</LI>
+</UL>
+
+Next to these options, there is the message tab, in which you can set the following choices:
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI><CODE>Enable colorization.</CODE> When you enable this option, you can define with what colors the message text and the quotings will be displayed.</LI>
+<LI><CODE>Display 2-byte alphabet and numeric with 1 character.</CODE> This option is necessary for double-byte languages as Japanese and Chinese.</LI>
+<LI><CODE>Display header pane above message view.</CODE> Enabled, this option shows the From, To and Subject headers from the selected e-mail in a separate area over the message view.</LI>
+<LI><CODE>Display short headers on message view.</CODE> This option lets you select all the headers that will be shown in the message view window. There are options to enable all, no or selected headers.</LI>
+<LI><CODE>Line space.</CODE> This option lets you select how many pixels of space Sylpheed has to show between the lines of text in the message view window.</LI>
+<LI><CODE>Leave space on head.</CODE> Checking this box will make the start of new lines (unwrapped, where the writer has pressed the Enter/Return key) indent a few pixels. This can be useful to read larger e-mails.</LI>
+<LI><CODE>Scroll half page.</CODE> When enabled, the text in the message view will only scroll half a page instead of a whole page when pressing the space bar.</LI>
+<LI><CODE>Smooth scroll.</CODE> Enabling this box will make the text in the message view scroll in a smooth, sliding way. For the eye this can be pleasing, it is a personal preference.</LI>
+</UL>
+
+The tab "Interface" allows even more customization of Sylpheed. This tab features:
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI>Opening the first unread message when you enter a folder.</LI>
+<LI>Automatically move focus to the inbox after new mail was received.</LI>
+<LI>Immediate execution of commands like delete, move or copy.</LI>
+<LI>Influence the way the "receive" dialog box behaves when new mail is retrieved (Always, When a window is active, Never).</LI>
+<LI>Double clicking an e-mail address can be used to put that address in a new e-mail.</LI>
+<LI>Confirming if you want to exit Sylpheed.</LI>
+<LI>Cleaning the trashbox when exiting Sylpheed.</LI>
+<LI>Have Sylpheed ask you to clean the trash before it is done.</LI>
+<LI>Warn you when exiting Sylpheed when there are still messages queued to be sent.</LI>
+</UL>
+
+Finally there is the "Other" tab. In here you can define the programs you want as helper applications for Sylpheed.
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI><CODE>The web browser.</CODE> Here you can enter the name of your favorite web browser (Netscape, Opera, Mozilla, Lynx etc.). Add the %s parameter to the command so Sylpheed knows it has to provide the text you clicked on as the URL that the browser has to visit.</LI>
+<LI><CODE>Printing.</CODE> Here you can define the program that should be used to print. Default is lpr, and the %s is the name of the temporary file that Sylpheed creates for lpr to print.</LI>
+<LI><CODE>External editor.</CODE> You can select an external editor to write your e-mails with, for example vi, emacs or gedit. Note that for text-based editors like vi, you need to define a terminal window, e.g. <CODE>xterm -e vi %s</CODE>. Otherwise there is no place that the editor will be able to show up. Here too, the %s parameter is the name of a temporary file that is created by Sylpheed.</LI>
+</UL>
+<HR>
+<A HREF="sylpheed-17.html">Next</A>
+<A HREF="sylpheed-15.html">Previous</A>
+<A HREF="sylpheed.html#toc16">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-17.html b/manual/en/sylpheed-17.html
new file mode 100644
index 00000000..c1ba27dc
--- /dev/null
+++ b/manual/en/sylpheed-17.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Reference</TITLE>
+ <LINK HREF="sylpheed-18.html" REL=next>
+ <LINK HREF="sylpheed-16.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc17" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-18.html">Next</A>
+<A HREF="sylpheed-16.html">Previous</A>
+<A HREF="sylpheed.html#toc17">Contents</A>
+<HR>
+<H2><A NAME="s17">17. Reference</A></H2>
+
+<P>In this section you will find a few pieces of information that might be handy in making Sylpheed more clear for you in respect to the used shortcut keys, and a layout of the format of the address book.
+<H2><A NAME="shortcut"></A> <A NAME="ss17.1">17.1 Short-Cut Key List</A>
+</H2>
+
+<P>
+<H3>One-key shortcuts:</H3>
+
+<P>
+<UL>
+<LI>a: create a new message</LI>
+<LI>d: delete the selected message</LI>
+<LI>f: forward the selected message#</LI>
+<LI>g: go to a specific folder through a browsing dialog</LI>
+<LI>n: jump to the next message/next part of a multipart message</LI>
+<LI>p: jump to the previous message/previous part of a multipart message</LI>
+<LI>v: switch on/off the message view</LI>
+<LI>w: same as a</LI>
+<LI>y: Opens save as... dialog</LI>
+</UL>
+<H3>Shortcuts to the File menu:</H3>
+
+<P>
+<UL>
+<LI>Alt-F: open FILE menu</LI>
+<LI>Alt-P: print</LI>
+<LI>Alt-W: close</LI>
+<LI>Alt-Q: exit</LI>
+</UL>
+<H3>Shortcuts to the Edit menu</H3>
+
+<P>
+<UL>
+<LI>Alt-E: open EDIT menu</LI>
+<LI>Ctrl-C: copy</LI>
+<LI>Ctrl-A: select all</LI>
+<LI>Ctrl-S: search</LI>
+</UL>
+<H3>Shortcuts to the View menu</H3>
+
+<P>
+<UL>
+<LI>Alt-V: open VIEW menu</LI>
+</UL>
+<H3>Shortcuts to the Message menu</H3>
+
+<P>
+<UL>
+<LI>Alt-M: open MESSAGE menu</LI>
+<LI>Alt-I: check mail for current account</LI>
+<LI>Shift-Alt-I: Check mail for all accounts</LI>
+<LI>Alt-N: compose new message</LI>
+<LI>Alt-R: reply to message</LI>
+<LI>Ctrl-Alt-R: reply to sender (contrary to reply to e.g. mailing list)</LI>
+<LI>Shift-Alt-R: reply to all (includes all addresses in To: and Cc:)</LI>
+<LI>Ctrl-F: forward message</LI>
+<LI>Shift-Ctrl-F: forward message as attachment</LI>
+<LI>Alt-O: move message</LI>
+<LI>Alt-D: delete message</LI>
+<LI>Shift-Ctrl-N: open message in new window</LI>
+<LI>Ctrl-U: view message source</LI>
+<LI>Ctrl-H: show all message headers</LI>
+</UL>
+<H3>Shortcuts to the Summary menu</H3>
+
+<P>
+<UL>
+<LI>Alt-S: open SUMMARY menu<P>
+</LI>
+<LI>Alt-X: execute (pending commands, only useful when commands are not executed immediately)</LI>
+<LI>Alt-U: update view</LI>
+<LI>Alt-G: go to other folder</LI>
+<LI>Ctrl-T: thread view</LI>
+<LI>Shift-Ctrl-T: unthread view</LI>
+</UL>
+<H3>Shortcuts to the Tool menu</H3>
+
+<P>
+<UL>
+<LI>Alt-T: open tool menu</LI>
+<LI>Alt-A: open addressbook</LI>
+<LI>Alt-L: open logfile</LI>
+</UL>
+<H2><A NAME="ss17.2">17.2 Data Format of Address Book</A>
+</H2>
+
+<P>The addressbook is located in &nbsp;/.sylpheed. It is named addressbook.xml.
+The general format of the addressbook is:
+<P>
+<P>
+<HR>
+<PRE>
+&lt; addressbook &gt;&lt;p>
+ &lt; common_address &gt;&lt;p>
+ &lt; group name="Common addresses" &gt;&lt;p>
+ &lt; item &gt;&lt;p>
+ &lt; name &gt; Paul &lt; /name &gt;&lt;p>
+ &lt; address &gt; paul@nlpagan.net &lt; /address &gt;&lt;p>
+ &lt; remarks &gt; Writes Sylph. manual &lt; /remarks &gt;&lt;p>
+ &lt; /item &gt;&lt;p>
+ &lt; /group &gt;&lt;p>
+ &lt; /common_address &gt;&lt;p>
+&lt; /addressbook &gt;
+</PRE>
+<HR>
+<P>
+<HR>
+<A HREF="sylpheed-18.html">Next</A>
+<A HREF="sylpheed-16.html">Previous</A>
+<A HREF="sylpheed.html#toc17">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-18.html b/manual/en/sylpheed-18.html
new file mode 100644
index 00000000..1447b793
--- /dev/null
+++ b/manual/en/sylpheed-18.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: FAQ</TITLE>
+ <LINK HREF="sylpheed-19.html" REL=next>
+ <LINK HREF="sylpheed-17.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc18" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-19.html">Next</A>
+<A HREF="sylpheed-17.html">Previous</A>
+<A HREF="sylpheed.html#toc18">Contents</A>
+<HR>
+<H2><A NAME="s18">18. FAQ</A></H2>
+
+<P>You can find the latest, updated, FAQ (Frequently Asked Questions list) at
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A><P>
+<H2><A NAME="ss18.1">18.1 Unread News Messages</A>
+</H2>
+
+<H2><A NAME="ss18.2">18.2 Using MSN Mail Accounts</A>
+</H2>
+
+<H2><A NAME="ss18.3">18.3 Changing Fonts on Menu, etc.</A>
+</H2>
+
+<P>If you want to change the font that shows the menu of Sylpheed, this is controlled by the window manager that you are using. You have to go into the setup of the window manager (KDE, Gnome, XFCE) and change the font to your desired one.
+<P>Changing the font of the views of Sylpheed is done by selecting "Common preferences" in the Configuration menu. There you select the "Display" tab, and in the first section of the window you can browse the fonts available on your computer.
+<H2><A NAME="ss18.4">18.4 Changing Key Binding of Short-Cut Key</A>
+</H2>
+
+<P>Sylpheed's graphical interface is based on GTK. This means that it is very simple to change the key binding (shortcut key, hotkey) for menu items. If you are used to a certain key combination from another program, you can tell Sylpheed to use that same key combination.
+<P>The procedure is very simple. Suppose you want to change the key binding for getting new mail (message menu) from Alt-I to Ctrl-M.
+<P>
+<UL>
+<LI>Open the message menu with the mouse or by pressing Alt-M</LI>
+<LI>Select the "get new mail" option (do not click it, this will activate the function!). If you use the mouse, just move the mouse cursor over the option.</LI>
+<LI>Now you press Ctrl-M. You will immediately see the new key combination appear on the menu.</LI>
+</UL>
+
+Congratulations, you have just changed a key binding. This way you can change all the options that you want. Do note that it is best to use just the alt, shift and ctrl key combinations. Several functions within Sylpheed are called up by one-key actions which are programmed in.
+<HR>
+<A HREF="sylpheed-19.html">Next</A>
+<A HREF="sylpheed-17.html">Previous</A>
+<A HREF="sylpheed.html#toc18">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-19.html b/manual/en/sylpheed-19.html
new file mode 100644
index 00000000..a5e80476
--- /dev/null
+++ b/manual/en/sylpheed-19.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Information</TITLE>
+ <LINK HREF="sylpheed-20.html" REL=next>
+ <LINK HREF="sylpheed-18.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc19" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-20.html">Next</A>
+<A HREF="sylpheed-18.html">Previous</A>
+<A HREF="sylpheed.html#toc19">Contents</A>
+<HR>
+<H2><A NAME="s19">19. Information</A></H2>
+
+<H2><A NAME="ss19.1">19.1 Websites on Sylpheed</A>
+</H2>
+
+<P>Here are some links to the Sylpheed FAQ in other languages:
+<P>
+<UL>
+<LI>
+<A HREF="http://sylpheeddoc.sourceforge.net/fr/faq/sylpheed-faq.html">http://sylpheeddoc.sourceforge.net/fr/faq/sylpheed-faq.html</A>, courtesy of francois Barrire</LI>
+<LI>
+<A HREF="http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedfaq-ja.htm">http://silver.lacmhacarh.gr.jp/sylpheed/sylpheedfaq-ja.htm</A>, SYLPHEED FAQ in Japanese, courtesy of WAKAI "SilverRain" Kazunao</LI>
+<LI>
+<A HREF="http://beatles.cselt.it/~mau/sylpheed/sylpheedfaq.html">http://beatles.cselt.it/~mau/sylpheed/sylpheedfaq.html</A>, SYLPHEED FAQ in Italian, courtesy of Maurizio Codogno</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.html">http://www.synconet.de/privhome/rs/sylpheed_faq.html</A>, SYLPHEED FAQ in German (HTML-Version)</LI>
+<LI>
+<A HREF="http://www.synconet.de/privhome/rs/sylpheed_faq.txt">http://www.synconet.de/privhome/rs/sylpheed_faq.txt</A>, the german text-only version, both courtesy of Ralf Schiffers.</LI>
+<LI>
+<A HREF="http://www.cs.uoi.gr/~csst9910/el_sylfaq.html">http://www.cs.uoi.gr/~csst9910/el_sylfaq.html</A>, SYLPHEED FAQ in Greek courtesy of Theofilos Intzoglou.</LI>
+<LI>
+<A HREF="http://sylpheed.republika.pl">http://sylpheed.republika.pl</A>, SYLPHEED FAQ in Polish courtesy of Przemyslaw Sulek.</LI>
+<LI>A spanish version of the FAQ is written by Marcelo Ramos:
+<A HREF="http://www.geocities.com/hackpando/sylpheedfaq.html">http://www.geocities.com/hackpando/sylpheedfaq.html</A>, HTML version,
+<A HREF="http://www.geocities.com/hackpando/sylpheedfaq.txt">http://www.geocities.com/hackpando/sylpheedfaq.txt</A>, Text version</LI>
+<LI>In addition, the spanish FAQ is also available from Ricardo Mones Lastra:
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/faq-es/">http://www.aic.uniovi.es/mones/sylpheed/faq-es/</A>, Linked HTML
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/faq-es.dvi">http://www.aic.uniovi.es/mones/sylpheed/faq-es.dvi</A>, (Device independent)
+<A HREF="http://www.aic.uniovi.es/mones/sylpheed/faq-es.ps">http://www.aic.uniovi.es/mones/sylpheed/faq-es.ps</A>, the Spanish FAQ as a Postscript file.</LI>
+<LI>
+<A HREF="http://linux.fisek.com.tr/dfisek/sylpheed-sss.html">http://linux.fisek.com.tr/dfisek/sylpheed-sss.html</A>, the turkish FAQ for Sylpheed is available, thanks to the translating of Doruk Fisek.</LI>
+<LI>
+<A HREF="http://hem.passagen.se/webplats/sylpheed-faq-se.html">http://hem.passagen.se/webplats/sylpheed-faq-se.html</A>, the Swedish FAQ, courtesy of Mattias Stergren</LI>
+</UL>
+<H2><A NAME="ss19.2">19.2 Mailing Lists</A>
+</H2>
+
+<P>If you want to stay up to date on Sylpheed, and want to talk about the program with other users, you can join the mailing list.
+<P>Send a mail to sylpheed-ctl@good-day.net that says
+<P><CODE>subscribe Your Name</CODE>
+<P>in the body.
+<P>The server returns the mail once for the first registration request that asks the confirmation: "May I put you on this mailing list?" that includes the following phrase (this number is merely an example).
+<P><CODE>confirm 84682771 Anne Shirley</CODE>
+<P>This is a precaution for mischief like subscribing you to the list against your wish.
+<P>If you received the entry confirmation mail, send a mail that includes the phrase:
+<P><CODE>confirm Password(a number) Your Name</CODE>
+<P>to the address for registration: sylpheed-ctl@good-day.net again. Then, it is considered that you have confirmed the registration and you are registered to the server.
+<P>The address for posting to the list is sylpheed@good-day.net.
+<P>Notice: If you lost the mail that says
+<P>confirm Password(a number) Your Name
+<P>or you became confused and want to do from start, do them over from the start, in other words, send
+<P><CODE>subscribe Anne Shirley</CODE>
+<P>to sylpheed-ctl@good-day.net again.
+<P>
+<H3>How to unsubscribe.</H3>
+
+<P>Send a mail to sylpheed-ctl@good-day.net that says
+<P><CODE>unsubscribe</CODE>
+<P>in the body.
+<P>
+<H2><A NAME="ss19.3">19.3 Anonymous CVS</A>
+</H2>
+
+<P>This section has not been written yet.
+<H2><A NAME="ss19.4">19.4 How to tell another program to use Sylpheed as e-mail program</A>
+</H2>
+
+<P>If you wish to use Sylpheed from within for example Netscape or Opera, then you need to go to the `preferences` section, then choose `applications` and in the email client part, you need to enter <CODE>sylpheed --compose</CODE>.
+<HR>
+<A HREF="sylpheed-20.html">Next</A>
+<A HREF="sylpheed-18.html">Previous</A>
+<A HREF="sylpheed.html#toc19">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-2.html b/manual/en/sylpheed-2.html
new file mode 100644
index 00000000..decc6fc2
--- /dev/null
+++ b/manual/en/sylpheed-2.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Quick-guide to mail setup</TITLE>
+ <LINK HREF="sylpheed-3.html" REL=next>
+ <LINK HREF="sylpheed-1.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-3.html">Next</A>
+<A HREF="sylpheed-1.html">Previous</A>
+<A HREF="sylpheed.html#toc2">Contents</A>
+<HR>
+<H2><A NAME="s2">2. Quick-guide to mail setup</A></H2>
+
+<H2><A NAME="ss2.1">2.1 Setup for reading your Unix mailbox in a hurry</A>
+</H2>
+
+<P>
+<UL>
+<LI>In the configuration menu, select "Create new account".</LI>
+<LI>In the
+<A HREF="sylpheed-7.html#Basic">Basic</A>
+ tab, name the account. You can select this account to be the default account ("Usually used").</LI>
+<LI>Enter your name and e-mail address.</LI>
+<LI>To select your local unix mailbox, in the Protocol box you select "None (local)".</LI>
+<LI>When you select this option, the "Server for receiving" is greyed out, since this is not relevant. You can enter the server to send (SMTP) in this tab also.</LI>
+</UL>
+
+Settings in the remaining tabs can usually be left at default values.
+<P>
+<P>
+<P>
+<P>The
+<A HREF="sylpheed-7.html#Receive">Receive</A>
+ tab is not used in this setup, since you are not polling a server, your mail is delivered to you.
+<P>In the
+<A HREF="sylpheed-7.html#Send">Send</A>
+ tab you can select headers and SMTP authentication.
+<P>
+<P>
+<P>
+<P>In the
+<A HREF="sylpheed-7.html#Compose">Compose</A>
+ tab you can define your signature file.
+<P>
+<P>
+<P>
+<P>In the
+<A HREF="sylpheed-7.html#Advanced">Advanced</A>
+ tab you can edit the portnumbers for the servers you will be using. This normally will need no change.
+<P>This is basically everything you need to start using Sylpheed for local mailboxes. You can select "Message -> receive new mail" or press the
+<A HREF="sylpheed-17.html#shortcut">shortcut</A>
+ and see if there is new mail!
+<H2><A NAME="ss2.2">2.2 Setup for reading POP3 mail in a hurry</A>
+</H2>
+
+<P>
+<UL>
+<LI>In the configuration menu, select "Create new account".</LI>
+<LI>In the
+<A HREF="sylpheed-7.html#Basic">Basic</A>
+ tab, name the account. You can select this account to be the default account ("Usually used").</LI>
+<LI>Enter your name and e-mail address.</LI>
+<LI>To check your POP3 mail, in the Protocol box you select "POP3 (normal)".</LI>
+<LI>Enter the server information for "Server for receiving". You can then enter the server to send (SMTP) in this tab.</LI>
+</UL>
+
+Settings in the remaining tabs can usually be left at default values.
+<P>
+<P>
+<P>
+<P>The
+<A HREF="sylpheed-7.html#Receive">Receive</A>
+ tab offers advanced POP3 options.
+<P>
+<P>
+<P>
+<P>In the
+<A HREF="sylpheed-7.html#Send">Send</A>
+ tab you can select headers and SMTP authentication.
+<P>
+<P>
+<P>
+<P>In the
+<A HREF="sylpheed-7.html#Compose">Compose</A>
+ tab you can define your signature file.
+<P>
+<P>
+<P>
+<P>In the
+<A HREF="sylpheed-7.html#Advanced">Advanced</A>
+ tab you can edit the portnumbers for the servers you will be using. This normally will need no change.
+<P>This is basically everything you need to start using Sylpheed for POP3 mailsystems. You select "Message -> receive new mail" or press the
+<A HREF="sylpheed-17.html#shortcut">shortcut</A>
+ and see if there is new mail!
+<HR>
+<A HREF="sylpheed-3.html">Next</A>
+<A HREF="sylpheed-1.html">Previous</A>
+<A HREF="sylpheed.html#toc2">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-20.html b/manual/en/sylpheed-20.html
new file mode 100644
index 00000000..73607cca
--- /dev/null
+++ b/manual/en/sylpheed-20.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: About This Document</TITLE>
+ <LINK HREF="sylpheed-19.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc20" REL=contents>
+</HEAD>
+<BODY>
+Next
+<A HREF="sylpheed-19.html">Previous</A>
+<A HREF="sylpheed.html#toc20">Contents</A>
+<HR>
+<H2><A NAME="s20">20. About This Document</A></H2>
+
+<H2><A NAME="ss20.1">20.1 Copyright Notice</A>
+</H2>
+
+<P>Copyright (C) 2001 Hiroyuki Yamamoto
+<P>This program has been placed in the GPL.
+<H2><A NAME="ss20.2">20.2 GNU General Public License</A>
+</H2>
+
+<P>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 the Free Software Foundation; either version 2
+of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details. You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+<H2><A NAME="ss20.3">20.3 Where to Get the Latest Version of This Document</A>
+</H2>
+
+<P>You can find the latest version of this document on the site of the Sylpheed documentation project at
+<P>
+<A HREF="http://sylpheeddoc.sf.net">http://sylpheeddoc.sf.net</A><P>Here FAQ and manual are uploaded as HTML pages, and in form of SGML files within the CVS repository.
+<H2><A NAME="ss20.4">20.4 Ending Remark</A>
+</H2>
+
+<P>I wish to thank everyone involved in the Sylpheed project.
+<P>Hiroyuki Yamamoto and all the other developers for the fabulous program they have created.
+<P>Francois Barriere who helped me become friends with the CVS system.
+<P>All the help I received from everyone on the Sylpheed mailing list while writing the FAQ and this manual.
+<P>Nick Selby, for offering his well appreciated assistance in writing along in this manual.
+<P>All the people around the world who work hard on keeping the manual and FAQ up to date
+<P>And Linus Torvald, who got us a great operating system! ;-)
+<HR>
+Next
+<A HREF="sylpheed-19.html">Previous</A>
+<A HREF="sylpheed.html#toc20">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-3.html b/manual/en/sylpheed-3.html
new file mode 100644
index 00000000..90935f06
--- /dev/null
+++ b/manual/en/sylpheed-3.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Quick-guide for news setup</TITLE>
+ <LINK HREF="sylpheed-4.html" REL=next>
+ <LINK HREF="sylpheed-2.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-4.html">Next</A>
+<A HREF="sylpheed-2.html">Previous</A>
+<A HREF="sylpheed.html#toc3">Contents</A>
+<HR>
+<H2><A NAME="s3">3. Quick-guide for news setup</A></H2>
+
+<P>
+<H2><A NAME="ss3.1">3.1 Getting news in a hurry.</A>
+</H2>
+
+<P>
+<P>In the configuration menu, select "Create new account"
+<P>In the "Basic" tab, enter the relevant data. You name the account, enter your name and e-mail address, etc. To connect to news, in the Protocol box you select "News (NNTP)".
+<P>
+<P>
+<P>
+<P>
+<P>Enter the newsserver information.
+<P>Skip the "Receive" tab.
+<P>In the "Send" tab you can set up some more settings.
+<P>In the "Compose" tab you can define your signature file.
+<P>
+<P>
+<P>
+<P>
+<P>In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change.
+<P>Close the dialogs, right click the new News folder in the folder pane and select "Subscribe to newsgroups". If not done already, a list of groups will be downloaded from the server. From there you will find your way, so good luck!
+<HR>
+<A HREF="sylpheed-4.html">Next</A>
+<A HREF="sylpheed-2.html">Previous</A>
+<A HREF="sylpheed.html#toc3">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-4.html b/manual/en/sylpheed-4.html
new file mode 100644
index 00000000..79d3bf68
--- /dev/null
+++ b/manual/en/sylpheed-4.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Installation.</TITLE>
+ <LINK HREF="sylpheed-5.html" REL=next>
+ <LINK HREF="sylpheed-3.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc4" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-5.html">Next</A>
+<A HREF="sylpheed-3.html">Previous</A>
+<A HREF="sylpheed.html#toc4">Contents</A>
+<HR>
+<H2><A NAME="s4">4. Installation.</A></H2>
+
+<H2><A NAME="ss4.1">4.1 Required environment</A>
+</H2>
+
+<P>To succesfully compile Sylpheed, you need at least:
+<UL>
+<LI>Any POSIX compliant UNIX or similar OS eg. Linux, FreeBSD, Solaris</LI>
+<LI>GTK+ 1.2.6 or later</LI>
+<LI>A recent ANSI C compiler (gcc 2.7.2.3 should also work) Note: it is reported that Sun C will not compile Sylpheed.</LI>
+</UL>
+
+Optionally you need:
+<UL>
+<LI>Imlib or gdk-pixbuf (for built-in image view)</LI>
+<LI>libcompface (for X-Face)</LI>
+<LI>libjconv (for I18N)</LI>
+<LI>GPGME (for GnuPG)</LI>
+<LI>OpenLDAP (for LDAP connection)</LI>
+<LI>Jpilot (for Palm addressbook use)</LI>
+<LI>the equivalent of GTK+-devel and Xfree86-devel. (Otherwise ./configure will fail.)</LI>
+</UL>
+
+Notice: Sylpheed may be unstable depending on the environment. Please use the newest version of libraries if possible.
+<H2><A NAME="ss4.2">4.2 Environments known as valid for Sylpheed</A>
+</H2>
+
+<P>
+<UL>
+<LI>Debian GNU/Linux unstable (sid) (glibc 2.2) (development environment) </LI>
+<LI>Debian GNU/Linux 2.2 (potato) (glibc 2.1.3) </LI>
+<LI>Kondara MNU/Linux (glibc 2.1.x) </LI>
+<LI>Vine Linux 1.1 (glibc 2.0.x + libwcsmbs) </LI>
+<LI>Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC) </LI>
+<LI>Vine Linux 2.1 </LI>
+<LI>Laser5 Linux 6.0 (glibc 2.1.x) , 6.2, 6.4</LI>
+<LI>TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs) </LI>
+<LI>TurboLinux 6.0 (glibc 2.1.2) </LI>
+<LI>Miracle Linux Standard Edition Version1.0 </LI>
+<LI>Miracle Linux for PostgreSQL Version1.0 </LI>
+<LI>Miracle Linux for Samba Version1.0 </LI>
+<LI>RedHat Linux 5.2 (glibc 2.0.7) </LI>
+<LI>RedHat Linux 6.0 </LI>
+<LI>RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x) </LI>
+<LI>RedHat Linux 6.2 / 6.2J (glibc 2.1.x) </LI>
+<LI>RedHat Linux 7.0 / 7.0J </LI>
+<LI>RedHat Linux 7.1</LI>
+<LI>RedHat Linux 7.2 (beta 'Roswell')</LI>
+<LI>LinuxPPC2000 + Yukikaze(Japanization kit) </LI>
+<LI>Linux2000G (Intel, PowerPC) </LI>
+<LI>HOLON Linux 2.0 (Intel / PPC) </LI>
+<LI>Linux for PPC Japanese Edition 2.0 and 3.0 (glibc 2.1.x) </LI>
+<LI>Linux MLD4</LI>
+<LI>Linux MLD5 </LI>
+<LI>Plamo Linux 2.0 </LI>
+<LI>Slackware 7.1 </LI>
+<LI>Linux Mandrake 7.0 through 8.0</LI>
+<LI>SuSE Linux 6.3 (glibc 2.1.2) </LI>
+<LI>SuSE Linux 6.4, 7.0, 7.1</LI>
+<LI>OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3) </LI>
+<LI>Caldera OpenDesktop 2.4 </LI>
+<LI>Conectiva Linux 4.0 and 5.0</LI>
+<LI>Vector Linux 1.5 </LI>
+<LI>FreeBSD releases 3.2, 3.4, 4.0, 4.1, 4.2 and 5.0</LI>
+<LI>NetBSD 1.4.2 </LI>
+<LI>NetBSD 1.5 + XPG4DL </LI>
+<LI>OpenBSD 2.7 </LI>
+<LI>OpenBSD 2.8 (i386) </LI>
+<LI>BSD/OS 4.0.1 </LI>
+<LI>Solaris 2.5, 2.5.2., 2.6, 7, 8</LI>
+<LI>IRIX 6.3 and 6.5, 6.5.8m </LI>
+<LI>HP-UX 10.20 </LI>
+<LI>Mac OS X (Darwin 1.3) + Xtools (has locale problem) </LI>
+<LI>Windows (cygwin + GTK+ for win32) (unstable) </LI>
+</UL>
+<H2><A NAME="ss4.3">4.3 Nuts and bolts of installation</A>
+</H2>
+
+<P>
+<UL>
+<LI>Download the latest version of the Sylpheed package from
+<A HREF="http://sylpheed.good-day.net/">http://sylpheed.good-day.net/</A></LI>
+<LI>Untar the sourcefiles to a new directory</LI>
+<LI>tar -xvfz sylpheed-.tar.gz (for tar.gz)</LI>
+<LI>tar -xvfI sylpheed-.tar.bz2 (for tar.bz2) </LI>
+<LI>cd to the new sylpheed- directory </LI>
+<LI>Run ./configure to check your environment and create the installation make files </LI>
+<LI>Run the 'make' program which will compile the sources. Do not proceed with this step if there are fatal errors in the previous step. Fatal errors indicate that things are missing in order to compile Sylpheed properly. </LI>
+</UL>
+<P>If the make process has completed, run "make install" (as root), to install the program and the supportfiles
+<H2><A NAME="ss4.4">4.4 Installation on Linux using RPM</A>
+</H2>
+
+<P>As root, run the "rpm -ivh " command on the RPM file you downloaded. As soon as this process is complete you can run Sylpheed as user.
+<H2><A NAME="ss4.5">4.5 Installation on Debian Linux</A>
+</H2>
+
+<P>With an internet connection :
+<P>apt-get install sylpheed (to install it with a internet connection)
+<P>Without internet connection, fetch the debian package for example on
+<A HREF="http://packages.debian.org/unstable/mail/sylpheed.html">http://packages.debian.org/unstable/mail/sylpheed.html</A><P>dpkg -i sylpheedx.x.x-1i386.deb
+<P>dpkg --install sylpheedx.x.x-1i386.deb
+<H2><A NAME="ss4.6">4.6 Installation on FreeBSD</A>
+</H2>
+
+<P>using the /stand/sysinstall tool (it is a menu-based interface) :
+<P>run "/stand/sysinstall" as root
+<P>in the main menu choose "Configure" -> "Packages" -> "mail", then "sylpheed" then, back to the "Packages" list, choose "Install"
+<P>Using the ports
+<P>Get the sylpheed port on :
+<P>
+<A HREF="ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4.3-release/mail">ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4.3-release/mail</A><P>then, as root: pkg-add sylpheed-0.x.x.tgz
+<P>using the ports with compiling:
+<P>first, update your port, fetch it on
+<A HREF="http://www.freebsd.org/ports/mail.html">http://www.freebsd.org/ports/mail.html</A><P>cd /usr/ports/mail/sylpheed
+<P>make
+<P>If it succeeds, type "make install"
+<P>In case it fails, fetch the required package if necessary
+(on the same page), put the package file in /usr/ports/distfiles/
+then :
+<UL>
+<LI>cd /usr/ports/mail/sylpheed</LI>
+<LI>make</LI>
+<LI>make install</LI>
+</UL>
+<P>Need a more up-to-date version ?
+<P>Just use the Unix standard method (see "Nuts and bolts of installation")
+<HR>
+<A HREF="sylpheed-5.html">Next</A>
+<A HREF="sylpheed-3.html">Previous</A>
+<A HREF="sylpheed.html#toc4">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-5.html b/manual/en/sylpheed-5.html
new file mode 100644
index 00000000..97d5f3f3
--- /dev/null
+++ b/manual/en/sylpheed-5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Starting and quitting Sylpheed</TITLE>
+ <LINK HREF="sylpheed-6.html" REL=next>
+ <LINK HREF="sylpheed-4.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc5" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-6.html">Next</A>
+<A HREF="sylpheed-4.html">Previous</A>
+<A HREF="sylpheed.html#toc5">Contents</A>
+<HR>
+<H2><A NAME="s5">5. Starting and quitting Sylpheed</A></H2>
+
+<H2><A NAME="ss5.1">5.1 Starting Sylpheed</A>
+</H2>
+
+<P>Starting Sylpheed can be done by typing "sylpheed" on a prompt in a terminal and pressing Enter. You can also add Sylpheed to a menu in KDE or Gnome, or create a shortcut to it on the desktop, if your window manager allows that.
+<P>When you first start Sylpheed, the program will ask you where you want to store the mails that you downloaded. You can accept the default ($HOME/Mail) or set up your own mail folder.
+<P>Sylpheed will then load with it's default settings. The way to change these are written about further on in this manual.
+<H2><A NAME="ss5.2">5.2 Quitting Sylpheed</A>
+</H2>
+
+<P>Ending Sylpheed can be done in several ways:
+<UL>
+<LI>Select "quit" from the File menu</LI>
+<LI>Press Ctrl-Q</LI>
+<LI>Click the "program close" button in the titlebar.</LI>
+</UL>
+<HR>
+<A HREF="sylpheed-6.html">Next</A>
+<A HREF="sylpheed-4.html">Previous</A>
+<A HREF="sylpheed.html#toc5">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-6.html b/manual/en/sylpheed-6.html
new file mode 100644
index 00000000..1c5ac96d
--- /dev/null
+++ b/manual/en/sylpheed-6.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Going through the parts of Sylpheed</TITLE>
+ <LINK HREF="sylpheed-7.html" REL=next>
+ <LINK HREF="sylpheed-5.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc6" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-7.html">Next</A>
+<A HREF="sylpheed-5.html">Previous</A>
+<A HREF="sylpheed.html#toc6">Contents</A>
+<HR>
+<H2><A NAME="s6">6. Going through the parts of Sylpheed</A></H2>
+
+<H2><A NAME="ss6.1">6.1 The menu options of Sylpheed.</A>
+</H2>
+
+<P>The menu in Sylpheed is the primary entry to all the things you can do with Sylpheed. The menu structure gives you following options:
+<H3>File menu</H3>
+
+<P>
+<UL>
+<LI>Add mailbox: this option lets you add a new MH mail-directory. It will generate IN, OUT, QUEUE, DRAFT and TRASH mailfolders inside the new mailbox.</LI>
+<LI>Update folder tree: rescans the entire tree of existing mailboxes to reflect the correct state (usually won't be necessary).</LI>
+<LI>Folder: lets you add, rename or delete a mailfolder.</LI>
+<LI>Import mbox file...: lets you import an mbox file (like created by Pine) into an MH mailbox.</LI>
+<LI>Export to mbox file: lets you export an MH mailbox to an mbox file.</LI>
+<LI>Empty trash: obviously, this will empty the trash folder.</LI>
+<LI>Save as: lets you save the selected e-mail to a plain textfile on disk.</LI>
+<LI>Print: lets you print the selected e-mail to a printer.</LI>
+<LI>Close: ends Sylpheed.</LI>
+<LI>Exit: also ends Sylpheed.</LI>
+</UL>
+<H3>Edit menu</H3>
+
+<P>
+<UL>
+<LI>copy: lets you copy the selected text to a buffer, from where you can paste it into a different place. Shortcut: Ctrl-C</LI>
+<LI>select all: selects all the text in the current window. Shortcut: Ctrl-A</LI>
+<LI>search: searches the current window for text you enter. Shortcut: Ctrl-S</LI>
+</UL>
+<H3>View menu</H3>
+
+<P>The view menu allows you to change the way that Sylpheed appears. You can set different windows separately (folder view, messages etc.), enable or disable the statusbar and so on.
+<P>
+<UL>
+<LI>Folder tree: not implemented yet</LI>
+<LI>Message view: not implemented yet</LI>
+<LI>Toolbar: sets how you want to see the toolbar. Icons and text, or one of these.</LI>
+<LI>Status bar: show it or hide it.</LI>
+<LI>Separate folder tree: selects between having the folder tree attached to the main window, or floating separately.</LI>
+<LI>Separate message view: selects between having the selected message in the summary pane attached to the main window, or floating separately.</LI>
+<LI>Code set: allows you to select what codeset you want to use for your e-mails.</LI>
+</UL>
+<H3>Message menu</H3>
+
+<P>Here you find the following options:
+<UL>
+<LI>Receive new mail: this will collect all new mail for your default mail-identity.</LI>
+<LI>Receive from all accounts: Sylpheed will poll all defined mail-identities for new mail.</LI>
+<LI>Send queued messages: all the messages that you put into the "Queue" folder will now be sent off.</LI>
+<LI>Compose new message: allows you to write a new e-mail message.</LI>
+<LI>Reply: an e-mail message will be created with the sender of the selected message in the summary pane as recipient. Depending on the settings, your signature will be added to the mail, and the original mail text will be quoted.</LI>
+<LI>Reply to all: as Reply, but the recipients will be all e-mail addresses in the original messages (including the ones in the cc: part).</LI>
+<LI>Forward: a message will be created with the original message in the summary pane as text. You can then enter a recipient e-mail address, edit the text if you want, and send it.</LI>
+<LI>Forward as attachment: as Forward, but the message text will sent along as a separate textfile.</LI>
+<LI>Move: lets you move the message to a different folder. You can select the destination folder from a browse-window.</LI>
+<LI>Copy: as Move, only that the message is copied to the new folder, instead of moved.</LI>
+<LI>Delete: lets you delete the message that is selected in the summary pane.</LI>
+<LI>Mark: Gives a submenu: Mark/Unmark/Mark as read/Unmark as read. When you mark messages, you can do a specific action (e.g. move, delete) on all of the marked messages. You can unmark messages that you mistakenly marked. The other options do as they say, they mark or unmark a message as read.</LI>
+<LI>Open in new window: This will open the message in the summary pane into a new window, allowing you to see more text at once.You can close this window by clicking the close button or pressing Escape.</LI>
+<LI>View source: opens a new window with the message in it, including all message headers. You can close this window by clicking the close button or pressing Escape.</LI>
+<LI>Show all header: opens a new window with only the message headers. You can close this window by clicking the close button or pressing Escape.</LI>
+<LI>Reedit: this option is only available when you select a message in the Draft folder. You can then edit the draft message.</LI>
+</UL>
+
+A note on functions like Move, Copy and Delete: if you did not specify to execute the commands immediately (in the configuration), you will have to select the "Execute" command. This is a button in the toolbar, and can also be found in the Summary menu.
+<H3>Summary menu</H3>
+
+<P>In the Summary menu you can perform all kinds of functions that are related to handling messages. The actions are done on the message summary pane.
+<UL>
+<LI>Delete duplicate messages: This will remove messages from the active folder that were sent twice to you. For example you received a message directly and through a mailing list at the same time.</LI>
+<LI>Filter messages: you can use this option if you want to filter existing messages through a new filter you set up.</LI>
+<LI>Execute: this option is needed if you did not set "execute immediately" in the preferences. "Execute" will then do the actions you want (e.g. Copy, Move, Filter etc.)</LI>
+<LI>Update: refreshes the message pane view to reflect any changes.</LI>
+<LI>Prev message: selects the previous message. Pine ex-users can also use "p".</LI>
+<LI>Next message: select the next message. Pine ex-users can also use "n".</LI>
+<LI>Next unread message: skips to the next unread message in the folder.</LI>
+<LI>Go to other folder: allows you to open a new mail folder. You can use a browse window for this.</LI>
+<LI>Sort: this option will allow you to sort the mail view in several ways. You can sort by date, by subject, by number (MH's internal message number is meant here) etc. Note that "Attract by subject" is different from sorting by subject. Attract by subject overlooks the "Re:" references in the subject. In that way messages are sorted in a more logical way.</LI>
+<LI>Thread view: messages are linked together in a tree view, on subject.</LI>
+<LI>Unthread view: undos the previous item.</LI>
+<LI>Set display item: shows a dialog box in which you can check and uncheck the items you want to see in the summary pane.
+As of version 0.6.4 you can also determine the order in which the columns of the summary menu are displayed.</LI>
+</UL>
+<H3>Tool menu</H3>
+
+<P>In the Tool menu you will find 2 options (upto version 0.6.4). It is the address book and the log window.
+<P>In the address book, as you may expect, you can store the e-mail addresses that you want to save. You can create folders within the address book, to keep addresses together.
+<P>In the log window, you can see what Sylpheed is doing. Keeping track of things in that way is very good when you suspect there is something wrong. You can paste the info of the log window into an e-mail and send it to the developer or the mailing list.
+<H3>Configuration menu</H3>
+
+<P>In the Configuration menu, clearly, you can set up Sylpheed the way you want it to work and react.
+<UL>
+<LI>Common preferences: in this option you will be presented a dialog in which you can select a number of tabs. Each tab represents a specific set of settings in Sylpheed. In the next chapter, these dialog options are explained in more detail.
+</LI>
+<LI>Filtering: this option shows you a dialog in which you can set up the filtering rules that you want Sylpheed to process on receiving new e-mails. You first specify on which part(s) of the e-mail Sylpheed has to check, and then you tell Sylpheed what to do. You can move the message to a different directory (including trash to get rid of spam mail). Selecting the destination folder is possible through a browser window that comes up when you press "Select..."<P>You can choose not to receive the e-mail. Note that this will leave the message on the mailserver of your provider, the message will not be removed!
+<P>When you press the "Register" button, the filter rule is added to the list of rules. Do you select "Substitute", then the selected rule is replaced by the information of the setting entered. "Delete" in the end will delete the selected filtering rule.
+<P>Please note that you can set up 2 selections for a rule, which can be "OR'd" or "AND'd". OR means that one of the 2 selections will have to match for the rule to be executed. AND means that both selections have to match before an action is performed.
+<P>To the right of the selection rules you see buttons called UP and DOWN. You can move rules up and down in the list. This will often trigger different behaviour in the selections, so consider the order in which you set the rules.
+</LI>
+<LI>Preferences per account: here you can set the specifics for the account you are currently using. Should mail be deleted after fetching, what is the server it comes from, etc. Basically it is the same dialog form as shown in setting up a new account.</LI>
+<LI>Create new account: here you name the account (each account has a recognizable name), you set up your name and e-mail address etc. You set up the type of server you access (POP4, IMAP4, local mailbox, newsserver) and where the downloaded messages have to go (default folder is the inbox). In the RECEIVE tab you select or unselect options, in SEND you can set up how to send your messages. In COMPOSE you can point to a specific signature file, and in ADVANCED you can set up alternate ports for the server, if these exist. (Do not mess with these unless you are sure you have to!!)</LI>
+<LI>Edit accounts: here you can select one of the accounts you created, from a list, and edit the information about them. Note that you cannot edit an account for which you are writing a message at the same time. This to ensure data integrity.</LI>
+<LI>Change current account: here you can select what account you want to use, to write a message.</LI>
+</UL>
+<H3>Help menu</H3>
+
+<P>This menu lets you look at the (japanese for now) manual, and you can also see the "about" info, who wrote Sylpheed.
+<H2><A NAME="ss6.2">6.2 Context menu</A>
+</H2>
+
+<P>You can pull up context menus (through clicking button2) for the folder tree and the summary pane. (windows users: button2 is the right mouse button.)
+<P>In the folder view you can add, rename and remove folders through the context menu.
+<P>In the message summary you can do a host of things from the context menu, like viewing message headers, opening a message in a separate window (also possible by double clicking on a message) etc.
+<HR>
+<A HREF="sylpheed-7.html">Next</A>
+<A HREF="sylpheed-5.html">Previous</A>
+<A HREF="sylpheed.html#toc6">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-7.html b/manual/en/sylpheed-7.html
new file mode 100644
index 00000000..27789c47
--- /dev/null
+++ b/manual/en/sylpheed-7.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Dialogs and views</TITLE>
+ <LINK HREF="sylpheed-8.html" REL=next>
+ <LINK HREF="sylpheed-6.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc7" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-8.html">Next</A>
+<A HREF="sylpheed-6.html">Previous</A>
+<A HREF="sylpheed.html#toc7">Contents</A>
+<HR>
+<H2><A NAME="s7">7. Dialogs and views</A></H2>
+
+<P>
+<P>
+<P>
+<P>
+<P>
+<H2><A NAME="ss7.1">7.1 Folder view </A>
+</H2>
+
+<P>The folder view shows you all the mail folders that you have created, in a tree-like structure. If you want to see the headers of the messages in a specific folder, just click the name of the folder once, and in the summary view you can see the messages in the selected mail folder.
+<P>When you see a + sign in front of a folder name, that means the folder branch of that part of the tree is 'collapsed'. You can expand that part by clicking the + sign. In that same manner you can also collapse the - sign in front of an expanded branch of the folder tree.
+<P>Special folders:
+<P>Draft: here you store messages that you want to send out more often, or you want to work on some more. Using the 'reedit' option from the message menu, you can edit the message further.
+<P>Trash: in here all your deleted messages go. Depending on the common preferences setting, this box is or is not emptied when you end Sylpheed.
+<H2><A NAME="ss7.2">7.2 Summary view </A>
+</H2>
+
+<P>The summary pane can show you many things. You can select what you want to see from the Summary menu, selecting the option "Set display item". A list of all options is:
+<UL>
+<LI>Mark: shows if the message is marked.</LI>
+<LI>Unread: shows if the message is read or not</LI>
+<LI>MIME: shows MIME attachments</LI>
+<LI>Number: shows the MH number of the message</LI>
+<LI>Size: the size of the entire message including attachments</LI>
+<LI>Date: the date of sending by the sender</LI>
+<LI>From: who sent the message</LI>
+<LI>Subject: what the message is about</LI>
+</UL>
+
+You can sort the summary view in many ways, by clicking the button that is above the column. Click once to sort going up (a-z), click once more to sort going down (z-a).
+<P>If you think the size of a column is not right, you can adjust that by placing the mouse cursor next to the button of the column you want to adjust, press mouebutton1 (left button) and drag the column to the width you want it to have.
+<P>Select a message by clicking on it with the mouse. Once the summary pane has the focus of the program, you can also move up and down in the list through the cursor keys, or pressing "p"(revious) and "n"(ext) as in Pine.
+<H2><A NAME="ss7.3">7.3 Message view </A>
+</H2>
+
+<P>In the message view you can read the message that you selected in the summary pane. If you entered the summary pane without selecting a message, the message view will be empty. At the top of the message view some info is presented about the message you are reading, as well as some statistics on the selected folder.
+<P>You can scroll up and down in the message by using the arrow keys (after clicking inside the message), or by using the scrollbar.
+<H2><A NAME="ss7.4">7.4 Common preferences</A>
+</H2>
+
+<P>The Common Preferences, found in the Configuration menu, shows you the following tabs:
+<H3>Receive tab</H3>
+
+<P>In here you can set up how to receive messages.
+<P>
+<P>
+<P>
+<P>
+<UL>
+<LI>You can define a special program to pick up messages from the default unix mailbox. Usually this is not used, but you can use it. Actually, this information may be wrong. If someone knows better, please let me know.</LI>
+<LI>Local spool lets you define where your local mailbox is located. You can also tell Sylpheed whether or not to filter the incoming messages from that mail spool file.</LI>
+<LI>Autocheck new mail. When you check this option, Sylpheed will check if there is new mail on the set interval.</LI>
+<LI>Check new mail on startup means that Sylpheed will immediately look for new mail on all the selected accounts when it loads.</LI>
+<LI>In the news section you can specify how many articles should be downloaded when opening a newsgroup.</LI>
+</UL>
+<H2><A NAME="ss7.5">7.5 Setting up an account/changing an account</A>
+</H2>
+
+<P>In order to set up an account in Sylpheed, in the configuration menu you select "Create new account". If you want to change the settings of an existing account, you select the "Edit accounts..." option from the configuration menu, and there you select the account you want to change. After that you press "edit". Then a dialog appears in which you can enter or update the following areas:
+<P>
+<H3><A NAME="Basic"></A> Basic tab</H3>
+
+<P>
+<P>
+<P>
+<P>
+<P>In the "Basic" tab you name the account. This is to make identifying the account easier.
+<P>Choose a name that tells something about the account, like the name of the ISP, mailbox or news-server you are setting up. You can select this account to be the default account ("Usually used").
+<P>Enter your name and e-mail address, and if you have one, the organization that you use Sylpheed for.
+In the Protocol box you select the type of service that this account will be using. The flavors you can choose are: POP3 normal, POP3 APOP auth, IMAP4, NNTP news or None (local).
+In the "inbox" field you can enter the mail folder where the mail for this account will be stored in. This option is disabled when you set up an NNTP News account.
+<P>For POP3 and IMAP services you can then specify the server where your mail is stored. Details about this name, and also the name that goes into the field for "SMPT server (send)" should be given to you by your ISP.
+<P>For a local unix mailbox, the "Server for receiving" is disabled, since the mail will be received for you.
+<P>The fields for User ID and Password will also be disabled for accounts that do no deal with POP3 or IMAP services. Otherwise you can enter the login name and password for the e-mail server with your ISP here. Usually these are the same as your login name and password to access the dial-in service, but this is not standard. If in doubt, contact the helpdesk of your ISP.
+<P>
+<H3><A NAME="Receive"></A> Receive tab</H3>
+
+<P>
+<P>
+<P>
+<P>
+<P>The "Receive" tab is only used for POP3 accounts. Here you specify if the mails that were successfully retrieved should be removed from the server. You can also tell Sylpheed to get all the messages there, not only the ones you already received (in case you leave your messages on the server). The third option enables this account to be included when mail is checked for "all accounts" (see the message menu for this), and if the incoming messages should immediately be filtered when received.
+<H3><A NAME="Send"></A> Send tab</H3>
+
+<P>
+<P>
+<P>
+<P>
+<P>In the "Send" tab you can set up some more settings.
+<H3><A NAME="Compose"></A> Compose tab</H3>
+
+<P>
+<P>
+<P>
+<P>
+<P>In the "Compose" tab you can define your signature file.
+<H3><A NAME="Advanced"></A> Advanced tab</H3>
+
+<P>In the "Advanced" tab you can edit the portnumbers for the servers you will be using. This normally will need no change.
+<HR>
+<A HREF="sylpheed-8.html">Next</A>
+<A HREF="sylpheed-6.html">Previous</A>
+<A HREF="sylpheed.html#toc7">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-8.html b/manual/en/sylpheed-8.html
new file mode 100644
index 00000000..40c8dcad
--- /dev/null
+++ b/manual/en/sylpheed-8.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Viewing messages</TITLE>
+ <LINK HREF="sylpheed-9.html" REL=next>
+ <LINK HREF="sylpheed-7.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc8" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-9.html">Next</A>
+<A HREF="sylpheed-7.html">Previous</A>
+<A HREF="sylpheed.html#toc8">Contents</A>
+<HR>
+<H2><A NAME="s8">8. Viewing messages</A></H2>
+
+<H2><A NAME="ss8.1">8.1 Reading a message</A>
+</H2>
+
+<P>Reading a message is quite simple. If you have the message pane within view, all you need to do is once click the message you want to read and it already appears in the message view. When you double-click the message, a separate window will open, showing you the message. You can close the opened window by pressing ESCape or clicking the 'close' button.
+<H2><A NAME="ss8.2">8.2 Viewing Multipart MIME (Attached Files)</A>
+</H2>
+
+<P>When a message contains an attachment, you can have several options to view the information in that file. Sylpheed can be able, when compiled against the proper libraries, to display images "inline". This means you can click the name of the image and you can see it in the lower part of the message screen.
+<P>How do you see an attachment is in an e- mail?
+<P>This shows through an extra section that appears between the summary pane and the message view. In it you can see the separate parts of the e-mail. Sometimes you can't view the contents of an attachment directly. Then you can rightclick the name of the file and select "OPEN" from the appearing menu. If this does not work, it means that the extension of the file is not recognized through the directives in the mailcap file. In that case you can always use the "Save as..." option in the popup menu, save the file to disk and open the file with the proper program.
+<H2><A NAME="ss8.3">8.3 Extending and Closing Threads</A>
+</H2>
+
+<P>Sylpheed offers the option to view messages in threads. Threads are no more than series of e-mails in a logical sequence. Suppose 15 people sent you a mail called "Re: bananas". You can't easily tell which one is the first and which one is the last in that sequence.
+<P>By activating threads (summary menu), Sylpheed will attempt to show the sequence of mails as they were written/sent from first to last.
+<P>To undo the threads view, you simply select the same menu option again and the e-mails are displayed in standard order again.
+<H2><A NAME="ss8.4">8.4 Message Operations (Moving, Deleting, etc.)</A>
+</H2>
+
+<P>Sylpheed gives you many ways to manage your messages. You can move them to new mailboxes, or delete them. Through the message menu (see that section for more details) plenty of options are available to do with your e-mails what you want done. The advantage of moving messages to different mailboxes (also see Filtering for that, as described in the Configuration menu section) is that you keep an overview of your inbox. Suppose you are collecting e-mails in there of 8 different subjects. And you are looking for a specific one on a specific subject. That will give you a lot of work, trying to find the right message. Creating a new mail folder for each subject, and moving the messages to that new one, lifts a lot of work afterwards from your hands.
+<H2><A NAME="ss8.5">8.5 URL in a Message</A>
+</H2>
+
+<P>At times you may find a URL in a message. A URL is a link to a website. Usually it is shown in the form "http://www.somewhere.something".
+<P>If you want to visit that website, you only need to double-click the URL, and the default webbrowser you set up (usually Netscape) will activate and load the website.
+<P>In the configuration options, Sylpheed has a color setting specific for URL's so you can spot a URL easily.
+<HR>
+<A HREF="sylpheed-9.html">Next</A>
+<A HREF="sylpheed-7.html">Previous</A>
+<A HREF="sylpheed.html#toc8">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed-9.html b/manual/en/sylpheed-9.html
new file mode 100644
index 00000000..4d415545
--- /dev/null
+++ b/manual/en/sylpheed-9.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual: Recieving Messages</TITLE>
+ <LINK HREF="sylpheed-10.html" REL=next>
+ <LINK HREF="sylpheed-8.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc9" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-10.html">Next</A>
+<A HREF="sylpheed-8.html">Previous</A>
+<A HREF="sylpheed.html#toc9">Contents</A>
+<HR>
+<H2><A NAME="s9">9. Recieving Messages</A></H2>
+
+<H2><A NAME="ss9.1">9.1 Using POP Reception Function in Sylpheed</A>
+</H2>
+
+<P>Receiving messages from a POP server is very easy, once you set up Sylpheed the proper way. You can refer to the section "Setting up an account" on how to do this.
+<P>Once you are connected to the internet, or by another network that gives you access to the POP server, simply press the "Get new mail" button (or press Alt-I) and Sylpheed will connect to the server to fetch your new mail. Once this is retrieved, any filters you may have set up will be executed and then the folder pane will show you, marked in bold, which folder/mailbox contains new messages.
+<H2><A NAME="ss9.2">9.2 Using Other Programs such as fetchmail</A>
+</H2>
+
+<P>Although it is not within the scope of this manual, a bit of information on fetchmail or getmail.
+<P>You need to have either of these programs installed, and configured correctly. See the man pages/README files of the appropriate program on doing this.
+<P>After setting the program up, you can invoke it, either by hand or through CRON, to get your mail. The mail will usually be downloaded into /var/spool/mail/your_user_id. You can then tell Sylpheed, through an account that looks in your local unix mailbox, to get mail from there. For this you press the "Get mail" button, or press "Alt-I".
+<HR>
+<A HREF="sylpheed-10.html">Next</A>
+<A HREF="sylpheed-8.html">Previous</A>
+<A HREF="sylpheed.html#toc9">Contents</A>
+</BODY>
+</HTML>
diff --git a/manual/en/sylpheed.html b/manual/en/sylpheed.html
new file mode 100644
index 00000000..47e98875
--- /dev/null
+++ b/manual/en/sylpheed.html
@@ -0,0 +1,194 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>Sylpheed User's Manual</TITLE>
+ <LINK HREF="sylpheed-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-1.html">Next</A>
+Previous
+Contents
+<HR>
+<H1>Sylpheed User's Manual</H1>
+
+
+<H2>Paul Kater (paul@nlpagan.net)
+ Nick Selby
+ </H2>
+<P><HR>
+<EM> Sylpheed User's Manual for Sylpheed-0.7.3
+ </EM>
+<HR>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-1.html">What is Sylpheed?</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-1.html#ss1.1">1.1 Introduction to Sylpheed.</A>
+<LI><A HREF="sylpheed-1.html#ss1.2">1.2 Interface</A>
+<LI><A HREF="sylpheed-1.html#ss1.3">1.3 Main features</A>
+<LI><A HREF="sylpheed-1.html#ss1.4">1.4 Methods for managing messages</A>
+<LI><A HREF="sylpheed-1.html#ss1.5">1.5 Features for the future</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-2.html">Quick-guide to mail setup</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-2.html#ss2.1">2.1 Setup for reading your Unix mailbox in a hurry</A>
+<LI><A HREF="sylpheed-2.html#ss2.2">2.2 Setup for reading POP3 mail in a hurry</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-3.html">Quick-guide for news setup</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-3.html#ss3.1">3.1 Getting news in a hurry.</A>
+</UL>
+<P>
+<H2><A NAME="toc4">4.</A> <A HREF="sylpheed-4.html">Installation.</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-4.html#ss4.1">4.1 Required environment</A>
+<LI><A HREF="sylpheed-4.html#ss4.2">4.2 Environments known as valid for Sylpheed</A>
+<LI><A HREF="sylpheed-4.html#ss4.3">4.3 Nuts and bolts of installation</A>
+<LI><A HREF="sylpheed-4.html#ss4.4">4.4 Installation on Linux using RPM</A>
+<LI><A HREF="sylpheed-4.html#ss4.5">4.5 Installation on Debian Linux</A>
+<LI><A HREF="sylpheed-4.html#ss4.6">4.6 Installation on FreeBSD</A>
+</UL>
+<P>
+<H2><A NAME="toc5">5.</A> <A HREF="sylpheed-5.html">Starting and quitting Sylpheed</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-5.html#ss5.1">5.1 Starting Sylpheed</A>
+<LI><A HREF="sylpheed-5.html#ss5.2">5.2 Quitting Sylpheed</A>
+</UL>
+<P>
+<H2><A NAME="toc6">6.</A> <A HREF="sylpheed-6.html">Going through the parts of Sylpheed</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-6.html#ss6.1">6.1 The menu options of Sylpheed.</A>
+<LI><A HREF="sylpheed-6.html#ss6.2">6.2 Context menu</A>
+</UL>
+<P>
+<H2><A NAME="toc7">7.</A> <A HREF="sylpheed-7.html">Dialogs and views</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-7.html#ss7.1">7.1 Folder view </A>
+<LI><A HREF="sylpheed-7.html#ss7.2">7.2 Summary view </A>
+<LI><A HREF="sylpheed-7.html#ss7.3">7.3 Message view </A>
+<LI><A HREF="sylpheed-7.html#ss7.4">7.4 Common preferences</A>
+<LI><A HREF="sylpheed-7.html#ss7.5">7.5 Setting up an account/changing an account</A>
+</UL>
+<P>
+<H2><A NAME="toc8">8.</A> <A HREF="sylpheed-8.html">Viewing messages</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-8.html#ss8.1">8.1 Reading a message</A>
+<LI><A HREF="sylpheed-8.html#ss8.2">8.2 Viewing Multipart MIME (Attached Files)</A>
+<LI><A HREF="sylpheed-8.html#ss8.3">8.3 Extending and Closing Threads</A>
+<LI><A HREF="sylpheed-8.html#ss8.4">8.4 Message Operations (Moving, Deleting, etc.)</A>
+<LI><A HREF="sylpheed-8.html#ss8.5">8.5 URL in a Message</A>
+</UL>
+<P>
+<H2><A NAME="toc9">9.</A> <A HREF="sylpheed-9.html">Recieving Messages</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-9.html#ss9.1">9.1 Using POP Reception Function in Sylpheed</A>
+<LI><A HREF="sylpheed-9.html#ss9.2">9.2 Using Other Programs such as fetchmail</A>
+</UL>
+<P>
+<H2><A NAME="toc10">10.</A> <A HREF="sylpheed-10.html">Composing Messages</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-10.html#ss10.1">10.1 Composing a New Message</A>
+<LI><A HREF="sylpheed-10.html#ss10.2">10.2 Replying to a Message</A>
+<LI><A HREF="sylpheed-10.html#ss10.3">10.3 Replying to a Message with Quotation</A>
+<LI><A HREF="sylpheed-10.html#ss10.4">10.4 Forwarding Messages</A>
+</UL>
+<P>
+<H2><A NAME="toc11">11.</A> <A HREF="sylpheed-11.html">Address Book</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-11.html#ss11.1">11.1 Adding and Deleting Addresses</A>
+<LI><A HREF="sylpheed-11.html#ss11.2">11.2 Folders and Groups</A>
+<LI><A HREF="sylpheed-11.html#ss11.3">11.3 Combination with Message Composition Window</A>
+</UL>
+<P>
+<H2><A NAME="toc12">12.</A> <A HREF="sylpheed-12.html">Filtering Messages</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-12.html#ss12.1">12.1 Filtering Messages</A>
+<LI><A HREF="sylpheed-12.html#ss12.2">12.2 How to Filter Messages</A>
+<LI><A HREF="sylpheed-12.html#ss12.3">12.3 Filtering mail with Procmail</A>
+</UL>
+<P>
+<H2><A NAME="toc13">13.</A> <A HREF="sylpheed-13.html">Handling MIME types</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-13.html#ss13.1">13.1 How Sylpheed checks for Mime types</A>
+</UL>
+<P>
+<H2><A NAME="toc14">14.</A> <A HREF="sylpheed-14.html">Conversion of Other Mail Format into Sylpheed (MH Format)</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-14.html#ss14.1">14.1 Importing Messages of mbox Format</A>
+<LI><A HREF="sylpheed-14.html#ss14.2">14.2 Importing from Windows Mailers (Becky!, AL-Mail, Outlook Express4, etc.)</A>
+<LI><A HREF="sylpheed-14.html#ss14.3">14.3 Importing dbx Format of Outlook Express 5</A>
+<LI><A HREF="sylpheed-14.html#ss14.4">14.4 Exporting from Sylpheed MH format to mbox</A>
+</UL>
+<P>
+<H2><A NAME="toc15">15.</A> <A HREF="sylpheed-15.html">NetNews</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-15.html#ss15.1">15.1 Adding and Deleting Servers</A>
+<LI><A HREF="sylpheed-15.html#ss15.2">15.2 Subscribing and Unsubscribing to NewsGroups</A>
+<LI><A HREF="sylpheed-15.html#ss15.3">15.3 Reading News</A>
+</UL>
+<P>
+<H2><A NAME="toc16">16.</A> <A HREF="sylpheed-16.html">Customization (General Setup)</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-16.html#ss16.1">16.1 General Setup Window</A>
+<LI><A HREF="sylpheed-16.html#ss16.2">16.2 Description of Each Entry</A>
+</UL>
+<P>
+<H2><A NAME="toc17">17.</A> <A HREF="sylpheed-17.html">Reference</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-17.html#ss17.1">17.1 Short-Cut Key List</A>
+<LI><A HREF="sylpheed-17.html#ss17.2">17.2 Data Format of Address Book</A>
+</UL>
+<P>
+<H2><A NAME="toc18">18.</A> <A HREF="sylpheed-18.html">FAQ</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-18.html#ss18.1">18.1 Unread News Messages</A>
+<LI><A HREF="sylpheed-18.html#ss18.2">18.2 Using MSN Mail Accounts</A>
+<LI><A HREF="sylpheed-18.html#ss18.3">18.3 Changing Fonts on Menu, etc.</A>
+<LI><A HREF="sylpheed-18.html#ss18.4">18.4 Changing Key Binding of Short-Cut Key</A>
+</UL>
+<P>
+<H2><A NAME="toc19">19.</A> <A HREF="sylpheed-19.html">Information</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-19.html#ss19.1">19.1 Websites on Sylpheed</A>
+<LI><A HREF="sylpheed-19.html#ss19.2">19.2 Mailing Lists</A>
+<LI><A HREF="sylpheed-19.html#ss19.3">19.3 Anonymous CVS</A>
+<LI><A HREF="sylpheed-19.html#ss19.4">19.4 How to tell another program to use Sylpheed as e-mail program</A>
+</UL>
+<P>
+<H2><A NAME="toc20">20.</A> <A HREF="sylpheed-20.html">About This Document</A></H2>
+
+<UL>
+<LI><A HREF="sylpheed-20.html#ss20.1">20.1 Copyright Notice</A>
+<LI><A HREF="sylpheed-20.html#ss20.2">20.2 GNU General Public License</A>
+<LI><A HREF="sylpheed-20.html#ss20.3">20.3 Where to Get the Latest Version of This Document</A>
+<LI><A HREF="sylpheed-20.html#ss20.4">20.4 Ending Remark</A>
+</UL>
+<HR>
+<A HREF="sylpheed-1.html">Next</A>
+Previous
+Contents
+</BODY>
+</HTML>
diff --git a/manual/ja/Makefile.am b/manual/ja/Makefile.am
new file mode 100644
index 00000000..0c9b833d
--- /dev/null
+++ b/manual/ja/Makefile.am
@@ -0,0 +1,32 @@
+manualdatadir = $(manualdir)/ja
+
+manualdata_DATA = \
+ sylpheed-1.html \
+ sylpheed-10.html \
+ sylpheed-11.html \
+ sylpheed-12.html \
+ sylpheed-13.html \
+ sylpheed-14.html \
+ sylpheed-15.html \
+ sylpheed-16.html \
+ sylpheed-17.html \
+ sylpheed-18.html \
+ sylpheed-19.html \
+ sylpheed-20.html \
+ sylpheed-2.html \
+ sylpheed-3.html \
+ sylpheed-4.html \
+ sylpheed-5.html \
+ sylpheed-6.html \
+ sylpheed-7.html \
+ sylpheed-8.html \
+ sylpheed-9.html \
+ sylpheed.html \
+ sylpheed.sgml
+
+# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'`
+
+EXTRA_DIST = $(manualdata_DATA)
+
+update-html:
+ sgml2html --language=ja --charset=nippon sylpheed.sgml
diff --git a/manual/ja/sylpheed-1.html b/manual/ja/sylpheed-1.html
new file mode 100644
index 00000000..207c94bb
--- /dev/null
+++ b/manual/ja/sylpheed-1.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: このマニュアルについて</TITLE>
+ <LINK HREF="sylpheed-2.html" REL=next>
+
+ <LINK HREF="sylpheed.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-2.html">次のページ</A>
+前のページ
+<A HREF="sylpheed.html#toc1">目次へ</A>
+<HR>
+<H2><A NAME="s1">1.</A> <A HREF="sylpheed.html#toc1">このマニュアルについて</A></H2>
+
+<H2><A NAME="ss1.1">1.1</A> <A HREF="sylpheed.html#toc1.1">この文書について</A>
+</H2>
+
+<P>これは、Sylpheedの操作方法について書かれた文書です。
+将来Sylpheedのバージョンが上がった際にインタフェースが変更されることがありますので、ご注意ください。</P>
+<H2><A NAME="ss1.2">1.2</A> <A HREF="sylpheed.html#toc1.2">対象とする設定</A>
+</H2>
+
+<P>基本的にデフォルトの設定を対象とします。
+キーボードによる操作が有用と思われる部分においては、
+"標準"のキーバインドを使っていることとします。
+それ以外のキーバインドについては、
+メニューアイテムの右側に表示されているキー表示を利用してください。</P>
+<H2><A NAME="ss1.3">1.3</A> <A HREF="sylpheed.html#toc1.3">ライセンス</A>
+</H2>
+
+<P>Copyright (c) 2000-2002 Yoichi Imai &lt;yoichi@silver-forest.com&gt;</P>
+<P>Copyright (c) 2004 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp&gt;</P>
+<P>Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts,
+and with no Back-Cover Texts.
+A copy of the license is included in the section entitled
+<A HREF="sylpheed-18.html#gfdl">&quot;GNU Free Documentation License&quot;</A>.</P>
+<P>GNU Free Documentation Licenseの参考訳は、
+<A HREF="http://www.opensource.jp/fdl/fdl.ja.html">http://www.opensource.jp/fdl/fdl.ja.html</A>より入手可能です。</P>
+<H2><A NAME="ss1.4">1.4</A> <A HREF="sylpheed.html#toc1.4">このドキュメントの最新版の入手先</A>
+</H2>
+
+<P>最新版は,
+<A HREF="http://y-imai.good-day.net/sylpheed/manual/">http://y-imai.good-day.net/sylpheed/manual/</A>
+から入手できます。</P>
+<HR>
+<A HREF="sylpheed-2.html">次のページ</A>
+前のページ
+<A HREF="sylpheed.html#toc1">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-10.html b/manual/ja/sylpheed-10.html
new file mode 100644
index 00000000..aa541250
--- /dev/null
+++ b/manual/ja/sylpheed-10.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: メッセージの作成</TITLE>
+ <LINK HREF="sylpheed-11.html" REL=next>
+ <LINK HREF="sylpheed-9.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc10" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-11.html">次のページ</A>
+<A HREF="sylpheed-9.html">前のページ</A>
+<A HREF="sylpheed.html#toc10">目次へ</A>
+<HR>
+<H2><A NAME="send-message"></A> <A NAME="s10">10.</A> <A HREF="sylpheed.html#toc10">メッセージの作成</A></H2>
+
+<H2><A NAME="message-create"></A> <A NAME="ss10.1">10.1</A> <A HREF="sylpheed.html#toc10.1">メッセージの新規作成</A>
+</H2>
+
+<P>メッセージを作成するには、
+<UL>
+<LI>ツールバーの"作成"ボタンを押す</LI>
+<LI>"メッセージ>新規メッセージを作成" (Ctrl+mキー)</LI>
+</UL>
+
+のいずれかを行えばメッセージ作成ウィンドウが開きます。</P>
+<P>メッセージメニューよりBcc, 返信先を指定等を選択することで、
+表示されていないフィールドでも入力できるフィールドがあります。</P>
+<P>差出人: の部分をクリックして変更すれば送信するアカウントの情報を変更することができます。</P>
+
+<H2><A NAME="ss10.2">10.2</A> <A HREF="sylpheed.html#toc10.2">署名の挿入</A>
+</H2>
+
+<P>
+<UL>
+<LI>"ファイル>署名を挿入"</LI>
+<LI>ツールバーの"署名"ボタン</LI>
+</UL>
+
+のいずれかで、
+設定で指定されたファイル(デフォルトではホームディレクトリの.signature)に書かれた内容を
+本文の最後に挿入することができます。</P>
+<H2><A NAME="ss10.3">10.3</A> <A HREF="sylpheed.html#toc10.3">メッセージの送信</A>
+</H2>
+
+<P>
+<UL>
+<LI>"ファイル>送信"</LI>
+<LI>ツールバーの"送信"</LI>
+</UL>
+
+のいずれかを行えば、すぐにサーバへ送信されます。</P>
+<P>
+<UL>
+<LI>"ファイル>後で送信"</LI>
+<LI>ツールバーの"後で送信"</LI>
+</UL>
+
+のいずれかを行えば、一度送信待ちに入って待機状態になります。</P>
+<P>待機しているメッセージを実際に送信するには、
+<UL>
+<LI>メインウィンドウのツールバーの"送信"ボタン</LI>
+<LI>メインウィンドウの"メッセージ>送信待機中のメッセージを送信"</LI>
+</UL>
+
+で送信できます。</P>
+
+<H2><A NAME="ss10.4">10.4</A> <A HREF="sylpheed.html#toc10.4">草稿</A>
+</H2>
+
+
+<P>
+<UL>
+<LI>"ファイル>草稿フォルダに保存"</LI>
+<LI>ツールバーの"草稿"</LI>
+</UL>
+
+で草稿に保存できます。</P>
+<P>また、"ファイル>保存して編集を続ける"で草稿に保存した後そのまま編集を続けることができます。</P>
+<P>草稿に保存したメッセージは、
+草稿フォルダに入ってそのメッセージを選択し、
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"再編集"を選択するか、
+ダブルクリックすれば再び編集できます。</P>
+
+<H2><A NAME="ss10.5">10.5</A> <A HREF="sylpheed.html#toc10.5">添付ファイル</A>
+</H2>
+
+<P>添付ファイルを添付するには、
+<UL>
+<LI>ツールバーの"添付"ボタンを押す</LI>
+<LI>メニューで"ファイル>ファイルを添付"</LI>
+</UL>
+
+のいずれかを行った後に添付ファイルのリストが現れるので、
+各ファイルを選択して
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より
+<UL>
+<LI>追加を選択すれば添付ファイルの追加</LI>
+<LI>削除を選択すればそのファイルをリストから削除</LI>
+<LI>プロパティでその添付ファイルのMIMEタイプ/エンコード方式/パス/ファイル名を指定</LI>
+</UL>
+
+することができます。</P>
+<H2><A NAME="ss10.6">10.6</A> <A HREF="sylpheed.html#toc10.6">ファイルの挿入</A>
+</H2>
+
+<P>"挿入"ボタンやメニューのファイル>ファイルを挿入"ではメッセージ本文に
+指定したファイルを挿入できます。</P>
+
+<H2><A NAME="ss10.7">10.7</A> <A HREF="sylpheed.html#toc10.7">アドレス帳の利用</A>
+</H2>
+
+<P>"アドレス"ボタンを押すか、メニューで"ツール>アドレス帳"を選択すれば、
+<A HREF="sylpheed-11.html#address-combo">アドレス帳と連係</A>できます。</P>
+
+<H2><A NAME="ss10.8">10.8</A> <A HREF="sylpheed.html#toc10.8">外部エディタの利用</A>
+</H2>
+
+
+<P>外部エディタを利用するには、
+<A HREF="sylpheed-15.html#ext-editor-config">外部エディタを設定</A>してから、
+<UL>
+<LI>ツールバーの"エディタ"ボタンを押す</LI>
+<LI>メニューで"ツール>外部エディタで編集"を選択</LI>
+</UL>
+
+のいずれかを行い、外部エディタで編集して保存して終了をすれば、反映されます。</P>
+
+<H2><A NAME="ss10.9">10.9</A> <A HREF="sylpheed.html#toc10.9">折り返し</A>
+</H2>
+
+
+<P>
+<UL>
+<LI>メニューから、"編集>すべての長い行を折り返す"を選択する</LI>
+<LI>ツールバーの"整形"を選択</LI>
+</UL>
+
+のいずれかを行えば、設定にしたがった行数で折り返します。</P>
+<P>"編集>現在の段落を整形する"で現在のカーソル位置にある段落のみを整形できます。</P>
+<P>"編集>自動整形"のチェックを入れておくと、入力中に自動的に整形されます。</P>
+<P>設定で送信時に自動で実行することもできるので、設定しておくことをおすすめします。</P>
+
+<H2><A NAME="ss10.10">10.10</A> <A HREF="sylpheed.html#toc10.10">メッセージに返信する</A>
+</H2>
+
+<P>まず、
+<A HREF="sylpheed-7.html#read-message">メッセージの閲覧</A>に書かれている方法を使ってメッセージを選択します。
+その後、
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"返信"を選択</LI>
+<LI>メニューの"メッセージ>返信"を選択</LI>
+</UL>
+
+のいずれかを行うことでウィンドウが開くので、
+メッセージの新規作成と同じようにして送信できます。</P>
+<P>引用するかどうかは全般の設定の
+<A HREF="sylpheed-15.html#quote-when-reply">返信時にメッセージを引用する</A>という設定で変えることができます。</P>
+<P>アドレスの入力の手間を省くという理由で、関係ない記事に返信して送信しないでください。</P>
+<H2><A NAME="ss10.11">10.11</A> <A HREF="sylpheed.html#toc10.11">メッセージを全員に返信する</A>
+</H2>
+
+<P>単なる返信では宛先(To:)にしか返信されませんが、
+こちらではCc: にも返信されます。</P>
+<P>メッセージを全員に返信するには、
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"返信の宛先>全員に返信"を選択</LI>
+<LI>メニューの"メッセージ>返信の宛先>全員に返信"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<H2><A NAME="ss10.12">10.12</A> <A HREF="sylpheed.html#toc10.12">メッセージを差出人に返信する</A>
+</H2>
+
+<P>一見すると単なる返信のように見えますが、
+メーリングリスト等で付加されるReply-To:を無視して、
+差出人に直接送信できます。</P>
+<P>これを行うには、
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"返信の宛先>差出人に返信"を選択</LI>
+<LI>メニューの"メッセージ>返信の宛先>差出人に返信"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<H2><A NAME="ss10.13">10.13</A> <A HREF="sylpheed.html#toc10.13">メッセージをメーリングリストに返信する</A>
+</H2>
+
+<P>メーリングリストのヘッダを参照して、適切なアドレスに返信します。
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"返信の宛先>メーリングリストに返信"を選択</LI>
+<LI>メニューの"メッセージ>返信の宛先>メーリングリストに返信"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<H2><A NAME="ss10.14">10.14</A> <A HREF="sylpheed.html#toc10.14">メッセージを転送する</A>
+</H2>
+
+<P>
+<A HREF="sylpheed-7.html#read-message">メッセージの閲覧</A>に書かれている方法を使ってメッセージを選択します。
+その後、
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"転送"を選択</LI>
+<LI>メニューの"メッセージ>転送"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<H2><A NAME="ss10.15">10.15</A> <A HREF="sylpheed.html#toc10.15">メッセージを添付ファイルとして転送する</A>
+</H2>
+
+<P>
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"添付として転送"を選択</LI>
+<LI>メニューの"メッセージ>添付として転送"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<H2><A NAME="ss10.16">10.16</A> <A HREF="sylpheed.html#toc10.16">メッセージを手を加えずに転送する</A>
+</H2>
+
+<P>本文の内容や差出人などに手を加えずにそのまま転送します。
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"手を加えずに転送"を選択</LI>
+<LI>メニューの"メッセージ>手を加えずに転送"を選択</LI>
+</UL>
+
+のいずれかを行います。</P>
+<HR>
+<A HREF="sylpheed-11.html">次のページ</A>
+<A HREF="sylpheed-9.html">前のページ</A>
+<A HREF="sylpheed.html#toc10">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-11.html b/manual/ja/sylpheed-11.html
new file mode 100644
index 00000000..989f7151
--- /dev/null
+++ b/manual/ja/sylpheed-11.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: アドレス帳</TITLE>
+ <LINK HREF="sylpheed-12.html" REL=next>
+ <LINK HREF="sylpheed-10.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc11" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-12.html">次のページ</A>
+<A HREF="sylpheed-10.html">前のページ</A>
+<A HREF="sylpheed.html#toc11">目次へ</A>
+<HR>
+<H2><A NAME="s11">11.</A> <A HREF="sylpheed.html#toc11">アドレス帳</A></H2>
+
+<P>アドレス帳は、"ツール>アドレス帳"などによって起動できます。</P>
+<H2><A NAME="ss11.1">11.1</A> <A HREF="sylpheed.html#toc11.1">アドレスの登録・削除</A>
+</H2>
+
+<P>アドレス帳を開いた後、アドレスを登録したいフォルダを"共有アドレス"や
+"個人用アドレス"などが書かれたリストの中から選択します。
+その後、
+<UL>
+<LI>メニューより"アドレス>新規アドレス"</LI>
+<LI>追加ボタンを押す</LI>
+<LI>アドレス表示部分の
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"新規アドレス"</LI>
+</UL>
+
+のいずれかを行うことで追加
+<A HREF="sylpheed-6.html#dialog">ダイアログ</A>が現れるので、それぞれの項目を入力した後OKを押せば
+登録されます。</P>
+<P>また登録されたアドレスを選択後、
+<UL>
+<LI>メニューより"アドレス>編集"</LI>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"編集"</LI>
+<LI>編集ボタンを押す</LI>
+</UL>
+
+のいずれかを行えば編集ダイアログを表示でき、OKを押せば更新されます。</P>
+<P>同じく登録されたアドレスを選択後、
+<UL>
+<LI>メニューより"アドレス>削除"</LI>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"削除"</LI>
+<LI>削除ボタンを押す</LI>
+</UL>
+
+のいずれかを行えばアドレス帳からそのアドレスを削除することができます。</P>
+<H2><A NAME="ss11.2">11.2</A> <A HREF="sylpheed.html#toc11.2">フォルダとグループ</A>
+</H2>
+
+
+
+
+
+<H2><A NAME="address-combo"></A> <A NAME="ss11.3">11.3</A> <A HREF="sylpheed.html#toc11.3">メッセージ作成ウィンドウとの連携</A>
+</H2>
+
+<P>
+<A HREF="sylpheed-10.html#message-create">メッセージの作成</A>画面で、
+<UL>
+<LI>メニューで"ツール>アドレス帳"</LI>
+<LI>"アドレス"ボタンをクリック</LI>
+</UL>
+
+することでアドレス帳画面を出すことができ、
+そこでアドレスやグループを選択して"宛先"(あるいは"To:"), "Cc:", "Bcc:"ボタンを押せば
+それぞれ宛先, Cc, Bccにアドレスが追加されます。</P>
+<P>複数選択してボタンを押して同時にたくさん追加することも可能ですし、
+一度3つのどれかのボタンを押した後、
+また別のアドレスを選択してボタンを押せば
+前に追加したアドレスの次に選択したアドレスが追加されます。</P>
+<HR>
+<A HREF="sylpheed-12.html">次のページ</A>
+<A HREF="sylpheed-10.html">前のページ</A>
+<A HREF="sylpheed.html#toc11">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-12.html b/manual/ja/sylpheed-12.html
new file mode 100644
index 00000000..4a741f9d
--- /dev/null
+++ b/manual/ja/sylpheed-12.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: メッセージの振り分け</TITLE>
+ <LINK HREF="sylpheed-13.html" REL=next>
+ <LINK HREF="sylpheed-11.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc12" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-13.html">次のページ</A>
+<A HREF="sylpheed-11.html">前のページ</A>
+<A HREF="sylpheed.html#toc12">目次へ</A>
+<HR>
+<H2><A NAME="s12">12.</A> <A HREF="sylpheed.html#toc12">メッセージの振り分け</A></H2>
+
+<H2><A NAME="filtering-config"></A> <A NAME="ss12.1">12.1</A> <A HREF="sylpheed.html#toc12.1">振り分けの設定</A>
+</H2>
+
+<P>メニューより、"設定>振り分けの設定..."を選択します。</P>
+
+<H3>フィルタルールの登録</H3>
+
+<P>"追加"ボタンを押すとフィルタルール設定ダイアログが開きます。</P>
+<P>"名前:"欄にルールに対する分かりやすい名前を入力します。</P>
+<P>その下にあるドロップダウンメニューで、複数の条件がある場合にどのようにマッチさせるかを選択します。</P>
+<P>上部枠内の"From"と表示されているドロップダウンメニューで、振り分けの対象にしたいヘッダやその他の条件を選択します。選択肢にないヘッダは"ヘッダを編集..."で追加することができます。</P>
+<P>
+<UL>
+<LI>ヘッダ項目(From, To等): 対象となるヘッダを指定します。</LI>
+<LI>To または Cc: To または Cc の両方を同時に指定します。</LI>
+<LI>いずれかのヘッダ: すべてのヘッダが対象になります。</LI>
+<LI>ヘッダを編集...: ドロップダウンメニューに表示されるヘッダの追加または削除を行います。</LI>
+<LI>メッセージ本文: メッセージの本文を対象とします。</LI>
+<LI>コマンドの実行結果: 外部コマンドを実行し、その戻り値によって振り分けを行います。戻り値が0であればマッチし、0以外であればマッチしません。コマンドラインの末尾にメッセージのファイル名が付加されます。リダイレクトなどのシェル機能は使用できないので、その場合はラッパースクリプトを作成する必要があります。</LI>
+<LI>サイズ: メッセージファイルのサイズを指定した値と比較します。</LI>
+<LI>経過日数: メッセージの送信日時から受信した日時までの経過日数を指定した値と比較します。</LI>
+</UL>
+</P>
+<P>次に、右のドロップダウンメニューで条件をキーワードにマッチさせる方法を選択します。アルファベットの大小文字は区別しません。正規表現には拡張正規表現が使用できます。</P>
+<P>
+<UL>
+<LI>〜が次を含む: ヘッダや本文の内容がキーワードを含む場合マッチします。</LI>
+<LI>〜が次を含まない: ヘッダや本文の内容がキーワードを含まない場合マッチします。</LI>
+<LI>〜が次に一致: ヘッダや本文中の1行がキーワードに一致する場合マッチします。</LI>
+<LI>〜が次に一致しない: ヘッダや本文中の1行がキーワードに一致しない場合マッチします。</LI>
+<LI>〜が次の正規表現にマッチ: ヘッダや本文の内容が正規表現にマッチする場合、マッチします。</LI>
+<LI>〜が次の正規表現にマッチしない: ヘッダや本文の内容が正規表現にマッチしない場合、マッチします。</LI>
+<LI>(サイズ)が次より大きい: サイズが指定した値より大きい場合マッチします。</LI>
+<LI>(サイズ)が次より小さい: サイズが指定した値より小さい場合マッチします。</LI>
+<LI>(経過日数)が次より長い: 送信日時からの経過日数が指定した値より長い場合マッチします。</LI>
+<LI>(経過日数)が次より短い: 送信日時からの経過日数が指定した値より短い場合マッチします。</LI>
+</UL>
+</P>
+<P>振り分けの対象にヘッダや本文を選択した場合は、キーワードを入力します。キーワードを空にした場合は、ヘッダが存在すれば常にマッチするようになります。
+サイズや経過日数を選択した場合は、数値を入力します。</P>
+<P>条件を追加したい場合は、"+"ボタンを選択すると新しい行が追加されるので、同様に上記の作業を繰り返します。また、"-"ボタンを選択するとその条件を削除することができます。</P>
+<P>次に、アクションを選択します。条件と同様に任意に追加できますが、「移動」、「受信しない」、「サーバから削除」は一度しか実行できず、同時に選択することはできません。移動先やコピー先を指定する場合はフォルダアイコンのボタンで選択できます。</P>
+<P>
+<UL>
+<LI>移動: 指定したフォルダにメッセージを移動します(以降のルールは評価されません)。</LI>
+<LI>コピー: 指定したフォルダにメッセージをコピーします。何度でも実行可能です。</LI>
+<LI>受信しない: メッセージをサーバに残します(以降のルールは評価されません)。</LI>
+<LI>サーバから削除: 受信時にサーバにメッセージを残す設定にしていた場合でも、強制的にサーバから削除します(以降のルールは評価されません)。</LI>
+<LI>マーク: マークを付けます。</LI>
+<LI>カラーラベルを指定: カラーラベルを付けます。</LI>
+<LI>読んだことにする: 未読マークを外します。</LI>
+<LI>コマンドを実行: 任意のコマンドを実行します。末尾にメッセージのファイル名が自動的に付加されます。</LI>
+<LI>ルールの評価を停止: 当該ルール以降のルールを評価しないようにします。</LI>
+</UL>
+</P>
+<P>設定が完了したら、"OK"ボタン押すと登録が完了します。"キャンセル"を押すと設定は破棄されます。</P>
+<H3>振り分けルールの例</H3>
+
+<P>Subjectに"!ゴミ!"か"!ゴミ!"が含まれる場合にごみ箱(trash)に振り分けしたい場合を例にします。</P>
+<P>まず、"次の条件のいずれかが該当する場合"を選択します。</P>
+<P>そして、1つ目の条件でSubjectを選択し、"が次を含む"を選択し、キーワードに"!ゴミ!"を入力します。</P>
+<P>"+"ボタンを押し、条件を追加します。</P>
+<P>ヘッダは同じくSubjectを選び、キーワードに"!ゴミ!"を入力します。</P>
+<P>そして、アクションで"移動"を選択し、フォルダの選択ボタンを押してごみ箱を選択します。</P>
+<P>その後、"OK"ボタンを押すとルールの追加は完了します。</P>
+<H3>振り分けルールの編集</H3>
+
+<P>登録済みルールのリストから編集したいルールを選択して、"編集"ボタンを押します。</P>
+<H3>振り分けルールのコピー</H3>
+
+<P>登録済みルールのリストからコピーしたいルールを選択して、"コピー"ボタンを押します。</P>
+<H3>振り分けルールの削除</H3>
+
+<P>登録済みルールのリストから削除したいルールを選択して、"削除"ボタンを押します。</P>
+<H2><A NAME="ss12.2">12.2</A> <A HREF="sylpheed.html#toc12.2">振り分けを実行するには</A>
+</H2>
+
+
+<H3>自動的に振り分けを実行するには</H3>
+
+<P>自動的に振り分けを実行したいアカウントの
+<A HREF="sylpheed-8.html#Account-Config">アカウントの設定</A>で、
+受信タブの中にある「受信時にメッセージを振り分ける」をオンにします。</P>
+<H3>開いているフォルダに振り分けを実行するには</H3>
+
+<P>メニューの"ツール>フォルダ中のすべてのメッセージを振り分け"または"ツール>選択中のメッセージを振り分け"を選択することで、設定されたルールを元に振り分けが実行されます。</P>
+<H3>振り分けルールの自動生成</H3>
+
+<P>メッセージを
+<A HREF="sylpheed-7.html#select-operation">選択</A>してから、
+"ツール>振り分けルールを作成"を実行することで、
+ルールの雛型を自動的に作成します。</P>
+<P>あとは、必要な情報を追加し、登録ボタンを押すだけです。</P>
+<HR>
+<A HREF="sylpheed-13.html">次のページ</A>
+<A HREF="sylpheed-11.html">前のページ</A>
+<A HREF="sylpheed.html#toc12">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-13.html b/manual/ja/sylpheed-13.html
new file mode 100644
index 00000000..11aecdca
--- /dev/null
+++ b/manual/ja/sylpheed-13.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: 他メール(メール保存形式)からSylpheed(MHフォルダ形式)への移行</TITLE>
+ <LINK HREF="sylpheed-14.html" REL=next>
+ <LINK HREF="sylpheed-12.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc13" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-14.html">次のページ</A>
+<A HREF="sylpheed-12.html">前のページ</A>
+<A HREF="sylpheed.html#toc13">目次へ</A>
+<HR>
+<H2><A NAME="s13">13.</A> <A HREF="sylpheed.html#toc13">他メール(メール保存形式)からSylpheed(MHフォルダ形式)への移行</A></H2>
+
+<H2><A NAME="mbox-import"></A> <A NAME="ss13.1">13.1</A> <A HREF="sylpheed.html#toc13.1">mbox形式のメッセージファイルの取り込み</A>
+</H2>
+
+<P>ファイルメニューからmboxファイルをインポートを選択し、
+インポートファイルにはインポートしたいmbox形式のメールボックスを選択します。</P>
+<P>インポート先には選択したメールボックスを展開するフォルダを指定し
+OKを押せばインポートされます。
+mbox形式は、"mbox"というファイルの他にもNetscape Messengerの&nbsp;/nsmailの下のファ
+イル、KMailの&nbsp;/Mail以下のファイル等にも利用されているので、そのファイルを利用
+することで移行できます。</P>
+<P>ただし、KMailは添付ファイルを別ファイルにしてしまう仕様があるらしく、
+添付ファイルがある場合、正しくコンバートすることができません。</P>
+<H2><A NAME="ss13.2">13.2</A> <A HREF="sylpheed.html#toc13.2">Windowsのメーラ(Becky!やAL-Mail, Outlook Express4等)からの移行</A>
+</H2>
+
+<P>Windows用フリーソフトウェアである
+<A HREF="http://www.digico-m.com/shin1/">MailExp</A>を利用して
+"標準UNIX From形式のメールボックス"にエクスポートします。
+その後そのファイルを移動しそのファイルを
+<A HREF="#mbox-import">mbox形式としてインポート</A>します。
+MailExpはとても多くのメーラからのインポートが可能です。</P>
+<H2><A NAME="ss13.3">13.3</A> <A HREF="sylpheed.html#toc13.3">Outlook Express 5のdbx形式からの移行</A>
+</H2>
+
+<P>Outlook Express 5の形式はMailExpではサポートしていないので
+<A HREF="http://www02.so-net.ne.jp/~home/oe5conv/">OE5Conv</A>を利用して
+mbox形式へエクスポートした後、そのファイルを
+<A HREF="#mbox-import">mbox形式としてインポート</A>します。</P>
+<HR>
+<A HREF="sylpheed-14.html">次のページ</A>
+<A HREF="sylpheed-12.html">前のページ</A>
+<A HREF="sylpheed.html#toc13">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-14.html b/manual/ja/sylpheed-14.html
new file mode 100644
index 00000000..2e43b290
--- /dev/null
+++ b/manual/ja/sylpheed-14.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: NetNewsの購読</TITLE>
+ <LINK HREF="sylpheed-15.html" REL=next>
+ <LINK HREF="sylpheed-13.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc14" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-15.html">次のページ</A>
+<A HREF="sylpheed-13.html">前のページ</A>
+<A HREF="sylpheed.html#toc14">目次へ</A>
+<HR>
+<H2><A NAME="s14">14.</A> <A HREF="sylpheed.html#toc14">NetNewsの購読</A></H2>
+
+
+<H2><A NAME="ss14.1">14.1</A> <A HREF="sylpheed.html#toc14.1">サーバの追加・削除</A>
+</H2>
+
+
+
+<H3><A NAME="append-news-serv"></A> サーバの追加</H3>
+
+<P>まず、
+<A HREF="sylpheed-8.html#append-account">アカウント</A>の追加を行なってください。
+そこで、サーバ情報のプロトコルで"ニュース (NNTP)"を選択し、
+ニュースサーバ名を記入してください。</P>
+<P>認証が必要な場合には、"このサーバは認証が必要"のチェックボックスもオンにして、
+ユーザIDとパスワードも入力してください。</P>
+<P>そしてOKを押せばフォルダビューにニュースサーバ名が登場します。</P>
+<H3>サーバの削除</H3>
+
+<P>
+<A HREF="sylpheed-8.html#edit-account">アカウントの編集</A>で該当するアカウントを選択し、"削除"ボタンを押してください。</P>
+<P>キャッシュ情報は復元できないので注意してください。</P>
+<H3>ニュースサーバに関するTips</H3>
+
+<P>現在のSylpheedはニュースサーバに1つ1つメッセージを取り寄せて行きます。
+そのため、ダイヤルアップ環境では遅いかも知れません。</P>
+<P>そこでleafnode+ のようなオフラインニュースサーバを使うことをお薦めします。</P>
+<H2><A NAME="ss14.2">14.2</A> <A HREF="sylpheed.html#toc14.2">ニュースグループの購読・購読解除</A>
+</H2>
+
+<H3>ニュースグループの購読</H3>
+
+<P>
+<A HREF="#append-news-serv">サーバの追加</A>で追加したニュースサーバを
+<A HREF="sylpheed-6.html#folderview">フォルダビュー</A>で
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>を出し、
+"ニュースグループを購読"を選択してください。</P>
+<P>そして検索し、講読したいグループを選択した後OKを押せば講読できます。
+複数選択も可能です。</P>
+<H3>ニュースグループの購読解除</H3>
+
+<P>購読で追加したニュースグループを右クリックしてコンテキストメニューを出し、
+"ニュースグループを削除"を選択し、"はい"を選択すれば解除できます。</P>
+<P>この場合もキャッシュや未読情報はクリアされてしまうので注意してください。</P>
+<H2><A NAME="ss14.3">14.3</A> <A HREF="sylpheed.html#toc14.3">ニュースを読む</A>
+</H2>
+
+<P>ニュースは、
+<A HREF="sylpheed-7.html#read-message">メールの閲覧</A>と全く同じ方法で読むことができます。</P>
+<H2><A NAME="ss14.4">14.4</A> <A HREF="sylpheed.html#toc14.4">ニュースの投稿</A>
+</H2>
+
+<P>ニュースフォルダを開いている状態か、ニュースのアカウントを選択している状態で
+メッセージの作成をすれば記事を書くことができ、メールと同じような操作で投稿することができます。</P>
+<HR>
+<A HREF="sylpheed-15.html">次のページ</A>
+<A HREF="sylpheed-13.html">前のページ</A>
+<A HREF="sylpheed.html#toc14">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-15.html b/manual/ja/sylpheed-15.html
new file mode 100644
index 00000000..c550293a
--- /dev/null
+++ b/manual/ja/sylpheed-15.html
@@ -0,0 +1,298 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: カスタマイズ(全般の設定)</TITLE>
+ <LINK HREF="sylpheed-16.html" REL=next>
+ <LINK HREF="sylpheed-14.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc15" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-16.html">次のページ</A>
+<A HREF="sylpheed-14.html">前のページ</A>
+<A HREF="sylpheed.html#toc15">目次へ</A>
+<HR>
+<H2><A NAME="s15">15.</A> <A HREF="sylpheed.html#toc15">カスタマイズ(全般の設定)</A></H2>
+
+<H2><A NAME="general-config-open"></A> <A NAME="ss15.1">15.1</A> <A HREF="sylpheed.html#toc15.1">全般の設定</A>
+</H2>
+
+<P>全般の設定ウィンドウを開くには
+<UL>
+<LI>メニューから"設定>全般の設定"</LI>
+<LI>ツールバーから設定をクリック</LI>
+</UL>
+
+することで開くことができます。</P>
+<H2><A NAME="ss15.2">15.2</A> <A HREF="sylpheed.html#toc15.2">各項目の説明</A>
+</H2>
+
+<H3>(受信)タブ</H3>
+
+<H3>外部プログラム</H3>
+
+<P>メールの受信に外部プログラムを使用するを選択すれば、
+Sylpheed本体の受信部を使用せずにそのプログラムを利用して受信を行います。</P>
+<H3>ローカルスプール</H3>
+
+<P>スプールから取り込むを選択すれば、
+"[スプールディレクトリ]/[ユーザ名]"のファイルからメッセージが取り込まれます。
+取り込み時に振り分けるを選択すれば、取り込み時に振り分けられます。</P>
+<H3>新着メールを自動チェックする</H3>
+
+<P>チェックすれば指定した時間ごとに新着メールをチェックします。</P>
+<H3>起動時に新着メールをチェックする</H3>
+
+<P>Sylpheed起動時に新着メールを自動チェックします。</P>
+<H3>受信後に全てのローカルフォルダを更新する</H3>
+
+<P>メールの受信にprocmailなどの外部プログラムを使って直接MHフォルダにメッセージを取り込んだ場合フォルダの情報は自動的に更新されないので、これを有効にすることで最新の状態に更新できます。</P>
+<H3>ダウンロードする記事数の上限</H3>
+
+<P>ニュースフォルダに未取得の記事を取得するときの記事数の上限を指定できます。
+0を指定すると無制限になります。取得済みの記事数は影響しません。</P>
+<H3>(送信タブ)</H3>
+
+
+<H3>外部プログラム</H3>
+
+<P>"メールの送信に外部プログラムを使用する"を選択すれば、Sylpheed本体の送信部を使用せずにそのプログラムを利用して送信を行います。</P>
+<H3>送信したメッセージを送信控に保存する</H3>
+
+
+<H3>送信コードセット</H3>
+
+<P>メッセージを送信するときの文字コードを選択することができます。</P>
+<P>iconvを有効にしてコンパイルされたときは多くのコードセットを選択することができます。</P>
+<P>通常は"自動設定"を推奨します。
+ちなみに、日本語ロケールが設定されている場合、ISO-2022-JPが選択されます。</P>
+<P>UTF-8等も使用することもできますが、相手が読めると確認できる場合のみ
+使用してください。</P>
+<H3>(作成)タブ</H3>
+
+
+<H3>署名</H3>
+
+<P>自動的に署名を挿入するを選択すれば、メッセージ作成時に最後の方に
+自動的に署名が挿入されます。
+<PRE>
+[設定されている署名の区切り]
+[各アカウント設定の署名ファイル]
+</PRE>
+
+というように挿入されます。</P>
+<H3>エディタ</H3>
+
+
+<H3>返信時に自動的にアカウントを選択する</H3>
+
+<P>To: に書かれたアドレスからアカウントを判断し、
+自動的に返信時のアカウントを決定します。</P>
+<H3><A NAME="quote-when-reply"></A> 返信時にメッセージを引用する</H3>
+
+<P>返信するとき、引用するかどうか指定します。</P>
+<H3>返信ボタンでメーリングリストに返信する</H3>
+
+<P>ツールバーの返信ボタンを押した場合にメーリングリストに返信します。</P>
+<H3>(引用)タブ</H3>
+
+<H3>引用の書式</H3>
+
+<P>引用符と引用の形式を設定します。</P>
+<P>?x{expr}は、xが指定されていればexprを表示します。
+例えば、?s{件名: %s}というように使えば、
+件名が指定されているときのみ"件名: (件名)"という表示ができます。</P>
+<P>引用符に設定した文字列が、>で、
+引用の形式が
+<PRE>
+On %d
+%f wrote:
+
+%Q
+</PRE>
+
+だった場合
+<PRE>
+On [日付]
+[差出人] wrote:
+> 元のメッセージの文章
+> 2行目
+</PRE>
+
+というように引用して返信時に引用されます。</P>
+<P>記号の説明ボタンをクリックすれば、%で始まるものの説明がでてきます。
+<UL>
+<LI>%d: 日付</LI>
+<LI>%f: 差出人</LI>
+<LI>%N: 差出人の氏名</LI>
+<LI>%F: 差出人の名前</LI>
+<LI>%I: 差出人のイニシャル</LI>
+<LI>%s: 件名</LI>
+<LI>%t: 宛先</LI>
+<LI>%c: Cc</LI>
+<LI>%n: ニュースグループ</LI>
+<LI>%i: メッセージID</LI>
+<LI>%%: パーセント記号(%そのもの)</LI>
+<LI>%M: メッセージ本文</LI>
+<LI>%Q: 引用符付きメッセージ本文</LI>
+<LI>%q: 引用符付きメッセージ本文(署名なし)</LI>
+<LI>\\: 文字 バックスラッシュ</LI>
+<LI>\?: 文字 疑問符</LI>
+<LI>\{: 文字 開き中括弧</LI>
+<LI>\}: 文字 閉じ中括弧</LI>
+</UL>
+</P>
+<H3>転送の書式</H3>
+
+<P>転送の書式も同様です。</P>
+<H3>(表示)タブ</H3>
+
+<P>ここの項目は表示だけであり、メッセージ本体には影響を与えません。</P>
+<H3><A NAME="font-config"></A> フォント</H3>
+
+<P>メッセージを表示するフォントを設定できます。
+横の"..."ボタンを押せばフォント選択ダイアログを呼び出せますが、
+あまりお薦めはしません。</P>
+<P>ちなみに、マニュアル作者は
+<PRE>
+-alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0
+</PRE>
+
+に設定しています。基本的に、固定幅フォントに設定することをお薦めします。
+メニューなどのフォントを設定する場合についてはFAQを参照してください。</P>
+<H3>ヘッダの項目を翻訳する</H3>
+
+<P>From:を宛先: Subject: を件名:にして表示したりします。</P>
+<H3>フォルダ名の横に未読数を表示する</H3>
+
+<P>
+<A HREF="sylpheed-6.html#folderview">フォルダビュー</A>で、Folder (30)のように未読メッセージの数を表示します。</P>
+<H3>差出人が自分の場合は'差出人'カラムに宛先を表示する</H3>
+
+<P>
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>の差出人カラムで、宛先人が現在のアカウント設定と同じ場合、
+"--> 宛先"というように表示できます。</P>
+<H3>水平スクロールバーを有効にする</H3>
+
+<P>
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>に水平スクロールバーを表示します。</P>
+<H3>スレッドを展開する</H3>
+
+<P>フォルダを開いたときに、
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>でスレッドを展開した状態で表示するかどうかを指定します。</P>
+<H3>未読メッセージをボールドフォントで表示する</H3>
+
+<H3>日付の書式</H3>
+
+<P>日付の書式を%y/%m/%d(%a) %H:%Mのように指定します。
+詳しくはオンラインマニュアルのstrftime(3)を御覧ください。
+端末エミュレータ等で、
+<PRE>
+$ man strftime
+</PRE>
+
+のようにすれば読むことができます。</P>
+<H3>サマリの表示項目を設定...</H3>
+
+<P>サマリの表示項目を設定できます。
+クリックして、必要なものを選択してOKボタンを押して完了です。</P>
+<H3>(メッセージ)タブ</H3>
+
+<P>ここの項目は表示だけであり、メッセージ本体には影響を与えません。</P>
+<H3>メッセージの色を有効にする</H3>
+
+<P>チェックをオンにして編集ボタンを押すとメッセージの引用の深さに応じた
+表示色の設定ができます。</P>
+<H3>2バイト英数字を1バイト文字で表示する</H3>
+
+<P>これも好みの問題ですが、2バイト英数字を1バイト文字で表示することができます。
+強制的に変更してしまうので、アスキーアート等はずれてしまう場合があります。
+日本語のみに有効です。</P>
+<H3>メッセージビューの上部にヘッダペインを表示する</H3>
+
+<P>メッセージビューの上に主なヘッダを表示します。
+現在、表示内容はカスタマイズできません。</P>
+<H3>メッセージビューに簡略ヘッダを表示する</H3>
+
+<P>メッセージビューに簡略ヘッダを表示します。
+編集ボタンを押せば表示内容をカスタマイズできます。
+"指定されていないヘッダを全て表示"が選択されている場合、
+"表示しないヘッダ"に選択されたもの以外が表示され、
+選択されていない場合、"表示するヘッダ"に指定されているもののみが表示されます。</P>
+<H3>行間を空ける</H3>
+
+<P>設定したピクセル分行間を空けて表示することが出来ます。</P>
+<H3>行頭を空ける</H3>
+
+<P>行頭を空けて表示することができます。</P>
+<H3>スクロール/半ページ単位</H3>
+
+<P>スペースキー等でのスクロール量を半ページ単位にします。</P>
+<H3>スムーズスクロール</H3>
+
+<P>スペースキー等でのスクロールをスムーズにします。
+"間隔"で何ドットずつスクロールするかを決めることができます。
+間隔を大きくすれば速くなります。</P>
+<H3>(個人情報)タブ</H3>
+
+<P>GPGMEを有効にしたときのみ表示されます。</P>
+<H3>(インタフェース)タブ</H3>
+
+
+<H3>フォルダに入ったときに最初の未読メッセージを開く</H3>
+
+<P>フォルダに入ったときに最初の未読メッセージを開けます。
+設定されていない場合、フォルダに入った後Enterキーや中ボタン, 左ボタンクリックで表示を更新する必要がありますが、
+フォルダに入ったときに先頭の未読のフラグを消してしまう心配がありません。</P>
+<H3>新着メールを受信した後受信箱に移動する</H3>
+
+<P>選択されていれば、受信時にアカウントの設定で受信箱に指定したフォルダに
+カーソルが移動します。</P>
+<H3>メッセージを移動または削除したら即座に実行する</H3>
+
+<P>これがオフである場合、移動または削除のアクションをしても
+すぐには実行されずにそれぞれの"マーク"という形で保持され、
+"実行"されたとき実際に実行されます。</P>
+<H3>受信ダイアログ</H3>
+
+<P>受信ダイアログをどのときに表示するか指定します。</P>
+<H3>ダブルクリックしたときにアドレスを宛先に追加する</H3>
+
+<P>メッセージ作成ウィンドウからアドレス帳を呼び、
+アドレスをダブルクリックしたときに、
+このチェックがオンになっていればアドレスを"宛先"エントリーに追加します。</P>
+<P>オフになっているときは通常のアドレス帳と同じく
+アドレス編集モードに入ります。</P>
+<H3>キーバインドを設定</H3>
+
+<P>好みのキーバインドを選んでOKを押してください。
+このマニュアルは標準バインドを選択してあるものとして書かれています。</P>
+<H3>(その他)タブ</H3>
+
+
+<H3><A NAME="ext-browser-config"></A> 外部ブラウザ</H3>
+
+<P>外部ブラウザのコマンドを入力します。
+%sはURIで置き換えられます。マニュアル表示やURIダブルクリックで使用されます。
+ただし、デフォルトのnetscape -remote 'openURL(%s,raise)'では、
+netscapeが最初から起動されている必要があるため、変更をお薦めします。</P>
+<H3>印刷</H3>
+
+<P>印刷に使用するコマンドを選択できます。%sがメッセージのファイルに置き換えられます。
+hoge &lt; %s | lprというようにしてフィルタを設定することも可能です。</P>
+<H3><A NAME="ext-editor-config"></A> 外部エディタ</H3>
+
+<P>外部エディタを選択できます。%sは一時ファイルのファイル名に置き換えられます。</P>
+<H3>終了時</H3>
+
+<P>終了時に確認するを選択すれば、Sylpheedを終了するときに、
+本当に終了していいかどうか質問してきます。</P>
+<P>終了時にごみ箱を空にするを選択すれば、
+終了時にゴミ箱を空にしてくれます。
+そのときに空にする前に尋ねるがオンであれば空にするかどうか質問します。</P>
+<HR>
+<A HREF="sylpheed-16.html">次のページ</A>
+<A HREF="sylpheed-14.html">前のページ</A>
+<A HREF="sylpheed.html#toc15">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-16.html b/manual/ja/sylpheed-16.html
new file mode 100644
index 00000000..ed0e62c9
--- /dev/null
+++ b/manual/ja/sylpheed-16.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: FAQ</TITLE>
+ <LINK HREF="sylpheed-17.html" REL=next>
+ <LINK HREF="sylpheed-15.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc16" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-17.html">次のページ</A>
+<A HREF="sylpheed-15.html">前のページ</A>
+<A HREF="sylpheed.html#toc16">目次へ</A>
+<HR>
+<H2><A NAME="s16">16.</A> <A HREF="sylpheed.html#toc16">FAQ</A></H2>
+
+
+<H2><A NAME="ss16.1">16.1</A> <A HREF="sylpheed.html#toc16.1">ニュースのメッセージ未読情報について</A>
+</H2>
+
+<P>Q. Sylpheedでは同じMessageの未読情報を異なるフォルダ間で管理してくれないのでしょうか?</P>
+
+<P>A. 現在のSylpheedは未読情報はフォルダ単位で管理しているため、
+ニュースグループごとに未読情報は変わって来てしまいます。</P>
+<H2><A NAME="ss16.2">16.2</A> <A HREF="sylpheed.html#toc16.2">メニューなどのフォント変更について</A>
+</H2>
+
+<P>Q. メッセージ本文のフォントは
+<A HREF="sylpheed-15.html#font-config">全般の設定から変更</A>
+できましたが、サマリやメニューなどのフォントは変更できないのでしょうか?</P>
+
+<P>A. できます。$HOME/.sylpheed/gtkrcファイルを置いてください。
+<PRE>
+style "Sylpheed-Widget-font" {
+ fontset = "-adobe-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,\
+ -alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0"
+}
+class "GtkWidget" style "Sylpheed-Widget-font"
+</PRE>
+
+というようなファイルです。</P>
+<H2><A NAME="ss16.3">16.3</A> <A HREF="sylpheed.html#toc16.3">ショートカットキーのキーバインドの変更</A>
+</H2>
+
+<P>Q. ショートカットキーのキーバインドの変更は出来ますか?</P>
+
+<P>A. メニューに設定されている項目に関してはできます。
+メニューで変更したい項目にカーソルを合わせてから、その部分で変更したいキーを押せば、
+割り当てられます。Backspaceキーを押せば、消すことができます。
+変更は保存されます。</P>
+<H2><A NAME="ss16.4">16.4</A> <A HREF="sylpheed.html#toc16.4">返信マークについて</A>
+</H2>
+
+<P>Q. 返信をやめたのに返信マークが残ってしまいます。消えないのでしょうか。</P>
+<P>A. 現在の仕様では消えません。一度メッセージを未読にしてから読んだことにすることで消すことはできます。</P>
+<H2><A NAME="ss16.5">16.5</A> <A HREF="sylpheed.html#toc16.5">サマリビューの下に表示される画像について</A>
+</H2>
+
+<P>Q. ヘッダが表示されている部分に小さな画像が表示されていますが、これは何でしょうか。
+また、どのようにしたら挿入できるのでしょうか。</P>
+<P>A. これは、X-Faceといいます。
+<A HREF="sylpheed-8.html#Account-Config">アカウントの設定</A>のユーザ定義ヘッダで、
+X-Faceヘッダフィールドに登録すれば相手側に環境があれば表示されることが可能です。</P>
+<P>
+<A HREF="http://www.dairiki.org/xface/">http://www.dairiki.org/xface/</A>のサイトで既存の画像ファイルをX-Faceフォーマットに変換することができます。</P>
+<HR>
+<A HREF="sylpheed-17.html">次のページ</A>
+<A HREF="sylpheed-15.html">前のページ</A>
+<A HREF="sylpheed.html#toc16">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-17.html b/manual/ja/sylpheed-17.html
new file mode 100644
index 00000000..6ade3a52
--- /dev/null
+++ b/manual/ja/sylpheed-17.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: 情報</TITLE>
+ <LINK HREF="sylpheed-18.html" REL=next>
+ <LINK HREF="sylpheed-16.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc17" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-18.html">次のページ</A>
+<A HREF="sylpheed-16.html">前のページ</A>
+<A HREF="sylpheed.html#toc17">目次へ</A>
+<HR>
+<H2><A NAME="s17">17.</A> <A HREF="sylpheed.html#toc17">情報</A></H2>
+
+
+<H2><A NAME="ss17.1">17.1</A> <A HREF="sylpheed.html#toc17.1">Sylpheed 関連サイト</A>
+</H2>
+
+
+<H3>Sylpheed オフィシャルWebサイト</H3>
+
+<P>Sylpheed オフィシャルWebサイトの場所は、
+<A HREF="http://sylpheed.good-day.net/">http://sylpheed.good-day.net/</A>
+です。</P>
+<H3>Sylpheed 最新版入手先</H3>
+
+<P>
+<A HREF="http://sylpheed.good-day.net/sylpheed/">http://sylpheed.good-day.net/sylpheed/</A>から入手できます。</P>
+
+<H3>rpmの入手先</H3>
+
+<P>
+<A HREF="http://y-imai.good-day.net/sylpheed/">http://y-imai.good-day.net/sylpheed/</A></P>
+<P>でほとんどのRedHat Package Manager(rpm)を利用したLinux Distributionに対応できると思われる
+rpmがあります。
+それぞれのDistribution用のものが用意されている場合でこれを利用してもほとんど問題ないでしょう。
+多分最新です。</P>
+
+<H3>nightly build rpm</H3>
+
+<P>
+<A HREF="http://sylpheed.good-day.net/sylpheed/">http://sylpheed.good-day.net/sylpheed/</A>より
+cvs repositryから毎日0:00に取り出したものを上記rpmと同条件で
+自動的にビルドしたものを入手できます。
+ただし、cvs repositryから取り出したもので、
+確認もしてないのでちゃんと動作するとは限りません。</P>
+
+<H3>Debian Packageの入手先</H3>
+
+<P>woody以降にはnon-USセクションに入っています。</P>
+<H3>FreeBSD portsの入手先</H3>
+
+<H2><A NAME="Sylpheed-ML"></A> <A NAME="ss17.2">17.2</A> <A HREF="sylpheed.html#toc17.2">メーリングリスト</A>
+</H2>
+
+<P>Sylpheed メーリングリストは good-day.net で運用されることになりました。</P>
+<P>Sylpheed に関する全般的な話題を扱うメーリングリストです。日本語
+(
+<A HREF="sylpheed-jp@good-day.net">sylpheed-jp@good-day.net</A>) と
+英語 (
+<A HREF="sylpheed@good-day.net">sylpheed@good-day.net</A>) の2種類があります。</P>
+<P>以下は
+<A HREF="sylpheed-jp@good-day.net">sylpheed-jp@good-day.net</A> を例に説明しますが、
+<A HREF="sylpheed@good-day.net">sylpheed@good-day.net</A> の場合は適宜読み替えてください
+(sylpheed-jp → sylpheed, sylpheed-jp-ctl → sylpheed-ctl)。</P>
+
+<H3>参加方法</H3>
+
+
+<P>
+<PRE>
+subscribe あなたの氏名
+</PRE>
+
+と本文に書いたメールを
+<A HREF="sylpheed-jp-ctl@good-day.net">sylpheed-jp-ctl@good-day.net</A> 宛に送信してください。
+名前は半角英数字(ローマ字)が期待されています。
+また全角スペースなどのコードがあるとエラーになります。</P>
+<P>その一度めの登録リクエストに対し次のようなフレーズ(この数字はあくまでも例です)
+<PRE>
+confirm 84682771 Anne Shirley
+</PRE>
+
+を含む『このメーリングリストに登録をしてもよいか?』という確認を求めるメールを一
+度返します。
+これは「勝手にメーリングリストへ登録されてしまう」等のいたずらへの予防策です。</P>
+<P>あなたがこのメーリングリストへの参加確認のメールを受けとったなら、
+<PRE>
+confirm パスワード(数字) あなたの名前
+</PRE>
+
+このフレーズを含むメールをもう一度登録用のアドレス
+<A HREF="sylpheed-jp-ctl@good-day.net">sylpheed-jp-ctl@good-day.net</A>
+へ送信して下さい。そうするとあなたの確認が得られたとみなし、サーバはあなたを登
+録します。</P>
+<P>投稿先は
+<A HREF="sylpheed-jp@good-day.net">sylpheed-jp@good-day.net</A> です。</P>
+<P>注意: もし、
+<PRE>
+confirm パスワード(数字) あなたの名前
+</PRE>
+
+のメールをなくしてしまったとか、分からなくなってきたので最初からやりなおしたい
+という場合は、「最初から」、つまり
+<PRE>
+subscribe Anne Shirley
+</PRE>
+
+を送ることからやり直して下さい。</P>
+
+<H3>退会方法</H3>
+
+<P>
+<PRE>
+unsubscribe
+</PRE>
+
+と本文に書いたメールを
+<A HREF="sylpheed-jp-ctl@good-day.net">sylpheed-jp-ctl@good-day.net</A> 宛に送信してください。</P>
+<P>過去ログは
+<A HREF="http://www.tmtm.org/sylpheed/ml/">http://www.tmtm.org/sylpheed/ml/</A>から入手できます。</P>
+<H2><A NAME="ss17.3">17.3</A> <A HREF="sylpheed.html#toc17.3">Anonymous CVS</A>
+</H2>
+
+<P>Sylpheedの開発にはCVSが利用されています。
+CVSの説明に関しては、
+<A HREF="http://kahori.com/j-cvsbook/">http://kahori.com/j-cvsbook/</A>などのサイトや書籍を参考にしてください。</P>
+<P>CVSから最新のSylpheedを入手するには,
+環境変数CVSROOTに:pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheedをセットします。
+(cvsの-dオプションで直接指定する場合は必要ありません)
+<PRE>
+csh系:
+ setenv CVSROOT :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed
+sh系(bashなど):
+ export CVSROOT=':pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed'
+</PRE>
+</P>
+<P>その後、
+<PRE>
+$ cvs login
+CVS password: [enter]
+</PRE>
+
+でログインします。passwordは無しです。</P>
+<P>適当なディレクトリに移動し、
+<PRE>
+$ cvs -z3 checkout sylpheed
+</PRE>
+
+でカレントディレクトリ以下にsylpheedというソースツリーが作成されます。</P>
+<P>最新のソースツリーにアップデートするには、
+<PRE>
+$ cvs -z3 update
+</PRE>
+
+を実行してください。</P>
+
+<HR>
+<A HREF="sylpheed-18.html">次のページ</A>
+<A HREF="sylpheed-16.html">前のページ</A>
+<A HREF="sylpheed.html#toc17">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-18.html b/manual/ja/sylpheed-18.html
new file mode 100644
index 00000000..4ca880f7
--- /dev/null
+++ b/manual/ja/sylpheed-18.html
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: GNU Free Documentation License</TITLE>
+ <LINK HREF="sylpheed-19.html" REL=next>
+ <LINK HREF="sylpheed-17.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc18" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-19.html">次のページ</A>
+<A HREF="sylpheed-17.html">前のページ</A>
+<A HREF="sylpheed.html#toc18">目次へ</A>
+<HR>
+<H2><A NAME="s18">18.</A> <A HREF="sylpheed.html#toc18">GNU Free Documentation License</A></H2>
+
+<H2><A NAME="gfdl"></A> <A NAME="ss18.1">18.1</A> <A HREF="sylpheed.html#toc18.1">GNU Free Documentation License</A>
+</H2>
+
+<P>Version 1.1, March 2000</P>
+
+<P>
+<PRE>
+Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</PRE>
+</P>
+<P><B>0. PREAMBLE</B></P>
+<P>The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.</P>
+<P>This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.</P>
+<P>We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.</P>
+
+<P><B>1. APPLICABILITY AND DEFINITIONS</B></P>
+
+<P>This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The "Document", below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as "you".</P>
+<P>A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.</P>
+<P>A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.</P>
+<P>The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.</P>
+<P>The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.</P>
+<P>A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not "Transparent" is called "Opaque".</P>
+<P>Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.</P>
+<P>The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.</P>
+
+<P><B>2. VERBATIM COPYING</B></P>
+<P>You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.</P>
+<P>You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.</P>
+
+<P><B>3. COPYING IN QUANTITY</B></P>
+<P>If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.</P>
+<P>If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.</P>
+<P>If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.</P>
+
+<P>It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.</P>
+
+<P><B>4. MODIFICATIONS</B></P>
+<P>You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:</P>
+<P>
+<UL>
+<LI><B>A.</B> Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.</LI>
+<LI><B>B.</B> List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has less than five).</LI>
+<LI><B>C.</B> State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+</LI>
+<LI><B>D.</B> Preserve all the copyright notices of the Document.</LI>
+<LI><B>E.</B> Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.</LI>
+<LI><B>F.</B> Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.</LI>
+<LI><B>G.</B> Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.</LI>
+<LI><B>H.</B> Include an unaltered copy of this License.</LI>
+<LI><B>I.</B> Preserve the section entitled "History", and its title, and add to
+it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section entitled "History" in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+</LI>
+<LI><B>J.</B> Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the "History" section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.</LI>
+<LI><B>K.</B> In any section entitled "Acknowledgements" or "Dedications",
+preserve the section's title, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements
+and/or dedications given therein.</LI>
+<LI><B>L.</B> Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.</LI>
+<LI><B>M.</B> Delete any section entitled "Endorsements". Such a section
+may not be included in the Modified Version.</LI>
+<LI><B>N.</B> Do not retitle any existing section as "Endorsements"
+or to conflict in title with any Invariant Section.</LI>
+</UL>
+</P>
+
+<P>If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.</P>
+<P>You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.</P>
+<P>You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.</P>
+<P>The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.</P>
+
+<P><B>5. COMBINING DOCUMENTS</B></P>
+<P>You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.</P>
+<P>The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.</P>
+
+<P>In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."</P>
+
+<P><B>6. COLLECTIONS OF DOCUMENTS</B></P>
+<P>You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.</P>
+<P>You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.</P>
+
+
+<P><B>7. AGGREGATION WITH INDEPENDENT WORKS</B></P>
+<P>A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.</P>
+
+<P>If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.</P>
+
+<P><B>8. TRANSLATION</B></P>
+<P>Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.</P>
+
+<P><B>9. TERMINATION</B></P>
+<P>You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.</P>
+
+<P><B>10. FUTURE REVISIONS OF THIS LICENSE</B></P>
+
+<P>The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.</P>
+<P>Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.</P>
+
+<H2><A NAME="ss18.2">18.2</A> <A HREF="sylpheed.html#toc18.2">How to use this License for your documents</A>
+</H2>
+
+<P>To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:</P>
+<P>
+<PRE>
+Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+</PRE>
+</P>
+<P>If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.</P>
+
+<P>If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.</P>
+
+<HR>
+<A HREF="sylpheed-19.html">次のページ</A>
+<A HREF="sylpheed-17.html">前のページ</A>
+<A HREF="sylpheed.html#toc18">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-19.html b/manual/ja/sylpheed-19.html
new file mode 100644
index 00000000..9a06233e
--- /dev/null
+++ b/manual/ja/sylpheed-19.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: おわりに</TITLE>
+ <LINK HREF="sylpheed-20.html" REL=next>
+ <LINK HREF="sylpheed-18.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc19" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-20.html">次のページ</A>
+<A HREF="sylpheed-18.html">前のページ</A>
+<A HREF="sylpheed.html#toc19">目次へ</A>
+<HR>
+<H2><A NAME="s19">19.</A> <A HREF="sylpheed.html#toc19">おわりに</A></H2>
+
+<H2><A NAME="ss19.1">19.1</A> <A HREF="sylpheed.html#toc19.1">おわりに</A>
+</H2>
+
+<P>このドキュメントを読んで,
+ここはこうしたほうがいいんじゃないか, と言ったような意見がありましたら,
+<A HREF="mailto:yoichi@silver-forest.com">yoichi@silver-forest.com</A>
+へお送りいただければ幸いです。</P>
+
+<HR>
+<A HREF="sylpheed-20.html">次のページ</A>
+<A HREF="sylpheed-18.html">前のページ</A>
+<A HREF="sylpheed.html#toc19">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-2.html b/manual/ja/sylpheed-2.html
new file mode 100644
index 00000000..cbb3c31c
--- /dev/null
+++ b/manual/ja/sylpheed-2.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: Sylpheedとは</TITLE>
+ <LINK HREF="sylpheed-3.html" REL=next>
+ <LINK HREF="sylpheed-1.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-3.html">次のページ</A>
+<A HREF="sylpheed-1.html">前のページ</A>
+<A HREF="sylpheed.html#toc2">目次へ</A>
+<HR>
+<H2><A NAME="s2">2.</A> <A HREF="sylpheed.html#toc2">Sylpheedとは</A></H2>
+
+<H2><A NAME="ss2.1">2.1</A> <A HREF="sylpheed.html#toc2.1">Sylpheed とは</A>
+</H2>
+
+<P>SylpheedはGUIツールキットにGTK+を使用した、
+X Window System上で動作する電子メールクライアント&amp;ニュースリーダーです。</P>
+<P>Sylpheedは以下のことを目標にして開発されています。
+<UL>
+<LI>軽快な動作</LI>
+<LI>美しく、洗練されたインタフェース </LI>
+<LI>容易な設定・操作</LI>
+<LI>豊富な機能</LI>
+<LI>CPU・メモリの消費を最小限に抑えて軽快に動作</LI>
+<LI>1フォルダ中に大量にメッセージが存在する場合(10000通以上)でも高速に処理</LI>
+<LI>シンプルで美しく、洗練されたインタフェースにより直観的な操作が可能</LI>
+<LI>他のメーラに近い操作が可能</LI>
+<LI>簡単な設定ですぐに使用可能</LI>
+<LI>メーラに必要とされる機能を完備</LI>
+<LI>日本語に完全対応し、国際化にも対応</LI>
+<LI>外部コマンドとの柔軟な連携が可能</LI>
+<LI>安定動作し、万一クラッシュした場合でも極力データを消失しない</LI>
+</UL>
+</P>
+
+<H2><A NAME="ss2.2">2.2</A> <A HREF="sylpheed.html#toc2.2">インタフェース</A>
+</H2>
+
+<P>外観やインタフェースは
+<UL>
+<LI>Outlook Express</LI>
+<LI>Becky!</LI>
+<LI>Datula</LI>
+</UL>
+
+といった、 Windowsでは定番のメーラを参考にしています。</P>
+<P>また、操作系はMewやWanderlust等の Emacs系メーラを参考にしており、キーボードのみによる操作が可能となっています。
+そのため、他のメーラに慣れている場合でもそれほど違和感なく移行できると思います。</P>
+
+<H2><A NAME="ss2.3">2.3</A> <A HREF="sylpheed.html#toc2.3">主な機能</A>
+</H2>
+
+<P>プロトコルは以下のものに対応しています。
+<UL>
+<LI>メール受信(POP3 (APOP対応))</LI>
+<LI>メール送信(SMTP (SMTP AUTH対応))</LI>
+<LI>メール受信(IMAP4rev1)</LI>
+<LI>ニュース購読/投稿 (NNTP)</LI>
+</UL>
+
+主な機能としては、以下があげられます。
+<UL>
+<LI>無制限の複数アカウント管理 </LI>
+<LI>スレッド表示</LI>
+<LI>フィルタリング</LI>
+<LI>MIMEによる添付ファイルの閲覧/送信(Base64, quoted-printable)</LI>
+<LI>アドレス帳 </LI>
+<LI>新着・未読管理</LI>
+<LI>送信待機</LI>
+<LI>テンプレート</LI>
+<LI>SSL対応 (--enable-ssl時)</LI>
+</UL>
+
+他の便利な機能としては、以下があげられます。
+<UL>
+<LI>ML等でスレッドが切れているとき便利な「件名で寄せる」機能</LI>
+<LI>mbox ファイルのインポート</LI>
+<LI>クリッカブルURI</LI>
+<LI>外部エディタ対応</LI>
+<LI>X-Face対応 (compface使用時)</LI>
+<LI>IPv6 (--enable-ipv6時)</LI>
+<LI>UTF-8(Unicode)を含む多数の文字コードに対応</LI>
+<LI>画像表示機能を内蔵(gdk-pixbufあるいはimlib使用時)</LI>
+<LI>GnuPGによるメッセージ暗号化/署名(実験的)(gnupgおよびgpgme使用時)</LI>
+<LI>ユーザ定義ヘッダ</LI>
+<LI>自動改行 / ワードラップ</LI>
+<LI>HTMLのテキスト表示</LI>
+<LI>引用の深さの違いによる表示色の変更</LI>
+<LI>草稿</LI>
+<LI>印刷</LI>
+<LI>オフラインモード</LI>
+</UL>
+</P>
+
+<H2><A NAME="ss2.4">2.4</A> <A HREF="sylpheed.html#toc2.4">メッセージの管理方式</A>
+</H2>
+
+<P>メッセージはMH形式で管理しており、他のMH形式を使用したメーラ(Mew等)と併用することが可能です。
+1ファイル1メールの形式のため、障害が発生した際にメールを失う危険性が少なくなっています。</P>
+<P>受信に外部プログラム(inc, imget等)の使用も可能です。</P>
+
+<H2><A NAME="ss2.5">2.5</A> <A HREF="sylpheed.html#toc2.5">実現予定の機能</A>
+</H2>
+
+<P>sylpheedに含まれるTODO.jpを参照してください。</P>
+
+<HR>
+<A HREF="sylpheed-3.html">次のページ</A>
+<A HREF="sylpheed-1.html">前のページ</A>
+<A HREF="sylpheed.html#toc2">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-20.html b/manual/ja/sylpheed-20.html
new file mode 100644
index 00000000..13c6adc9
--- /dev/null
+++ b/manual/ja/sylpheed-20.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: History</TITLE>
+ <LINK HREF="sylpheed-19.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc20" REL=contents>
+</HEAD>
+<BODY>
+次のページ
+<A HREF="sylpheed-19.html">前のページ</A>
+<A HREF="sylpheed.html#toc20">目次へ</A>
+<HR>
+<H2><A NAME="s20">20.</A> <A HREF="sylpheed.html#toc20">History</A></H2>
+
+<H2><A NAME="ss20.1">20.1</A> <A HREF="sylpheed.html#toc20.1">更新履歴</A>
+</H2>
+
+<P>
+<PRE>
+2000-08-06 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.1
+ * 更新履歴を追加
+ * ライセンスをGPL2に変更
+2000-08-06 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.1.2
+ * KMailの注意書きを追加
+ * 句点のポリシーを変更
+
+2000-09-13 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.1.3
+ * メッセージの作成部分を記述
+ * アカウント設定でCc, Bcc, Reply-Toフィールド自動指定の記述
+
+2000-09-27 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.2
+ * Hiro's pageを変更
+ * imlib, facesの注意書きを追加
+ * sylpheed/develディレクトリの存在についての記述を削除
+ * cvsについての記述
+ * タグ->要素
+ * 振り分けの設定
+ * 全般の設定
+ * FAQにgtkrcの設定, ショートカットキーの変更を追加
+ * 機能を追加
+ * 動作確認環境を追加
+ * なし(ローカル)を追加
+ * 外部エディタの使い方を記述
+2000-09-27 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.2.1
+ * 受信時のtypoを修正
+ * ctrl+n,p
+ * $HOME
+2000-11-09 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.2.2
+ * MLの案内を変更
+ * ChangeLogの形式を変更
+2001-06-26 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.3.0 (for 0.5.x)
+ * 動作環境の記述の撤廃
+ * 機能説明部分の最新機能への追従
+ * rpmでのインストールの記述の変更
+ * Vine LinuxおよびKondara MNU/Linuxでのインストール方法の消去
+ * 新しいウィンドウで開くを追加
+ * "即実行"を標準の記述に採用
+ * アカウントの設定を最新に追従
+ * メッセージの作成を最新に追従
+ * 振り分けを最新に追従
+ * ニュース関連を追従
+ * (全般の設定が追従未完了)
+ * nightly buildに関する記述を追加
+ * サイトアドレスの変更
+2001-07-01 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.3.1
+ * 返信方法の変更に追従
+ * 全般の設定を追従
+ * ショートカットキーの追加(不完全)
+2002-04-04 Yoichi Imai &lt;yoichi@silver-forest.com>
+ * Version 0.4.0
+ * GFDLへ変更
+ * Sylpheed最新版へ追従
+ * セクションの追加と移動と削除
+ * リファレンスの削除
+ * TODO: FreeBSDへのインストール, Gtk+のインストール, テンプレート
+2004-11-26 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp>
+ * Version 0.5.0
+ * Sylpheed最新版の仕様に追従
+2004-12-01 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp>
+ * Version 0.5.1
+ * Sylpheed最新版の仕様に追従
+ * 言い回しの統一
+2004-12-15 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp>
+ * Version 0.5.2
+ * まず最初に何をするか -> 最初に行うこと に変更
+ * abstractを変更
+2004-12-21 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp>
+ * Version 0.5.3
+ * 振り分けの設定の項目を加筆修正
+</PRE>
+</P>
+<HR>
+次のページ
+<A HREF="sylpheed-19.html">前のページ</A>
+<A HREF="sylpheed.html#toc20">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-3.html b/manual/ja/sylpheed-3.html
new file mode 100644
index 00000000..e8ca4f26
--- /dev/null
+++ b/manual/ja/sylpheed-3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: 最初に行うこと</TITLE>
+ <LINK HREF="sylpheed-4.html" REL=next>
+ <LINK HREF="sylpheed-2.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-4.html">次のページ</A>
+<A HREF="sylpheed-2.html">前のページ</A>
+<A HREF="sylpheed.html#toc3">目次へ</A>
+<HR>
+<H2><A NAME="s3">3.</A> <A HREF="sylpheed.html#toc3">最初に行うこと</A></H2>
+
+<H2><A NAME="ss3.1">3.1</A> <A HREF="sylpheed.html#toc3.1">Sylpheedのインストール</A>
+</H2>
+
+<P>Sylpheedがインストールされていなければ、
+<A HREF="sylpheed-4.html#install">Sylpheedをインストール</A>します。</P>
+<H2><A NAME="ss3.2">3.2</A> <A HREF="sylpheed.html#toc3.2">Sylpheedの使い方</A>
+</H2>
+
+<P>まず
+<A HREF="sylpheed-5.html#start-and-exit">Sylpheedを起動</A>し、
+<A HREF="sylpheed-8.html#Account-Config">アカウントの設定</A>をした後、
+<A HREF="sylpheed-9.html#receive-message">メッセージを受信</A>して
+<A HREF="sylpheed-7.html#read-message">メッセージを読んだ</A>り、
+<A HREF="sylpheed-10.html#send-message">メッセージの送信</A>をすることになります。</P>
+<HR>
+<A HREF="sylpheed-4.html">次のページ</A>
+<A HREF="sylpheed-2.html">前のページ</A>
+<A HREF="sylpheed.html#toc3">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-4.html b/manual/ja/sylpheed-4.html
new file mode 100644
index 00000000..33b375dc
--- /dev/null
+++ b/manual/ja/sylpheed-4.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: インストール</TITLE>
+ <LINK HREF="sylpheed-5.html" REL=next>
+ <LINK HREF="sylpheed-3.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc4" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-5.html">次のページ</A>
+<A HREF="sylpheed-3.html">前のページ</A>
+<A HREF="sylpheed.html#toc4">目次へ</A>
+<HR>
+<H2><A NAME="install"></A> <A NAME="s4">4.</A> <A HREF="sylpheed.html#toc4">インストール</A></H2>
+
+
+<H2><A NAME="ss4.1">4.1</A> <A HREF="sylpheed.html#toc4.1">必要な環境</A>
+</H2>
+
+<P>このプログラムのコンパイル/実行には
+<UL>
+<LI>Linux あるいは他の UNIX like OS </LI>
+<LI>GTK+ 1.2.6 以降</LI>
+<LI>GNU make</LI>
+</UL>
+
+が必要です。
+あれば便利なものは、
+<UL>
+<LI>gettext</LI>
+<LI>imlibまたはgdk-pixbuf</LI>
+<LI>compface(faces)</LI>
+<LI>gnupg, gpgme</LI>
+<LI>openssl</LI>
+</UL>
+
+です。このマニュアルではgettextは入っているものとし、
+localeはja_JP.*と仮定し記述してあります。</P>
+
+<H2><A NAME="ss4.2">4.2</A> <A HREF="sylpheed.html#toc4.2">動作確認されている環境</A>
+</H2>
+
+<P>さまざまなOSで動作が確認されています。
+詳しくは
+<A HREF="http://sylpheed.good-day.net/#whats">Sylpheed公式サイト</A>
+で確認することができます。
+他の環境で動作したという方は
+<A HREF="sylpheed-17.html#Sylpheed-ML">Sylpheed ML</A>で報告頂ければ幸いです。</P>
+<P>しかし、環境によっては不安定な可能性があります。ライブラリはできるだけ新しいものをお使いください。</P>
+<H2><A NAME="gen-inst"></A> <A NAME="ss4.3">4.3</A> <A HREF="sylpheed.html#toc4.3">基本的なinstall方法</A>
+</H2>
+
+<P>ここに示すのはUNIXならほぼ使えると思われるインストール方法です。
+しかし、OSの持っているファイル管理機構を壊す可能性があるので、
+あなたが使っているOSについての記述がある場合は、
+そちらを利用されることをお勧めします。</P>
+
+<H3>GTK+のインストール</H3>
+
+
+
+<H3>Sylpheedのコンパイルとインストール</H3>
+
+<P>まず、
+<A HREF="http://sylpheed.good-day.net/">http://sylpheed.good-day.net/</A>から
+sylpheedをダウンロードします。
+ダウンロードしたら、
+<BLOCKQUOTE><CODE>
+<PRE>
+bzip2 -dc sylpheed-(バージョン).tar.bz2 | tar xf - として解凍し、
+$ cd sylpheed-(バージョン)
+$ ./configure
+$ make
+$ su
+Password: (パスワード入力)
+# make install
+</PRE>
+</CODE></BLOCKQUOTE>
+
+でインストール完了です。</P>
+
+
+<H2><A NAME="ss4.4">4.4</A> <A HREF="sylpheed.html#toc4.4">rpmを使用したLinux Distributionへのインストール</A>
+</H2>
+
+<H3>一般的なインストール手順(最新版を利用する場合)</H3>
+
+
+<H3>バイナリパッケージを用いる場合</H3>
+
+
+<H3><A NAME="gtk-inst-bin"></A> gtk+のインストール/アップグレード</H3>
+
+<P>まず、gtk+のrpmが入ってるかどうかを確認します。
+<BLOCKQUOTE><CODE>
+<PRE>
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+(以下略)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+のようにgtk+のrpmが既に入っていて、なおかつ1.2.6以上であれば大丈夫です。
+古い場合は、そのDistributionを配布しているサイト等からダウンロードし、
+<BLOCKQUOTE><CODE>
+<PRE>
+$ su
+Password: (パスワードを入力)
+# rpm -Uvh gtk+-(バージョン).i386.rpm
+</PRE>
+</CODE></BLOCKQUOTE>
+
+というようにバージョンアップしてください。
+同様に、imlibのrpmもインストールしてください。</P>
+
+<H3>rpmのインストール</H3>
+
+<P>
+<A HREF="http://y-imai.good-day.net/sylpheed/">http://y-imai.good-day.net/sylpheed/</A>
+より、</P>
+<P>sylpheed-(バージョン).i386.rpmをダウンロードします。そして、
+<BLOCKQUOTE><CODE>
+<PRE>
+$ su
+Password: (パスワードを入力)
+# rpm -Uvh sylpheed-(バージョン).i386.rpm
+</PRE>
+</CODE></BLOCKQUOTE>
+
+で完了です。
+なお、glibcのバージョンによる警告を受ける場合があります。
+その場合は、下記のソースパッケージをご利用ください。</P>
+
+
+<H3><A NAME="inst_from_srpm"></A> ソースパッケージを用いる場合</H3>
+
+<P>この方法は、上記のglibcのバージョンが低かった場合でも利用可能です。</P>
+<H3><A NAME="gtk-inst-src"></A> gtk+のインストール/アップグレード</H3>
+
+<P>まず、gtk+のrpmが入ってるかどうかを確認します。
+<BLOCKQUOTE><CODE>
+<PRE>
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+gtk+-devel-1.2.6-1vl5
+(以下略)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+のようにgtk+及びgtk+-develのpackageが既に入っていて、なおかつ1.2.6以上であれば大丈夫です。
+古い場合は、そのdistributionを配布しているサイト等からダウンロードし、
+<BLOCKQUOTE><CODE>
+<PRE>
+# rpm -Uvh gtk+-(バージョン)-?.i386.rpm gtk+-devel-(バージョン)-?.i386.rpm
+</PRE>
+</CODE></BLOCKQUOTE>
+
+でバージョンアップしてください。</P>
+
+<H3>rpmのrebuild &amp; install</H3>
+
+<P>そして、
+<A HREF="http://y-imai.good-day.net/sylpheed/">http://y-imai.good-day.net/sylpheed/</A>より、
+sylpheed-(バージョン).src.rpmをダウンロードします。
+次に下のコマンドを実行します。
+ただし、下記の方法ではコンパイルにもrootになるため少しだけ危険です。
+ならなくても良い環境を整えている方は、rpm --rebuildのためにsuは必要ありません。
+<BLOCKQUOTE><CODE>
+<PRE>
+$ su
+Password: (パスワードを入力)
+# rpm --rebuild sylpheed-(バージョン).src.rpm
+</PRE>
+</CODE></BLOCKQUOTE>
+
+とすればコンパイルが開始され、
+<BLOCKQUOTE><CODE>
+<PRE>
+(以上略)
+書き込み中: /usr/src/redhat/RPMS/i386/sylpheed-0.3.3-1.i386.rpm
+(以下略)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+のようなメッセージ(書き込み中:がWrote: などになる場合もあります)が現れて、
+終了したら、上記に示されたファイル(sylpheed-(バージョン).i386.rpm)を
+<BLOCKQUOTE><CODE>
+<PRE>
+# rpm -Uvh /usr/src/redhat/RPMS/i386/sylpheed-(バージョン).i386.rpm
+</PRE>
+</CODE></BLOCKQUOTE>
+
+でインストール完了です。</P>
+
+<H2><A NAME="ss4.5">4.5</A> <A HREF="sylpheed.html#toc4.5">Debian GNU/Linuxへのインストール</A>
+</H2>
+
+<P>Debian GNU/Linuxのwoody以降をお使いならば、
+<BLOCKQUOTE><CODE>
+<PRE>
+# apt-get install sylpheed
+</PRE>
+</CODE></BLOCKQUOTE>
+
+でインストールできます。</P>
+
+<H2><A NAME="ss4.6">4.6</A> <A HREF="sylpheed.html#toc4.6">FreeBSDへのインストール</A>
+</H2>
+
+<HR>
+<A HREF="sylpheed-5.html">次のページ</A>
+<A HREF="sylpheed-3.html">前のページ</A>
+<A HREF="sylpheed.html#toc4">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-5.html b/manual/ja/sylpheed-5.html
new file mode 100644
index 00000000..02d02097
--- /dev/null
+++ b/manual/ja/sylpheed-5.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: 起動と終了</TITLE>
+ <LINK HREF="sylpheed-6.html" REL=next>
+ <LINK HREF="sylpheed-4.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc5" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-6.html">次のページ</A>
+<A HREF="sylpheed-4.html">前のページ</A>
+<A HREF="sylpheed.html#toc5">目次へ</A>
+<HR>
+<H2><A NAME="start-and-exit"></A> <A NAME="s5">5.</A> <A HREF="sylpheed.html#toc5">起動と終了</A></H2>
+
+
+<H2><A NAME="ss5.1">5.1</A> <A HREF="sylpheed.html#toc5.1">Sylpheedの起動</A>
+</H2>
+
+<P>kterm, rxvtなどの端末エミュレータを起動し、
+<BLOCKQUOTE><CODE>
+<PRE>
+$ sylpheed &amp;
+</PRE>
+</CODE></BLOCKQUOTE>
+
+とタイプします。</P>
+<P>
+<A HREF="http://y-imai.good-day.net/sylpheed/">http://y-imai.good-day.net/sylpheed/</A>のrpmをインストールした場合で
+GNOME(1.2以降)を使用している場合、
+"足跡ボタン>プログラム>インターネット>Sylpheed"
+で起動できます。</P>
+
+<H3><A NAME="start-mailbox-config"></A> 初回起動時のメール箱の設定</H3>
+
+<P>Sylpheedを初めて起動すると、"メールボックスの設定"
+<A HREF="sylpheed-6.html#dialog">ダイアログ</A>が現れますが、
+基本的にはOKを押すだけで良いでしょう。</P>
+<P>他のメーラでMH形式でない形式で使用している場合、違う名前にすると良いかもしれません。</P>
+<H2><A NAME="ss5.2">5.2</A> <A HREF="sylpheed.html#toc5.2">Sylpheedの終了</A>
+</H2>
+
+<P>以下の3つのうちいずれかを行えば終了できます。
+<UL>
+<LI>Windowを閉じる</LI>
+<LI>ファイル(F)メニューを開き、終了を押す</LI>
+</UL>
+</P>
+<P>なお、"設定>全般の設定"の"インタフェース"タブの中の、
+"終了時に確認する"をチェックしていた場合、
+終了するかどうか問い合わせてくるようになります。
+その場合、EnterキーかOKボタンをクリックすることで終了できます。</P>
+
+<HR>
+<A HREF="sylpheed-6.html">次のページ</A>
+<A HREF="sylpheed-4.html">前のページ</A>
+<A HREF="sylpheed.html#toc5">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-6.html b/manual/ja/sylpheed-6.html
new file mode 100644
index 00000000..be7aa359
--- /dev/null
+++ b/manual/ja/sylpheed-6.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: Sylpheedのさまざまな場所の名称</TITLE>
+ <LINK HREF="sylpheed-7.html" REL=next>
+ <LINK HREF="sylpheed-5.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc6" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-7.html">次のページ</A>
+<A HREF="sylpheed-5.html">前のページ</A>
+<A HREF="sylpheed.html#toc6">目次へ</A>
+<HR>
+<H2><A NAME="s6">6.</A> <A HREF="sylpheed.html#toc6">Sylpheedのさまざまな場所の名称</A></H2>
+
+<P>Sylpheedを最初に起動した画面を基準にします。</P>
+<H2><A NAME="ss6.1">6.1</A> <A HREF="sylpheed.html#toc6.1">メニュー</A>
+</H2>
+
+<P>ウィンドウの上についているファイル(F)や、編集(E)のことをいいます。
+本文書ではメニューの"ファイル(F)"をクリックして"閉じる(C)"を選ぶことを、
+"ファイル>閉じる"と表記したりします。
+また、"標準"キーバインドで割り合てられているキーを"編集>コピー" (Ctrl+Cキー)のように
+表記することがあります。</P>
+
+<H2><A NAME="context-menu"></A> <A NAME="ss6.2">6.2</A> <A HREF="sylpheed.html#toc6.2">コンテキストメニュー</A>
+</H2>
+
+<P>右クリックして出て来るメニューのことをいいます。</P>
+<P>コンテキストメニューの場合も割り合てられたキーを横に書いておくことがあります。</P>
+<H2><A NAME="dialog"></A> <A NAME="ss6.3">6.3</A> <A HREF="sylpheed.html#toc6.3">ダイアログ</A>
+</H2>
+
+<P>Sylpheedを終了しようとしたときに出るような問い合わせのウィンドウのことをいいます。
+設定をするウィンドウもダイアログです。</P>
+<H2><A NAME="summaryview"></A> <A NAME="ss6.4">6.4</A> <A HREF="sylpheed.html#toc6.4">サマリビュー</A>
+</H2>
+
+<P>右上にある件名、差出人、日付などが書かかれているメッセージ一覧のことをいいます。</P>
+<H2><A NAME="folderview"></A> <A NAME="ss6.5">6.5</A> <A HREF="sylpheed.html#toc6.5">フォルダビュー</A>
+</H2>
+
+<P>左側にあるフォルダのツリーが表示されている部分のことをいいます。</P>
+<H2><A NAME="messageview"></A> <A NAME="ss6.6">6.6</A> <A HREF="sylpheed.html#toc6.6">メッセージビュー</A>
+</H2>
+
+<P>メッセージが表示される部分のことをいいます。
+添付ファイルもここに表示されますが、
+その添付ファイルの載っているリストのことを添付リストと呼ぶことにします。</P>
+<H2><A NAME="account"></A> <A NAME="ss6.7">6.7</A> <A HREF="sylpheed.html#toc6.7">アカウント</A>
+</H2>
+
+<P>メールサーバにあるそのユーザの権利のことです。
+わからなければ、メールを受信するための情報、と考えて良いと思います。</P>
+<HR>
+<A HREF="sylpheed-7.html">次のページ</A>
+<A HREF="sylpheed-5.html">前のページ</A>
+<A HREF="sylpheed.html#toc6">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-7.html b/manual/ja/sylpheed-7.html
new file mode 100644
index 00000000..613067bb
--- /dev/null
+++ b/manual/ja/sylpheed-7.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: メッセージの閲覧</TITLE>
+ <LINK HREF="sylpheed-8.html" REL=next>
+ <LINK HREF="sylpheed-6.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc7" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-8.html">次のページ</A>
+<A HREF="sylpheed-6.html">前のページ</A>
+<A HREF="sylpheed.html#toc7">目次へ</A>
+<HR>
+<H2><A NAME="read-message"></A> <A NAME="s7">7.</A> <A HREF="sylpheed.html#toc7">メッセージの閲覧</A></H2>
+
+
+<H2><A NAME="select-operation"></A> <A NAME="ss7.1">7.1</A> <A HREF="sylpheed.html#toc7.1">選択</A>
+</H2>
+
+<P>左クリックすることで単一のメッセージを選択できます。</P>
+<P>また、複数のメッセージを一定の範囲を指定して選択したい場合、
+範囲の最初のメッセージを左クリックしてから、
+Shiftキーを押しながら範囲の最後のメールを左クリックします。</P>
+<P>選択したいメッセージが飛び飛びに存在する場合、
+Ctrlキーを押しながら左クリックすることで
+それらを選択することが可能です。</P>
+<P>Shiftキーを押しながら既に選択された領域の中を左クリックして範囲を削り取ったり、
+Ctrlを押しながら左クリックすることでその部分を除外したりすることができます</P>
+<P>また、サマリビューで
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>を呼び出してから、
+"全て選択"を選ぶことですべてのメッセージを選択できます。</P>
+<H2><A NAME="read-message"></A> <A NAME="ss7.2">7.2</A> <A HREF="sylpheed.html#toc7.2">メールを見る</A>
+</H2>
+
+<P>
+<A HREF="sylpheed-6.html#folderview">フォルダビュー</A>でフォルダを左クリックして選択し、
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>で表示したいメッセージを左クリックして
+<A HREF="#select-operation">選択</A>してください。</P>
+<P>上に手紙マークが表示されている列に赤の手紙のマークがある場合は新着メール、
+青のマークがある場合は未読メールということを意味します。</P>
+
+<H3>新しいウィンドウで開く</H3>
+
+<P>
+<UL>
+<LI>ダブルクリックする</LI>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>を呼び出して"新しいウィンドウで開く"</LI>
+<LI>メッセージ選択後、"表示>新しいウィンドウで開く"</LI>
+</UL>
+
+のいずれかを行えば、新しいウィンドウで開くことができます。</P>
+<H2><A NAME="ss7.3">7.3</A> <A HREF="sylpheed.html#toc7.3">表示するメッセージの移動</A>
+</H2>
+
+<H3>普通の移動</H3>
+
+<P>一度選択したら、
+<UL>
+<LI>"表示>移動>前のメッセージ" (pキー)</LI>
+<LI>"表示>移動>次のメッセージ" (nキー)</LI>
+</UL>
+
+によって移動することができます。</P>
+<H3>次の未読メッセージへ飛ぶ機能</H3>
+
+<P>スペースキーを使えば、
+メールのスクロール、次の未読メールへのジャンプ、未読メッセージのあるフォルダへの
+ジャンプを同時に行えます。</P>
+<P>スペースキーを打ち続けることで、未読メールだけを選んで、
+全部読むことができるので非常に便利です。</P>
+<P>また、ShiftまたはAltキーを押しながらスペースキーを押すことで、
+逆方向へのスクロール、前の未読メッセージへのジャンプを行えます。</P>
+<P>
+<UL>
+<LI>"表示>移動>前の未読メッセージ" (Shift+pキー)</LI>
+<LI>"表示>移動>次の未読メッセージ" (Shift+nキー)</LI>
+</UL>
+</P>
+<P>また、ツールバーの"次へ"を押すことでも次の未読メールへ飛ぶことができます。</P>
+<H3><A NAME="move-between-marked-message"></A> マークされたメッセージ間を移動する</H3>
+
+<P>
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>のマーク列にチェックマークのある"マークされたメッセージ"間を移動するには、
+<UL>
+<LI>"表示>移動>前のマーク付きメッセージ"</LI>
+<LI>"表示>移動>次のマーク付きメッセージ"</LI>
+</UL>
+
+のどちらかを実行します。</P>
+<H3>カラーラベルのつけられたメッセージ間を移動する</H3>
+
+<P>カラーラベルのつけられたメッセージ間を移動するには、
+<UL>
+<LI>"表示>移動>前のラベル付きメッセージ"</LI>
+<LI>"表示>移動>次のラベル付きメッセージ"</LI>
+</UL>
+
+のどちらかを実行します。</P>
+
+<H2><A NAME="ss7.4">7.4</A> <A HREF="sylpheed.html#toc7.4">読むフォルダを選択する</A>
+</H2>
+
+<P>
+<A HREF="sylpheed-6.html#folderview">フォルダビュー</A>の中から好きなフォルダを選択すればそのフォルダに移動できます。</P>
+<P>
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>でメッセージを選択していた場合、キーボードの←ボタンを押すとフォルダビューに
+フォーカスが移り、キーボードでフォルダを選択できる状態になります。
+その後↑↓キーで移動し、Enterキーでフォルダを選択できます。</P>
+<P>フォルダの文字が赤い場合は、新着メッセージが存在し、
+黒い太字の場合は未読メッセージが存在します。</P>
+<P>また、"表示>移動>別のフォルダ..." (gキー) によってフォルダ選択画面を
+呼びだすことができるので↑↓で移動し、
+Enterで選択できます。</P>
+<H2><A NAME="ss7.5">7.5</A> <A HREF="sylpheed.html#toc7.5">添付ファイルを見る</A>
+</H2>
+
+<P>添付ファイルがある場合は、
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>の添付の列に
+クリップマークが表示されます。</P>
+<P>テキストとわかるもの(MIMEタイプがtext/*だった場合や、
+application/octet-streamかつ添付ファイルの拡張子でテキストファイルとわかるもの)の場合は、
+<A HREF="sylpheed-6.html#messageview">メッセージビュー</A>の"テキスト"タブに添付ファイルであっても表示されます。</P>
+<P>そうでない場合などは、"添付"タブをクリックし、
+MIMEタイプ、サイズなどが書いてあるリストの中から選択してください。
+テキストやイメージ(画像表示機能オンの場合)は、クリックするだけで見ることができます。</P>
+<P>保存したい場合には
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"名前を付けて保存"を
+選択するか、'y'キーを押せば保存できます。</P>
+<P>テキストとして表示させたいときは
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"テキストとして表示"を選ぶか、't'キーを押すことで表示することが出来ます。</P>
+<P>また、添付ファイルが含まれている場合においても、
+'n'、'p'キーで添付ファイル/メッセージの前後移動をすることができます。</P>
+<P>現在のSylpheedでは、quoted-printable又はbase64エンコード方式を
+使用したメッセージを閲覧することができます。</P>
+<H2><A NAME="ss7.6">7.6</A> <A HREF="sylpheed.html#toc7.6">スレッドの伸縮</A>
+</H2>
+
+<P>そのスレッドのメッセージを選択した後、
+-キーでスレッドを縮めたり、+キーで展開したりすることができます。</P>
+<H2><A NAME="ss7.7">7.7</A> <A HREF="sylpheed.html#toc7.7">メッセージ操作(移動、削除等)</A>
+</H2>
+
+
+<H3>メッセージの削除</H3>
+
+<P>削除したいメッセージを選択してから、
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"削除" (Ctrl+dキー/Deleteキー)を選択することで削除できます。</P>
+
+<H3>メッセージの移動</H3>
+
+<P>移動したいメッセージを選択してから、
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"移動" (Ctrl+oキー)を選ぶことで
+移動先フォルダを選択するダイアログが現れるので、
+フォルダを選択すれば移動できます。</P>
+<P>また、メッセージをフォルダにドラッグアンドドロップすることでも移動可能です。</P>
+
+<H3>目印にマークする</H3>
+
+<P>マークしたいメッセージを選択してから、
+<UL>
+<LI>"メッセージ>マーク>マーク" (Shift+"*"キー)</LI>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"マーク>マーク"</LI>
+<LI>サマリビューのマーク列をクリック</LI>
+</UL>
+
+のいずれかを行えば、マークすることができます。
+目印に利用したり、
+<A HREF="#move-between-marked-message">マークされたメッセージ間を移動する</A>こともできます。</P>
+
+<H3>マークを解除する</H3>
+
+<P>解除したいメッセージを選択してから、
+<UL>
+<LI>"u"キーを押す</LI>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"マーク>マークを解除"</LI>
+</UL>
+
+のどちらかを行えばマークを解除することができます。</P>
+<H3>実行</H3>
+
+<P>Sylpheedには削除、移動などリスクを伴なう操作を"目印のためのマーク"とは
+別に移動/削除マークなどとして保持しておき、あとでまとめて実行することもできます。
+これはEmacs系のメーラなどで一般的に用いられている操作方法です。</P>
+<P>この機能を使いたい場合は、"設定>全般の設定>インタフェース"の
+"メッセージを移動または削除したら即座に実行する"のマークを外してください。</P>
+<P>そう設定された状態ならば、
+実際に実行されるのは、
+上記のように削除、移動の行動をとってマークをつけてから、
+<UL>
+<LI>
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"実行"</LI>
+<LI>"ツール>実行" (xキー)</LI>
+</UL>
+
+のどちらかの操作をした時になります。</P>
+
+<H3>カラーラベル(ラベル)をつける</H3>
+
+<P>
+<A HREF="sylpheed-6.html#summaryview">サマリビュー</A>に色をつけることができます。</P>
+<P>カラーラベルをつけるには、
+<A HREF="sylpheed-6.html#context-menu">コンテキストメニュー</A>より"カラーラベル>(任意の色)"
+を実行します。</P>
+
+<H2><A NAME="ss7.8">7.8</A> <A HREF="sylpheed.html#toc7.8">メッセージ内のURL</A>
+</H2>
+
+<P>メッセージ内のURLは(マウスカーソルは変化しませんが)URL部分をダブルクリック
+あるいは中ボタンクリックすることで、
+<A HREF="sylpheed-15.html#ext-browser-config">全般の設定で指定された外部ブラウザ</A>が起動しそのサイトを閲覧することができます。</P>
+<P>URL部分をシングルクリックした場合は、ステータスバーにリンク先のURLが表示されます。</P>
+<HR>
+<A HREF="sylpheed-8.html">次のページ</A>
+<A HREF="sylpheed-6.html">前のページ</A>
+<A HREF="sylpheed.html#toc7">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-8.html b/manual/ja/sylpheed-8.html
new file mode 100644
index 00000000..68db12cd
--- /dev/null
+++ b/manual/ja/sylpheed-8.html
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: アカウントの設定</TITLE>
+ <LINK HREF="sylpheed-9.html" REL=next>
+ <LINK HREF="sylpheed-7.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc8" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-9.html">次のページ</A>
+<A HREF="sylpheed-7.html">前のページ</A>
+<A HREF="sylpheed.html#toc8">目次へ</A>
+<HR>
+<H2><A NAME="Account-Config"></A> <A NAME="s8">8.</A> <A HREF="sylpheed.html#toc8">アカウントの設定</A></H2>
+
+
+<H2><A NAME="append-account"></A> <A NAME="ss8.1">8.1</A> <A HREF="sylpheed.html#toc8.1">新規アカウントの作成</A>
+</H2>
+
+<P>まず、メールを受信/送信するためにはアカウントの設定をしなければなりません。</P>
+<P>新規アカウントの作成を行うには、
+"設定>新規アカウントの作成"を実行します。
+そして各項目に書き込んでいきます。</P>
+<P>(必須)は、新たに必ず書き込まなければならないものです。</P>
+<P>(推奨)は、新たにつけ直すことを推奨するものです。</P>
+<P>(必須)(推奨)以外の()はデフォルトの値を意味します。</P>
+<P>なお、アカウント設定は無限に作成することができ、
+アカウント設定をしなくても、既に
+<A HREF="sylpheed-5.html#start-mailbox-config">メール箱</A>にあるメールは見ることができます。</P>
+<P>ですが、Sylpheed本体の受信機能を使わない場合でも、
+プロトコルで"なし(ローカル)"を選択したアカウント設定を作成してください。</P>
+<H2><A NAME="ss8.2">8.2</A> <A HREF="sylpheed.html#toc8.2">各項目の説明</A>
+</H2>
+
+
+<H3>(基本)タブ</H3>
+
+<P>最低限、この情報を設定する必要があります。</P>
+<H3>このアカウントの名称 (推奨)</H3>
+
+<P>このアカウントの名称を指定します。単なる呼び名ですので、なんでも構いません。</P>
+<H3><A NAME="usually-use"></A> 通常使用</H3>
+
+<P>ここをチェックしたアカウントが起動時に選択されている状態になります。</P>
+<H3>個人情報 - 名前</H3>
+
+<P>メールの送信時に使用される名前です。</P>
+<H3>個人情報 - メールアドレス (必須)</H3>
+
+<P>メールの送信時に使われるメールアドレスです。</P>
+<H3>個人情報 - 組織</H3>
+
+<P>メールの送信時に書き込まれます。</P>
+<H3>サーバ情報 - プロトコル (POP3)</H3>
+
+<P>プロトコルは、
+<UL>
+<LI>POP3</LI>
+<LI>IMAP4</LI>
+<LI>ニュース(NNTP)</LI>
+<LI>なし(ローカル)</LI>
+</UL>
+
+の中から選択することが出来ます。
+自分のサーバにあったものを選びましょう。
+ニュースについてはここでは説明しません。</P>
+
+<H3>サーバ情報 - 受信サーバ (必須)</H3>
+
+<P>受信するサーバを指定します。
+メールは、プロトコルで指定したプロトコルでここで指定したサーバから受信されます。</P>
+
+<H3>サーバ情報 - SMTPサーバ(送信) (必須)</H3>
+
+<P>送信に使用するサーバを指定します。プロトコルにはSMTPが使用されます。</P>
+
+<H3>サーバ情報 - ユーザID (必須)</H3>
+
+<P>ここで指定されたユーザIDを使ってメールサーバにログインします。</P>
+<H3>サーバ情報 - パスワード(必須)</H3>
+
+<P>ここで指定されたパスワードを使用してメールサーバにログインします。
+入力されたパスワードは画面上には***としか表示されません。</P>
+<P>入力しなかった場合は接続時にパスワードを入力するダイアログが開きます。</P>
+<H3>(受信)タブ</H3>
+
+
+<H3>POP3 - 安全な認証方式を使用する (APOP)</H3>
+
+<P>POP3では通常生のパスワードがそのままネットワークに流れてしまいますが、
+APOP認証を使用すると、生のパスワードが流れなくなるため比較的安全になります。
+ただし、サーバがAPOP認証に対応している必要があります。</P>
+<H3>POP3 - 受信時にサーバ上のメッセージを削除する</H3>
+
+<H3>POP3 - サーバ上の全てのメッセージを受信する</H3>
+
+<P>Sylpheedにはダウンロードされたメッセージを記憶して
+次からダウンロードしないようにする機能がありますが、
+それを無視してすべてダウンロードします。</P>
+<P>つまり、これを選択しなければその機能を有効にすることができます。
+このオプションは、受信時にサーバ上のメッセージを削除する場合は実質無効です。</P>
+<H3>POP3 - 受信サイズ制限</H3>
+
+<P>1メッセージがこのサイズより大きなメッセージは受信しません。</P>
+<H3>POP3 - 受信時にメッセージを振り分ける</H3>
+
+<P>このチェックがオンのとき、受信時に
+受信したメッセージに対して振り分けルールが実行されます。</P>
+<H3>POP3 - 標準の受信箱 (inbox)</H3>
+
+<P>そのアカウントでメールを受信したときにどこに保存するかを指定できます。</P>
+<H3>IMAP4 - IMAPサーバディレクトリ</H3>
+
+<H3>「全受信」でこのアカウントの新着メールをチェックする</H3>
+
+<P>チェックを外した場合、全てのアカウントから受信する機能を利用したときに
+対象からこのアカウントを外します。</P>
+<P>送信だけのアカウントなどに利用すると便利かもしれません。</P>
+<H3>(送信)タブ</H3>
+
+
+<H3>ヘッダ - Dateヘッダフィールドを付ける</H3>
+
+<P>DateヘッダフィールドをSylpheedで付けます。</P>
+<H3>メッセージIDを生成する</H3>
+
+<P>メッセージIDをSylpheedで付けます。
+一般的な端末型ダイヤルアップIP接続のプロバイダが運営しているようなサーバでは、
+サーバ側がつけるので必要がないことが多いです。</P>
+<H3>ユーザ定義ヘッダを追加する</H3>
+
+<P>これを選択するとユーザ定義ヘッダを追加できます。
+編集ボタンを押して編集してください。
+リストの順番で挿入されます。</P>
+<P>今のところX-Faceもここで挿入します。</P>
+<H3>SMTP認証(SMTP AUTH)</H3>
+
+<P>利用するSMTPサーバがSMTP AUTHを必要とする場合、チェックを入れて
+空欄を埋めてください。</P>
+<H3>(作成)タブ</H3>
+
+
+<H3>署名ファイル</H3>
+
+<P>ここで指定されたファイルはメッセージ作成時に自動的に最後に挿入されます。
+デフォルトは<ホームディレクトリ>/.signatureです。
+空欄の場合も同様に適用されるので、挿入したくない場合は、
+/dev/nullを指定すると良いと思います。</P>
+
+<H3>以下のアドレスを自動指定</H3>
+
+<P>Cc, Bcc, Reply-Toフィールドを自動指定できます。
+自動指定するには、各フィールド名の横のチェックボックスをオンにし、
+テキストボックスに記入すればメッセージ作成ごとにつけてくれます。</P>
+<H3>(個人情報)タブ</H3>
+
+<P>GPGMEを有効にしてコンパイルした時のみ表示されます。</P>
+
+<H3>署名鍵</H3>
+
+<P>使用するGnuPG鍵をどのようにして選ぶかを選択します。</P>
+<H3>(SSL)タブ</H3>
+
+<P>OpenSSLをリンクしてコンパイルされたときのみ表示されます。</P>
+<H3>POP3の接続にSSLを使用</H3>
+
+<H3>IMAP4の接続にSSLを使用</H3>
+
+<H3>送信(SMTP)</H3>
+
+<H3>(高度な設定)タブ</H3>
+
+
+<H3>SMTPポートを指定 (25)</H3>
+
+<P>SMTPプロトコルで通信するポートを指定できます。ほとんどの場合は変更の必要はありません。</P>
+<H3>POP3ポートを指定 (110)</H3>
+
+<P>POP3プロトコルで通信するポートを指定できます。ほとんどの場合は変更の必要はありません。</P>
+<H3>ドメイン名を指定</H3>
+
+<P>ドメイン名を指定できます。ほとんどの場合は変更の必要はありません。</P>
+<H2><A NAME="current-account"></A> <A NAME="ss8.3">8.3</A> <A HREF="sylpheed.html#toc8.3">現在のアカウントの変更</A>
+</H2>
+
+<P>"設定>現在のアカウントを変更"から現在のアカウントを選ぶことができます。
+選択可能なのは、
+<A HREF="#append-account">アカウントの新規作成</A>で登録したアカウントです。</P>
+<P>また画面右下に表示される"現在のアカウント:"をクリックするか、
+ツールバーの"アカウント"ボタンを右クリックすることによっても変更することができます。</P>
+<P>現在のアカウントは、"新着メールの受信"や、"メッセージの作成"に利用されます。</P>
+<P>起動時は
+<A HREF="#usually-use">通常使用</A>にチェックされたアカウントが選択されています。</P>
+<H2><A NAME="config-every-account"></A> <A NAME="ss8.4">8.4</A> <A HREF="sylpheed.html#toc8.4">アカウント毎の設定</A>
+</H2>
+
+<P>"設定>アカウント毎の設定"で
+現在のアカウントの
+<A HREF="#append-account">アカウントの新規作成</A>で設定した情報を編集することができます。</P>
+<H2><A NAME="edit-account"></A> <A NAME="ss8.5">8.5</A> <A HREF="sylpheed.html#toc8.5">アカウントの編集</A>
+</H2>
+
+<P>メニューの"設定>アカウントの編集"で"アカウントの編集"
+<A HREF="sylpheed-6.html#dialog">ダイアログ</A>を呼び出し、
+Sylpheedに登録されたアカウントを管理できます。</P>
+<P>"D"列にチェックが入ってるアカウントは、デフォルトのアカウントです。</P>
+<P>"G"列にチェックの入ってるアカウントは、全受信時に受信されます。
+その列をクリックすることでもその設定を変えることができます。</P>
+<P>それぞれのボタンは以下のような動作をします。</P>
+<H3>追加</H3>
+
+<P>
+<A HREF="#append-account">アカウントの追加</A>と同じ動作をします。</P>
+<H3>編集</H3>
+
+<P>右のリストで選択されたアカウントに対して、
+<A HREF="#config-every-account">アカウント毎の設定</A>と同じ動作をします。</P>
+<P>リストをダブルクリックすることでも同じ効果が得られます。</P>
+<H3>削除</H3>
+
+<P>右のリストで選択されたアカウントを削除することができます。</P>
+<H3>↑、↓</H3>
+
+<P>これらのボタンを使うとアカウントの順番を変えることができます。
+アカウントの順番は全アカウントから受信するときの順番になります。</P>
+<H3>通常使用するアカウントに指定</H3>
+
+<P>リストで選択されているアカウントに
+<A HREF="#usually-use">通常使用</A>するアカウントを変更できます。</P>
+<HR>
+<A HREF="sylpheed-9.html">次のページ</A>
+<A HREF="sylpheed-7.html">前のページ</A>
+<A HREF="sylpheed.html#toc8">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed-9.html b/manual/ja/sylpheed-9.html
new file mode 100644
index 00000000..d3298446
--- /dev/null
+++ b/manual/ja/sylpheed-9.html
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual: メッセージの受信</TITLE>
+ <LINK HREF="sylpheed-10.html" REL=next>
+ <LINK HREF="sylpheed-8.html" REL=previous>
+ <LINK HREF="sylpheed.html#toc9" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="sylpheed-10.html">次のページ</A>
+<A HREF="sylpheed-8.html">前のページ</A>
+<A HREF="sylpheed.html#toc9">目次へ</A>
+<HR>
+<H2><A NAME="receive-message"></A> <A NAME="s9">9.</A> <A HREF="sylpheed.html#toc9">メッセージの受信</A></H2>
+
+
+<H2><A NAME="ss9.1">9.1</A> <A HREF="sylpheed.html#toc9.1">SylpheedのPOP受信機能を使う場合</A>
+</H2>
+
+
+<H3>現在のアカウントを受信</H3>
+
+<P>
+<A HREF="sylpheed-8.html#Account-Config">アカウント設定</A>をしてから、
+<UL>
+<LI>メニューの"メッセージ>受信>現在のアカウントから受信"を選択</LI>
+<LI>ツールバーの"受信"ボタンを押す</LI>
+</UL>
+
+のいずれかを行えば
+<A HREF="sylpheed-8.html#current-account">現在のアカウント</A>のメールをダウンロードできます。</P>
+<H3>全てのアカウントを受信</H3>
+
+<P>
+<UL>
+<LI>メニューの"メッセージ>受信>全アカウントから受信"を選択</LI>
+<LI>ツールバーの"全受信"をクリック</LI>
+</UL>
+
+のいずれかを行うことで
+<A HREF="sylpheed-8.html#Account-Config">アカウントの設定</A>で設定されたすべてのアカウントのメールを受信できます。</P>
+<H2><A NAME="ss9.2">9.2</A> <A HREF="sylpheed.html#toc9.2">fetchmailなどの外部プログラムを使用する場合</A>
+</H2>
+
+
+<HR>
+<A HREF="sylpheed-10.html">次のページ</A>
+<A HREF="sylpheed-8.html">前のページ</A>
+<A HREF="sylpheed.html#toc9">目次へ</A>
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed.html b/manual/ja/sylpheed.html
new file mode 100644
index 00000000..59227d3d
--- /dev/null
+++ b/manual/ja/sylpheed.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
+ <TITLE>Sylpheed User's Manual</TITLE>
+ <LINK HREF="sylpheed-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="sylpheed-1.html">次のページ</A>
+前のページ
+目次へ
+<HR>
+<H1>Sylpheed User's Manual</H1>
+
+
+<H2>Yoichi Imai &lt;yoichi@silver-forest.com&gt;
+ </H2>
+<HR>
+<EM> Sylpheed User's Manual for Sylpheed-1.0 version 0.5.2
+ </EM>
+<HR>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="sylpheed-1.html">このマニュアルについて</A></H2>
+
+<UL>
+<LI><A NAME="toc1.1">1.1</A> <A HREF="sylpheed-1.html#ss1.1">この文書について</A>
+<LI><A NAME="toc1.2">1.2</A> <A HREF="sylpheed-1.html#ss1.2">対象とする設定</A>
+<LI><A NAME="toc1.3">1.3</A> <A HREF="sylpheed-1.html#ss1.3">ライセンス</A>
+<LI><A NAME="toc1.4">1.4</A> <A HREF="sylpheed-1.html#ss1.4">このドキュメントの最新版の入手先</A>
+</UL>
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="sylpheed-2.html">Sylpheedとは</A></H2>
+
+<UL>
+<LI><A NAME="toc2.1">2.1</A> <A HREF="sylpheed-2.html#ss2.1">Sylpheed とは</A>
+<LI><A NAME="toc2.2">2.2</A> <A HREF="sylpheed-2.html#ss2.2">インタフェース</A>
+<LI><A NAME="toc2.3">2.3</A> <A HREF="sylpheed-2.html#ss2.3">主な機能</A>
+<LI><A NAME="toc2.4">2.4</A> <A HREF="sylpheed-2.html#ss2.4">メッセージの管理方式</A>
+<LI><A NAME="toc2.5">2.5</A> <A HREF="sylpheed-2.html#ss2.5">実現予定の機能</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="sylpheed-3.html">最初に行うこと</A></H2>
+
+<UL>
+<LI><A NAME="toc3.1">3.1</A> <A HREF="sylpheed-3.html#ss3.1">Sylpheedのインストール</A>
+<LI><A NAME="toc3.2">3.2</A> <A HREF="sylpheed-3.html#ss3.2">Sylpheedの使い方</A>
+</UL>
+<P>
+<H2><A NAME="toc4">4.</A> <A HREF="sylpheed-4.html">インストール</A></H2>
+
+<UL>
+<LI><A NAME="toc4.1">4.1</A> <A HREF="sylpheed-4.html#ss4.1">必要な環境</A>
+<LI><A NAME="toc4.2">4.2</A> <A HREF="sylpheed-4.html#ss4.2">動作確認されている環境</A>
+<LI><A NAME="toc4.3">4.3</A> <A HREF="sylpheed-4.html#ss4.3">基本的なinstall方法</A>
+<LI><A NAME="toc4.4">4.4</A> <A HREF="sylpheed-4.html#ss4.4">rpmを使用したLinux Distributionへのインストール</A>
+<LI><A NAME="toc4.5">4.5</A> <A HREF="sylpheed-4.html#ss4.5">Debian GNU/Linuxへのインストール</A>
+<LI><A NAME="toc4.6">4.6</A> <A HREF="sylpheed-4.html#ss4.6">FreeBSDへのインストール</A>
+</UL>
+<P>
+<H2><A NAME="toc5">5.</A> <A HREF="sylpheed-5.html">起動と終了</A></H2>
+
+<UL>
+<LI><A NAME="toc5.1">5.1</A> <A HREF="sylpheed-5.html#ss5.1">Sylpheedの起動</A>
+<LI><A NAME="toc5.2">5.2</A> <A HREF="sylpheed-5.html#ss5.2">Sylpheedの終了</A>
+</UL>
+<P>
+<H2><A NAME="toc6">6.</A> <A HREF="sylpheed-6.html">Sylpheedのさまざまな場所の名称</A></H2>
+
+<UL>
+<LI><A NAME="toc6.1">6.1</A> <A HREF="sylpheed-6.html#ss6.1">メニュー</A>
+<LI><A NAME="toc6.2">6.2</A> <A HREF="sylpheed-6.html#ss6.2">コンテキストメニュー</A>
+<LI><A NAME="toc6.3">6.3</A> <A HREF="sylpheed-6.html#ss6.3">ダイアログ</A>
+<LI><A NAME="toc6.4">6.4</A> <A HREF="sylpheed-6.html#ss6.4">サマリビュー</A>
+<LI><A NAME="toc6.5">6.5</A> <A HREF="sylpheed-6.html#ss6.5">フォルダビュー</A>
+<LI><A NAME="toc6.6">6.6</A> <A HREF="sylpheed-6.html#ss6.6">メッセージビュー</A>
+<LI><A NAME="toc6.7">6.7</A> <A HREF="sylpheed-6.html#ss6.7">アカウント</A>
+</UL>
+<P>
+<H2><A NAME="toc7">7.</A> <A HREF="sylpheed-7.html">メッセージの閲覧</A></H2>
+
+<UL>
+<LI><A NAME="toc7.1">7.1</A> <A HREF="sylpheed-7.html#ss7.1">選択</A>
+<LI><A NAME="toc7.2">7.2</A> <A HREF="sylpheed-7.html#ss7.2">メールを見る</A>
+<LI><A NAME="toc7.3">7.3</A> <A HREF="sylpheed-7.html#ss7.3">表示するメッセージの移動</A>
+<LI><A NAME="toc7.4">7.4</A> <A HREF="sylpheed-7.html#ss7.4">読むフォルダを選択する</A>
+<LI><A NAME="toc7.5">7.5</A> <A HREF="sylpheed-7.html#ss7.5">添付ファイルを見る</A>
+<LI><A NAME="toc7.6">7.6</A> <A HREF="sylpheed-7.html#ss7.6">スレッドの伸縮</A>
+<LI><A NAME="toc7.7">7.7</A> <A HREF="sylpheed-7.html#ss7.7">メッセージ操作(移動、削除等)</A>
+<LI><A NAME="toc7.8">7.8</A> <A HREF="sylpheed-7.html#ss7.8">メッセージ内のURL</A>
+</UL>
+<P>
+<H2><A NAME="toc8">8.</A> <A HREF="sylpheed-8.html">アカウントの設定</A></H2>
+
+<UL>
+<LI><A NAME="toc8.1">8.1</A> <A HREF="sylpheed-8.html#ss8.1">新規アカウントの作成</A>
+<LI><A NAME="toc8.2">8.2</A> <A HREF="sylpheed-8.html#ss8.2">各項目の説明</A>
+<LI><A NAME="toc8.3">8.3</A> <A HREF="sylpheed-8.html#ss8.3">現在のアカウントの変更</A>
+<LI><A NAME="toc8.4">8.4</A> <A HREF="sylpheed-8.html#ss8.4">アカウント毎の設定</A>
+<LI><A NAME="toc8.5">8.5</A> <A HREF="sylpheed-8.html#ss8.5">アカウントの編集</A>
+</UL>
+<P>
+<H2><A NAME="toc9">9.</A> <A HREF="sylpheed-9.html">メッセージの受信</A></H2>
+
+<UL>
+<LI><A NAME="toc9.1">9.1</A> <A HREF="sylpheed-9.html#ss9.1">SylpheedのPOP受信機能を使う場合</A>
+<LI><A NAME="toc9.2">9.2</A> <A HREF="sylpheed-9.html#ss9.2">fetchmailなどの外部プログラムを使用する場合</A>
+</UL>
+<P>
+<H2><A NAME="toc10">10.</A> <A HREF="sylpheed-10.html">メッセージの作成</A></H2>
+
+<UL>
+<LI><A NAME="toc10.1">10.1</A> <A HREF="sylpheed-10.html#ss10.1">メッセージの新規作成</A>
+<LI><A NAME="toc10.2">10.2</A> <A HREF="sylpheed-10.html#ss10.2">署名の挿入</A>
+<LI><A NAME="toc10.3">10.3</A> <A HREF="sylpheed-10.html#ss10.3">メッセージの送信</A>
+<LI><A NAME="toc10.4">10.4</A> <A HREF="sylpheed-10.html#ss10.4">草稿</A>
+<LI><A NAME="toc10.5">10.5</A> <A HREF="sylpheed-10.html#ss10.5">添付ファイル</A>
+<LI><A NAME="toc10.6">10.6</A> <A HREF="sylpheed-10.html#ss10.6">ファイルの挿入</A>
+<LI><A NAME="toc10.7">10.7</A> <A HREF="sylpheed-10.html#ss10.7">アドレス帳の利用</A>
+<LI><A NAME="toc10.8">10.8</A> <A HREF="sylpheed-10.html#ss10.8">外部エディタの利用</A>
+<LI><A NAME="toc10.9">10.9</A> <A HREF="sylpheed-10.html#ss10.9">折り返し</A>
+<LI><A NAME="toc10.10">10.10</A> <A HREF="sylpheed-10.html#ss10.10">メッセージに返信する</A>
+<LI><A NAME="toc10.11">10.11</A> <A HREF="sylpheed-10.html#ss10.11">メッセージを全員に返信する</A>
+<LI><A NAME="toc10.12">10.12</A> <A HREF="sylpheed-10.html#ss10.12">メッセージを差出人に返信する</A>
+<LI><A NAME="toc10.13">10.13</A> <A HREF="sylpheed-10.html#ss10.13">メッセージをメーリングリストに返信する</A>
+<LI><A NAME="toc10.14">10.14</A> <A HREF="sylpheed-10.html#ss10.14">メッセージを転送する</A>
+<LI><A NAME="toc10.15">10.15</A> <A HREF="sylpheed-10.html#ss10.15">メッセージを添付ファイルとして転送する</A>
+<LI><A NAME="toc10.16">10.16</A> <A HREF="sylpheed-10.html#ss10.16">メッセージを手を加えずに転送する</A>
+</UL>
+<P>
+<H2><A NAME="toc11">11.</A> <A HREF="sylpheed-11.html">アドレス帳</A></H2>
+
+<UL>
+<LI><A NAME="toc11.1">11.1</A> <A HREF="sylpheed-11.html#ss11.1">アドレスの登録・削除</A>
+<LI><A NAME="toc11.2">11.2</A> <A HREF="sylpheed-11.html#ss11.2">フォルダとグループ</A>
+<LI><A NAME="toc11.3">11.3</A> <A HREF="sylpheed-11.html#ss11.3">メッセージ作成ウィンドウとの連携</A>
+</UL>
+<P>
+<H2><A NAME="toc12">12.</A> <A HREF="sylpheed-12.html">メッセージの振り分け</A></H2>
+
+<UL>
+<LI><A NAME="toc12.1">12.1</A> <A HREF="sylpheed-12.html#ss12.1">振り分けの設定</A>
+<LI><A NAME="toc12.2">12.2</A> <A HREF="sylpheed-12.html#ss12.2">振り分けを実行するには</A>
+</UL>
+<P>
+<H2><A NAME="toc13">13.</A> <A HREF="sylpheed-13.html">他メール(メール保存形式)からSylpheed(MHフォルダ形式)への移行</A></H2>
+
+<UL>
+<LI><A NAME="toc13.1">13.1</A> <A HREF="sylpheed-13.html#ss13.1">mbox形式のメッセージファイルの取り込み</A>
+<LI><A NAME="toc13.2">13.2</A> <A HREF="sylpheed-13.html#ss13.2">Windowsのメーラ(Becky!やAL-Mail, Outlook Express4等)からの移行</A>
+<LI><A NAME="toc13.3">13.3</A> <A HREF="sylpheed-13.html#ss13.3">Outlook Express 5のdbx形式からの移行</A>
+</UL>
+<P>
+<H2><A NAME="toc14">14.</A> <A HREF="sylpheed-14.html">NetNewsの購読</A></H2>
+
+<UL>
+<LI><A NAME="toc14.1">14.1</A> <A HREF="sylpheed-14.html#ss14.1">サーバの追加・削除</A>
+<LI><A NAME="toc14.2">14.2</A> <A HREF="sylpheed-14.html#ss14.2">ニュースグループの購読・購読解除</A>
+<LI><A NAME="toc14.3">14.3</A> <A HREF="sylpheed-14.html#ss14.3">ニュースを読む</A>
+<LI><A NAME="toc14.4">14.4</A> <A HREF="sylpheed-14.html#ss14.4">ニュースの投稿</A>
+</UL>
+<P>
+<H2><A NAME="toc15">15.</A> <A HREF="sylpheed-15.html">カスタマイズ(全般の設定)</A></H2>
+
+<UL>
+<LI><A NAME="toc15.1">15.1</A> <A HREF="sylpheed-15.html#ss15.1">全般の設定</A>
+<LI><A NAME="toc15.2">15.2</A> <A HREF="sylpheed-15.html#ss15.2">各項目の説明</A>
+</UL>
+<P>
+<H2><A NAME="toc16">16.</A> <A HREF="sylpheed-16.html">FAQ</A></H2>
+
+<UL>
+<LI><A NAME="toc16.1">16.1</A> <A HREF="sylpheed-16.html#ss16.1">ニュースのメッセージ未読情報について</A>
+<LI><A NAME="toc16.2">16.2</A> <A HREF="sylpheed-16.html#ss16.2">メニューなどのフォント変更について</A>
+<LI><A NAME="toc16.3">16.3</A> <A HREF="sylpheed-16.html#ss16.3">ショートカットキーのキーバインドの変更</A>
+<LI><A NAME="toc16.4">16.4</A> <A HREF="sylpheed-16.html#ss16.4">返信マークについて</A>
+<LI><A NAME="toc16.5">16.5</A> <A HREF="sylpheed-16.html#ss16.5">サマリビューの下に表示される画像について</A>
+</UL>
+<P>
+<H2><A NAME="toc17">17.</A> <A HREF="sylpheed-17.html">情報</A></H2>
+
+<UL>
+<LI><A NAME="toc17.1">17.1</A> <A HREF="sylpheed-17.html#ss17.1">Sylpheed 関連サイト</A>
+<LI><A NAME="toc17.2">17.2</A> <A HREF="sylpheed-17.html#ss17.2">メーリングリスト</A>
+<LI><A NAME="toc17.3">17.3</A> <A HREF="sylpheed-17.html#ss17.3">Anonymous CVS</A>
+</UL>
+<P>
+<H2><A NAME="toc18">18.</A> <A HREF="sylpheed-18.html">GNU Free Documentation License</A></H2>
+
+<UL>
+<LI><A NAME="toc18.1">18.1</A> <A HREF="sylpheed-18.html#ss18.1">GNU Free Documentation License</A>
+<LI><A NAME="toc18.2">18.2</A> <A HREF="sylpheed-18.html#ss18.2">How to use this License for your documents</A>
+</UL>
+<P>
+<H2><A NAME="toc19">19.</A> <A HREF="sylpheed-19.html">おわりに</A></H2>
+
+<UL>
+<LI><A NAME="toc19.1">19.1</A> <A HREF="sylpheed-19.html#ss19.1">おわりに</A>
+</UL>
+<P>
+<H2><A NAME="toc20">20.</A> <A HREF="sylpheed-20.html">History</A></H2>
+
+<UL>
+<LI><A NAME="toc20.1">20.1</A> <A HREF="sylpheed-20.html#ss20.1">更新履歴</A>
+</UL>
+<HR>
+<A HREF="sylpheed-1.html">次のページ</A>
+前のページ
+目次へ
+</BODY>
+</HTML>
diff --git a/manual/ja/sylpheed.sgml b/manual/ja/sylpheed.sgml
new file mode 100644
index 00000000..e6280fff
--- /dev/null
+++ b/manual/ja/sylpheed.sgml
@@ -0,0 +1,2431 @@
+<!doctype linuxdoc system>
+<article>
+ <title>Sylpheed User's Manual
+ <author>Yoichi Imai &lt;yoichi@silver-forest.com&gt;
+ <abstract>
+ Sylpheed User's Manual for Sylpheed-1.0 version 0.5.2
+ </abstract>
+
+<toc>
+<sect>このマニュアルについて
+<sect1>この文書について
+<p>
+これは、Sylpheedの操作方法について書かれた文書です。
+将来Sylpheedのバージョンが上がった際にインタフェースが変更されることがありますので、ご注意ください。
+</sect1>
+<sect1>対象とする設定
+<p>
+基本的にデフォルトの設定を対象とします。
+キーボードによる操作が有用と思われる部分においては、
+"標準"のキーバインドを使っていることとします。
+それ以外のキーバインドについては、
+メニューアイテムの右側に表示されているキー表示を利用してください。
+</sect1>
+
+<sect1>ライセンス
+<p>
+ Copyright (c) 2000-2002 Yoichi Imai &lt;yoichi@silver-forest.com&gt;
+
+ Copyright (c) 2004 Hiroyuki Yamamoto &lt;hiro-y@kcn.ne.jp&gt;
+<p>
+Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts.
+ A copy of the license is included in the section entitled <ref id="gfdl" name="&quot;GNU
+ Free Documentation License&quot;">.
+<p>
+GNU Free Documentation Licenseの参考訳は、
+<url url="http://www.opensource.jp/fdl/fdl.ja.html">より入手可能です。
+</sect1>
+
+<sect1>このドキュメントの最新版の入手先
+<p>
+最新版は,
+<url url="http://y-imai.good-day.net/sylpheed/manual/">
+から入手できます。
+</sect1>
+
+<sect>Sylpheedとは
+<sect1>Sylpheed とは
+<p>
+SylpheedはGUIツールキットにGTK+を使用した、
+X Window System上で動作する電子メールクライアント&amp;ニュースリーダーです。
+
+Sylpheedは以下のことを目標にして開発されています。
+<itemize>
+<item>軽快な動作
+<item>美しく、洗練されたインタフェース
+<item>容易な設定・操作
+<item>豊富な機能
+<item>CPU・メモリの消費を最小限に抑えて軽快に動作
+<item>1フォルダ中に大量にメッセージが存在する場合(10000通以上)でも高速に処理
+<item>シンプルで美しく、洗練されたインタフェースにより直観的な操作が可能
+<item>他のメーラに近い操作が可能
+<item>簡単な設定ですぐに使用可能
+<item>メーラに必要とされる機能を完備
+<item>日本語に完全対応し、国際化にも対応
+<item>外部コマンドとの柔軟な連携が可能
+<item>安定動作し、万一クラッシュした場合でも極力データを消失しない
+</itemize>
+
+</sect1>
+<sect1>インタフェース
+<p>
+外観やインタフェースは
+<itemize>
+<item>Outlook Express
+<item>Becky!
+<item>Datula
+</itemize>
+といった、 Windowsでは定番のメーラを参考にしています。
+
+また、操作系はMewやWanderlust等の Emacs系メーラを参考にしており、キーボードのみによる操作が可能となっています。
+そのため、他のメーラに慣れている場合でもそれほど違和感なく移行できると思います。
+
+</sect1>
+<sect1>主な機能
+<p>
+プロトコルは以下のものに対応しています。
+<itemize>
+<item>メール受信(POP3 (APOP対応))
+<item>メール送信(SMTP (SMTP AUTH対応))
+<item>メール受信(IMAP4rev1)
+<item>ニュース購読/投稿 (NNTP)
+</itemize>
+主な機能としては、以下があげられます。
+<itemize>
+<item>無制限の複数アカウント管理
+<item>スレッド表示
+<item>フィルタリング
+<item>MIMEによる添付ファイルの閲覧/送信(Base64, quoted-printable)
+<item>アドレス帳
+<item>新着・未読管理
+<item>送信待機
+<item>テンプレート
+<item>SSL対応 (--enable-ssl時)
+</itemize>
+他の便利な機能としては、以下があげられます。
+<itemize>
+<item>ML等でスレッドが切れているとき便利な「件名で寄せる」機能
+<item>mbox ファイルのインポート
+<item>クリッカブルURI
+<item>外部エディタ対応
+<item>X-Face対応 (compface使用時)
+<item>IPv6 (--enable-ipv6時)
+<item>UTF-8(Unicode)を含む多数の文字コードに対応
+<item>画像表示機能を内蔵(gdk-pixbufあるいはimlib使用時)
+<item>GnuPGによるメッセージ暗号化/署名(実験的)(gnupgおよびgpgme使用時)
+<item>ユーザ定義ヘッダ
+<item>自動改行 / ワードラップ
+<item>HTMLのテキスト表示
+<item>引用の深さの違いによる表示色の変更
+<item>草稿
+<item>印刷
+<item>オフラインモード
+</itemize>
+
+</sect1>
+<sect1>メッセージの管理方式
+<p>
+メッセージはMH形式で管理しており、他のMH形式を使用したメーラ(Mew等)と併用することが可能です。
+1ファイル1メールの形式のため、障害が発生した際にメールを失う危険性が少なくなっています。
+
+受信に外部プログラム(inc, imget等)の使用も可能です。
+
+</sect1>
+<sect1>実現予定の機能
+<p>
+sylpheedに含まれるTODO.jpを参照してください。
+
+</sect1>
+</sect>
+
+<sect>最初に行うこと
+<sect1>Sylpheedのインストール
+<p>
+Sylpheedがインストールされていなければ、
+<ref id="install" name="Sylpheedをインストール">します。
+</sect1>
+
+<sect1>Sylpheedの使い方
+<p>
+まず<ref id="start-and-exit" name="Sylpheedを起動">し、
+<ref id="Account-Config" name="アカウントの設定">をした後、
+<ref id="receive-message" name="メッセージを受信">して
+<ref id="read-message" name="メッセージを読んだ">り、
+<ref id="send-message" name="メッセージの送信">をすることになります。
+</sect1>
+</sect>
+
+<sect>インストール<label id="install">
+<p>
+<sect1>必要な環境
+<p>
+このプログラムのコンパイル/実行には
+<itemize>
+<item>Linux あるいは他の UNIX like OS
+<item>GTK+ 1.2.6 以降
+<item>GNU make
+</itemize>
+が必要です。
+あれば便利なものは、
+<itemize>
+<item>gettext
+<item>imlibまたはgdk-pixbuf
+<item>compface(faces)
+<item>gnupg, gpgme
+<item>openssl
+</itemize>
+です。このマニュアルではgettextは入っているものとし、
+localeはja_JP.*と仮定し記述してあります。
+
+</sect1>
+<sect1>動作確認されている環境
+<p>
+さまざまなOSで動作が確認されています。
+詳しくは
+<url url="http://sylpheed.good-day.net/#whats" name="Sylpheed公式サイト">
+で確認することができます。
+他の環境で動作したという方は<ref id="Sylpheed-ML" name="Sylpheed ML">で報告頂ければ幸いです。
+
+しかし、環境によっては不安定な可能性があります。ライブラリはできるだけ新しいものをお使いください。
+</sect1>
+<sect1>基本的なinstall方法<label id="gen-inst">
+<p>
+ここに示すのはUNIXならほぼ使えると思われるインストール方法です。
+しかし、OSの持っているファイル管理機構を壊す可能性があるので、
+あなたが使っているOSについての記述がある場合は、
+そちらを利用されることをお勧めします。
+
+<sect2>GTK+のインストール
+<p>
+
+</sect2>
+
+<sect2>Sylpheedのコンパイルとインストール
+<p>
+まず、
+<url url="http://sylpheed.good-day.net/">から
+sylpheedをダウンロードします。
+ダウンロードしたら、
+<tscreen><verb>
+bzip2 -dc sylpheed-(バージョン).tar.bz2 | tar xf - として解凍し、
+$ cd sylpheed-(バージョン)
+$ ./configure
+$ make
+$ su
+Password: (パスワード入力)
+# make install
+</verb></tscreen>
+でインストール完了です。
+
+
+</sect2>
+</sect1>
+<sect1>rpmを使用したLinux Distributionへのインストール
+<sect2>一般的なインストール手順(最新版を利用する場合)
+<p>
+<sect3>バイナリパッケージを用いる場合
+<p>
+<sect4>gtk+のインストール/アップグレード<label id="gtk-inst-bin">
+<p>
+まず、gtk+のrpmが入ってるかどうかを確認します。
+<tscreen><verb>
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+(以下略)
+</verb></tscreen>
+のようにgtk+のrpmが既に入っていて、なおかつ1.2.6以上であれば大丈夫です。
+古い場合は、そのDistributionを配布しているサイト等からダウンロードし、
+<tscreen><verb>
+$ su
+Password: (パスワードを入力)
+# rpm -Uvh gtk+-(バージョン).i386.rpm
+</verb></tscreen>
+というようにバージョンアップしてください。
+同様に、imlibのrpmもインストールしてください。
+
+</sect4>
+<sect4>rpmのインストール
+<p>
+<url url="http://y-imai.good-day.net/sylpheed/">
+より、
+
+sylpheed-(バージョン).i386.rpmをダウンロードします。そして、
+<tscreen><verb>
+$ su
+Password: (パスワードを入力)
+# rpm -Uvh sylpheed-(バージョン).i386.rpm
+</verb></tscreen>
+で完了です。
+なお、glibcのバージョンによる警告を受ける場合があります。
+その場合は、下記のソースパッケージをご利用ください。
+
+<!-- なお、このサイトののrpmを使用する場合、
+`rpm -q glibc`と実行したときに、
+glibc-2.1.2-17vl2のように、glibc-2.1.x以降である必要があります。 -->
+
+</sect4>
+</sect3>
+<sect3>ソースパッケージを用いる場合<label id="inst_from_srpm">
+<p>
+この方法は、上記のglibcのバージョンが低かった場合でも利用可能です。
+<sect4>gtk+のインストール/アップグレード<label id="gtk-inst-src">
+<p>
+まず、gtk+のrpmが入ってるかどうかを確認します。
+<tscreen><verb>
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+gtk+-devel-1.2.6-1vl5
+(以下略)
+</verb></tscreen>
+のようにgtk+及びgtk+-develのpackageが既に入っていて、なおかつ1.2.6以上であれば大丈夫です。
+古い場合は、そのdistributionを配布しているサイト等からダウンロードし、
+<tscreen><verb>
+# rpm -Uvh gtk+-(バージョン)-?.i386.rpm gtk+-devel-(バージョン)-?.i386.rpm
+</verb></tscreen>
+でバージョンアップしてください。
+
+</sect4>
+<sect4>rpmのrebuild &amp; install
+<p>
+そして、
+<url url="http://y-imai.good-day.net/sylpheed/">より、
+sylpheed-(バージョン).src.rpmをダウンロードします。
+次に下のコマンドを実行します。
+ただし、下記の方法ではコンパイルにもrootになるため少しだけ危険です。
+ならなくても良い環境を整えている方は、rpm --rebuildのためにsuは必要ありません。
+<tscreen><verb>
+$ su
+Password: (パスワードを入力)
+# rpm --rebuild sylpheed-(バージョン).src.rpm
+</verb></tscreen>
+とすればコンパイルが開始され、
+<tscreen><verb>
+(以上略)
+書き込み中: /usr/src/redhat/RPMS/i386/sylpheed-0.3.3-1.i386.rpm
+(以下略)
+</verb></tscreen>
+のようなメッセージ(書き込み中:がWrote: などになる場合もあります)が現れて、
+終了したら、上記に示されたファイル(sylpheed-(バージョン).i386.rpm)を
+<tscreen><verb>
+# rpm -Uvh /usr/src/redhat/RPMS/i386/sylpheed-(バージョン).i386.rpm
+</verb></tscreen>
+でインストール完了です。
+
+</sect4>
+
+</sect3>
+
+</sect2>
+</sect1>
+<sect1>Debian GNU/Linuxへのインストール
+<p>
+Debian GNU/Linuxのwoody以降をお使いならば、
+<tscreen><verb>
+# apt-get install sylpheed
+</verb></tscreen>
+でインストールできます。
+
+</sect1>
+<sect1>FreeBSDへのインストール
+</sect1>
+</sect>
+
+<sect>起動と終了<label id="start-and-exit">
+<p>
+<sect1>Sylpheedの起動
+<p>
+kterm, rxvtなどの端末エミュレータを起動し、
+<tscreen><verb>
+$ sylpheed &
+</verb></tscreen>
+とタイプします。
+
+<url url="http://y-imai.good-day.net/sylpheed/">のrpmをインストールした場合で
+GNOME(1.2以降)を使用している場合、
+<!-- メインメニューを開いてから" インターネット > Sylpheed"と選ぶことで起動できます。
+GNOMEの比較的新しいバージョンの場合、-->
+"足跡ボタン>プログラム>インターネット>Sylpheed"
+で起動できます。
+<!-- の場合もあります。-->
+
+<sect2>初回起動時のメール箱の設定<label id="start-mailbox-config">
+<p>
+Sylpheedを初めて起動すると、"メールボックスの設定"<ref id="dialog" name="ダイアログ">が現れますが、
+基本的にはOKを押すだけで良いでしょう。
+
+他のメーラでMH形式でない形式で使用している場合、違う名前にすると良いかもしれません。
+</sect2>
+
+</sect1>
+<sect1>Sylpheedの終了
+<p>
+以下の3つのうちいずれかを行えば終了できます。
+<itemize>
+<item>Windowを閉じる
+<item>ファイル(F)メニューを開き、終了を押す
+</itemize>
+
+なお、"設定>全般の設定"の"インタフェース"タブの中の、
+"終了時に確認する"をチェックしていた場合、
+終了するかどうか問い合わせてくるようになります。
+その場合、EnterキーかOKボタンをクリックすることで終了できます。
+
+</sect1>
+</sect>
+<sect>Sylpheedのさまざまな場所の名称
+<p>
+Sylpheedを最初に起動した画面を基準にします。
+<sect1>メニュー
+<p>
+ウィンドウの上についているファイル(F)や、編集(E)のことをいいます。
+本文書ではメニューの"ファイル(F)"をクリックして"閉じる(C)"を選ぶことを、
+"ファイル>閉じる"と表記したりします。
+また、"標準"キーバインドで割り合てられているキーを"編集>コピー" (Ctrl+Cキー)のように
+表記することがあります。
+
+<sect1>コンテキストメニュー<label id="context-menu">
+<p>
+右クリックして出て来るメニューのことをいいます。
+
+コンテキストメニューの場合も割り合てられたキーを横に書いておくことがあります。
+</sect1>
+<sect1>ダイアログ<label id="dialog">
+<p>
+Sylpheedを終了しようとしたときに出るような問い合わせのウィンドウのことをいいます。
+設定をするウィンドウもダイアログです。
+</sect1>
+<sect1>サマリビュー<label id="summaryview">
+<p>
+右上にある件名、差出人、日付などが書かかれているメッセージ一覧のことをいいます。
+</sect1>
+<sect1>フォルダビュー<label id="folderview">
+<p>
+左側にあるフォルダのツリーが表示されている部分のことをいいます。
+</sect1>
+<sect1>メッセージビュー<label id="messageview">
+<p>
+メッセージが表示される部分のことをいいます。
+添付ファイルもここに表示されますが、
+その添付ファイルの載っているリストのことを添付リストと呼ぶことにします。
+</sect1>
+<sect1>アカウント<label id="account">
+<p>
+メールサーバにあるそのユーザの権利のことです。
+わからなければ、メールを受信するための情報、と考えて良いと思います。
+</sect1>
+</sect>
+
+<sect>メッセージの閲覧<label id="read-message">
+<p>
+<sect1>選択<label id="select-operation">
+<p>
+左クリックすることで単一のメッセージを選択できます。
+
+また、複数のメッセージを一定の範囲を指定して選択したい場合、
+範囲の最初のメッセージを左クリックしてから、
+Shiftキーを押しながら範囲の最後のメールを左クリックします。
+
+選択したいメッセージが飛び飛びに存在する場合、
+Ctrlキーを押しながら左クリックすることで
+それらを選択することが可能です。
+
+Shiftキーを押しながら既に選択された領域の中を左クリックして範囲を削り取ったり、
+Ctrlを押しながら左クリックすることでその部分を除外したりすることができます
+
+また、サマリビューで<ref id="context-menu" name="コンテキストメニュー">を呼び出してから、
+"全て選択"を選ぶことですべてのメッセージを選択できます。
+</sect1>
+<sect1>メールを見る<label id="read-message">
+<p>
+<ref id="folderview" name="フォルダビュー">でフォルダを左クリックして選択し、
+<ref id="summaryview" name="サマリビュー">で表示したいメッセージを左クリックして<ref id="select-operation" name="選択">してください。
+
+上に手紙マークが表示されている列に赤の手紙のマークがある場合は新着メール、
+青のマークがある場合は未読メールということを意味します。
+
+<sect2>新しいウィンドウで開く
+<p>
+<itemize>
+<item>ダブルクリックする
+<item><ref id="context-menu" name="コンテキストメニュー">を呼び出して"新しいウィンドウで開く"
+<item>メッセージ選択後、"表示>新しいウィンドウで開く"
+</itemize>
+のいずれかを行えば、新しいウィンドウで開くことができます。
+</sect2>
+</sect1>
+
+<sect1>表示するメッセージの移動
+<sect2>普通の移動
+<p>
+一度選択したら、
+<itemize>
+<item>"表示>移動>前のメッセージ" (pキー)
+<item>"表示>移動>次のメッセージ" (nキー)
+</itemize>
+によって移動することができます。
+</sect2>
+
+<sect2>次の未読メッセージへ飛ぶ機能
+<p>
+スペースキーを使えば、
+メールのスクロール、次の未読メールへのジャンプ、未読メッセージのあるフォルダへの
+ジャンプを同時に行えます。
+
+スペースキーを打ち続けることで、未読メールだけを選んで、
+全部読むことができるので非常に便利です。
+
+また、ShiftまたはAltキーを押しながらスペースキーを押すことで、
+逆方向へのスクロール、前の未読メッセージへのジャンプを行えます。
+
+<itemize>
+<item>"表示>移動>前の未読メッセージ" (Shift+pキー)
+<item>"表示>移動>次の未読メッセージ" (Shift+nキー)
+</itemize>
+
+また、ツールバーの"次へ"を押すことでも次の未読メールへ飛ぶことができます。
+</sect2>
+<sect2>マークされたメッセージ間を移動する<label id="move-between-marked-message">
+<p>
+<ref id="summaryview" name="サマリビュー">のマーク列にチェックマークのある"マークされたメッセージ"間を移動するには、
+<itemize>
+<item>"表示>移動>前のマーク付きメッセージ"
+<item>"表示>移動>次のマーク付きメッセージ"
+</itemize>
+のどちらかを実行します。
+</sect2>
+
+<sect2>カラーラベルのつけられたメッセージ間を移動する
+<p>
+カラーラベルのつけられたメッセージ間を移動するには、
+<itemize>
+<item>"表示>移動>前のラベル付きメッセージ"
+<item>"表示>移動>次のラベル付きメッセージ"
+</itemize>
+のどちらかを実行します。
+
+</sect2>
+</sect1>
+<sect1>読むフォルダを選択する
+<p>
+<ref id="folderview" name="フォルダビュー">の中から好きなフォルダを選択すればそのフォルダに移動できます。
+
+<ref id="summaryview" name="サマリビュー">でメッセージを選択していた場合、キーボードの←ボタンを押すとフォルダビューに
+フォーカスが移り、キーボードでフォルダを選択できる状態になります。
+その後↑↓キーで移動し、Enterキーでフォルダを選択できます。
+
+フォルダの文字が赤い場合は、新着メッセージが存在し、
+黒い太字の場合は未読メッセージが存在します。
+<p>
+また、"表示>移動>別のフォルダ..." (gキー) によってフォルダ選択画面を
+呼びだすことができるので↑↓で移動し、
+Enterで選択できます。
+</sect1>
+
+<sect1>添付ファイルを見る
+<p>
+添付ファイルがある場合は、<ref id="summaryview" name="サマリビュー">の添付の列に
+クリップマークが表示されます。
+
+テキストとわかるもの(MIMEタイプがtext/*だった場合や、
+application/octet-streamかつ添付ファイルの拡張子でテキストファイルとわかるもの)の場合は、
+<ref id="messageview" name="メッセージビュー">の"テキスト"タブに添付ファイルであっても表示されます。
+
+そうでない場合などは、"添付"タブをクリックし、
+MIMEタイプ、サイズなどが書いてあるリストの中から選択してください。
+テキストやイメージ(画像表示機能オンの場合)は、クリックするだけで見ることができます。
+
+保存したい場合には<ref id="context-menu" name="コンテキストメニュー">より"名前を付けて保存"を
+選択するか、'y'キーを押せば保存できます。
+
+テキストとして表示させたいときは<ref id="context-menu" name="コンテキストメニュー">より"テキストとして表示"を選ぶか、't'キーを押すことで表示することが出来ます。
+
+また、添付ファイルが含まれている場合においても、
+'n'、'p'キーで添付ファイル/メッセージの前後移動をすることができます。
+
+現在のSylpheedでは、quoted-printable又はbase64エンコード方式を
+使用したメッセージを閲覧することができます。
+</sect1>
+
+<sect1>スレッドの伸縮
+<p>
+そのスレッドのメッセージを選択した後、
+-キーでスレッドを縮めたり、+キーで展開したりすることができます。
+</sect1>
+
+<sect1>メッセージ操作(移動、削除等)
+<p>
+<sect2>メッセージの削除
+<p>
+削除したいメッセージを選択してから、
+<ref id="context-menu" name="コンテキストメニュー">より"削除" (Ctrl+dキー/Deleteキー)を選択することで削除できます。
+
+<sect2>メッセージの移動
+<p>移動したいメッセージを選択してから、
+<ref id="context-menu" name="コンテキストメニュー">より"移動" (Ctrl+oキー)を選ぶことで
+移動先フォルダを選択するダイアログが現れるので、
+フォルダを選択すれば移動できます。
+
+また、メッセージをフォルダにドラッグアンドドロップすることでも移動可能です。
+
+<sect2>目印にマークする
+<p>
+マークしたいメッセージを選択してから、
+<itemize>
+<item>"メッセージ>マーク>マーク" (Shift+"*"キー)
+<item><ref id="context-menu" name="コンテキストメニュー">より"マーク>マーク"
+<item>サマリビューのマーク列をクリック
+</itemize>
+のいずれかを行えば、マークすることができます。
+目印に利用したり、<ref id="move-between-marked-message" name="マークされたメッセージ間を移動する">こともできます。
+
+<sect2>マークを解除する
+<p>
+解除したいメッセージを選択してから、
+<itemize>
+<item>"u"キーを押す
+<item><ref id="context-menu" name="コンテキストメニュー">より"マーク>マークを解除"
+</itemize>
+のどちらかを行えばマークを解除することができます。
+</sect2>
+<sect2>実行
+<p>
+Sylpheedには削除、移動などリスクを伴なう操作を"目印のためのマーク"とは
+別に移動/削除マークなどとして保持しておき、あとでまとめて実行することもできます。
+これはEmacs系のメーラなどで一般的に用いられている操作方法です。
+
+この機能を使いたい場合は、"設定>全般の設定>インタフェース"の
+"メッセージを移動または削除したら即座に実行する"のマークを外してください。
+
+そう設定された状態ならば、
+実際に実行されるのは、
+上記のように削除、移動の行動をとってマークをつけてから、
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"実行"
+<item>"ツール>実行" (xキー)
+</itemize>
+のどちらかの操作をした時になります。
+
+<sect2>カラーラベル(ラベル)をつける
+<p>
+<ref id="summaryview" name="サマリビュー">に色をつけることができます。
+
+カラーラベルをつけるには、
+<ref id="context-menu" name="コンテキストメニュー">より"カラーラベル>(任意の色)"
+を実行します。
+
+</sect2>
+</sect1>
+
+<sect1>メッセージ内のURL
+<p>
+メッセージ内のURLは(マウスカーソルは変化しませんが)URL部分をダブルクリック
+あるいは中ボタンクリックすることで、
+<ref id="ext-browser-config" name="全般の設定で指定された外部ブラウザ">が起動しそのサイトを閲覧することができます。
+
+URL部分をシングルクリックした場合は、ステータスバーにリンク先のURLが表示されます。
+</sect>
+
+<sect>アカウントの設定<label id="Account-Config">
+<p>
+<sect1>新規アカウントの作成<label id="append-account">
+<p>
+まず、メールを受信/送信するためにはアカウントの設定をしなければなりません。
+
+新規アカウントの作成を行うには、
+"設定>新規アカウントの作成"を実行します。
+そして各項目に書き込んでいきます。
+
+(必須)は、新たに必ず書き込まなければならないものです。
+
+(推奨)は、新たにつけ直すことを推奨するものです。
+
+(必須)(推奨)以外の()はデフォルトの値を意味します。
+
+なお、アカウント設定は無限に作成することができ、
+アカウント設定をしなくても、既に<ref id="start-mailbox-config" name="メール箱">にあるメールは見ることができます。
+
+ですが、Sylpheed本体の受信機能を使わない場合でも、
+プロトコルで"なし(ローカル)"を選択したアカウント設定を作成してください。
+<sect1>各項目の説明
+<p>
+<sect2>(基本)タブ
+<p>
+最低限、この情報を設定する必要があります。
+<sect3>このアカウントの名称 (推奨)
+<p>このアカウントの名称を指定します。単なる呼び名ですので、なんでも構いません。
+</sect3>
+<sect3>通常使用<label id="usually-use">
+<p>ここをチェックしたアカウントが起動時に選択されている状態になります。
+</sect3>
+<sect3>個人情報 - 名前
+<p>メールの送信時に使用される名前です。
+</sect3>
+<sect3>個人情報 - メールアドレス (必須)
+<p>メールの送信時に使われるメールアドレスです。
+</sect3>
+<sect3>個人情報 - 組織
+<p>メールの送信時に書き込まれます。
+</sect3>
+<sect3>サーバ情報 - プロトコル (POP3)
+<p>
+プロトコルは、
+<itemize>
+<item>POP3
+<item>IMAP4
+<item>ニュース(NNTP)
+<item>なし(ローカル)
+</itemize>
+の中から選択することが出来ます。
+自分のサーバにあったものを選びましょう。
+ニュースについてはここでは説明しません。
+
+</sect3>
+<sect3>サーバ情報 - 受信サーバ (必須)
+<p>
+受信するサーバを指定します。
+メールは、プロトコルで指定したプロトコルでここで指定したサーバから受信されます。
+
+</sect3>
+<sect3>サーバ情報 - SMTPサーバ(送信) (必須)
+<p>
+送信に使用するサーバを指定します。プロトコルにはSMTPが使用されます。
+
+</sect3>
+<sect3>サーバ情報 - ユーザID (必須)
+<p>ここで指定されたユーザIDを使ってメールサーバにログインします。
+</sect3>
+<sect3>サーバ情報 - パスワード(必須)
+<p>ここで指定されたパスワードを使用してメールサーバにログインします。
+入力されたパスワードは画面上には***としか表示されません。
+
+入力しなかった場合は接続時にパスワードを入力するダイアログが開きます。
+</sect3>
+
+</sect2>
+<sect2>(受信)タブ
+<p>
+<sect3>POP3 - 安全な認証方式を使用する (APOP)
+<p>
+POP3では通常生のパスワードがそのままネットワークに流れてしまいますが、
+APOP認証を使用すると、生のパスワードが流れなくなるため比較的安全になります。
+ただし、サーバがAPOP認証に対応している必要があります。
+</sect3>
+<sect3>POP3 - 受信時にサーバ上のメッセージを削除する
+</sect3>
+<sect3>POP3 - サーバ上の全てのメッセージを受信する
+<p>
+Sylpheedにはダウンロードされたメッセージを記憶して
+次からダウンロードしないようにする機能がありますが、
+それを無視してすべてダウンロードします。
+
+つまり、これを選択しなければその機能を有効にすることができます。
+このオプションは、受信時にサーバ上のメッセージを削除する場合は実質無効です。
+</sect3>
+
+<sect3>POP3 - 受信サイズ制限
+<p>
+1メッセージがこのサイズより大きなメッセージは受信しません。
+</sect3>
+
+<sect3>POP3 - 受信時にメッセージを振り分ける
+<p>
+このチェックがオンのとき、受信時に
+受信したメッセージに対して振り分けルールが実行されます。
+</sect3>
+<sect3>POP3 - 標準の受信箱 (inbox)
+<p>
+そのアカウントでメールを受信したときにどこに保存するかを指定できます。
+</sect3>
+
+<sect3>IMAP4 - IMAPサーバディレクトリ
+</sect3>
+
+<sect3>「全受信」でこのアカウントの新着メールをチェックする
+<p>
+チェックを外した場合、全てのアカウントから受信する機能を利用したときに
+対象からこのアカウントを外します。
+
+送信だけのアカウントなどに利用すると便利かもしれません。
+</sect3>
+
+<sect2>(送信)タブ
+<p>
+<sect3>ヘッダ - Dateヘッダフィールドを付ける
+<p>DateヘッダフィールドをSylpheedで付けます。
+</sect3>
+<sect3>メッセージIDを生成する
+<p>メッセージIDをSylpheedで付けます。
+一般的な端末型ダイヤルアップIP接続のプロバイダが運営しているようなサーバでは、
+サーバ側がつけるので必要がないことが多いです。
+</sect3>
+<sect3>ユーザ定義ヘッダを追加する
+<p>
+これを選択するとユーザ定義ヘッダを追加できます。
+編集ボタンを押して編集してください。
+リストの順番で挿入されます。
+
+今のところX-Faceもここで挿入します。
+</sect3>
+
+<sect3>SMTP認証(SMTP AUTH)
+<p>
+利用するSMTPサーバがSMTP AUTHを必要とする場合、チェックを入れて
+空欄を埋めてください。
+</sect3>
+
+<!--
+<sect3>送信前にPOP3認証を行う
+<p>
+いわゆるPOP before SMTPです。
+現在はまだ実装されていません。
+</sect3>
+-->
+
+</sect2>
+
+<sect2>(作成)タブ
+<p>
+<sect3>署名ファイル
+<p>ここで指定されたファイルはメッセージ作成時に自動的に最後に挿入されます。
+デフォルトは<ホームディレクトリ>/.signatureです。
+空欄の場合も同様に適用されるので、挿入したくない場合は、
+/dev/nullを指定すると良いと思います。
+
+</sect3>
+
+<sect3>以下のアドレスを自動指定
+<p>Cc, Bcc, Reply-Toフィールドを自動指定できます。
+自動指定するには、各フィールド名の横のチェックボックスをオンにし、
+テキストボックスに記入すればメッセージ作成ごとにつけてくれます。
+</sect3>
+
+</sect2>
+
+<sect2>(個人情報)タブ
+<p>
+GPGMEを有効にしてコンパイルした時のみ表示されます。
+
+<sect3>署名鍵
+<p>
+使用するGnuPG鍵をどのようにして選ぶかを選択します。
+</sect3>
+
+</sect2>
+
+<sect2>(SSL)タブ
+<p>
+OpenSSLをリンクしてコンパイルされたときのみ表示されます。
+<sect3>POP3の接続にSSLを使用
+</sect3>
+<sect3>IMAP4の接続にSSLを使用
+</sect3>
+
+<sect3>送信(SMTP)
+</sect3>
+
+</sect2>
+<sect2>(高度な設定)タブ
+<p>
+<sect3>SMTPポートを指定 (25)
+<p>SMTPプロトコルで通信するポートを指定できます。ほとんどの場合は変更の必要はありません。
+</sect3>
+<sect3>POP3ポートを指定 (110)
+<p>POP3プロトコルで通信するポートを指定できます。ほとんどの場合は変更の必要はありません。
+</sect3>
+<sect3>ドメイン名を指定
+<p>
+ドメイン名を指定できます。ほとんどの場合は変更の必要はありません。
+</sect3>
+</sect2>
+</sect1>
+
+<sect1>現在のアカウントの変更<label id="current-account">
+<p>
+"設定>現在のアカウントを変更"から現在のアカウントを選ぶことができます。
+選択可能なのは、<ref id="append-account" name="アカウントの新規作成">で登録したアカウントです。
+
+また画面右下に表示される"現在のアカウント:"をクリックするか、
+ツールバーの"アカウント"ボタンを右クリックすることによっても変更することができます。
+
+現在のアカウントは、"新着メールの受信"や、"メッセージの作成"に利用されます。
+
+起動時は<ref id="usually-use" name="通常使用">にチェックされたアカウントが選択されています。
+<sect1>アカウント毎の設定<label id="config-every-account">
+<p>
+"設定>アカウント毎の設定"で
+現在のアカウントの<ref id="append-account" name="アカウントの新規作成">で設定した情報を編集することができます。
+</sect1>
+<sect1>アカウントの編集<label id="edit-account">
+<p>
+メニューの"設定>アカウントの編集"で"アカウントの編集"<ref id="dialog" name="ダイアログ">を呼び出し、
+Sylpheedに登録されたアカウントを管理できます。
+
+"D"列にチェックが入ってるアカウントは、デフォルトのアカウントです。
+
+"G"列にチェックの入ってるアカウントは、全受信時に受信されます。
+その列をクリックすることでもその設定を変えることができます。
+
+それぞれのボタンは以下のような動作をします。
+<sect2>追加
+<p>
+<ref id="append-account" name="アカウントの追加">と同じ動作をします。
+<sect2>編集
+<p>
+右のリストで選択されたアカウントに対して、
+<ref id="config-every-account" name="アカウント毎の設定">と同じ動作をします。
+
+リストをダブルクリックすることでも同じ効果が得られます。
+</sect2>
+<sect2>削除
+<p>
+右のリストで選択されたアカウントを削除することができます。
+</sect2>
+<sect2>↑、↓
+<p>
+これらのボタンを使うとアカウントの順番を変えることができます。
+アカウントの順番は全アカウントから受信するときの順番になります。
+</sect2>
+<sect2>通常使用するアカウントに指定
+<p>
+リストで選択されているアカウントに
+<ref id="usually-use" name="通常使用">するアカウントを変更できます。
+</sect2>
+</sect1>
+
+</sect>
+<sect>メッセージの受信<label id="receive-message">
+<p>
+<sect1>SylpheedのPOP受信機能を使う場合
+<p>
+<sect2>現在のアカウントを受信
+<p>
+<ref id="Account-Config" name="アカウント設定">をしてから、
+<itemize>
+<item>メニューの"メッセージ>受信>現在のアカウントから受信"を選択
+<item>ツールバーの"受信"ボタンを押す
+</itemize>
+のいずれかを行えば<ref id="current-account" name="現在のアカウント">のメールをダウンロードできます。
+</sect2>
+<sect2>全てのアカウントを受信
+<p>
+<itemize>
+<item>メニューの"メッセージ>受信>全アカウントから受信"を選択
+<item>ツールバーの"全受信"をクリック
+</itemize>
+のいずれかを行うことで<ref id="Account-Config" name="アカウントの設定">で設定されたすべてのアカウントのメールを受信できます。
+</sect2>
+</sect1>
+
+<sect1>fetchmailなどの外部プログラムを使用する場合
+<p>
+</sect1>
+
+<sect>メッセージの作成<label id="send-message">
+<sect1>メッセージの新規作成<label id="message-create">
+<p>
+メッセージを作成するには、
+<itemize>
+<item>ツールバーの"作成"ボタンを押す
+<item>"メッセージ>新規メッセージを作成" (Ctrl+mキー)
+</itemize>
+のいずれかを行えばメッセージ作成ウィンドウが開きます。
+
+メッセージメニューよりBcc, 返信先を指定等を選択することで、
+表示されていないフィールドでも入力できるフィールドがあります。
+
+差出人: の部分をクリックして変更すれば送信するアカウントの情報を変更することができます。
+
+<sect1>署名の挿入
+<p>
+<itemize>
+<item>"ファイル>署名を挿入"
+<item>ツールバーの"署名"ボタン
+</itemize>
+のいずれかで、
+設定で指定されたファイル(デフォルトではホームディレクトリの.signature)に書かれた内容を
+本文の最後に挿入することができます。
+</sect1>
+
+<sect1>メッセージの送信
+<p>
+<itemize>
+<item>"ファイル>送信"
+<item>ツールバーの"送信"
+</itemize>
+のいずれかを行えば、すぐにサーバへ送信されます。
+
+<itemize>
+<item>"ファイル>後で送信"
+<item>ツールバーの"後で送信"
+</itemize>
+のいずれかを行えば、一度送信待ちに入って待機状態になります。
+
+待機しているメッセージを実際に送信するには、
+<itemize>
+<item>メインウィンドウのツールバーの"送信"ボタン
+<item>メインウィンドウの"メッセージ>送信待機中のメッセージを送信"
+</itemize>
+で送信できます。
+
+</sect1>
+<sect1>草稿
+<p>
+
+<itemize>
+<item>"ファイル>草稿フォルダに保存"
+<item>ツールバーの"草稿"
+</itemize>
+で草稿に保存できます。
+
+また、"ファイル>保存して編集を続ける"で草稿に保存した後そのまま編集を続けることができます。
+
+草稿に保存したメッセージは、
+草稿フォルダに入ってそのメッセージを選択し、
+<ref id="context-menu" name="コンテキストメニュー">より"再編集"を選択するか、
+ダブルクリックすれば再び編集できます。
+
+</sect1>
+<sect1>添付ファイル
+<p>
+添付ファイルを添付するには、
+<itemize>
+<item>ツールバーの"添付"ボタンを押す
+<item>メニューで"ファイル>ファイルを添付"
+</itemize>
+のいずれかを行った後に添付ファイルのリストが現れるので、
+各ファイルを選択して<ref id="context-menu" name="コンテキストメニュー">より
+<itemize>
+<item>追加を選択すれば添付ファイルの追加
+<item>削除を選択すればそのファイルをリストから削除
+<item>プロパティでその添付ファイルのMIMEタイプ/エンコード方式/パス/ファイル名を指定
+</itemize>
+することができます。
+</sect1>
+
+<sect1>ファイルの挿入
+<p>
+"挿入"ボタンやメニューのファイル>ファイルを挿入"ではメッセージ本文に
+指定したファイルを挿入できます。
+
+</sect1>
+
+<sect1>アドレス帳の利用
+<p>
+"アドレス"ボタンを押すか、メニューで"ツール>アドレス帳"を選択すれば、
+<ref id="address-combo" name="アドレス帳と連係">できます。
+
+</sect1>
+
+<sect1>外部エディタの利用
+<p>
+
+外部エディタを利用するには、
+<ref id="ext-editor-config" name="外部エディタを設定">してから、
+<itemize>
+<item>ツールバーの"エディタ"ボタンを押す
+<item>メニューで"ツール>外部エディタで編集"を選択
+</itemize>
+のいずれかを行い、外部エディタで編集して保存して終了をすれば、反映されます。
+
+</sect1>
+
+<sect1>折り返し
+<p>
+
+<itemize>
+<item>メニューから、"編集>すべての長い行を折り返す"を選択する
+<item>ツールバーの"整形"を選択
+</itemize>
+のいずれかを行えば、設定にしたがった行数で折り返します。
+
+"編集>現在の段落を整形する"で現在のカーソル位置にある段落のみを整形できます。
+
+"編集>自動整形"のチェックを入れておくと、入力中に自動的に整形されます。
+
+設定で送信時に自動で実行することもできるので、設定しておくことをおすすめします。
+
+</sect1>
+<sect1>メッセージに返信する
+<p>
+まず、<ref id="read-message" name="メッセージの閲覧">に書かれている方法を使ってメッセージを選択します。
+その後、
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"返信"を選択
+<item>メニューの"メッセージ>返信"を選択
+</itemize>
+のいずれかを行うことでウィンドウが開くので、
+メッセージの新規作成と同じようにして送信できます。
+
+引用するかどうかは全般の設定の<ref id="quote-when-reply" name="返信時にメッセージを引用する">という設定で変えることができます。
+
+アドレスの入力の手間を省くという理由で、関係ない記事に返信して送信しないでください。
+</sect1>
+<sect1>メッセージを全員に返信する
+<p>
+単なる返信では宛先(To:)にしか返信されませんが、
+こちらではCc: にも返信されます。
+
+メッセージを全員に返信するには、
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"返信の宛先>全員に返信"を選択
+<item>メニューの"メッセージ>返信の宛先>全員に返信"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+<sect1>メッセージを差出人に返信する
+<p>
+一見すると単なる返信のように見えますが、
+メーリングリスト等で付加されるReply-To:を無視して、
+差出人に直接送信できます。
+
+これを行うには、
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"返信の宛先>差出人に返信"を選択
+<item>メニューの"メッセージ>返信の宛先>差出人に返信"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+<sect1>メッセージをメーリングリストに返信する
+<p>
+メーリングリストのヘッダを参照して、適切なアドレスに返信します。
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"返信の宛先>メーリングリストに返信"を選択
+<item>メニューの"メッセージ>返信の宛先>メーリングリストに返信"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+<sect1>メッセージを転送する
+<p>
+<ref id="read-message" name="メッセージの閲覧">に書かれている方法を使ってメッセージを選択します。
+その後、
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"転送"を選択
+<item>メニューの"メッセージ>転送"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+<sect1>メッセージを添付ファイルとして転送する
+<p>
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"添付として転送"を選択
+<item>メニューの"メッセージ>添付として転送"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+<sect1>メッセージを手を加えずに転送する
+<p>
+本文の内容や差出人などに手を加えずにそのまま転送します。
+<itemize>
+<item><ref id="context-menu" name="コンテキストメニュー">より"手を加えずに転送"を選択
+<item>メニューの"メッセージ>手を加えずに転送"を選択
+</itemize>
+のいずれかを行います。
+</sect1>
+
+</sect>
+
+
+<sect>アドレス帳
+<p>
+アドレス帳は、"ツール>アドレス帳"などによって起動できます。
+<sect1>アドレスの登録・削除
+<p>
+アドレス帳を開いた後、アドレスを登録したいフォルダを"共有アドレス"や
+"個人用アドレス"などが書かれたリストの中から選択します。
+その後、
+<itemize>
+<item>メニューより"アドレス>新規アドレス"
+<item>追加ボタンを押す
+<item>アドレス表示部分の<ref id="context-menu" name="コンテキストメニュー">より"新規アドレス"
+</itemize>
+のいずれかを行うことで追加<ref id="dialog" name="ダイアログ">が現れるので、それぞれの項目を入力した後OKを押せば
+登録されます。
+
+また登録されたアドレスを選択後、
+<itemize>
+<item>メニューより"アドレス>編集"
+<item><ref id="context-menu" name="コンテキストメニュー">より"編集"
+<item>編集ボタンを押す
+</itemize>
+のいずれかを行えば編集ダイアログを表示でき、OKを押せば更新されます。
+
+同じく登録されたアドレスを選択後、
+<itemize>
+<item>メニューより"アドレス>削除"
+<item><ref id="context-menu" name="コンテキストメニュー">より"削除"
+<item>削除ボタンを押す
+</itemize>
+のいずれかを行えばアドレス帳からそのアドレスを削除することができます。
+</sect1>
+
+<sect1>フォルダとグループ
+<p>
+<!-- フォルダとグループは中にアドレスを入れられるという点で同じですが、
+メール作成時にアドレス帳からグループを参照することにより、そのグループに登録された
+すべての人に送信することができるという機能の違いがあります。-->
+
+<!--
+フォルダあるいはグループを中に作りたいフォルダを選択後、
+<itemize>
+<item>メニューより"ファイル>新規フォルダ"
+<item>コンテキストメニューを出して新規フォルダを選択
+</itemize>
+のいずれかを行えばフォルダを作成することができ、
+<itemize>
+<item>メニューより"ファイル>新規グループ"
+<item>Alt + gを押す
+<item>コンテキストメニューを出して新規グループを選択
+</itemize>
+のいずれかを行えばグループを作成することができます。
+-->
+
+<!-- ただし、フォルダの中にフォルダやグループを作成することは可能ですが、
+グループの中にフォルダやグループを作成することはできません。-->
+
+</sect1>
+<sect1>メッセージ作成ウィンドウとの連携<label id="address-combo">
+<p>
+<ref id="message-create" name="メッセージの作成">画面で、
+<itemize>
+<item>メニューで"ツール>アドレス帳"
+<item>"アドレス"ボタンをクリック
+</itemize>
+することでアドレス帳画面を出すことができ、
+そこでアドレスやグループを選択して"宛先"(あるいは"To:"), "Cc:", "Bcc:"ボタンを押せば
+それぞれ宛先, Cc, Bccにアドレスが追加されます。
+
+複数選択してボタンを押して同時にたくさん追加することも可能ですし、
+一度3つのどれかのボタンを押した後、
+また別のアドレスを選択してボタンを押せば
+前に追加したアドレスの次に選択したアドレスが追加されます。
+</sect1>
+</sect>
+
+<sect>メッセージの振り分け
+<sect1>振り分けの設定<label id="filtering-config">
+<p>
+メニューより、"設定>振り分けの設定..."を選択します。
+
+<sect2>フィルタルールの登録
+<p>
+"追加"ボタンを押すとフィルタルール設定ダイアログが開きます。
+
+"名前:"欄にルールに対する分かりやすい名前を入力します。
+
+その下にあるドロップダウンメニューで、複数の条件がある場合にどのようにマッチさせるかを選択します。
+
+上部枠内の"From"と表示されているドロップダウンメニューで、振り分けの対象にしたいヘッダやその他の条件を選択します。選択肢にないヘッダは"ヘッダを編集..."で追加することができます。
+
+<itemize>
+<item>ヘッダ項目(From, To等): 対象となるヘッダを指定します。
+<item>To または Cc: To または Cc の両方を同時に指定します。
+<item>いずれかのヘッダ: すべてのヘッダが対象になります。
+<item>ヘッダを編集...: ドロップダウンメニューに表示されるヘッダの追加または削除を行います。
+<item>メッセージ本文: メッセージの本文を対象とします。
+<item>コマンドの実行結果: 外部コマンドを実行し、その戻り値によって振り分けを行います。戻り値が0であればマッチし、0以外であればマッチしません。コマンドラインの末尾にメッセージのファイル名が付加されます。リダイレクトなどのシェル機能は使用できないので、その場合はラッパースクリプトを作成する必要があります。
+<item>サイズ: メッセージファイルのサイズを指定した値と比較します。
+<item>経過日数: メッセージの送信日時から受信した日時までの経過日数を指定した値と比較します。
+</itemize>
+
+次に、右のドロップダウンメニューで条件をキーワードにマッチさせる方法を選択します。アルファベットの大小文字は区別しません。正規表現には拡張正規表現が使用できます。
+
+<itemize>
+<item>〜が次を含む: ヘッダや本文の内容がキーワードを含む場合マッチします。
+<item>〜が次を含まない: ヘッダや本文の内容がキーワードを含まない場合マッチします。
+<item>〜が次に一致: ヘッダや本文中の1行がキーワードに一致する場合マッチします。
+<item>〜が次に一致しない: ヘッダや本文中の1行がキーワードに一致しない場合マッチします。
+<item>〜が次の正規表現にマッチ: ヘッダや本文の内容が正規表現にマッチする場合、マッチします。
+<item>〜が次の正規表現にマッチしない: ヘッダや本文の内容が正規表現にマッチしない場合、マッチします。
+<item>(サイズ)が次より大きい: サイズが指定した値より大きい場合マッチします。
+<item>(サイズ)が次より小さい: サイズが指定した値より小さい場合マッチします。
+<item>(経過日数)が次より長い: 送信日時からの経過日数が指定した値より長い場合マッチします。
+<item>(経過日数)が次より短い: 送信日時からの経過日数が指定した値より短い場合マッチします。
+</itemize>
+
+振り分けの対象にヘッダや本文を選択した場合は、キーワードを入力します。キーワードを空にした場合は、ヘッダが存在すれば常にマッチするようになります。
+サイズや経過日数を選択した場合は、数値を入力します。
+
+条件を追加したい場合は、"+"ボタンを選択すると新しい行が追加されるので、同様に上記の作業を繰り返します。また、"-"ボタンを選択するとその条件を削除することができます。
+
+次に、アクションを選択します。条件と同様に任意に追加できますが、「移動」、「受信しない」、「サーバから削除」は一度しか実行できず、同時に選択することはできません。移動先やコピー先を指定する場合はフォルダアイコンのボタンで選択できます。
+
+<itemize>
+<item>移動: 指定したフォルダにメッセージを移動します(以降のルールは評価されません)。
+<item>コピー: 指定したフォルダにメッセージをコピーします。何度でも実行可能です。
+<item>受信しない: メッセージをサーバに残します(以降のルールは評価されません)。
+<item>サーバから削除: 受信時にサーバにメッセージを残す設定にしていた場合でも、強制的にサーバから削除します(以降のルールは評価されません)。
+<item>マーク: マークを付けます。
+<item>カラーラベルを指定: カラーラベルを付けます。
+<item>読んだことにする: 未読マークを外します。
+<item>コマンドを実行: 任意のコマンドを実行します。末尾にメッセージのファイル名が自動的に付加されます。
+<item>ルールの評価を停止: 当該ルール以降のルールを評価しないようにします。
+</itemize>
+
+設定が完了したら、"OK"ボタン押すと登録が完了します。"キャンセル"を押すと設定は破棄されます。
+</sect2>
+
+<sect2>振り分けルールの例
+<p>
+Subjectに"!ゴミ!"か"!ゴミ!"が含まれる場合にごみ箱(trash)に振り分けしたい場合を例にします。
+
+まず、"次の条件のいずれかが該当する場合"を選択します。
+
+そして、1つ目の条件でSubjectを選択し、"が次を含む"を選択し、キーワードに"!ゴミ!"を入力します。
+
+"+"ボタンを押し、条件を追加します。
+
+ヘッダは同じくSubjectを選び、キーワードに"!ゴミ!"を入力します。
+
+そして、アクションで"移動"を選択し、フォルダの選択ボタンを押してごみ箱を選択します。
+
+その後、"OK"ボタンを押すとルールの追加は完了します。
+</sect2>
+<sect2>振り分けルールの編集
+<p>
+登録済みルールのリストから編集したいルールを選択して、"編集"ボタンを押します。
+</sect2>
+<sect2>振り分けルールのコピー
+<p>
+登録済みルールのリストからコピーしたいルールを選択して、"コピー"ボタンを押します。
+</sect2>
+<sect2>振り分けルールの削除
+<p>
+登録済みルールのリストから削除したいルールを選択して、"削除"ボタンを押します。
+</sect2>
+</sect1>
+<sect1>振り分けを実行するには
+<p>
+<sect2>自動的に振り分けを実行するには
+<p>
+自動的に振り分けを実行したいアカウントの
+<ref id="Account-Config" name="アカウントの設定">で、
+受信タブの中にある「受信時にメッセージを振り分ける」をオンにします。
+</sect2>
+<sect2>開いているフォルダに振り分けを実行するには
+<p>
+メニューの"ツール>フォルダ中のすべてのメッセージを振り分け"または"ツール>選択中のメッセージを振り分け"を選択することで、設定されたルールを元に振り分けが実行されます。
+</sect2>
+<sect2>振り分けルールの自動生成
+<p>
+メッセージを<ref id="select-operation" name="選択">してから、
+"ツール>振り分けルールを作成"を実行することで、
+ルールの雛型を自動的に作成します。
+
+あとは、必要な情報を追加し、登録ボタンを押すだけです。
+</sect2>
+</sect1>
+</sect>
+<sect>他メール(メール保存形式)からSylpheed(MHフォルダ形式)への移行
+<sect1>mbox形式のメッセージファイルの取り込み<label id="mbox-import">
+<p>
+ファイルメニューからmboxファイルをインポートを選択し、
+インポートファイルにはインポートしたいmbox形式のメールボックスを選択します。
+
+インポート先には選択したメールボックスを展開するフォルダを指定し
+OKを押せばインポートされます。
+mbox形式は、"mbox"というファイルの他にもNetscape Messengerの~/nsmailの下のファ
+イル、KMailの~/Mail以下のファイル等にも利用されているので、そのファイルを利用
+することで移行できます。
+
+ただし、KMailは添付ファイルを別ファイルにしてしまう仕様があるらしく、
+添付ファイルがある場合、正しくコンバートすることができません。
+</sect1>
+<sect1>Windowsのメーラ(Becky!やAL-Mail, Outlook Express4等)からの移行
+<p>
+Windows用フリーソフトウェアである
+<url url="http://www.digico-m.com/shin1/" name="MailExp">を利用して
+"標準UNIX From形式のメールボックス"にエクスポートします。
+その後そのファイルを移動しそのファイルを
+<ref id="mbox-import" name="mbox形式としてインポート">します。
+MailExpはとても多くのメーラからのインポートが可能です。
+<sect1>Outlook Express 5のdbx形式からの移行
+<p>
+Outlook Express 5の形式はMailExpではサポートしていないので
+<url url="http://www02.so-net.ne.jp/~home/oe5conv/" name="OE5Conv">を利用して
+mbox形式へエクスポートした後、そのファイルを<ref id="mbox-import" name="mbox形式としてインポート">します。
+</sect1>
+
+<!--
+<sect1>NMail4(NTool)からの移行
+<p>
+GTK+/GNOMEのメーラであるNmailからの移行は、
+<url url="http://www.enjoy.ne.jp/~gm/program/nmail4tosylpheed/index-ja.html" name="Nmail4 to Sylpheed">が公開されていますのでそちらを参照ください。
+</sect1>
+-->
+
+</sect>
+<sect>NetNewsの購読
+<p>
+<sect1>サーバの追加・削除
+<p>
+
+<sect2>サーバの追加<label id="append-news-serv">
+<p>
+まず、<ref id="append-account" name="アカウント">の追加を行なってください。
+そこで、サーバ情報のプロトコルで"ニュース (NNTP)"を選択し、
+ニュースサーバ名を記入してください。
+
+認証が必要な場合には、"このサーバは認証が必要"のチェックボックスもオンにして、
+ユーザIDとパスワードも入力してください。
+
+そしてOKを押せばフォルダビューにニュースサーバ名が登場します。
+</sect2>
+<sect2>サーバの削除
+<p>
+<ref id="edit-account" name="アカウントの編集">で該当するアカウントを選択し、"削除"ボタンを押してください。
+
+キャッシュ情報は復元できないので注意してください。
+</sect2>
+<sect2>ニュースサーバに関するTips
+<p>
+現在のSylpheedはニュースサーバに1つ1つメッセージを取り寄せて行きます。
+そのため、ダイヤルアップ環境では遅いかも知れません。
+
+そこでleafnode+ のようなオフラインニュースサーバを使うことをお薦めします。
+</sect2>
+</sect1>
+<sect1>ニュースグループの購読・購読解除
+<sect2>ニュースグループの購読
+<p>
+<ref id="append-news-serv" name="サーバの追加">で追加したニュースサーバを
+<ref id="folderview" name="フォルダビュー">で<ref id="context-menu" name="コンテキストメニュー">を出し、
+"ニュースグループを購読"を選択してください。
+
+<!-- そしてそこに"fj.os.linux"のように入力してOKを押せば、ニュースグループ名のフォルダが登録され読めるようになります。-->
+そして検索し、講読したいグループを選択した後OKを押せば講読できます。
+複数選択も可能です。
+</sect2>
+<sect2>ニュースグループの購読解除
+<p>
+購読で追加したニュースグループを右クリックしてコンテキストメニューを出し、
+"ニュースグループを削除"を選択し、"はい"を選択すれば解除できます。
+
+この場合もキャッシュや未読情報はクリアされてしまうので注意してください。
+</sect2>
+</sect1>
+<sect1>ニュースを読む
+<p>
+ニュースは、<ref id="read-message" name="メールの閲覧">と全く同じ方法で読むことができます。
+</sect1>
+<sect1>ニュースの投稿
+<p>
+ニュースフォルダを開いている状態か、ニュースのアカウントを選択している状態で
+メッセージの作成をすれば記事を書くことができ、メールと同じような操作で投稿することができます。
+</sect1>
+
+</sect>
+<sect>カスタマイズ(全般の設定)
+<sect1>全般の設定<label id="general-config-open">
+<p>
+全般の設定ウィンドウを開くには
+<itemize>
+<item>メニューから"設定>全般の設定"
+<item>ツールバーから設定をクリック
+</itemize>
+することで開くことができます。
+</sect1>
+<sect1>各項目の説明
+<sect2>(受信)タブ
+<sect3>外部プログラム
+<p>
+メールの受信に外部プログラムを使用するを選択すれば、
+Sylpheed本体の受信部を使用せずにそのプログラムを利用して受信を行います。
+</sect3>
+<sect3>ローカルスプール
+<p>
+スプールから取り込むを選択すれば、
+"[スプールディレクトリ]/[ユーザ名]"のファイルからメッセージが取り込まれます。
+取り込み時に振り分けるを選択すれば、取り込み時に振り分けられます。
+</sect3>
+<sect3>新着メールを自動チェックする
+<p>
+チェックすれば指定した時間ごとに新着メールをチェックします。
+</sect3>
+<sect3>起動時に新着メールをチェックする
+<p>
+Sylpheed起動時に新着メールを自動チェックします。
+</sect3>
+<sect3>受信後に全てのローカルフォルダを更新する
+<p>
+メールの受信にprocmailなどの外部プログラムを使って直接MHフォルダにメッセージを取り込んだ場合フォルダの情報は自動的に更新されないので、これを有効にすることで最新の状態に更新できます。
+</sect3>
+<sect3>ダウンロードする記事数の上限
+<p>
+ニュースフォルダに未取得の記事を取得するときの記事数の上限を指定できます。
+0を指定すると無制限になります。取得済みの記事数は影響しません。
+</sect3>
+</sect2>
+<sect2>(送信タブ)
+<p>
+<sect3>外部プログラム
+<p>
+"メールの送信に外部プログラムを使用する"を選択すれば、Sylpheed本体の送信部を使用せずにそのプログラムを利用して送信を行います。
+</sect3>
+<sect3>送信したメッセージを送信控に保存する
+<p>
+</sect3>
+<sect3>送信コードセット
+<p>
+メッセージを送信するときの文字コードを選択することができます。
+
+iconvを有効にしてコンパイルされたときは多くのコードセットを選択することができます。
+
+通常は"自動設定"を推奨します。
+ちなみに、日本語ロケールが設定されている場合、ISO-2022-JPが選択されます。
+
+UTF-8等も使用することもできますが、相手が読めると確認できる場合のみ
+使用してください。
+</sect3>
+<sect2>(作成)タブ
+<p>
+<sect3>署名
+<p>
+自動的に署名を挿入するを選択すれば、メッセージ作成時に最後の方に
+自動的に署名が挿入されます。
+<verb>
+[設定されている署名の区切り]
+[各アカウント設定の署名ファイル]
+</verb>
+というように挿入されます。
+</sect3>
+<sect3>エディタ
+<p>
+</sect3>
+<sect3>返信時に自動的にアカウントを選択する
+<p>
+To: に書かれたアドレスからアカウントを判断し、
+自動的に返信時のアカウントを決定します。
+</sect3>
+<sect3>返信時にメッセージを引用する<label id="quote-when-reply">
+<p>
+返信するとき、引用するかどうか指定します。
+</sect3>
+<sect3>返信ボタンでメーリングリストに返信する
+<p>
+ツールバーの返信ボタンを押した場合にメーリングリストに返信します。
+</sect3>
+</sect2>
+
+<sect2>(引用)タブ
+<sect3>引用の書式
+<p>
+引用符と引用の形式を設定します。
+
+?x{expr}は、xが指定されていればexprを表示します。
+例えば、?s{件名: %s}というように使えば、
+件名が指定されているときのみ"件名: (件名)"という表示ができます。
+
+引用符に設定した文字列が、>で、
+引用の形式が
+<verb>
+On %d
+%f wrote:
+
+%Q
+</verb>
+だった場合
+<verb>
+On [日付]
+[差出人] wrote:
+> 元のメッセージの文章
+> 2行目
+</verb>
+というように引用して返信時に引用されます。
+
+記号の説明ボタンをクリックすれば、%で始まるものの説明がでてきます。
+<itemize>
+<item>%d: 日付
+<item>%f: 差出人
+<item>%N: 差出人の氏名
+<item>%F: 差出人の名前
+<item>%I: 差出人のイニシャル
+<item>%s: 件名
+<item>%t: 宛先
+<item>%c: Cc
+<item>%n: ニュースグループ
+<item>%i: メッセージID
+<item>%%: パーセント記号(%そのもの)
+<item>%M: メッセージ本文
+<item>%Q: 引用符付きメッセージ本文
+<item>%q: 引用符付きメッセージ本文(署名なし)
+<item>\\: 文字 バックスラッシュ
+<item>\?: 文字 疑問符
+<item>\{: 文字 開き中括弧
+<item>\}: 文字 閉じ中括弧
+</itemize>
+</sect3>
+
+<sect3>転送の書式
+<p>
+転送の書式も同様です。
+</sect3>
+
+</sect2>
+<sect2>(表示)タブ
+<p>
+ここの項目は表示だけであり、メッセージ本体には影響を与えません。
+<sect3>フォント<label id="font-config">
+<p>
+メッセージを表示するフォントを設定できます。
+横の"..."ボタンを押せばフォント選択ダイアログを呼び出せますが、
+あまりお薦めはしません。
+
+ちなみに、マニュアル作者は
+<verb>
+-alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0
+</verb>
+に設定しています。基本的に、固定幅フォントに設定することをお薦めします。
+メニューなどのフォントを設定する場合についてはFAQを参照してください。
+</sect3>
+<sect3>ヘッダの項目を翻訳する
+<p>
+From:を宛先: Subject: を件名:にして表示したりします。
+</sect3>
+<sect3>フォルダ名の横に未読数を表示する
+<p>
+<ref id="folderview" name="フォルダビュー">で、Folder (30)のように未読メッセージの数を表示します。
+</sect3>
+<sect3>差出人が自分の場合は'差出人'カラムに宛先を表示する
+<p>
+<ref id="summaryview" name="サマリビュー">の差出人カラムで、宛先人が現在のアカウント設定と同じ場合、
+"--> 宛先"というように表示できます。
+</sect3>
+<sect3>水平スクロールバーを有効にする
+<p>
+<ref id="summaryview" name="サマリビュー">に水平スクロールバーを表示します。
+</sect3>
+<sect3>スレッドを展開する
+<p>
+フォルダを開いたときに、<ref id="summaryview" name="サマリビュー">でスレッドを展開した状態で表示するかどうかを指定します。
+</sect3>
+<sect3>未読メッセージをボールドフォントで表示する
+</sect3>
+<sect3>日付の書式
+<p>
+日付の書式を%y/%m/%d(%a) %H:%Mのように指定します。
+詳しくはオンラインマニュアルのstrftime(3)を御覧ください。
+端末エミュレータ等で、
+<verb>
+$ man strftime
+</verb>
+のようにすれば読むことができます。
+</sect3>
+<sect3>サマリの表示項目を設定...
+<p>
+サマリの表示項目を設定できます。
+クリックして、必要なものを選択してOKボタンを押して完了です。
+</sect3>
+</sect2>
+
+<sect2>(メッセージ)タブ
+<p>
+ここの項目は表示だけであり、メッセージ本体には影響を与えません。
+<sect3>メッセージの色を有効にする
+<p>
+チェックをオンにして編集ボタンを押すとメッセージの引用の深さに応じた
+表示色の設定ができます。
+</sect3>
+<sect3>2バイト英数字を1バイト文字で表示する
+<p>
+これも好みの問題ですが、2バイト英数字を1バイト文字で表示することができます。
+強制的に変更してしまうので、アスキーアート等はずれてしまう場合があります。
+日本語のみに有効です。
+</sect3>
+<sect3>メッセージビューの上部にヘッダペインを表示する
+<p>
+メッセージビューの上に主なヘッダを表示します。
+現在、表示内容はカスタマイズできません。
+</sect3>
+<sect3>メッセージビューに簡略ヘッダを表示する
+<p>
+メッセージビューに簡略ヘッダを表示します。
+編集ボタンを押せば表示内容をカスタマイズできます。
+"指定されていないヘッダを全て表示"が選択されている場合、
+"表示しないヘッダ"に選択されたもの以外が表示され、
+選択されていない場合、"表示するヘッダ"に指定されているもののみが表示されます。
+</sect3>
+<sect3>行間を空ける
+<p>
+設定したピクセル分行間を空けて表示することが出来ます。
+</sect3>
+<sect3>行頭を空ける
+<p>
+行頭を空けて表示することができます。
+</sect3>
+<sect3>スクロール/半ページ単位
+<p>
+スペースキー等でのスクロール量を半ページ単位にします。
+</sect3>
+<sect3>スムーズスクロール
+<p>
+スペースキー等でのスクロールをスムーズにします。
+"間隔"で何ドットずつスクロールするかを決めることができます。
+間隔を大きくすれば速くなります。
+</sect3>
+</sect2>
+<sect2>(個人情報)タブ
+<p>
+GPGMEを有効にしたときのみ表示されます。
+</sect2>
+
+<sect2>(インタフェース)タブ
+<p>
+<!-- <sect3>Emacs上のメーラのマウス操作時の挙動をエミュレートする
+<p>
+サマリビューを右クリックではなく、中ボタンクリックだけでメッセージビューで更新できます。
+</sect3> -->
+<sect3>フォルダに入ったときに最初の未読メッセージを開く
+<p>
+フォルダに入ったときに最初の未読メッセージを開けます。
+設定されていない場合、フォルダに入った後Enterキーや中ボタン, 左ボタンクリックで表示を更新する必要がありますが、
+フォルダに入ったときに先頭の未読のフラグを消してしまう心配がありません。
+</sect3>
+<sect3>新着メールを受信した後受信箱に移動する
+<p>
+選択されていれば、受信時にアカウントの設定で受信箱に指定したフォルダに
+カーソルが移動します。
+</sect3>
+<sect3>メッセージを移動または削除したら即座に実行する
+<p>
+これがオフである場合、移動または削除のアクションをしても
+すぐには実行されずにそれぞれの"マーク"という形で保持され、
+"実行"されたとき実際に実行されます。
+</sect3>
+<sect3>受信ダイアログ
+<p>
+受信ダイアログをどのときに表示するか指定します。
+</sect3>
+<sect3>ダブルクリックしたときにアドレスを宛先に追加する
+<p>
+メッセージ作成ウィンドウからアドレス帳を呼び、
+アドレスをダブルクリックしたときに、
+このチェックがオンになっていればアドレスを"宛先"エントリーに追加します。
+
+オフになっているときは通常のアドレス帳と同じく
+アドレス編集モードに入ります。
+</sect3>
+<sect3>キーバインドを設定
+<p>
+好みのキーバインドを選んでOKを押してください。
+このマニュアルは標準バインドを選択してあるものとして書かれています。
+</sect3>
+</sect2>
+<sect2>(その他)タブ
+<p>
+<sect3>外部ブラウザ<label id="ext-browser-config">
+<p>
+外部ブラウザのコマンドを入力します。
+%sはURIで置き換えられます。マニュアル表示やURIダブルクリックで使用されます。
+ただし、デフォルトのnetscape -remote 'openURL(%s,raise)'では、
+netscapeが最初から起動されている必要があるため、変更をお薦めします。
+</sect3>
+<sect3>印刷
+<p>
+印刷に使用するコマンドを選択できます。%sがメッセージのファイルに置き換えられます。
+hoge < %s | lprというようにしてフィルタを設定することも可能です。
+</sect3>
+<sect3>外部エディタ<label id="ext-editor-config">
+<p>
+外部エディタを選択できます。%sは一時ファイルのファイル名に置き換えられます。
+</sect3>
+<sect3>終了時
+<p>
+終了時に確認するを選択すれば、Sylpheedを終了するときに、
+本当に終了していいかどうか質問してきます。
+
+終了時にごみ箱を空にするを選択すれば、
+終了時にゴミ箱を空にしてくれます。
+そのときに空にする前に尋ねるがオンであれば空にするかどうか質問します。
+</sect3>
+</sect2>
+</sect1>
+</sect>
+
+<sect>FAQ
+<p>
+<sect1>ニュースのメッセージ未読情報について
+<p>
+Q. Sylpheedでは同じMessageの未読情報を異なるフォルダ間で管理してくれないのでしょうか?
+
+<p>
+A. 現在のSylpheedは未読情報はフォルダ単位で管理しているため、
+ニュースグループごとに未読情報は変わって来てしまいます。
+</sect1>
+<!-- <sect1>MSNのメールアカウントの使用について
+<p>
+Q. 私はMSNを利用しているのですが、正しく設定したはずなのに受信できません。
+
+<p>
+A. MSNは独自プロトコルを利用しているという話なので、Sylpheedでは対応していません。
+情報提供いただければ対応できるかもしれません。
+</sect1>
+-->
+<sect1>メニューなどのフォント変更について
+<p>
+Q. メッセージ本文のフォントは<ref id="font-config" name="全般の設定から変更">
+できましたが、サマリやメニューなどのフォントは変更できないのでしょうか?
+
+<p>
+A. できます。&dollar;HOME/.sylpheed/gtkrcファイルを置いてください。
+<verb>
+style "Sylpheed-Widget-font" {
+ fontset = "-adobe-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,\
+ -alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0"
+}
+class "GtkWidget" style "Sylpheed-Widget-font"
+</verb>
+というようなファイルです。
+</sect1>
+<sect1>ショートカットキーのキーバインドの変更
+<p>
+Q. ショートカットキーのキーバインドの変更は出来ますか?
+
+<p>
+A. メニューに設定されている項目に関してはできます。
+メニューで変更したい項目にカーソルを合わせてから、その部分で変更したいキーを押せば、
+割り当てられます。Backspaceキーを押せば、消すことができます。
+変更は保存されます。
+</sect1>
+<sect1>返信マークについて
+<p>
+Q. 返信をやめたのに返信マークが残ってしまいます。消えないのでしょうか。
+<p>
+A. 現在の仕様では消えません。一度メッセージを未読にしてから読んだことにすることで消すことはできます。
+</sect1>
+<sect1>サマリビューの下に表示される画像について
+<p>
+Q. ヘッダが表示されている部分に小さな画像が表示されていますが、これは何でしょうか。
+ また、どのようにしたら挿入できるのでしょうか。
+<p>
+A. これは、X-Faceといいます。<ref id="Account-Config" name="アカウントの設定">のユーザ定義ヘッダで、
+X-Faceヘッダフィールドに登録すれば相手側に環境があれば表示されることが可能です。
+
+<url url="http://www.dairiki.org/xface/">のサイトで既存の画像ファイルをX-Faceフォーマットに変換することができます。
+</sect1>
+</sect>
+<sect>情報
+<p>
+<sect1>Sylpheed 関連サイト
+<p>
+<sect2>Sylpheed オフィシャルWebサイト
+<p>
+Sylpheed オフィシャルWebサイトの場所は、
+<url url="http://sylpheed.good-day.net/">
+です。
+<sect2>Sylpheed 最新版入手先
+<p>
+<url url="http://sylpheed.good-day.net/sylpheed/">から入手できます。
+
+<sect2>rpmの入手先
+<p>
+<url url="http://y-imai.good-day.net/sylpheed/">
+
+でほとんどのRedHat Package Manager(rpm)を利用したLinux Distributionに対応できると思われる
+rpmがあります。
+それぞれのDistribution用のものが用意されている場合でこれを利用してもほとんど問題ないでしょう。
+多分最新です。
+
+<!-- 各Distribution用としては、
+<url url="http://vinelinux.org/" name="Vine Linux">用にVine Plus、
+<url url="http://www.kondara.org/" name="Kondara MNU/Linux">用にKondara-Zooなどが存在します。
+-->
+</sect2>
+<sect2>nightly build rpm
+<p>
+<url url="http://sylpheed.good-day.net/sylpheed/">より
+cvs repositryから毎日0:00に取り出したものを上記rpmと同条件で
+自動的にビルドしたものを入手できます。
+ただし、cvs repositryから取り出したもので、
+確認もしてないのでちゃんと動作するとは限りません。
+
+</sect2>
+
+<sect2>Debian Packageの入手先
+<p>
+woody以降にはnon-USセクションに入っています。
+</sect2>
+<sect2>FreeBSD portsの入手先
+</sect2>
+</sect1>
+<sect1>メーリングリスト<label id="Sylpheed-ML">
+<p>
+Sylpheed メーリングリストは good-day.net で運用されることになりました。
+
+Sylpheed に関する全般的な話題を扱うメーリングリストです。日本語
+(<url url="sylpheed-jp@good-day.net">) と
+英語 (<url url="sylpheed@good-day.net">) の2種類があります。
+
+以下は <url url="sylpheed-jp@good-day.net"> を例に説明しますが、
+<url url="sylpheed@good-day.net"> の場合は適宜読み替えてください
+(sylpheed-jp → sylpheed, sylpheed-jp-ctl → sylpheed-ctl)。
+
+<sect2>参加方法
+<p>
+
+<verb>
+subscribe あなたの氏名
+</verb>
+と本文に書いたメールを<url url="sylpheed-jp-ctl@good-day.net"> 宛に送信してください。
+名前は半角英数字(ローマ字)が期待されています。
+また全角スペースなどのコードがあるとエラーになります。
+
+その一度めの登録リクエストに対し次のようなフレーズ(この数字はあくまでも例です)
+<verb>
+confirm 84682771 Anne Shirley
+</verb>
+を含む『このメーリングリストに登録をしてもよいか?』という確認を求めるメールを一
+度返します。
+これは「勝手にメーリングリストへ登録されてしまう」等のいたずらへの予防策です。
+
+あなたがこのメーリングリストへの参加確認のメールを受けとったなら、
+<verb>
+confirm パスワード(数字) あなたの名前
+</verb>
+このフレーズを含むメールをもう一度登録用のアドレス
+<url url="sylpheed-jp-ctl@good-day.net">
+へ送信して下さい。そうするとあなたの確認が得られたとみなし、サーバはあなたを登
+録します。
+
+投稿先は <url url="sylpheed-jp@good-day.net"> です。
+
+注意: もし、
+<verb>
+confirm パスワード(数字) あなたの名前
+</verb>
+のメールをなくしてしまったとか、分からなくなってきたので最初からやりなおしたい
+という場合は、「最初から」、つまり
+<verb>
+subscribe Anne Shirley
+</verb>
+を送ることからやり直して下さい。
+
+<sect2>退会方法
+<p>
+<verb>
+unsubscribe
+</verb>
+と本文に書いたメールを <url url="sylpheed-jp-ctl@good-day.net"> 宛に送信してください。
+
+過去ログは<url url="http://www.tmtm.org/sylpheed/ml/">から入手できます。
+</sect1>
+<sect1>Anonymous CVS
+<p>
+Sylpheedの開発にはCVSが利用されています。
+CVSの説明に関しては、
+<url url="http://kahori.com/j-cvsbook/">などのサイトや書籍を参考にしてください。
+
+CVSから最新のSylpheedを入手するには,
+環境変数CVSROOTに:pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheedをセットします。
+(cvsの-dオプションで直接指定する場合は必要ありません)
+<verb>
+csh系:
+ setenv CVSROOT :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed
+sh系(bashなど):
+ export CVSROOT=':pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed'
+</verb>
+
+その後、
+<verb>
+$ cvs login
+CVS password: [enter]
+</verb>
+でログインします。passwordは無しです。
+
+適当なディレクトリに移動し、
+<verb>
+$ cvs -z3 checkout sylpheed
+</verb>
+でカレントディレクトリ以下にsylpheedというソースツリーが作成されます。
+
+最新のソースツリーにアップデートするには、
+<verb>
+$ cvs -z3 update
+</verb>
+を実行してください。
+
+</sect1>
+<sect>GNU Free Documentation License
+<sect1>GNU Free Documentation License
+<label id="gfdl">
+<p>
+Version 1.1, March 2000
+
+<p>
+<verb>
+Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</verb>
+<p>
+<bf>0. PREAMBLE</bf>
+<p>
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+<p>
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+<p>
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+<p>
+
+<bf>1. APPLICABILITY AND DEFINITIONS</bf>
+
+<p>
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The "Document", below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as "you".
+<p>
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+<p>
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+<p>
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+<p>
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+<p>
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not "Transparent" is called "Opaque".
+<p>
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+<p>
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+<p>
+
+<bf>2. VERBATIM COPYING</bf>
+<p>
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+<p>
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+<p>
+
+<bf>3. COPYING IN QUANTITY</bf>
+<p>
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+<p>
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+<p>
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+<p>
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+<p>
+
+<bf>4. MODIFICATIONS</bf>
+<p>
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+<p>
+<itemize>
+<item><bf>A.</bf> Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+<item><bf>B.</bf> List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+<item><bf>C.</bf> State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+<item><bf>D.</bf> Preserve all the copyright notices of the Document.
+<item><bf>E.</bf> Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+<item><bf>F.</bf> Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+<item><bf>G.</bf> Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+<item><bf>H.</bf> Include an unaltered copy of this License.
+<item><bf>I.</bf> Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+
+<item><bf>J.</bf> Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+<item><bf>K.</bf> In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+<item><bf>L.</bf> Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+<item><bf>M.</bf> Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+<item><bf>N.</bf> Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+</itemize>
+<p>
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+<p>
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+<p>
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+<p>
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+<p>
+
+<bf>5. COMBINING DOCUMENTS</bf>
+<p>
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+<p>
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+<p>
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."
+<p>
+
+<bf>6. COLLECTIONS OF DOCUMENTS</bf>
+<p>
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+<p>
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+<p>
+
+
+<bf>7. AGGREGATION WITH INDEPENDENT WORKS</bf>
+<p>
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+<p>
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+<p>
+
+<bf>8. TRANSLATION</bf>
+<p>
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+<p>
+
+<bf>9. TERMINATION</bf>
+<p>
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+<p>
+
+<bf>10. FUTURE REVISIONS OF THIS LICENSE</bf>
+
+<p>
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+<p>
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+<p>
+</sect1>
+
+<sect1>How to use this License for your documents
+<p>
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+<p>
+<verb>
+Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+</verb>
+<p>
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+<p>
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+<p>
+</sect1>
+</sect>
+
+<sect>おわりに
+<sect1>おわりに
+<p>
+このドキュメントを読んで,
+ここはこうしたほうがいいんじゃないか, と言ったような意見がありましたら,
+<htmlurl url="mailto:yoichi@silver-forest.com" name="yoichi@silver-forest.com">
+へお送りいただければ幸いです。
+
+</sect1>
+</sect>
+
+<sect>History
+<sect1>更新履歴
+<p>
+<verb>
+2000-08-06 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.1
+ * 更新履歴を追加
+ * ライセンスをGPL2に変更
+2000-08-06 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.1.2
+ * KMailの注意書きを追加
+ * 句点のポリシーを変更
+
+2000-09-13 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.1.3
+ * メッセージの作成部分を記述
+ * アカウント設定でCc, Bcc, Reply-Toフィールド自動指定の記述
+
+2000-09-27 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.2
+ * Hiro's pageを変更
+ * imlib, facesの注意書きを追加
+ * sylpheed/develディレクトリの存在についての記述を削除
+ * cvsについての記述
+ * タグ->要素
+ * 振り分けの設定
+ * 全般の設定
+ * FAQにgtkrcの設定, ショートカットキーの変更を追加
+ * 機能を追加
+ * 動作確認環境を追加
+ * なし(ローカル)を追加
+ * 外部エディタの使い方を記述
+2000-09-27 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.2.1
+ * 受信時のtypoを修正
+ * ctrl+n,p
+ * &dollar;HOME
+2000-11-09 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.2.2
+ * MLの案内を変更
+ * ChangeLogの形式を変更
+2001-06-26 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.3.0 (for 0.5.x)
+ * 動作環境の記述の撤廃
+ * 機能説明部分の最新機能への追従
+ * rpmでのインストールの記述の変更
+ * Vine LinuxおよびKondara MNU/Linuxでのインストール方法の消去
+ * 新しいウィンドウで開くを追加
+ * "即実行"を標準の記述に採用
+ * アカウントの設定を最新に追従
+ * メッセージの作成を最新に追従
+ * 振り分けを最新に追従
+ * ニュース関連を追従
+ * (全般の設定が追従未完了)
+ * nightly buildに関する記述を追加
+ * サイトアドレスの変更
+2001-07-01 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.3.1
+ * 返信方法の変更に追従
+ * 全般の設定を追従
+ * ショートカットキーの追加(不完全)
+2002-04-04 Yoichi Imai <yoichi@silver-forest.com>
+ * Version 0.4.0
+ * GFDLへ変更
+ * Sylpheed最新版へ追従
+ * セクションの追加と移動と削除
+ * リファレンスの削除
+ * TODO: FreeBSDへのインストール, Gtk+のインストール, テンプレート
+2004-11-26 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+ * Version 0.5.0
+ * Sylpheed最新版の仕様に追従
+2004-12-01 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+ * Version 0.5.1
+ * Sylpheed最新版の仕様に追従
+ * 言い回しの統一
+2004-12-15 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+ * Version 0.5.2
+ * まず最初に何をするか -> 最初に行うこと に変更
+ * abstractを変更
+2004-12-21 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+ * Version 0.5.3
+ * 振り分けの設定の項目を加筆修正
+</verb>
+</sect1>
+</sect>
+</article>
diff --git a/missing b/missing
new file mode 100755
index 00000000..22e101ab
--- /dev/null
+++ b/missing
@@ -0,0 +1,198 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.in; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing - GNU libit 0.0"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`$configure_ac'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`$configure_ac'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`$configure_ac'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 00000000..d2d5f21b
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage" 1>&2
+ exit 0
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+case $dirmode in
+ '')
+ if mkdir -p -- . 2>/dev/null; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ fi
+ ;;
+esac
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 00000000..f5950d93
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,1110 @@
+2004-12-22
+
+ * updated es.po.
+
+2004-12-14
+
+ * updated zh_TW.Big5.po.
+
+2004-12-10
+
+ * updated fr.po.
+
+2004-12-08
+
+ * updated sv.po (thanks to Mattias Ostergren and Roger Lindmark).
+
+2004-12-06
+
+ * updated ru.po.
+
+2004-12-03
+
+ * update tr.po.
+
+2004-11-29
+
+ * update tr.po.
+
+2004-11-22
+
+ * updated fr.po.
+
+2004-11-15
+
+ * updated it.po.
+
+2004-11-04
+
+ * updated uk.po, zh_TW.Big5.po, de.po (thanks to Manfred Usselmann)
+ and it.po.
+
+2004-10-29 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.14.1.
+ * Rules-quot: Upgrade to gettext-0.14.1.
+
+2004-10-25
+
+ * updated de.po.
+
+2004-10-01
+
+ * updated fr.po.
+
+2004-06-17
+
+ * updated fr.po.
+
+2004-06-16
+
+ * updated zh_TW.Big5.po and de.po.
+
+2004-05-28
+
+ * updated es.po and fr.po.
+
+2004-05-21
+
+ * updated de.po.
+
+2004-03-12
+
+ * updated it.po, ru.po, uk.po and zh_TW.Big5.po.
+
+2004-02-29
+
+ * updated fr.po and de.po.
+
+2004-02-24
+
+ * updated it.po.
+
+2004-02-13
+
+ * updated zh_TW.Big5.po, fr.po and es.po.
+
+2004-02-04
+
+ * updated de.po.
+
+2004-01-23
+
+ * updated sk.po.
+
+2004-01-22
+
+ * updated de.po.
+
+2004-01-15
+
+ * updated pl.po.
+ * added bg.po (thanks to Pavel).
+
+2003-12-15
+
+ * updated zh_TW.Big5.po.
+
+2003-12-04
+
+ * updated de.po and es.po.
+
+2003-11-24 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.12.1.
+ * Rules-quot: New file, from gettext-0.12.1.
+ * boldquot.sed: New file, from gettext-0.12.1.
+ * en@boldquot.header: New file, from gettext-0.12.1.
+ * en@quot.header: New file, from gettext-0.12.1.
+ * insert-header.sin: New file, from gettext-0.12.1.
+ * quot.sed: New file, from gettext-0.12.1.
+ * remove-potcdate.sin: New file, from gettext-0.12.1.
+ * cat-id-tbl.c: Remove file.
+ * stamp-cat-id: Remove file.
+
+2003-11-11
+
+ * updated fr.po.
+
+2003-10-28
+
+ * updated it.po.
+
+2003-10-22
+
+ * updated zh_TW.Big5.po.
+
+2003-10-17
+
+ * updated pl.po.
+
+2003-10-02
+
+ * updated zh_TW.Big5.po.
+
+2003-09-17
+
+ * updated ru.po.
+
+2003-09-05
+
+ * updated de.po and it.po.
+
+2003-09-02
+
+ * updated sk.po and es.po.
+
+2003-09-01
+
+ * updated sk.po.
+
+2003-08-26
+
+ * updated pl.po.
+
+2003-08-21
+
+ * updated sk.po and fr.po.
+
+2003-08-06
+
+ * updated de.po.
+
+2003-07-30
+
+ * updated ru.po.
+
+2003-07-29
+
+ * updated it.po, hu.po, zh_TW.Big5.po and da.po.
+
+2003-07-22
+
+ * updated pl.po.
+
+2003-07-18
+
+ * updated fr.po.
+
+2003-07-15
+
+ * updated sk.po and pl.po.
+
+2003-07-10
+
+ * updated zh_TW.Big5.po.
+
+2003-07-07
+
+ * updated es.po.
+
+2003-07-04
+
+ * updated pl.po.
+
+2003-06-26
+
+ * updated pl.po.
+
+2003-06-18
+
+ * updated es.po.
+
+2003-06-11
+
+ * updated pl.po.
+
+2003-06-10
+
+ * updated cs.po.
+
+2003-06-03
+
+ * updated zh_TW.Big5.po and it.po.
+
+2003-05-27
+
+ * updated sk.po and pl.po.
+
+2003-05-22
+
+ * updated pl.po.
+
+2003-05-21
+
+ * updated de.po.
+
+2003-05-19
+
+ * updated hu.po, zh_TW.Big5.po and it.po.
+
+2003-05-16
+
+ * updated es.po.
+
+2003-05-15
+
+ * updated gl.po.
+
+2003-05-13
+
+ * updated sk.po.
+
+2003-05-12
+
+ * updated pl.po.
+
+2003-05-01
+
+ * updated pl.po.
+
+2003-04-16
+
+ * updated pl.po.
+
+2003-04-14
+
+ * updated pl.po, sk.po and fr.po.
+
+2003-04-01
+
+ * updated de.po and pl.po.
+
+2003-03-27
+
+ * updated sk.po.
+
+2003-03-14
+
+ * updated zh_TW.Big5.po, it.po and pl.po.
+ * added sk.po (thanks to Andrej Kacian).
+
+2003-03-07
+
+ * updated es.po and fr.po.
+
+2003-03-05
+
+ * added gl.po (thanks to Jorge Rivas).
+ * updated ru.po.
+
+2003-03-04
+
+ * updated da.po, pl.po and de.po.
+
+2003-02-28
+
+ * updated fr.po.
+
+2003-02-20
+
+ * updated nl.po.
+
+2003-02-13
+
+ * updated fr.po and pl.po.
+
+2003-02-04
+
+ * updated it.po, zh_TW.Big5.po and tr.po.
+
+2003-01-30
+
+ * updated fr.po.
+
+2003-01-29
+
+ * updated ru.po, fr.po and sl.po.
+
+2003-01-17
+
+ * updated pl.po and es.po.
+
+2003-01-16
+
+ * updated fr.po.
+
+2003-01-14
+
+ * updated da.po, pl.po, pt_BR.po and de.po.
+
+2002-12-27
+
+ * updated hu.po.
+
+2002-12-26
+
+ * updated zh_TW.Big5.po and pl.po.
+
+2002-12-25
+
+ * updated zh_TW.Big5.po, fr.po, nl.po and cs.po.
+
+2002-12-20
+
+ * updated es.po and ru.po.
+
+2002-12-19
+
+ * updated fr.po.
+
+2002-12-09
+
+ * added sr.po (thanks to garret@garrets.tk).
+
+2002-12-02
+
+ * updated ko.po.
+
+2002-11-29
+
+ * updated de.po.
+
+2002-11-27
+
+ * updated it.po and pl.po.
+
+2002-11-26
+
+ * updated da.po.
+
+2002-11-22
+
+ * updated pl.po.
+
+2002-11-18
+
+ * updated zh_TW.Big5.po and es.po.
+
+2002-11-15
+
+ * updated nl.po.
+
+2002-11-06
+
+ * updated da.po and es.po.
+
+2002-10-25
+
+ * updated zh_TW.Big5.po and da.po.
+
+2002-10-09
+
+ * updated pl.po.
+
+2002-10-07
+
+ * updated it.po and pl.po.
+
+2002-10-03
+
+ * updated pl.po.
+
+2002-10-02
+
+ * fixed a typo in es.po.
+ * replaced fr.po (the encoding of the previous one was UTF-8).
+ * updated de.po.
+ * updated pl.po and et.po.
+ * fixed typos of format strings in da.po, el.po, et.po, fr.po,
+ hr.po, it.po, ro.po, sl.po, sv.po, zh_CN.po and zh_TW.Big5.po
+ (thanks to Sergey Vlasov for reporting this).
+ * Makefile.in.in: added --check option to msgfmt command
+ (thanks to Ricardo Mones Lastra).
+
+2002-10-01
+
+ * updated es.po.
+
+2002-09-30
+
+ * updated fr.po, ru.po and et.po.
+
+2002-09-27
+
+ * updated pl.po.
+
+2002-09-24
+
+ * updated pl.po.
+
+2002-09-20
+
+ * updated cs.po.
+
+2002-09-19
+
+ * updated zh_TW.Big5.po, it.po and de.po.
+
+2002-09-15
+
+ * updated es.po.
+
+2002-09-09
+
+ * updated es.po and pl.po.
+
+2002-09-03
+
+ * updated it.po.
+
+2002-09-02
+
+ * updated pl.po and zh_CN.po.
+
+2002-08-30
+
+ * updated pl.po and ko.po (thanks to Nam SungHyun).
+
+2002-08-29
+
+ * updated zh_TW.Big5.po.
+
+2002-08-28
+
+ * updated tr.po.
+
+2002-08-26
+
+ * updated es.po and de.po.
+
+2002-08-22
+
+ * updated fr.po and pl.po.
+
+2002-08-21
+
+ * updated es.po and sv.po.
+
+2002-08-09
+
+ * updated de.po and pl.po.
+
+2002-08-06
+
+ * updated da.po.
+
+2002-08-02
+
+ * updated es.po.
+
+2002-07-31
+
+ * updated pl.po.
+
+2002-07-19
+
+ * updated zh_TW.Big5.po.
+
+2002-07-17
+
+ * updated pl.po and it.po.
+
+2002-07-16
+
+ * updated pt_BR.po.
+
+2002-07-15
+
+ * updated fr.po.
+
+2002-07-12
+
+ * updated de.po.
+ * POTFILES.in: removed src/rfc822.c.
+
+2002-07-10
+
+ * updated da.po.
+
+2002-07-08
+
+ * updated pl.po.
+
+2002-07-01
+
+ * updated cs.po (thanks to Radek Vybiral), da.po, de.po and pl.po.
+
+2002-06-27
+
+ * updated da.po.
+
+2002-06-21
+
+ * updated pl.po.
+
+2002-06-20
+
+ * updated sv.po.
+
+2002-06-19
+
+ * updated sv.po.
+
+2002-06-18
+
+ * updated de.po and it.po.
+
+2002-06-17
+
+ * fixed a mistake in zh_TW.Big5.po that caused a crash.
+
+2002-06-13
+
+ * updated pl.po and zh_TW.Big5.po.
+
+2002-06-09
+
+ * updated es.po and ru.po.
+
+2002-06-07
+
+ * updated pl.po and de.po.
+
+2002-06-06
+
+ * updated fr.po, da.po and pt_BR.po.
+
+2002-06-05
+
+ * updated pl.po.
+
+2002-06-04
+
+ * updated de.po and nl.po.
+
+2002-05-31
+
+ * updated pl.po.
+
+2002-05-23
+
+ * updated da.po.
+
+2002-05-22
+
+ * updated pl.po.
+
+2002-05-20
+
+ * updated fr.po.
+
+2002-05-20
+
+ * updated pl.po, da.po, and de.po.
+
+2002-05-17
+
+ * updated pl.po.
+
+2002-05-15
+
+ * added sl.po (thank to Jernej Kovacic).
+
+2002-05-14
+
+ * updated pt_BR.po, zh_CN.po, and zh_TW.Big5.po.
+
+2002-05-12
+
+ * updated pl.po.
+
+2002-05-10
+
+ * updated da.po, pl.po and de.po.
+
+2002-05-09
+
+ * updated pl.po.
+
+2002-04-23
+
+ * updated it.po and zh_TW.Big5.po.
+
+2002-04-22
+
+ * updated pl.po.
+
+2002-04-21
+
+ * updated fr.po.
+
+2002-04-18
+
+ * updated es.po.
+
+2002-04-16
+
+ * updated de.po and da.po.
+
+2002-04-15
+
+ * updated de.po and pl.po.
+
+2002-04-11
+
+ * updated pl.po, et.po and es.po.
+
+2002-04-09
+
+ * updated pl.po.
+
+2002-04-08
+
+ * updated pl.po.
+
+2002-03-28
+
+ * updated pl.po.
+
+2002-03-26
+
+ * updated pl.po.
+
+2002-03-25
+
+ * updated da.po and de.po.
+
+2002-03-23
+
+ * updated pl.po.
+
+2002-03-21
+
+ * updated pl.po.
+
+2002-03-20
+
+ * updated pl.po.
+
+2002-03-19
+
+ * updated zh_CN.po.
+
+2002-03-18
+
+ * updated zh_CN.po.
+
+2002-03-15
+
+ * updated zh_CN.po.
+
+2002-03-14
+
+ * updated it.po and de.po.
+
+2002-03-13
+
+ * updated zh_TW.Big5.po.
+
+2002-03-11
+
+ * updated pl.po.
+
+2002-03-09
+
+ * updated da.po.
+
+2002-03-08
+
+ * updated pt_BR.po.
+
+2002-03-07
+
+ * updated pl.po and zh_TW.Big5.po.
+
+2002-03-05
+
+ * updated de.po and it.po.
+
+2002-03-03
+
+ * updated da.po.
+
+2002-03-02
+
+ * updated es.po, ru.po and fr.po.
+
+2002-03-01
+
+ * updated pl.po.
+
+2002-02-28
+
+ * updated pl.po.
+
+2002-02-27
+
+ * updated de.po, and pl.po.
+
+2002-02-25
+
+ * added ro.po (thanks to Radu).
+
+2002-02-22
+
+ * updated zh_CN.po, and pl.po.
+
+2002-02-21
+
+ * updated nl.po, and zh_TW.Big5.po.
+
+2002-02-19
+
+ * updated da.po.
+
+2002-02-18
+
+ * updated de.po, and pt_BR.po.
+
+2002-02-17
+
+ * updated it.po, pl.po, and zh_CN.po.
+
+2002-02-12
+
+ * updated es.po.
+
+2002-02-11
+
+ * updated pt_BR.po.
+
+2002-02-08
+
+ * updated fr.po, pl.po, ru.po, and zh_CN.po.
+
+2002-02-07
+
+ * updated pl.po.
+
+2002-02-06
+
+ * updated zh_CN.po, pl.po.
+
+2002-02-05
+
+ * updated da.po, pl.po.
+
+2002-02-03
+
+ * updated pl.po.
+
+2002-01-31
+
+ * updated zh_CN.po, pl.po.
+
+2002-01-29
+
+ * updated de.po.
+
+2002-01-24
+
+ * updated pl.po.
+
+2002-01-23
+
+ * updated pl.po.
+
+2002-01-22
+
+ * updated zh_CN.po.
+
+2002-01-16
+
+ * fixed a typo in ja.po.
+
+2002-01-14
+
+ * updated es.po, zh_CN.po, it.po, and de.po.
+
+2002-01-11
+
+ * updated fr.po, pt_BR.po, and zh_CN.po.
+
+2002-01-08
+
+ * updated zh_TW.Big5.po.
+
+2002-01-07
+
+ * updated zh_CN.GB2312.po and renamed it to zh_CN.po (thanks to
+ Wang Jian).
+
+2002-01-02
+
+ * updated pl.po, de.po, nl.po.
+
+2001-12-31
+
+ * updated pl.po.
+
+2001-12-30
+
+ * added da.po (thanks to Andreas Hinz).
+
+2001-12-25
+
+ * added tr.po (thanks to Grkem etin).
+
+2001-12-13
+
+ * added hu.po (thanks to Krisztian Szekely).
+ * updated hr.po, ru.po.
+
+2001-12-11
+
+ * updated pt_BR.po, fr.po, pl.po, es.po, and zh_TW.Big5.po
+
+2001-12-10
+
+ * updated hr.po.
+
+2001-12-08
+
+ * updated de.po and nl.po.
+
+2001-11-25
+
+ * updated de.po, pl.po.
+
+2001-11-19
+
+ * updated es.po.
+
+2001-11-14
+
+ * updated it.po.
+
+2001-11-12
+
+ * updated pl.po and pt_BR.po (thanks to Gustavo Noronha Silva).
+
+2001-11-07
+
+ * updated fr.po.
+
+2001-11-07
+
+ * updated zh_TW.Big5.po and ru.po.
+
+2001-11-05
+
+ * updated de.po.
+
+2001-11-01
+
+ * added et.po (thanks to Peeter Vois).
+
+2001-10-25
+
+ * updated pl.po.
+
+2001-10-23
+
+ * updated de.po.
+
+2001-10-21
+
+ * udpated fr.po (thanks to Melvin Hadasht), es.po, hr.po, pl.po,
+ ru.po, it.po, nl.po, zh_TW.Big5.po.
+
+2001-10-18
+
+ * updated hr.po.
+
+2001-10-09
+
+ * updated zh_TW.Big5.po.
+
+2001-10-08
+
+ * added sv.po (thanks to Joakim Andreasson).
+ * updated fr.po (thanks to Alain Vagner), hr.po, zh_TW.Big5.po,
+ it.po, pt_BR.po (thanks to Andre Luis Lopes), el.po,
+ zh_CN.GB2312.po (thanks to Zhangtao), pl.po, and de.po.
+
+2001-09-17
+
+ * updated fr.po (thanks to Melvin Hadasht).
+
+2001-09-16
+
+ * updated es.po, ru.po, el.po, it.po, hr.po, de.po, zh_TW.Big5.po,
+ and fr.po.
+
+2001-09-02
+
+ * added hr.po (thanks to Ante Karamati).
+ * updated es.po, de.po, fr.po (thanks to Lol Zimmerli), pl.po and
+ zh_TW.Big5.po.
+
+2001-08-27 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.39.
+
+2001-08-18
+
+ * updated zh_TW.Big5.po, it.po, and de.po.
+
+2001-08-14
+
+ * updated es.po.
+
+2001-08-07
+
+ * updated zh_TW.Big5.po.
+
+2001-08-06
+
+ * updated pl.po, it.po, ru.po, and fr.po.
+
+2001-08-01
+
+ * updated de.po.
+
+2001-07-30
+
+ * updated ru.po.
+
+2001-07-28
+
+ * updated nl.po.
+
+2001-07-25
+
+ * updated es.po.
+
+2001-07-22
+
+ * added pl.po (thanks to Przemyslaw Sulek).
+ * updated it.po.
+
+2001-07-15
+
+ * updated pt_BR.po (thanks to Andre Luis Lopes).
+
+2001-07-06
+
+ * updated it.po and es.po.
+
+2001-07-03
+
+ * updated de.po.
+
+2001-07-02
+
+ * modified zh_TW.Big5.po (removed backslash escaping) so that the
+ newer gettext can process it.
+
+2001-07-02 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.38.
+
+2001-07-01
+
+ * updated nl.po.
+
+2001-06-25
+
+ * updated es.po, it.po and nl.po.
+
+2001-06-21
+
+ * updated it.po and el.po.
+
+2001-06-20
+
+ * updated nl.po and zh_TW.Big5.po.
+
+2001-06-16
+
+ * updated de.po, el.po, nl.po, ru.po.
+
+2001-05-01
+
+ * updated ru.po, it.po, de.po.
+
+2001-04-20
+
+ * updated fr.po (thanks to P'tit Lu).
+
+2001-04-19
+
+ * updated es.po (thanks to Ricardo Mones Lastra).
+
+2001-04-17
+
+ * updated de.po and zh_TW.Big5.po (thanks to Martin Schaaf and
+ Franklin).
+
+2001-04-01
+
+ * added nl.po (thanks to Vincent van Adrighem).
+
+2001-03-29
+
+ * added ru.po (thanks to Sergey Vlasov and Aleksey Novodvorsky).
+
+2001-03-25
+
+ * added ko.po (thanks to ChiDeok Hwang).
+
+2001-03-20
+
+ * added it.po (thanks to Danilo Bodei).
+
+2001-03-12
+
+ * updated de.po and zh_TW.Big5.po.
+
+2001-02-03
+
+ * updated fr.po (thanks to Sbastien Rodriguez).
+
+2001-01-30
+
+ * added el.po (thanks to Michalis Kabrianis).
+
+2001-01-13
+
+ * added zh_TW.Big5.po (thanks to Franklin).
+
+2000-12-23
+
+ * updated zh_CN.GB2312.po.
+
+2000-12-17
+
+ * updated de.po, es.po, and pt_BR.po.
+
+2000-12-07
+
+ * added pt_BR.po (thanks to Andr Casteliano).
+
+2000-11-29
+
+ * added cs.po (thanks to Jan Mura).
+
+2000-11-18
+
+ * added zh_CN.GB2312.po (thanks to Xiangxin Luo).
+
+2000-10-21
+
+ * added de.po (thanks to Martin Schaaf).
+
+2000-10-11
+
+ * added es.po (thanks to Ricardo Mones Lastra).
+
+2000-08-28
+
+ * fr.po: added appropriate copyright notice.
+
+2000-08-27
+
+ * added fr.po (thanks to Paul Rolland for translation).
+
+2000-07-30
+
+ * added this file for `make dist'.
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 00000000..53efc5e1
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,366 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.14
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @echo "touch stamp-po"
+ @echo timestamp > stamp-poT
+ @mv stamp-poT stamp-po
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkinstalldirs) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkinstalldirs) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir); \
+ else \
+ cp -p $(srcdir)/$$file $(distdir); \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+ $(SHELL) ./config.status
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 00000000..524d2455
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Hiroyuki Yamamoto
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = hiro-y@kcn.ne.jp
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 00000000..605fcb22
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,89 @@
+src/about.c
+src/account.c
+src/action.c
+src/addrbook.c
+src/addrcache.c
+src/addressadd.c
+src/addressbook.c
+src/addrindex.c
+src/addritem.c
+src/alertpanel.c
+src/base64.c
+src/codeconv.c
+src/colorlabel.c
+src/compose.c
+src/editaddress.c
+src/editbook.c
+src/editgroup.c
+src/editjpilot.c
+src/editldap.c
+src/editldap_basedn.c
+src/editvcard.c
+src/export.c
+src/filesel.c
+src/filter.c
+src/folder.c
+src/foldersel.c
+src/folderview.c
+src/grouplistdialog.c
+src/gtkutils.c
+src/headerview.c
+src/imageview.c
+src/imap.c
+src/import.c
+src/importldif.c
+src/inc.c
+src/inputdialog.c
+src/jpilot.c
+src/logwindow.c
+src/main.c
+src/mainwindow.c
+src/manage_window.c
+src/mbox.c
+src/menu.c
+src/message_search.c
+src/messageview.c
+src/mgutils.c
+src/mh.c
+src/mimeview.c
+src/news.c
+src/nntp.c
+src/passphrase.c
+src/pop.c
+src/prefs.c
+src/prefs_account.c
+src/prefs_actions.c
+src/prefs_common.c
+src/prefs_customheader.c
+src/prefs_display_header.c
+src/prefs_filter.c
+src/prefs_filter_edit.c
+src/prefs_folder_item.c
+src/prefs_summary_column.c
+src/prefs_template.c
+src/procheader.c
+src/procmime.c
+src/procmsg.c
+src/progressdialog.c
+src/recv.c
+src/rfc2015.c
+src/select-keys.c
+src/send_message.c
+src/session.c
+src/setup.c
+src/sigstatus.c
+src/smtp.c
+src/socket.c
+src/sourcewindow.c
+src/ssl.c
+src/statusbar.c
+src/summary_search.c
+src/summaryview.c
+src/syldap.c
+src/template.c
+src/textview.c
+src/unmime.c
+src/utils.c
+src/uuencode.c
+src/vcard.c
+src/xml.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 00000000..9c2a995e
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 00000000..dd6d89f5
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,6252 @@
+# Sylpheed bulgarian translation
+# Copyright (C) 2003 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Sylpheed package.
+# Pavel Pyuter <pavel@unix-bg.org>, 2003.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sylpheed 0.9.8\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-01-09 02:06+0200\n"
+"Last-Translator: Pavel Pyuter <pavel@unix-bg.org>\n"
+"Language-Team: Bulgarian <bg@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=windows-1251\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "歴邇骰"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME 艢閠艱轢 赭韋 轢 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"呀艾 關釿鞐赭 驍釶鈔纃 骼鴦辮; 跪聽鱚 籥 鞐苡韲髓鞐矗鱚 /蓚 跪粫蔬蒡瑩 關 齣謗礦鰰 轢 GNU General Public License 袱褞 闢瘠蒻黷琿 銜 Free Software Foundation; 矼韵 2 蓚 闔-邇矗.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"呀艾 關釿鞐赭 驟 鞐苡韲髓鞐矗 轢粤聹瑩, 癩粤 闔諷芻, 邇 租 弊並籍 沈 胆仞蓉庇 農 厠太. 楳闔芻珸鱚 驟 GNU General Public License 艢 闔矼 闔粽釶邇髓.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr "第 瘉 鴃痰琺 籥 髓 闔謫蓚 褌闊 轢 GNU General Public License 艢繖邇 關釿鞐赭鰰; 驪齬珸, 辣 髓, 釶齏纈 驟 褸 Free Software Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "諒"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "怛鱚辣 轢 褌逕蓊齔瑶 艢 碌繩 琲瑰迺...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "沃跂鞳 纈蒻纈: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"緋 銜碆鞳辷 關鈑鉋 艢 髫髓珥辣.\n"
+"野 艢鰲鉋纈 碌蔟褂 關鈑鉋 艢 髫髓珥辣 關繖 鞳籥襁 轢 琲瑰迺蓿."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "歴矗辣 轢 關鈑鉋纐 艢 鞳籥襁 轢 琲瑰迺...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 艢 鞳籥襁 轢 琲瑰迺...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "倥籥襁 轢 琲瑰迺蓿"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"楳 邇礦 髫釶纃 癩粤 關鈞辮矗邇 鴈艾 鞳. 歴跂鴉纈 褥鱶蜉蓿\n"
+" 褌謗迥 `G' 艢 鞐苣纔珥琿 轢 蒟鱚站辣 轢 髫釶纃鰰 銜 `Get All'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "緋"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "韲鴈褌"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "劒鞨"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "廷痼辣"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "倥籥褞蒡琿"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " 泌鴃萵琿"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "沃粮謫"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "沃竡鞳"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 泌瘉鞐辣 袱鴈 琲瑰迺 闔 闔粽瑯瘉鞐辣"
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "楳鰲瑁辣"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "泌鴃萵琿 轢 琲瑰迺"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "薙諤纈 謌 籥 蒟鴃蒹鱚 鴈艾 琲瑰迺?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "釣"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+羅"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "羅 跪聽 籥 驟 轢跂韆 珸諤 髫 髫釶纃蒹鴈 %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "羅 跪聽 籥 驟 轢跂韆 瑜 銜 髫釶纃蒹鴈."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "怙髓 銜 multipart 髫釶纃蒹 辣 跪聽 籥 驟 轢跂韆"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"泌瘰琿銜 粤蜻鰲蒹 辣 跪聽 籥 驟 蒟闔諛矗 關鈑鉋纐 艢 髫髓珥辣\n"
+"艢銜 髫糲鞴 %%f, %%F or %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"菩赭辟瑩 辣 跪聳 籥 驟 髓瑁鱶鞐. 劒舮珥琿纈 轢 pipe 驟 關鈞琺.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"俥芒謗辣辷纈(fork) 艢 蒟陏謐纃蒹 轢 褌赭辟瑩 辣 齣:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 泌陏謐矗: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 韆裨: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "濯鈔/泌鈔 轢 粤蜻鰲蒹"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " 泌關璞琿"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "鞳褓瑩矗辣"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"諾矼粤鱚 瑁笂跂迺 艢 驪繖邇鴈 粤蜻鰲蒹:\n"
+"(`%%h' 癩粤 艢跂辣 瑁笂跂迺)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "刳韆 闔鴃縺蓿繼驫 瑁笂跂迺 轢 粤蜻鰲蒹鴈"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"諾矼粤鱚 瑁笂跂迺 艢 驪繖邇鴈 粤蜻鰲蒹:\n"
+"(`%%u' 癩粤 艢跂辣 瑁笂跂迺)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "銜鞳瘉鱚鞫褂 瑁笂跂迺 轢 粤蜻鰲蒹鴈"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "廷痼辣 轢 絶鞳騾 褸 簿蓊瑩"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "絶鞳"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "楳痳諷肛"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "泌痳鞳鱚 閠闃 銜 珞鞳骰瑩 褄蓊"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "歴袱"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_壜蜍"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_壜蜍/落矗 _簿蓊"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_壜蜍/落矗 _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_壜蜍/落 _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_壜蜍/落 _劒鞨"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_壜蜍/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_壜蜍/_倥籥褞蒡琿"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_壜蜍/_泌鴃萵琿"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_珸/_楳閠艪琿"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_壜蜍/_楳鰲瑁辣"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_絶鞳"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_絶鞳/落 _絶鞳"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_絶鞳/落矗 _註齒"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_絶鞳/落矗 _瑙袱"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_絶鞳/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_絶鞳/_倥籥褞蒡琿"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_絶鞳/_泌鴃萵琿"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_罷髓頌跂迺"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_罷髓頌跂迺/瀧瑜辣 轢 _LDIF 珸"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_鉤銷"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_鉤銷/_歴邇骰"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/落 _絶鞳"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/落矗 _註齒"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/落矗 _瑙袱"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_倥籥褞蒡琿"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_泌鴃萵琿"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-Mail 珞鞳"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "絶鞳骰 褄蓊"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "緋:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "泌鴃萵琿"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "剌鞐礪"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "廷:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "泌鴃萵琿 轢 珞鞳(蓿)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 珞鞳(蓿)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "羅"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"薙諤纈 謌 籥 蒟鴃蒹鱚 閠闃瑩 碌蔟褂 珞鞳驤 `%s' ? \n"
+"占 蒟鴃萵瑩 騾跪 閠闃瑩, 珞鞳驤鱚 癩籥 關繻繿鱚辷 韲粫鱚鞫袱鰰 閠闃."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "凰跪 閠闃"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "瑙袱 絶鞳驤"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "落 闔鴃縺蓿繼, 辣 跪聳 籥 ce 艢閠艾 蓁粤襃辷 珸."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "落 闔鴃縺蓿繼, 辣 跪聳 籥 驟 艢閠艾 珸諤 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "剪瑁瑩 珞鞳骰 褄蓊 褌轤辮鱶鞐轢 齣閻邇"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"剪瑁瑩 珞鞳骰 褄蓊 褌轤辮鱶鞐轢,\n"
+"辣 跪聽 籥 驟 艢閠艾 邇礦 蓁粤襃纃 珸"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊,\n"
+"髫舮珞纃 騾 邇礦 關瑯辷 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊\n"
+" 髫舮珥琿 轢 邇礦 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊\n"
+" 髫舮珥琿 轢 邇礦 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "註纔袱 關 褌轤辮鱶鞐辣 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "菩轤辮鱶鞐辣 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "註纔袱 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "羅 跪聽 籥 驟 關鋏纈 珞鞳骰 蓁粤襃"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "剪瑁瑩 珞鞳骰 褄蓊 褌轤辮鱶鞐轢, 辣 跪聽 籥 驟 艢閠艾 邇礦 蓁粤襃纃 珸"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊, 髫舮珞纃 騾 邇礦 關瑯辷 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊, 辣齣 髫舮珥琿 轢 邇礦 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "羅齣 褌轤辮鱶鞐辣鴈 轢 珞鞳骰瑩 褄蓊 髫舮珥琿 轢 邇礦 珸謗矼 轢 珞鞳骰瑩 褄蓊."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "註纔袱 關 褌轤辮鱶鞐辣 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "菩轤辮鱶鞐辣 轢 珞鞳骰瑩 褄蓊"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "罷鱚頸繪"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "絶鞳骰 褄蓊"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "毎"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "EMail 絶鞳"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "註齒"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "瑙袱"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP 髫鞨"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "黶謌纃 珞鞳"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "毎纃 珞鞳"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "楳痳諷肛"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "鞳糂關繙粤辷"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "註纔袱"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "劒舮珥琿 轢 琺瑁跂 粫琺釿...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "鉅瑯矗辣 轢 鴈矗 髫釶纃蒹 驪繖矗 陏"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "齢琿聽"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "怛鞨纃"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "們芬"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "羅痳骰 驤"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "刪"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "賠諷"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "圃"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "来褌"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_廷痼辣"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_鞳赭矗辣"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_占驟骼瑁..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_珸/_楳閠艪琿"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_劒釶纃蒹/泌關璞琿 _闔-褸骰"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_劒釶纃蒹/_楳閠艪琿 閠闃瑩 辮邇礦"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_劒釶纃蒹/楳閠艪琿 _關鈔諞珥琿 轢 鞳籥襁"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_壜蜍/_韆褓繽矗辣 轢 珸"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_壜蜍/_瀧瑜辣 轢 珸"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_壜蜍/瀧瑜辣 轢 _驤竝瑩齔"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_倥籥褞蒡琿/_歴轢"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_倥籥褞蒡琿/_鈞鰰辣"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_倥籥褞蒡琿/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_倥籥褞蒡琿/_歴艪琿"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_倥籥褞蒡琿/_菩闊鞐辣"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_倥籥褞蒡琿/_滝裄琿"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_倥籥褞蒡琿/滝裄琿 袱鴈 _蓿瑩"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_倥籥褞蒡琿/_泌瘉鞐辣 轢 碌蔟褂"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 轢 芻琲 轢艢"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 轢 芻琲 轢關繖"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 轢 糂赭 轢艢"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 轢 糂赭 轢關繖"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 粮 轢琺銜 轢 鞳"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 粮 褓 轢 鞳"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 粮 關繖蔕纃 鞳"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/鞳跂髓矗辣 粮 驪繖矗 鞳"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 轢 芻琲 轢艢"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 轢 芻琲 轢關繖"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 轢 糂赭 轢艢"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 轢 糂赭 轢關繖"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 轢 鞳"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_倥籥褞蒡琿/_沃關繖轢/泌鴃萵琿 粮 褓 轢 鞳"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_倥籥褞蒡琿/_鞳轢辣 轢 鱚褥 珀艢"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_倥籥褞蒡琿/_鞳轢辣 轢 碌蔟褂 糲諠 鞳粮矼"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_倥籥褞蒡琿/_菩闊鞐辣"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_泌站繖"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_泌站繖/_廷"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_泌站繖/_剔"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_泌站繖/_托"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_泌站繖/_歴竡碆 粮"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_泌站繖/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_泌站繖/_廷陏謐蓿繼纃 粮"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_泌站繖/_毎辷"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_泌站繖/_韆鴦韋"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_罷髓頌跂迺/_絶鞳骰 褄蓊"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_罷髓頌跂迺/_憊瘠鉈"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_罷髓頌跂迺/_偵蜻鰲"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_罷髓頌跂迺/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_倥籥褞蒡琿/倥籥褞蒡琿 _碾逖纃 鞳籥褞鉋"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_罷髓頌跂迺/_偵蜻鰲"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_劒釶纃蒹/_俸蓖鱶鞐辣"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 珸證 辣 髫繿鰲黷\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "羅 跪聽 籥 驟 轢跂韆 鱚襃鴈矗鰰 瑜\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "註纔袱 鉋赭鰰 轢 蓿瑩."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "註纔袱 reply/forward 鉋赭鰰 轢 髫釶纃蒹鴈."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "壜蜍 %s 辣 髫繿鰲黷\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "羅 跪聽 籥 驟 轢跂韆 竡諷跏轢鰰 轢 %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "壜蜍 %s 關瑯纃."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "羅 跪聽 籥 驟 關鋏纈 %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "劒釶纃蒹: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "羅 跪聽 籥 驟 轢跂韆 瑜 銜 multipart 髫釶纃蒹."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [倥籥褞蒡琿]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 劒髓珥辣 轢 髫釶纃蒹%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "劒髓珥辣 轢 髫釶纃蒹%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "羅 鼕瑯琿 闔謫瑩繼"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "泌關璞琿"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "鞐芻 鱚赭. 泌關璞琿 鰰袱?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "辣 跪聽 籥 驟 闔謫 髀蔡 闔謫瑩繼."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"羅 鼕瑯琿 琲瑰迺 艢 蒟關璞琿 轢 闔瑩.\n"
+"野 蒟痳鞳鱚 闔纃驫 琲瑰迺 關繖 蒟關璞琿."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "諾芻蒻轢 竦纔袱 關 關璞琿 轢 髫釶纃蒹鴈 粮 %s."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "羅 跪聽 籥 驟 艢閠艾 髫釶纃蒹鴈 蒟鈔瑩 褥鱶."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "羅 跪聳 籥 驟 轢跂韆 癈鴈 瑜鉚蓙鞐 蒟瘰琿 `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "辣 跪聽 籥 驟 骭纃 礦籥 轢 珸諤\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"羅 跪聽 籥 驟 關緕瘰瑯黷 驤赳鉉邇鴈 褌粫鞐辣 轢 髫釶纃蒹鴈 銜\n"
+"%s 褸 %s.\n"
+"泌關璞琿 鰰袱?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "羅 跪聽 籥 驟 艢闊瑩 繖韆鱚\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "辣 跪聽 籥 驟 蒟鴃蒹 髓瑁銜 髫釶纃蒹\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "轢鞳聹琿 轢 髫釶纃蒹鴈 轢 鈿璋袱鰰...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "辣 跪聽 籥 驟 轢跂韆 閠闃瑩 艢 鈿璋袱\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "辣 跪聽 籥 驟 轢鞳粫 髫釶纃蒹鴈 轢 鈿璋袱鰰\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "竇辣韆鞐邇 Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 艢 髫髓珥辣...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME 鱶"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "俥芟辮"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "歴:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "泌關璞琿 轢 髫釶纃蒹"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "泌關璞琿 闔-褸骰"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "鉐鰰辣 閠闃瑩 艢 鈿璋袱 蒟關璞琿 闔-褸骰"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "怛齏鈞"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "楳閠艪琿 閠闃瑩 辮邇礦"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "滝裄琿"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "滝裄琿 轢 珸"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "韆褓繽矗辣"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "韆褓繽矗辣 轢 珸"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "刪竝瑩齔"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "滝裄琿 轢 驤竝瑩齔"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "倥籥褞鉋"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "倥籥襁 碾逖纃 鞳籥褞鉋"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "凾萵琿纃 轢 鞳粮矼鱚"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "凾萵琿 轢 碌蔟褂 糲諠 鞳粮矼"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "羅矗謌粤 MIME 鱶"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "壜蜍 辣 髫繿鰲黷 蓚 關瑯纃"
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "占驟骼瑁"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "菩粫鞐辣"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr ""
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "緋 轢 珸"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "菩赭辟辷 鞳 艢 碾逖纃 鞳籥褞鉋 辣矗謌粤: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"諾逖辷 鞳籥褞鉋 碌 銷 鞐瘤鱶.\n"
+"薙諤纈 謌 關蓁黻蓿繼邇 關繩鞐矗辣 轢 關鉚繿?\n"
+"process group id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "鞳褓瑩纃 process group id: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "宅繻纃纃 珸: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "劒髓珥辣: 碯鈔 銜 轢瘠籥矗 關鉚繿\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "羅 跪聽 籥 驟 髓瑁鱶鞐 碾逖纃 鞳籥褞鉋\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "羅 跪聽 籥 驟 艢闊 碾 珸\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "怛鱚辣 轢 pipe 關鈞琺纃\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "羅 跪聽 籥 驟 轢鞳粫 髫釶纃蒹鴈 轢 鈿璋袱鰰."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "泌瘤 轢 珸"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "泌鉐鰰辣 轢 髫釶纃蒹"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "劒釶纃蒹鴈 痳 關鉤纃纃. 泌鉐鰰辣?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "泌鉐鰰辣"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "關 怛齏鈞"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "薙諤纈 謌 籥 關蓚鈕蓿 珀謗逧 `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "韆諤窶辣 轢 珀謗"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "楳跂辣"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "倥籥褞蒡琿 轢 珞鞳"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "廷痼辣 轢 落碆 毎"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "倥籥褞蒡琿 粤鰰蜍 艢 謌"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "咒痰 籥 癩粤 闔陏謐纃 E-Mail 珞鞳."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "緋 剪鉗邇髓 鴃痰 籥 癩籥 闔陏謐纃."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "倥籥褞蒡琿 轢 籥迯 艢 謌"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "投鞐迯 緋"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "壜跏謌"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "緋"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "褌"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-Mail 珞鞳"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "驟矮鉈蓐"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "悶髓纃 轢竡鞳"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "悶髓纃 轢粮謫"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "韲跂辣"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "泌蔡鰲琿"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "剪鉗邇髓"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "暦邇硴 籥迯"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "栓韆癈鱶 轢 闔鴃縺蓿繼"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "壜蜍 蒟站繙籥 轢鞳."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "壜蜍 辣 蒟站繙籥 籥 矗謌粤 鉋赭 轢 珞鞳骰 褄蓊."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "羅 跪聽 籥 驟 關鋏纈 珸."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "倥籥褞蒡琿 轢 絶鞳骰 簿蓊"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 韲矼韋 轢 珸 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "壜蜍"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "廷痼辣 轢 邇矗 絶鞳骰 簿蓊"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "緋 轢 註齒 鴃痰 籥 癩粤 闔陏謐纃."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "倥籥褞蒡琿 轢 籥迯 艢 註齒"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "緋 轢 註齒"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "絶鞳驤 竦齒瑩"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "沃謌辷 珞鞳驤"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "悶髓纃 轢 E-Mail 珞鞳驤 粮 蓚 銜 註齒 癈鴈辷鱚 髫 髓鞳謚"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "倥籥褞蒡琿 轢 粤鰰蜍 艢 註齒"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "廷痼辣 轢 落矗 註齒"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "倥籥褞蒡琿 轢 閠闃"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "諾矼粤鱚 邇碆鴈 蓐 轢 閠闃:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "落矗 閠闃"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "諾矼粤鱚 蓐 轢 邇矗 閠闃:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "壜蜍 辣 蒟站繙籥 籥 JPilot 鉋赭."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "泌瘤 轢 JPilot 珸"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "倥籥褞蒡琿 轢 JPilot 艢闊"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "廷陏謐蓿繼纃 E-Mail 珞鞳()"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "廷痼辣 轢 邇 JPilot 艢闊"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "囁閻邇 驍韃矗辣 髫 髫鞨"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "羅 跪聽 籥 驟 齣鰰邇礦 碚芒 髫 髫鞨"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "倥籥褞蒡琿 轢 LDAP 髫鞨"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "緋 轢 鉐"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "鉋"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 韲矼韋 轢 劒鞨 "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "咥韵纃 痼艢"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "俸蓿辮蓍 艢 鵁韵纃"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " 沃琺邇 齣鰰邇矗辣 "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr ""
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr ""
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "瑰艢 (驟)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "尤襃蓐鼬 艢闊驤"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "暦邇硴"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "俥苻蒡纃"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "廷痼辣 轢 邇 LDAP 髫鞨"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "倥籥襁 LDAP - 泌瘤 轢 操艢 艢 鵁韵纃"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "沃謌辷 操艾 艢 鵁韵纃"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "羅齣閻邇 關鋏蓿琿 轢 操艢 艢 鵁韵纃 銜 髫鞨鞐 - 跪 艢籥蜥 顏邇"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "壜蜍 辣 矗謌粤 vCard 鉋赭"
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "泌瘤 轢 vCard 珸"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "倥籥襁 轢 vCard 艢闊"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "廷痼辣 轢 邇 vCard 艢闊"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "泌轢辣"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "嚏琅纈 閠闃 mbox 珸."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "呈鞳褞韆 蒟鴈辷:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "泌鈔纃 珸:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "泌瘤..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "泌瘤 轢 蒟鈔纃 珸"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "辣齣閻邇 艢闊驍琿 轢 轢髓韲蜉蓿 碾 珸\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "泌瘤 轢 閠闃"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "濯鈔"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "泌關瑩纃"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "麗璋袱"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "菩"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "怛齏鈞"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "落矗瑙袱"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' 辣 跪聽 籥 癩粤 礪譫纃 蓐 轢 閠闃"
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "瑙袱鰰 `%s' 矼 髫繿鰲黷"
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "瑙袱鰰 `%s' 辣 跪聽 籥 癩粤 髫舮珞纃."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/劒舮珥琿 轢 _邇矗 閠闃..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_鞳蓐纃黷琿 轢 閠闃..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_泌鴃萵琿 轢 閠闃"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "泌蔡鰲琿 轢 褌纈"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_韲矼韋 艢 邇礦 髫釶纃"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/_諾芬瘢鈞矗辣 糲鞨銜 轢 閠闃瑩"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_咥韵纃 轢 髫釶纃..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "赭 辣關鋏纈纃 髫釶纃."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_楳闊驍琿 邇礦轢韵袱 竦齒"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_鞳赭矗辣 轢 邇礦轢韵袱 竦齒"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "劒舮珥琿 轢 蒟站繖 轢 閠闃...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "落礦"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "羅關鋏纈纃"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "囁鰰邇矗辣 蓁鉋赭 艢 閠闃...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "囁鰰邇矗辣 蓁鉋赭 艢 閠闃..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "刳琿蒡琿 轢 閠闃 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "刳琿蒡琿 轢 閠闃 %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "諾芬瘢鈞矗辣 糲鞨銜 轢 閠闃瑩"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "艇鞨銜 轢 閠闃瑩 癩粤 碾芬瘢鈞纃. 韲糲諞琿?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "諾芬瘢鈞矗辣 糲鞨銜 轢 閠闃瑩..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "諾芬瘢鈞矗辣 轢 糲鞨銜 轢 閠闃瑩 關鈞琺纃."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "諾芬瘢鈞矗辣 轢 碌蔟褂 糲鞨纈 轢 閠闃..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "韲矼矗辣 艢 邇礦 髫釶纃 碾 碌蔟褂 閠闃..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "瑙袱 %s 蒟瘰琿\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "泌關璞琿 轢 髫釶纃蒹..."
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "諾芻蒻轢 竦纔袱 關 關璞琿 轢 髫釶纃蒹鴈 粮 %s."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"諾矼粤鱚 蓐纈 轢 邇矗鰰 閠闃:\n"
+"(琲 聽諤纈 籥 髫舮珞纈 閠闃 艢 髫鞐矗辣 轢 闔粹瑙褂,\n"
+" 粮痼矼鱚 `/' 轢 褓 轢 蓐纈)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "諾矼粤鱚 邇碆 蓐 艢 `%s'"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "鞳蓐纃黷琿 轢 閠闃"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"托蔟褂 閠闃 髫釶纃 闔 `%s' 癩籥 蒟鴃蓿.\n"
+"沃蔡鱶轢 謌 聽諤纈 蒟鴃萵琿?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "泌鴃萵琿 轢 閠闃"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "瑙袱 `%s' 辣 跪聽 籥 驟 關繻瑪辣."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "泌蔡鰲琿 轢 褌纈"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "薙諤纈 謌 蒟蔡鰲琿 轢 褌纈?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"薙諤纈 謌 關繻瑪矗辣 轢 闔纃驫瑩 褥鱶 `%s'?\n"
+"(劒釶纃鰰 妖 驟 蒟鴃萵瑩 銜 粫驫)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "鞳赭矗辣 轢 闔纃驫 褥鱶"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 IMAP4 琲瑰迺 `%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "泌鴃萵琿 轢 IMAP4 琲瑰迺"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 邇礦轢韵袱 竦齒 `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "泌鴃萵琿 轢 邇礦轢韵袱 竦齒"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 邇礦轢韵褂 琲瑰迺 `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "泌鴃萵琿 轢 邇礦轢韵褂 琲瑰迺"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "楳闊驍琿 邇礦轢韵袱 竦齒"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "泌痳鞳鱚 邇礦轢韵袱 竦齒 艢 艢闊驍琿."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "沃跏鞐辣 轢 竦齒:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 咥韵纃 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "緋 轢 邇礦轢韵袱 竦齒"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "劒釶纃"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "呎"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "麗鞳骰矗辣"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "顏褌碆粤"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "騾跪 艢 纈纃"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "辣闔芻瑩"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "羅 跪聽 籥 驟 闔謫 髀蔡 轢 邇礦轢韵袱鰰 竦齒"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "泌陏謐纃."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d 邇礦轢韵褂 竦齒 闔謫纃 (%s 關鋏纈纃)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "落礦轢韵褂 竦齒:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "吶赭:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "劒舮珥琿 蒟站繖 轢 艢站珥辷鱚 瘠鉅鈞...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(赭 歴)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(赭 吶赭)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "劒舮珥琿 蒟站繖 轢 蒟釶鞐聽辷...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "羅 跪聽 籥 驟 艢鞳粫 蒟釶鞐聽辷纈."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 碚芒瑩 粮 %s 驟 鞐苡珞轢. 凾韃矗辣...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "髫舮珥琿 轢 IMAP4 碚芒 粮 %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "羅 跪聽 籥 驟 髓瑁鱶鞐 TLS 驟驤.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "辣 跪窶 籥 驟 齣鰰邇 蒟鴃蓿 諤竡矼: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "辣 跪聽 籥 驟 艢謌\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "辣 跪窶 籥 驟 齣鰰邇 蒟鴃蓿 諤竡矼: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "辣 跪聽 籥 艢鰲鉋 閠闃\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "褌鞳迯瑩 閠闃 %s 辣 髫繿鰲黷\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "竦纔袱 關 闔謫珥琿 轢 LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "羅 跪聽 籥 驟 髫舮珞 '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "羅 跪聽 籥 驟 髫舮珞 '%s' 闔 濯鈔\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "羅 跪聽 籥 驟 髫舮珞 闔纃驫 褥鱶: LIST 驟 關鈞琺\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "羅 跪聽 籥 驟 髫舮珞 闔纃驫 褥鱶\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "羅 跪聽 籥 驟 關繹跂逑矗 闔纃驫 褥鱶: %s 粮 %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "羅 跪聽 籥 驟 蒟鴃蒹 闔纃驫 褥鱶\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "辣 跪聽 籥 驟 砒繻 envelope\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "竦纔袱 關 砒繻琿 轢 envelope.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "辣 跪聽 籥 驟 琿琺蒟蒡 envelope: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "羅 跪聽 籥 驟 齣鰰邇礦 碚芒 IMAP4 髫鞨: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "羅 跪聽 籥 驟 齣鰰邇礦 IMAP4 驟驤 : %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "辣 跪聽 籥 驟 闔謫 關鉐鴃琿髓碆鴈 銜 蓐纃\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "辣 跪聽 籥 驟 蒟痳鞳 閠闃: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 黻鉐鴈矼矗辣 關鈞琺纃.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 硅蒟琿 關鈞琺纃.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "辣 跪聽 籥 驟 關葹珥 %s 褸 %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(蒟關璞琿 轢 珸...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "髫釶纃蒹鴈 辣 跪聽 籥 驟 關葹珥 褸 %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "辣 跪聽 籥 驟 褌闊鞐 %s %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "竦纔袱 關 imap 褌赭辟: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "竦纔袱 關 imap 褌赭辟: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "竦纔袱 關 imap 褌赭辟: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv 辣 跪聽 籥 關緕瘰瑯黷 UTF-7 粮 %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv 辣 跪聽 籥 關緕瘰瑯黷 %s 粮 UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "瀧瑜辣"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "嚏琅纈 mbox 珸 閠闃."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "瀧瑜辣 轢 珸:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "瑙袱 轢芻瑾纃蒹:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "泌痳鞳鱚 珸 艢 硴瑜辣"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "嚏琅纈 蓐 轢 珞鞳骰 褄蓊 珸 艢 硴瑜辣."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "泌瘤 關繹跂逑矗辣 轢 LDIF 蓐纃 轢 闔諷鰰 艢 硴瑜辣."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "壜蜍 硴繿纃."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "泌痳鞳鱚 珸."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "咒痰 籥 癩粤 闔陏謐纃 蓐 轢 珞鞳骰 褄蓊."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "註纔袱 關 纈纃 轢 LDIF 闔諷鰰."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF 珸諤 硴繿纃 齣閻邇."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "泌痳鞳鱚 LDIF 壜蜍"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "緋 轢 珸"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF 闔諷"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "緋 轢 瑩韆癈"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "栓韆癈"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "泌瘤"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "絶鞳骰 褄蓊 :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "緋 轢 珸 :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "楳闊驤 :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "瀧瑜辣 轢 LDIF 珸 絶鞳骰瑩 褄蓊"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "鞳粫纃"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "刹繖矗"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "罷鉋赭 艢 珸"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "栓韆癈鱶"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "楳碾頽矗辣"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "鉉齬珥琿 轢 邇礦 髫釶纃"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "泌琲矗辣"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "歴袱艢"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "鉉齬珥琿"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "楳碾頽纃 (%d 髫釶纃 (%s) 闔謫纃)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "楳碾頽纃 (赭 邇礦 髫釶纃)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "宅芒瑩 驟 關鈞琺"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "噪鉐鴈矼矗辣鴈 驟 關鈞琺"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "楳裨纃"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "瑰艢 (驟)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "楳碾頽纃 (%d 邇礦 髫釶纃)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "楳碾頽纃 (赭 邇礦 髫釶纃)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "諾芻蒻轢 竦纔褂 關 闔謫珥琿 轢 闔瑩."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "闔謫珥琿 轢 邇礦 髫釶纃 銜 琲瑰迺 %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 鉉齬珥琿 轢 邇礦 髫釶纃"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "凾韃矗辣 POP3 髫鞨: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "羅 跪聽 籥 驟 齣鰰邇礦 碚芒 POP3 髫鞨: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "噪鉐鴈矼矗辣..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "鉉齬珥琿 轢 髫釶纃 銜 %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "大蓐琿 轢 瘰 轢 邇礦 髫釶纃 (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "大蓐琿 轢 瘰 轢 邇礦 髫釶纃 (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "大蓐琿 轢 瘰 轢 邇礦 髫釶纃 (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "大蓐琿 轢 鞐芟辮 轢 髫釶纃鰰 (LIST)... "
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "泌鴃萵琿 轢 髫釶纃蒹 %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "鞳褸驍琿"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "鉉齬珥琿 轢 髫釶纃蒹 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "鉉齬珥琿 (%d 髫釶纃 (%s) 闔謫纃)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "宅芒瑩 關鈞琺纃"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "諾芻蒻轢 竦纔袱 關 釶鞐瘤鳧 轢 闔瑩"
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"諾芻蒻轢 竦纔袱 關 釶鞐瘤鳧 轢 闔瑩:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "赭 驍釶鈔邇 髓 轢 粫驫"
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "壜蜍 辣 跪聽 籥 驟 艢闊."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "註纔袱 骼裙."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "宅芒瑩 關繩鞐鱚轢 銜 銜籥諷纃 鉐."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "銷纃驫瑩 褥鱶 艢裨纃."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"銷纃驫瑩 褥鱶 艢裨纃:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "噪鉐鴈矼矗辣鴈 驟 關鈞琺."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"噪鉐鴈矼矗辣鴈 驟 關鈞琺:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "驟驤鰰 關鉐韲纃\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "令繖蓁矗辣鴈 銜跂辣邇\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "鉉齬珥琿 轢 邇礦 髫釶纃 銜 %s %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "諾矼粤鱚 閠韲諤 艢 %s 轢 %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "諾矼粤鱚 閠韲諤"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "韲鴈褌諷 胝齏琺"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"壜蜍 `%s' 矼 髫繿鰲黷.\n"
+"瑙袱鰰 辣 跪聽 籥 驟 髫舮珞."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread 辣 驟 闔粐鞴 銜 glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG 辣 蓁髓琺蒡琿 關珥蓚邇, 蓚 矼韵鰰 踈 鰲鞣 髓瑁.\n"
+"OpenPGP 闔粐顏肛瑩 銜跂辣轢."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "囂銜鞳痼: %s [力嵌]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [珞鞳] 銜矗辣 轢 關鈑鉋纐 艢 髫髓珥辣"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" 銜矗辣 轢 關鈑鉋纐 艢 髫髓珥辣 關蒻鞳閻辷\n"
+" 鼕瑯琿蓿 珸謗矼."
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 闔謫珥琿 轢 邇礦 髫釶纃"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all\t 闔謫珥琿 轢 邇礦 髫釶纃 銜 碌蔟褂 琲瑰迺"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 蒟關璞琿 轢 碌蔟褂 髫釶纃 鈿璋袱鰰"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [閠闃]... 闔袱艪琿 轢 陏謐 瘰鉗 轢 髫釶纃"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [閠闃]...\n"
+" 闔袱艪琿 轢 髫髓辷纈 轢 碌袱 閠闃"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 鞳肆 轢 粤癩"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 蒟矼聹琿 轢 鰰艾 闔跪轢 蓁鉋赭 蒟謌艢辣"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 蒟矼聹琿 轢 矼韵鰰 蒟謌艢辣"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "劒髓珥 驟 邇碆 髫釶纃蒹. 薙諤纈 謌 蒟鈔 銜 關釿鞐赭鰰?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "劒釶纃 鈿璋袱鰰"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "褌 辣蒟關瑩纃 髫釶纃 騾 鈿璋袱鰰. 薙諤纈 謌 蒟鈔 銜 關釿鞐赭鰰?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "粽黹 Sylpheed 髓瑁鱶鞐 矼.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_壜蜍/_瑙袱"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_壜蜍/_瑙袱/劒舮珥琿 轢 _邇矗 閠闃"
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_壜蜍/_瑙袱/_鞳蓐纃黷琿 轢 閠闃..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_壜蜍/_瑙袱/_泌鴃萵琿 轢 閠闃"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_壜蜍/_廷痼矗辣 轢 闔纃驫 褥鱶..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_壜蜍/_廷痼矗辣 轢 闔纃驫 褥鱶..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_鞳赭矗辣 轢 闔纃驫 褥鱶"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_壜蜍/_瑙袱/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_韲矼韋 艢 邇礦 髫釶纃"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_壜蜍/_瑙袱/_韲矼韋 艢 邇礦 髫釶纃 碾 碌蔟褂 閠闃"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_諾芬瘢鈞矗辣 糲鞨銜 轢 閠闃瑩"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_壜蜍/_瀧瑜辣 轢 mbox 珸..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_壜蜍/_泌轢辣 轢 mbox 珸..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_壜蜍/泌關瑯矗辣 轢 _褌纈"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_壜蜍/_瑙瑯矗辣 ..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_壜蜍/_瑩..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_壜蜍/_俥瘤鰰 痳 跟繙"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_壜蜍/泌_鈔"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_倥籥褞蒡琿/泌瘤 闔 _鱚赭"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_倥籥褞蒡琿/_咥韵纃 鱚褥銜 髫釶纃蒹..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_倥籥褞蒡琿/咥韵纃 _髫釶纃鰰..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_艇鞨 轢 閠闃蓿"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_泌站繖 轢 髫釶纃鰰"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_妹迺"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_妹迺/碑鉈 _鱚襃"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_妹迺/_碑鉈"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_妹迺/_繩髓"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/_妹迺/_槽 闔袱艪琿"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_泌站繖/鉅瑯矗辣 蓚 _驫韆矗辣/妹迺 轢 _髫髓辷纈"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_泌站繖/_歴粤謐 糲鞨 轢 閠闃蓿"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_泌站繖/歴粤諷 蒟站繖 轢 髫釶纃鰰"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_泌站繖/_剋頏蒡琿"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _邇跂"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _鞐芟辮"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _籥鰰"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _闔籥鱚"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _鉉齬瑩繼"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _鱚赭"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _銜痳艪琿"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _辣關鋏纈纃"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_泌站繖/_剋頏蒡琿/闔 _關蓿齔袱"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_泌站繖/_剋頏蒡琿/_槽 骼頏蒡琿"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_泌站繖/_剋頏蒡琿/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_泌站繖/_剋頏蒡琿/諾苺鈔"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_泌站繖/_剋頏蒡琿/来苺鈔"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_泌站繖/_剋頏蒡琿/_韆硅蔟琿 闔 鱚赭"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_泌站繖/_来褌 蒟站繖"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_泌站繖/_俥艪萵琿 轢 碌蔟褂 辷褂"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_泌站繖/_凾萵琿 轢 碌蔟褂 辷褂"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_泌站繖/栓韆癈鱶 轢 蒟矗粨瑩"
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_泌站繖/_鞳鈔 粮"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_泌站繖/_鞳鈔 粮/_鞳粫邇 髫釶纃蒹"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_泌站繖/_鞳鈔 粮/_刹繖矗 髫釶纃蒹"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_泌站繖/_鞳鈔 粮/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_泌站繖/_鞳鈔 粮/_鞳粫邇 辣關鋏纈纃 髫釶纃蒹"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_泌站繖/_鞳鈔 粮/_諷籵璞 辣關鋏纈纃 髫釶纃蒹"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_泌站繖/_鞳鈔 粮/鞳粫邇 _邇碆 髫釶纃蒹"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_泌站繖/_鞳鈔 粮/刹繖矗 _鈞 髫釶纃蒹"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_泌站繖/_鞳鈔 粮/鞳粫邇 _赭韋蒡琿 髫釶纃蒹"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_泌站繖/_鞳鈔 粮/刹繖矗 _瑁褂鞐邇 髫釶纃蒹"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_泌站繖/_鞳鈔 粮/鞳粫邇 _鉚矼鱚邇 髫釶纃蒹"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_泌站繖/_鞳鈔 粮/刹繖矗 _矼鱚邇 髫釶纃蒹"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_泌站繖/_鞳鈔 粮/_悌黹 閠闃"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_泌站繖/_菩粫鞐辣/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_泌站繖/_菩粫鞐辣"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_泌站繖/_菩粫鞐辣/_説鴈赭鱶邇 鞐苡鈑轢矗辣"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_泌站繖/_菩粫鞐辣/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_泌站繖/_菩粫鞐辣/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_泌站繖/_菩粫鞐辣/Western European (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_泌站繖/_菩粫鞐辣/Western European (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_泌站繖/_菩粫鞐辣/Central European (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_泌站繖/_菩粫鞐辣/_Baltic (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_泌站繖/_菩粫鞐辣/Baltic (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_泌站繖/_菩粫鞐辣/Greek (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_泌站繖/_菩粫鞐辣/Turkish (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_泌站繖/_菩粫鞐辣/Cyrillic (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_泌站繖/_菩粫鞐辣/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_泌站繖/_菩粫鞐辣/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_泌站繖/_菩粫鞐辣/Cyrillic (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_泌站繖/_菩粫鞐辣/Japanese (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_泌站繖/_菩粫鞐辣/Japanese (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_泌站繖/_菩粫鞐辣/Japanese (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_泌站繖/_菩粫鞐辣/Japanese (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_泌站繖/_菩粫鞐辣/Simplified Chinese (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_泌站繖/_菩粫鞐辣/Traditional Chinese (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_泌站繖/_菩粫鞐辣/Traditional Chinese (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_泌站繖/_菩粫鞐辣/Chinese (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_泌站繖/_菩粫鞐辣/Korean (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_泌站繖/_菩粫鞐辣/Korean (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_泌站繖/_菩粫鞐辣/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_泌站繖/_菩粫鞐辣/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_泌站繖/歴矗辣 _邇 關鈑鉋纐"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_泌站繖/_泌鈔纃 褌"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_泌站繖/_鉅瑯矗辣 轢 艢站珥辷鱚 瑜鱶(headers)"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_泌站繖/_令邇矗辣 轢 蒟矗粨瑩"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_劒釶纃蒹"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_劒釶纃蒹/_倥籥褞蒡琿"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_劒釶纃蒹/鉉齬珥琿 銜 _碌蔟褂 琲瑰迺"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_劒釶纃蒹/鉉齬珥琿 銜 _碌蔟褂 琲瑰迺"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_劒釶纃蒹/_歴袱 轢 闔謫珥琿"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_劒釶纃蒹/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_劒釶纃蒹/_泌關璞琿 轢 髫釶纃鰰 鈿璋袱鰰"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_劒釶纃蒹/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_劒釶纃蒹/_劒髓珥辣 轢 邇碆 髫釶纃蒹"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_劒釶纃蒹/_歴竡碆"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_劒釶纃蒹/歴竡碆 _粮"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_劒釶纃蒹/歴竡碆 _粮/_碌蔟褂"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_劒釶纃蒹/歴竡碆 _粮/_闔籥鱚"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_劒釶纃蒹/歴竡碆 _粮/_闔纃驫 髀蔡"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_劒釶纃蒹/_鞳關璞琿"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_劒釶纃蒹/_繽鞐琿 袱鴈 關蓿齔袱"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_劒釶纃蒹/_鞳轢骼矗辣"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_劒釶纃蒹/_鞳跂髓矗辣"
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_劒釶纃蒹/_菩闊鞐辣"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_劒釶纃蒹/_泌鴃萵琿"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/_尤韋蒡琿"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/_俥芟瑁褂鞐辣"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/袱鴈 _辣關鋏纈纃"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/袱鴈 _關鋏纈纃"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_劒釶纃蒹/_尤韋蒡琿/_碌蔟褂 袱鴈 關鋏纈纃"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_劒釶纃蒹/_倥籥褞蒡琿"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_罷髓頌跂迺/_廷痼辣 轢 闔籥鱚 珞鞳骰瑩 褄蓊"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_罷髓頌跂迺/_壽謦韆鞐辣 轢 髫釶纃鰰"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_罷髓頌跂迺/_壽謦韆鞐辣 轢 髫釶纃鰰"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_罷髓頌跂迺/_劒舮珥琿 轢 關珥蓚 艢 蓚鴃蒡琿"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_罷髓頌跂迺/_劒舮珥琿 轢 關珥蓚 艢 蓚鴃蒡琿/_説鴈赭鱶邇"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_罷髓頌跂迺/_劒舮珥琿 轢 關珥蓚 艢 蓚鴃蒡琿/闔 _鈔瑩繼"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_罷髓頌跂迺/_劒舮珥琿 轢 關珥蓚 艢 蓚鴃蒡琿/闔 _鉉齬瑩繼"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_罷髓頌跂迺/_劒舮珥琿 轢 關珥蓚 艢 蓚鴃蒡琿/闔 _吶赭"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_罷髓頌跂迺/_苒韆矗辣 轢 闔碣瑁 驟 髫釶纃"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_罷髓頌跂迺/_泌陏謐纃蒹"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_罷髓頌跂迺/_二齏琺纃 關鈑鉋纐"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_菩逕蓊齔蒡琿"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_菩逕蓊齔蒡琿/_令 關繖闔蓿琿"
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_菩逕蓊齔蒡琿/_囁鰰邇矗辣 轢 蓚鵁"
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_菩逕蓊齔蒡琿/_憊瘠鉈"
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_菩逕蓊齔蒡琿/_偵蜻鰲"
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_菩逕蓊齔蒡琿/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_菩逕蓊齔蒡琿/_鞳粹鋏蓿琿 艢 鱚褥 琲瑰迺"
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_菩逕蓊齔蒡琿/_劒舮珥琿 轢 邇 琲瑰迺"
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_菩逕蓊齔蒡琿/_倥籥褞蒡琿 轢 琲瑰迺蓿"
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_菩逕蓊齔蒡琿/_轢 轢 鱚褥 琲瑰迺"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_鉤銷/_沃顏辷"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_鉤銷/_沃顏辷/_尖站蓍驫"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_鉤銷/_沃顏辷/_熄鉈驫"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_鉤銷/_怛髓 碾關鉐"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_鉤銷/_怛髓 碾關鉐/_尖站蓍驫"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_鉤銷/_怛髓 碾關鉐/_羅跣褂"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_鉤銷/_怛髓 碾關鉐/_費閠迹褂"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_鉤銷/_怛髓 碾關鉐/_夭纃驫"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_鉤銷/_怛髓 碾關鉐/_避琺葯迹褂"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_鉤銷/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "劒舮珥琿 轢 站珥纃 關鈑鉋纐...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr ""
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "竡鴈碆.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "羅鈑珮諤矼"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "謌闡矗"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "韲轢 轢 鞐舮繼纃蒹鴈 轢 關鈑鉋纐 銜 %d 粮 %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "槽 粮髓 粮 跟繙"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "俥瘤鱶鱚 痳 粮髓 粮 跟繙. 薙諤纈 謌 籥 礪譫蓿 跟繙瑩?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "泌蔡鰲琿 轢 褌纈"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "薙諤纈 謌 蒟蔡鰲琿 轢 褌纈?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "廷痼辣 轢 闔纃驫 褥鱶"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"諾矼粤鱚 跂髓鈿鉉鈕纃蒹鴈 轢 闔纃驫 褥鱶.\n"
+"占 鼕瑯琿 髫繿鰲黷璞 褥鱶, 癩粤\n"
+"驫琿蒡琿 珥鴈赭鱶邇."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "代 髫繿鰲黷 闔纃驫 褥鱶 `%s'."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "銷纃驫 褥鱶"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"劒舮珥琿纈 轢 闔纃驫 褥鱶 驟 關鈞琺.\n"
+"代 髫繿鰲黷瑩 袱裄 珸謗矼, 蓚 赭鱚 關珥 艢 艢闊."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - 泌站繖 轢 閠闃蓿"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - 泌站繖 轢 髫釶纃鰰"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_歴竡碆"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "歴竡矗辣 轢 碌蔟褂"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/歴竡碆 _粮/_闔籥鱚"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/歴竡碆 _粮/闔纃驫 _髀蔡"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_鞳關璞琿"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/_繽鞐琿 袱鴈 關蓿齔袱"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/_鞳轢骼矗辣"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "鉉齬珥琿"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "韆繻琿 轢 邇矗 闔"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "鉉齬珥琿 銜 碌蔟褂"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "韆繻琿 轢 邇矗 闔 銜 碌蔟褂 琲瑰迺"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "泌關璞琿 轢 髫釶纃鰰 鈿璋袱鰰"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "劒髓珥辣"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "劒髓珥辣 轢 邇碆 髫釶纃蒹"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "歴竡矗辣"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "歴竡矗辣 轢 髫釶纃蒹"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "沃 碌蔟褂"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "歴竡矗辣 轢 碌蔟褂"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "鞳關璞琿"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "鞳關璞琿 轢 髫釶纃蒹鴈"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "泌鴃萵琿 轢 髫釶纃蒹鴈"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "泌陏謐矗辣"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "泌陏謐矗辣 轢 赭韋蒡琿 關鉚繿"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "刹繖矗 辣關鋏纈纃 髫釶纃蒹"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "鞳粹鋏蓿琿"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "令 關繖闔蓿琿"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "占瑰迺"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "菩逕蓊齔蒡琿 轢 琲瑰迺"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "俥瘤鱶鱚 痳 粮髓 粮 跟繙. 攝琲辣鱚 蒻鉈瑩 艢 籥 礪譫蓿 跟繙瑩."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "俥瘤鱶鱚 粮髓 粮 跟繙. 攝琲辣鱚 蒻鉈瑩 艢 籥 蒟裨蓿 跟繙瑩."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "泌鈔"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "薙諤纈 謌 蒟鈔 銜 關釿鞐赭鰰?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "辣 跪聽 籥 驟 艢闊 碾 碚繻纃纃 珸\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "鉉齬珥琿 轢 髫釶纃 銜 %s 碾 %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "辣 跪聽 籥 驟 關鋏纈 mbox 珸.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "辣矗謌粤 mbox 鉋赭: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "粤鉋跏鞐 mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "辣 跪聽 籥 驟 銜碆韆 碚繻纃纃 珸\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d 轢跂鞳辷 髫釶纃.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "辣 跪聽 籥 驟 髫舮珞 艢裨矗 珸 %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "蒟闔諛矗蜥 'flock' 碎繿鴈 'file' 琲 碾芟鈕邇.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "辣 跪聽 籥 驟 髫舮珞 %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "褥鱶鰰 驟 關蓿繙珥 銜 粽黹 關鉚繿, 蒟琲矗辣...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "辣 跪聽 籥 驟 艢裨 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "辣矗謌粤 鱶 艢裨矗辣\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "辣 跪聽 籥 驟 銜裨 %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "闔纃驫瑩 褥鱶 辣 跪聽 籥 驟 髫褓瑩 粮 逑諤.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "泌轢辣 轢 髫釶纃 銜 %s 碾 %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "沃跏鞐辣 鱚褥銜 髫釶纃蒹"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "沃跏鞐辣 轢 鱚襃:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "恣碌鰲蓿繼邇髓 褸 鞐芟辮 轢 驤赳鉉蓿"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "咥韵纃 轢艢"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "咥韵纃"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "咥韵纃纈 驟 關鈞琺"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "咥韵纃 辷 辣 痳 轢跂鞳."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "廷髓蓊轢鴈 轢琺銜 轢 髫釶纃蒹鴈; 關鈔諞纃蒹 銜 褓?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "廷髓蓊轢 褓 轢 髫釶纃蒹鴈; 關鈔諞纃蒹 銜 轢琺銜?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "咥韵纃纈 關蒻譫"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "劒舮珥琿 轢 蒟站繖 轢 髫釶纃鴈...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "楳閠艪琿 袱鴈"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "鞳艢闊"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "薙諤纈 謌 關繚瑙蔡矗辣 轢 髫繿鰲黷璞 珸?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "羅 跪聽 籥 驟 艢閠艾 珸證 `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "纓瑩"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"諾矼粤鱚 褌赭辟辷 鞳 艢 閻瑩:\n"
+"(`%s' 癩粤 艢跂辣 蓐 轢 珸)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"羅矗謌粤 褌赭辟纃 鞳 艢 閻瑩:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "辣 跪聽 籥 驟 褌闊鞐 髫釶纃蒹鴈 %s 碾 %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "羅 跪聽 籥 驟 銜碆韆 珸證 赭韋蒡鈞褂鱚.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "蒟鈔轢鰰 閠闃 繖轢裄 轢芻瑾纃蒹鴈.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "菩闊鞐辣 轢 髫釶纃蒹 %s%c%d 碾 %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr ""
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_歴矗辣"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/_歴矗辣 髫..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_鉅瑯矗辣 袱鴈 鱚襃"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_楳閠艪琿 袱鴈..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_韲矼矗辣 轢 闔粹蔡"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "劒舮珥琿 轢 MIME 蒟站繖...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME 呎"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "吶襃"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "韆鴦韋"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "泌痳鞳鱚 \"韲矼矗辣 轢 闔粹蔡\" 艢 關鈞辮袱 "
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "怙髓 銜 multipart 髫釶纃蒹 辣 跪聽 籥 驟 艢閠艾."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "歴矗辣 髫"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"諾矼粤鱚 褌赭辟辷 鞳 艢 銜矗辣 轢 珸:\n"
+"(%s 癩粤 艢跂辣 蓐 轢 珸)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "菩赭辟辷 鞳 艢 MIME 關繝諷 辣矗謌粤: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "髫舮珥琿 轢 NNTP 碚芒 粮 %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP 碚芒瑩 粮 %s:%d 痳 關繩骰瑩. 凾韃矗辣...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "髓瑩 %d 矼 裙蒡琿.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "砒蓐琿 轢 髓瑩 %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "辣 跪聽 籥 驟 關鋏纈 髓瑩 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "辣 跪聽 籥 驟 蒟硅纓 髀蔡 轢 邇礦轢韵袱 竦齒\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "辣 跪聽 籥 驟 闢瘠蒻黷 髓瑩.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "辣 跪聽 籥 驟 蒟硅纓 髓瑩 %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "辣 跪聽 籥 驟 蒟痳鞳 竦齒 %s\n"
+
+#: src/news.c:770
+#, fuzzy, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "羅矗謌粤 釶矗 轢 髓瑩蓙: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "赭 邇礦 髓瑩蓙.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "闔謫珥琿 轢 xover %d - %d %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "辣 跪聽 籥 驟 闔謫 xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "竦纔袱 關 闔謫珥琿纈 轢 xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "辣矗謌粤 xover 鞳: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "辣 跪聽 籥 驟 闔謫 xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "竦纔袱 關 闔謫珥琿纈 轢 xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "羅 跪聽 籥 驟 齣鰰邇礦 碚芒 NNTP 髫鞨: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "關銜鉅鉉轢 竦纔袱: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "關銜鉅鉉轢 竦纔袱\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "礦 驟 竦纔袱 關 闢瘠蒻黷琿\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "礦 驟 竦纔袱 蒟關璞琿 轢 髫釶纃蒹鴈."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "瑁鉉"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[赭 闔鴃縺蓿繼驫 id]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s野 碾矼粤鱚 閠韲諤鰰 艢:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"羅關珥蓚轢 閠韲諤! 麗蓿珸鱚 銜邇碆...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "羅 轢跂鞳 辣釶鈔蓐 APOP 碚繻繧 銜閻瑩 闔舮鞐矗\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "刪迺琲鱶轢 竦纔袱 碾 碚繻繧 銜閻瑩 闔舮鞐矗\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 關銜鉅鉉轢 竦纔袱\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "辣矗謌粤 xover 鞳: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 泌鴃萵琿 轢 髫釶纃e 蒟鱚褸 髏鉅 %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: 鞳驫瑾琿 轢 髫釶纃蒹 %d (%d 痼蜥)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "闔纃驫瑩 褥鱶 艢裨纃\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "驟驤鰰 關鉐韲纃\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "辣 跪聽 籥 驟 髓瑁鱶鞐 TLS 驟驤\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "竦纔袱 關 黻鉐鴈矼矗辣\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "褌赭辟瑩 辣 驟 闔粐鞴\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "竦纔袱 關 POP3 驟驤鰰\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "韲蓿琿 轢 褌逕蓊齔瑶...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "沃跂鞳辷 %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "楳碾頽纃 纈纃纈 轢 轢髓韲蜉蓿.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "沃髓韲蜉蓿 騾 艢閠艱辷.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "韆諤窶辣"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "歴矗辣 轢 關鈑鉋纐 關繖闔蓿琿鰰 艢 琲瑰迺...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "占瑰迺%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "鞳粹鋏蓿琿 艢 邇 琲瑰迺"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "鞳粹鋏蓿琿 艢 琲瑰迺"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 關繖闔蓿琿鰰 艢 琲瑰迺...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "鉉齬珥琿"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "羅關蒻鉐邇矼邇髓"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "沃關繖轢"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "緋 轢 琲瑰迺"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "囁鰰邇矗辣 袱鴈 闔粽瑯瘉鞐 驟"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "毎轢 蓁鉋赭"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "謐 蓐"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "銷纃驫 珞鞳"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "齢窶辷艢"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "罷鉋赭 艢 髫鞨鞐"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "落礦辷 (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "槽 (謗袱謐)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "劒鞨顏 蒟蔡裄 黻鉐鴈矼矗辣"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "落礦轢韵褂 髫鞨"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "劒鞨 艢 闔謫珥琿"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP 髫鞨 (蒟關璞琿)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "銜鞳瘉鱚鞫褂 ID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "瑁鉉"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "劒鞨顏 蒟蔡裄 黻鉐鴈矼矗辣"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "泌鴃萵琿 髫釶纃鰰 銜 髫鞨鞐 褌窶鴈 驟 闔謫瑩"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "鞳赭矗辣 驪繖"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "粱"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 粱: 辣艢痼硴 關繻瑪矗辣)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "泌鱚站辣 轢 碌蔟褂 髫釶纃 銜 髫鞨鞐"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "例鞐辷纃蒹 轢 鞐芟辮 關 闔謫珥琿"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "B"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "壽謦韆鞐辣 轢 髫釶纃鰰 關 闔謫珥琿"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "濯鈔 褥鱶"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(羅蓚鴃蒡琿蓿 髫釶纃 癩籥 髫鞐矗辷 鰰艾 閠闃)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "悶鴈 轢 黻鉐鴈矼矗辣"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "説鴈赭鱶邇"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "'鉉齬珥琿 碌蔟褂' 關鈞辮矗 艢 邇礦 髫釶纃 鴈艾 琲瑰迺"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "楳站珥轢 瑜"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "廷痼辣 轢 艢站珥轢 瑜 釣鰰"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "着辣韆鞐辣 轢 Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "廷痼辣 轢 艢站珥轢 瑜 銜 闔鴃縺蓿繼"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " 倥籥褞蒡琿... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "噪鉐鴈矼矗辣"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP 噪鉐鴈矼矗辣 (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"占 鉐鰰礦鱚 鱚艾 闔諷鰰 關瑯辷, 癩籥 蒟闔諛矗辷\n"
+"髫蓿 user ID 閠韲諤 袱鴈 艢 闔謫珥琿."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "噪鉐鴈矼矗辣 POP3 關繖 蒟關璞琿"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "泌鈔 轢 褌赭辟"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "説鴈赭鱶邇 齣鰰邇矗辣 轢 驪繖辷鱚 珞鞳驤"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "歴竡碆-粮"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "俸蓖鱶鞐辣 闔 闔粽瑯瘉鞐辣"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "鈔闊驍琿 闔 闔粽瑯瘉鞐辣"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "泌闔諛矗辣 轢 ASCII-armored 鉋赭 艢 褓蓖鱶鞐辣"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "泌闔諛矗辣 轢 闔粹蔡 蔡 鱚襃"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "鈔闊驍璞 裨"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "泌闔諛矗辣 轢 闔粽瑯瘉鞐 驟 GnuPG 裨"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "泌瘤 轢 裨 闔 矗 email 珞鞳"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "傀纃 蒟瘤 轢 裨"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ID 轢 闔鴃縺蓿繼 蓚 裨:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "羅 驟 蒟闔諛矗 SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "泌闔諛矗辣 轢 SSL 艢 POP3 碚芒"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "泌闔諛矗辣 轢 STARTTLS 褌赭辟 艢 髓瑁 轢 SSL 驟驤"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "泌闔諛矗辣 轢 SSL 艢 IMAP4 碚芒"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "泌闔諛矗辣 轢 SSL 艢 NNTP 碚芒"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "泌關璞琿 (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "泌闔諛矗辣 轢 SSL 艢 SMTP 碚芒"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "泌闔諛矗辣 轢 辣瘠鉅蒡璞 SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(泌裨纈 琲 蓐瑩 關釶諷跏 SSL 碚芒)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "麗鞳粤辣 轢 SMTP 闔頏"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "麗鞳粤辣 轢 POP3 闔頏"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "麗鞳粤辣 轢 IMAP4 闔頏"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "麗鞳粤辣 轢 NNTP 闔頏"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "麗鞳粤辣 轢 蓐 轢 粮跂蜊"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP 粫鞳褞鉋 轢 髫鞨鞐"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "鉐鰰辣 轢 蒟關瑩纃 髫釶纃 "
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "鉐鰰辣 轢 辮邇礦鱚 "
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "鉐鰰辣 轢 蒟鴃蓿 髫釶纃 "
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "羅 碾矼粤邇 蓐 轢 琲瑰迺."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "羅 碾矼粤 闔纃驫 珞鞳."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "羅 碾矼粤 SMTP 髫鞨."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "羅 碾矼粤 闔鴃縺蓿繼驫 ID."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "羅 碾矼粤 POP3 髫鞨."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "羅 碾矼粤 IMAP4 髫鞨."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "羅 碾矼粤 NNTP 髫鞨."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"羅 驟 關繽鉋矗 蒟闔諛矗辣鴈 轢 髓瑁 ASCII-armored\n"
+"跂鴈 艢 褓蓖鱶鞐辷 髫釶纃. 呷 辣 髀瑯矗\n"
+"RFC 3156 - MIME Security with OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "菩逕蓊齔瑶 轢 粤蜻鰲"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "緋 轢 跂迸:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "菩赭辟纃 鞳:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"緋 轢 跂迸:\n"
+" 泌闔諛矗蜥 / 蓐纈 轢 跂迸 艢 籥 轢關珥蓿 闔粲纃鰰.\n"
+"菩赭辟纃 鞳:\n"
+" 楳闔辣鱚 :\n"
+" | 艢 籥 蒟關瑩蓿 謗 轢 髫釶纃蒹 蓚 蒟瘰琿 鱚襃 褸 褌赭辟\n"
+" > 艢 籥 蒟關瑩蓿 關鉞艪鉉纃 鱚襃 褸 褌赭辟\n"
+" * 艢 籥 蒟關瑩蓿 關鉞艪鉉纃 驫韆 鱚襃 褸 褌赭辟\n"
+" 楳碾頽纈 :\n"
+" | 艢 籥 艢跂辷鱚 謗 轢 髫釶纃蒹 蓚 蒟瘰琿 鱚襃 蒟鈔 銜 褌赭辟\n"
+" > 艢 籥 碎褄纈 蒟鈔 銜 褌赭辟 痳 籥 驟 艢跂 髓瑁 鱚襃\n"
+" & 艢 籥 蒟陏謐蓿 褌赭辟 瑜蓁韲迯\n"
+" 泌闔諛矗蜥:\n"
+" %f 艢 蓐 轢 珸諤 轢 髫釶纃蒹鴈\n"
+" %F 艢 髀蔡 蓐纃瑩 轢 珸謗矼鱚 轢 蒟瘰琿蓿 髫釶纃\n"
+" %p 艢 瑜 銜 蒟瘰琿 髫釶纃蒹\n"
+" %u 艢 闔鴃縺蓿繼驫 瑁笂跂迺\n"
+" %h 艢 闔鴃縺蓿繼驫 驫韆 瑁笂跂迺\n"
+" %s 艢 蒟瘰琿 鱚襃 "
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " 楳轢 "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " 鉤銷 艢 驤迺琲驤騾"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "倥竏髓韆鞐辷 粤蜻鰲"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(落)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "羅 碾矼粤邇 蓐 轢 跂迸鴈."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "亭鈬鴈蒹 ':' 辣 闔艪鉉纃 蓐纈 轢 跂迸."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "緋纈 轢 跂迸鴈 鰲鞣 糲諠."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "羅 碾矼粤 褌赭辟纃 鞳."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "緋纈 轢 跂迸鴈 褌赭辟瑩 艢 鰲鞣 糲諠."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"菩赭辟瑩\n"
+"%s\n"
+"蓐 驤迺琲鱶轢 竦纔袱."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "泌鴃萵琿 轢 粤蜻鰲蒹"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "薙諤纈 謌 蒟鴃萵琿 轢 粤蜻鰲蒹鴈?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 艢 釶 關繖闔蓿琿...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "令 鞳粹鋏蓿琿"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "帶鰰"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "呈髀諷"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "劒釶纃蒹"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "悌黹"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "諾逖轢 關釿鞐赭"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "泌闔諛矗辣 轢 碾逖轢 關釿鞐赭 艢 關蒹赭辣"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "菩赭辟"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "鮪袱諷 髀鼡"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "韆繻琿 銜 髀鼡"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "壽謦韆鞐辣 關 關蒹赭辣"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "説鴈赭鱶邇 關鈞辮矗辣 艢 邇矗 闔"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "碌繩"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "跏逑鰰()"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "韲矼韋 艢 邇矗 闔 關 髓瑁鱶鞐辣"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "令邇矗辣 轢 碌蔟褂 謗袱謐 閠闃 驪繖 關蒹赭辣"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "落礦辷"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"尤襃蓐琺纃 瘰鉗 蒟鱚站辷 髓瑩蓙\n"
+"(辣釿鞐辷纃 琲 碾矼粤轢 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "泌闔諛矗辣 轢 碾逖轢 關釿鞐赭 艢 蒟關璞琿"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "楳閠艪琿 轢 蒟關瑩纃蓿 髫釶纃 泌關瑩纃"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "泌鈔 褌粮矗 鰰瘠蔬"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "説鴈赭鱶邇 (鞳闔顏蓿繼邇)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "嚶蒻鈔 (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "楳閠粱 繧韲閻蜻褂 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "楳閠粱 繧韲閻蜻褂 (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "帙迺鞐謐 繧韲閻蜻褂 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "操謦蓍驫 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "操謦蓍驫 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "註褂 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "呶韵褂 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "墓韆謌 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "墓韆謌 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "墓韆謌 (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "墓韆謌 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "熄鉈驫 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "熄鉈驫 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "熄鉈驫 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "麗韲髓纃 褂鰰蜻褂 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "咒珞蔬蓆辣 褂鰰蜻褂 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "咒珞蔬蓆辣 褂鰰蜻褂 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "墓鰰蜻褂 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "菩鞳蜻褂 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "呀蜍琿糀褂 (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "呀蜍琿糀褂 (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"占 蒟瘰琿 `説鴈赭鱶邇', 癩粤 蒟瘰琿\n"
+"鈿鱶赭謐銜 艢 鱚褥 謗袱 褌粫鞐辣."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "鞳邇骰 褌粫鞐辣"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"嚏琅纈 鞳邇骰 菩粫鞐辣 轢 劒糲鞴琿蒹鴈(Content-Transfer-Encoding)\n"
+"蒟闔諛矗邇 褌窶鴈 謗鴈 轢 髫釶纃蒹鴈 髫糲鞴 辣-ASCII 芻瑶."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "俥舮繼蓿繼 轢 驤竝瑩齔瑩"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "説鴈赭鱶邇 碎裄琿"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "説鴈赭鱶邇 髓瑁鱶鞐辣 轢 碾逖纃 鞳籥褞鉋"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "来碆 轢 銜轢"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "鞳轢辣 轢 髫釶纃鰰 轢"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "芻琲"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "鞳轢辣 轢 蓿瑩"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "鞳轢辣 關 碾矼聹琿"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "鞳轢辣 關繖 蒟關璞琿"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "説鴈赭鱶邇 蒟瘉鞐辣 轢 琲瑰迺 艢 銜竡碆"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "帶鱶鞐辣 轢 髫釶纃蒹鴈 關 銜竡矗辣"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "蒼鴈轢 艢 銜竡碆 蒟陏謐矗 銜竡碆 粮 闔纃驫 髀蔡"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "夥韭瑩 轢 銜竡碆鞐"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "尤韋蒡琿 轢 蓿瑩"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "夥韭瑩 轢 關繽鞐琿"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 麗蔡琿蒹 轢 驤赳鉉蓿 "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "懣蔗"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "鞳矼聹琿 轢 蓐 轢 艢站珥轢 瑜 (袱鴈 'From:', 'Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "鉅瑯矗辣 轢 瘰 轢 辣關鋏纈纃蓿 粮 蓐纈 轢 閠闃瑩"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "劒褓璞珥琿 轢 邇礦轢韵褂 竦齒 闔 糲諠 銜"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "癈裄"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "泌站繖 轢 蒟矗粨瑩"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "鉅瑯矗辣 轢 闔謫瑩繼 `歴' 褌謗轢鰰, 琲 蒟關璞瑾 髓 礦"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "俥艪萵琿 轢 辷褂鱚..."
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "夥韭瑩 轢 籥鰰鰰"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "麗鞳粤辣 轢 瑩韆癈鱶 轢 蒟矗粨瑩"
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "鈑碆矗辣 轢 鉚矼矗辣 轢 髫釶纃蒹"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"鉅瑯矗辣 轢 multi-byte 瑯癈袱 蔗韆 袱鴈\n"
+"ASCII 芻瑶 (騾跪 艢 熄鉈驫)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "琿繼 髫 艢站珥轢 瑜 轢 蒟站繖 轢 髫釶纃蒹鴈"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "鉅瑯矗辣 轢 褓瑩褂 艢站珥辷 瑜鱶 蒟站繖 轢 髫釶纃蒹鴈"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "俥苟鴈辷 / 鞳粮矼鱚"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "闊襃繼()"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "暦鰰辣 轢 關鉐鴃琿髓碆 轢-銜竡鞳"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "鞳碾頏琿"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "鉉鈞蓁 髓鞐辷"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "諤硴 關繧頏琿"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "剪闃"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "俥苡矗辣 轢 關蒻鞳閻辷 蒟釶鞐聽辷"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "説鴈赭鱶轢 關鈞辮袱 轢 闔粹蔡蓿"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "鉅瑯矗辣 銜粤諷 關鈑鉋纐 轢 鞳苴謦瑩 銜 關鈞辮袱 轢 闔粹蔡"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "宅繻纃邇 髫鞐矗辣 轢 閠韲諤鰰 閠跂鴪"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "羅矗謌粱 驪繖"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "跏逑鰰()"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(囁鰰邇矗辣 轢 `0' 髫鞐矗 閠韲諤鰰\n"
+"關繚 諤鰰 驟驤)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "鞳矗琿 轢 碯鈔 關 碾矼聹琿 轢 閠韲諤"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "鉅瑯矗辣 轢 關繖齒鞳聹纃蒹 關 髓瑁鱶鞐辣, 琲 GnuPG 辣 鞐瘤鱶"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "歴矗辣 礦轢竏 轢 髫釶纃鰰 蒟瘰琿 蒟矗粨瑩"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "歴矗辣 轢 陏鞨銜 辣關鋏纈纃 髫釶纃蒹 關 硅蒟琿 閠闃"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "尤韋蒡琿 袱鴈 關鋏纈纃 騾跪 轢 髫釶纃蒹 銜碆鞳邇 邇 關鈑鉋纐"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "鷹蒟琿 碾 碯鈔瑩 褥鱶 驪繖 闔謫珥琿 轢 邇礦 髫釶纃"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "羅艢痼硴 蒟陏謐纃蒹 關 跂髓纃 蓚 蒟鴃萵琿 轢 髫釶纃"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(劒釶纃鰰 癩籥 赭韋蒡琿 粮 蒟陏謐纃蒹鴈\n"
+"琲 鴈矗 蒟裨纃)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "呈琺釿 關 闔謫珥琿"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "鉅瑯矗辣 轢 粫琺釿 關 闔謫珥琿"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "第轢竏"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "凰跪 關 顏邇 闔謫珥琿"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "来褌窶"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "槽 闔矮蓊琿 轢 粫琺釿 艢 竦纔袱 關 竦纔袱 關 闔謫珥琿"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "楳鰲瑁辣 轢 粫琺釿 關 闔謫珥琿 褌窶鴈 艢碾頽"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr "麗鞳粤辣 轢 裨珥蔕辷 褌赱蓁瑶蓙"
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "諾逖辷 褌赭辟 (%s 癩粤 艢跂辣 蓐 轢 珸 / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "嚆 瘰瑰苞"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "廷痼辣 轢 珞鞳騾 轢芻瑾纃蒹鴈 關 籵鉗邇 鞐裄琿"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "韆 蒟謌艢辣"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "銜碾鞴粤辷 關 蒟謌艢辣"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "泌蔡鰲琿 轢 菩纈 轢 蒟謌艢辣"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "蓿琿 關繖 蒟蔡鰲琿"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "鞳糂關繙粤辷 琲 蓐 髫釶纃 鈿璋袱鰰"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "韲髏鋏袱 轢 / 闔頏:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "驟褥辟()"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "轢陏謐 髫褓瑩纃銜 蓐 轢 粤謐蒻"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "陏謐銜 蓐 轢 粤謐蒻"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "髫褓瑩纃銜 蓐 轢 跂驟"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "陏謐銜 蓐 轢 跂驟"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "關繖闔蓿琿瑩 籥鰰 瑜 艢 鱚褥 謗袱"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "矼 (竡粫a/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "粤 銜 跂驟 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "瑜 袱鴈 粤驟鱶邇 蔡謗 闔諛矗蜉 24-瑜鈞 瑜鈞辷"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "瑜 袱鴈 粤驟鱶邇 蔡謗 闔諛矗蜉 12-瑜鈞 瑜鈞辷"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "粤 銜 竡粫轢鰰 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "跂驟 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "跏逑鰰鰰 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "蓚 AM 蓚 PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "驟褥辟瑩 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "粤 銜 驟粲蔬瑩 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "關繖闔蓿琿瑩 籥鰰 艢 鱚褥 謗袱"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "闔驪繖辷鱚 籵 蔗韆 銜 竡粫轢鰰"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "竡粫轢鰰 袱鴈 粤驟鱶邇 蔡謗"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "碚繻繧瑩 芬轢 蓚 蓐 蓚 髫褓璞纃蒹"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "披纃鱶蒻瑩鉋"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "麗蔡琿蒹"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "韆跂"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "麗鞳粤辣 轢 矼鴈矼 轢 髫釶纃蒹鴈"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "巵纈鈞"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "帶鱶鞐 吶襃 - 鞨 来碆"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "帶鱶鞐 吶襃 - 択鉋 来碆"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "帶鱶鞐 吶襃 - 咒纈 来碆"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI 碚芒"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "鞳蒟闔諛矗辣 轢 矼鴈矼鱚 艢 蓿瑩"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "泌痳鞳鱚 艢 蓿瑩 陏鞨 辷碆"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "泌痳鞳鱚 艢 蓿瑩 碣鉋 辷碆"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "泌痳鞳鱚 艢 蓿瑩 鴃纈 辷碆"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "泌痳鞳鱚 艢 URL"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "麗蔡琿蒹 轢 驤赳鉉蓿"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"釣鰰\n"
+"歴\n"
+"謐 蓐 轢 闔籥鱚\n"
+"鞨 蓐 轢 闔籥鱚\n"
+"罷蔬葯謌 轢 闔籥鱚\n"
+"吶赭\n"
+"廷\n"
+"Cc\n"
+"落礦轢韵褂 竦齒\n"
+"Message-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "占 x 齣鰰邇矼, 闔袱艪 expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"謗 轢 髫釶纃蒹\n"
+"帶鱶鞐邇 謗 轢 髫釶纃蒹\n"
+"謗 轢 髫釶纃蒹 痳 闔粹蔡\n"
+"帶鱶鞐邇 謗 轢 髫釶纃蒹 痳 闔粹蔡\n"
+"刪赳鉉 %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"刪赳鉉 轢裨鉈纃 辮鰰\n"
+"刪赳鉉 碾關鉐蓿繼纃 芻琲\n"
+"刪赳鉉 銜矗 褸粽珥 驫釶\n"
+"刪赳鉉 艢鰲瑁 褸粽珥 驫釶"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "泌瘤 轢 韆"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "暮珥蔕辷 褌赱蓁瑶蓙"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"泌痳鞳鱚 轢瘤 銜 裨珥蔕辷 褌赱蓁瑶蓙.\n"
+"野聽鱚 髫 籥 關鉤纃鱚 關繽鞐鳧蓿 轢 碌褌 跂迸 袱鴈 轢鱶骰纈\n"
+"褌 籥 裨珥蔕() 關 闔髓珥辣 轢 闔袱艢諷 轢 跏袱鰰 碾頤 ."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr " 闔粽瑯瘉鞐辣"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "剪瑁 Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "剋瘻鰲纃 褌逕蓊齔瑶 轢 艢站珥辷 瑜鱶"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "沃髓 骼瘻鰲纃 艢站珥辷 瑜鱶"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "羅 碾矼粤邇 蓐 轢 艢站珥轢鰰 瑜."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "泌鴃萵琿 轢 艢站珥轢 瑜"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "薙諤纈 謌 籥 蒟鴃蒹鱚 鰰艾 艢站珥轢 瑜?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 轢髓韲蜉 轢 艢站珥辷鱚 瑜鱶...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "沃髓韲蜉 轢 闔袱艪琿蓿 艢站珥褂 瑜鱶"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "緋 轢 艢站珥轢 瑜"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "鉅瑯矗辷 艢站珥辷 瑜鱶"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "刳韆鱶 艢站珥辷 瑜鱶"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "鉅瑯矗辣 轢 碌蔟褂 驫韆鱶 艢站珥辷 瑜鱶"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "怛鱚辣 轢 褌逕蓊齔瑶鰰 艢 闔袱艪琿 艢站. 瑜鱶...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "楳闊驍琿 轢 褌逕蓊齔瑶鰰 艢 闔袱艪琿 艢站. 瑜鱶...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "呀艾 艢站珥轢 瑜 矼 髀蔡袱."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "囁鰰邇矗辣 轢 蓚鵁"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "沃竡鞳"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "沃粮謫"
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_菩闊鞐辣..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "泌鴃萵琿 轢 關珥蓚"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "薙諤纈 謌 籥 蒟鴃蒹鱚 關珥蓚銜?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "泌鴃萵琿 轢 關珥蓚"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "刳韆鱶 艢站珥辷 瑜鱶"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "楳站珥轢 瑜"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "劒釶纃蒹"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "髫糲鞴"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "辣 髫糲鞴"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "悶髓纃 轢粮謫"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_菩闊鞐辣..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "羅 驟 闔謫珥"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "泌鴃萵琿 轢 閠闃"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "楳痳諷肛"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "麗鞳粤辣 轢 矼鴈矼 轢 髫釶纃蒹鴈"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_尤韋蒡琿/尤韋蒡琿 袱鴈 _關鋏纈纃"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/_繽鞐琿 袱鴈 關蓿齔袱"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/_鞳轢骼矗辣"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "泌陏謐矗辣"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "瑙袱"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "絶鞳"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "楳站珥轢 瑜"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "楳站珥轢 瑜"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "楳站珥轢 瑜"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "羅 鼕瑯琿 闔謫瑩繼"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "羅 碾矼粤 褌赭辟纃 鞳."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "羅 鼕瑯琿 轢芻瑾纃蒹."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "羅 碾矼粤 褌赭辟纃 鞳."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: 珸證 辣 髫繿鰲黷\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "占驟骼瑁 轢 閠闃"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "昼珥辷"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "落韭琺轢"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "槽 闔袱艪琿 轢 [...] 蓚 (...) 轢琺銜 轢 鱚赭 蒟矗粨瑩"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "泌鴃萵琿 轢 [...] 蓚 (...) 轢琺銜 轢 鱚赭 關 銜竡碆"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "韆諤窶辣 褸 闔粹瑙褂"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "蒟闔諛矗辣 關 銜竡碆"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Reply-To:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "尤褂鞐辣"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "韆鴦韋"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "吶赭"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "鈔瑩繼"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "釣鰰"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "落跂"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 艢 轢髓韲蜉 轢 褌謗迥蓿 轢 蒟矗粨瑩...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "麗鞳粤辣 轢 瑩韆癈鱶 轢 蒟矗粨瑩"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"泌痳鞳鱚 闔袱艪琿蓿 瑩韆癈鱶 轢 蒟站繖 轢 蒟矗粨瑩. 野聽鱚\n"
+"籥 關鉤纃鱚 闔粽繙籥辣鴈 鞳 癈鴈辷鱚 沃竡鞳/沃粮謫, 蓚 鞳 硅瑾纃 轢 瑩韆癈鱶鱚."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "沃謌辷 瑩韆癈鱶"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "鉅瑯琿 瑩韆癈鱶"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr "宅琿 褸 闔粽瑯瘉鞐蓿 驟"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "緋 轢 珀謗"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "倥竏髓韆鞐辣"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr "楳轢"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 刪赳鉉 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "倥竏髓韆鞐辷 珀謗辷"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "憊瘠鉈"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "憊瘠鉈"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "註纔袱 碾 鉋赭鰰 轢 珀謗轢."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "泌鴃萵琿 轢 珀謗轢"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "薙諤纈 謌 籥 蒟鴃蒹鱚 珀謗逧?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr ""
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "辣 跪聽 籥 驟 銜碆韆 珸證 赭韋蒡鈞褂鱚\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "辣 跪聽 籥 驟 砒繻 髫釶纃蒹鴈 %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "泌關璞琿 轢 髫釶纃蒹 銜 鈿璋袱鰰 %d 驟 關鈞琺.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "羅矗謌粤 褌赭辟纃 鞳 艢 閻瑩: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "剪瑩齣"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "劒舮珥琿 轢 粫琺釿 轢 關釿鞳騾...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "碾芻蒻轢 竦纔袱 關 闔謫珥琿 轢 籥迯.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "羅 跪聽 籥 驟 艢闊 碾 珸.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: 鈔闊髫 辣 關鈞辮纃"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "羅 轢跂鞳 闔粹蔡"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "退謌粤 闔粹蔡"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "妖太鉾津 闔粹蔡"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "赭 闢瘠蔟纃 裨 艢 關鈞辮袱 轢 闔粹蔡"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "註纔袱 關 關鈞辮矗辣 轢 闔粹蔡"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "俥芫蔟辷 鞳苴謦瑩 艢 闔粹蔡"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "註纔袱: 羅蒟矼髓纃 髓瑩齣"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "退謌粤 闔粹蔡 銜 \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "妖太鉾津 闔粹蔡 銜 \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "羅 跪聽 籥 驟 轢跂韆 闔鴃縺蓿繼驫 ID 艢 裨."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "鈔闊髫 轢關珥纃 轢 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "歴閻瑩 轢 裨: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "野 蒟痳鞳鱚 裨 艢 `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "劒瘉鞐辣 轢 蓁鉋赭 艢 '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "泌痳鞳鱚 裨鈞"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID 轢 裨"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr ""
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "廷痼辣 轢 裨"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "諾矼粤鱚 粽黹 闔鴃縺蓿繼驫 蓚 ID 轢 裨:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "鈞鞳粤轢 艢站珥轢 瑜 轢 髫釶纃蒹 鈿璋袱鰰.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "凾韃矗辣"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "凾韃矗辣 SMTP 髫鞨: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "泌關璞琿 轢 HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "噪鉐鴈矼矗辣"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "泌關璞琿 轢 髫釶纃蒹..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "泌關璞琿 轢 EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "泌關璞琿 轢 MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "泌關璞琿"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "泌關璞琿 轢 RCPT 栂..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "泌關璞琿 轢 DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "鞳褸驍琿..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "泌關璞琿 轢 髫釶纃蒹 (%d / %d 痼蜥)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "泌關璞琿 轢 髫釶纃蒹"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "礦 驟 竦纔袱 蒟關璞琿 轢 髫釶纃蒹鴈."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"礦 驟 竦纔袱 關 蒟關璞琿 轢 髫釶纃蒹鴈:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "沃髓韲蜉 轢 闔纃驫瑩 褥鱶"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"鞨 鴃痰 轢 鈿鞳粤謌鱚 跂髓鈿鉉鈕纃蒹鴈 轢 闔纃驫瑩 褥鱶.\n"
+"野聽鱚 籥 蒟闔諛矗鱚 髫繿鰲黷璞 闔纃驫 褥鱶 MH 鉋赭.\n"
+"占 辣 髓 驤笂齏, 蒟痳鞳鱚 諒."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "韲矼矗辣 轢 闔粹蔡"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s 銜 \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH 辣 轢謌纃\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "竦纔纃 SMTP 銜竡碆\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "竦纔袱 關 SMTP 驟驤鰰\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "劒舮珥琿 轢 關鈑鉋纐 蒟鈔辷 褌...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "泌鈔纃 褌 轢 髫釶纃蒹鴈"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "鉅瑯矗辣 轢 蒟鈔辷 褌 轢 %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 泌鈔纃 褌"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "辣 轢謌纃 SSLv23\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "轢謌纃 SSLv23\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "辣 轢謌纃 TLSv1\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "轢謌纃 TLSv1\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "辣 轢謌纃 SSL 跂鴈籥\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "羅闔芻瑩 SSL 跂鴈 *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "註纔袱 關 髫舮珥琿 轢 ssl 褌迺繩髓\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL 碚芒瑩 驟 關鈞琺 (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL 碚芒 蒟闔諛矗蜉 %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "刔頏蔗蒻瑩 轢 髫鞨鞐:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " 剴痳褞: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 泌籥鱚: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "咥韵纃 轢 髫釶纃"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "説鴈赭鱶邇 齣鰰邇矗辣 轢 驪繖辷鱚 珞鞳驤"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "謗:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "泌瘉鞐辣 轢 碌蔟褂 髫硼珞璞"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "廷髓蓊轢鴈 轢琺銜 轢 髀蔡袱; 關鈔諞纃蒹 銜 褓?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "廷髓蓊轢 褓 轢 髀蔡袱; 關鈔諞纃蒹 銜 轢琺銜?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/歴竡碆 _粮"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/歴竡碆 _粮/_碌蔟褂"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/歴竡碆 _粮/_闔籥鱚"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/歴竡碆 _粮/闔纃驫 _髀蔡"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/鞳_跂髓矗辣..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_菩闊鞐辣..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_尤韋蒡琿"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_尤韋蒡琿/_尤韋蒡琿"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_尤韋蒡琿/_俥芟瑁褂鞐辣"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_尤韋蒡琿/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_尤韋蒡琿/尤韋蒡琿 袱鴈 _辣關鋏纈纃"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_尤韋蒡琿/尤韋蒡琿 袱鴈 _關鋏纈纃"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_尤韋蒡琿/尤韋蒡琿 轢 _碌蔟褂 袱鴈 關鋏纈纃"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/巵纈纃 _纈蒻纈"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/倥_籥褞蒡琿 "
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/廷痼辣 轢 闔籥鱚 珞鞳骰瑩 褄蓊"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_泌站繖/_泌鈔纃 褌"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_泌站繖/_諤鰰 艢站珥轢 瑜"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_纓瑩..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr ""
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "No."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "劒舮珥琿 轢 蒟站繖 轢 蒟矗粨瑩...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "令鞐瘤鰲琿 轢 赭韋辮"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "緋 鉐鰰轢謌 赭韋辮. 薙諤纈 謌 籥 驟 釶鞐瘤?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "刳琿蒡琿 轢 閠闃 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "赭 闔矼 辣關鋏纈纃 髫釶纃"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "羅 轢跂鞳邇 辣關鋏纈纃 髫釶纃蒹. 咥韵纃 銜 褓?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "赭 辣關鋏纈纃 髫釶纃."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "羅 轢跂鞳邇 辣關鋏纈纃 髫釶纃蒹. 咥韵纃 驪繖矗瑩 閠闃?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "咥韵纃 銜邇碆"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "赭 闔矼 邇礦 髫釶纃"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "羅 轢跂鞳邇 邇碆 髫釶纃蒹. 咥韵纃 銜 褓?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "赭 邇礦 髫釶纃."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "羅 轢跂鞳邇 邇碆 髫釶纃蒹. 咥韵纃 驪繖矗瑩 閠闃?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "赭 闔矼 赭韋蒡琿 髫釶纃"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "羅 轢跂鞳邇 赭韋蒡琿 髫釶纃蒹. 咥韵纃 銜 褓?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "赭 赭韋蒡琿 髫釶纃."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "羅 轢跂鞳邇 赭韋蒡琿 髫釶纃蒹. 咥韵纃 銜 轢琺銜?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "赭 闔矼 髫釶纃 纈蒻纈"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "羅 轢跂鞳邇 髫釶纃蒹 纈蒻纈. 咥韵纃 銜 褓?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "赭 髫釶纃 纈蒻纈"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "羅 轢跂鞳邇 髫釶纃蒹 纈蒻纈. 咥韵纃 銜 轢琺銜?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "劒瘉鞐辣 轢 髫釶纃 闔 鱚赭..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d 蒟鴃蓿"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d 關繻繿鱚辷"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d 褌闊鞐辷"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr "蒟瘰琿()"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 邇礦, %d 辣關鋏纈纃, %d 釶 (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 邇礦, %d 辣關鋏纈纃, %d 釶"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "剋頏蒡琿 轢 蒟矗粨瑩..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t劒髓珥辣 轢 蒟矗粨瑩 銜 籥迯蓿 轢 髫釶纃鰰..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "劒髓珥辣 轢 蒟矗粨瑩 銜 籥迯蓿 轢 髫釶纃鰰..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "楳闊驍琿 轢 裙 轢 蒟矗粨瑩 (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(赭 釣鰰)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "劒釶纃蒹 %d 赭韋蒡琿\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "劒釶纃蒹 %d 赭韋蒡琿 袱鴈 關鋏纈纃\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "劒釶纃蒹 %d 赭韋蒡琿 袱鴈 辣關鋏纈纃\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "劒釶纃蒹 %s/%d 鈿鞳粤諷邇 艢 蒟鴃萵琿\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "泌鴃萵琿 轢 髫釶纃蒹()"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "沃蔡鱶轢 謌 聽諤纈 籥 蒟鴃蒹鱚 髫釶纃鰰 銜 褌纈?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "泌鴃萵琿 轢 闔碣瑁 驟 髫釶纃..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "劒釶纃蒹 %s/%d 鞐芟瑁褂鞐邇\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "劒釶纃蒹 %d 鈿鞳粤諷邇 艢 跂髓纃 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "沃芻瑾纃蒹鴈 髫銜 袱鴈 鱚褥瑩 閠闃."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "劒釶纃蒹 %d 鈿鞳粤諷邇 艢 褌闊鞐辣 %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "沃芻瑾纃蒹鴈 艢 褌闊鞐辣 髫銜 袱鴈 鱚褥瑩 閠闃."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "泌瘉鞐辣 轢 碌蔟褂 髫釶纃..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "諾芻蒻轢 竦纔袱 關 釶鞐瘤鳧 轢 髫釶纃鰰."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "泌竦琅籥辣 轢 辷褂鱚..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "尤琿 轢 辷褂鱚..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr ""
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "蓚鴃蒡琿..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "壽謦韆鞐辣..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr ""
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "珸 %s 矼 髫繿鰲黷\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "劒舮珥琿 轢 鱚襃鴈 蒟站繖...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "劒釶纃蒹鴈 辣 跪聽 籥 癩粤 闔袱艢邇.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "楳 籥 艢閠艾鱚 鰰艾 瑜, 蒟礦袱蜥 褌迺繩髓邇鴈 跂迸 "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "鞐裄琿 粤骰 癈鴈 蒟痳鞳鱚 `楳閠艪琿 袱鴈...'."
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"蓚 轢鱶骰纈 癈鴈轢 `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "楳 籥 礦粫鱚 鰰艾 瑜 袱鴈 鱚襃鴈碆 髫釶纃蒹, 蒟痳鞳鱚"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`鉅瑯矗辣 袱鴈 鱚襃', 蓚 轢鱶骰纈 癈鴈 `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "楳 籥 銜碆韆鱚 鰰艾 瑜 碾逖轢 關釿鞐赭, 蒟痳鞳鱚"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`歴矗辣' 蓚 `歴矗辣 髫'...,"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "蓚 鞐褄纈 籵 陏鱶, 蓚 鞐褄纈 髏繖辷 癈鴈,"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "蓚 轢鱶骰纈 癈鴈 `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "鈔闊髫 碌 銷 辣 關鈞辮纃.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "楳 籥 竡 關鈞辮蓿, 蒟礦袱蜥 褌迺繩髓邇鴈 跂迸 \n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "鞐裄琿 粤骰 癈鴈 蒟痳鞳鱚 `韲矼矗辣 轢 闔粹蔡'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "艢闊髫 %s 驟 關鈞琺.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "羅 跪聽 籥 驟 銜碆韆 珸 %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (邇韭琺纃)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP 黻鉐鴈矼矗辣)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_鞳赭矗辣 轢 闔纃驫 褥鱶"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/鞳赭矗辣 轢 IMAP 琲瑰迺"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/鞳赭矗辣 轢 琲瑰迺 艢 邇礦辷"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_劒釶纃蒹/_泌關璞琿"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_劒釶纃蒹/_鈔闊驍琿"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "赭 髫釶纃 謗袱謐瑩 闔纃驫 褥鱶.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "呈鞳褞鉋 轢 髀鼡"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "泌瘤..."
+
+#~ msgid "Condition"
+#~ msgstr "囁謗礦"
+
+#~ msgid "Keyword"
+#~ msgstr "暮鈞 糂赭"
+
+#~ msgid "Destination"
+#~ msgstr "沃芻瑾纃蒹"
+
+#~ msgid "Use regex"
+#~ msgstr "泌闔諛矗辣 轢 鞳笂鞳 蒟鞐"
+
+#~ msgid "Registered rules"
+#~ msgstr "倥竏髓韆鞐辷 關珥蓚"
+
+#~ msgid "(none)"
+#~ msgstr "(赭)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "諾矼粤邇鴈 辣 艢閠艱邇"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "諾矼粤邇鴈 辣 艢閠艱邇. 薙諤纈 謌 籥 艢鰲鉋蓿?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "菩赭辟辷 鞳 艢 銜矗辣 轢 URI e 辣矗謌粤: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "輔 籥迯蓿 騾 闔碚繖纃\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/劒舮珥琿 轢 _關珥蓚 艢 蓚鴃蒡琿"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/劒舮珥琿 轢 _關珥蓚 艢 蓚鴃蒡琿/_説鴈赭鱶邇"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/劒舮珥琿 轢 _關珥蓚 艢 蓚鴃蒡琿/闔 _闔籥鱚"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/劒舮珥琿 轢 _關珥蓚 艢 蓚鴃蒡琿/闔 _鉉齬瑩繼"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/劒舮珥琿 轢 _關珥蓚 艢 蓚鴃蒡琿/闔 _鱚赭"
+
+#~ msgid "Queueing"
+#~ msgstr "沃鞳聹琿 轢 鈿璋袱鰰 艢 蒟關璞琿"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "註纔袱 關 蒟關璞琿 轢 髫釶纃蒹鴈.\n"
+#~ "釣 竡 闔髓珥 謌 閠闃瑩 艢 鈿璋袱?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "沃鞳聹琿 轢 鈿璋袱鰰 轢 辣齣閻邇 蒟關瑩纃 髫釶纃"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_泌陏謐矗辣"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_泌瘉鞐辣 轢 碌蔟褂"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/泌瘉鞐辣 轢 _辷袱"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "辣 跪聽 籥 驟 艢籥粤 竦齒: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "髫釶纃蒹鴈 赭 籥 癩粤 闔謫纃\n"
+
+#~ msgid "/_Message/Get new ma_il"
+#~ msgstr "/_劒釶纃蒹/_鉉齬珥琿 轢 邇矗 闔"
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 00000000..4b937aa5
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/\1/g
+s/`\([^`']*\)'/\1/g
+s/ '\([^`']*\)' / \1 /g
+s/ '\([^`']*\)'$/ \1/g
+s/^'\([^`']*\)' /\1 /g
+s//""/g
+s///g
+s///g
+s///g
+s///g
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 00000000..0118c203
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,6934 @@
+# Czech translation of Sylpheed
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Jan Mura <jan_mura@altavista.com>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-05-30 13:31GMT+0100\n"
+"Last-Translator: Radek Vybral <Radek.Vybiral@vsb.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.6\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O aplikaci"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"Na GPGME m copyright od 2001 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Tento program je voln iiteln, mete jej redistribuovat a/nebo mnit tak "
+"jak to popisuje GNU General Public License publikovan Free Software "
+"Foundation a to ve verzi 2, nebo (podle vaeho uv畩en) v jakkoliv pozdj麹 "
+"verzi.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Tento program je 麹en v dobr v逖e v jeho uitenost, ale BEZ JAKKOLIV "
+"ZRUKY. Vce detail naleznete v GNU General Public License.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Kopii GNU General Public License by jste mli obdret spolen s tmto "
+"programem, pokud ne, napite na adresu Free Software Foundation, Inc., 59 "
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Na蓁tm nastaven pro vechny ty...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Nalezeno nv豺t: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Jsou stle otevena njak okna s rozepsanou zprvou.\n"
+"Ped pravou tohoto tu zavete prosm vechna tato okna."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Otevrm okno pro pravu tu...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Vytv癢m okno pro pravu tu...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "pravy t"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nov zprvy budou kontrolovny v tomto poad. Pokud m bt et\n"
+"kontrolovn pi volb 'Sthnout ve, zakrtnte pol辷ko ve sloupci 'G'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Jmno"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Pidat"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Upravit"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Smazat "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Dol"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Nahoru"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Nastavit et jako vchoz "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zavt"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Smazat et"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Opravdu chcete tento et smazat?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Ano"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Ne"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Nelze na蓁st soubor %d se zprvou"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Nelze na蓁st 葹st zprvy."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Nemohu zskat 葹st z mnoha葹sov zprvy"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"V okn pro psan zprvy nelze vybranou akci pou壌t\n"
+"protoe obsahuje %%f, %%F nebo %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Nelze spustit pkaz. Selhalo vytvoen roury.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nelze provst fork pro sputn nsledujcho pkazu:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Sputn: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Ukonen: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Vstup/vstup pro akce"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Odeslat "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Peruit"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Vlote argument pro nsledujc akci:\n"
+"('%%h' bude nahrazeno argumentem)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Skryt argument uivatele pro akci"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Vlote argument pro nsledujc akci:\n"
+"('%%u' bude nahrazeno argumentem)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Argument uivatele pro akci"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Pidat adresu do databze"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresa"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Poznmky"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Vybrat sloku pro databzi adres"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Zruit"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Soubor"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Soubor/Nov _databze"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Soubor/Nov _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Soubor/Nov _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Soubor/Nov _server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Soubor/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Soubor/Up_ravit"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Soubor/_Smazat"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Soubor/_Uloit"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Soubor/_Zavt"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresa"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresa/Nov _adresa"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresa/Nov _skupina"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresa/Nov s_loka"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresa/--"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresa/U_pravit"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresa/S_mazat"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Nstroje"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Nstroje/Importovat _LDIF soubor"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/Npo_vda"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/Npo_vda/_O aplikaci"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nov _adresa"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nov _skupina"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nov s_loka"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/p_ravy"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Smazat"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-mail adresa"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Databze adres"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Jmno:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Smazat"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Hledat"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Komu:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Kopie:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Slep kopie:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Smazat adresu(y)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Opravdu chcete smazat tuto adresu(y)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Ne"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Chcete smazat sloku '%s' A TAK vechny adresy v n? \n"
+"Pokud smaete pouze sloku, adresy budou pesunuty do nadazen sloky."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Pouze sloku"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Sloku a adresy"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Opravdu smazat '%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nov uivatel, nelze uloit index soubor."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nov uivatel, nelze uloit soubory s databz adres."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Konverze star databze adres probhla sp豺n."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Star databze adres pevedena,\n"
+"nelze uloit nov soubor s indexem"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Nelze provst konverzi databze adres,\n"
+"ale byl vytvoen nov soubor pro databzi adres."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Nelze provst konverzi databze adres,\n"
+"nelze ani vytvoit nov soubory databze adres."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Nelze provst konverzi databze adres\n"
+"a nelze ani vytvoit nov soubory databze adres."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Chyba pi konverzi databze adres"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Konverze databze adres"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Chyba v databzi adres"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Nelze na蓁st index adres"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "Star databze adres pevedena, nelze uloit nov soubor s indexem"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Nelze provst konverzi databzi adres, byl vytvoen nov soubor pro databzi "
+"adres."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Nelze provst konverzi databze adres, nelze ani vytvoit nov soubory "
+"databze."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Nelze provst konverzi databze adres a nelze ani vytvoit nov soubory pro "
+"databzi."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Chyba pi konverzi databze adres"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Konverze databze adres"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Rozhran"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Databze adres"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Osoba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Email adresa"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Skupina"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Sloka"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Spolen adresa"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Osobn adresa"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Poznmka"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Varovn"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Chyba"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Vytv癢m dialog pro varovn...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Zobrazovat p躪t tuto zprvu"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Oranov"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "erven"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rov"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Nebesk mod"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Modr"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zelen"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Hnd"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "dn"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Pidat..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Odstranit"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Vlastnosti..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Soubor/_Uloit"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Zprva/Poslat p_ozdji"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Zprva/Uloit jako _koncept"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Zprva/Uloit a pok_raovat v editaci"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Soubor/_Pipojit soubor"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Soubor/_Vloit soubor"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Soubor/Vloit p_odpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/p_ravy/_Zpt"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/p_ravy/Z_nova"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/p_ravy/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/p_ravy/_Vyjmout"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/p_ravy/_Koprovat"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/p_ravy/V_loit"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/p_ravy/Vloit jako _citaci"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/p_ravy/Vybr_at ve"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/p_ravy/_Roz麹en"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/p_ravy/_Roz麹en/Pesun o znak zpt"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/p_ravy/_Roz麹en/Pesun o znak dle"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/p_ravy/_Roz麹en/Pesun o slovo zpt"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/p_ravy/_Roz麹en/Pesun o slov dle"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/p_ravy/_Roz麹en/Pesun na za葹tek dku"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/p_ravy/_Roz麹en/Pesun na konec dku"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/p_ravy/_Roz麹en/Pesun na pedchoz dek"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/p_ravy/_Roz麹en/Pesun na dal麹 dek"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/p_ravy/_Roz麹en/Smazat znak zpt"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/p_ravy/_Roz麹en/Smazat znak vpedu"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/p_ravy/_Roz麹en/Smazat slovo zpt"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/p_ravy/_Roz麹en/Smazat slovo vpedu"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/p_ravy/_Roz麹en/Smazat dek"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/p_ravy/_Roz麹en/Smazat do konce dku"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/p_ravy/_Zarovnat aktuln odstavec"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/p_ravy/Zarovnat _vechny dlouh dky"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/p_ravy/_Koprovat"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/Z_obrazit"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/Z_obrazit/_Komu"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/Z_obrazit/K_opie"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/Z_obrazit/_Slep kopie"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/Z_obrazit/_Odpov跫 komu "
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/Z_obrazit/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/Z_obrazit/_Pedat"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/Z_obrazit/Prav_tko"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/Z_obrazit/Plo_ha"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Nstroje/_Databze adres"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Nstroje/a_blona"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Nstroje/_Akce"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Nstroje/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/p_ravy/Upravit pomoc e_xternho editoru"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Nstroje/_Akce"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Zprva/Zai_frovat"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: soubor neexistuje\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Nelze zskat 葹st textu\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Chyba v uvozovkch."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Chyba formtu odpovdi/peposln."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Soubor %s neexistuje\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Nemohu zjistit dlku souboru %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Soubor %s je przdn."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Nemohu na蓁st %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Zprva: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Nemohu zskat 葹st z mnoha葹sov zprvy."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Upraveno]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Psan zprvy%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Psan zprvy%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Nen uveden pjemce."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Odeslat"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Pedmt je przdn. Pesto mm zprvu odeslat?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "Nelze na蓁st seznam pjemc."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nen zadn et pro odesln mail.\n"
+"Ped odeslnm vyberte prosm njak et."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Vyskytla se chyba pi posln zprvy na %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Zprvu nelze uloit do odeslan poty."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Nemohu najt 鍾dn kl辷 asociovan s aktuln vybranm id kl辷e '%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "nelze zmnit md souboru\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Nelze pevst znakovou sadu zprvy z\n"
+"%s na %s.\n"
+"Pesto poslat?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "nelze zapsat zhlav\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "nelze smazat star zprvy\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "zaazuji zprvu...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "nelze najt sloku s frontou zprv\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Zprvu nelze zaadit\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "vytv癢m 蓁slo zprvy: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Vytv癢m okno pro psan...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME typ"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Dlka"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Od:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Odele zprvu"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Poslat pozdji"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Zaad do vstupn fronty a odele pozdji"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Koncept"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Ulo壌 koncept do sloky"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Vloit"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Vlo壌 soubor"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Ploha"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Pipoj soubor"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Podpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Vlo壌 podpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "prava externm editorem"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Zarovnn"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Zarovnn dlouhch dk"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Neplatn MIME typ."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Soubor neexistuje nebo je przdn."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Vlastnosti"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kdovn"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Cesta k souboru"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nzev souboru"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "patn pkaz v externm editoru: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Extern editor stle pracuje.\n"
+"Mm peruit proces?\n"
+"蓁slo procesu: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Peruen proces 蓁slo: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Doasn soubor: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Psan: vstup z externho procesu\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Nelze spustit extern editor\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Nelze zapisovat do souboru\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Nelze 蓁st\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Zprvu nelze zaadit."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Vybrat soubor"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Zruit zprvu"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Obsah zprvy se zmnil. Chcete ji stornovat?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Stornovat"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "Uloit jako koncept"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Opravdu chcete pou壌t ablonu '%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Pidat ablonu"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Nahradit"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Upravit adresu"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Pidat novou osobu"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Upravit detaily o osob"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Nebyla zadna e-mail adresa."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Mus bt zadno jmno a hodnota."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Upravit data o osob"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Zobrazit jmno"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Pjmen"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Kestn jmno"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Pezdvka"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-mail adresa"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Posunout nahoru"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Posunout dol"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Zmnit"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Vyistit"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Hodnota"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Zkladn data"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributy uivatele"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Soubor je OK."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Soubor nen ve formtu pro databzi adres."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Nelze na蓁st soubor."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Upravit databzi adres"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Otestovat soubor "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Soubor"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Pidat novou databzi adres"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Mus bt zadno jmno skupiny."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Upravit data o skupin"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Jmno skupiny"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresy ve skupin"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Dostupn adresy"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"E-mail adresy lze pesunovat do a ze skupiny pomoc tla蓁tek se ipkami"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Upravit detaily o skupin"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Pidat novou skupinu"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Upravit sloku"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Zadejte nzev sloky:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nov sloka"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Zadejte nzev sloky:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Soubor nen ve formtu pro JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Vybrat JPilot soubor"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Upravit JPilot soubor"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Dal麹 poloka(y) e-mail adresy"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Pidat nov JPilot zznam"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "sp豺n pipojeno k serveru"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Nemohu se spojit se serverem"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Upravit LDAP server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Jmno po蓁tae"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Zjistit server "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Bze pro hledn"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Vyhledvac kritria"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Reset "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind Heslo"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (vtein)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maximum poloek"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Zkladn"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Roz麹en"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Pidat nov LDAP server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Editace LDAP - Vyberte bzi pro hledn"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Dostupn() bze pro hledn"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Nelze na蓁st bze pro hledn ze serveru - zadejte je prosm run"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Soubor nen ve formtu vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Vybrat vCard soubor"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Upravit vCard zznam"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Pidat nov vCard zznam"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Export"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Zadejte clovou sloku a soubor mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Zdrojov adres癢:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Exportovan soubor:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Vybrat... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Vyberte soubor pro export"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "Selhn pi zpisu konfigurace do souboru\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Vybrat sloku"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Doruen pota"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Odeslan pota"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Fronta"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Ko"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Koncepty"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Nov sloka"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "%c neme bt obsaeno ve jmn sloky."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Sloka '%s' u existuje."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Nemohu vytvoit sloku '%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/_Vytvoit novou sloku..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/Pej_menovat sloku..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Smazat sloku"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Vyprzdnit ko"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Zkontrolovat nov zprvy"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/O_bnovit strom sloek"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Na_jt zprvy..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "dn nepeten zprvy."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Pi_hlsit diskusn skupinu..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Smazat d_iskusn skupinu"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Vytv癢m nhled pro sloku...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nov"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Nepeten"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Nastavuji informace o sloce...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Nastavuji informace o sloce..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Prohledvm sloku %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Prohledvm sloku %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Obnovit strom sloek"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Provdm obnovu stromu sloek..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Provdm obnovu stromu sloek..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Provdm obnovu stromu sloek..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Zji校uji nov zprvy ve vech slokch..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Je vybrna sloka %s\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Poslm zprvu"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Vyskytla se chyba pi posln zprvy na %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Zadejte nzev pro novou sloku:\n"
+"(Pokud chcete vytvoit sloku, kter bude mt dal麹\n"
+"podsloky, pidejte nakonec nzvu '/')"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Zadejte nov jmno pro '%s' :"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Pejmenovat sloku"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Vechny sloky a zprvy v '%s' budou vymazny.\n"
+"Chcete je opravdu smazat ?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Smazat sloku "
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Nemohu odstranit sloku '%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Vyprzdnit ko"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Vyprzdnit vechny zprvy v koi?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Opravdu odebrat potovn schrnku '%s'?\n"
+"(Zprvy NEBUDOU smazny z disku)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Odstranit potovn schrnku"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Opravdu smazat IMAP4 et '%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Smazat IMAP4 et"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Opravdu chcete smazat diskusn skupinu '%s' ?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Smazat diskusn skupinu"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Opravdu smazat et pro diskusn skupinu '%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Smazat et pro diskuzn skupinu"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Pipojit diskuzn skupinu"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Vybere diskuzn skupinu pro pihl畊en."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Najt skupiny:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Vyhledat "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nzev diskusn skupiny"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Zprvy"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Typ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Obnovit"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderovan"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "pouze pro ten"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "neznm"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Nemohu na蓁st seznam diskuznch skupin."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Hotovo."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d diskuznch skupin pijato (%s teno)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Diskusn skupiny:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Pedmt:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Vytv癢m nhled na zhlav...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(nen znm odeslatel)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(dn pedmt)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Vytv癢m nhled na obrzek...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Nemohu nahrt obrzek."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 spojen s %s:%d bylo rozpojeno. Obnovuji spojen...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "vytv癢m spojen IMAP4 s %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Nelze spustit TLS sezen.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "nelze nastavit pznak smazn: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "nelze odstranit\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "nelze nastavit pznak smazan: 1: %d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "nelze vybrat sloku: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Oznaen soubor nebyl nalezen.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "Bhem pkazu LIST se vyskytla chyba.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Nemohu vytvoit '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Nemohu vytvoit '%s' v Doruen pot\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "nelze vytvoit potovn schrnku: selhal pkaz LIST\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "nelze vytvoit potovn schrnku\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "nelze pejmenovat potovn schrnku: %s na %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "nelze smazat potovn schrnku\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "Nemohu na蓁st oblku\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Bhem na蓁tn oblky se vyskytla chyba.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "Nemohu analyzovat oblku: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Nemohu se spojit s IMAP4 serverem: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Nelze navzat relaci s IMAP4 serverem: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "nemohu najt oblku\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "nelze vybrat sloku: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Autentikace selhala."
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Nesp豺n pihl畊en k IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "Nemohu pidat %s do %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(poslm soubor...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "nelze pidat zprvu %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "nelze koprovat %d na %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "chyba pkazu sluby imap: STORE %d %d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "chyba pkazu sluby imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "chyba pkazu sluby imap: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv neme konvertovat UTF-7 na %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv neme konvertovat %s na UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Import"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Zadejte clov mbox soubor a clovou sloku."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importovan soubor :"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Clov adres癢:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Vybrat soubor pro import"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Zadejte prosm nzev databze adres a soubor pro import."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Vyberte a pejmenujte nzvy LDIF pol pro import."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Soubor importovn."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Vyberte prosm soubor."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Mus bt zadn nzev databze adres."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Chyba pi ten LDIF poloek."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Import LDIF soubor byl sp豺n."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Vbr LDIF souboru"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nzev souboru"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Poloky LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nzev atributu"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Vybrat"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Databze adres :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nzev souboru :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Zznam :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importovat LDIF soubor do databze adres"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Pedchoz"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Dal麹"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informace o souboru"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributy"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Konec"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Na蓁tm nov zprvy"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "V pohotovosti"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Zrueno"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Na蓁tm"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Hotovo (%d zprv(a) (%s) pijato)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Hotovo (Nejsou 鍾dn nov zprvy)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Spojen selhalo"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autentizace selhala"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zamknuto"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (vtein)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Dokoneno (%d nov() zprva(y))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Dokoneno (nejsou nov zprvy)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Bhem na蓁tn zprv se vyskytly chyby."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "Zskvm nov zprvy z tu %s ...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s : Na蓁tm nov zprvy"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Pipojuji se na POP3 server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Nemohu se spojit s POP3 serverem: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autentizuji..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Zskvm zprvy z %s do %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Zji校uji poet novch zprv (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Zji校uji poet novch zprv (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Zji校uji poet novch zprv (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Zji校uji poet zprv (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Vymazvm zprvu %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Ukonuji"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Na蓁tm zprvu (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Hotovo (%d zprv(a) (%s) pijato)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Spojen selhalo"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Bhem zpracovvn poty se vyskytla chyba ."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Bhem zpracovvn poty se vyskytla chyba:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Nezbylo 鍾dn msto na disku."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Nemohu zapisovat do souboru."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Chyba soketu."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Potovn schrnka je zamena."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Potovn schrnka je zamena:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Autentikace selhala."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Autentikace selhala:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "vyprel as relace\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Zaleovn zrueno\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Na蓁tm nov zprvy z %s do %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Zadejte heslo pro %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Zadejte heslo"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Zznamov protokol"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Soubor '%s' u existuje.\n"
+"Nemohu vytvoit sloku."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread nen v glib podporovn.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG nen korektn instalovno, nebo je verze pli star.\n"
+"Podpora pro OpenPGP je zakzna."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Pouit: %s [VOLBY]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresa] oteve okno pro psan nov zprvy"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach soubor1 [soubor2]...\n"
+" oteve okno pro psan zprvy s pipojenm\n"
+" souborem(y)"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive nate nov zprvy"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all nate vechny nov zprvy ze vech t"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send pole vechny pozdren zprvy"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status vyp躪e celkov poet zprv"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status vyp躪e celkov poet zprv"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug reim trasovn"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help vyp躪e tento text a skon蓁"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version vyp躪e informace o verzi a skon蓁"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Prv se vytv癢 zprva. Opravdu skonit?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Pozdren zprvy"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Ve front jsou neodeslan zprvy. Skonit nyn?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "aplikace Sylpheed je ji sputna.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Soubor/_Sloka"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Soubor/_Sloka/_Vytvoit novou sloku..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Soubor/_Sloka/_Pejmenovat sloku..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Soubor/_Sloka/_Smazat sloku"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Soubor/Pi_dat potovn schrnku...."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Soubor/Pi_dat potovn schrnku...."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Odebrat _potovn schrnku"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Soubor/_Sloka/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Zkontrolovat nov zprvy"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Soubor/_Sloka/_Zkontrolovat nov zprvy ve vech slokch"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/O_bnovit strom sloek"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Soubor/_Importovat soubor mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Soubor/E_xportovat do mbox souboru..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Soubor/_Vyprzdnit ko"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Soubor/Uloit j_ako..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Soubor/_Tisk..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Soubor/_Vloit soubor"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Soubor/_Konec"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/p_ravy/Vybrat _vlkno"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_pravy/_Najt v aktuln zprv..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_pravy/Na_jt zprvy..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Strom sloek "
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/N_hled na zprvu"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Nstrojov lita"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Nstrojov lita/Ikony _a text"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Nstrojov lita/_Ikony"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Nstrojov lita/_Text"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/_Nstrojov lita/_Nic"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/Z_obrazit/Zobrazit nebo s_krt/Stavov _lita"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/Z_obrazit/Samostatn s_trom sloek "
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/Z_obrazit/Samostatn pro_hldnut zprvy"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/Z_obrazit/Setd_it"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/Z_obrazit/Setd_it/podle 蓁_sla"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/Z_obrazit/Setd_it/podle _velikosti"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/Z_obrazit/Setd_it/podle _data"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/Z_obrazit/Setd_it/podle _od koho"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/Z_obrazit/Setd_it/podle odes_latele"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/Z_obrazit/Setd_it/podle p_edmtu"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/Z_obrazit/Setd_it/podle _barevn znaky"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/Z_obrazit/Setd_it/podle o_znaen"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/Z_obrazit/Setd_it/podle ne_petench"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/Z_obrazit/Setd_it/podle pipo_jench soubor"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/Z_obrazit/Setd_it/_Netdit"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/Z_obrazit/Setd_it/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/Z_obrazit/Setd_it/Vzestupn"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/Z_obrazit/Setd_it/Sestupn"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/Z_obrazit/Setd_it/_Zskat z pedmtu"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/Z_obrazit/Zobrazit _vlkna"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/Z_obrazit/Rozbalit ve_chna vlkna"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/Z_obrazit/_Sbalit vechna vlkna"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/Z_obrazit/Nastavit zobrazen po_loky..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/Z_obrazit/_Pejt"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/Z_obrazit/_Pejt/P_edchoz zprva"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/Z_obrazit/_Pejt/_Dal麹 zprva"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/Z_obrazit/_Pejt/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/Z_obrazit/_Pejt/Pedchoz nepeten zp_rva"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/Z_obrazit/_Pejt/Dal麹 nepe_ten zprva"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/Z_obrazit/_Pejt/_Pedchoz nov zprva"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/Z_obrazit/_Pejt/Dal麹 n_ov zprva"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/Z_obrazit/_Pejt/Ped_choz oznaen zprva"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/Z_obrazit/_Pejt/Dal麹 oz_naen zprva"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/Z_obrazit/_Pejt/Pedchoz _zprva s nv豺tm"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/Z_obrazit/_Pejt/Da_l麹 zprva s nv豺tm"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/Z_obrazit/_Pejt/Do _jin sloky"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/Z_obrazit/_Znakov sada/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/Z_obrazit/_Znakov sada"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/Z_obrazit/_Znakov sada/_Autodetekce "
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/Z_obrazit/_Znakov sada/7bitov ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/Z_obrazit/_Znakov sada/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/Z_obrazit/_Znakov sada/Zpadn Evropa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/Z_obrazit/_Znakov sada/Zpadn Evropa (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/Z_obrazit/_Znakov sada/Stedn Evropa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/Z_obrazit/_Znakov sada/_Baltsk (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/Z_obrazit/_Znakov sada/Baltsk (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/Z_obrazit/_Znakov sada/eck (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/Z_obrazit/_Znakov sada/Tureck (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/Z_obrazit/_Znakov sada/Azbuka (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/Z_obrazit/_Znakov sada/Azbuka (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/Z_obrazit/_Znakov sada/Azbuka (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/Z_obrazit/_Znakov sada/Azbuka (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/Z_obrazit/_Znakov sada/Japonsk (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/Z_obrazit/_Znakov sada/Japonsk (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/Z_obrazit/_Znakov sada/Japonsk (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/Z_obrazit/_Znakov sada/Japonsk (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/Z_obrazit/_Znakov sada/Zjednoduen 蓁nsk (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/Z_obrazit/_Znakov sada/Tradin 蓁nsk (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/Z_obrazit/_Znakov sada/Tradin 蓁nsk (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/Z_obrazit/_Znakov sada/罷nsk (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/Z_obrazit/_Znakov sada/Korejsk (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/Z_obrazit/_Znakov sada/Korejsk (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/Z_obrazit/_Znakov sada/Thajsk (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/Z_obrazit/_Znakov sada/Thajsk (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/Z_obrazit/Otevt v _novm okn"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/Z_obrazit/Zd_roj zprvy"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/Z_obrazit/Zobrazit vechna z_hlav"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/Z_obrazit/_Aktualizace souhrnu"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Zprva"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Zprva/Znov_u editovat"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Zprva/Pijmout _ze vech t"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Zprva/Pijmout _ze vech t"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Zprva/Peruit p_jem zprv"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Zprva/Znov_u editovat"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Zprva/Odeslat pozd_ren zprvy"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Zprva/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Zprva/_Nov zprva"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Zprva/_Odpovdt"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Zprva/Odpo_vdt komu"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Zprva/Odpo_vdt komu/_vem"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Zprva/Odpo_vdt komu/_odeslateli"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Zprva/Odpo_vdt komu/do _diskusnho listu"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Zprva/Pedat d_l"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Zprva/Peposlat _jako plohu"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Zprva/Pesmrov_at"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Zprva/Pe_sunout..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Zprva/_Koprovat..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Zprva/S_mazat"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Zprva/Ozna_it"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Zprva/Ozna_it/_Oznait"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Zprva/Ozna_it/_Zruit oznaen"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Zprva/Ozna_it/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Zprva/Ozna_it/Oznait jako _nepeten"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Zprva/Ozna_it/Oznait jako _petenou"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Zprva/Ozna_it/Oznait _vechny jako peten"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Zprva/Znov_u editovat"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Nstroje/Pidat odeslatele do a_dres癢e"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Nstroje/_Filtr zprv "
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Nstroje/_Filtr zprv "
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Nstroje/_Vytvoen filtru"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Nstroje/_Vytvoen filtru/_Automaticky"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Nstroje/_Vytvoen filtru/podle _Od"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Nstroje/_Vytvoen filtru/podle _Komu"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Nstroje/_Vytvoen filtru/podle _Pedmtu"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Nstroje/_Smazat duplikovan zprvy"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Nstroje/S_pustit"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Nstroje/Okno _zznam "
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/Nastav_en"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/Nastav_en/_Spolen nastaven..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/Nastav_en/Nastaven _filtr..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/Nastav_en/a_blona..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/Nastav_en/_Akce..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/Nastav_en/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/Nastav_en/Nas_taven aktulnho tu..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/Nastav_en/Zaloit _nov et..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/Nastav_en/_pravy t..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/Nastav_en/_Zmna aktulnho tu"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/Npo_vda/_Manul"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/Npo_vda/_Manul/_Anglicky"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/Npo_vda/_Manul/_Japonsky"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/Npo_vda/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/Npo_vda/_FAQ/_Anglicky"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/Npo_vda/_FAQ/_Nmecky"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/Npo_vda/_FAQ/_panlsky"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/Npo_vda/_FAQ/_Francouzsky"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/Npo_vda/_FAQ/_Italsky"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/Npo_vda/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Vytv癢m hlavn okno...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Hlavn okno: barevn rozvren %d bylo nesp豺n\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "hotovo.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Neoznaen"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "鍾dn"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Mnm typ oddlovae oken z %d na %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Vyprzdnit ko"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Vyprzdnit vechny zprvy v koi?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Pidat potovn schrnku"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Zadejte umstn pro potovn schrnku.\n"
+"Pokud je zadn existujc, bude automaticky\n"
+"prohledn."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Potovn schrnka '%s' ji existuje."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Potovn schrnka"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Vytv癢en potovn schrnky se nezdailo.\n"
+"Me to bt tm, e schrnka ji existuje, nebo nemte dostaten prva\n"
+"pro zpis."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Zobrazen sloky"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Zobrazen zprvy"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Odpovdt"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odpovd vem"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Odpovdt _komu/_odeslateli"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Odpovdt _komu/do _diskusnho listu"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/P_edat dl"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Peposlat _jako plohu"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Pes_mrovat"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Sthnout"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Zalenit novou potu"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Sthnout ve"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Zalen novou potu ze vech t"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Odele pozdrenou zprvu(y)"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Napsat"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Vytv癢 novou zprvu"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odpovdt"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odpovd na zprvu"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odpov. vem"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odpovd vem"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Poslat dl"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Pedv zprvu dl"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Smazat zprvu"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Provst"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Provst oznaen proces "
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Dal麹 nepetenou zprvu"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Nastaven"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Spolen nastaven"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "晄et"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Nastaven tu"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Ukonen programu"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Chcete ukonit tento program?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "Nemohu zapisovat do doasnho souboru\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Zskvm zprvy z %s do %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Nemohu pe蓁st soubor s potovn schrnkou.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "Neplatn formt potovn schrnky: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "Selhn potovn schrnky: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "Nemohu otevt doasn soubor\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d zprv nalezeno.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "Nemohu vytvoit uzamen soubor %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "pokud to jde, pouijte 'flock' msto 'file'.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "Nemohu vytvoit %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "potovn schrnka je vlastnna jinm procesem, ekejte...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "Nemohu uzamknout %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "Neplatn typ zmku\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "Nemohu odemknout %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "nemu smazat potovn schrnku.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportuji zprvy z %s do %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Hledat v aktuln zprv"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Najt text:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Rozliovat mal a velk psmena"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Hledat nazpt"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Vyhledat"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Nesp豺n hledn"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Hledan etzec nebyl nalezen."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Dosaen za葹tek zprvy, pokraovat od konce?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Dosaen konec zprvy, pokraovat od za葹tku?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Hledn ukoneno"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Vyvolvm zobrazen zprvy...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Uloit jako"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Pepsat"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Pepsat existujc soubor?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Nemohu uloit soubor '%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Tisk"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Vlote pkazovou dku pro tisk:\n"
+"('%s' bude nahrazeno jmnem souboru)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Pkazov dka pro tisk je neplatn:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "Nemohu zkoprovat zprvu %s do %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Nemohu otevt oznaen soubor.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "zdrojov sloka je stejn jako clov.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopruji zprvu %s%c%d do %s...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Posledn poet v adres癢i %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Otevt"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Ot_evt 蓁m..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Zobrazit jako text"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Uloit jako..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Z_kontrolovat podpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Vyvolvm zobrazen MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME Typ"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Text"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Plohy"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Vyberte \"Zkontrolovat podpis\" pro ov踐en"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Nemohu uloit 葹st z mnoha葹sov zprvy."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Otevt 蓁m"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Vlote pkazovou dku pro oteven souboru:\n"
+"('%s' bude nahrazeno jmnem souboru)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Neplatn pkazov dka prohl躱ee MIME: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "Vytv癢m NNTP spojen s %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP spojen %s:%d bylo perueno. Obnovuji spojen...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "pspvek %d u byl v mezipamti.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "Zskvm pspvek %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "Nemohu 蓁st pspvek %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "Nemohu na蓁st seznam diskuznch skupin\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "Nemohu odeslat pspvek.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "Nemohu na蓁st pspvek %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "Nemohu vybrat skupinu: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "neplatn rozsah pspvk: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "dn nov pspvek.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "zskvm xover %d - %d v %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "nelze zskat xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "Bhem zskvn xover se vyskytla chyba.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "Neplatn xover dka: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "nelze zskat xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "Bhem zskvn xhdr se vyskytla chyba .\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Nemohu se spojit s NNTP serverem: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "Chyba protokolu: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "Chyba protokolu\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Bhem odesln se vyskytla chyba\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Bhem odesln poty se vyskytla chyba ."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Passphrase"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[bez id uivatele]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s Zadejte prosm passphrase pro:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"patn passphrase! Zkuste to znovu...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "V pozdravu nebyla nalezena APOP asov znaka\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Chyba syntaxe pro asovou znaku pi pozdravu\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Chyba protokolu POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "Neplatn xover dka: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Vymazvm starou zprvu %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Peskakuji zprvu %d (%d byt)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "potovn schrnka je zamena\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "vyprel as relace\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "Nelze spustit TLS relaci\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "Vyskytla se chyba v autentizaci\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "Pkaz nen podporovn\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "v POP3 relaci se vyskytla\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Na蓁tm konfiguraci..\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Nalezen %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Na蓁tn konfigurace dokoneno.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfigurace je uloena.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Pou壌t"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Oteven okna s nastavenm tu...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "晄et%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Nastaven pro nov et"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Nastaven tu"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Vyvoln okna pro nastaven tu...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Pjem"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Soukrom"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Roz麹en"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nzev tohoto tu"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Nastavit jako vchoz"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Osobn informace"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Cel jmno"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Potovn adresa"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizace"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informace o serveru"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "dn (mstn)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Tento server vyaduje autentizaci"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "News server"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server pro pjem"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP server (odesln)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Uivatelsk jmno"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Heslo"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Tento server vyaduje autentizaci"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Smazat zprvy na serveru po jejich pijmut"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Odstranit po"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dnech"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dn: odstranit ihned)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Pijmout vechny zprvy ze serveru"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Limit velikosti pro pjem"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtr zprv pro pjem"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Vchoz inbox"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nefiltrovan zprvy budou uloeny v tto sloce)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Metoda autentizace"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automaticky"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "Pi volb 'Sthnout ve' zjistit nov zprvy"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Zhlav"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Pidat do zhlav pole s datumem"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generovat 蓁slo zprvy"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Pidat uivatelsky definovan zhlav"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Upravit..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autentizace"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP autentizace (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Pokud nechte tyto poloky przdn, bude\n"
+"pouito stejn jmno uivatele a heslo."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autentizace s POP3 ped poslnm"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Vstup pkazu"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Automaticky nastavit nsledujc adresy"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Kopie"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Slep kopie"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Odpovdt komu"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Vdy zaifrovat zprvu"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Vdy pidat podpis"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Pou壌t formt ASCII-armored pro zaifrovn"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Pou壌t ist textov podpis"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Kl辷 pro podpis"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Pou壌t vchoz GnuPG kl辷"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Vybrat kl辷 podle email adresy"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Zadat kl辷 run"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Uivatel nebo ID kl辷e:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Nepou壌vat SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Pou壌t SSL pro POP3 spojen"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Pou壌t pkaz STARTTLS pro sputn SSL relace"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Pou壌t SSL pro IMAP4 spojen"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Pou壌t SSL pro NNTP pipojen"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Odesln (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Pou壌t SSL pro SMTP pipojen"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Urete SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Urete POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Urete IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Urete NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Urete nzev domny"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "adres癢 pro IMAP server"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Ukldat odeslan zprvy do"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Ukldat koncepty do"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Ukldat smazan zprvy do"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Nebylo zadno jmno tu."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Nebyla zadna potovn adresa."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Nebyl zadn SMTP server."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Nebylo zadno uivatelsk 蓁slo."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Nebyl zadn POP3 server."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Nebyl zadn IMAP4 server."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Nebyl zadn NNTP server."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Nen doporueno pou壌vat star麹 styl ifrovn zprv\n"
+"ASCII-armored. Nevyhovuje toti specifikaci\n"
+"RFC 3156 - MIME Security s OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Nastaven akc"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nzev nabdky:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Pkazov dka:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nzev nabdky:\n"
+" Pokud chcete vytvoit podnabdku, pouijte v nzvu /.\n"
+"Pkazov dka:\n"
+" Za蓁n na:\n"
+" | pole obsah zprvy nebo vbru do pkazu\n"
+" > pole uivatelem definovan text do pkazu\n"
+" * pole uivatelem definovan skryt text do pkazu\n"
+" Kon蓁 na:\n"
+" | nahrad tlo zprvy nebo vbru vstupem z pkazu\n"
+" > vlo壌 vstup pkazu bez nahrazen starho textu\n"
+" & spust pkaz asynchronn\n"
+" Pouit:\n"
+" %f pro nzev zprvy\n"
+" %F pro seznam nzv soubor nebo vybranch zprv\n"
+" %p pro vybran 葹sti zprvy\n"
+" %u pro argument zadan uivatelem\n"
+" %h pro skryt argument zadan uivatelem\n"
+" %s pro vybran text"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Nahradit "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Npovda k syntaxi "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrovan akce"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nov)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Nen nastaven nzev nabdky."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "V nzvu nabdky nen povolena dvojteka ':'."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Nzev nabdky je pli dlouh."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Nen nastavena pkazov dka."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Nzev nabdky a pkaz jsou pli dlouh."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Pkaz\n"
+"%s\n"
+"m syntaktickou chybu."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Smazat akci"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Opravdu chcete smazat tuto akci?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Vytv癢m okno hlavnho nastaven...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Spolen nastaven"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citovn"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Zobrazen"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Zprva"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Ostatn"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Extern program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Pou壌t extern program k zalenn"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Pkaz"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Mstn spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Zalenit ze spoolu"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtr na zalenn"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automatick kontrola nov poty"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "kadch"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minut(y)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Kontrola nov poty pi sputn"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Po zalenn aktualizovat vechny lokln sloky"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Diskuzn skupiny"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximln poet pspvk pro staen\n"
+"(0 pro neomezen poet)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Pou壌t extern program pro posln"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Uloit odeslan zprvy do sloky Odeslan pota"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Vstupn znakov sada"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatick (doporueno)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bitov ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Zpadn Evropa (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Zpadn Evropa(ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Stedoevropsk (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltick (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltick (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "eck (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Tureck (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Azbuka (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Azbuka (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Azbuka (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Azbuka (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonsk (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonsk (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonsk (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Zjednoduen 蓁nsk (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradin 蓁nsk (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradin 蓁nsk (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "罷nsk (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korejsk (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thajsk (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thajsk (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Pokud je zvoleno 'Automatick', bude pouita\n"
+"znakov sada podle locale."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Kdovn penosu"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Uruje jak v jak znakov sad bude zprva\n"
+"poslna kdy obsahuje ne-ASCII znaky."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Oddlova podpisu"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Automaticky vloit"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automaticky spustit extern editor"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "rove zptnch krok"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Zarovnat zprvu na"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znak"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Zalomit citaci"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Zalomit pi pijmut"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Zalomit ped odeslnm"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automaticky vybrat et pro odpovdi"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citovat zprvy pi odpovdn"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Tla蓁tko s odpovd zvol odpov跫 do diskusnho listu"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formt odpovdi"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Znaka pro citaci"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formt peposln"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Popis symbol "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Psmo"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Pekldat nzvy zhlav (jako napklad 'Od:', 'Pedmt:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Zobrazit poet nepetench za nzvem sloky"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Zkrtit nzvy diskuznch skupin del麹 ne"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "dopisy()"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Souhrnn pohled"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Zobrazit pjemce ve sloupci 'Od', jestlie odeslatel jste vy sm"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Rozbalit vlkna"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formt datumu"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Nastaven zobrazench poloek v souhrnu... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Povolit zabarven zprv"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Zobrazit vce-bytovou abecedu a 蓁slice\n"
+"jako ASCII znaky (pouze pro Japonsko)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Zobrazit okno se zhlavm nad zprvou"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Zobrazit krtk zhlav pi zobrazen zprvy"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Przdn dka"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(y)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Vynechat przdn msto v zhlav"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Posun"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Polovina strnky"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Jemn posun"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Krok"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Zmnit velikost pipojench obrzk"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automaticky zkontrolovat podpis"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Zobrazit vsledek testovn podpisu v popup okn"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Uloit passphrase doasn v pamti"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Vypr麹 za"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minut(y) "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Nastaven na '0' ulo壌 passphrase\n"
+" pro celou relaci)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr ""
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Zobrazit varovn pokud GnuPG nefunguje"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Vybran zprvy vdy otvrat v pehledu"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Pi vstupu do sloky otevt prvn nepetenou zprvu"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Oznait zprvu za petnou pouze pi oteven v novm okn"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Po pijet novch zprv pejt na Doruenou potu"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Vykonat ihned pi pesunu nebo mazn zprv"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Pokud je tato volba vypnuta,\n"
+"zprvy budou oznaeny a do vykonn)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Dialog o pijet"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Zobrazit dialog o pijet"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Vdy"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nikdy"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Pi pjmu chyby nezobrazovat popup dialog"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Zavt dialog o pijet po dokonen"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Nastavit klvesov zkratky... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Extern pkaz (%s bude nahrazen jmnem souboru / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Webov prohl躱e"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Pidat adresu do cle dvojklikem"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Pi ukonen"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potvrdit ukonen"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Pi ukonen vyprzdnit ko"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Potvrdit vyprzdnn"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Varovat pokud jsou zprvy ve front"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "as vypren pro I/O:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "sekund(a)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "zkratky pro nzvy dn v tdnu"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "pln nzev dne v tdnu"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "zkratka pro msc"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "pln nzev msce"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "preferovan datum a as podle aktulnho locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "stolet (rok/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "den v msci 蓁seln"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "hodiny 蓁seln s 24 hodinovch cyklem"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "hodiny 蓁seln s 12 hodinovch cyklem"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "rok 蓁seln"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "msc 蓁seln"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minuty 蓁seln"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM nebo PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "vteiny 蓁seln"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "den v tdnu 蓁seln"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "preferovan datum pro aktuln locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "posledn dv 蓁slice z roku"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "rok jako destkov 蓁slo"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "asov zna, nzev nebo zkratka"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Specifiktor"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Popis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Pklad"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Nastaven barev pro zprvy"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Barvy"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citovan text - Prvn rove"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citovan text - Druh rove"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citovan text - Tet rove"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI odkaz"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Rotovat barvy citac"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Zvolte barvu pro 1 rove citace"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Zvolte barvu pro 2 rove citace"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Zvolte barvu pro 3 rove citace"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Zskat barvu z URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Popis symbol"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Od\n"
+"Cel jmno odeslatele\n"
+"Kestn jmno odeslatele\n"
+"Inicily odeslatele\n"
+"Pedmt\n"
+"Komu\n"
+"Kopie\n"
+"Diskuzn skupina\n"
+"罷slo zprvy"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr ""
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Tlo zprvy\n"
+"Citovan tlo zprvy\n"
+"Tlo zprvy bez podpisu\n"
+"Citovan tlo zprvy bez podpisu\n"
+"Znak %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Znak zptn lomtko\n"
+"Znak otaznk\n"
+"Znak lev sloen zvorka\n"
+"Znak prav sloen zvorka"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Vbr psma"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Klvesov zkratky"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Vyberte klvesov zkratky.\n"
+"Klvesovou zkratku pro nabdku mete tak zmnit tak,\n"
+"e pi najet my麹 na poloku stisknete odpovdajc klvesu."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Vchoz"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Star Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Vlastn nastaven zhlav"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Vlastn zhlav"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Nen nastaven nzev zhlav."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Smazat zhlav"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Opravdu chcete smazat toto zhlav?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Vytv癢m okno pro zobrazen nastaven zhlav...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Zobrazit nastaven zhlav"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Nzev zhlav"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Zobrazen zhlav"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skryt zhlav"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Zobrazit vechny nespecifikovan zhlav"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Na蓁tm konfiguraci zobrazovanho zhlav...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Zapisuji konfiguraci zobrazovanho zhlav...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Toto zhlav je ji v seznamu."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Nastaven filtru"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Komu:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Koprovat..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Smazat pravidlo"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Opravdu chcete smazat toto pravidlo?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Smazat pravidlo"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Vechna zhlav"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Zhlav"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Zprva"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "obsahuje"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "neobsahuje"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Posunout dol"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Koprovat..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Nedoruit"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Odebrat diskusn server"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Poznmky"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Nastaven barev pro zprvy"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Oznait/Oznait jako p_eten"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Peposlat _jako plohu"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Pes_mrovat"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Provst"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Sloka"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adresa"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Zhlav"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Zhlav"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Zhlav"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Nen uveden pjemce."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Nen nastavena pkazov dka."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Msto uren nen nastaven."
+
+#: src/prefs_filter_edit.c:1872
+#, fuzzy
+msgid "Invalid action exists."
+msgstr "Nesprvn msc\n"
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Nen nastavena pkazov dka."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: soubor neexistuje\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Vlastnosti sloky"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Obecn"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normln"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Nezobrazovat v pehledu na za葹tku pedmtu [...] nebo (...)"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Pi odpovdi smazat ze za葹tku pedmtu [...] nebo (...)"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Zahrnout podsloky"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "pou壌t tak pi odpovdi"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Odpovdt komu:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Oznait"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Ploha"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Pedmt"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "罷slo"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Vytv癢m okno pro nastaven sloupc pro pehled...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Nastaven poloky v pehledu"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Vyberte poloky, kter chcete zobrazit v celkovm pohledu. Mete zmnit\n"
+"poad pomoc tla蓁tek Nahoru / Dol nebo petaenm poloek."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Dostupn poloky"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Zobrazen poloky"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Nvrat k vchoz "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nzev ablony"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrovat"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Nahradit "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symboly "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrovan ablony"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "ablony"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "ablona"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Chyba formtu v ablon."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Smazat ablonu"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Opravdu chcete smazat tuto ablonu?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Nesp豺n konverze kdu.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "nelze otevt oznaen soubor\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "nelze na蓁st zprvu %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Nesp豺n posln zprvy %d z fronty.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Neplatn pkazov dek tisku: '%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Stav"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Vytv癢m dialog procesu...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "Bhem obnovy dat se vyskytla chyba.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Nemohu zapisovat do souboru.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Podpis nen verifikovn"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Podpis nenalezen"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Sprvn podpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "PATN podpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nelze najt veejn kl辷 pro podpis"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Chyba pi verifikaci podpisu"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Rzn vsledky pro podpisy"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Chyba: Neznm status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Sprvn podpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "PATN podpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Nemohu najt ID uivatele pro tento kl辷."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " alias \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Podpis vyrobil %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Key fingerprint: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Vyberte prosm kl辷 pro '%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Zskvm info pro '%s'... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Vybrat kl辷e"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID kl辷e"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Pidat kl辷"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Zadejte dal麹ho uivatele nebo kl辷ov ID:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Fronta hlaviek zprv je pokozen.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Pipojen"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Pipojuji se na SMTP server: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Poslm HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autentizuji"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Poslm zprvu"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Poslm EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Poslm MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Odesln"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Poslm RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Poslm DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Ukonuji..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Poslm zprvu (%d / %d byt)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Poslm zprvu"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Pi posln zprvy nastala chyba."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Pi odesln zprvy nastala chyba:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Nastaven potovn schrnky"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Nejprve nastavte umstn potovn schrnky.\n"
+"Pokud ji njakou mte, mete pou壌t\n"
+"potovn schrnku v MH formtu.\n"
+"Pokud si nejste jisti, stisknte pouze OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Zkontrolovat podpis"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s od \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH je nedostupn\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "patn odpov跫 od SMTP\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "v SMTP relaci se vyskytla chyba\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Vytv癢m zdrojov okno...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Zdroj zprvy"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Zobrazuji zdroj pro %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Zdroj"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 je nedostupn\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 je dostupn\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 je nedostupn\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 je dostupn\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL metoda je nedostupn\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Neznm SSL metoda *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Chyba pi vytv癢en ssl kontextu\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL spojen selhalo (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL spojen pou壌v %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certifikt serveru:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Pedmt: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Vydavatel: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Vyhledat zprvy"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Automaticky nastavit nsledujc adresy"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Tlo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Vybrat vechny oznaen"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Dosaen za葹tek seznamu, pokraovat od konce?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Dosaen konec seznamu, pokraovat od za葹tku?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Odpovdt _komu"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Odpovdt _komu/_vem"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Odpovdt _komu/_odeslateli"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Odpovdt _komu/do _diskusnho listu"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Pesunout..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Koprovat..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Oznait"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Oznait/_Oznait"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Oznait/_Zruit oznaen"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Oznait/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Oznait/Oznait jak_o nepeten"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Oznait/Oznait jako p_eten"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Oznait/Oznait vechny jako _peten"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/_Barevn oznaen"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Z_novu upravit"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Pidat odeslatele do data_bze adres"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Zobrazit/_Zdroj"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Zobrazit/Vechna z_hlav"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Tisk..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "罷s."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Vytv癢m celkov pohled...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Zpracovat oznaen"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Zbyly njak oznaen. Zpracovat je?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Prohledvm sloku (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Nejsou ji 鍾dn nepeten zprvy"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nebyla nalezena 鍾dn nepeten zprva. Hledat od konce?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "dn nepeten zprvy."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Nebyla nalezena 鍾dn nepeten zprva. Chcete jt do dal麹 sloky?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Hledat znova"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Nejsou ji 鍾dn nov zprvy"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Nebyla nalezena 鍾dn nov zprva. Hledat od konce?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "dn nov zprvy."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Nebyla nalezena 鍾dn nov zprva. Chcete jt do dal麹 sloky?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Nejsou ji 鍾dn oznaen zprvy"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Nebyla nalezena 鍾dn nepeten zprva. Hledat od konce?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "dn neoznaen zprva."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Nebyla nalezena 鍾dn neoznaen zprva. Hledat od za葹tku?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Nejsou ji 鍾dn zprvy s nv豺tm"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Nebyla nalezena 鍾dn zprva s nv豺tm. Hledat od konce?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "dn zprva s nv豺tm."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nenalezena 鍾dn zprva s nv豺tm. Hledat od za葹tku?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Zskvm zprvy od osoby..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d smazan"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d pemstn"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s %d zkoprovno"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " poloky(ek) vybrny"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nov(), %d nepeten(), celkem %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novch, %d nepetench, %d celkem"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Celkov setdn..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tNastavuji pehled z dat zprv..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Nastavuji pehled z dat zprv..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Zapisuji celkovou mezipam貉 (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(dn datum)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Zprva %d je oznaena\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Zprva %d je oznaena jako peten\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Zprva %d je oznaena jako nepeten\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Zprva %s/%d je nastavena ke smazn\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Smazat zprvu(y)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Opravdu chcete smazat tuto zprvu(y) z koe?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Vymazvm duplikovan zprvy..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Zprva %s/%d je odznaena\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Zprva %d je nastavena pro pesun do %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Clov poloka je stejn jako aktuln sloka."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Zprva %d je nastavena pro koprovn do %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Cl koprovn je stejn jako aktuln sloka."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Vybrm vechny zprvy..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Bhem zpracovvn poty se vyskytla chyba ."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Vytv癢m vlkna..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Ru麹m vlkna..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Ru麹m vlkna..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtruji..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtruji..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "Zprva %d u byla v mezipamti.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "soubor '%s' u existuje\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Vytv癢m zobrazen textu...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "zprva nebyla pijata\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Pro uloen tto 葹sti vyvolejte kontextovou nabdku pomoc "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "pravho tla蓁tka myi a zvolte 'Uloit jako...' "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"nebo stisknte klvesu 'y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "K zobrazen tto 葹sti jako textov zprvy vyberte "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"'Zobrazit jako text', nebo stisknte klvesu 't'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "K oteven tto 葹sti pomoc externho programu vyberte "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "'Otevt' nebo 'Otevt 蓁m...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "nebo poklepejte dvakrt i klepnte na stedn tla蓁tko, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "nebo stisknte klvesu 'I'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Tento podpis nebyl zatm kontrolovn.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Pro zkontrolovn vyvolejte kontextovou nabdku pomoc\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "pravho tla蓁tka myi a zvolte 'Zkontrolovat podpis'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "Nesp豺n zpis do %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Nelze otevt soubor %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normln)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Odebrat _potovn schrnku"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Odebrat _IMAP4 et"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/S_mazat et pro diskusn skupinu"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Zprva/_Poslat"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Zprva/Po_depsat"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "dn zprvy v mstn potovn schrnce.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spool adres癢"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Peruen akc"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Vybrat... "
+
+#~ msgid "Condition"
+#~ msgstr "Podmnka"
+
+#~ msgid "Keyword"
+#~ msgstr "Kl辷ov slovo"
+
+#~ msgid "Destination"
+#~ msgstr "Msto uren"
+
+#~ msgid "Use regex"
+#~ msgstr "Pou壌t regulrn vraz "
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrovan pravidla"
+
+#~ msgid "(none)"
+#~ msgstr "(鍾dn)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Neuloen zznam."
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "Zznam nebyl uloen. Chcete pesto okno zavt?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Neplatn pkazov dek URI: '%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Data v mezipamti jsou poruena\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Vytvoit filtr"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Vytvoit filtr/_Automaticky"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Vytvoit filtr/podle _Od"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Vytvoit filtr/podle _Komu"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Vytvoit filtr/podle _Pedmtu"
+
+#~ msgid "Queueing"
+#~ msgstr "Zaazuji"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Pi odesln zprvy nastala chyba.\n"
+#~ "Chcete zprvu zaadit do vstupn fronty?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Zprvy, kter se nepodailo odeslat, zaadit do fronty"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/S_pustit"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Vybrat _ve"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Vybrat _vlkno"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "Nemohu nastavit skupinu: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "zprva nebyla pijata\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Zprva/_Pjem nov poty"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tdn soubor v mezipamti\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tten celkov mezipamti..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Verze v mezipamti je rozdln, Vyazuji ji.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Oznaen soubor nebyl nalezen.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Oznaen verze je odlin (%d != %d). Vyazuji ji.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Nemohu otevt oznaen soubor s reimem pipojen.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Nemohu otevt oznaen soubor s reimem zpisu.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "Nemohu vytvoit uzamen soubor %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "przdn sloka\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Pouze pokud je okno aktivn"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Vechna pedchoz nastaven pro kadou sloku budou ztracena.\n"
+#~ "Pokraovat?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "pozice okna: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Nastavuji grafick prvky..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Pesouvm zprvu %s%c%d do %s...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tOznauji zprvy..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d nov() zprva(y)\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "Nemohu vybrat potovn schrnku %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "Zskvm zprvu %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Vymazvm zprvy z mezipamti %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Vymazvm vechny zprvy z mezipamti... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Zji校uji poet novch zprv...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Nelze na蓁st soubor se zprvou."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Pi stisku kurzorov klvesy v souhrnu otevt zprvu"
+
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Bhem posln emailu se vyskytla chyba:\n"
+#~ "%s"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Pi posln pozdrench zprv nastala stejn chyba."
+
+#~ msgid "No message part selected."
+#~ msgstr "Nen vybrna 鍾dn 葹st zprvy."
+
+#~ msgid "Predicate"
+#~ msgstr "Tvrzen"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Vytv癢m okno pro nastaven akc...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Nastaven akc"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Na蓁tm konfiguraci akc...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Chyba v pkazu pro akci\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Vytv癢m potomka a rodie.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Potomek: ekm na rodie\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Potomek: rodi je ukonen\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Zabjm potomky ve skupin s id %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Uvoluji data %p od potomk\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Vytv癢m dialog vstupu/vstupu pro akce.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Potomek vrtil %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Poslm vstup na rodie.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Vstup pro rodie odesln.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Odchytvm vstup od rodie.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Chyba soketu\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "晄et nenalezen. Pouiji aktuln et...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "晄et nenalezen.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Nelze spustit extern pkaz: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH selhala\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Bhem posln QUIT se vyskytla chyba\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Nemohu se spojit s SMTP serverem: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL spojen selhalo"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Bhem pipojovn k %s: %d se vyskytla chyba\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Bhem posln HELO se vyskytla chyba\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Bhem posln STARTTLS se vyskytla chyba\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Bhem posln EHLO se vyskytla chyba\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Soubor s podpisem"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Vytv癢m okno pro nastaven vlastnch zhlav...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Na蓁tn vlastnho nastaven zhlav...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Zpis vlastnho nastaven zhlav...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Vytv癢m okno pro nastaven filtru...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "Na蓁tm nastaven filtru...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Zpis nastaven filtru...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tHledm zprvy mimo mezipam貉... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "Bylo nalezeno %d zprv(y) mimo mezipam貉.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tTdm zprvy, kter byly mimo mezipam貉 v 蓁selnm poad... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "Vnucen znakov sada: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Povolit horizontln posuvnk"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Zobrazit poet nepetench zprv tunm psmem"
+
+#~ msgid "Finished"
+#~ msgstr "Dokoneno"
+
+#~ msgid "Done"
+#~ msgstr "Hotovo"
+
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "Kontroluji vechny sloky na nov zprvy..."
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Soubor/Z_novu na蓁st strom sloek"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): soubor '%s' u existuje."
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d na蓁tm ablony z %s\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d na蓁tm adres癢 %s se ablonami\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s: %d nalezl soubor %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s: %d %s nen b貍nm souborem\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s: %d zapisuji ablonu \"%s\" do %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Vchoz podpisov kl辷"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "ukldm odeslanou zprvu...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "nelze uloit zprvu\n"
+
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Vytv癢m dialog pro akce\n"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Vytv癢m zznamov okno...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Vymazvm pspvky z mezipamti. 1 - %d ... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tVymazvm vechny pspvky z mezipamti... "
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "悲sti kdu z programu fetchmail jsou chrnny Copyrightem 1997 Erica S. "
+#~ "Raymonda. Jeho dal麹 葹sti jsou chrnny Copyrightem Carla Harrisa, 1993 "
+#~ "a 1995. Ponechn si prv za elem ochrany voln\n"
+#~ " distribuce kdu.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc je chrnno Copyrightem Yasuhiro Tonooka <tonooka@msi.co.jp>, a "
+#~ "libkcc je chrnno Copyrightem takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "Nelze alokovat pam貉\n"
+
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/Z_obrazit/Pe_pnout zobrazen souhrnu"
+
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "Bhem %s se vyskytla chyba\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Nstroje"
+
+#~ msgid "Outbox"
+#~ msgstr "Odeslan pota"
+
+#~ msgid "Skipping message %d\n"
+#~ msgstr "Vynechvm zprvu %d\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Vytv癢m nhled na zhlav...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Zobrazuji zhlav pro %s ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Vechna zhlav"
+
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/Z_obrazit/Nezobrazit vl_kna"
+
+#~ msgid " Apply "
+#~ msgstr " Pou壌t "
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Extern webov prohl躱e (%s bude nahrazen URI)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "Pejt na %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "Obsluha"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Zprva/_Slep kopie"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Zprva/Pipoji_t"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/Akt_ualizovat strom sloek"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/_pravy/Vy_hledat sloku"
+
+#~ msgid "Search folder"
+#~ msgstr "Vyhledn sloky"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/_Zprva/Pidat odeslatele do data_bze adres"
+
+#~ msgid "/_Summary"
+#~ msgstr "/_Pehled"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/_Pehled/S_pustit"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/_Pehled/_Aktualizace"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/_Pehled/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/_Pehled/Pejt _na"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/_Pehled/Pejt _na/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/_Pehled/Setd_it"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/_Pehled/Setd_it/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/_Pehled/Zobrazit _vlkna"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/_Pehled/Nezobrazit v_lkna"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "Diskuzn skupina '%s' u existuje."
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Za葹tek pedan zprvy:\n"
+#~ "\n"
+
+#~ msgid "Usually used"
+#~ msgstr "Obvykle pouit"
+
+#~ msgid "Program path"
+#~ msgstr "Cesta k programu"
+
+#~ msgid "Quotation format:"
+#~ msgstr "Formt citace:"
+
+#~ msgid "Set display item"
+#~ msgstr "Nastavit poloku zobrazen"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
+
+#~ msgid "Preferences for each account"
+#~ msgstr "Nastaven pro kad et"
+
+#~ msgid "each"
+#~ msgstr "kadch"
+
+#~ msgid "/Show all _header"
+#~ msgstr "/Zobrazit vechna z_hlav"
+
+#~ msgid "Current folder is Trash."
+#~ msgstr "Tato sloka je odpadkov ko."
+
+#~ msgid "Reading addressbook file..."
+#~ msgstr "Na蓁tm soubor s databz adres..."
+
+#~ msgid "%s doesn't exist.\n"
+#~ msgstr "%s neexistuje.\n"
+
+#~ msgid "Exporting addressbook to file..."
+#~ msgstr "Exportuji databzi adres do souboru..."
+
+#~ msgid "failed to write addressbook data.\n"
+#~ msgstr "Nesp豺n zpis dat databze adres.\n"
+
+#~ msgid "The name already exists."
+#~ msgstr "Nzev ji existuje."
+
+#~ msgid "New group"
+#~ msgstr "Nov skupina"
+
+#~ msgid "Input the name of new group:"
+#~ msgstr "Zadejte nzev nov skupiny:"
+
+#~ msgid "Input the new name of group:"
+#~ msgstr "Zadejte nov nzev skupiny:"
+
+#~ msgid "The address <%s> has already been registered."
+#~ msgstr "Adresa <%s> ji byla registrovna."
+
+#~ msgid "/_Message/Show all _header"
+#~ msgstr "/Zprva/Zobrazit vechna z_hlav"
+
+#~ msgid "Sending queued message failed."
+#~ msgstr "Odesln zprvy z fronty selhalo."
+
+#~ msgid "Current account: %s"
+#~ msgstr "Aktuln et: %s"
+
+#~ msgid ""
+#~ "Emulate the behavior of mouse operation of\n"
+#~ "Emacs-based mailer"
+#~ msgstr ""
+#~ "Emulovat chovn myi v mailovacm programu\n"
+#~ "zaloenm na Emacsu"
+
+#~ msgid "can't get the next uid of folder: %s\n"
+#~ msgstr "nelze zskat dal麹 uid pro sloku: %s\n"
+
+#~ msgid "/Remove _news server"
+#~ msgstr "/Odebrat d_iskusn server"
+
+#~ msgid "Really delete news server `%s'?"
+#~ msgstr "Opravdu chcete odebrat diskusn server '%s'?"
+
+#~ msgid "/_View/_Toolbar/_Non-display"
+#~ msgstr "/Z_obrazit/_Nstrojov lita/_Nic"
+
+#~ msgid "/_Message/_Mark/Mark it as _being read"
+#~ msgstr "/_Zprva/Ozna_it/Oznait jako _peten"
+
+#~ msgid "deleting article %d...\n"
+#~ msgstr "mau pspvek %d...\n"
+
+#~ msgid "/_Mark/Make it as _being read"
+#~ msgstr "/_Oznait/Oznait jak_o peten"
+
+#~ msgid "Show other headers"
+#~ msgstr "Zobrazit vechna zhlav"
+
+#~ msgid ""
+#~ "The MD5 support is copyright by RSA Data Security, Inc. See the header "
+#~ "comment of the md5.c module for license terms.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Podpora MD5 je chrnna Copyrightem RSA Data Security, Inc. Pro "
+#~ "podrobnosti viz koment癢 ve hlavice modulu md5.c.\n"
+#~ "\n"
+
+#~ msgid "SunMonTueWedThuFriSat"
+#~ msgstr "Ne Po t St t P So"
+
+#~ msgid "/_Summary/Select a_ll"
+#~ msgstr "/_Pehled/Vybrat _ve"
+
+#~ msgid "Clean trash"
+#~ msgstr "Vysypat ko"
+
+#~ msgid "/_Mark/Mark as _important"
+#~ msgstr "/_Oznait/Oznait jako _dleit"
+
+#~ msgid "D"
+#~ msgstr "D"
+
+#~ msgid "o"
+#~ msgstr "o"
+
+#~ msgid "TextView: color allocation failed\n"
+#~ msgstr "Textov okno: barevn rozvren bylo nesp豺n\n"
+
+#~ msgid "*** Warning: code conversion failed ***\n"
+#~ msgstr "*** Varovn: Nesp豺n konverze kdu ***\n"
+
+#~ msgid "Invalid MIME type\n"
+#~ msgstr "Neplatn MIME typ\n"
+
+#~ msgid "%s - Compose message [Edited]"
+#~ msgstr "%s - Psan zprvy [Upraveno]"
+
+#~ msgid "deleting folder %s ...\n"
+#~ msgstr "mau sloku %s ...\n"
+
+#~ msgid "deleting newsgroup %s ...\n"
+#~ msgstr "vymazvm diskusn skupinu %s ...\n"
+
+#~ msgid "The news server `%s' already exists."
+#~ msgstr "Diskuzn server '%s' ji existuje."
+
+#~ msgid "deleting cache folder of %s ...\n"
+#~ msgstr "Vymazvm pspvky z mezipamti %s ...\n"
+
+#~ msgid "IMAP login command is invalid.\n"
+#~ msgstr "Pkaz pro IMAP pihl畊en je neplatn.\n"
+
+#~ msgid "Next unread"
+#~ msgstr "Dal麹 nepetenou"
+
+#~ msgid "New directory"
+#~ msgstr "Nov adres癢"
+
+#~ msgid "The directory not found. Create it?"
+#~ msgstr "Adres癢 nenalezen. Chcete jej vytvoit?"
+
+#~ msgid "Can't create directory."
+#~ msgstr "Nelze vytvoit adres癢"
+
+#~ msgid "Selected name isn't a directory."
+#~ msgstr "Vybran nzev nen nzvem adres癢e."
+
+#~ msgid "Writing mail folder list..."
+#~ msgstr "Zapisuji seznam sloek..."
+
+#~ msgid "Writing imap folder list..."
+#~ msgstr "Zapisuji seznam imap sloek..."
+
+#~ msgid "Writing news folder list..."
+#~ msgstr "Zapisuji seznam sloek diskuznch skupin..."
+
+#~ msgid "Mail Server (IMAP4)"
+#~ msgstr "Potovn server (IMAP4)"
+
+#~ msgid "NetNews"
+#~ msgstr "Diskuzn skupiny"
+
+#~ msgid "reading folder list %s ..."
+#~ msgstr "na蓁tm seznam sloek %s ..."
+
+#~ msgid "Broken folder list cache.\n"
+#~ msgstr "Poruen seznam sloek.\n"
+
+#~ msgid "Select destination directory"
+#~ msgstr "Vbr clovho adres癢e"
+
+#~ msgid "%s exists\n"
+#~ msgstr "%s existuje\n"
+
+#~ msgid "can't move tmpmsg to %s\n"
+#~ msgstr "Nemohu pemstit tmpmsg do %s\n"
+
+#~ msgid "IMAP session is not established\n"
+#~ msgstr "Nen vytvoena IMAP4 relace\n"
+
+#~ msgid "news session is not established\n"
+#~ msgstr "nov relace nen pevn stanovena\n"
+
+#~ msgid "Unlinking message %s in trash...\n"
+#~ msgstr "Odebrm zprvu %s z odpadkovho koe...\n"
+
+#~ msgid "Not yet implemented."
+#~ msgstr "Nenaimplementovno."
+
+#~ msgid "/_Summary/Unsele_ct all"
+#~ msgstr "/_Pehled/Zruit _cel vbr"
+
+#~ msgid "Korean (ISO-2022-KR)"
+#~ msgstr "Korejsk (ISO-2022-KR)"
+
+#~ msgid "Enable thread view on summary"
+#~ msgstr "Povolit zobrazen vlken v pehledu"
+
+#~ msgid "Printing"
+#~ msgstr "Tisk"
+
+#~ msgid ""
+#~ "Date\n"
+#~ "from\n"
+#~ "Subject\n"
+#~ "To\n"
+#~ "Message-ID\n"
+#~ "%"
+#~ msgstr ""
+#~ "Datum\n"
+#~ "Od\n"
+#~ "Pedmt\n"
+#~ "Komu\n"
+#~ "Identifikan 蓁slo zprvy\n"
+#~ "%"
+
+#~ msgid "/_Mark/Mark _all"
+#~ msgstr "/_Oznait/Oznait _vechny"
+
+#~ msgid "/_Mark/U_nmark all"
+#~ msgstr "/_Oznait/_Zruit vechna oznaen"
+
+#~ msgid "/_Mark/M_ove marked"
+#~ msgstr "/_Oznait/Pe_sunout oznaen"
+
+#~ msgid "/_Mark/_Delete marked"
+#~ msgstr "/_Oznait/S_mazat oznaen"
+
+#~ msgid "/U_nselect all"
+#~ msgstr "/Zruit _cel vbr"
+
+#~ msgid "/_Message/Reply with _quotation"
+#~ msgstr "/_Zprva/Odpovdt s _citac"
+
+#~ msgid "/Reply with _quotation"
+#~ msgstr "/Odpovdt s _citac"
+
+#~ msgid "queueing message that failed to send...\n"
+#~ msgstr "zaazuji neodeslan zprvy do fronty...\n"
+
+#~ msgid "allocated mainview size: width = %d, height = %d\n"
+#~ msgstr "Velikost rozvren hlavnho pohledu: 麹ka = %d, vka = %d\n"
+
+#~ msgid "allocated mainwin size: width = %d, height = %d\n"
+#~ msgstr "Velikost rozvren hlavnho okna: 麹ka = %d, vka = %d\n"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 00000000..028e21b8
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,6681 @@
+# Danish translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Andreas Hinz <news3@acci.dk>, 2002, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed \n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-07-29 09:05+0200\n"
+"Last-Translator: Andreas Hinz <news3@acci.dk>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Om"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME er Copyright 2001 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Dette program er fri software; du kan gendistribuere og / eller ndre det "
+"under hensyntagen til GNU General Public License udgivet af Free Software "
+"Foundation; enten Version 2, eller (efter dit valg) alle senere versioner.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Dette program er distribueret i det hb at det vil vre brugbar, men UDEN "
+"NOGEN GARANTI; endda selvom programmets SALGBARHED eller BRUGBARHED TIL ET "
+"BESTEMT FORML. Ls GNU General Public License for yderligere detaljer.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Du burde have modtaget en kopi af GNU General Public License med dette "
+"program.Hvis ikke, s skriv til Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Ls konfiguration for hver konto...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Fundet mrke: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Der er ny post vinduer bent.\n"
+"Luk alle ny post vinduer inden rettelse af konti."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "bn konto redigrings vindue...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Opret konto redigrings vindue...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Redigr konti"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nye meddelelser bliver testet i denne rkkeflge. Afmrk\n"
+"`G'-kolonnen, for at aktivere hentning via `hent alle'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Navn"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Tilfj"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Redigr"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Slet "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Ned"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Op"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Standard konto "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Luk"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Slet konto"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Vil du virkelig slette denne konto?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Ja"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nej"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Kunne ikke lse besked fil %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Kan ikke lse besked del."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Kan ikke lse del af multipart meddelese."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Den valgte handling kan ikke benyttes i besked vindue\n"
+"da det indeholder %%f, %%F eller %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Kommando kunne ikke startes. Pipe oprettelse fejlet.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kan ikke udfre ekstern kommando:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Krer: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Afsluttet: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Handlings input/output"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "Send "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Afbryd"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Indtast parameter for den flgende handling:\n"
+"(`%%h' bliver erstattet af handlingen:)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Handlngens skjulte parametre"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Indtast parameter for den flgende handling:\n"
+"(`%%h' bliver erstattet af handlingen:)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Handlingens bruger parameter"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Tilfj adresse i adressebog"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresse"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Kommentar"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Vlg adressebog mappe"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Afbryd"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Filer"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Filer/Ny _adressebog"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Filer/Ny _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Filer/Ny _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Filer/Ny _server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Filer/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Filer/_Redigr"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Filer/_Slet"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Filer/_Gem"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Filer/_Luk"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresse"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresse/Ny _adresse"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresse/Ny _gruppe"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresse/Ny _mappe"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresse/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresse/_Redigr"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresse/_Slet"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Funktioner"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Funktioner/Importer _LDIF-Fil"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Hjlp"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Hjlp/_Om"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Ny _adresse"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Ny _gruppe"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Ny _mappe"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Redigr"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Slet"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-post adresse"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adressebog"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Navn:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Slet"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Overblik"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Til:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Slet adresse(r)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Virklig slette adresse(r)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nej"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Vil du virkeligt slette mappen OG alla adresser i `%s' ? \n"
+"Hvis kun mappen slettes, vil adresserne blive flyttet til hoved mappen."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Ny mappe"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Mappe og adresser"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Virklig slette `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Ny bruger, kunne ikke gemme index fil."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Ny bruger, kunne ikke gemme adressebogs fil."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Gammel adressebog konverteret."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Gammel adressebog konverteret,\n"
+"men kunne ikke gemme index filen"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Kunne ikke konvertere adressebog,\n"
+"men nye og tomme filer blev oprettet."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Kunne ikke konvertere adressebog,\n"
+"kunne ikke oprette nye filer."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Kunne ikke konvertere adressebog,\n"
+"kunne ikke oprette nye filer."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Adressebog konverterings fejl"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Adressebog konvertering"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Adressebog fejl"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Kunne ikke lse adressebog"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "Gammel adressebog konverteret men kunne ikke gemme ny index fil "
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "Kunne ikke konvertere adressebog, men har oprettet nye tomme filer "
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Kunne ikke konvertere adressebog, og heller ikke oprette nye tomme filer "
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Kunne ikke konvertere adressebog, og heller ikke oprette nye tomme filer "
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Adressebog konverterings fejl"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Adressebog konvertering"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Brugerflade"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adressebog"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Person"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-post adresse"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Gruppe"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Mappe"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "J-Pilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Normale adresser"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Personlige adresser"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Note"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Advarsel"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Fejl"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Opretter alarm panel dialog...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Vis denne meddelelse igen"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Orange"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rd"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Himmelbl"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Bl"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Grn"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Brun"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ingen"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Tilfj..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Fjern"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Egenskaber..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Filer/_Gem"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Meddelelse/_Send senere"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Meddelelse/Gem i _kladde mappe"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Meddelelse/_Send senere"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Filer/_Vedhft fil"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Filer/_Indst fil"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Filer/Tilfj _underskrift"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Redigr/_Fortryd"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Redigr/_Gentag"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Redigr/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Redigr/_Klip"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Redigr/K_opiere"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Redigr/_St ind"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Redigr/_St ind som citat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Redigr/Markr _alle"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Redigr/A_vanceret"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Redigr/A_vanceret/Flyt et tegn baglns"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Redigr/A_vanceret/Flyt et tegn frem"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Redigr/A_vanceret/Flyt et ord baglns"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Redigr/A_vanceret/Flyt et ord frem"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Redigr/A_vanceret/Flyt til linie start"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Redigr/A_vanceret/Flyt til linie slutning"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Redigr/A_vanceret/Flyt til forrige linie"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Redigr/A_vanceret/Flyt til nste linie"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Redigr/A_vanceret/Slet et tegn bagfra"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Redigr/A_vanceret/Slet et tegn forlns"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Redigr/A_vanceret/Slet et tegn baglns"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Redigr/A_vanceret/Slett et ord forlns"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Redigr/A_vanceret/Slet linie"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Redigr/A_vanceret/Slet til linie slutning"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Redigr/Formater a_ktuelt afsnit"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Redigr/Formater _alle lange linier"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Redigr/K_opiere"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Vis"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Vis/_Til"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Vis/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Vis/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Vis/_Svar til"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Vis/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Vis/_Followup to"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Vis/_Linieal"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Vis/_Vedhft"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Funktioner/_Adressebog"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Funktioner/_Skabelon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Funktioner/_Handlinger"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Funktioner/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Redigr/Redigr med e_kstern editor"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Funktioner/_Handlinger"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Meddelelse/_Kryptere"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: fil findes ikke\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Kan ikke lse tekst afsnit\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Citat markrings format fejl."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Meddelelses svar / videresend fejl."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Filen %s findes ikke\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Kan ikke lse strrelse p %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Filen %s er tom."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "kan ikke lse %s"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Meddelelse: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Kan ikke hente del af multipart meddelese."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Redigret]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Ny meddelelse%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Ny meddelelse%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Mangler modtager"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Send"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Emne er tom. Send alligevel?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "Kan ikke bne modtager liste."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Konto til afsendelse af e-post er ikke valgt.\n"
+"Vlg konto fr afsendelse er mulig."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Fejl ved afsendelse af meddelelse til %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Kan ikke gemme meddelelse i Sendt"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Kunne ikke funde ngle til den valgte ngle id `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "kan ikke ndre fil mode\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Kan ikke konvertere tegnst i meddelelse fra\n"
+"%s til %s.\n"
+"Send den alligevel?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "kan ikke skrive hoved\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "kan ikke slette gammel meddelelse\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "meddelelse i k...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "kan ikke vlge mappe %s\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "meddelelse kan ikke lgges i k\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "genereret meddelelses ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Opretter instastnings vindue...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME type"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Strrelse"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Fra:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Sende meddelelse"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Send senere"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Lg i k og send senere"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Kladde"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Gem i Kladde"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Indst"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Inst fil"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Vedhft"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Vedhft fil"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Underskrift"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Indst underskrift"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Redigr med ekstern Editor"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Linie deling"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "/_Redigr/Formater _alle lange linier"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Ugyldig MIME type"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Fil eksisterer ikke eller er tom."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Egenskaber"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Tegnst kodning"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Sti"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Fil navn"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Sti til ekstern editor er ugyldig: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Den eksterne editor er i brug.\n"
+"Afbryde?\n"
+"ID: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Afbrudt proces gruppe ID: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Midlertidig fil: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Instast: fra monitor process\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Kunne ikke starte ekstern editor\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Kunne ikke gemme fil\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Fejl i lsning fra Pipe\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Meddelelse kan ikke lgges i k."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Vlg fil"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Slet meddelelse"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Denne meddelelse er ndret. Slet?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Slet"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "til Kladde"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Vil du benytte skabelon `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Benyt skabelon"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Erstat"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Redigr adresse"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Tilfj ny person"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Redigr person detaljer"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "En e-post adresse skan indtastes"
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Et navn og en vrdi skal indtastes."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Redigr person data"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Vis navn"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Efternavn"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Fornavn"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Alias"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-post adresse"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Op"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Ned"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "ndre"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Tm"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Vrdi"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Grund data"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Bruger egenskaber"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Fil er OK."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Filen er ikke i korrekt adressebogs format"
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Kunne ikke lse fil."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Redigr adressbog"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Check fil "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fil"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Tilfj ny adressebog"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr " Et gruppe navn skal indtastes."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Redigr gruppendata"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Gruppe navn"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresser i gruppe"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Mulige adresser"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Flyt e-post adresse fra eller til gruppe med pil tasterne"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Redigr gruppendetaljer"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Tilfj gruppe"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Redigr mappe"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Indtast nyt gruppenavn:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Ny mappe"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Indtast ny mappes navn:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Filen er ikke i JPilot format."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Vlg JPilot fil"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Redigr JPilot indtastning"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Yderligere e-post adresser"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Tilfj ny JPilot indtastning"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Forbundet til server"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Ignen forbindelse til server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Redigr LDAP server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Host navn"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Check server"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Sge base"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Sge kriterium"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Nulstil "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Binde DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Binde adgangskode"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Max. indtastninger"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Enkelt"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Udvidet"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Tilfj ny LDAP server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP Redigr - Suchbasis whlen"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Vorhandene Suchbasen"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Konnte Suchbasen nicht vom Server lesen - bitte manuell setzen"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Datei ist nicht im VCard-Format."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "VCard-Datei whlen"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Redigr vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Tilfj ny VCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Eksportere"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Indtast ml mappe og mbox fil"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Fra sti:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Eksporterer fil:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Vlg... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Vlg fil til export"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "kunne ikke gemme konfiguration til fil\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Vlg mappe"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Indbakke"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Sendt"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "K"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Slettet"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Kladde"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NyMappe"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' kan ikke benyttes i mappe navn."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Mappen `%s' eksisterer allerede."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Kan ikke oprette mappe `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/_Opret ny mappe..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Omdb mappe..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Slet mappe"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Tm Slettet"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "_Hent nye meddelelser"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/G_endan mappe tr"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Sg meddelelse..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Ingen ulste meddelelser."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Abonner p nyhedsgruppe..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Slet nyhedsgruppe"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Opretter mappe tr...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Ny"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Ulst"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Indtast mappe information...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Indtast mappe information..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Gennemsger mappe %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Gennemsger mappe %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Genopbyg mappe tr"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Gendanner mappe tr..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Gendanner mappe tr..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Gendanner alle mappe trer..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Henter nye meddelelser i alle mapper..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Mappe %s er valgt\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Sende meddelelse..."
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Fejl ved afsendelse af meddelelse til %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Indtast mappe navn:\n"
+"(hvis du vil oprette mappe til undermapper,,\n"
+"s afslut navn med `/')"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Nyt navn for `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Omdb mappe"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Alle mapper og meddelelser i `%s' vil blive slettet.\n"
+"Vil du virkelig slette?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Slet mappe"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Kan ikke slette mappe `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Tm Slettet"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Slet alle meddelelser i Slettet?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Virklig slette `%s'?\n"
+"(Meddelelser bliver ikke flernet fra disken)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Slet mappe"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Virklig slette IMAP4 konto `%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Slet IMAP4 konto"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Virklig slette nyhedsgruppe `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Slet nyhedsgruppe"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Virklig slette nyheds konto `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Slet nyheds konto"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Abonnere nyhedsgruppe"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Vlg nyhedsgruppe at abonnere."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Sg nyhedsgruppe:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Sg "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nyhedsgruppe navn"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Meddelelser"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Type"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Genopfrisk"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "modereret"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "kun lses"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "ukendt"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Kan ikke modtage gruppe liste."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Afsluttet."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d Nyhedsgruppe(r) modtaget (%s lst)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Nyhedsgrupper:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Emne:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Opretter hoved visning...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Ingen Fra)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Intet emne)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Opretter billed visning...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Kan ikke lse billede."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 forbindelse til %s blev afbrudt. Forbinder...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "erstelle IMAP4-Verbindung zu %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Kan ikke starte TLS session.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "kan ikke stte slettede flag: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "kan ikke slette\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "kan ikke stte slettet flag: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "kan ikke vlge mappe %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Markret fil ikke fundet.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "fejl ved modtagelse af LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "kan ikke oprette '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "kan ikke oprette '%s'\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "kan ikke oprette mailbox: LIST fejlet\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "kan ikke oprette mailbox\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "kan ikke omdbe mailbox: %s til %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "kan ikke slette mailbox\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "kan ikke modtage kovert\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "fejl ved modtagelse af kuvert.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "kan ikke lse kuvert: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ingen forbindelse med IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ingen forbindelse med IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "kan ikke modtage namespace\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "kan ikke vlge mappe %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 godkendelse fejlede.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4-Login fejlet.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "kan ikke tilfje %s til %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(sender fil...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "kan ikke tilfje meddelelse %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "kan ikke kopiere %s til %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "fejl ved IMAP kommando: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "fejl ved IMAP kommand: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "fejl ved IMAP kommand: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv kan ikke konvertere UTF-7 til %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv can ikke konvertere %s til UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importere"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Indtast mbox fil og mappe."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importerer fil:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Til sti:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Vlg fil til import"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Indtast adressebog navn og fil til import"
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Vlg og omdb LDIF felt navne til import"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fil importeret."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Vlg fil."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Adressebogs navn skal angives."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Fej ved lsning af LDIF fil."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF fil blev importeret."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Vlg LDIF fil"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Fil navn"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Vlg LDIF felt"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Egensgab Navn"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Egenskab"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Vlg"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adressebog :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Fil navn :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Poster :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importer LDIF fil til adressebog"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Forrige"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Nste"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Fil info"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Egenskaber"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Slut"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Modtager nu meddelelse"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Vent"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Afbrudt"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Modtager"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Hentet (%d meddelelse(r) (%s)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Ingen nye meddelelser"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Forbindelse mislykkedes"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Godkendelse mislykkedes"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Lst"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (sek)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Hentet (%d nye meddelelse(r))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Ingen nye meddelelser"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Fejl ved hentning af e-post."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "modtager nye meddelelser fra konto %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: henter nye meddelelser"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Forbinder til POP3 server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Ingen forbindelse med POP3 server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Godkender..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Modtager meddelelse fra %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Modtager antal nye meddelelser (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Modtager antal nye meddelelser (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Modtager antal nye meddelelser (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Modtager antal nye meddelelser (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Sletter meddelelse %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Afslutter"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Modtager meddelelse (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Henter (%d meddelelse(r), (%s) hentet"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Forbindelse mislykkedes"
+
+#: src/inc.c:1081
+#, fuzzy
+msgid "Error occurred while processing mail."
+msgstr ""
+"Fejl ved bearbejdning af e-post:\n"
+"%s"
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Fejl ved bearbejdning af e-post:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Ingen fri disk plads."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Kan ikke skrive til fil."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Sokkel fejl."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+#, fuzzy
+msgid "Mailbox is locked."
+msgstr "postkasse er lst\n"
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Mailbox er lst:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Godkendelses fejlede."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Godkendelsesfejl:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "tid udlbet\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Hentning afbrudt\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Modtager nye meddelelser fra %s til %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Indtast adgangskode for %s p %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Indtast adgangskode"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protokol log"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Filen `%s' eksisterer allerede.\n"
+"Kan ikke oprette mappe."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread er ikke understttet i glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG er ike korrekt installeret eller i for gammel version\n"
+"OpenPGP ikke mulig."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Bruges som: %s [OPTION]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresse] bner nyt meddelelses vindue"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fil1 [fil2]...\n"
+" bn ny meddelelse med disse filer vedhftet\n"
+" ."
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive modtager nye meddelelser"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all modtager nye meddelelser fra alle konti"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send send alle meddelelser i k"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [mappe]... viser antal meddelelser"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [mappe]...\n"
+" viser status for hver mappe"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug debug mode"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help viser denne hjlp"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version viser version og afslutter"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Du er ved at skrive ny meddelelse. Virklig afslutte?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Meddeleser i k"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Nogle usendte meddelelser i k. Afslut nu?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "sylpheed krer allerede.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Filer/_Mappe"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Filer/_Mappe/Opret _ny mappe..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Filer/_Mappe/_Omdb mappe..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Filer/_Mappe/_Slet mappe"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Filer/_Tilfj mailbox..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Filer/_Tilfj mailbox..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Slet _mappe"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Filer/_Mappe/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "_Hent nye meddelelser"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Filer/_Mappe/_Hent nye meddelelser i alle mapper"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/G_endan mappe tr"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Filer/_Importere mbox fil..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Filer/_Eksportere mbox fil..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Filer/_Tm slettet post"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Filer/_Gem som..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Filer/_Udskriv..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Filer/_Indst fil"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Filer/_Afslut"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Redigr/Markr _trd"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Redigr/_Sg i aktuel meddelelse"
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Sg meddelelser..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Vis/_Vis eller skjul"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Vis/_Vis eller skjul/_Mappe tr"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Vis/_Vis eller skjul/_Besked"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Vis/_Vis eller skjul/_Vrktjslinie"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Vis/_Vis eller skjul/_Vrktjslinie/Ikon _og tekst"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Vis/_Vis eller skjul/_Vrktjslinie/_Ikon"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Vis/_Vis eller skjul/_Vrktjslinie/_Tekst"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Vis/_Vis eller skjul/_Vrktjslinie/_Ingen"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Vis/_Vis eller skjul/_Status linie"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Vis/_Seperat mappe tr"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Vis/Seperat m_eddelelses vindue"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Vis/_Sortere"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Vis/_Sortere/_Nummer orden"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Vis/_Sortere/_Strrelses orden"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Vis/_Sortere/_Dato orden"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Vis/_Sortere/_Fra orden"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Vis/_Sortere/Efter _modtager"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Vis/_Sortere/_Emne orden"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Vis/_Sortere/_Farvet label orden"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Vis/_Sortere/_Markret orden"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Vis/_Sortere/_Ulst orden"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Vis/_Sortere/_Vedhft orden"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Vis/_Sortere/Sorter _ikke"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Vis/_Sortere/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Vis/_Sortere/Stigende"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Vis/_Sortere/Faldende"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Vis/_Sortere/_Emne orden"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Vis/_Trdet"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "_Vis/bn trde"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Vis/_Saml alle trde"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Vis/_St visning ..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Vis/_G til"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Vis/_G til/_Forrige meddelelse"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Vis/_G til/_Nste meddelelse"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Vis/_G til/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/Vis/_G til/Forrige ulste meddelelse"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Vis/_G til/Nste ulste meddelelse"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Vis/_G til/_Forrige nye meddelelse"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Vis/_G til/_Nste nye meddelelse"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Vis/_G til/Forrige _markret meddelelse"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Vis/_G til/Nste _markret meddelelse"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Vis/_G til/Forrige _label meddelelse"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Vis/_G til/Nste _label meddelelse"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Vis/_G til/Anden _mappe..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Vis/_Tegnst/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Vis/_Tegnst"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Vis/_Tegnst/_Automatisk"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Vis/_Tegnst/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Vis/_Tegnst/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Vis/_Tegnst/Western European (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Vis/_Tegnst/Western European (ISO-8859-_15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Vis/_Tegnst/Central European (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Vis/_Tegnst/_Baltic (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Vis/_Tegnst/Baltic (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Vis/_Tegnst/Greek (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Vis/_Tegnst/Turkish (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Vis/_Tegnst/Cyrillic (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Vis/_Tegnst/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Vis/_Tegnst/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Vis/_Tegnst/Cyrillic (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Vis/_Tegnst/Japanese (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Vis/_TegnstJapanese (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Vis/_Tegnst/Japanese (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Vis//_Tegnst/Japanese (_Shift_JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Vis/_Tegnst/Simplified Chinese (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Vis/_Tegnst/Traditional Chinese (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Vis/_Tegnst/Traditional Chinese (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Vis/_Tegnst/Chinese (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Vis/_Tegnst/Korean (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Vis/_Tegnst/Korean (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Vis/_Tegnst/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Vis/_Tegnst/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Vis/bn i nyt vindue"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Vis/_Kilde"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Vis/_Alle hoved linier"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Vis/_Opdatr oversigt"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Meddelelse"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Meddelelse/Redigr _igen"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Meddelelse/Hent fra _alle konti"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Meddelelse/Hent fra _alle konti"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Meddelelse/_Afbryd afsendelse"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Meddelelse/Redigr _igen"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Meddelelse/Send meddelelser i _k"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Meddelelse/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Meddelelse/Opret _ny meddelelse"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Meddelelse/_Besvar"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Meddelelse/_Svar til"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Meddelelse/_Svar til/A_lle"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Meddelelse/_Svar til/Af_sender"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Meddelelse/_Svar til/_Alle"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Meddelelse/_Videresend"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Meddelelse/Videresend som _vedhftet"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Meddelelse/_Omdirigr"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Meddelelse/_Flyt..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Meddelelse/_Kopiere..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Meddelelse/_Slet"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Meddelelse/_Markr"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Meddelelse/_Markr/_Markr"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Meddelelse/_Markr/_Slet markring"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Meddelelse/_Markr/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Meddelelse/_Markr/Som ulst"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Meddelelse/_Markr/Som lst"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Meddelelse/_Markr/Alle som lst"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Meddelelse/Redigr _igen"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Funktioner/Tilfj afsender til adressebog"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Funktioner/_Filtrere meddelelse"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Funktioner/_Filtrere meddelelse"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Funktioner/_Opret filter"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Funktioner/_Opret filter/_Automatisk"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Funktioner/_Opret filter/Efter _Fra"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Funktioner/_Opret filter/Efter _Til"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Funktioner/_Opret filter/Efter _Emne"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Meddelelse/Slet alle du_blikerede meddelelser"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Funktioner/_Udfr"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/Funktioner/_Logbog vindue"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Opst"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Opst/Generelt _opst..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Opst/_Filter opst..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Opst/_Skabelon..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Opst/_Handlinger..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Opst/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Opst/_Den aktuelle konto..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Opst/_Opret ny konto..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Opst/_Redigr konti..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Opst/_Skift aktuel konto..."
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Hjlp/_Vejledning"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Hilfe/_Vejledning/_Engelsk"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Hilfe/_Vejledning/_Japansk"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Hjlp/_OSS"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Hjlp/_OSS/_Engelsk"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Hjlp/_OSS/_Tysk"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Hjlp/_OSS/_Spansk"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Hjlp/_OSS/_Fransk"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Hjlp/_OSS/_Italiensk"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Hjlp/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Opretter hoved vindue...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "HovedVindue: fejl i farve %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "Afsluttet.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Uden titel"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "ingen"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "ndre vindue adskillelse type fra %d til %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Tm Slettet"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Slet alle meddelelser i Slettet?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Ny mailbox"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Indtast sti til mailbox.\n"
+"Hvis den eksisterende mailbox angives, vil den blive\n"
+"gennemsgt automatisk."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Mailbox `%s' eksisterer allerede."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Fejl i oprettelse af mailbox.\n"
+"Mske findes filerne allerede eller du har ikke skrive rettighedder."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Mappe visning"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Meddelelses visning"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Svar"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Svar til alle"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/_Svar til/_Afsender"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/_Svar til/_Mail liste"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Videresend"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Videresend som _vedhftet"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/_Omdirigr"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Hent"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Hent ny post"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Hent alt"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Hent ny post fra alle konti"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Sender meddelelse(r) i k"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Opret"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Opret ny meddelelse"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Besvar"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Besvar meddelelse"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Besvar alle"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Svar til alle"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Videresend"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Videresend meddelelse"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Slet meddelelse"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Udfr"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Udfr markret process"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Nste ulste"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Opst"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Generelt opst"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Konto"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Konto indstillinger"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Afslut"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Afslut program?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "kan ikke skrive til midlertidig fil\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Modtager meddelelse fra %s til %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Kan ikke lse mbox fil.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "ugyldigt mbox format: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "ugyldig mbox format: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "kan ikke bne midlertidig fil\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"ukodet Fra fundet:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d meddelelse fundet.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "kan ikke oprette lock fil %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "benyt 'flock' i stedet for 'file' hvis muligt.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "kan ikke oprette %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "mailbox hrer til anden process, venter...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "kan ikke lse %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "ugyldig lock type\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "kan ikke lse %s op\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "kan ikke tmme mailbox.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Eksporterer meddelelse fra %s til %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Sg i aktuel meddelelse"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Sg tekst:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Stor / sm forskel"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Sg baglns"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Sg"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Sgning fejlede"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Den sgte tekst blev ikke fundet."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Begyndelse af meddelelse net; fortst fra slutning?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Slutnigen af meddelelse net; fortst fra starten?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Sgning afsluttet"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Opretter meddelelses vindue...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Gem som"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Overskriv"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Overskrive eksisterende fil?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Kan ikke gemme fil `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Udskriv"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Indtast udkrift kommando:\n"
+"(`%s' bliver erstattat af fil navn)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Udskriv kommando er ugyldig:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "kan ikke kopiere meddelelse %s til %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Kan ikke bne markret fil.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "fra og til mappe er ens.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopierer meddelelse %s%c%d til %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Sidste nummer i sti %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_bn"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/bn _med..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Vis som tekst"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Gem som..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Check signatur"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Opretter MIME visning...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME type"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Vedhftet"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Vlg \"Check signatur\""
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Kan ikke gemme del af multipart meddelelse."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "bn med"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Indtast kommando til til bning af fil:\n"
+"(`%s' bilver erstattet med fil navn)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME visnings kommando ugyldig: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "oprettet NNTP forbindelse til %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP forbindelse til %s:%d blev afbrudt. Genforbinder...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "Artikel %d er allerede gemt.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "modtager artikel %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "kann ikke lse artikel %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "kann ikke modtage nyhedsgruppe liste\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "kan ikke sende artikel.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "kan ikke modtage artikel %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "kan ikke vlge gruppe: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "ugyldigt artikel omrde: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "ingen nye artikler.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "modtager XOVER %d - %d i %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "kan ikke modtage XOVER\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "fejl ved modtagelse af XOVER.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "ugyldig XOVER linie: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "kan ikke modtage XHDR\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "fejl ved modtagelse af XHDR.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Kan ikke forbinde til NNTP server: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokol fejl: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokol fejl\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Fejl ved afsendelse\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Fejl ved afsendelse af e-post."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Adgansstning"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[ingen bruger ID]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sIndtast adgangsstning:\n"
+"\n"
+" %.*s \n"
+"(%.*s) an\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Forkert adgangsstning! Prv igen...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Ndvendig APOP tid blev ikke fundet i velkomst\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Tid syntax fejl i velkomst\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protokol fejl\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "ugyldig XOVER linie: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Sletter udlben meddelelse %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Sender meddelelse (%d / %d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "postkasse er lst\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "tid udlbet\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "kan ikke starte TLS session\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "fejl ved godkendelse\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Kommando tekst"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "fejl under POP3 session\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lser konfiguration...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Fundet %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Lsning af konfiguration afsluttet.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguration er gemt.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Anvend"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "bner konti egenskaber...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Konto%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Opst af ny konto"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Konto opst"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Opretter konto egenskaber...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Modtag"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privat"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avanceret"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Navn p denne konto"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Standard konto"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Personlige informationener"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Fuldt navn"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-post adresse"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organisation"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Server data"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Ingen (lokal)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Dennes server krver godkendelse"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Nyheds server"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server til modtagelse"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP server (afsendelse)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Bruger ID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Adgangskode"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Dennes server krver godkendelse"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Slet meddelelser fra server efter modtagelse"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Slet efter"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dage"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dage: slet straks)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Hent alle meddelelser fra server"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Modtagelses strrelse maks."
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "kB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrere meddelelse ved modtagelse"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Standard indbakke"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Ufiltrerede meddelelser gemmes i denne mappe)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Godkendelses metode"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatisk"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Hent alle' henter post fra denne konto"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Hoved"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Tilfj dato linie"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Opret meddelelses ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Tilfj bruger defineret hoved"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Redigr... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Godkendelse"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP godkendelse (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Hvis du lader disse vre tomme, benyttes\n"
+"samme bruger ID og adgangskode som ved modtagelse."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Godkend med POP3 fr afsendelse"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Kommando tekst"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Udfyld automatisk flgende adresser"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Svar til"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Krypter altid meddelelser"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Signer altid meddelelse"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Benyt ASCII format til kodning"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Benyt klar tekst underskrift"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Underskrifts ngle"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Benyt standard GnuPg ngle"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Vlg ngle efter e-post adresse"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Angiv ngle manuelt"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Bruger eller ngle ID"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Benyt ikke SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Benyt SSL til POP3 forbindelse"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Benyt STARTTLS kommando til at starte SSL session"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Benyt SSL til IMAP4 forbindelse"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Benyt SSL til NNTP forbindelse"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Send (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Benyt SSL til SMTP forbindelse"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Benyt ublokerende SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Slp dette fra hvis du har problemer med SSL forbindelser)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Angiv SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Angiv POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Angiv IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Angiv NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Angiv domne navn"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP server sti."
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Gem sendte meddelelser i"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Gem kladde i"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Gem slettede meddelelser i"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Konto navn er ikke angivet."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "E-post adresse ikke angivet."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP server ikke angivet."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Bruger ID ikke angivet."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 server ikke angivet."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 server ikke angivet"
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP server ikke angivet."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Det anbefales ikke at anvende det gamle ASCII format\n"
+"til at kode meddelelser. Derved overholdes RFC-3156 - MIME\n"
+"Security med OpenPGP ikke."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Handlingsopst"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Menu navn:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Kommandolinie:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Menu navn:\n"
+" Benyt / i menu navn for at lave undermenuer.\n"
+"Kommando linie:\n"
+" Begynd med:\n"
+" | for at sende besked eller valg til kommandolinie\n"
+" > for at sende brugers tekst til kommand linie\n"
+" * for at sende brugers skjult tekst til kommandolinie\n"
+" Afslut med:\n"
+" | for at erstatte besked eller valg med kommandolinies uddata\n"
+" > for at indstte kommandoens uddata uden at erstatte gl. tekst\n"
+" & for at kre kommandoen asynkront\n"
+" Benut %f som besked filnavn\n"
+" %f er beskedens filnavn\n"
+" %F er listen med filnavne i markrede beskeder\n"
+" %p er den valgte del af beskeden\n"
+" %u er en brugerdefineret parameter\n"
+" %h er en skjult, brugerdefineret parameter\n"
+" %s er den markrede del af beskeden"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr "Erstat "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Syntaks hjlp"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrerede handlinger"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nye)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Menu navn ikke opsat."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Kolon ':' er ikke tilladt i menu navn."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Menu navn er for langt."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Kommando linie ikke opsat."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Menu navn og kommando linie er for lange."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Kommandoen\n"
+"%s\n"
+"indeholder syntaks fejl."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Slet handling"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Vil du virkelig slette denne handling?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Opretter generelt opst vindue...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Generelt opst"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Vis"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Meddelelse"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Anden"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Eksternt program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Benyt eksternt program til modtagelse af e-post"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Kommando"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokal spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Modtager fra lokal spool"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filter ved modtagelse"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automatisk hentning af ny post"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "hver"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minut(er)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Hent e-post ved programstart"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Opdater alle mapper efter modtagelse"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Nyheder"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr "Max antal artikler ved hentning (0 angiver alle)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Benyt eksternt program for afsendelse"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Gem sendte meddelelser i Sendt"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Udgende tegnst"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatisk (Anbefalet)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Western European (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Western European (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Central European (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltic (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltic (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Greek (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turkish (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillic (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillic (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillic (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrillic (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japanese (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japanese (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japanese (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Simplified Chinese (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditional Chinese (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditional Chinese (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chinese (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korean (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Hvis `Automatisk' er valgt benyttes det optimale\n"
+"tegnst for den valgte locale."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Kodning af overfrsel"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Angiv Content-Transfer-Encoding anvendt hvis\n"
+"besked inholder andet end ASCII tegn."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Underskriftsdeling"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Tilfj automatisk"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Start automatisk ekstern editor"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Fortryd niveauer"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Del linier ved"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "tegn"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Del citat linier"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Del ved indtastning"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Del linier fr afsendelse"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Vlg automatisk konto ved besvarelse"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citat af meddelelse i svar"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Svar knap starter svar til mail liste"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Svar format"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Citat tegn"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Videresend format"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Beskrivelse af symboler "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Skrifttype"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Overst hoved navn (fx. `Fra:', `Emne:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Vis antal ulste ved siden af mappe navn"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Forkort nyhedsgruppe lngere end"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "bogstaver"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Meddelelses visning"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Vis modtager i `Fra' hvis du er afsender"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "bn trde"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Dato format"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Vlg oplysninger i oversigt... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Benyt farver i meddelelser"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Vis 2-byte alfabet og tal som ASCII\n"
+"tegn (kun japansk)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Vis hoved linier over meddelelses vindue"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Vis korte hoved linier i meddelelses vindue"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Linie afstand"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "punkter"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Afstand til hoved"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Scrol"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Halv side"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Bld scroll"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Skrift"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "ndre strrelse p vedhftede billeder"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Check signatur automatisk"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Vis signatur check resultat i separat vindue"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Gem adgangsstning midlertidigt i hukommelsen"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Udlb efter"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minut(er)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(St til '0' vil gemme adgangsstningen\n"
+" for hele sessionen)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Overtag indtastning mens adgangsstning indtastes"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Advarsel ved start hvis GnuPG ikke virker"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "bn altid besked i oversigtsbilledet hvis valgt"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "bn frste ulste meddelelse ved indgang til mappe"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Markr kun meddelelser som lst hvis bnet i nyt vindue"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "G til Indbakke efter modtagelse af ny post"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Udfr straks ved flyt eller slet af meddelelse(r)"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr "(Ellers markres meddelelese indtil der vlges 'Udfr')"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Vis modtag billede"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Vis modtag billede"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Altid"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Aldrig"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Vis ikke fejlmeddelelse ved fejl"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Luk modtag vindue efter overfrsel"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Vlg tast bindinger... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Ekstern editor (%s erstattes af filnavn / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Web browser"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Tilfj adresse til 'Til' ved dobbeltklik"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Ved afslut"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Sprg ved afslut"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Tm Slettet ved afslut"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Sprg fr tmning"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Advar ved meddelelser i k"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Socket I/O timeout:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "sekund(er)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "kort ugedags navn"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "Ugedags navn"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "kort mneds navn"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "mneds navn"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "nsket dato format for nuvrende locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "rhundrede (r/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dag i mned som tal"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "time som tal (24 timers visning)"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "time som tal (12 timers visning)"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "rhundrede som tal"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "mned som tal"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minut som tal"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "enten AM eller PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekund som tal"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "ugedag som tal"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "nsket dato format for nuvrende locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "de sidste to cifre i ret"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "ret som tal"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "tidszone som navn eller forkortelse"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Vlger"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Eksempel"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Angiv meddelelses farve"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Farve"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citeret tekst - 1. niveau"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citeret tekst - 2. niveau"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citeret tekst - 3. nivaur"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI-Link"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Genbrug citat farver"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Vlg farve for nivau 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Vlg farve for nivau 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Vlg farve for nivau 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Vlg farve for URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Beskrivelse af symboler"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Dato\n"
+"Fra\n"
+"Afsenders fulde navn\n"
+"Afsenders fornavn\n"
+"Afsenders initaler\n"
+"Emne\n"
+"Til\n"
+"CC\n"
+"Nyhedsgrupper\n"
+"Meddelelses ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Hvis x er valgt vises expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Meddelelses krop\n"
+"Citeret meddelelses krop\n"
+"Meddelelses krop uden signatur\n"
+"Citeret meddelelses krop uden signatur\n"
+"%"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"\\\n"
+"?\n"
+"{\n"
+"}"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Skrifttype"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Tast bindinger"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Vlg standarden for genvejdstaster.\n"
+"Du kan ogs ndre hver menus genvejstast ved at taste enhver ved at placere\n"
+"mus over menu punkt og taste en tast."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Standard"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Gl. Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Bruger defineret hoved opst"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Brugerdef. hoved"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Hoved navn ikke opsat."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Slet hoved"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Virklig slette denne hoved linie?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Opretter hoved opst vindue...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Hoved opst"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Hoved navn"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Viste hoved linier"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skulte hoved linier"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Vis alle uspecificerede hoved linier"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Hent hoved konfiguration...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Gem hoved konfiguration...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Denne hoved linie er allerede p listen."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filter opst"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Til:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Kopier..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Slet regel"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Wollen Sie wirklich diese Regel Slet?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Slet regel"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Alle hoved linier"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Hoved"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Meddelelse"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "indholder"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "indholder ikke"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Ned"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Kopier..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Modtag ikke"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Slet mappe"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Kommentar"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Angiv meddelelses farve"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Markr/_Lst"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Videresend som _vedhftet"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/_Omdirigr"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Udfr"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Mappe"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adresse"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Hoved"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Hoved"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Hoved"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Mangler modtager"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Kommando linie ikke opsat."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Destination ikke valgt."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Kommando linie ikke opsat."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: fil findes ikke\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Mappe egenskaber"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Generel"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Vis ikke [...] eller (...) i starten af Emne linien i oversigten"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Slet [...] og (...) i starten af Emne i besvarelser"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Benyt til undermapper"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "benyt ogs ved svar"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Svar til:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Markr"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Vedhftet"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Emne"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Fra"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Dato"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nummer"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Opretter Mappeninhalt-Spalten-opst-Fenster\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Opst oversigt"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Vlg de oplysninger, der skal vises i oversigts vindue. Du kan ndre\n"
+"rkkeflgen ved at benytte Op / Ned knapperne eller ved at trkke med musen."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Mulige oplysninger"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Viste oplysninger"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Standard indstilling "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Skabelon navn"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrere"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Erstat "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symbol "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrerede skabloner"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Skabeloner"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Skabelon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Skabelon format fejl."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Slet Skabelon"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Vil du virkelig slette denne Skabelon?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Tegnst konverteringsfejl.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "kan ikke bne markret fil\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "kan ikke hente meddelelse %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Fejl ved afsendelse af meddelelse %d i k.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Udskrift kommando er ugyldig: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Opretter dialog...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "fejl ved modtagelse af data.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Kan ikke skrive til fil.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Hovsa: Underskrift ikke verificeret"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Underskrift ikke fundet"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Underskrift OK"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "DRLIG underskrift"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Ingen offentlig ngle til verificering af denne underskrift"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Fejl ved verificering af underskrift"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Forskellige resultater for underskrifter"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Fejl: ukendt status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "God underskrift fra \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "DRLIG underskrift fra \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Kan ikke finde bruger ID for denne ngle."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Underskrift fra %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Ngle fingerprint: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Vlg ngle for '%s' "
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Samler informationen for '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Vlg ngle"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Ngle ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Tilfj ngle"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Indtast anden bruger eller ngle ID:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Hoved ugyldigt p meddelelse i k.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Forbinder"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Forbindelse med SMTP server: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Sender HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Godkender"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Sende meddelelse..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Sender EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Sender MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Sender"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Sender RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Sender DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Afslutter..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Sender meddelelse (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Sende Meddelelse"
+
+#: src/send_message.c:576 src/send_message.c:596
+#, fuzzy
+msgid "Error occurred while sending the message."
+msgstr ""
+"Fejl ved afsendelse meddelelse:\n"
+"%s"
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Fejl ved afsendelse meddelelse:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Mailbox opstning"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Frst skal placering af mailbox indtastes.\n"
+"Du kan benytte en eksisterende mailbox i MH format.\n"
+"Hvis du ikke har, s vld OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Undersger signatur"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s fra \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH ikke tilgnglig\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "forkert SMTP svar\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "fejl under SMTP session\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Opretter kilde vindue...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Meddelelses kilde"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Viser kilder %s...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Kilde"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 ikke tilgnglig\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 tilgnglig\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 ikke tilgnglig\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 tilgnglig\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL metode ikke tilgnglig\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Ukendt SSL metode *PROGRAM FEJL*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Fejl ved oprettelse af SSL kontext\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL forbindelse fejlet (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL forbindelse benytter %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Server certifikat:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Emne: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Afsender: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Sg meddelelse"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Udfyld automatisk flgende adresser"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Meddelelse:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Vlg alle fundne"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Start p liste. Start bagfra?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Slutning af liste. Start forfra?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/_Svar til"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/_Svar til/_Alle"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/_Svar til/_Afsender"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/_Svar til/_Mail liste"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Flyt..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopier..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Markr"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Markr/_Markr"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Markr/_Slet markring"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Markr/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Markr/_Ulst"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Markr/_Lst"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Markr/_Alle lst"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Farve la_bel"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Redigr _igen"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Tilfj afsender til adressebo_g"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Vis/_Kilde"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Vis/Alle _hoveder"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Udskriv..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nr."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Opretter oversigt...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Bearbejder markring"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Nogle markringer er tilbage. Bearbejde dem?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Sger mappe (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Ikke flere ulste meddelelser"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Ingen ulste meddelelser fundet. Sg fra slutning?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Ingen ulste meddelelser."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Ingen ulste meddeleleser fundet. Fortst til nste mappe?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Sg igen"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Ikke flere nye meddelelser"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Ingen nye meddelelser fundet. Sg fra slutning?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Ingen nye meddelelser."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Ingen nye meddeleleser fundet. Fortst til nste mappe?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Ikke flere ulste meddelelser"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Ingen markrede meddelelser fundet. Sg bagfra?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Ingen markrede eddelelser."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Ingen markrede meddelelser fundet. Sg forfra?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Ikke flere markrede eddelelser"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Ingen markrede meddelelser funder. Sg bagfra?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Ingen markrede meddelelser."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Ingen markrede meddelelser fundet. Sg forfra?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Samler meddelelser via Emne..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d slettet"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d flyttet"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopieret"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " valgte"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nye, %d ulst, %d total (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nye, %d ulste, %d total"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sorterer oversigt..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tOpretter oversigt ud fra meddelelses data..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Opretter oversigt ud fra meddelelses data..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Skriver oversigt (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Ingen dato)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Meddelelse %d er markret\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Meddelelse %d er markret som lst\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Meddelelse %d er markret som ulst\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Meddelelse %s/%d er markret til sletning\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Slet meddelelse(er)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Vil du virkelig slette meddelelse(r) fra Slettet?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Sletter dublikerede meddelelser..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Meddelelse %s/%d er ikke markret.\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Meddelelse %d er markret til flytning til %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Fra og til mappe er ens"
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Meddelelse %d er markret til kopiering til %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Fra og til mappe er ens."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Markrer alle meddelelser..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr ""
+"Fejl ved bearbejdning af e-post:\n"
+"%s"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Opretter trde"
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Fjerner trde"
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Fjerner trde til udfrelse..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrering..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrering..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "meddelelse %d er allerede gemt.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "filen %s eksisterer allerede\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Opretter tekst vindue...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "en meddelelse vil ikke blive modtaget\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "For at gemme denne del, bn menuen med "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "hjre mustast og vlg `Gem som...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"eller tast `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "For at vise denne del som tekst, vlg "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Vis som tekst', eller tast `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "For at bne denne del med et eksternt program, vlg "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`bn' eller `bn med...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "eller doppelt klik, eller tryk p den midterste mustast, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "eller tast `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Signaturen er endnu ikke undersgt.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "For at checke det, bn menuen med\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "hjre mustast og vlg `Check signatur'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fkB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "fejl ved skrivning til %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Kan ikke bne filen %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Slet _mappe"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Slet _IMAP4 konto"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Slet _nyheds konto"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Meddelelse/_Send"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Meddelelse/Digital _underskrift"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "ingen meddelelser i den lokale mailbox.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spool sti"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Afbryd handling"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Vlg... "
+
+#~ msgid "Condition"
+#~ msgstr "Tilstand"
+
+#~ msgid "Keyword"
+#~ msgstr "Stikord"
+
+#~ msgid "Destination"
+#~ msgstr "Ml"
+
+#~ msgid "Use regex"
+#~ msgstr "Benyt regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrerede regler"
+
+#~ msgid "(none)"
+#~ msgstr "(ingen)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Indtastning er ikke gemt"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "Indtastningen er ikke gemt. Luk alligevel?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "bn URI kommando er ugyldig: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Gemte data er delagte\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Opret filter"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Opret filter/_Automatisk"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Opret filter/Efter _Fra"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Opret filter/Efter _Til"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Opret filter/Efter _Emne"
+
+#~ msgid "Queueing"
+#~ msgstr "I k"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Fejl ved afsendelse af meddelelse.\n"
+#~ "Skal meddelelse lgges i k?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Gem fejlsendte meddelelser i k"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Kr"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_Markr alle "
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/_Vlg trd "
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "kan ikke vlge gruppe: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "en meddelelse vil ikke blive modtaget\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Meddelelse/Hent _ny post"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tIngen gemt fil\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tLser oversigt..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Gemt version er forskellig. Ignorerer den.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Markret fil ikke fundet.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Markieret version er anderledes (%d != %d). Ignorerer den.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Kan ikke bne markret fil til vedhftning.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Kan ikke bne markret fil til skrivning.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "kan ikke oprette lock fil %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "tom mappe\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Kun hvis vindue er aktivt"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Alle forrige indstillinger for hver mappe tabes.\n"
+#~ "Fortst?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "vindue position: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Stter Widgets..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Flytter meddelelse %s%c%d til %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tMarkrer meddelelser..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d nye meddelelse(er)\n"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Vis ulste meddelelser med fed skrift"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "kan ikke vlge mailbox %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "modtager meddelelse %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Sletter gemte meddelelser %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Slet alle gemte meddelelser... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Antal meddelelser...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Kunne ikke lse besked fil."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "bn meddelelse nr piltaster benyttes i oversigt"
+
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Fejl ved afsendelse af e-post:\n"
+#~ "%s"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Fejl ved afsendelse af meddelelser i k."
+
+#~ msgid "No message part selected."
+#~ msgstr "Ingen besked del valgt."
+
+#~ msgid "Predicate"
+#~ msgstr "Udsagn"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Opretter handlings opst vindue...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Handlings indstillinger"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Lser handlinger...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Handling fejl\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Udskiller child og grandchild\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Child: venter p grandchild\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Child: grandchild afsluttet\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Drber child gruppe id %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Befrier children data %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Opdaterer handlings input/output dialog.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Child returner %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Sender input til grandchild.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Input sendt til grandchild.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Fanger grandshild's output.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Sokkel fejl\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Konto ikke fundet. Benytter aktuel konto...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Konto ikke fundet.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Kan ikke udfre ekstern kommando: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH fejlet\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Fejl ved afsendelse af QUIT\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Ingen forbindelse til SMTP server: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL forbindelse fejlet"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Fejl ved forbindelse til %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Fejl ved afsendelse af HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Fejl ved afsendelse af STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Fejl ved afsendelse af EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Signatur fil"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Opretter hoved opst vindue...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Henter bruger defineret hoved opst...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Gemmer bruger defineret hoved opst...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Opretter filter opst vindue...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "henter Filter indstillinger...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Gemmer filter indstillinger...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tSg ikke gemte meddelelser..."
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d ikke gemte meddelelse(er) fundet.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tSorterer ikke gemte meddelelser i numerisk orden... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "tvungent tegnst: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Benyt horisontal rulleskakt"
+
+#~ msgid "Finished"
+#~ msgstr "Slut"
+
+#~ msgid "Done"
+#~ msgstr "Afsluttet"
+
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "Undersger alle mapper for nye meddelelser..."
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Filer/_Opdatr mappe tr"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): Fil %s' findes allerede."
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d henter skabelon fra %s\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s%d lser skabelon sti %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s:%d filen %s fundet\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s er ikke en normal fil\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d gemmer skabelon \"%s\" i %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Standard underskriftsngle"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "gemmer sendt meddelelse...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "kan ikke gemme meddelelse\n"
+
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Opretter handlings dialog\n"
+
+#~ msgid "Close window"
+#~ msgstr "Luk vindue"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Opretter logbog vindue...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Sletter gemte artikler 1 - %d ... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tSletter alle gemte artikler... "
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Den implementerede del fra fetchmail er Copyright 1997 Eric S. Raymond. "
+#~ "Dele heraf er Copyright Carl Harris, 1993 og 1995. Copyright opretholdes "
+#~ "af hensyn til den fri distribution af source.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc er Copyright Yasuhiro Tonooka <tonooka@msi.co.jp>, og libkcc er "
+#~ "Copyright takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "kan ikke allokere hukommelse\n"
+
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/_Vis/_Skift meddelelses liste"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s eksisterer allerede."
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Vikrlig slette mappe `%s'?"
+
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "Fejl ved %s\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Funktioner"
+
+#~ msgid "Outbox"
+#~ msgstr "Sendt"
+
+#~ msgid "Skipping message %d\n"
+#~ msgstr "modtager meddelelse %d\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Opretter hoved vindue...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Vis hoved linier for %s...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Alle hoved linier"
+
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/_Vis/_Utrdet"
+
+#~ msgid "Shortcut key"
+#~ msgstr "Genvejstast"
+
+#~ msgid " Apply "
+#~ msgstr " Anvend "
+
+#~ msgid "Mew / Wanderlust"
+#~ msgstr "xxx"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Eksterm Web browser (%s bliver erstattet af URI)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "Udskrift (%s bliver erstattet af fil navn)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "G til %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "Operations tegn"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Meddelelse/_Til"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Meddelelse/_Cc"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Meddelelse/_Bcc"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Meddelelse/_Vedhft"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Funktion/Vis _lineal"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/_Opdater mappe tr"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/_Redigr/Gennemsg mappe"
+
+#~ msgid "Search folder"
+#~ msgstr "Gennemsg mappe"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/_Meddelelse/Tilfj afsender til adressebog"
+
+#~ msgid "/_Summary"
+#~ msgstr "/_Oversigt"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/_Oversigt/_Udfr"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/_Oversigt/_Opdatr"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/_Oversigt/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/_Oversigt/G _til"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/_Oversigt/G til/---"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "Del aktuelt afsnit"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/_Oversigt/_Sortre"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/_Oversigt/_Sortre/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/_Oversigt/_Trdet visning"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 00000000..ae245d5e
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,6187 @@
+# German translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Martin Schaaf <mascha@ma-scha.de>, 2000,2001,2002,2003,2004.
+# Manfred Usselmann <usselmann.m@icg-online.de>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-11-02 00:41+0100\n"
+"Last-Translator: Manfred Usselmann <usselmann DOT m AT icg-online DOT de>\n"
+"Language-Team: German <gnome-de@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "ber"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"Das Urheberrecht von GPGME (2001) liegt by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Dieses Programm ist freie Software; Sie knnen es weiterreichen und/oder "
+"modifizieren im Sinne der GNU General Public License wie sie von der Free "
+"Software Foundation verffentlicht wird; entweder Version 2, oder (nach "
+"ihrer Wahl) jede neuere Version.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Dieses Programm wird weitergereicht in der Hoffnung, dass es ntzlich ist, "
+"aber OHNE JEDE GARANTIE; ohne die implizierte Garantie der MARKTGNGIGKEIT "
+"oder der EIGNUNG FR EINEN BESTIMMTEN ZWECK. Lesen Sie die GNU General "
+"Public License fr weitere Details.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Sie sollten eine Kopie der GNU General Public License mit diesem Programm "
+"erhalten haben; wenn nicht, dann schreiben Sie an Free Software Foundation, "
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lese alle Einstellungen fr jeden Account...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Gefundene Zeichen: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Es sind einige Fenster zum Verfassen von Nachrichten geffnet.\n"
+"Bitte schlieen Sie diese Fenster vor dem Beabeiten der Accounts."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "ffne Accountbearbeitungsfenster...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Erstelle Accountbearbeitungsfenster...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Bearbeite Accounts"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Neue Nachrichten werden in dieser Reihenfolge geprft. Whlen Sie die "
+"Schalter\n"
+"in der `G'-Spalte, um den Nachrichten-Empfang bei `Hole alle' einzuschalten."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Name"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Hinzufgen"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Lschen "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Ab"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Auf"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Standardaccount "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Schlieen"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Account lschen"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Wollen Sie diesen Account wirklich lschen?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Ja"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nein"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Kann Nachrichten-Datei %d nicht bekommen."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Bekomme Nachrichten-Teil nicht."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht bekommen."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Die erstellte Aktion kann nicht im Verfassen-Fenster benutzt werden,\n"
+"weil sie %%f, %%F oder %%p beinhaltet."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Befehl kann nicht gestartet werden. Pipe-Erstellung fehlgeschlagen.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kann folgenden Befehl nicht zum Ausfhren aufkabeln:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Laufen: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Beendet: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Aktionen Ein-/Ausgabe"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "Senden "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Abbrechen"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Geben Sie den Parameter fr die folgende Aktion an:\n"
+"(`%%h' wird durch den Parameter ersetzt)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Aktionen verstecken den Parameter"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Geben Sie den Parameter fr die folgende Aktion an:\n"
+"(`%%u' wird durch den Parameter ersetzt)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Aktionen Benutzer-Parameter"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Adresse in Adressbuch einfgen"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresse"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Kommentar"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Whle Adressbuchablage"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Datei"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Datei/Neues Adress_buch"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Datei/Neue _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Datei/Neues _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Datei/Neuer _Server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Datei/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Datei/_Bearbeiten"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Datei/_Lschen"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Datei/_Speichern"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Datei/S_chlieen"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresse"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresse/Neue _Adresse"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresse/Neue _Gruppe"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresse/Neue Ab_lage"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresse/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresse/_Bearbeiten"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresse/_Lschen"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Werkzeug"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Werkzeug/Importiere _LDIF-Datei"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Hilfe"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Hilfe/_ber"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Neue _Adresse"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Neue _Gruppe"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Neue Ab_lage"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Bearbeiten"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Lschen"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-Mail Adresse"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adressbuch"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Name:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Lschen"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Vorschau"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "An:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Adresse(n) lschen"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Adresse(n) wirklich lschen?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nein"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Wollen Sie wirklich die Ablage UND all ihre Adressen in `%s' lschen ? \n"
+"Wenn Sie nur die Ablage lschen, werden die Adressen in das bergeordnete "
+"Verzeichnis verschoben."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Nur Ablage"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Ablage und Adressen"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Wirklich `%s' lschen ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Neuer Benutzer, kann Index-Datei nicht speichern."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Neuer Benutzer, kann Adressbuch-Dateien nicht speichern."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Altes Adressbuch erfolgreich konvertiert."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Altes Adressbuch konvertiert,\n"
+"kann neue Adress-Index-Datei nicht speichern"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren,\n"
+"aber erstellte neue leere Adressbuch-Dateien."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren,\n"
+"konnte neue Adressbuch-Dateien nicht erstellen."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren\n"
+"und konnte neue Adressbuch-Dateien erstellen."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Adressbuch-Konvertierungs-Fehler"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Adressbuch-Konvertierung"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Adressbuch-Fehler"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Konnte Adress-Index nicht lesen"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Altes Adressbuch konvertiert, neue Adress-Index-Datei konnte nicht "
+"gespeichert werden"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren, erstellte aber neue leere Adressbuch "
+"Dateien."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren, konnte neue Adressbuch Dateien nicht "
+"erstellen."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Konnte Adressbuch nicht konvertieren und konnte neue Adressbuch Dateien "
+"nicht erstellen."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Adressbuch-Konvertierungs-Fehler"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Adressbuch-Konvertierung"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Benutzerschnittstelle"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adressbuch"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Person"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-Mail Adresse"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Gruppe"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Ablage"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP-Server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Allgemeine Adressen"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Persnliche Adressen"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notiz"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Warnung"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Fehler"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Erstelle Alarmpanel-Dialog...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Zeige diese Nachricht das nchste mal an"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Orange"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rot"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Himmelblau"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Blau"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Grn"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Braun"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Keine"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Hinzufgen..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Entfernen"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Eigenschaften..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_Datei/_Senden"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_Datei/S_pter senden"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_Datei/In Ent_wurfablage speichern"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_Datei/Speichern und Bearbeitung _fortsetzen"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Datei/Datei _anhngen"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Datei/Datei _einfgen"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Datei/_Unterschrift einfgen"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Bearbeiten/_Zurck"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Bearbeiten/_Wiederholen"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Bearbeiten/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Bearbeiten/_Ausschneiden"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Bearbeiten/_Kopieren"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Bearbeiten/_Einfgen"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Bearbeiten/Als Zitat _einfgen"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Bearbeiten/Alle au_swhlen"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Bearbeiten/_Beschleunigen"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Bearbeiten/_Beschleunigen/Ein Zeichen zurck"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Bearbeiten/_Beschleunigen/Ein Zeichen vor"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Bearbeiten/_Beschleunigen/Ein Wort zurck"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Bearbeiten/_Beschleunigen/Ein Wort vor"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Bearbeiten/_Beschleunigen/Zum Anfang der Zeile"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Bearbeiten/_Beschleunigen/Zum Ende der Zeile"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Bearbeiten/_Beschleunigen/Zur vorherigen Zeile"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Bearbeiten/_Beschleunigen/Zur nchsten Zeile"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Bearbeiten/_Beschleunigen/Zeichen links vom Cursor lschen"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Bearbeiten/_Beschleunigen/Zeichen rechts vom Cursor lschen"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Bearbeiten/_Beschleunigen/Wort links vom Cursor lschen"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Bearbeiten/_Beschleunigen/Wort rechts vom Cursor lschen"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Bearbeiten/_Beschleunigen/Zeile lschen"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Bearbeiten/_Beschleunigen/Bis zum Ende der Zeile lschen"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Bearbeiten/Aktuellen Absatz um_brechen"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Bearbeiten/Alle langen Zeilen _umbrechen"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Bearbeiten/Aut_omatisches umbrechen"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Ansicht"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Ansicht/_An"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Ansicht/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Ansicht/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Ansicht/A_ntwort an"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Ansicht/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Ansicht/_Wiedervorlage an"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Ansicht/_Lineal"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Ansicht/An_hang"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Werkzeug/_Adressbuch"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Werkzeug/_Schablone"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Werkzeug/Aktio_nen"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Werkzeug/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Werkzeug/Mit e_xternem Editor bearbeiten"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Werkzeug/PGP _Unterschreiben"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Werkzeug/PGP _Verschlsseln"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: Datei existiert nicht\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Kann Textabschnitt nicht lesen\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Zitatzeichen Formatfehler."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Formatfehler in Nachrichtenantwort oder -Weiterleitung."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Datei %s existiert nicht\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Kann Dateigre von %s nicht ermitteln\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Datei %s ist leer."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Kann %s nicht lesen."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Nachricht: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht bekommen."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [in Bearbeitung]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Verfasse Nachricht%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Verfasse Nachricht%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Empfnger nicht angegeben"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Senden"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Betreff ist leer. Trotzdem verschicken?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "Kann die Empfngerliste nicht holen."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Account zum Versenden von E-Mails, wurde nicht angegeben.\n"
+"Bitte whlen sie einen E-Mail-Account vor dem Senden."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Fehler beim Senden der Nachricht an %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Kann die Nachricht nicht in der Gesendet-Ablage speichern."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Kein Schlssel fr die aktuelle gewhlte Schlssel-ID vorhanden `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "kann Dateimodus nicht ndern\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Kann den Zeichensatz der Nachricht nicht konvertieren\n"
+"(von %s zu %s).\n"
+"Trotzdem senden?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "kann Kopfzeilen nicht schreiben\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "Kann die alte Nachricht nicht entfernen\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "Nachricht einreihen...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "kann Queue-Ablage nicht finden\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Nachricht kann nicht eingereiht werden\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "erzeugte Nachrichten-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Erstelle Verfassenfenster...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME-Typ"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Gre"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Von:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Sende Nachricht"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Spter senden"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "In Queue-Ablage und spter senden"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Entwurf"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Speichern in Entwurfablage"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Einfgen"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Datei einfgen"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Anhngen"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Datei anhngen"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Unterschrift"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Unterschrift einfgen"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Bearbeiten mit externem Editor"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Zeilenumbruch"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Alle langen Zeilen umbrechen"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Ungltiger MIME Typ"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Datei existiert nicht oder ist leer."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Eigenschaften"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Zeichensatzkodierung"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Pfad"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Dateiname"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Kommandozeile fr den externen Editor ist ungltig: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Der externe Editor ist in Betrieb.\n"
+"Prozess terminieren?\n"
+"Prozessgruppen ID: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Gruppen ID: %d des terminierten Prozesses"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Temporre Datei: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Verfassen: Eingabe vom berwachungsprozess\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Kann externen Editor nicht ausfhren\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Kann nicht in Datei schreiben\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Lesen von Pipe fehlgeschlagen\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Nachricht kann nicht eingereiht werden."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Whle Datei"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Nachricht verwerfen"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Diese Nachricht wurde gendert. Verwerfen?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Verwerfen"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "zum Entwurf"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Wollen Sie die Schablone `%s' bernehmen ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Schablone bernehmen"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Adresse bearbeiten"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Neue Person hinzufgen"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Personen-Details bearbeiten"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Eine E-Mail-Adresse muss angegeben werden."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Ein Name und ein Wert mssen angegeben werden."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Personen-Daten bearbeiten"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Namen anzeigen"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Nachname"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Vorname"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Spitzname"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-Mail Adresse"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Auf"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Ab"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "ndern"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Leeren"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Wert"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Grunddaten"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Benutzer Eigenschaften"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Datei ist O.K."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Datei hat kein korrektes Adressbuchformat"
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Kann Datei nicht lesen."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Adressbuch bearbeiten"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Datei berprfen "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Datei"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Neues Adressbuch hinzufgen"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Ein Gruppenname muss angegeben werden."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Gruppendaten bearbeiten"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Gruppenname"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adressen in Gruppe"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Vorhandene Adressen"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Bewege E-Mail-Adresse zu oder von einer Gruppe mit den Pfeiltasten"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Gruppendetails bearbeiten"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Neue Gruppe hinzufgen"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Ablage bearbeiten"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Geben Sie den neuen Namen der Ablage ein:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Neue Ablage"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Geben Sie den Namen der neuen Ablage ein:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Datei ist nicht im JPilot-Format."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Whle JPilot-Datei"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "JPilot-Eintrag bearbeiten"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Zustzliche E-Mail-Adresseintrge"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Neuen JPilot-Eintrag hinzufgen"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Erfolgreich mit Server verbunden"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Keine Verbindung mit Server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "LDAP-Server bearbeiten"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hostname"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Server berprfen "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Such-Basis"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Suchkriterium"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Rcksetzen "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Verbinde DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Verbinde Kennwort"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (Sek.)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Eintrge (Max.)"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Einfach"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Erweitert"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Neuen LDAP-Server hinzufgen"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP bearbeiten - Suchbasis whlen"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Vorhandene Suchbasen"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Konnte Suchbasen nicht vom Server lesen - bitte manuell setzen"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Datei ist nicht im vCard-Format."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "vCard-Datei whlen"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "VCard-Eintrag bearbeiten"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Neuen vCard-Eintrag hinzufgen"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportieren"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Gib Zielverzeichnis und Mbox-Datei an."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Quellverzeichnis"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Exportiere Datei:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Auswhlen... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Whle exportierte Datei"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "konnte nicht in die Konfigurationsdatei schreiben\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Whle Ablage"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Posteingang"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Gesendet"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Warteschlange"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Papierkorb"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Entwrfe"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NeueAblage"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' kann nicht in den Ablagenamen integriert werden."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Die Ablage `%s' existiert bereits."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Kann Ablage `%s' nicht erstellen."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/_Neue Ablage erstellen..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/Ablage _umbenennen..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/Ablage _lschen"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Leere Papierkorb"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Auf neue Nachrichten prfen"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/A_blagebaum erneuern"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Suche Nachrichten..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/Herunterladen"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Newsgroup _abonnieren..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Newsgroup _entfernen"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Erstelle Ablageansicht...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Neu"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Ungelesen"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Setze Ablageinformation...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Setze Ablageinformation..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Durchsuche Ablage %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Durchsuche Ablage %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Ablagebaum erneuern"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Der Ablagebaum wird erneuert. Weiter?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Ablagenbaum erneuern..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "Ablagenbaum erneuern fehlgeschlagen..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Alle Ablagenbume erneuern..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Alle Ablagen auf neue Nachrichten prfen..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Ablage %s ist gewhlt\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Lade Nachrichten nach %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Fehler beim Herunterladen der Nachrichten in `%s' ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Geben Sie den Namen der neuen Ablage ein:\n"
+"(wenn Sie eine Ablage zum Speichern von Unterablagen erstellen wollen,\n"
+"dann hngen Sie ein `/' an das Ende des Namens)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Neuer Name fr `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Ablage umbenennen"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Alle Ablagen und Nachrichten in `%s' werden gelscht.\n"
+"Wollen Sie das wirklich?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Ablage lschen"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Kann Ablage `%s' nicht entfernen."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Leere Papierkorb"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Lsche alle Nachrichten im Papierkorb?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Mailbox `%s' entfernen?\n"
+"(Die Nachrichten werden NICHT von der Platte gelscht)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Entferne Mailbox"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "IMAP4-Account `%s' wirklich lschen?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "IMAP4-Account lschen"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Newsgroup `%s' wirklich lschen?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Newsgroup lschen"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "News-Account `%s' wirklich lschen?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "News-Account lschen"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Newsgroup abonnieren"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Newsgroup zum Abonnieren whlen."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Newsgroup suchen:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Suchen "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Newsgroup-Namen"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Nachrichten"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Typ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Erneuern"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderiert"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "nur lesen"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "unbekannt"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Kann die Newsgroup-Liste nicht empfangen."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Fertig."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d Newsgruppe(n) empfangen (%s gelesen)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Newsgroups:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Betreff:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Erzeuge Kopfzeilenansicht...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Kein Von)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Kein Betreff)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Erstelle Bilderansicht...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Kann das Bild nicht laden."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4-Verbindung zu %s wurde unterbrochen. Verbinde erneut...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "erstelle IMAP4-Verbindung zu %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Kann TLS-Sitzung nicht beginnen.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "kann gelschte Flags nicht setzen: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "kann nicht lschen\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "kann gelschte Flags nicht setzen: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "kann Ablage nicht schlieen\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "Wurzelverzeichnis %s existiert nicht\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "Fehler beim Empfang von LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Kann '%s' nicht erstellen\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Kann '%s' in INBOX nicht erstellen\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "kann Mailbox nicht erstellen: LIST fehlgeschlagen\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "kann Mailbox nicht erstellen\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "kann Mailbox %s nicht in %s umbenennen\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "kann Mailbox nicht lschen\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "kann die Nachrichteneigenschaften nicht empfangen\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Fehler beim Empfang der Nachrichteneigenschaften.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "kann die Nachrichteneigenschaften nicht bearbeiten: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Keine Verbindung mit IMAP4-Server: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Kann IMAP4-Sitzung mit %s:%d nicht aufbauen\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "kann Namensraum nicht empfangen\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "kann Ablage %s nicht auswhlen\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4-Beglaubigung fehlgeschlagen.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4-Login fehlgeschlagen.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "kann %s nicht an %s anhngen\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(Datei versenden...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "kann Nachricht nicht anhngen an %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "kann %s nicht nach %s kopieren\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "Fehler beim IMAP-Befehl: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "Fehler beim IMAP-Befehl: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "Fehler beim IMAP-Befehl: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv kann UTF-7 nicht nach %s konvertieren\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv kann %s nicht nach UTF-7 konvertieren\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importieren"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Mbox-Zieldatei und Zielverzeichnis angeben."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importiere Datei:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Zielverzeichnis:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Whle importierte Datei"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+"Bitte, geben Sie ein Adressbuchnamen und eine Datei zum Importieren an."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Whle und benenne LDIF-Feldnamen zum Import um."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Datei importiert."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Bitte eine Datei whlen."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Ein Adressbuchname muss angegeben werden."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Fehler beim Lesen der LDIF-Felder."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF-Datei erfolgreich importiert."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Whle LDIF-Datei"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Dateiname"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF-Feld"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Eigenschaftenname"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Eigenschaft"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Whlen"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adressbuch :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Dateiname :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Felder :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importiere LDIF-Datei in Adressbuch"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Vorherige"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Nchste"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Datei-Info"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Eigenschaften"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Ende"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Empfange neue Nachricht"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Warten"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Abgebrochen"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Empfange"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Fertig (%d Nachricht(en) (%s) empfangen)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Fertig (keine neuen Nachrichten)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Verbindung fehlgeschlagen"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Beglaubigung fehlgeschlagen"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Blockiert"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Timeout"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Beendet (%d neue Nachricht(en))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Beendet (keine neuen Nachrichten)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Fehler whrend des Empfanges der E-Mails."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "erhalte neue Nachrichten vom Account %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Empfange neue Nachrichten"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Verbinde mit POP3-Server: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Keine Verbindung mit POP3-Server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Beglaubigen..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Erhaltene Nachrichten von %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Bekomme Anzahl der neuen Nachrichten (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Bekomme Anzahl der neuen Nachrichten (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Bekomme Anzahl der neuen Nachrichten (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Bekomme Anzahl der neuen Nachrichten (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Lsche Nachricht %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Beenden"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Empfange Nachricht (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Empfange (%d Nachricht(en) (%s) empfangen)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Verbindung fehlgeschlagen."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Fehler beim Verarbeiten der E-Mail."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Fehler beim Verarbeiten der E-Mail:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Kein Platz mehr auf der Festplatte."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Kann Datei nicht schreiben."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Socket-Fehler."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Verbindung geschlossen vom Remote-Host."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Mailbox ist blockiert."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Mailbox ist gesperrt:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Beglaubigung fehlgeschlagen."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Beglaubigung fehlgeschlagen:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "Sitzungszeit abgelaufen."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Empfangen abgebrochen\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Erhalte neue Nachrichten von %s in %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Kennwort fr %s auf %s angeben:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Kennwort eingeben"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Mitschrift des Protokolls"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Datei `%s' existiert bereits.\n"
+"Kann Ablage nicht erstellen."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread wird nicht untersttzt von Glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG is nicht richtig installiert, oder die Version ist zu alt.\n"
+"OpenPGP-Untersttzung ausgeschaltet"
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Aufruf: %s [OPTION]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [Adresse] ffnet Verfassenfenster"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach Datei1 [Datei2]...\n"
+" ffne Verfassen-Fenster mit angegebenen Dateien\n"
+" angehngt"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive empfngt neue Nachrichten"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all empfngt neue Nachrichten von allen Accounts"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send sendet alle Nachrichten aus der Warteschlange"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [Ablage]... zeigt die Gesamtzahl aller Nachrichten"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [Ablage]...\n"
+" zeigt die Gesamtzahl aller Nachrichten"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug Fehlersuche"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help diese Hilfe"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version gibt Version aus und beendet"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Verfasste Nachricht existiert. Wirklich beenden?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Wartende Nachrichten"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Einige ungesendete Nachrichten vorhanden. Jetzt beenden?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "Ein anderes Sylpheed luft schon.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Datei/Ab_lage"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Datei/Ab_lage/_Neue Ablage erstellen..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Datei/Ab_lage/Ablage _umbenennen..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Datei/Ab_lage/Ablage _lschen"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Datei/_Mailbox hinzufgen..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Datei/_Mailbox hinzufgen..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Entferne _Mailbox"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Datei/Ab_lage/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/Auf neue Nachrichten prfen"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Datei/Ab_lage/Alle A_blagen auf neue Nachrichten prfen"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/A_blagebaum erneuern"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Datei/_Importiere Mbox-Datei..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Datei/_Exportiere in Mbox-Datei..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Datei/Papierkorb lee_ren"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Datei/Speichern _als..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Datei/_Drucken..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Datei/_Ohne Verbindung arbeiten"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Datei/_Beenden"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Bearbeiten/Thread au_swhlen"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Bearbeiten/_Aktuelle Nachricht durchsuchen..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Bearbeiten/_Suche Nachrichten..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Ansicht/Zeigen oder Verstecken"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Ansicht//Zeigen oder Verstecken/Ablagebaum"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Nachrichtenansicht"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Werkzeugleiste"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Werkzeugleiste/Bilder _und Text"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Werkzeugleiste/_Bilder"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Werkzeugleiste/_Text"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Werkzeugleiste/_Nichts"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Ansicht/Zeigen oder Verstecken/_Statuszeile"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Ansicht/Einzelner _Ablagebaum"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Ansicht/Einzelne _Nachrichtenansicht"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Ansicht/_Sortieren"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Ansicht/_Sortieren/nach _Nummer"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Ansicht/_Sortieren/nach _Gre"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Ansicht/_Sortieren/nach _Datum"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Ansicht/_Sortieren/nach _Absender"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Ansicht/_Sortieren/nach _Sender"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Ansicht/_Sortieren/nach _Betreff"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Ansicht/_Sortieren/nach _Farbetikett"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Ansicht/_Sortieren/nach _Markierung"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Ansicht/_Sortieren/nach _Ungelesen"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Ansicht/_Sortieren/nach An_hang"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Ansicht/_Sortieren/Nicht S_ortieren"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Ansicht/_Sortieren/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Ansicht/_Sortieren/Aufsteigend"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Ansicht/_Sortieren/Absteigend"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Ansicht/_Sortieren/Threads nach Betreff _aufbauen"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Ansicht/_Threads einschalten"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Ansicht/Alle Threads entfalten"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Ansicht/Alle Threads zusammenfalten"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Ansicht/Anzuzeigende _Informationen setzen..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Ansicht/Gehe _zu"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Ansicht/Gehe _zu/_Vorheriger Nachricht"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Ansicht/Gehe _zu/_Nchster Nachricht"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Ansicht/_Gehe _zu/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Ansicht/Gehe _zu/V_orheriger ungelesener Nachricht"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Ansicht/Gehe _zu/N_chster ungelesener Nachricht"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Ansicht/Gehe _zu/Vorheriger ne_uer Nachricht"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Ansicht/Gehe _zu/Nchster _neuer Nachricht"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Ansicht/Gehe _zu/Vorheriger _markierter Nachricht"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Ansicht/Gehe _zu/Nchster m_arkierter Nachricht"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Ansicht/Gehe _zu/Vorheriger _etikettierter Nachricht"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Ansicht/Gehe _zu/Nchster e_tikettierter Nachricht"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Ansicht/_Gehe zu/Anderer Ab_lage..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Ansicht/_Zeichensatz/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Ansicht/_Zeichensatz"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Ansicht/_Zeichensatz/_Automatikerkennung"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Ansicht/_Zeichensatz/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Ansicht/_Zeichensatz/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Ansicht/_Zeichensatz/Western European (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Ansicht/_Zeichensatz/Western European (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Ansicht/_Zeichensatz/Central European (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Ansicht/_Zeichensatz/_Baltic (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Ansicht/_Zeichensatz/Baltic (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Ansicht/_Zeichensatz/Greek (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Ansicht/_Zeichensatz/Turkish (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Ansicht/_Zeichensatz/Cyrillic (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Ansicht/_Zeichensatz/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Ansicht/_Zeichensatz/Cyrillic (KOI8-_U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Ansicht/_Zeichensatz/Cyrillic (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Ansicht/_Zeichensatz/Japanese (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Ansicht/_Zeichensatz/Japanese (_Shift_JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Ansicht/_Zeichensatz/Simplified Chinese (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Ansicht/_Zeichensatz/Chinese (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Ansicht/_Zeichensatz/Korean (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Ansicht/_Zeichensatz/Korean (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Ansicht/_Zeichensatz/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Ansicht/_Zeichensatz/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Ansicht/ffnen in _neuem Fenster"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Ansicht/Nachrichten_quelle"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Ansicht/_Zeige alle Kopfzeilen"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Ansicht/Akt_ualisiere Ablageninhalt"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Nachricht"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/_Nachricht/Empfang"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Nachricht/Empfang/Empfange vom aktuellen Account"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Nachricht/Empfang/Empfange von _allen Accounts"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Nachricht/Empfang/Empfan_g abbrechen"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Nachricht/Empfang/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Nachricht/Sende _wartende Nachrichten"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Nachricht/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Nachricht/Verfasse n_eue Nachricht"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Nachricht/An_twort"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Nachricht/Ant_wort an"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Nachricht/Ant_wort an/_Alle"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Nachricht/Ant_wort an/Ab_sender"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Nachricht/Ant_wort an/Mailing-_Liste"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Nachricht/We_iterleiten"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Nachricht/Weiterleiten als An_hang"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Nachricht/_Umadressieren"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Nachricht/_Verschieben..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Nachricht/_Kopieren..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Nachricht/_Lschen"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Nachricht/_Markieren"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Nachricht/_Markieren/_Markieren"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Nachricht/_Markieren/Markierung _entfernen"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Nachricht/_Markieren/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Nachricht/_Markieren/Als _ungelesen"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Nachricht/_Markieren/Als _gelesen"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Nachricht/_Markieren/Alle _als gelesen"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Nachricht/Wieder_bearbeiten"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Werkzeug/Absender in Adress_buch einfgen"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Werkzeug/Alle Nachrichten einer Ablage _filtern"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Werkzeug/Aus_gewhlte Nachrichten filtern"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Werkzeug/Filter _erstellen"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Werkzeug/Filter _erstellen/_Automatisch"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Werkzeug/Filter _erstellen/nach _Von"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Werkzeug/Filter _erstellen/nach A_n"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Werkzeug/Filter _erstellen/nach _Betreff"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Werkzeug/_Lsche mehrfach vorhandene Nachrichten"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Werkzeug/A_usfhren"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Werkzeug/L_ogbuch-Fenster"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Einstellungen"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Einstellungen/Allgemeine _Einstellungen..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Einstellungen/_Filtereinstellungen..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Einstellungen/_Schablone..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Einstellungen/Aktionen..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Einstellungen/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Einstellungen/_Einstellungen fr den aktuellen Account..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Einstellungen/_Neuen Account erstellen..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Einstellungen/Accounts _bearbeiten..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Einstellungen/Aktuellen Account _wechseln..."
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Hilfe/_Anleitung"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Hilfe/Anleitung/_English"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Hilfe/Anleitung/_Japanese"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Hilfe/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Hilfe/_FAQ/_English"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Hilfe/_FAQ/_German"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Hilfe/_FAQ/_Spanish"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Hilfe/_FAQ/_French"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Hilfe/_FAQ/_Italian"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Hilfe/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Erstelle Hauptfenster...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Haupt-Fenster: Bereitstellung von Farbe %d fehlgeschlagen\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "Fertig.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Unbenannt"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "nicht"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Wechsle Fenstertrennungstyp von %d zu %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Verbindungslos"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Sie sind nicht verbunden. Verbinden?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Leere Papierkorb"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Lsche alle Nachrichten im Papierkorb?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Neue Mailbox"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Geben Sie den Ort der Mailbox an.\n"
+"Wenn die existierende Mailbox angegeben wird, wird\n"
+"sie automatisch durchsucht."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Die Mailbox `%s' existiert bereits."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Erstellen der Mailbox fehlgeschlagen.\n"
+"Vielleicht existieren einige Dateien, oder Sie haben keine Schreibrechte"
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Ablagenansicht"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Nachrichtenansicht"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/An_twort"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Antwort an alle"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/Ant_wort an Ab_sender"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/Antwort an Mailing-_Liste"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Weiterleiten"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Weiterleiten als An_hang"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/_Umadressieren"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Holen"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Neue E-Mail aufnehmen"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Hole alle"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Neue E-Mail aller Accounts aufnehmen"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Senden wartender Nachrichten"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Verfassen"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Neue Nachricht verfassen"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Antwort"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Nachricht beantworten"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Alle beantworten"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Antwort an alle"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Weiterleiten"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Nachricht weiterleiten"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Nachricht lschen"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Ausfhren"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Markierten Prozess ausfhren"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Nchste ungelesene Nachricht"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Einstellungen"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Allgemeine Einstellungen"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Account"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Accounteinstellungen"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Sie sind nicht verbunden. Whlen sie das Bild zum Verbinden."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Sie sind verbunden. Whlen sie das Bild, um die Verbindung zu beenden."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Beenden"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Beenden des Programms?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "kann nicht in temporre Datei schreiben\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Erhaltene Nachrichten von %s in %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Kann Mbox-Datei nicht lesen.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "Ungltiges Mbox-Format: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "zerstrte Mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "kann temporre Datei nicht ffnen\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"uncodiertes Von gefunden:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d Nachrichten gefunden.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "kann Sperrdatei %s nicht erstellen\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "Benutze, wenn mglich, 'flock' anstatt 'file'.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "Kann %s nicht erstellen\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "Mailbox gehrt einem anderen Prozess, warten...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "kann %s nicht sperren\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "ungltiger Sperrtyp\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "kann %s nicht entperren\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "Kann Mailbox nicht auf null setzen.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportiere Nachrichten von %s in %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Aktuelle Nachricht durchsuchen"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Text suchen:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Gro-/Kleinschreibung"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Rckwrts suchen"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Suchen"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Suche fehlgeschlagen"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Gesuchte Zeichenkette nicht gefunden."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Anfang der Liste erreicht; weiter vom Ende?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Ende der Liste erreicht; weiter vom Anfang?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Suche beendet"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Erstelle Nachrichtenansicht...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Speichern als"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "berschreiben"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "berschreibe existierende Datei?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Kann Datei `%s' nicht speichern."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Drucken"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Geben Sie den Druckbefehl ein:\n"
+"(`%s' wird durch den Dateinamen ersetzt)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Druck-Befehlszeile ist ungltig:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "kann Nachricht %s nicht nach %s kopieren\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Kann markierte Datei nicht ffnen.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "Die Quellablage ist identisch mit dem Ziel.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopiere Nachricht %s%c%d nach %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Letzte Nummer im Verzeichnis %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_ffnen"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/ffne _mit..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Darstellung als Text"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Speichern _als..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Digitale Unterschrift berprfen"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Erstelle MIME-Ansicht...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME Typ"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Text"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Anhnge"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Whle \"Digitale Unterschrift berprfen\" zum berprfen"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht speichern."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "ffnen mit"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Geben Sie die Befehlszeile zum ffnen der Datei an:\n"
+"(`%s' wird durch den Dateinamen ersetzt)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME Betrachterbefehl ist ungltig: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "erstelle NNTP-Verbindung zu %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP-Verbindung mit %s:%d wurde aufgehoben. Erneut verbinden...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "Artikel %d wurde schon zwischengespeichert.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "empfange Artikel %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "kann Artikel %d nicht lesen\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "kann die Newsgroup-Liste nicht empfangen\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "kann Artikel nicht senden.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "kann Artikel %d nicht empfangen\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "kann die Gruppe: %s nicht whlen\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "ungltiger Artikelbereich: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "Keine neuen Artikel.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "bekomme Newsbersicht %d - %d in %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "kann Newsbersicht nicht bekommen\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "Fehler beim Empfang der Newsbersicht.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "ungltige Newsbersichtszeile: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "kann XHDR nicht bekommen\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "Fehler beim Empfang von XHDR.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "keine Verbindung mit NNTP-Server: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "Protokollfehler: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "Protokollfehler\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Fehler beim Senden\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Fehler aufgetreten beim Senden eines Befehls\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Mantra"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[keine Benutzer-ID]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sGeben Sie, bitte, das Mantra fr:\n"
+"\n"
+" %.*s \n"
+"(%.*s) an\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Falsches Mantra! Nochmal...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Erforderlichen APOP-Zeitstempel in der Begrung nicht gefunden\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Zeitstempel-Syntax-Fehler in Begrung\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3-Protokollfehler\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "ungltige UIDL-Antwort: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Lsche abgelaufene Nachricht %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Nachricht %d berspringen (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "Mailbox ist blockiert\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "Sitzungszeit abgelaufen\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "kann TLS-Sitzung nicht beginnen\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "Fehler whrend der Beglaubigung\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "Befehl wird nicht untersttzt\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "Fehler whrend einer POP3-Sitzung\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lese Konfiguration...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Gefunden %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Einlesen der Konfuguration beendet.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguration wurde gespeichert.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "bernehmen"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "ffne Accounteinstellungenfenster...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Account%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Einstellungen eines neuen Accounts"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Accounteinstellungen"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Erstelle Accounteinstellungenfenster...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Empfangen"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privat"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Speziell"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Name dieses Accounts"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Standard-Account"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Persnliche Informationen"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Vollstndiger Name"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-Mail-Adresse"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organisation"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Serverdaten"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Keiner (lokal)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Dieser Server bentigt Beglaubigung"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Newsserver"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server zum Empfangen"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP-Server (senden)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Benutzer-ID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Kennwort"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Dieser Server bentigt Beglaubigung"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Nachrichten vom Server nach Empfang lschen"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Entfernen nach"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "Tag(en)"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 Tage: sofort entfernen)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Lade alle Nachrichten vom Server herunter"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Grenze fr Nachrichtenge beim Empfang"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Nachrichten beim Empfang filtern"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Standard Posteingang"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Ungefilterte Nachrichten werden in dieser Ablage gespeichert)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Beglaubigungsmethode"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr ""
+"`Hole alle' beprft ob neue Nachrichten fr diesen Account vorhanden sind"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Kopfzeilen"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Fge Datum in Kopfzeile ein"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Erzeuge Nachrichten-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Fge benutzerdefinierte Kopfzeile ein"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Bearbeiten... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Beglaubigung"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP-Beglaubigung (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Wenn Sie diese Eintrge frei lassen, wird\n"
+"die ID und das Passwort zum Empfang verwendet."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Beglaubige mit POP3 vor dem Senden"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Befehlsausgabe"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Setze folgende Adressen automatisch"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Antwort an"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Nachrichten immer verschlsseln"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Nachrichten immer digital unterschreiben"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Benutze ASCII-Hllen Format zum Verschlsseln"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Benutze digitale Klartext-Unterschrift"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Schlssel fr digitale Unterschrift"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Benutze voreingestellten GnuPG-Schlssel"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Whle Schlssel nach E-Mail Adresse"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Schlssel manuell angeben"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Benutzer- oder Schlssel-ID"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "SSL nicht benutzen"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "SSL fr POP3-Verbindung benutzen"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Fr SSL-Sitzung STARTTLS-Befehl benutzen"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "SSL fr IMAP4-Verbindung benutzen"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "SSL fr NNTP-Verbindung benutzen"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Senden (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SSL fr SMTP-Verbindung benutzen"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Benutze non-blocking SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Ausschlalten, wenn Probleme mit der SSL-Verbindung)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTP-Port angeben"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3-Port angeben"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4-Port angeben"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "NNTP-Port angeben"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Domnnamen angeben"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP-Serververzeichnis."
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Gesendete Nachrichten speichern in"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Entwrfe speichern in"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Gelschte Nachrichten speichern in"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Keine Account-Name angegeben."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Keine E-Mail-Adresse angegeben."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Keinen SMTP-Server angegeben."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Keine Benutzer-ID angegeben."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Keinen POP3-Server angegeben."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Keinen IMAP4-Server angegeben."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Keinen NNTP-Server angegeben."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Es wird nicht empfohlen den alten ASCII-Hllen Modus\n"
+"fr verschlsselte Nachrichten zu verwenden. Es entspricht\n"
+"nicht dem RFC 3156 - MIME Security with OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Aktionen-Einstellung"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Menname:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Befehlszeile:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Menname:\n"
+" Benutze / im Mennamen um Unterverzeichnisse zu erstellen.\n"
+"Befehlszeile:\n"
+" Beginne mit:\n"
+" | um Nachrichtenkrper oder -auswahl an Befehl zu senden\n"
+" > um vom Benutzer erstellten Text an Befehl zu senden\n"
+" * um vom Benutzer erstellten und versteckten Text an Befehl zu senden\n"
+" Ende mit:\n"
+" | um Nachrichtenkrper oder -auswahl mit Befehlsausgabe zu ersetzen\n"
+" > um Befelsausgabe einzufgen ohne den alten Text zu ersetzen\n"
+" & um Befehl asynchron laufen zu lassen\n"
+" Benutze %f fr Nachrichten-Dateinamen\n"
+" %F fr eine Liste von Dateinamen der gewhlten Nachrichten\n"
+" %p fr den gewhlten Nachrichtenteil. %u fr ein Benutzer-Parameter\n"
+" %h fr ein versteckten Benutzer-Parameter\n"
+" %s fr die Textauswahl"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Ersetzen "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Syntax Hilfe "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrierte Aktionen"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Neue)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Menname ist nicht gesetzt."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Doppelpunkt ':' ist im Mennamen nicht erlaubt."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Menname ist zu lang."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Befehlszeile ist nicht gesetzt."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Menname und Befehl sind zu lang."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Der Befehl\n"
+"%s\n"
+"hat einen Syntax-Fehler."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Aktion lschen"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Wollen Sie diese Aktion wirklich lschen?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Erstelle Allgemeine-Einstellungenfenster...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Allgemeine Einstellungen"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Zitat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Anzeige"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Nachricht"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Weiteres"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Externes Programm"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Benutze externes Programm, um E-Mails zu empfangen"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Befehl"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokale Mailboxdatei"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Empfange aus lokaler Mailboxdatei"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtern beim Empfang"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Pfad zur Mailboxdatei"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automatische Aktualisierung"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "jedes"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "Minute(n)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Hole neue E-Mail beim Programmstart"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Aktualisiere alle lokalen Ablagen nach dem Empfang"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximum an herunterzuladenden Artikeln\n"
+"(0 angeben fr unbegrenzt)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Benutze externes Programm zum Senden"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Gesendete Nachrichten in Gesendet-Ablage speichern"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Ausgehender Zeichensatz"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatisch (Empfohlen)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Western European (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Western European (ISO-8859-15"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Central European (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltic (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltic (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Greek (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turkish (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillic (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillic (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillic (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrillic (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japanese (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japanese (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japanese (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Simplified Chinese (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditional Chinese (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditional Chinese (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chinese (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korean (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Wenn `Automatisch' gewhlt ist, wird die optimale\n"
+"Zeichensatzkodierung fr die aktuelle Locale-Einstellung benutzt."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "bertragungscodierung"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Geben Sie die Inhalt-bertragungs-Kodierung an\n"
+"wenn die Nachricht keine ASCII Zeichen enthlt."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Unterschriftentrenner"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Automatisch einfgen"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Starte externen Editor automatisch"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Stufen der Rckgngigmachung"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Zeilenumbruch nach"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "Zeichen"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Zitat umbrechen"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Bei der Eingabe umbrechen"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Zeilenumbruch vor dem Senden"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Whle automatisch den Account fr die Antworten"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Zitiere Nachricht in der Antwort"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Antwort-Knopf fhrt Antwort an Mailing-Liste aus"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Antwort-Format"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Zitatzeichen"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Weiterleiten-Format"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Beschreibung der Symbole "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Schriftart"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "bersetze Kopfzeilennamen (wie `Von:', `Betreff:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Zeige Anzahl der ungelesenen E-Mails nach Ablagenname"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Krze Newsgroups lnger als"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "Zeichen"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Ablageninhaltsansicht"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Zeige Empfnger in `Von'-Spalte, wenn Sie selbst der Sender sind"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Threads entfalten"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Datumsformat"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Setze Ablageninhalt-Eintrge... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Benutze Farben fr Nachrichten"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Stelle Mehr-byte Alphabet und Zahlen als\n"
+"ASCII-Zeichen dar (nur Japanisch)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Zeige Kopfzeilenleiste ber Nachrichtenansicht"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Zeige kurze Kopfzeilen in der Nachrichtenansicht"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Zeilenabstand"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "Pixel"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Halte Abstand vom Anfang"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Scroll"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Halbe Seite"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Flieendes Scrollen"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Schritt"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "Gre angehngter Bilder in das Fenster einpassen"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "berprfe digitale Unterschriften automatisch"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr ""
+"Zeige das Ergebnis der berprfung der digitalen Unterschrift in einem POPUP-"
+"Fenster an"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Mantra zeitweise speichern"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Luft aus nach"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "Minute(n)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"('0' speichert das Mantra fr die gesamte\n"
+"Sitzung)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Eingabe sperren, bei der Eingabe eines Mantra"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Zeige Warnung beim Start, wenn GnuPG nicht funktioniert"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Nachrichten immer ffnen, wenn in der Ablageninhaltsansich ausgewhlt"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Erste Nachricht anzeigen beim ffnen einer Ablage"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+"Nachrichten als gelesen markieren, wenn sie in einem neuen Fenster geffnet "
+"werden"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Zum Posteingang wechseln, nach dem Empfang neuer E-Mail"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Sofort Ausfhren beim Bewegen oder Lschen von Nachrichten"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Nachricht wird markiert bis zur Ausfhrung,\n"
+" wenn das ausgeschaltet ist)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Empfangen-Dialog"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Zeige Empfangen-Dialog"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Immer"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Nur bei manuellem Empfang"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nie"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Keinen Fehler-Dialog bei Empfangsfehlern erscheinen lassen"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Empfangen-Dialog schlieen nach Beendigung"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Tastenkombinationen whlen... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Externe Befehle (%s wird durch Dateinamen / URI ersetzt)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Internet-Browser"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Adresse bei Doppel-Klick ins Ziel einfgen"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Beim Beenden"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Nachfragen beim Beenden"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Leere Papierkorb beim Beenden"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Fragen vor dem Leeren"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Warnen, wenn wartende Nachrichten vorhanden"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Socket I/O timeout:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "Sekunde(n)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "gekrzter Wochentagsname"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "Wochentagsname"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "gekrzter Monatsname"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "Monatsname"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "bevorzugtes Datums- und Zeitformat fr die aktuelle Locale-Einstellung"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "Jahrhundert (Jahr/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "Tag des Monats als Zahl"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "Stunde als Zahl (24h Anzeige)"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "Stunde als Zahl (12h Anzeige)"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "Tag des Jahres als Zahl"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "Monat als Zahl"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "Minute als Zahl"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "entweder AM oder PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "Sekunde als Zahl"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "Wochentag als Zahl"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "bevorzugtes Datumsformat fr die aktuelle Locale-Einstellung"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "letzten beiden Stellen des Jahres"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "Jahr als Zahl"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "Zeitzone oder Name oder Abkrzung"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Steuerzeichen"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Beschreibung"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Beispiel"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Setze Nachrichtenfarbe"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Farben"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Zitierter Text - Erste Ebene"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Zitierter Text - Zweite Ebene"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Zitierter Text - Dritte Ebene"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI-Link"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Stelle Zitatfarben wiederher"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Whle Farbe fr Zitatebene 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Whle Farbe fr Zitatebene 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Whle Farbe fr Zitatebene 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Whle Farbe fr URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Beschreibung der Symbole"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Von\n"
+"Vollstndiger Name des Absenders\n"
+"Vorname des Absenders\n"
+"Initialen des Absenders\n"
+"Betreff\n"
+"An\n"
+"CC\n"
+"News-Gruppen\n"
+"Nachrichten-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Wenn x gesetzt ist, zeige expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Nachrichteninhalt\n"
+"Zitierter Nachrichteninhalt\n"
+"Nachrichteninhalt ohne Unterschrift\n"
+"Zitierter Nachrichteninhalt ohne Unterschrift\n"
+"Wrtlich %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Backslash\n"
+"Fragenmarkierung\n"
+"ffnende Klammer\n"
+"schlieende Klammer"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Schriftauswahl"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Tastenkombinationen"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Whlen Sie die Voreinstellungen fr die Abkrzungstasten.\n"
+"Durch benutzen einer Tastekombination, wenn der Mauszeiger ber einem "
+"Meneintrag\n"
+"ist, knnen Sie die Abkrzungstastenkombination jedes Meneintrags ndern."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Standard"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Altes Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Benutzerdefinierte Kopfzeileneinstellungen"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Benutzerdefinierte Kopfzeilen"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Kopfzeilenname ist nicht gesetzt."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Kopfzeilen lschen"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Wollen Sie wirklich diese Kopfzeile lschen?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Erstelle Kopfzeilen-Einstellungen-Fenster...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Kopfzeilen-Einstellungen"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Kopfzeilenname"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Angezeigte Kopfzeilen"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Versteckte Kopfzeilen"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Zeige alle unspezifizierten Kopfzeilen"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lese Konfiguration zum Anzeigen der Kopfzeilen...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Schreibe Konfiguration zum Anzeigen der Kopfzeilen...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Diese Kopfzeile ist bereits in der Liste enthalten."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filtereinstellungen"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "An"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "Anfang"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "Ende"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Kopieren..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Lsche Regel"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Wollen Sie wirklich diese Regel lschen?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Filterregel"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Wenn eine der folgenden Bedingungen zutrifft"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Wenn alle der folgenden Bedingungen zutriffen"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Die folgenden Aktionen ausfhren:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "An oder Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Jede Kopfzeile"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "Kopfzeile bearbeiten..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Nachrichtenkrper"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Ergebnis des Befehls"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "Alter"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "enthalten"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "nicht enthalten"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "ist"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "ist nicht"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "entspricht Regex"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "entspricht nicht Regex"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "ist grer als"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "ist kleiner als"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "ist lnger als"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "ist krzer als"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Bewege zu"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Kopiere nach"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Nicht empfangen"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Vom Server lschen"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "Setze Markierung"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Setze Farbe"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Markieren als gelesen"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Weiterleiten als Anhang"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Umadressieren"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Befehl ausfhren"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Beende Regelauswertung"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "Ablage:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "Adresse:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "Kopfzeile bearbeiten..."
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Kopfzeilen"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Kopfzeilen:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "Regelname wurde nicht angegeben."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "Befehl wurde nicht gesetzt."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Es existiert eine ungltige Bedingung."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "Zielablage wurde nicht angegeben."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Es existiert eine ungltige Aktion."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "Die Bedingung existiert nicht."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "Die Aktion existiert nicht."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Ablage-Eigenschaften"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Allgemein"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+"[...] oder (...) am Anfang des Betreffes der Ablageninhaltsansicht nicht "
+"zeigen"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "[...] oder (...) am Anfang des Betreffes der Antwort lschen"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Auf Unterablagen anwenden"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "auch bei Antwort benutzen"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Antwort an:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Markiert"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Anhang"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Betreff"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Von"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nummer"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Erstelle Ablageninhalt-Spalten-Einstellungen-Fenster\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Ablageninhalt-Eintrag-Einstellungen"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Whlen Sie die Eintrge, die in der Ablageninhaltsansicht dargestellt "
+"werden.\n"
+"Sie knnen die Reihenfolge der Eintrge mit den Auf-/Ab-Knpfen oder mit der "
+"Maus verndern."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Vorhandene Eintrge"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Angezeigte Eintrge"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Standardeinstellung"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Schablonenname"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrieren"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Ersetzen "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symbole "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrierte Schablonen"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Schablonen"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Schablone"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Schablonen-Format-Fehler."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Schablone lschen"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Wollen Sie diese Schablone wirklich lschen?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Zeichensatzumsetzung fehlgeschlagen.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "kann markierte Datei nicht ffnen\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "kann Nachricht %d nicht holen\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Senden wartender Nachricht %d fehlgeschlagen.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Druck-Befehlszeile ist ungltig: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Erstelle Fortschrittsdialog...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "Fehler beim Empfang von Daten.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Kann nicht in Datei schreiben.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: digitale Unterschrift nicht verifiziert"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Keine digitale Unterschrift gefunden"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Gute digitale Unterschrift"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "SCHLECHTE digitale Unterschrift"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr ""
+"Kein ffentlicher Schlssel zum Verifizieren der digitalen Unterschrift"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Fehler beim Verifizieren der digitalen Unterschrift"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Unterschiedliche Ergebnisse fr Unterschriften"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Fehler: Unbekannter Status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Gute digitale Unterschrift von \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "SCHLECHTE digitale Unterschrift von \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Finde keine User-ID fr diesen Schlssel."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Digitale Unterschrift erstellt %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Schlssel Fingerprint: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Whle Schlssel fr '%s' "
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Sammle Informationen fr '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Whle Schlssel"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Schlssel-ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Schlsel hinzufgen"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Eine andere Benutzer- oder Schlssel-ID angeben:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Kopfzeilen wartender Nachricht ist defekt.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Verbinde"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Verbindung mit SMTP-Server: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Sende HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Beglaubigen"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Sende Nachricht..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Sende EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Sende MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Sende"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Sende RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Sende DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Beende..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Sende Nachricht (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Sende Nachricht"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Fehler aufgetreten beim Senden der Nachricht."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Fehler beim Senden der Nachricht aufgetreten:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Setze Mailbox"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Zuerst muss der Ort der Mailbox gesetzt werden.\n"
+"Sie knnen eine vorhandene Mailbox im MH-Format nutzen.\n"
+"Wenn Sie sich nicht sicher sind, whlen Sie OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Digitale Unterschrift berprfen"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s von \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH nicht verfgbar\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "fehlerhafte SMTP-Antwort\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "Fehler whrend einer SMTP-Sitzung\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Erstelle Quellen-Fenster...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Nachrichtenquellen"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Anzeige der Quellen von %s...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Quellen"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 nicht verfgbar\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 verfgbar\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 nicht verfgbar\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 verfgbar\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL-Methode nicht verfgbar\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Unbekannte SSL-Methode *PROGRAMM FEHLER*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Fehler beim Erstellen des SSL-Kontextes\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL-Verbindung fehlgeschlagen (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL-Verbindung benutzt %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Server-Zertifikat:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Betreff: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Aussteller(in): %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Suche Nachrichten"
+
+#: src/summary_search.c:129
+#, fuzzy
+msgid "Match any of the following"
+msgstr "Wenn eine der folgenden Bedingungen zutrifft"
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Wenn alle der folgenden Bedingungen zutriffen"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Nachricht:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Alle Treffer auswhlen"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Anfang der Liste erreicht. Weiter vom Ende?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Ende der Liste erreicht. Weiter vom Anfang?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Ant_wort an"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Ant_wort an/_Alle"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Ant_wort an/Ab_sender"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Antwort an/Mailing-_Liste"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Verschieben..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopieren..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Markieren"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Markieren/_Markieren"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Markieren/Markierung _entfernen"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Markieren/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Markieren/Als _ungelesen markieren"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Markieren/Als _gelesen markieren"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Markieren/_Alle als gelesen markieren"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Far_betikett"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Wi_ederbearbeiten"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Absender in Adress_buch einfgen"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Ansicht/_Quellen"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Ansicht/Alle _Kopfzeilen"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Drucken..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nr."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Erstelle Ablageninhaltsansicht...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Markierte verarbeiten"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Einige Markierungen sind brig. Verarbeiten?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Durchsuche Ablage (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Keine weiteren ungelesenen Nachrichten"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Keine ungelesene Nachricht gefunden. Vom Ende suchen?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Keine ungelesenen Nachrichten."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Keine ungelesene Nachricht gefunden. Gehe zu nchster Ablage?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Weitersuchen"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Keine weiteren neuen ungelesenen Nachrichten"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Keine neue Nachricht gefunden. Vom Ende suchen?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Keine neuen Nachrichten."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Keine neue Nachricht gefunden. Gehe zu nchster Ablage?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Keine weiteren ungelesenen Nachrichten"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Keine markierte Nachricht gefunden. Vom Ende suchen?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Keine markieten Nachrichten."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Keine markierte Nachricht gefunden. Vom Anfang suchen?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Keine weiteren etikettierten Nachrichten"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Keine etikettierte Nachricht gefunden. Vom Ende suchen?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Keine etikettierten Nachrichten."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Keine etikettierte Nachricht gefunden. Vom Anfang suchen?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Ziehe Nachrichten nach Betreff an..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d gelscht"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d verschoben"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopiert"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " Eintrge gewhlt"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d Neue, %d Ungelesene, %d Gesamt (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d Neue, %d Ungelesene, %d Gesamt"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sortiere Ablagenansicht..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tErstelle Ablageninhalt aus Nachrichtendaten"
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Erstelle Ablageninhalt aus Nachrichtendaten..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Schreibe Ablageninhaltszwischenspeicher (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Kein Datum)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Nachricht %d ist markiert.\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Nachricht %d ist markiert als gelesen\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Nachricht %d ist markiert als ungelesen\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Nachricht %s/%d ist zum Lschen markiert\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Nachricht(en) lschen"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Wollen Sie wirklich diese Nachricht(en) aus dem Papierkorb lschen?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Lsche mehrfach vorhandene Nachrichten..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Nachricht %s/%d ist nicht markiert.\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Nachricht %d ist markiert zum Verschieben nach %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Das Ziel ist gleich der aktuellen Ablage."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Nachricht %d ist markiert zum Kopieren nach %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "Das Kopierziel ist gleich der aktuellen Ablage."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Whle alle Nachrichten..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Fehler beim Verarbeiten der Nachrichten."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Threads erstellen..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Threads aufheben..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Threads zur Ausfhrung aufheben..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtern..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtern..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "Es wurde(n) %d Nachricht(en) gefiltert."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "Datei %s existiert bereits\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Erstelle Textansicht...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Diese Nachricht kann nicht dargestellt werden.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Zum Speichern dieses Teiles, ffnen Sie das Kontextmen mit der "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "rechten Maustaste und whlen Sie `Speichern als...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"oder drcken die `y'-Taste.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Zum Anzeigen dieses Teiles der Nachricht als Text, whlen Sie "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Darstellung als Text', oder drcken Sie die `t'-Taste.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Zum ffnen dieses Teiles mit einem externen Programm, whlen Sie "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`ffnen' oder `ffnen mit...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "oder Doppel-Klick, oder drcken Sie die mittlere Maustaste, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "oder die `l'-Taste."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Diese digitale Unterschrift wurde noch nicht geprft.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Zum berprfen, ffnen Sie das Kontextmen mit der\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "rechten Maustaste und `Digitale Unterschrift berprfen' whlen.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"Die wirkliche URL (%s) is verschieden von\n"
+"der sichtbaren URL (%s).\n"
+"Trotzdem ffnen?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "Schreiben in %s fehlgeschlagen.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Kann Datei %s nicht ffnen\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Entferne _Mailbox"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Entferne _IMAP4-Account"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/_News-Account entfernen"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Nachricht/_Senden"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Nachricht/Digital _unterschreiben"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "Keine Nachrichten im lokalen Mailbox.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "lokales Mailboxverzeichnis"
+
+#~ msgid "Condition"
+#~ msgstr "Bedingung"
+
+#~ msgid "Keyword"
+#~ msgstr "Stichwort"
+
+#~ msgid "Destination"
+#~ msgstr "Ziel"
+
+#~ msgid "Use regex"
+#~ msgstr "Benutze regulre Ausdrcke"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrierte Regeln"
+
+#~ msgid "(none)"
+#~ msgstr "(nichts)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Eintrag nicht gespeichert"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "Der Eintrag wurde nicht gespeichert. Trotzdem schlieen?"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Daten im Zwischenspeicher sind falsch\n"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "ffne-URI-Befehlszeile ist ungltig: `%s'"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 00000000..bde3543e
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,7027 @@
+# Hellenic translation of Sylpheed
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Michalis Kabrianis <Michalis@bigfoot.com>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2001-10-08\n"
+"Last-Translator: Michalis Kabrianis <Michalis@bigfoot.com>\n"
+"Language-Team: Greek <nls@tux.hellug.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-7\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "囓續蜉"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"夬 GPGME 縷轣 copyright 2001 阨 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"装 韵竭瘡赱 縷轣 繼缸蒹髀 謠竕鼬蜉 跟闡縷 轣 辮瘢痲蛛辣煬續 "
+"裃/ 轣 髀竟竟蛩黼 顫 阨 髀 苒 着迚袰 貞踰皷癇 銀繪癇 "
+"恆潁纖 柾竕鼬蜉陜 GNU (GNU General Public Licence) 顆 癜 粢跫皷缸芒 "
+"瘰 坂髟赱 搭缸蒹髀 柾竕鼬蜉陜 (Free Software Foundation), 縷 齡芻 "
+"汪粹鼇 2, (裃 辮蜍閭 黶) 關濶痲溥阡 跂痺纃沒繿 汪粹鼇.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"装 韵竭瘡赱 粡瘢沍續瘟 跂 芻 繼鞏籬 葹 縷轣 驀皷跫, 瘠諚 忸冑 "
+"柄棉 澱稚排; 驃 陜 沍跂鼇 繝笶苴 謀不孅檀箆塲堊 柄堊頬破塲堊 "
+"檀 斗 嗾段妬冑姪溶 喨椀. 総癘繿蒹熹 齡 GNU General Public License 竕 "
+"鞳驩齠繿纈 諷頸闌汨繪纈.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"悲 韵汾繪 轣 泓續 諚矼 沚 瘢熹竟 苒 樞繪癇 癜溟 赱聨 跂 癜 "
+"韵竭瘡赱. 怒 , 竭樢 齡 坂髟赱 搭缸蒹髀 柾竕鼬蜉陜 (Free Software "
+"Foundation) 齡 粡缸蔘逑 Free Software Foundation, Inc., 59 Temple Place - "
+"Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "堤痰樔 蜥 髟蓐燗繪 竕 袍蒹 謠竅驩癈踰...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "托汕芒 瘡鞆諱: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"悶驩袍 鞜驅蔘驕 龜辷纉苒 趺逹赱闥 縷轣 瘢濶.\n"
+"倚驕裃譫 裨縷齡 諱 鞜驅蔘驕 龜辷纉苒 趺逹赱闥 韵蜊 辮緕繿竅齡縷 阨 "
+"謠竅驩癈跫."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "総閙笙 鞜驅蔘髀 辮緕繿竅黯癇 謠竅驩癈跫...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "貞跚阨驛 鞜驅蔘髀 辮緕繿竅黯癇 謠竅驩癈跫...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "盗緕繿竅黯 謠竅驩癈蹊"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "狩闌"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "假褊諡"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "梼韃驂苒"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "假闢葆裹"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "盗緕繿竅黯"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " 堤痺驕"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "鞭"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "俑逋"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 否黼 龜辯蒟 謠竅驩癈踰 "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "暮縷皷跫"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "堤痺驕 謠竅驩癈跫"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "否諷 韵榱赱 轣 粡痺驅續 癜 謠竅驩癈踰;"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "浴"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+寿"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "偵 跟驟黶 轣 粡痰橢 瘻縷."
+
+#: src/action.c:359
+#, fuzzy
+msgid "Could not get message part."
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/action.c:376
+#, fuzzy
+msgid "Can't get part of multipart message"
+msgstr "偵 跟闡 轣 諚磔 贖赱 阨 竟謨趺赱蜉陜 趺逹赱闥"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+
+#: src/action.c:804
+#, fuzzy, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr "偵 跟驟黶 轣 繩繼沒 芻 緕繿蜉 纃闍: %s\n"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr ""
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr ""
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr ""
+
+#: src/action.c:1106
+#, fuzzy
+msgid " Send "
+msgstr "草闢闍"
+
+#: src/action.c:1117
+#, fuzzy
+msgid "Abort"
+msgstr "囓續蜉"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"悼黠竇 芻 竭瘡贖 纃闍溟 繩顆鼇:\n"
+"(夬 `%s' 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"悼黠竇 芻 竭瘡贖 纃闍溟 繩顆鼇:\n"
+"(夬 `%s' 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "假闢葆裹 粡缸蔘逑苒 齡 砠硅熄"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "堤缸蔘逑"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "囓謇"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "盗蜍閭 裃瘠竢 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "相髯鼇"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/荘縷"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/荘縷/慾 砠硅熄"
+
+#: src/addressbook.c:336
+#, fuzzy
+msgid "/_File/New _vCard"
+msgstr "/荘縷/慾 _V-Card"
+
+#: src/addressbook.c:338
+#, fuzzy
+msgid "/_File/New _JPilot"
+msgstr "/荘縷/慾 _J-Pilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/荘縷/慾闥 緕韃驟苳溟"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/荘縷/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/荘縷/盗緕繿竅黯"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/荘縷/堤痺驕"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/荘縷/草闊溯纒鼇"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/荘縷/暮縷皷跫"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/堤缸蔘逑"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/堤缸蔘逑/慾 粡缸蔘逑"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/堤缸蔘逑/慾 闌樞"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/堤缸蔘逑/慾闥 裃樣閭闥"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/堤缸蔘逑/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/堤缸蔘逑/盗緕繿竅黯"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/堤缸蔘逑/堤痺驕"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+#, fuzzy
+msgid "/_Tools"
+msgstr "/淘竅諷焉"
+
+#: src/addressbook.c:357
+#, fuzzy
+msgid "/_Tools/Import _LDIF file"
+msgstr "/荘縷/悼黶笙竈 瘻縷阨 mbox..."
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/啄滓繪"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/啄滓繪/囓續蜉"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/慾 粡缸蔘逑"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/慾 闌樞"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/慾闥 裃樣閭闥"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/盗緕繿竅黯"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/堤痺驕"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "堤缸蔘逑 e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "捕樣閭闥 粡纒蕘逑纖"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "狩闌:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "堤痺驕"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "総瘋漑苴"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "假闥:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "倣蜊關閙苴:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr ""
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "堤痺驕 粡缸蔘逑苒 (粡纒蕘逑纖)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "嘸竢驕 轣 粡痺驅 芻 (蜥) 粡缸蔘逑 (粡纒蕘逑繪);"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "寿"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"否諷 轣 粡痺驅續 闕 裃樣閭 柄 諷 蜥 粡纒蕘逑繪 齡 `%s' ; \n"
+"総 粡痺驅續 闕 裃樣閭 踰迴, 濶 粡纒蕘逑繪 葹 跂瘧蜊艾陜 齡闕 瘰 "
+"靺逋 裃樣閭"
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "捕樣閭闥 踰迴"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "捕樣閭闥 裃 粡纒蕘逑繪"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "嘸竢驕 轣 粡痺驕縷 `%s' ;"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "慾闥 驀齡苒, 粤 跟驟黶 轣 龠齷 瘻縷 粤煌."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "慾闥 驀齡苒, 粤 跟驟黶 轣 龠齷 瘻縷 阨 砠硅熄 粡纒蕘逑纖."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "夬 鞜謇 砠硅熄 粡纒蕘逑纖 跂癆驅韃裙 辮蜚."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"夬 鞜謇 砠硅熄 粡纒蕘逑纖 跂癆驅韃裙,\n"
+"粤 跟驟黶 轣 龠齷 轎 瘻縷 粤煌 粡纒蕘逑纖"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"偵 跟驟黶 轣 跂癆驂 砠硅熄 粡纒蕘逑纖,\n"
+"瘠諚 粢跚陜驛苴 轎 樞繪 瘻縷 砠硅熄 粡纒蕘逑纖."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"偵 跟驟黶 轣 跂癆驂 砠硅熄 粡纒蕘逑纖,\n"
+"粤 跟驟黶 轣 粢跚阨驛潁 轎 瘻縷 砠硅熄 粡纒蕘逑纖."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"偵 跟驟黶 轣 跂癆驂 砠硅熄 粡纒蕘逑纖,\n"
+"裃 粤 跟驟黶 轣 粢跚阨驛潁 轎 瘻縷 砠硅熄 粡纒蕘逑纖."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "囑樣赱 跂癆髀鞋 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "悶癆髀鞋 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "囑樣赱 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "偵 跟驟黶 轣 粡痰橢 粤煌 苒 粡缸蔘逑苒"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "囑樣赱 跂癆髀鞋 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "悶癆髀鞋 砠硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "堤辮癘"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "醍硅熄 粡纒蕘逑纖"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "喰闌"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "堤缸蔘逑 e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "慾疣賍籬"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "捕樣閭闥"
+
+#: src/addressbook.c:3142
+#, fuzzy
+msgid "vCard"
+msgstr "V-Card"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+#, fuzzy
+msgid "JPilot"
+msgstr "J-Pilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "梼韃驂苒 LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "倣蜊汳 粡纒蕘逑繪"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "假闢韈袤 粡纒蕘逑繪"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "嚊跂燎鼇"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "假閻蜆關閙苴"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "囑樣赱"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "貞跚阨驛 粡樣閭 alert panel...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "浴 繻瘢蜩縷 癜 贖逡赱 芻 辮跂辯 闡"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "倆髞闃瘠"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "放裴蜊"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "剌"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "驕轜"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "矢諷"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "假橢蜊"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "捕"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "壙謠"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/假闢葆裹..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/堤痺驕"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/符蝨苳纈..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/荘縷/草闊溯纒鼇"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/勿逡赱/草闢闍 瘻笨繿"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/勿逡赱/草闊溯纒鼇 齡闕 裃樣閭 韵阯縷髯"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/勿逡赱/草闢闍 瘻笨繿"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/荘縷/假闢橸苴 瘻縷阨"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/荘縷/悼黶笙竈 瘻縷阨"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/荘縷/悼黶笙竈 竟竭癘溟"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/盗緕繿竅黯/総痿驟鼇"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/盗緕繿竅黯/盗瘢樣苻"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/盗緕繿竅黯/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/盗緕繿竅黯/倣鞋"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/盗緕繿竅黯/総蜒驕"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/盗緕繿竅黯/盗蜉諡苴"
+
+#: src/compose.c:491
+#, fuzzy
+msgid "/_Edit/Paste as _quotation"
+msgstr "/盗緕繿竅黯/盗蜉諡苴"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/盗緕繿竅黯/盗蜍閭 譎"
+
+#: src/compose.c:494
+#, fuzzy
+msgid "/_Edit/A_dvanced"
+msgstr "/盗緕繿竅黯/総痿驟鼇"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr ""
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr ""
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr ""
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr ""
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr ""
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr ""
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr ""
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr ""
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr ""
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr ""
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr ""
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr ""
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr ""
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr ""
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/盗緕繿竅黯/総痲熕譎鼇 驂阨黶 鞜驕竭橈阨"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/盗緕繿竅黯/総痲熕譎鼇 赱襃蝙 竭瘡蹊"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/盗緕繿竅黯/総蜒驕"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/草繪褝迚鼇"
+
+#: src/compose.c:572
+#, fuzzy
+msgid "/_View/_To"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/compose.c:573
+#, fuzzy
+msgid "/_View/_Cc"
+msgstr "/草繪褝迚鼇"
+
+#: src/compose.c:574
+#, fuzzy
+msgid "/_View/_Bcc"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/compose.c:575
+#, fuzzy
+msgid "/_View/_Reply to"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/草繪褝迚鼇/---"
+
+#: src/compose.c:577
+#, fuzzy
+msgid "/_View/_Followup to"
+msgstr "/勿逡赱/囎轎繪 黼"
+
+#: src/compose.c:579
+#, fuzzy
+msgid "/_View/R_uler"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/compose.c:581
+#, fuzzy
+msgid "/_View/_Attachment"
+msgstr "假闢橸苴"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+#, fuzzy
+msgid "/_Tools/_Address book"
+msgstr "/淘竅諷焉/捕樣閭闥 粡纒蕘逑纖"
+
+#: src/compose.c:585
+#, fuzzy
+msgid "/_Tools/_Template"
+msgstr "/荘縷/堤痺驕"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+#, fuzzy
+msgid "/_Tools/Actio_ns"
+msgstr "/投沂纉"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+#, fuzzy
+msgid "/_Tools/---"
+msgstr "/淘竅諷焉"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/盗緕繿竅黯/盗緕繿竅黯 跂 緕繿蜉 韵竭瘡赱"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/投沂纉"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/勿逡赱/包頸閭驅苴"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 瘻縷 粤 靺髣繪\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "偵 跟闡 轣 諚磔 贖赱 裙蛹沚阨\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr ""
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr ""
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "夬 瘻縷 %s 粤 靺髣繪\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "偵 跟闡 轣 碌 贔竇蓖 阨 瘻縷阨 %s\n"
+
+#: src/compose.c:1572
+#, fuzzy, c-format
+msgid "File %s is empty."
+msgstr "夬 瘻縷 %s 縷轣 樞繪\n"
+
+#: src/compose.c:1576
+#, fuzzy, c-format
+msgid "Can't read %s."
+msgstr "粤 跟闡 轣 粢跚阨驛潁 %s\n"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "勿逡赱: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "偵 跟闡 轣 諚磔 贖赱 阨 竟謨趺赱蜉陜 趺逹赱闥"
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [夲關關濶芟沚]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 圄辷纉 趺逹赱闥%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "圄辷纉 趺逹赱闥%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr " 鞜驕諳頸苒 粤 泓繪 闡蜩縷."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "草闢闍"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr ""
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "粤 跟闡 轣 靺髯 芻 諧齡 鞜驕諛頸"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+" 謠竅驩癈踰 竕 瘰闢闍 趺逹赱闥 粤 泓繪 闡蜩縷.\n"
+"倚驕裃譫 辮蜍沁 沚 謠竅驩癈踰 韵蜊 齡縷諷."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥 黼 %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "偵 跟闡 轣 瘰闊芒缸齷 贖逡赱 齡 緕繿跂轣."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "粤 跟闡 轣 瘠諚銷 mode 阨 瘻縷阨\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr "偵 跟闡 轣 瘠諚銷 褶粡褊龜迴謠 阨 趺逹赱闥."
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "粤 跟闡 轣 竭樢 芻 裙瘠焙\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "粤 跟闡 轣 癘瘟驂齷 鞜謇 贖逡赱\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "瞽胱 贖逡赱 齡芻 阨驅...\n"
+
+#: src/compose.c:3063
+#, fuzzy
+msgid "can't find queue folder\n"
+msgstr "粤 跟闡 轣 辮蜍沁 闕 裃樣閭: %s\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "粤 跟闡 轣 瞽譎 贖逡赱 齡芻 阨驅\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generated Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "貞跚阨驛 鞜驅蔘髀 龜辷纉苒...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "竟 MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "杢竇蓖"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "草:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "草闢闍 趺逹赱闥"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr ""
+"草闢闍\n"
+"瘻笨繿"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "夬竟葩苴 齡闕 裃樣閭 阨驅 裃 瘰闢闍 瘻笨繿"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "假繪驕"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "草闊溯纒鼇 齡闕 裃樣閭 韵阯縷髯"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "悼黶笙竈"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "悼黶笙竈 瘻縷阨"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "假闢橸苴"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "假闢橸苴 瘻縷阨"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Y竟竭癘"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "悼黶笙竈 竟竭癘溟"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "囎辷沐苒"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "盗緕繿竅黯 跂 緕繿蜉 韵竭瘡赱"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr ""
+"奬謇鈑\n"
+"竭瘡贖"
+
+#: src/compose.c:4229
+#, fuzzy
+msgid "Wrap all long lines"
+msgstr "総痲熕譎鼇 竭瘡蹊"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "門 气褫髀 竟 MIME"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "夬 瘻縷 粤 靺髣繪, 縷轣 樞繪."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "符蝨苳纈"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "庖粡褊竟熈鼇"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "堤樞髀跫"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "狩闌 瘻縷阨"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr " 纃闍 竕 緕繿蜉 韵竭瘡赱 粤 縷轣 气褫驥: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"To 緕繿蜉 韵竭瘡赱 辮緕繿竅黯癇 諷蜚阨驛縷 瘧赱.\n"
+"浴 辮蛯樣譎 繿赱蜩踰 苒 粡繿竅黯癇;\n"
+"process group id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "壹骭癆燗芒 process group id: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "假闢驩逵 瘻縷: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "圄辷纉: 繪黶笙竈 瘰 鞜驕褊謠蓖跂辯 粡繿竅黯\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "偵 跟驟黶 轣 裃諫齷 緕繿蜉 韵竭瘡赱 辮緕繿竅黯癇\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "偵 跟驟黶 轣 竭樢 齡 瘻縷\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "草阡焉 瘢榱逋鼇 瘰 pipe\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "偵 跟闡 轣 瞽譎 齡芻 阨驅 贖逡赱."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "盗蜍閭 瘻縷阨"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "草髑蝌 趺逹赱闥"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "装 贖逡赱 泓繪 髀竟竟蜃蒹, 轣 瘰闡驩蒹;"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "草髑蝌"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "齡 韵繪驕"
+
+#: src/compose.c:5395
+#, fuzzy, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "否諷 韵榱赱 轣 粡痺驕縷 癜 裙瘠焙;"
+
+#: src/compose.c:5397
+#, fuzzy
+msgid "Apply template"
+msgstr "堤痺驕 趺逹赱闥"
+
+#: src/compose.c:5398
+#, fuzzy
+msgid "Replace"
+msgstr "草橄苴"
+
+#: src/editaddress.c:176
+#, fuzzy
+msgid "Edit address"
+msgstr "盗緕繿竅黯 砠硅熄 粡纒蕘逑纖"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "假闢葆裹 轎阨 癆跫"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "盗緕繿竅黯 諷頸闌繿繪 癆跫"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "假汾繪 轣 粹蒹 赧 粡缸蔘逑 mail."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "假汾繪 轣 粹蒹 沚 迴赱 裃 赧 蛹."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "盗緕繿竅黯 齡濶縷 癆跫"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "東瘢蜀跂迴 迴赱"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "盗煦續"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "狩闌"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "倚髯逹跚"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "堤缸蔘逑 e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "懊紆逡跫"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "悶瘧熏苴 俑逋"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "悶瘧熏苴 鞭"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "夲關關閙苴"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "投裃蒂驩鼇"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "夂贖"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "逮皷袍 囈濶縷"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr ""
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "夬 瘻縷 痿辣瘟 轣 縷轣 纃樌繪."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "夬 瘻縷 粤 痿辣瘟 轣 縷轣 气褫髀 砠硅熄 粡纒蕘逑纖."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "偵 跟驟黶 轣 粡痰橢 瘻縷."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "盗緕繿竅黯 砠硅熄 粡纒蕘逑纖"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 碁繝闥 荘縷阨 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "荘縷"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "假闢葆裹 轎阨 砠硅熄 粡纒蕘逑纖"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "假汾繪 轣 粹蒹 沚 迴赱 闌樞癇."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "盗緕繿竅黯 齡濶縷 闌樞癇"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "狩闌 闌樞癇"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "堤纒蕘逑繪 齡芻 闌樞"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr ""
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr ""
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "堤瘉沒蛹纈 粡纒蕘逑繪"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"悶瘧熏苴 粡纒蕘逑纖 E-Mail 韵闥 瘰 闌樞纈 跂 褊跟蛔 跂 "
+"矼諚裼"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "盗緕繿竅黯 諷頸闌繿繪 闌樞癇"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "假闢葆裹 慾癇 賍籬"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "盗緕繿竅黯 裃瘠竢"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "悼黠竇 轎 迴赱 阨 裃瘠竢:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "慾闥 裃樣閭闥"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "悼黠竇 迴赱 阨 轎阨 裃瘠竢:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "夬 瘻縷 粤 痿辣瘟 轣 縷轣 黼 跫髢 JPilot"
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "盗沂緕 瘻縷 JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "盗緕繿竅黯 繝竭癘溟 JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "假鼈續纈 e-Mail 粡纒蕘逑繪"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "假闢葆裹 轎癇 繝竭癘溟 JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "囎辟汕芒 辮蜚 齡闕 緕韃驂"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "偵 跟闡 轣 齦辟繹 齡闕 緕韃驟苳"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "盗緕繿竅黯 緕韃驟苳 LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "狩闌 齦齡溲癆闥"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "傅髞"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 碁繝闥 梼韃驂 "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "総瘋漑苴 瞽鼇"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "包蜚滂蛛 瘢瘋漑苴苒"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " 門粤迚鼬 "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr ""
+
+#: src/editldap.c:411
+#, fuzzy
+msgid "Bind Password"
+msgstr "庖粡褝"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr ""
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "杢竕齡闥 瘻蛻踰 繝竭癘"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "逮皷袍"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr ""
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "假闢葆裹 轎阨 緕韃驂 LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr ""
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr ""
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+
+#: src/editvcard.c:96
+#, fuzzy
+msgid "File does not appear to be vCard format."
+msgstr "夬 瘻縷 粤 痿辣瘟 轣 縷轣 黼 跫髢 VCard."
+
+#: src/editvcard.c:132
+#, fuzzy
+msgid "Select vCard File"
+msgstr "盗蜍閭 瘻縷阨 VCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+#, fuzzy
+msgid "Edit vCard Entry"
+msgstr "盗緕繿竅黯 繝竭癘溟 VCard"
+
+#: src/editvcard.c:296
+#, fuzzy
+msgid "Add New vCard Entry"
+msgstr "假闢葆裹 轎癇 繝竭癘溟 VCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "梼痺竈"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "驃黼 裃樣閭 韵闖驩鼬陜 裃 瘻縷 mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "伜竅熄 裃樣閭闥:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "梼痺竈 瘻縷阨:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "盗蜍閭... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "盗蜍閭 瘻縷阨 緕痺竈"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "瘰沐 轣 竭樢 蜥 髟蓐燗繪 齡 瘻縷\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "盗蜍閭 裃瘠竢"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "悼黼髣跂轣"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+#, fuzzy
+msgid "Sent"
+msgstr "草闢闍"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "驅"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "堤痺驕跛沚"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+#, fuzzy
+msgid "Drafts"
+msgstr "假繪驕"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NewFolder"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr " `%c' 粤 跟闡縷 轣 齦跟繿蜍瘡瞽辣瘟 黼 迴赱 裃瘠竢."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr " 裃樣閭闥 `%s' 靺髣繪 溪."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "粤 跟闡 轣 粢跚阨驛潁 闕 裃樣閭 `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/貞跚阨驛焉 轎阨 裃瘠竢..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/悶闕闌癈焉 裃瘠竢..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/堤痺驕 裃瘠竢"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "銀繪癈赱 粡痺驕跛沚"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+#, fuzzy
+msgid "/_Check for new messages"
+msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#: src/folderview.c:224 src/folderview.c:242
+#, fuzzy
+msgid "/R_ebuild folder tree"
+msgstr "/桃芟汨鼇 粹贖 裃瘠笙"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+#, fuzzy
+msgid "/_Search messages..."
+msgstr "\t総瘋漑苴 齡 瘰髀齔沂癈 趺逹赱... "
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/folderview.c:250
+#, fuzzy
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/囎辟髀贖 黼 newsgroup..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/堤痺驕 newsgroup"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "貞跚阨驛 芻 瘰繪褝迚鼇 裃瘠笙...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "慾"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "槍蛔矚齡"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "瘻."
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "否 蜥 韜苟阮闡煥 裃瘠笙...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "否 蜥 韜苟阮闡煥 裃瘠笙..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "嘴髯鼇 裃瘠笙 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "嘴髯鼇 裃瘠竢 %s ..."
+
+#: src/folderview.c:707
+#, fuzzy
+msgid "Rebuild folder tree"
+msgstr "/桃芟汨鼇 粹贖 裃瘠笙"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+#, fuzzy
+msgid "Rebuilding folder tree..."
+msgstr "桃芟汨鼇 苒 粹贖 裃瘠笙..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "桃芟汨鼇 苒 粹贖 裃瘠笙..."
+
+#: src/folderview.c:741
+#, fuzzy
+msgid "Rebuilding all folder trees..."
+msgstr "嘴髯鼇 裃瘠竢 %s ..."
+
+#: src/folderview.c:818
+#, fuzzy
+msgid "Checking for new messages in all folders..."
+msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr " 裃樣閭闥 %s 縷轣 辮蜍繝贔迴\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "草闢闍 趺逹赱闥"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥 黼 %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"逓齡 迴赱 阨 轎阨 裃瘠竢:\n"
+"(瘢 葩諷 轣 粢跚阨驛潁續 沚 裃樣閭 竕 轣 瞽諷 竟裃瘠竢\n"
+" 韵闢葩齡 `/' 齡 沂闥 阨 闕赱闥)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "逓齡 轎 迴赱 竕 `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "悶闕闌癈焉 裃瘠竢"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"朱濶 濶 裃樣閭濶 裃 趺逹赱 袍 瘰 `%s' 葹 粡痺驕陜.\n"
+"否諷 韵榱赱 轣 粡痺驕陜;"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "堤痺驕 裃瘠竢"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "偵 跟闡 轣 粡痺驅 闕 裃樣閭 `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "銀繪癈赱 粡痺驕跛沚"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "浴 痲繪橢 諱 粡痺驕跛沚 趺逹赱"
+
+#: src/folderview.c:1996
+#, fuzzy, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"嘸竢驕 轣 粡痺驕縷 mailbox `%s' ;\n"
+"(壤 趺逹赱 津 黷滔闕瘟 瘰 闕 籖鼕)"
+
+#: src/folderview.c:1998
+#, fuzzy
+msgid "Remove mailbox"
+msgstr "/堤痺驕 mailbox"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "嘸竢驕 轣 粡痺驕縷 IMAP4 謠竅驩癈踰 `%s';"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "堤痺驕 謠竅驩癈跫 IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "嘸竢驕 轣 粡痺驕縷 newsgroup `%s';"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "堤痺驕 newsgroup"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "嘸竢驕 轣 粡痺驕縷 謠竅驩癈踰 news `%s';"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "堤痺驕 謠竅驩癈跫 news"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "囎辟髀贖 齡 newsgroup"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr ""
+
+#: src/grouplistdialog.c:198
+#, fuzzy
+msgid "Find groups:"
+msgstr "Newsgroups:"
+
+#: src/grouplistdialog.c:206
+#, fuzzy
+msgid " Search "
+msgstr "総瘋漑苴"
+
+#: src/grouplistdialog.c:218
+#, fuzzy
+msgid "Newsgroup name"
+msgstr "Newsgroups:"
+
+#: src/grouplistdialog.c:219
+#, fuzzy
+msgid "Messages"
+msgstr "勿逡赱"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+#, fuzzy
+msgid "Type"
+msgstr "奬竟 MIME"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "総瘢泗鼇"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr ""
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr ""
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr ""
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "粤 跟闡 轣 靺髯 芻 諧齡 newsgroup"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "壙謠"
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d newsgroups 諳蒟裃 (%s 粡痰癈贔轣)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "曹邃繙"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Newsgroups:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "否赱:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "貞跚阨驛 芻 瘰繪褝迚鼇 裙瘠焙癇...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(恙驃 瘰闢闍氈)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(恙驃 否赱)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "貞跚阨驛 瘰繪褝迚鼇 繪褝轣...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "偵 跟闡 轣 闡齷 芻 繪褝轣."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr " IMAP4 龜辟纉 齡 %s:%d 粡瘧韃裙. 盗瘢癈辟纉...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "粢跚阨驛焉 IMAP4 龜辟纉苒 齡 %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr ""
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "粤 跟闡 轣 鼇跂蝙齷 粡繝驕跛沚: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "粤 跟闡 轣 瘰瘠縷\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "粤 跟闡 轣 鼇跂蝙齷 粡繝驕跛沚: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "粤 跟闡 轣 辮蜍沁 闕 裃樣閭: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "夬 瘻縷 鼇賍逑纖 粤 碌汕芒.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "齦轎砒 齧樣赱 裃蕈 諚赳瘢 LIST.\n"
+
+#: src/imap.c:1842
+#, fuzzy, c-format
+msgid "Can't create '%s'\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 %s\n"
+
+#: src/imap.c:1847
+#, fuzzy, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 %s\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 mailbox: LIST 瘰沐\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 mailbox\n"
+
+#: src/imap.c:1997
+#, fuzzy, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 mailbox\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "粤 跟闡 轣 粡痺驅 mailbox\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "粤 跟闡 轣 諚磔 闕 櫁繼\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "齦轎砒 齧樣赱 裃蕈 諚赳瘢 闕 櫁繼.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "粤 跟闡 轣 粡痰橢 闕 櫁繼: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "偵 跟闡 轣 齦辟繹 齡闕 IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2257
+#, fuzzy, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "偵 跟闡 轣 齦辟繹 齡闕 IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr ""
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "粤 跟闡 轣 辮蜍沁 闕 裃樣閭: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "倡齡關閙苴"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr " 縷齒粹 齡 IMAP4 瘰沐.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "粤 跟闡 轣 韵闢葩齷 %s 齡 %s\n"
+
+#: src/imap.c:3366
+#, fuzzy
+msgid "(sending file...)"
+msgstr "囈沂逋 DATA..."
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "粤 跟闡 轣 韵闢葩齷 贖逡赱 %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "粤 跟闡 轣 瘢蜒驅 %d 齡 %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "齧樣赱 裃 芻 纃闍 imap: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "齧樣赱 裃 芻 纃闍 imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "齧樣赱 裃 芻 纃闍 imap: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr ""
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr ""
+
+#: src/import.c:132
+msgid "Import"
+msgstr "悼黶笙竈"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "驃黼 mbox 韵闖驩鼬陜 裃 裃樣閭 韵闖驩鼬陜"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "悼黠笙 瘻縷:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "捕樣閭闥 韵闖驩鼬陜:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "盗沂緕 瘻縷 繪黶笙竈"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr ""
+
+#: src/importldif.c:124
+#, fuzzy
+msgid "File imported."
+msgstr "狩闌 瘻縷阨"
+
+#: src/importldif.c:312
+#, fuzzy
+msgid "Please select a file."
+msgstr "倚驕裃譫 辮蜍沁 裨繪籖 竕 `%s'"
+
+#: src/importldif.c:318
+#, fuzzy
+msgid "Address book name must be supplied."
+msgstr "假汾繪 轣 粹蒹 沚 迴赱 闌樞癇."
+
+#: src/importldif.c:333
+#, fuzzy
+msgid "Error reading LDIF fields."
+msgstr "盗沂緕 瘻縷 繪黶笙竈"
+
+#: src/importldif.c:356
+#, fuzzy
+msgid "LDIF file imported successfully."
+msgstr "夬 鞜謇 砠硅熄 粡纒蕘逑纖 跂癆驅韃裙 辮蜚."
+
+#: src/importldif.c:441
+#, fuzzy
+msgid "Select LDIF File"
+msgstr "盗蜍閭 瘻縷阨"
+
+#: src/importldif.c:516
+#, fuzzy
+msgid "File Name"
+msgstr "狩闌 瘻縷阨"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr ""
+
+#: src/importldif.c:558 src/importldif.c:607
+#, fuzzy
+msgid "LDIF Field"
+msgstr "盗蜍閭 瘻縷阨"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr ""
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr ""
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "盗蜍閭"
+
+#: src/importldif.c:679
+#, fuzzy
+msgid "Address Book :"
+msgstr "醍硅熄 粡纒蕘逑纖"
+
+#: src/importldif.c:689
+#, fuzzy
+msgid "File Name :"
+msgstr "狩闌 瘻縷阨"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr ""
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr ""
+
+#: src/importldif.c:760
+#, fuzzy
+msgid "Prev"
+msgstr "盗蜍閭汳"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "盗跂迴"
+
+#: src/importldif.c:790
+#, fuzzy
+msgid "File Info"
+msgstr "狩闌 瘻縷阨"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr ""
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr ""
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "磨赳橄 轎 趺逹赱"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "倥驩贔逋"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "相髷蒟裙"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "磨赳橄"
+
+#: src/inc.c:531
+#, fuzzy, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "堤痺驕 趺逡賍 瘰 闕 緕韃驂 瘢 鞜驕諛蓖"
+
+#: src/inc.c:535
+#, fuzzy
+msgid "Done (no new messages)"
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr " 龜辟纉 瘰沐"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "H 韈齡關閙苴 瘰沐"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr ""
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr ""
+
+#: src/inc.c:609
+#, fuzzy, c-format
+msgid "Finished (%d new message(s))"
+msgstr "\t%d 轎() 贖逡赱(趺逹赱)\n"
+
+#: src/inc.c:612
+#, fuzzy
+msgid "Finished (no new messages)"
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/inc.c:621
+#, fuzzy
+msgid "Some errors occurred while getting mail."
+msgstr "齦轎砒 齧樣赱 裃蕈 諚赳瘢 芻 瘠諛謠竭癘焉."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "諱赳橄 轎 趺逹赱 阨 謠竅驩癈跫 %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 磨赳橄 轎 趺逹赱"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "囎辟沛赱 齡闕 POP3 server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "偵 跟闡 轣 齦辟繹 齡闕 POP3 server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "倡齡關閙苴"
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "磨赳橄 趺逹赱 瘰 %s 齡 %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "磨赳橄 闕 瘻蛻踰 轎 趺逡賍 (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "磨赳橄 闕 瘻蛻踰 轎 趺逡賍 (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "磨赳橄 闕 瘻蛻踰 轎 趺逡賍 (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "磨赳橄 贔竇蓖 趺逡賍 (LIST)..."
+
+#: src/inc.c:795
+#, fuzzy, c-format
+msgid "Deleting message %d"
+msgstr "堤痺驅 贖逡赱"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "暮縷逋 龜辟纉"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "磨赳橄 贖逡赱 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "堤痺驕 趺逡賍 瘰 闕 緕韃驂 瘢 鞜驕諛蓖"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr " 龜辟纉 瘰沐"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "誤 齧樣赱 齦轎砒 裃蕈 辮緕繿窖肬赱 mail."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "誤 齧樣赱 齦轎砒 裃蕈 辮緕繿窖肬赱 mail."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "偵 靺髣繪 樣謠 髀 齡 籖鼕."
+
+#: src/inc.c:1097
+#, fuzzy
+msgid "Can't write file."
+msgstr "偵 跟闡 轣 竭樢 黼 瘻縷.\n"
+
+#: src/inc.c:1102
+#, fuzzy
+msgid "Socket error."
+msgstr "齧樣赱 韵闃諡阨\n"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+#, fuzzy
+msgid "Mailbox is locked."
+msgstr "剳蓐燗繪 Mailbox"
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "剳蓐燗繪 Mailbox"
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "倡齡關閙苴"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "倡齡關閙苴"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+#, fuzzy
+msgid "Incorporation cancelled\n"
+msgstr "凡 轎阨 mail"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "磨赳橄 轎 趺逹赱 瘰 %s 齡 %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "悼黠竇 褶粡褝 竕 %s 黼 %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "逓齡 闕 褶粡褝"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "捕痺驕 韵闃諡阨"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"夬 瘻縷 `%s' 靺髣繪 溪.\n"
+"偵 跟闡 轣 粢跚阨驛潁 闕 裃樣閭."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr " g_thread 粤 竟齡苟煕續瘟 瘰 芻 glib.\n"
+
+#: src/main.c:246
+#, fuzzy
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"夬 GnuPG 粤 泓繪 繝裃癈瘉縷 齷齡.\n"
+"草纃繿竢竟蜈熹瘟 竟齡滂蜴 OpenPGP."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "恆潁: %s [登彬話]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [粡缸蔘逑] 橄濶竚 鞜驕蕘髀 龜辷纉苒"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 諳 轎 趺逡賍"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 諳 轎 趺逡賍 譎 謠竅驩癈蹊"
+
+#: src/main.c:408
+#, fuzzy
+msgid " --send send all queued messages"
+msgstr " --receive 諳 轎 趺逡賍"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --receive 諳 轎 趺逡賍"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --receive 諳 轎 趺逡賍"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug debug mode"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 繻橄蜩 癜陜 阨 裙蛹沚阨 裃 沁閼闥"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 繻橄蜩 苒 汪粹鼇 裃 沁閼闥"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "寳橸繪 鞜驅蔘髀 龜辷纉苒 趺逹赱闥. 浴 裨縷齷;"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "門逹赱 齡芻 阨驅"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "悶驩袍 趺逹赱 粤 泓阨 齡瘠縷 裃 縷轣 齡芻 阨驅. 浴 裨縷齷;"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "沚 樣謠 Sylpheed 驂繪 溪.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/荘縷/捕樣閭闥"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/荘縷/捕樣閭闥/貞跚阨驛焉 轎阨 裃瘠竢..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/荘縷/捕樣閭闥/悶闕闌癈焉 裃瘠竢..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/荘縷/捕樣閭闥/堤痺驕 裃瘠竢"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/荘縷/假闢葆裹 mailbox..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/荘縷/假闢葆裹 mailbox..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/堤痺驕 mailbox"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/荘縷/捕樣閭闥"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/桃芟汨鼇 粹贖 裃瘠笙"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/荘縷/悼黶笙竈 瘻縷阨 mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/荘縷/梼痺竈 黼 瘻縷 mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/荘縷/銀繪癈赱 粡痺驕跛沚"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/荘縷/草闊溯纒鼇 ..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/荘縷/投顆鼇..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/荘縷/悼黶笙竈 瘻縷阨"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/荘縷/護閼闥"
+
+#: src/mainwindow.c:487
+#, fuzzy
+msgid "/_Edit/Select _thread"
+msgstr "/盗緕繿竅黯/盗蜍閭 譎"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+#, fuzzy
+msgid "/_Edit/_Find in current message..."
+msgstr "/盗緕繿竅黯/総痲熕譎鼇 驂阨黶 鞜驕竭橈阨"
+
+#: src/mainwindow.c:491
+#, fuzzy
+msgid "/_Edit/_Search messages..."
+msgstr "\t総瘋漑苴 齡 瘰髀齔沂癈 趺逹赱... "
+
+#: src/mainwindow.c:494
+#, fuzzy
+msgid "/_View/Show or hi_de"
+msgstr "/草繪褝迚鼇/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#: src/mainwindow.c:495
+#, fuzzy
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/草繪褝迚鼇/弟贖 裃瘠笙"
+
+#: src/mainwindow.c:497
+#, fuzzy
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/草繪褝迚鼇/草繪褝迚鼇 趺逡轆"
+
+#: src/mainwindow.c:499
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/草繪褝迚鼇/几矮闥 繿竅諷燎"
+
+#: src/mainwindow.c:501
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/草繪褝迚鼇/几矮闥 繿竅諷燎/悼褝辣 裃 裙煬纃"
+
+#: src/mainwindow.c:503
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/草繪褝迚鼇/几矮闥 繿竅諷燎/悼褝辣"
+
+#: src/mainwindow.c:505
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/草繪褝迚鼇/几矮闥 繿竅諷燎/輔煬纃"
+
+#: src/mainwindow.c:507
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/草繪褝迚鼇/几矮闥 繿竅諷燎/捕赧"
+
+#: src/mainwindow.c:509
+#, fuzzy
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/草繪褝迚鼇/几矮闥 裃橢癈苒"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/草繪褝迚鼇/励驩齡 鞜驅蔘髀 粹贖 裃瘠笙"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/草繪褝迚鼇/励驩齡 瘰繪褝迚鼇 趺逡賍"
+
+#: src/mainwindow.c:515
+#, fuzzy
+msgid "/_View/_Sort"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/mainwindow.c:516
+#, fuzzy
+msgid "/_View/_Sort/by _number"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 瘻蛻踰"
+
+#: src/mainwindow.c:517
+#, fuzzy
+msgid "/_View/_Sort/by s_ize"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 贔竇蓖"
+
+#: src/mainwindow.c:518
+#, fuzzy
+msgid "/_View/_Sort/by _date"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 芟繿闌芻焉"
+
+#: src/mainwindow.c:519
+#, fuzzy
+msgid "/_View/_Sort/by _from"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 瘰闢闍氈"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 贔竇蓖"
+
+#: src/mainwindow.c:521
+#, fuzzy
+msgid "/_View/_Sort/by _subject"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 葩赱"
+
+#: src/mainwindow.c:522
+#, fuzzy
+msgid "/_View/_Sort/by _color label"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 髷赱 續蜉沐癇"
+
+#: src/mainwindow.c:524
+#, fuzzy
+msgid "/_View/_Sort/by _mark"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 黨赱逑"
+
+#: src/mainwindow.c:525
+#, fuzzy
+msgid "/_View/_Sort/by _unread"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 痲蛔矚齡"
+
+#: src/mainwindow.c:526
+#, fuzzy
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 韵闢橸苴"
+
+#: src/mainwindow.c:528
+#, fuzzy
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/倥驃諛/壤鉗逵趺鼇/壤鉗逵趺鼇 裃 痲蛔矚齡"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+#, fuzzy
+msgid "/_View/_Sort/---"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/---"
+
+#: src/mainwindow.c:530
+#, fuzzy
+msgid "/_View/_Sort/Ascending"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/mainwindow.c:531
+#, fuzzy
+msgid "/_View/_Sort/Descending"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/mainwindow.c:533
+#, fuzzy
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/倥驃諛/壤鉗逵趺鼇/_Attract by subject"
+
+#: src/mainwindow.c:535
+#, fuzzy
+msgid "/_View/Th_read view"
+msgstr "/草繪褝迚鼇/草繪褝迚鼇 趺逡轆"
+
+#: src/mainwindow.c:536
+#, fuzzy
+msgid "/_View/E_xpand all threads"
+msgstr "/草繪褝迚鼇/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#: src/mainwindow.c:537
+#, fuzzy
+msgid "/_View/Co_llapse all threads"
+msgstr "/草繪褝迚鼇/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#: src/mainwindow.c:538
+#, fuzzy
+msgid "/_View/Set display _item..."
+msgstr "/倥驃諛/驩鼬 繻瘢蜀跂逋 齡濶縷..."
+
+#: src/mainwindow.c:541
+#, fuzzy
+msgid "/_View/_Go to"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠"
+
+#: src/mainwindow.c:542
+#, fuzzy
+msgid "/_View/_Go to/_Prev message"
+msgstr "/倥驃諛/俐竅蜊 齡/假閾竢跂迴 贖逡赱"
+
+#: src/mainwindow.c:543
+#, fuzzy
+msgid "/_View/_Go to/_Next message"
+msgstr "/倥驃諛/俐竅蜊 齡/盗跂迴 贖逡赱"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+#, fuzzy
+msgid "/_View/_Go to/---"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/---"
+
+#: src/mainwindow.c:545
+#, fuzzy
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/倥驃諛/俐竅蜊 齡/假閾竢跂迴 痲蛔矚齡 贖逡赱"
+
+#: src/mainwindow.c:547
+#, fuzzy
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/倥驃諛/俐竅蜊 齡/盗跂迴 痲蛔矚齡 贖逡赱"
+
+#: src/mainwindow.c:550
+#, fuzzy
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/倥驃諛/俐竅蜊 齡/假閾竢跂迴 贖逡赱"
+
+#: src/mainwindow.c:551
+#, fuzzy
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/倥驃諛/俐竅蜊 齡/盗跂迴 贖逡赱"
+
+#: src/mainwindow.c:553
+#, fuzzy
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/倥驃諛/俐竅蜊 齡/假閾竢跂迴 鼇跂蝎贔迴 贖逡赱"
+
+#: src/mainwindow.c:555
+#, fuzzy
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/倥驃諛/俐竅蜊 齡/盗跂迴 鼇跂蝎贔迴 贖逡赱"
+
+#: src/mainwindow.c:558
+#, fuzzy
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/倥驃諛/俐竅蜊 齡/假閾竢跂迴 贖逡赱 跂 續蜉沐"
+
+#: src/mainwindow.c:560
+#, fuzzy
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/倥驃諛/俐竅蜊 齡/盗跂迴 贖逡赱 跂 續蜉沐"
+
+#: src/mainwindow.c:563
+#, fuzzy
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/倥驃諛/悶瘧熏苴 黼 樣謠 裃樣閭..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/装赱 瘢痺迸驩鼇"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/汀蜉溟 燈髷韃 (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+#, fuzzy
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/汀蜉溟 燈髷韃 (ISO-8859-_1)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/輔逕驩袰 燈髷韃 (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/逮謾蜉溟 (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/逮謾蜉溟 (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/搭諛迚褝 (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/夬驫蜉 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/宝驩諡蜉 (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/宝驩諡蜉 (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/宝驩諡蜉 (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/宝驩諡蜉 (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/普顆轎肅褊 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/普顆轎肅褊 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/普顆轎肅褊 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/普顆轎肅褊 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/草謠竟蜃贔迴 慕辣肅褝 (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/倚驕粹皷瘧 慕辣肅褝 (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/倚驕粹皷瘧 慕辣肅褝 (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/慕辣肅褝 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/倣驟橙蜉 (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/倣驟橙蜉 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+#, fuzzy
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/慕辣肅褝 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+#, fuzzy
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠/宝驩諡蜉 (Windows-1251)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+#, fuzzy
+msgid "/_View/Open in new _window"
+msgstr "/躯濶竚 黼 轎 鞜驅蔘髀"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+#, fuzzy
+msgid "/_View/Mess_age source"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/草繪褝迚鼇/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#: src/mainwindow.c:653
+#, fuzzy
+msgid "/_View/_Update summary"
+msgstr "/草繪褝迚鼇/庖粡褊龜迴謠"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/勿逡赱"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/勿逡赱/盗瘢-辮緕繿竅黯"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/勿逡赱/凡 瘰 謠 阨 謠竅驩癈跫"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/勿逡赱/凡 瘰 謠 阨 謠竅驩癈跫"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/勿逡赱/草闢闍 瘻笨繿"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/勿逡赱/盗瘢-辮緕繿竅黯"
+
+#: src/mainwindow.c:664
+#, fuzzy
+msgid "/_Message/_Send queued messages"
+msgstr "/勿逡赱/草闢闍 趺逡賍 瘰 芻 阨驅"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/勿逡赱/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/勿逡赱/圄辷纉 轎阨 趺逹赱闥"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/勿逡赱/草橄苴"
+
+#: src/mainwindow.c:669
+#, fuzzy
+msgid "/_Message/Repl_y to"
+msgstr "/勿逡赱/草橄苴 黼"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+#, fuzzy
+msgid "/_Message/Repl_y to/_all"
+msgstr "/勿逡赱/草橄苴 黼 謠"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+#, fuzzy
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/勿逡赱/草橄苴 齡闕 瘰闢闍氈"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+#, fuzzy
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/勿逡赱/草橄苴 黼 謠"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/勿逡赱/假陞蒟鼇"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+#, fuzzy
+msgid "/_Message/For_ward as attachment"
+msgstr "/勿逡赱/假陞蒟鼇 黶 韵闢橸苴"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+#, fuzzy
+msgid "/_Message/Redirec_t"
+msgstr "/勿逡赱/盗瘢-辮緕繿竅黯"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/勿逡赱/悶瘧熏苴..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/勿逡赱/総蜒驕..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/勿逡赱/堤痺驕"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/勿逡赱/嘲赱逑"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/M滔赱/嘲赱逑/嘲赱逑"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/M滔赱/嘲赱逑/総痿驟鼇 黨赱逑苒"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/M滔赱/嘲赱逑/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/M滔赱/嘲赱逑/嘲赱逑 痲蛔矚齡"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/M滔赱/嘲赱逑/嘲赱逑 粡痰癈贔迴"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/M滔赱/嘲赱逑/嘲赱逑 譎 粡痰癈贔轣"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/勿逡赱/盗瘢-辮緕繿竅黯"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+#, fuzzy
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/假闢葆裹 瘰闢闍氈 齡闕 裃樣閭 粡纒蕘逑纖"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+#, fuzzy
+msgid "/_Tools/_Create filter rule"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+#, fuzzy
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#: src/mainwindow.c:716
+#, fuzzy
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/倥驃諛/堤痺驕 粡韜 趺逡賍"
+
+#: src/mainwindow.c:719
+#, fuzzy
+msgid "/_Tools/E_xecute"
+msgstr "/投沂纉"
+
+#: src/mainwindow.c:721
+#, fuzzy
+msgid "/_Tools/_Log window"
+msgstr "/淘竅諷焉/倚驅蔘髀 裃痺驕溟"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/剳蓐燗繪"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/剳蓐燗繪/倣蜊汳 辮蜍閭汳..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/剳蓐燗繪/盗蜍閭汳 煖髯..."
+
+#: src/mainwindow.c:728
+#, fuzzy
+msgid "/_Configuration/_Template..."
+msgstr "/剳蓐燗繪/盗蜍閭汳 煖髯..."
+
+#: src/mainwindow.c:729
+#, fuzzy
+msgid "/_Configuration/_Actions..."
+msgstr "/剳蓐燗繪/盗緕繿竅黯 謠竅驩癈蹊..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/剳蓐燗繪/---"
+
+#: src/mainwindow.c:731
+#, fuzzy
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/剳蓐燗繪/盗蜍閭汳 瘢 謠竅驩癈踰..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/剳蓐燗繪/貞跚阨驛焉 轎阨 謠竅驩癈跫..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/剳蓐燗繪/盗緕繿竅黯 謠竅驩癈蹊..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/剳蓐燗繪/窓諱竈 驂闕闥 謠竅驩癈跫"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/啄滓繪/_Manual"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/啄滓繪/_Manual/巣站蜉"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/啄滓繪/_Manual/普顆轎肅褊"
+
+#: src/mainwindow.c:744
+#, fuzzy
+msgid "/_Help/_FAQ"
+msgstr "/啄滓繪/囓續蜉"
+
+#: src/mainwindow.c:745
+#, fuzzy
+msgid "/_Help/_FAQ/_English"
+msgstr "/啄滓繪/_Manual/巣站蜉"
+
+#: src/mainwindow.c:746
+#, fuzzy
+msgid "/_Help/_FAQ/_German"
+msgstr "/啄滓繪/_Manual/巣站蜉"
+
+#: src/mainwindow.c:747
+#, fuzzy
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/啄滓繪/_Manual/巣站蜉"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr ""
+
+#: src/mainwindow.c:749
+#, fuzzy
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/啄滓繪/_Manual/巣站蜉"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/啄滓繪/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "貞跚阨驛 褫驃 鞜驅蔘髀...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: 裃瘢闌 髯賍 %d 瘰沐\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "气蜊.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "恙驃 熹謠"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "裃轎轣"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr ""
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "銀繪癈赱 粡痺驕跛沚"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "浴 痲繪橢 諱 粡痺驕跛沚 趺逹赱"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "假闢葆裹 mailbox"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"悼黠竇 芻 關闊纉焉 阨 mailbox.\n"
+"総 闡蜩縷 靺髣闕 mailbox, 葹\n"
+"黶髯蒹 癜赱."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "夬 mailbox `%s' 靺髣繪 溪"
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+" 粢跚阨驛焉 阨 mailbox 瘰沐.\n"
+"朔 袍竟蛛 瘻縷 轣 靺髣阨 溪, 粤 泓續 粡裃燎赱 轣 竭樢續 繩縷. "
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr ""
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr ""
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/草橄苴"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "草橄苴 黼 謠"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/草橄苴 齡闕 瘰闢闍氈"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/草橄苴 黼 謠"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/假陞蒟鼇"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+#, fuzzy
+msgid "/For_ward as attachment"
+msgstr "/假陞蒟鼇 韵闢橸苴"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+#, fuzzy
+msgid "/Redirec_t"
+msgstr "/盗瘢-辮緕繿竅黯"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "凡"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "凡 轎阨 mail"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr ""
+"凡\n"
+"譎"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "凡 轎阨 mail 瘰 謠 阨 謠竅驩癈跫"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "草闢闍 譎 趺逡賍 瘰 芻 阨驅"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "圄辷纉"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "草橄苴"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "草橄苴 齡 贖逡赱"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr ""
+"草橄苴\n"
+"譎"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "草橄苴 黼 謠"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "假陞蒟鼇"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "假陞蒟鼇 趺逹赱闥"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "堤痺驕 趺逹赱闥"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "投沂纉"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "投沂纉 鼇跂蝎贔辯 繿竅黯癇"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "盗跂迴 痲蛔矚齡 贖逡赱"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "盗蜍閭汳"
+
+#: src/mainwindow.c:2238
+#, fuzzy
+msgid "Common preferences"
+msgstr "倣蜊汳 盗蜍閭汳"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "柾/鼬"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "剳蓐燗繪 謠竅驩癈跫"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "護閼闥"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "護閼闥 瘰 癜 韵竭瘡赱;"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "粤 跟闡 轣 竭樢 齡 韵闢驩逵 瘻縷\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "磨赳橄 趺逹赱 瘰 %s 齡 %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "粤 跟闡 轣 粡痰橢 瘻縷 mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "趺 气褫驥 跫髢關閙苴 mbox: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "裃襞 跫髢關濶芟沚 mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "粤 跟闡 轣 瘢閙銷 韵闢驩逵 瘻縷\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "托汕芒瘢 %d 趺逹赱.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 瘻縷 lock %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "驥皷跫竟蛩齡 芻 'flock' 瘢 竕 芻 'file' 瘢 縷轣 糒轣.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "粤 跟闡 轣 粢跚阨驛潁 %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr " mailbox 驥皷跫竟蜈熹瘟 瘰 樣諛 粡繿竅黯, 鞳驩贔逋...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "粤 跟闡 轣 裨繪紆齷 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "瘰瘻樞繩闥 竟 裨繪紆赱闥\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "粤 跟闡 轣 鈬裨繪紆齷 %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "粤 跟闡 轣 趺粤轜齷 mailbox.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "梼痺竈 趺逡賍 瘰 %s 韵闥 %s...\n"
+
+#: src/message_search.c:88
+#, fuzzy
+msgid "Find in current message"
+msgstr "草闢闍 趺逹赱闥"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr ""
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "堤癡驩鼬 鞳腋/裙瘠痿"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "総瘋漑苴 韵闥 鞏齷"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "総瘋漑苴"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr " 瘢瘋漑苴 瘰沐"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "夬 裙煬纃 瘢瘋漑苴苒 粤 碌汕芒."
+
+#: src/message_search.c:192
+#, fuzzy
+msgid "Beginning of message reached; continue from end?"
+msgstr "倖癈 芻 瘻 苒 諧齡癇. 浴 齦辣燗 瘰 沂闥;"
+
+#: src/message_search.c:195
+#, fuzzy
+msgid "End of message reached; continue from beginning?"
+msgstr "倖癈 沂闥 苒 諧齡癇. 浴 齦辣燗 瘰 芻 瘻;"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr " 瘢瘋漑苴 繼縷黼"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "貞跚阨驛 瘰繪褝迚鼇 趺逹赱闥...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "草闊溯纒鼇 "
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "塔竭癘 瘰 靺逋"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "塔竭癘 靺逋 瘰 靺髣闕 瘻縷;"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, fuzzy, c-format
+msgid "Can't save the file `%s'."
+msgstr "偵 跟闡 轣 粡痺驅 闕 裃樣閭 `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "投顆鼇"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"悼黠竇 芻 竭瘡贖 纃闍溟 繩顆鼇:\n"
+"(夬 `%s' 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+" 竭瘡贖 纃闍溟 繩顆鼇 縷轣 櫁驥:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "粤 跟闡 轣 瘢蜒驅 贖逡赱 %s 齡 %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "偵 跟闡 轣 瘢閙銷 鼇跂蝎贔迴 瘻縷.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr " 韃竅熄 裃樣閭闥 縷轣 焙蜿 跂 闕 裃樣閭 韵闖驩鼬陜.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "総蜒驅 贖逡赱 %s%c%d 齡 %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "壹諷痿闥 瘻蛻踰 齡闕 裃樣閭 %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/躯濶竚"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/躯濶竚 跂..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/東橄蜩 黶 裙煬纃"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/草闊溯纒鼇 ..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/碁繝闥 竟竭癘溟"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "貞跚阨驛焉 瘰繪褝迚鼇 MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "奬竟 MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "輔煬纃"
+
+#: src/mimeview.c:196
+#, fuzzy
+msgid "Attachments"
+msgstr "假闢橸苴"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "盗蜍沁 \"碁繝闥 竟竭癘溟\" 竕 沂繝"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "偵 跟闡 轣 瘰闊芒缸齷 贖赱 阨 竟謨趺赱蜉陜 趺逹赱闥"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "躯濶竚 跂"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"悼黠竇 芻 竭瘡贖 纃闍溟 竕 橄濶竚 阨 瘻縷阨:\n"
+"(夬 `%s' 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr " 竭瘡贖 纃闍溟 竕 瘰繪褝迚鼇 MIME 縷轣 趺 气褫驥: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "粢跚阨驛 NNTP 龜辟纉 齡 %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr " NNTP 龜辟纉 齡 %s:%d 粡瘧韃裙. 盗瘢癈辟纉...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr " 橸蔡 %d 泓繪 韵闢鞳諱齡縷 溪.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "諱赳橄 橸蔡 %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "粤 跟闡 轣 粡痰橢 橸蔡 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "粤 跟闡 轣 諚磔 芻 諧齡 newsgroup\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "粤 跟闡 轣 齡縷譎 橸蔡.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "粤 跟闡 轣 諚磔 橸蔡 %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "粤 跟闡 轣 辮蜍沁 芻 闌樞 %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "趺 气褫驥 瘧闍阨萬 橸蔡: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "粤 靺髣阨 轎 橸蔡.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "諱赳橄 xover %d - %d 齡 %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "粤 跟闡 轣 諚磔 xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "齦轎砒 齧樣赱 裃蕈 諚赳瘢 xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "趺 气褫驥 竭瘡贖 xover: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "粤 跟闡 轣 諚磔 xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "齦轎砒 齧樣赱 裃蕈 諚赳瘢 xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "偵 跟闡 轣 齦辟繹 齡闕 NNTP server: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "齧樣赱 韵闃諡阨: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "齧樣赱 韵闃諡阨\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "誤 齧樣赱 齦轎砒 裃蕈 辮緕繿窖肬赱 mail."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "庖粡袰 驅鼇"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[驃 user id]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s倚驕裃譫 繪黠竇 芻 褶粡袰 驅鼇 竕:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"本蓖 褶粡袰 驅鼇! 令轣韵闢鞜葆齡...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "假閨鞜蜚陜跂辯 timestamp APOP 粤 碌汕芒 齡 瘟驟蜩踰\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "囎逕瘧蜉 齧樣赱 timestamp 齡 瘟驟蜩踰\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "囑樣赱 韵闃諡阨 POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "趺 气褫驥 竭瘡贖 xover: %s\n"
+
+#: src/pop.c:621
+#, fuzzy, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "粡痺驅 贖逡赱 %d...\n"
+
+#: src/pop.c:629
+#, fuzzy, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "囈沂逋 贖逡赱 (%d / %d bytes)"
+
+#: src/pop.c:660
+#, fuzzy
+msgid "mailbox is locked\n"
+msgstr "剳蓐燗繪 Mailbox"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+#, fuzzy
+msgid "can't start TLS session\n"
+msgstr "恆潁 纃闍溟 STARTTLS 竕 芻 沚瘻鈑 癈瘠陜 (SSL) 齦逵粹"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "假閖褫 齧樣赱 齡芻 緕瘧驃磔鼇\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "桃闍"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "假閖褫 齧樣赱 齡芻 緕瘧驃磔鼇\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "堤痰樔 蜥 髟蓐燗繪...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "托汕芒 %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "壹諷燎黶 粡樅癈赱 髟蓐燗纖.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr " 髟蓐燗繪 瘰闊芒缸芒瘢.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "当瘻跫竈"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "総閙笙 鞜驅蔘髀 辮蜍閭 謠竅驩癈蹊...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "柾竅驩癈踰%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "盗蜍閭汳 竕 轎 謠竅驩癈踰"
+
+#: src/prefs_account.c:652
+#, fuzzy
+msgid "Account preferences"
+msgstr "倣蜊汳 盗蜍閭汳"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "貞跚阨驛 鞜驅蔘髀 辮蜍閭 阨 謠竅驩癈跫...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "凡"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "訳齡蜉苳"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "假阯驥贔轣"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "狩闌 阨 謠竅驩癈跫"
+
+#: src/prefs_account.c:768
+#, fuzzy
+msgid "Set as default"
+msgstr " 否黼 龜辯蒟 謠竅驩癈踰 "
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "假闢韈袤 韜苟阮闡煥"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "倬滂纈 迴赱"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "堤缸蔘逑 mail"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "驛瘢蜩踰"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "倬苟阮闡煥 緕韃驂"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "慾 (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "壥竟 (關蜉)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "装 緕韃驂苒 瘰瘟縷 韈齡關閙苴"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "梼韃驂苒 轎"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "梼韃驂苒 竕 諳"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "梼韃驂苒 SMTP (瘰闢闍)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "狩闌 驀齡"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "庖粡褝"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "装 緕韃驂苒 瘰瘟縷 韈齡關閙苴"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "堤痺驕 趺逡賍 瘰 闕 緕韃驂 瘢 鞜驕諛蓖"
+
+#: src/prefs_account.c:1007
+#, fuzzy
+msgid "Remove after"
+msgstr "走痿驟鼇 裃瘠竢"
+
+#: src/prefs_account.c:1016
+#, fuzzy
+msgid "days"
+msgstr "俑逕"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr ""
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "凡 譎 趺逡賍 瘰 闕 緕韃驂"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr ""
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "帷謾驅驩鼬 趺逡賍 裃 芻 諳"
+
+#: src/prefs_account.c:1068
+#, fuzzy
+msgid "Default inbox"
+msgstr "假闃瘉闡蜩贔迴 裨繪籖 竟竭癘溟"
+
+#: src/prefs_account.c:1091
+#, fuzzy
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr ""
+"躯濶竚 阨 韵阨 痲蛔矚齡阨 趺逹赱闥 裃 跂瘧熏苴 黼 沚 裃樣閭"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+#, fuzzy
+msgid "Authentication method"
+msgstr "倡齡關閙苴"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "装赱"
+
+#: src/prefs_account.c:1125
+#, fuzzy
+msgid "`Get all' checks for new messages on this account"
+msgstr "`凡 譎' 繼气繪 竕 轎 趺逹赱 黼 癜 謠竅驩癈踰"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "盗蜉纐瘠焙"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "假闢葆裹 鞳籖阨 芟繿闌芻焉 齡芻 裙瘠焙"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "貞跚阨驛焉 Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "假闢葆裹 裙瘠焙癇 闡蜩贔辯 瘰 闕 驀齡"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "盗緕繿竅黯..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "倡齡關閙苴"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "倡齡關閙苴 SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "倡齡關閙苴 跂 POP3 韵蜊 芻 瘰闢闍"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "桃闍"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+#, fuzzy
+msgid "Automatically set the following addresses"
+msgstr "装赱闥 闡蜩踰 癜 粡纒蕘逑纖"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "倣蜊關閙苴"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "草橄苴 黼"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "包頸閭驅苴 趺逡賍 緕 闡蜩跫"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "寳閭驕 趺逡賍 緕 闡蜩跫"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr ""
+
+#: src/prefs_account.c:1453
+#, fuzzy
+msgid "Use clear text signature"
+msgstr "悼黶笙竈 竟竭癘溟"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "暮繪籖 竟竭癘溟"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "怡鼇 韵闃瘉闡蜩贔迴 裨繪粡陜 GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "盗蜍閭 裨繪粡陜 跂 瞽鼇 芻 email 粡缸蔘逑"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "驃齡 跂 汨 裨繪籖"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "恆潁苒 key ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "浴 趺 驥皷跫竟蜈熹瘟 SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "恆潁 SSL 竕 龜辟纉 POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "恆潁 纃闍溟 STARTTLS 竕 芻 沚瘻鈑 癈瘠陜 (SSL) 齦逵粹"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "恆潁 SSL 竕 龜辟纉 IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr ""
+
+#: src/prefs_account.c:1635
+#, fuzzy
+msgid "Use SSL for NNTP connection"
+msgstr "恆潁 SSL 竕 龜辟纉 SMTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "草闢闍 (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "恆潁 SSL 竕 龜辟纉 SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "假闢粡闡蜩踰 蕘驕 SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "假闢粡闡蜩踰 蕘驕 POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "假闢粡闡蜩踰 蕘驕 IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "假闢粡闡蜩踰 蕘驕 NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "驩鼬 阨 闕赱闥 阨 domain"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "捕樣閭闥 齡闕 緕韃驂 IMAP4"
+
+#: src/prefs_account.c:1853
+#, fuzzy
+msgid "Put sent messages in"
+msgstr "草闊溯纒鼇 齡瘠贔逋 趺逡賍 齡 outbox"
+
+#: src/prefs_account.c:1855
+#, fuzzy
+msgid "Put draft messages in"
+msgstr "奬謇鈑 趺逡賍 齡阨"
+
+#: src/prefs_account.c:1857
+#, fuzzy
+msgid "Put deleted messages in"
+msgstr "堤痺驕 趺逹赱闥"
+
+#: src/prefs_account.c:1917
+#, fuzzy
+msgid "Account name is not entered."
+msgstr " 粡缸蔘逑 mail 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr " 粡缸蔘逑 mail 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr " 緕韃驂苒 SMTP 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "夬 迴赱 驀齡 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr " 緕韃驂苒 POP3 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr " 緕韃驂苒 IMAP4 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr " 緕韃驂苒 NNTP 粤 泓繪 闡蜩縷."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "酎橈 蜥 髟蓐燗繪 煖髯...\n"
+
+#: src/prefs_actions.c:190
+#, fuzzy
+msgid "Menu name:"
+msgstr "倬滂纈 迴赱"
+
+#: src/prefs_actions.c:199
+#, fuzzy
+msgid "Command line:"
+msgstr "桃闍"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "草橄苴"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr ""
+
+#: src/prefs_actions.c:288
+#, fuzzy
+msgid "Registered actions"
+msgstr "驩鼬沚濶 裃逵辣"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(慾)"
+
+#: src/prefs_actions.c:464
+#, fuzzy
+msgid "Menu name is not set."
+msgstr "夬 迴赱 苒 裙瘠焙癇 粤 泓繪 闡蜩縷."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr ""
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr ""
+
+#: src/prefs_actions.c:488
+#, fuzzy
+msgid "Command line not set."
+msgstr "夬 迴赱 苒 裙瘠焙癇 粤 泓繪 闡蜩縷."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr ""
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+
+#: src/prefs_actions.c:559
+#, fuzzy
+msgid "Delete action"
+msgstr "堤痺驕 謠竅驩癈跫"
+
+#: src/prefs_actions.c:560
+#, fuzzy
+msgid "Do you really want to delete this action?"
+msgstr "否諷 韵榱赱 轣 粡痺驅續 癜 謠竅驩癈踰;"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "貞跚阨驛焉 鞜驕蕘髀 褊蜊 辮蜍閭...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "倣蜊汳 辮蜍閭汳"
+
+#: src/prefs_common.c:856
+#, fuzzy
+msgid "Quote"
+msgstr "驅"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "東橄蜩"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "勿逡赱"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "矩諱"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "梼繿蜉 韵竭瘡赱"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "恆潁 緕繿蜉陜 韵閭驅跛癆闥 竕 諳 趺逡賍"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "桃闍"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr ""
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr ""
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "帷謾驅驩鼬 裃 諳"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "装赱闥 沂繝闥 竕 轎 mail"
+
+#: src/prefs_common.c:980
+#, fuzzy
+msgid "every"
+msgstr "倆"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "諷頸"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "碁繝闥 竕 轎 mail 齡芻 瘻"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "桃芟汨鼇 譎 關蜉 裃瘠笙 跂 芻 諳"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "慾"
+
+#: src/prefs_common.c:1013
+#, fuzzy
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"杢竕齡闥 瘻蛻踰 橸蔡 竟 葹 諛蓖\n"
+"(驃 驩 瘢 葩黼 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "恆潁 緕繿蜉陜 韵閭驅跛癆闥 竕 瘰闢闍"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "草闊溯纒鼇 齡瘠贔逋 趺逡賍 齡 outbox"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "庖粡褊黼諧籬 緕繿闌沚"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "装赱 (假阡繪逵跂迴)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "汀蜉溟 燈髷韃 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+#, fuzzy
+msgid "Western European (ISO-8859-15)"
+msgstr "汀蜉溟 燈髷韃 (ISO-8859-1)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "輔逕驩袰s 燈髷韃 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "逮謾蜉溟 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "逮謾蜉溟 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "搭諛迚袰 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "夬驫蜉 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "宝驩諡蜉 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "宝驩諡蜉 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "宝驩諡蜉 (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "宝驩諡蜉 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "普顆轎肅裹 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "普顆轎肅裹 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "普顆轎肅裹 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "草謠竟蜃贔辯 慕辣肅袰 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "倚驕粹皷瘧 慕辣肅袰 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "倚驕粹皷瘧 慕辣肅袰 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "慕辣肅袰 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "倣驟癆蜉 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr ""
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr ""
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "奬謇鈑 韵蜊 芻 瘰闢闍"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "堤癡驩鼬 竟竭癘溟"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "装赱 繪黶笙竈"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "装赱 驀鼇 緕繿蜉陜 韵閭驅跛癆闥 辮緕繿竅黯癇"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr ""
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "奬謇鈑 趺逡賍 齡阨"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "瘻瘧滂纈"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "奬謇鈑 鞜驅蒹鼇"
+
+#: src/prefs_common.c:1353
+#, fuzzy
+msgid "Wrap on input"
+msgstr "総痲熕譎鼇 竭瘡蹊"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "奬謇鈑 韵蜊 芻 瘰闢闍"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "装赱 辮蜍閭 謠竅驩癈跫 竕 蜥 瘰瘢潁繪"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "倚驅蒹鼇 阨 趺逹赱闥 瘢 瘰瘢橙"
+
+#: src/prefs_common.c:1369
+#, fuzzy
+msgid "Reply button invokes mailing list reply"
+msgstr "/草橄苴 黼 謠"
+
+#: src/prefs_common.c:1415
+#, fuzzy
+msgid "Reply format"
+msgstr "弥髢關閙苴 芟繿闌芻焉"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "嘲赱 鞜驅蒹鼇"
+
+#: src/prefs_common.c:1454
+#, fuzzy
+msgid "Forward format"
+msgstr "假陞蒟鼇"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 倥驩竭癘 齦赳譎"
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "酎瘡赱闢繪驅"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr ""
+"悶泱驕黼 闕赱 鞳籖 苒 辮蜉纐瘠焙癇 (顆 `From:' 黼 `草')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "東橄蜩 瘻蛻跫 痲蛔矚齡 籖韜 齡 迴赱 阨 裃瘠竢"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr ""
+
+#: src/prefs_common.c:1598
+#, fuzzy
+msgid "letters"
+msgstr "堤痺驕"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "草繪褝迚鼇 倥驃諛苒"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr ""
+"東橄蜩 阨 鞜驕諳頸 齡 齡滄 `草闢闍氈' 瘢 瘰闢闍氈 縷齡 纉縷"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr ""
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "弥髢關閙苴 芟繿闌芻焉"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " 驩鼬 繻瘢蜀跂逋 齡濶縷 鞳驃諛苒... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "桃繿竢竟熈鼇 髯赱蜩跫 趺逡賍"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Display 2-byte alphabet and numeric with 1-byte character"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "東橄蜩 贖赱闥 跂 芻 裙瘠焙 靺逋 瘰 芻 韵閧闍 趺逹赱闥"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "東橄蜩 碌癡縷癇 裙瘠焙癇 齡芻 瘰繪褝迚鼇 趺逹赱闥"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "堤橢芟 竭瘡蹊"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "浴 贔辣 粡橢芟 齡芻 裙瘠焙"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "方謇鼇"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "也黨 黼諧籬"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "赱諳 襠謇鼇"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "捕 矇赱"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "装赱闥 沂繝闥 竟竭癘"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "東橄蜩 阨 瘰阡繼沒赱闥 阨 繼气阨 黼 鈬驩齡 鞜驅蔘髀"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr ""
+
+#: src/prefs_common.c:1884
+#, fuzzy
+msgid "Expired after"
+msgstr ""
+"草闢闍\n"
+"瘻笨繿"
+
+#: src/prefs_common.c:1897
+#, fuzzy
+msgid "minute(s) "
+msgstr "諷頸"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Grab input while entering a passphrase"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "東橄蜩 繪粹竟熈鼇 裃 芻 繩袿辯鼇 瘢 GnuPG 粤 諷蜚阨驛縷"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "沚 贖逡赱 粤 葹 鞜驕諛蒹\n"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr ""
+"躯濶竚 阨 韵阨 痲蛔矚齡阨 趺逹赱闥 裃 跂瘧熏苴 黼 沚 裃樣閭"
+
+#: src/prefs_common.c:1984
+#, fuzzy
+msgid "Only mark message as read when opened in new window"
+msgstr "/勿逡赱/躯濶竚 黼 轎 鞜驅蔘髀"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "悶瘧熏苴 齡闕 裃樣閭 繪黼髣闌沚 跂 諳 轎 趺逡賍"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "装赱 繩沂纉 竕 跂癘闡 裃 粡痺驕 趺逡賍"
+
+#: src/prefs_common.c:2003
+#, fuzzy
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(壤 趺逹赱 瘰諚 葹 鼇赱辷陜 贔驩 芻 繩沂纉\n"
+"瘢 癜 縷轣 瘰辮蜍繝贔迴)"
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "東橄蜩 粡瘠竢 諳苒"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "東橄蜩 粡瘠竢 諳苒"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "俑逕"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "倆"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr ""
+
+#: src/prefs_common.c:2040
+#, fuzzy
+msgid "Close receive dialog when finished"
+msgstr "東橄蜩 粡瘠竢 諳苒"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr ""
+
+#: src/prefs_common.c:2102
+#, fuzzy, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr ""
+"梼繿蜉 韵竭瘡赱 龜辷纉苒 ( %s 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr ""
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "假闢葆裹 粡缸蔘逑苒 齡闕 韵闖驩鼬 黼 粡韜 裨蜉"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "捕 芻 沁閼"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "盗蛯繧痿鼇 緕粹"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "銀繪癈赱 粡痺驕跛沚 齡芻 沁閼"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "盗蛯繧痿鼇 韵蜊 樞繪癈赱"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "假閻蜆關閙苴 瘢 靺髣阨 趺逹赱 齡芻 阨驅"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr " 齦逕闌閭驕焉 芟汨癇 苒 繧粹賍籬"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr " 韜滂纈 迴赱 苒 贔驕 苒 繧粹賍籬"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr " 齦逕闌閭驕焉 阨 贖轣"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr " 韜滂纈 迴赱 阨 贖轣"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr " 韵阡蛹跂辯 芟繿闌芻焉 裃 驕 竕 驂闕 locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr " 瘻蛻踰 瘟轣 (沐 / 100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr " 贔驕 阨 贖轣 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr " 驕 粤裃粡褝 瘻蛻踰 驥皷跫竟蝙逕癇 24髀 髀譛"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr " 驕 粤裃粡褝 瘻蛻踰 驥皷跫竟蝙逕癇 12髀 髀譛"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr " 贔驕 阨 沐阨 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr " 贖轣 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr " 諷頸 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "縷 侈 面"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr " 粤繿諷頸 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr " 贔驕 苒 繧粹賍籬 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr " 韵阡蛹跂辯 芟繿闌芻焉 竕 驂闕 locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr " 繼纒痿 糺 莓焉 阨 沐阨"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr " 沐闥 粤裃粡褝 瘻蛻踰"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr " 腋辯 驕 迴赱, 齦迪闌閭驕焉"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "假闢粡闡蜩溟"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "倥驩竭癘"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "倚驅粤蜒赱"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "趣蜩跫 髯賍 趺逹赱闥"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "恆赱"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "倚驕蛻沍纃 裙煬纃 - 假 辮熕繖"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "倚驕蛻沍纃 裙煬纃 - 偵繿 辮熕繖"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "倚驕蛻沍纃 裙煬纃 - 夲熹 辮熕繖"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "圄辟纉跫 URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "総瘧裨鼇 髯賍 鞜驅蒹鼇"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "盗蜍閭 髷赱闥 韵阨 辮蜷氛阨 鞜驅蒹鼇"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "盗蜍閭 髷赱闥 粤繿阨 辮蜷氛阨 鞜驅蒹鼇"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "盗蜍閭 髷赱闥 驃阨 辮蜷氛阨 鞜驅蒹鼇"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "盗蜍閭 髷赱闥 竕 URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "倥驩竭癘 齦赳譎"
+
+#: src/prefs_common.c:2884
+#, fuzzy
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"伯繿闌芻焉\n"
+"草\n"
+"倬滂纈 迴赱 阨 瘰闢闍氈\n"
+"也襃 迴赱 阨 瘰闢闍氈\n"
+"荘蜉 阨 瘰闢闍氈\n"
+"否赱\n"
+"假闥\n"
+"倣蜊關閙苴\n"
+"Message-ID\n"
+"%"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr ""
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "盗蜍閭 竭瘡赱闢繪驅"
+
+#: src/prefs_common.c:3011
+#, fuzzy
+msgid "Key bindings"
+msgstr "囈沂逋"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+#, fuzzy
+msgid "Default"
+msgstr "假闃瘉闡蜩贔迴 裨繪籖 竟竭癘溟"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr ""
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "剳蓐燗繪 繪粡袰 裙瘠焙癇"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "悼粡袰 裙瘠焙"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "夬 迴赱 苒 裙瘠焙癇 粤 泓繪 闡蜩縷."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "堤痺驕 裙瘠焙癇"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "否諷 韵榱赱 轣 粡痺驕縷 癜 裙瘠焙;"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "貞跚阨驛 鞜驅蔘髀 繻橄蜩苒 髟蓐燗纖 辮蜉纐瘠焙癇...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "驩鼬 繻橄蜩苒 裙瘠焙癇"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "狩闌 裙瘠焙癇"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "東瘢蜩蒹燗纈 裙瘠焙纈"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "包跛沚纈 裙瘠焙纈"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "東橄蜩 譎 趺 闡蜩贔逋 裙瘠焙"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "堤痰樔 蜥 髟蓐燗繪 竕 繻橄蜩 裙瘠焙...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "酎橈 蜥 髟蓐燗繪 竕 繻橄蜩 裙瘠焙...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "装 裙瘠焙 縷轣 溪 齡 諧齡."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "剳蓐燗繪 煖髯"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "假闥:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/総蜒驕..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "堤痺驕 裃逵轣"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "否諷 韵榱赱 轣 粡痺驕縷 癜 裃逵轣;"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "堤痺驕 裃逵轣"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "朱纈 濶 裙瘠焙纈"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "盗蜉纐瘠焙"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "勿逡赱"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "鞳驩泓繪"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "粤 鞳驩泓繪"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "悶瘧熏苴 鞭"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/総蜒驕..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "門 鞜驕諚矼蜥"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "堤痺驕 news server"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "囓謇"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "趣蜩跫 髯賍 趺逹赱闥"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/嘲赱逑/嘲赱逑 粡痰癈贔迴"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/假陞蒟鼇 韵闢橸苴"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/盗瘢-辮緕繿竅黯"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "投沂纉"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "捕樣閭闥"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "堤缸蔘逑"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "盗蜉纐瘠焙"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "盗蜉纐瘠焙"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "盗蜉纐瘠焙"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr " 鞜驕諳頸苒 粤 泓繪 闡蜩縷."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "夬 迴赱 苒 裙瘠焙癇 粤 泓繪 闡蜩縷."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr " 韵闖驩鼬 粤 泓繪 闡蜩縷."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "夬 迴赱 苒 裙瘠焙癇 粤 泓繪 闡蜩縷."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: 瘻縷 粤 靺髣繪\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "符蝨苳纈"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr ""
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr ""
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr ""
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:352
+#, fuzzy
+msgid "Reply-To:"
+msgstr "草橄苴 黼"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "嘲赱逑"
+
+#: src/prefs_summary_column.c:69
+#, fuzzy
+msgid "Attachment"
+msgstr "假闢橸苴"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "否赱"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "草"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "伯繿闌芻焉"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "荘蛻踰"
+
+#: src/prefs_summary_column.c:166
+#, fuzzy
+msgid "Creating summary column setting window...\n"
+msgstr "貞跚阨驛 鞜驅蔘髀 髟蓐燗纖 繪粡袰 裙瘠焙癇...\n"
+
+#: src/prefs_summary_column.c:174
+#, fuzzy
+msgid "Summary display item setting"
+msgstr "/倥驃諛/驩鼬 繻瘢蜀跂逋 齡濶縷..."
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+
+#: src/prefs_summary_column.c:218
+#, fuzzy
+msgid "Available items"
+msgstr "堤瘉沒蛹纈 粡纒蕘逑繪"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr ""
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr ""
+
+#: src/prefs_summary_column.c:261
+#, fuzzy
+msgid "Displayed items"
+msgstr "東瘢蜩蒹燗纈 裙瘠焙纈"
+
+#: src/prefs_summary_column.c:302
+#, fuzzy
+msgid " Revert to default "
+msgstr " 否黼 龜辯蒟 謠竅驩癈踰 "
+
+#: src/prefs_template.c:157
+#, fuzzy
+msgid "Template name"
+msgstr "狩闌 裙瘠焙癇"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "捕癡驥鼇"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " 総蜉癆橢癈"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr ""
+
+#: src/prefs_template.c:248
+#, fuzzy
+msgid "Registered templates"
+msgstr "驩鼬沚濶 裃逵辣"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr ""
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr ""
+
+#: src/prefs_template.c:447
+#, fuzzy
+msgid "Template format error."
+msgstr "狩闌 裙瘠焙癇"
+
+#: src/prefs_template.c:523
+#, fuzzy
+msgid "Delete template"
+msgstr "堤痺驕 趺逹赱闥"
+
+#: src/prefs_template.c:524
+#, fuzzy
+msgid "Do you really want to delete this template?"
+msgstr "否諷 韵榱赱 轣 粡痺驕縷 癜 裙瘠焙;"
+
+#: src/procmime.c:742
+#, fuzzy
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr " 跂癆髀鞋 阨 襞粡裃 瘰沐.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "粤 跟闡 轣 瘢閙銷 瘻縷 mark\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "粤 跟闡 轣 諚磔 贖逡赱 %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr " 瘰闢闍 阨 趺轗赱闥 阨驅 %d 瘰沐.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr " 纃闍 繩顆鼇 縷轣 櫁驥: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "捕橢癈"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "貞跚阨驛 粡樣閭 韵陷粹...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "韵閖褫 齧樣赱 裃 芻 諳 粤粹贔逋.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "偵 跟闡 轣 竭樢 黼 瘻縷.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "頏. 竟竭癘 粤 緕瘧驩磬蒟裙"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "偵 碌汕芒 竟竭癘"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "草閼繩 竟竭癘"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "本蓖 竟竭癘"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "偵 靺髣繪 粢踰皷 裨繪籖 竕 轣 緕瘧驩磬齷 癜 芻 竟竭癘"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "囑樣赱 裃 芻 緕瘧驃磔鼇 苒 竟竭癘溟"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "堤癘闡續蜉 瘰阡繼沒赱 竕 蜥 竟竭癘汳"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "囑樣赱: 吟逋齡 裃橢癈"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "草閼繩 竟竭癘 瘰 \"%s\""
+
+#: src/rfc2015.c:175
+#, fuzzy, c-format
+msgid "BAD signature from \"%s\""
+msgstr "本蓖 竟竭癘 瘰 \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "偵 跟闡 轣 碌 user ID 竕 癜 裨繪籖"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr "辮燗苒 竝齡 \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, fuzzy, c-format
+msgid "Signature made at %s\n"
+msgstr "寳閭驕 粢跚阨驛滓芒 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "草阡顆赱 裨繪粡陜: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "倚驕裃譫 辮蜍沁 裨繪籖 竕 `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "囎諡气 韜苟阮闡煥 竕 `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "盗沂緕 裨繪粡"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Key ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "夂贖"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "假闢葆裹 裨繪粡陜"
+
+#: src/select-keys.c:445
+#, fuzzy
+msgid "Enter another user or key ID:"
+msgstr "悼黶笙竈 樣謠 驀齡 key ID\n"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr " 裙瘠焙 阨 纃 瘢瘡闕 趺逹赱闥 粤 縷轣 韜沛 气褫驥.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "囎辟沛赱"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "圄辟纉 齡芻 緕韃驂 SMTP: %s ..."
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "囈沂逋 MAIL FROM..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "倡齡關閙苴"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "草闢闍 趺逹赱闥"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "囈沂逋 MAIL FROM..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "囈沂逋 MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "囈沂逋"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "囈沂逋 RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "囈沂逋 DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "塔裃瘠縷顆..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "囈沂逋 贖逡赱 (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "草闢闍 趺逹赱闥"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "剳蓐燗繪 Mailbox"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"荘蜉, 韵汾繪 轣 辮蜍沁續 葩鼇 阨 mailbox.\n"
+"矢闡縷 轣 驥皷跫竟蛩黼 沚 靺髣闕 mailbox 黼 跫髢 MH\n"
+"総 泓續 沚 沐濶.\n"
+"総 粤 縷齡 黯竢髀, 瘰諚 辮蜍沁 OK."
+
+#: src/sigstatus.c:129
+#, fuzzy
+msgid "Checking signature"
+msgstr "/碁繝闥 竟竭癘溟"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+#, fuzzy
+msgid "SMTP AUTH not available\n"
+msgstr "夬 TLSv1 粤 縷轣 粡瘉沒蛹\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "假閖褫 齧樣赱 齡芻 緕瘧驃磔鼇\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "貞跚阨驛焉 鞜驕蕘髀 韃竈...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "伜竈 阨 趺逹赱闥"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "東橄蜩 苒 韃竈 阨 %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 伜竈"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "夬 SSLv23 粤 縷轣 粡瘉沒蛹\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "夬 SSLv23 縷轣 粡瘉沒蛹\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "夬 TLSv1 粤 縷轣 粡瘉沒蛹\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "夬 TLSv1 縷轣 粡瘉沒蛹\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "蒼瘠溟 (SSL) 贔蓖粹 粤 縷轣 粡瘉沒蛹\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "吟逋齡 贔蓖粹 SSL *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr ""
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr " 癈瘠溟 (SSL) 龜辟纉 瘰沐 (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "蒼瘠溟 (SSL) 龜辟纉 驥皷跫竟蝙逕癇 %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "倡齡關濶苳蜉 緕韃驂:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr "否赱: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 投糶苒: %s\n"
+
+#: src/summary_search.c:106
+#, fuzzy
+msgid "Search messages"
+msgstr "\t総瘋漑苴 齡 瘰髀齔沂癈 趺逹赱... "
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "装赱闥 闡蜩踰 癜 粡纒蕘逑纖"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr ""
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "盗蜍閭 譎 瘟驩癈贔逋"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "倖癈 芻 瘻 苒 諧齡癇. 浴 齦辣燗 瘰 沂闥;"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "倖癈 沂闥 苒 諧齡癇. 浴 齦辣燗 瘰 芻 瘻;"
+
+#: src/summaryview.c:341
+#, fuzzy
+msgid "/Repl_y to"
+msgstr "/草橄苴 黼 謠"
+
+#: src/summaryview.c:342
+#, fuzzy
+msgid "/Repl_y to/_all"
+msgstr "/草橄苴 黼 謠"
+
+#: src/summaryview.c:343
+#, fuzzy
+msgid "/Repl_y to/_sender"
+msgstr "/草橄苴 齡闕 瘰闢闍氈"
+
+#: src/summaryview.c:344
+#, fuzzy
+msgid "/Repl_y to/mailing _list"
+msgstr "/草橄苴 黼 謠"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/悶瘧熏苴..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/総蜒驕..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/嘲赱逑"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/嘲赱逑/嘲赱逑"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/嘲赱逑/総痿驟鼇 黨赱逑苒"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/嘲赱逑/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/嘲赱逑/嘲赱逑 痲蛔矚齡"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/嘲赱逑/嘲赱逑 粡痰癈贔迴"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/嘲赱逑/嘲赱逑 譎 粡痰癈贔轣"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/恆赱蜉 瘡鞆諱"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/盗瘢-辮緕繿竅黯"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/假闢葆裹 瘰闢闍氈 齡闕 裃樣閭 粡纒蕘逑纖"
+
+#: src/summaryview.c:373
+#, fuzzy
+msgid "/_View/_Source"
+msgstr "/草繪褝迚鼇/東橄蜩 阨 韃竅熄"
+
+#: src/summaryview.c:374
+#, fuzzy
+msgid "/_View/All _header"
+msgstr "/草繪褝迚鼇/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/投顆鼇..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "荘."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "貞跚阨驛焉 瘰繪褝迚鼇 鞳驃諛苒...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr ""
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "悶驩袤 鼇賍逑繪 泓阨 瘰闌縷辣. 浴 辮緕繿竅齡陜;"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "嘴髯鼇 裃瘠竢 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "偵 碌汕芒瘢 痲蛔矚齡 趺逹赱. 浴 樌 瘰 沂闥;"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "偵 碌汕芒瘢 痲蛔矚齡 趺逹赱. 浴 靺 齡闕 辮跂迴 裃樣閭;"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+#, fuzzy
+msgid "Search again"
+msgstr " 瘢瘋漑苴 瘰沐"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+#, fuzzy
+msgid "No more new messages"
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/summaryview.c:978
+#, fuzzy
+msgid "No new message found. Search from the end?"
+msgstr "偵 碌汕芒瘢 痲蛔矚齡 趺逹赱. 浴 樌 瘰 沂闥;"
+
+#: src/summaryview.c:987
+#, fuzzy
+msgid "No new messages."
+msgstr "偵 靺髣阨 痲蛔矚齡 趺逹赱"
+
+#: src/summaryview.c:1002
+#, fuzzy
+msgid "No new message found. Go to next folder?"
+msgstr "偵 碌汕芒瘢 痲蛔矚齡 趺逹赱. 浴 靺 齡闕 辮跂迴 裃樣閭;"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "偵 靺髣阨 樣諱 鼇跂蝎贔轣 趺逹赱"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "偵 碌汕芒瘢 鼇跂蝎贔轣 趺逹赱. 浴 樌 瘰 沂闥;"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "偵 靺髣阨 鼇跂蝎贔轣 趺逹赱."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "偵 碌汕芒瘢 鼇跂蝎贔轣 趺逹赱. 浴 樌 瘰 芻 瘻;"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "偵 靺髣阨 樣諱 趺逹赱 跂 續蜉沐纈"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "偵 碌汕芒瘢 趺逹赱 跂 續蜉沐纈. 浴 樌 瘰 沂闥;"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "偵 靺髣阨 趺逹赱 跂 續蜉沐纈."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "偵 碌汕芒瘢 趺逹赱 跂 續蜉沐纈. 浴 樌 瘰 芻 瘻;"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr ""
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d 粡痺驅芒瘢"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d 跂瘧蜊滓芒瘢"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d 瘢蜒驅芒瘢"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 贖逡赱() 辮蜍泓蒟裙(瘢)"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 轎, %d 痲蛔矚齡, %d 齦迴謇袍 (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 轎, %d 痲蛔矚齡, %d 齦迴謇袍"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "倥驃諛 瘤蜊趺鼇..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t驩鼬 鞳驃諛苒 瘰 粤粹贔轣 阨 趺逹赱闥..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "驩鼬 鞳驃諛苒 瘰 粤粹贔轣 阨 趺逹赱闥..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr ""
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(恙驃 芟繿闌芻焉)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "夬 贖逡赱 %d 鼇跂蝙蒟裙\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "夬 贖逡赱 %d 鼇跂蝙蒟裙 粡痰癈贔迴\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "夬 贖逡赱 %d 鼇跂蝙蒟裙 痲蛔矚齡\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "夬 贖逡赱 %s/%d 泓繪 闡蜩縷 竕 粡痺驕\n"
+
+#: src/summaryview.c:2392
+#, fuzzy
+msgid "Delete message(s)"
+msgstr "堤痺驕 趺逹赱闥"
+
+#: src/summaryview.c:2393
+#, fuzzy
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "否諷 韵榱赱 轣 粡痺驕縷 癜 裙瘠焙;"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "堤痺驅 粡韜 趺逹赱..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "夬 贖逡赱 %s/%d 粤 泓繪 鼇跂蝎蒹\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "夬 贖逡赱 %d 泓繪 闡蜩縷 竕 跂瘧熏苴 齡 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr " 韵闖驩鼬 縷轣 焙蜿 跂 闕 驂闕 裃樣閭."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "夬 贖逡赱 %d 泓繪 闡蜩縷 轣 瘢蜒驕縷 齡 %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr " 韵闖驩鼬 瘢蜒驕溟 縷轣 焙蜿 跂 闕 驂闕 裃樣閭."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "盗蜍气 諱 趺逹赱..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "誤 齧樣赱 齦轎砒 裃蕈 辮緕繿窖肬赱 mail."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "貞跚阨驛 轗赱..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr ""
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr ""
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "蜍驅髯..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "帷謾驅髯..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr " 贖逡赱 %d 縷轣 溪 齡 跋溲.\n"
+
+#: src/template.c:169
+#, fuzzy, c-format
+msgid "file %s already exists\n"
+msgstr " %s 靺髣繪 溪"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "貞跚阨驛 瘰繪褝迚鼇 裙蛹沚阨...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "沚 贖逡赱 粤 葹 鞜驕諛蒹\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "忠 轣 瘰闊芒缸黼 癜 贖赱, 辮蜍沁 跂迴 跂 "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "粤釼 褊跟 裃 辮蜍沁 `草闊溯纒鼇 ...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+" 鞜潁 韜溯髀 `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "忠 轣 繻瘢燗續 癜 贖赱 贖逡赱 裙蛹沚阨, 辮蜍沁"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`東橄蜩 黶 裙煬纃', 鞜潁 韜溯髀 `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "忠 轣 瘢閙鈬 癜 贖赱 跂 緕繿蜉 韵竭瘡赱, 辮蜍沁 "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`躯濶竚', `躯濶竚 跂...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr " 袍逕 粡韜 裨蜉, 鞜潁 跂黶熄 褊跟, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr " 韈沒 韜溯髀 `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "装 竟竭癘 粤 泓繪 沂繝蒹 瘧赱.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "忠 轣 芻 繼气鈬, 辮蜍沁 跂迴 跂\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "粤釼 褊跟 裃 辮蜍沁 `碁繝闥 竟竭癘溟'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "瘰沐 竭樢蛹 齡 %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "偵 跟闡 轣 瘢閙銷 瘻縷 %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (龜辯蒹)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (韈齡關閙苴 APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/堤痺驕 mailbox"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/堤痺驕 謠竅驩癈跫 IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/堤痺驕 謠竅驩癈跫 news"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/勿逡赱/草闢闍"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/勿逡赱/寳閭驕"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "粤 靺髣阨 趺逹赱 齡 關蜉 mailbox.\n"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "倚驅蒹鼇"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "盗蜍閭... "
+
+#, fuzzy
+#~ msgid "Condition"
+#~ msgstr "/剳蓐燗繪"
+
+#~ msgid "Keyword"
+#~ msgstr "翻鈑-裨繪籖"
+
+#~ msgid "Destination"
+#~ msgstr "假闖驩鼬"
+
+#~ msgid "Use regex"
+#~ msgstr "恆潁 regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "驩鼬沚濶 裃逵辣"
+
+#~ msgid "(none)"
+#~ msgstr "(裃轎轣)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr " 纃闍 瘰繪褝迚鼇 URI 縷轣 櫁驥: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Cache data is corrupted\n"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/倥驃諛/帷謾驅驩鼬 趺逡賍"
+
+#~ msgid "Queueing"
+#~ msgstr "腿胱 齡芻 阨驅"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥.\n"
+#~ "浴 瞽譎 贖逡赱 齡闕 裃樣閭 阨驅;"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "夬竟葩苴 齡芻 阨驅 趺逡賍 竟 瘰沐 瘰闢闍 阨"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/投沂纉"
+
+#~ msgid "/Select _all"
+#~ msgstr "/盗蜍閭 譎"
+
+#, fuzzy
+#~ msgid "/Select t_hread"
+#~ msgstr "/盗蜍閭 譎"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "粤 跟闡 轣 闡燗 芻 闌樞: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "沚 贖逡赱 粤 葹 鞜驕諛蒹\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/勿逡赱/凡 轎 趺逡賍"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNo cache file\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tReading summary cache..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Cache version is different. Discarding it.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "夬 瘻縷 鼇賍逑纖 粤 碌汕芒.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Mark version is different (%d != %d). Discarding it.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "偵 跟闡 轣 瘢閙銷 瘻縷 鼇賍逑纖 竕 韵鼈纉 齡 沂闥.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "偵 跟闡 轣 瘢閙銷 瘻縷 鼇賍逑纖 竕 繝竭癘.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "粤 跟闡 轣 粢跚阨驛潁 瘻縷 lock %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "樞繪闥 裃樣閭闥\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "愈迴 瘢 沚 鞜驅蔘髀 縷轣 纃繿笨"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "否鼇 鞜驕蕘髀: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "剳蓐燗繪 widgets..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "悶瘧蜊 贖逡赱 %s%c%d 齡 %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\t嚊跂蝙逋 趺逹赱..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d 轎() 贖逡赱(趺逹赱)\n"
+
+#, fuzzy
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "粤 跟闡 轣 粡痺驅 mailbox\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "諱赳橄 贖逡赱 %d...\n"
+
+#, fuzzy
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "堤痺驅 韵闢鞳諱鼬沚 趺逹赱 %d - %d ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "堤痺驅 諱 趺逹赱 瘰 跋溲... "
+
+#, fuzzy
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "磨赳橄 闕 瘻蛻踰 轎 趺逡賍 (UIDL)..."
+
+#, fuzzy
+#~ msgid "Could not get message file."
+#~ msgstr "偵 跟驟黶 轣 粡痰橢 瘻縷."
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "誤 齧樣赱 齦轎砒 裃蕈 辮緕繿窖肬赱 mail."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "囎轎砒 齧樣赱 裃 芻 瘰闢闍 阨 趺逹赱闥 瘰 芻 阨驅."
+
+#~ msgid "Predicate"
+#~ msgstr "包蜚滂蜿"
+
+#, fuzzy
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "貞跚阨驛 鞜驅蔘髀 髟蓐燗纖 煖髯..\n"
+
+#, fuzzy
+#~ msgid "Actions setting"
+#~ msgstr "剳蓐燗繪 謠竅驩癈跫"
+
+#, fuzzy
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "堤痰樔 蜥 髟蓐燗繪...\n"
+
+#, fuzzy
+#~ msgid "Action command error\n"
+#~ msgstr "齧樣赱 韵闃諡阨\n"
+
+#, fuzzy
+#~ msgid "Socket error\n"
+#~ msgstr "齧樣赱 韵闃諡阨\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr " 謠竅驩癈踰 粤 碌汕芒. 恆苴蛹關濶 闕 驂闕 謠竅驩癈跫...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr " 謠竅驩癈踰 粤 碌汕芒.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "偵 跟驟黶 轣 繩繼沒 芻 緕繿蜉 纃闍: %s\n"
+
+#, fuzzy
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "夬 TLSv1 粤 縷轣 粡瘉沒蛹\n"
+
+#, fuzzy
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍 EHLO\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "偵 跟闡 轣 齦辟繹 齡闕 緕韃驂 SMTP: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr " 癈瘠溟 (SSL) 龜辟纉 瘰沐"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "假閖褫 齧樣赱 裃 龜辟纉 齡 %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍 HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍 STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍 EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "荘縷 竟竭癘溟"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "貞跚阨驛 鞜驅蔘髀 髟蓐燗纖 繪粡袰 裙瘠焙癇...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "堤痰樔 蜥 髟蓐燗繪 苒 繪粡袰 裙瘠焙癇...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "酎橈 蜥 髟蓐燗繪 苒 繪粡袰 裙瘠焙癇...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "貞跚阨驛 鞜驅蔘髀 髟蓐燗纖 煖髯..\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "堤痰樔 蜥 髟蓐燗繪 煖髯...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "酎橈 蜥 髟蓐燗繪 煖髯...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\t総瘋漑苴 齡 瘰髀齔沂癈 趺逹赱... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d 瘰髀齔沂癈() 贖逡赱() 碌汕芒(瘢)\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\t壤鉗迴蹊 瘻蛻趺蜉 瘰髀齔沂癈 趺逹赱... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "辮蛯諛蒹燗 褶粡褊黼諧籬: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "桃繿竢竟熈鼇 闡蜀逕蛛 竭瘡贖 襠謇鼇"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "東橄蜩 痲蛔矚齡 跂 沚闕 竭樓赱"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr " 瘢瘋漑苴 繼縷黼"
+
+#~ msgid "Done"
+#~ msgstr "壙謠"
+
+#, fuzzy
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "圄辷纉 轎阨 趺逹赱闥"
+
+#, fuzzy
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/荘縷/桃芟汨鼇 粹贖 裃瘠笙"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): 瘻縷 `%s' 靺髣繪 溪."
+
+#, fuzzy
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "偵 跟闡 轣 瘢閙銷 瘻縷 %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "假闃瘉闡蜩贔迴 裨繪籖 竟竭癘溟"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "瘰闊溯纒鼇 齡瘠贔迴 趺逹赱闥...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "粤 跟闡 轣 瘰闊芒缸齷 贖逡赱\n"
+
+#, fuzzy
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "貞跚阨驛 粡樣閭 韵陷粹...\n"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "貞跚阨驛 鞜驅蔘髀 裃痺驕溟...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "堤痺驅 韵闢鞳諱鼬沚 橸蔡 1 - %d... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\t堤痺驅 諱 韵闢鞳諱鼬沚 橸蔡... "
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "壤 贖赱 襞粡裃 竟 纐瘻踰鼈芒瘢 瘰 fetchmail 縷轣 Copyright 1997 "
+#~ "by Eric S. Raymond. 夛溲癆 癜陜 縷轣 辮燗苒 copyrighted by Carl "
+#~ "Harris, 1993 and 1995. 夬 Copyright 苟縷瘟 竕 芻 韵闢癈焉 苒 "
+#~ "繼缸蒹驥 瘢痲蛛迴贖 阨 襞粡裃\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "夬 Kcc 縷轣 copyright 阨 Yasuhiro Tonooka <tonooka@msi.co.jp>, 裃 "
+#~ "libkcc 縷轣 copyright 阨 takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "粤 跟闡 轣 裃瘢縷踟 跋溲\n"
+
+#, fuzzy
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/草繪褝迚鼇/草繪褝迚鼇 趺逡轆"
+
+#~ msgid "%s already exists."
+#~ msgstr " %s 靺髣繪 溪"
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "嘸竢驕 轣 粡痺驕縷 裃樣閭闥 `%s';"
+
+#, fuzzy
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "假閖褫 齧樣赱 裃 芻 瘰闢闍\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/淘竅諷焉"
+
+#~ msgid "Outbox"
+#~ msgstr "梼繿跂轣"
+
+#, fuzzy
+#~ msgid "Skipping message %d\n"
+#~ msgstr "諱赳橄 贖逡赱 %d...\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "貞跚阨驛 鞜驅蔘髀 裙瘠焙癇...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "東橄蜩 苒 裙瘠焙癇 阨 %s ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - 朱纈 濶 裙瘠焙纈"
+
+#, fuzzy
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/草繪褝迚鼇/草繪褝迚鼇 趺逡轆"
+
+#, fuzzy
+#~ msgid " Apply "
+#~ msgstr "当瘻跫竈"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "梼繿蜉 Web browser ( %s 葹 瘢蜉癆癈瘉縷 跂 URI)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "投顆鼇 ( %s 葹 瘢蜉癆癈瘉縷 跂 迴赱 瘻縷阨)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "悶瘧熏苴 齡 %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "壹諷齡溟"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/勿逡赱/假闥"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/勿逡赱/倣蜊關閙苴"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/勿逡赱/Bcc"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/勿逡赱/假闢橸苴"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/淘竅諷焉/東橄蜩 橸瘧"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/桃芟汨鼇 粹贖 裃瘠笙"
+
+#, fuzzy
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/盗緕繿竅黯/総瘋漑苴"
+
+#, fuzzy
+#~ msgid "Search folder"
+#~ msgstr "盗蜍閭 裃瘠竢"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "奬謇鈑 驂阨黶 鞜驕竭橈阨"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/M滔赱/假闢葆裹 瘰闢闍氈 齡 砠硅熄 粡纒蕘逑纖"
+
+#~ msgid "/_Summary"
+#~ msgstr "/倥驃諛"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/倥驃諛/投沂纉 繿竅皷"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/倥驃諛/桃芟汨鼇"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/倥驃諛/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/倥驃諛/俐竅蜊 齡"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/倥驃諛/俐竅蜊 齡/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/倥驃諛/壤鉗逵趺鼇"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/倥驃諛/壤鉗逵趺鼇/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/倥驃諛/裸赱蜉 瘰繪褝迚鼇"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/倥驃諛/Unt_hread view"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "夬 newsgroup `%s' 靺髣繪 溪."
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "悼黠竇 newsgroup 齡 關閙 繝竭橈纉:"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "荘 韵陌蒟贔迴 趺逹赱闥:\n"
+#~ "\n"
+
+#~ msgid "Usually used"
+#~ msgstr "囎轗蔔 驥皷跫竟蜿跂迴"
+
+#~ msgid "Program path"
+#~ msgstr "堤痲髀贖 韵閭驅跛癆闥"
+
+#~ msgid "Quotation format:"
+#~ msgstr "弥髢關閙苴 鞜驅蒹鼇:"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "桃芟汨鼇 譎 裃瘠笙..."
+
+#~ msgid "Set display item"
+#~ msgstr "驩鼬 繻瘢蜀跂逋 齡濶縷"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
+
+#~ msgid "Preferences for each account"
+#~ msgstr "盗蜍閭汳 竕 袍蒹 謠竅驩癈踰"
+
+#~ msgid "each"
+#~ msgstr "袍蒹"
+
+#~ msgid "/View so_urce"
+#~ msgstr "/東橄蜩 韃竅熄"
+
+#~ msgid "/Show all _header"
+#~ msgstr "/東橄蜩 苒 韜滂阨 裙瘠焙癇"
+
+#~ msgid "Current folder is Trash."
+#~ msgstr " 驂闕 裃樣閭闥 縷轣 堤痺驕跛沚"
+
+#~ msgid "Reading addressbook file..."
+#~ msgstr "堤痰樔 瘻縷 裃瘠竢 粡纒蕘逑纖..."
+
+#~ msgid "%s doesn't exist.\n"
+#~ msgstr "%s 粤 靺髣繪.\n"
+
+#~ msgid "Exporting addressbook to file..."
+#~ msgstr "梼榱 闕 裃樣閭 粡纒蕘逑纖 黼 瘻縷..."
+
+#~ msgid "failed to write addressbook data.\n"
+#~ msgstr "瘰沐 轣 竭樢 粤粹贔轣 阨 裃瘠竢 粡纒蕘逑纖.\n"
+
+#~ msgid "The name already exists."
+#~ msgstr "夬 迴赱 靺髣繪 溪."
+
+#~ msgid "New group"
+#~ msgstr "慾 闌樞"
+
+#~ msgid "Input the name of new group:"
+#~ msgstr "悼黠竇 迴赱 苒 轎癇 闌樞癇:"
+
+#~ msgid "Input the new name of group:"
+#~ msgstr "悼黠竇 轎 迴赱 苒 闌樞癇:"
+
+#~ msgid "The address <%s> has already been registered."
+#~ msgstr " 粡缸蔘逑 <%s> 泓繪 溪 裃癡驥蒹."
+
+#~ msgid "/_Message/Show all _header"
+#~ msgstr "/勿逡赱/東橄蜩 諛 苒 裙瘠焙癇"
+
+#~ msgid "Sending queued message failed."
+#~ msgstr " 瘰闢闍 趺逡賍 阨驅 瘰沐."
+
+#~ msgid "Current account: %s"
+#~ msgstr "夲泓闕 謠竅驩癈踰: %s"
+
+#, fuzzy
+#~ msgid "Authentication for %s on %s failed"
+#~ msgstr " 緕瘧驃磔鼇 竕 %s 齡 %s 瘰沐"
+
+#~ msgid ""
+#~ "Emulate the behavior of mouse operation of\n"
+#~ "Emacs-based mailer"
+#~ msgstr ""
+#~ "假闢跫燎鼇 苒 齦跟繿蝟闡橇 裼轗黼 阨 竟逕蜉蜿\n"
+#~ "阨 Emacs-based 韵閭驅跛癆闥 mail"
+
+#~ msgid "Authorizing..."
+#~ msgstr "梼瘧驃磔鼇..."
+
+#~ msgid ""
+#~ "Ordinary characters placed in the format string are copied without "
+#~ "conversion. Conversion specifiers are introduced by a % character, and "
+#~ "are replaced as follows:\n"
+#~ "%a: the abbreviated weekday name\n"
+#~ "%A: the full weekday name\n"
+#~ "%b: the abbreviated month name\n"
+#~ "%B: the full month name\n"
+#~ "%c: the preferred date and time for the current locale\n"
+#~ "%C: the century number (year/100)\n"
+#~ "%d: the day of the month as a decimal number\n"
+#~ "%H: the hour as a decimal number using a 24-hour clock\n"
+#~ "%I: the hour as a decimal number using a 12-hour clock\n"
+#~ "%j: the day of the year as a decimal number\n"
+#~ "%m: the month as a decimal number\n"
+#~ "%M: the minute as a decimal number\n"
+#~ "%p: either AM or PM\n"
+#~ "%S: the second as a decimal number\n"
+#~ "%w: the day of the week as a decimal number\n"
+#~ "%x: the preferred date for the current locale\n"
+#~ "%y: the last two digits of a year\n"
+#~ "%Y: the year as a decimal number\n"
+#~ "%Z: the time zone or name or abbreviation"
+#~ msgstr ""
+#~ " 瘻瘧滂纈 竟 關闊續陜逕瘟 齡 裙煬纃 跫髢關濶潁苒 瘢蜒驅闕瘟 "
+#~ "驃 跂癆髀鞋. 忠 轣 跂癆驕鞳 沚癇 瘻瘧滂癇 韵汾繪 轣 韵閾竇熹瘟 "
+#~ " 龜赳闍 % , 裃 濶 跂癆髀鞆 窰迴逕瘟 緕溟:\n"
+#~ "%a: 齦逕闌閭驕焉 苒 贔驕 苒 繧粹賍籬\n"
+#~ "%A: 韜滂苒 贔驕 苒 繧粹賍籬\n"
+#~ "%b: 齦逕闌閭驕焉 阨 闕赱闥 阨 贖轣\n"
+#~ "%B: 韜滂纈 迴赱 阨 贖轣\n"
+#~ "%c: 韵阡蛹跂辯 芟繿闌芻焉 裃 驕 竕 闡蜩贔迴 locale\n"
+#~ "%C: 瘻蛻踰 瘟轣 (沐闥/100)\n"
+#~ "%d: 芟汨 阨 贖轣 粤裃粡褝 瘻蛻踰\n"
+#~ "%H: 驕 粤裃粡褝 瘻蛻踰 驥皷跫竟蝙逕癇 髀譛 24 髷\n"
+#~ "%I: 驕 粤裃粡褝 瘻蛻踰 驥皷跫竟蝙逕癇 髀譛 12 髷\n"
+#~ "%j: 贔驕 阨 沐阨 粤裃粡褝 瘻蛻踰\n"
+#~ "%m: 贖轣 粤裃粡褝 瘻蛻踰\n"
+#~ "%M: 諷頸 粤裃粡褝 瘻蛻踰\n"
+#~ "%p: 縷 侈 面\n"
+#~ "%S: 粤繿諷頸 粤裃粡褝 瘻蛻踰\n"
+#~ "%w: 贔驕 苒 繧粹賍籬 粤裃粡褝 瘻蛻踰\n"
+#~ "%x: 韵阡蛹跂辯 芟繿闌芻焉 竕 闡蜩贔迴 locale\n"
+#~ "%y: 繼纒痿 糺 莓焉 阨 沐阨\n"
+#~ "%Y: 沐闥 粤裃粡褝 瘻蛻踰\n"
+#~ "%Z: 腋辯 驕, 迴赱, 齦逕闌閭驕焉"
+
+#~ msgid "done."
+#~ msgstr "壙謠."
+
+#~ msgid "can't get the next uid of folder: %s\n"
+#~ msgstr "粤 跟闡 轣 粡痰橢 闕 辮跂迴 襞粡裃 阨 裃瘠竢: %s\n"
+
+#~ msgid "/Remove _news server"
+#~ msgstr "/堤痺驕 news server"
+
+#~ msgid "Delete IMAP4 server"
+#~ msgstr "堤痺驕 IMAP4 server"
+
+#~ msgid "Really delete news server `%s'?"
+#~ msgstr "嘸竢驕 轣 粡痺驕縷 news server `%s';"
+
+#~ msgid "/_View/_Toolbar/_Non-display"
+#~ msgstr "/草繪褝迚鼇/矢橸 繿竅諷燎/浴 趺 繻瘢煕續瘟"
+
+#~ msgid "/_Message/_Mark/Mark it as _being read"
+#~ msgstr "/M滔赱/嘲赱逑/嘲赱逑 粡痰癈贔迴"
+
+#~ msgid "/_Mark/Make it as _being read"
+#~ msgstr "/嘲赱逑/嘲赱逑 粡痰癈贔迴"
+
+#~ msgid "Show other headers"
+#~ msgstr "東橄蜩 樣譎 裙瘠焙"
+
+#~ msgid "File copy from %s to %s failed.\n"
+#~ msgstr " 瘢蜒驕 瘻縷阨 瘰 %s 齡 %s 瘰沐.\n"
+
+#~ msgid ""
+#~ "The MD5 support is copyright by RSA Data Security, Inc. See the header "
+#~ "comment of the md5.c module for license terms.\n"
+#~ "\n"
+#~ msgstr ""
+#~ " 竟齡滂蜴 MD5 縷轣 copyright 苒 RSA Data Security, Inc. 偵熹 "
+#~ "齬謇 齡芻 辮蜉纐瘠焙 阨 md5.c module 竕 阨 髀 苒 樞繪癇.\n"
+#~ "\n"
+
+#~ msgid "SunMonTueWedThuFriSat"
+#~ msgstr "宝 偵 夲 壹 倥 倚 噤 "
+
+#~ msgid "/_Summary/Select a_ll"
+#~ msgstr "/倥驃諛/盗蜍閭 譎"
+
+#~ msgid "Clean trash"
+#~ msgstr "捕蒂驩鼬 阨 trash"
+
+#~ msgid "/_Mark/Mark as _important"
+#~ msgstr "/嘲赱逑/嘲赱逑 鼇赱逕蜉"
+
+#~ msgid "TextView: color allocation failed\n"
+#~ msgstr "TextView: 裃瘢闌 髯賍 瘰沐\n"
+
+#~ msgid "Invalid MIME type\n"
+#~ msgstr "門 气褫髀 竟 MIME\n"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 00000000..fedb6a06
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 00000000..a9647fc3
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 00000000..46bdfada
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,6104 @@
+# Spanish translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Ricardo Mones Lastra <mones@aic.uniovi.es>, 2000-2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-21 11:18+0100\n"
+"Last-Translator: Ricardo Mones Lastra <mones@aic.uniovi.es>\n"
+"Language-Team: Ricardo Mones Lastra <mones@aic.uniovi.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Acerca de"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME es copyright 2001 por Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Este programa es software libre; puede redistribuirlo y/o modificarlo bajo "
+"los trminos de la GNU General Public License publicada por la Free Software "
+"Foundation; tanto la versin 2, como (opcionlmente) cualquier versin "
+"posterior.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Este programa se distribuye con la esperanza de que sea til, pero SIN "
+"NINGUNA GARANTA; ni siquiera la garanta implcita de COMERCIALIDAD o "
+"ADECUACIN PARA ALGN PROPSITO PARTICULAR. Vea la GNU General Public "
+"License para ms detalles.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Usted debera haber recibido una copia de la GNU General Public License "
+"junto con este programa; en caso contrario, escriba a la Free Software "
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Aceptar"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Leyendo configuracin de cada cuenta...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Encontrada etiqueta: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Hay ventanas de composicin abiertas.\n"
+"Cierre todas las ventanas de composicin antes de editar las cuentas."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Abriendo ventana de edicin de cuenta...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Creando ventana de edicin de cuenta...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Editar cuentas"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"El orden de comprobacin de mensajes ser ste. Marque las casillas\n"
+"en la columna `G' para habilitar la descarga mediante `Traer todo'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nombre"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Servidor"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Aadir"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Editar"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Borrar "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Abajo"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Arriba"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Establecer como cuenta por omisin "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Cerrar"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Borrar cuenta"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Esta seguro de que quiere borrar esta cuenta?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Si"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+No"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "No se pudo obtener el fichero del mensaje %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "No se pudo obtener la parte del mensaje."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "No se puede obtener la parte del mensaje multipartes"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"La accin seleccionada no se puede utilizar en la ventana de\n"
+"composicin porque contiene %%f, %%F o %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"La orden no pudo ejecutarse. Fall la creacin de la tubera.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"No se pudo hacer fork para ejecutar la orden siguiente:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Ejecutanto: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Finaliz: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Entrada/salida de acciones"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Enviar "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Abortar"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Teclee el parmetro de la accin siguiente:\n"
+"(`%%h' ser sustituido por el parmetro)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Parmetro de usuario (oculto) de la accin"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Teclee el parmetro de la accin siguiente:\n"
+"(`%%u' ser sustituido con el parmetro)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Parmetro de usuario de la accin"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Aadir direccin a la agenda"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Direccin"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Notas"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Seleccionar carpeta de la agenda"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Fichero"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Fichero/Nueva _agenda"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Fichero/Nueva _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Fichero/Nuevo _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Fichero/Nuevo _servidor"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Fichero/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Fichero/_Editar"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Fichero/_Borrar"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Fichero/_Guardar"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Fichero/_Cerrar"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Direccin"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Direccin/Nueva _direccin"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Direccin/Nuevo _grupo"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Direccin/Nueva _carpeta"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Direccin/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Direccin/_Editar"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Direccin/_Borrar"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Herramientas"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Herramientas/Importar fichero _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Ayuda"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Ayuda/_Acerca de"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nueva _direccin"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nuevo _grupo"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nueva _carpeta"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Editar"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Borrar"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Direccin e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Agenda de direcciones"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nombre:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Borrar"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Buscar"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Para:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Borrar direccin(es)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Borrar realmente la(s) direccin(es)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "No"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Quiere borrar la carpeta Y todas las direcciones en `%s'? \n"
+"Si slo borra la carpeta las direcciones se movern a la carpeta padre."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Carpeta solamente"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Carpeta y direcciones"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Borrar realmente `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nuevo usuario, no se pudo guardar el fichero ndice."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nuevo usuario, no se pudo guardar los ficheros de direcciones"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Antigua agenda de direcciones convertida con xito"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Antigua agenda de direcciones convertida,\n"
+"no se pudo guardar el nuevo fichero ndice"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda,\n"
+"pero se crearon nuevos ficheros vacos."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda,\n"
+"no se pudieron crear los ficheros para la nueva."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda\n"
+"y no se pudieron crear ficheros para una nueva."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Error en la conversin de la agenda"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Conversin de la agenda"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Error en la agenda"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "No se pudo leer el ndice de direcciones"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Antigua agenda de direcciones convertida, no se pudo guardar el nuevo "
+"fichero ndice"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda, pero se crearon nuevos ficheros "
+"vacos."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda, no se pudieron crear los ficheros "
+"para la nueva."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"No se pudo convertir la antigua agenda y no se pudieron crear ficheros para "
+"una nueva."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Error en la conversin de la agenda"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Conversin de la agenda"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interfaz"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Agenda de direcciones"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persona"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Direccin e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupo"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Carpeta"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Servidor LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Direccin comn"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Direccin personal"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notificacin"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Aviso"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Error"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Creando el dilogo de alerta...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Mostrar este mensaje de nuevo"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Naranja"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rojo"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Azul cielo"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Azul"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Verde"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Marrn"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ninguno"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Aadir"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Quitar"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Propiedades..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_Fichero/_Enviar"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_Mensaje/Enviar _ms tarde"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_Mensaje/_Guardar en borradores"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_Mensaje/Guardar y _seguir editando"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Fichero/_Adjuntar fichero"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Fichero/_Insertar fichero"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Fichero/Insertar _firma"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Editar/_Deshacer"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Editar/_Rehacer"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Editar/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Editar/Cor_tar"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Editar/_Copiar"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Editar/_Pegar"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Editar/Pegar como c_itacin"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Editar/_Seleccionar todo"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Editar/Avanza_das"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Editar/Avanza_das/Ir al caracter anterior"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Editar/Avanza_das/Ir al caracter siguiente"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Editar/Avanza_das/Ir a la palabra anterior"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Editar/Avanza_das/Ir a la palabra siguiente"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Editar/Avanza_das/Ir al principio de la lnea"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Editar/Avanza_das/Ir al final de la lnea"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Editar/Avanza_das/Ir a la lnea anterior"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Editar/Avanza_das/Ir a la lnea siguiente"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Editar/Avanza_das/Borrar el caracter anterior"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Editar/Avanza_das/Borrar el caracter siguiente"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Editar/Avanza_das/Borrar la palabra anterior"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Editar/Avanza_das/Borrar la palabra siguiente"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Editar/Avanza_das/Borrar lnea"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Editar/Avanza_das/Borrar hasta el final de la lnea"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Editar/_Recortar prrafo actual"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Editar/_Cortar todas las lneas largas"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Editar/Aut_o-recorte"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Ver"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Ver/_Para"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Ver/_Copia (Cc)"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Ver/C_opia oculta (Bcc)"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Ver/_Responder a"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Ver/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Ver/_Aadir a"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Ver/_Regleta"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Ver/_Adjuntos"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Herramientas/_Agenda de direcciones"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Herramientas/Plan_tillas"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Herramientas/Accio_nes"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Herramientas/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Editar/Editar con el editor e_xterno"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Herramientas/Fir_mar con PGP"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Mensaje/_Encriptar con PGP"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: el fichero no existe\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "No se puede obtener la parte de texto\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Error en el formato de la marca de cita."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Error en el formato de responder/redirijir."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "El fichero %s no existe\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "No se puede obtener el tamao de %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "El fichero %s esta vaco."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "No se puede leer %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Mensaje: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "No se puede obtener la parte del mensaje multipartes."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Editado]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Componer mensaje%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Componer mensaje%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "No se especific el destinatario."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Enviar"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "El asunto esta vaco. Enviar de todas formas?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "no se puede obtener la lista de destinatarios."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"No especific ninguna cuenta para enviar.\n"
+"Seleccione alguna cuenta antes de enviar."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Hubo un error enviando el mensaje a %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "No se puede guardar el mensaje en Salida."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"No se encontr ninguna clave asociada al ID-clave seleccionado actualmente `%"
+"s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "no se pueden cambiar los permisos de archivo\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"No puedo convertir la codificacin de caracteres del mensaje\n"
+"de %s a %s.\n"
+"Enviarlo de todas formas?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "no se pueden escribir las cabeceras\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "no se puede eliminar el mensaje antiguo\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "poniendo en la cola...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "no puedo encontrar la carpeta de cola\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "El mensaje no se puede poner en la cola\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Message-ID generado: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Creando ventana de composicin...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tipo MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Tamao"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Desde:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Enviar mensaje"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Enviar despus"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Poner en la cola y enviar despus"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Borrador"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Guardar como borrador"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Insertar"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Insertar fichero"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Adjuntar"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Adjuntar fichero"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Firma"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Insertar firma"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Editar con un editor externo"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Recortar"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Cortar todas las lneas largas"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Tipo MIME invlido."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "El fichero no existe o est vaco."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Propiedades"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codificacin"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Ruta"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nombre de fichero"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "La orden del editor externo es invlida: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"El editor externo an esta activo.\n"
+"Desea terminar el proceso?\n"
+"Id. de grupo de proceso: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Terminado grupo de proceso id.: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Fichero temporal: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Componer: entrada desde proceso monitor\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "No se pudo ejecutar el editor externo\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "No se pudo escribir en el fichero\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Fallo leyendo tubera\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "El mensaje no se puede poner en la cola."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Seleccionar fichero"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Descartar mensaje"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Este mensaje se ha modificado. Desea descartarlo?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Descartar"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "a Borradores"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Quiere aplicar la plantilla `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Aplicar plantilla"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Reemplazar"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Editar direccin"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Aadir una persona nueva"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Editar detalles personales"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Debe especificarse una direccin de correo."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Debe especificarse un Nombre y un Valor"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Editar datos personales"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Apellidos"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Nombre"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Apodo"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Direccin e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Arriba"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Abajo"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modificar"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Limpiar"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valor"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Datos bsicos"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributos del usuario"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "El fichero parece correcto."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "No parece que el fichero est en el formato de la agenda."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "No se pudo leer del fichero."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Editar agenda"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Comprobar fichero "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fichero"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Aadir nueva agenda"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Debe proporcionar un nombre de grupo"
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Editar datos del grupo"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nombre de grupo"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Direcciones en el grupo"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Direcciones disponibles"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Mover las direcciones de correo desde/hacia el grupo con las flechas"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Editar detalles del grupo"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Aadir nuevo grupo"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Editar carpeta"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Nombre de la nueva carpeta:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nueva carpeta"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Nombre de la nueva carpeta:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "No parece que ese fichero est en formato JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Seleccionar fichero JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Editar entrada JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Elemento(s) adicional(es) de la direccin"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Aadir nueva entrada JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Conectado con xito al servidor"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "No se pudo conectar al servidor"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Editar servidor LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nombre de mquina"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Puerto"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Comprobar servidor "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Base de bsqueda"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Criterio de bsqueda"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Limpiar "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Asociar DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Asociar contrasea"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Tiempo lmite (seg.)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "N entradas mximas"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Bsico"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Extendido"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Aadir nuevo servidor LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Editar LDAP - Seleccionar base de bsqueda"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Base(s) de bsqueda disponible(s)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"No se pudo leer la base de bsqueda del servidor - configrela manualmente"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "No parece que el fichero est en formato vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Seleccionar fichero vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Editar entrada vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Aadir nueva entrada vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportar"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Especificar directorio destino y fichero mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Directorio origen:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Fichero de exportacin:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "Seleccionar..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Seleccione fichero de exportacin"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "fallo escribiendo la configuracin a fichero\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Seleccionar carpeta"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Entrada"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Enviado"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Cola"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Papelera"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Borradores"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NuevaCarpeta"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' no puede estar en el nombre de la carpeta."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "La carpeta `%s' ya existe."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "No se puede crear la carpeta `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Crear _nueva carpeta..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Renombrar carpeta..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Borrar carpeta"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/_Vaciar papelera"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Comprobar si hay mensajes nuevos"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/R_econstruir rbol de carpetas"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Buscar en los mensajes"
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/Des_cargar"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Suscribirse a un grupo..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Eliminar grupo"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Creando vista de carpeta...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nuevos"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "No ledos"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "N"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Estableciendo informacin de carpeta...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Estableciendo informacin de carpeta..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Revisando carpeta %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Revisando carpeta %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Reconstruir rbol de carpetas"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Se reconstruir el rbol de carpetas. Continuar?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Reconstruyendo el rbol de carpetas..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "La reconstruccin del rbol de carpetas fall."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Reconstruyendo todos los rboles de carpetas..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Comprobar si hay mensajes nuevos en todas las carpetas..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Carpeta %s seleccionada\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Descargando mensajes en %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Hubo un error descargando los mensajes en `%s'."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Teclee el nombre de la nueva carpeta:\n"
+"(si quiere crear una carpeta para almacenar subcarpetas,\n"
+" aada `/' al final del nombre)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Nuevo nombre para `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Renombrar carpeta"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Todas las carpetas y mensajes bajo `%s' sern borrados.\n"
+"Confirma el borrado?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Borrar carpeta"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "No se puede eliminar la carpeta `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Vaciar papelera"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Vaciar todos los mensajes de la papelera?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Realmente desea eliminar el buzn `%s' ?\n"
+"(Los mensajes NO se borrarn del disco)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Eliminar mailbox"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Eliminar realmente la cuenta IMAP4 `%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Borrar cuenta IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Borrar el grupo de noticias `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Borrar grupo de noticias"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Borrar la cuenta de noticias `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Borrar cuenta de noticias"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Suscribir grupo de noticias"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Seleccione los grupos de noticias a subscribir."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Buscar grupos:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Buscar "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nombre de grupo"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Mensajes"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tipo"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Refrescar"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderado"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "solo lectura"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "desconocido"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "No se puede obtener la lista de grupos."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Hecho."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d grupos de noticias recibidos (%s ledos)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Grupos de noticias:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Creando vista de cabeceras...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Sin remite)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Sin asunto)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Creando vista de imagen...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "No se puede cargar la imagen."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "La conexin IMAP4 con %s se ha roto. Reconectando...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "creando conexin IMAP4 con %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "No puedo iniciar la sesin TLS.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "no puedo establecer los flags borrados: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "no puedo vaciar\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "no puedo establecer los flags borrados: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "no se puede cerrar la carpeta\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "la carpeta raz %s no existe\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "hubo un error obteniendo LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "No puedo crear '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "No puedo crear '%s' bajo Entrada\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "no puedo crear el buzn: LIST fall\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "no puedo crear el buzn\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "no puedo renombrar el buzn: %s a %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "no puedo borrar el buzn\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "no se puede obtener la estructura del mensaje\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Error obteniendo la estructura del mensaje.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "No se puede interpretar la estructura del mensaje: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "No se puede conectar con el servidor IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "No puedo establecer la sesin IMAP4: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "no se puede obtener el espacio de nombres\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "no se puede seleccionar la carpeta: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "La autentificacin IMAP fall.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Autentificacin IMAP4 fallida.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "no puedo aadir %s a %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(enviando fichero...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "no se puede aadir el mensaje a %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "no puedo copiar %s a %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "error en el mandato imap: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "error en el mandato imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "error en el mandato imap: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv no puede convertir UTF-7 a %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv no puede convertir %s a UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importar"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Especifique fichero mbox y carpeta de destino."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importando fichero:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Directorio destino:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Seleccionar fichero a importar"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Especifique el nombre de la agenda y el fichero a importar."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Seleccione y renombre los campos LDIF a importar."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fichero importado."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Seleccione un fichero."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Debe proporcionar un nombre de agenda de direcciones."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Error leyendo los campos LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Fichero LDIF importado con xito."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Seleccionar fichero LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nombre del fichero"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Campo LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nombre de atributo"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atributo"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Seleccionar"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Agenda de direcciones :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nombre de fichero :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Registros :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importar fichero LDIF a la agenda"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Anterior"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Siguiente"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informacin de fichero"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributos"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Finalizar"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Obteniendo nuevos mensajes"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "En espera"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Recuperando"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Hecho (%d mensaje(s) (%s) recibido(s))"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Hecho (no hay mensajes nuevos)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Conexin fallida"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Authorizacin fallida"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Bloqueado"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Tiempo lmite"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Finalizado (%d mensaje(s) nuevo(s))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Finalizado (no hay mensajes nuevos)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Hubo algn error obteniendo el correo."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "obteniendo nuevos mensajes de la cuenta %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Recuperando nuevos mensajes"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Conectando al servidor POP3: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "No se puede conectar al servirdor POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autentificando..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Obteniendo mensajes desde %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Obteniendo el nmero de nuevos mensajes (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Obteniendo el nmero de nuevos mensajes (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Obteniendo el nmero de nuevos mensajes (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Obteniendo el tamao de nuevos mensajes (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Borrando mensaje %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Saliendo"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Recuperando mensaje (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Obteniendo (%d mensaje(s) (%s) recibido(s))"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Conexin fallida."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Hubo un error mientras se procesaba el correo."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Hubo un error procesando el correo:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "No hay espacio libre en disco."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "No se puede escribir el fichero."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Error de socket."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Conexin cerrada por la mquina remota."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "El buzn esta bloqueado."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"El buzn est bloqueado:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "La autentificacin fall."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"La autentificacin fall:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "Se agot el tiempo de espera de la sesin."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Incorporacin cancelada\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Obteniendo nuevos mensajes desde %s en %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Contrasea para %s en %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Contrasea"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Traza del protocolo"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"El fichero `%s' ya existe.\n"
+"No puedo crear la carpeta."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread no est soportado por glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG no esta convenientemente instalado, o es una versin antigua.\n"
+"Soporte para OpenPGP deshabilitado."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uso: %s [OPCIN]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [direccin] abre la ventana de composicin"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fich1 [fich2]...\n"
+" abre la ventana de composicin con los ficheros\n"
+" especificados como adjuntos"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive recive los mensajes nuevos"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all recibe nuevos para todas las cuentas"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send enviar todos los mensajes en la cola"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [carpeta]... muestra el nmero total de mensajes"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [carpeta]...\n"
+" muestra el estado de cada carpeta"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug modo de depuracin"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help presenta esta ayuda y finaliza"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version da la informacin de la versin y finaliza"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Est componiendo un mensaje. Seguro que quiere salir?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Mensajes en cola"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Hay mensajes sin enviar en la cola. Salir ahora?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "ya hay otro Sylpheed ejecutndose.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Fichero/_Carpeta"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Fichero/_Carpeta_/Crear _nueva carpeta..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Fichero/_Carpeta_/_Renombrar carpeta..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Fichero/_Carpeta_/_Borrar carpeta"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/_Fichero/_Buzn"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Fichero/_Buzn/_Aadir buzn..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Fichero/_Buzn/_Eliminar buzn"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/_Fichero/_Buzn/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Fichero/_Buzn/_Comprobar si hay mensajes nuevos"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Fichero/_Buzn/_Comprobar mensajes nuevos en todas las carpetas"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Fichero/_Buzn/R_econstruir rbol de carpetas"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Fichero/I_mportar fichero mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Fichero/_Exportar a un fichero mbox..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/_Fichero/_Vaciar todas las papeleras"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Fichero/_Guardar como..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Fichero/_Imprimir..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Fichero/_Trabajar sin conexin"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Fichero/Sali_r"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Editar/Seleccionar _hilo"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Edicin/_Buscar en el mensaje actual..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Edicin/_Buscar en los mensajes..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Ver/Mostrar u o_cultar"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Ver/Mostrar u o_cultar/_rbol de carpetas"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Ver/Mostrar u o_cultar/Vista de _mensajes"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Ver/Mostrar u o_cultar/_Herramientas"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Ver/Mostrar u o_cultar/_Herramientas/Iconos _y texto"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Ver/Mostrar u o_cultar/_Herramientas/_Iconos"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Ver/Mostrar u o_cultar/_Herramientas/_Texto"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Ver/Mostrar u o_cultar/_Herramientas/_Ocultar"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Ver/Mostrar u o_cultar/_Barra de estado"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Ver/Separar rb_ol de carpetas"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Ver/Separar vista de m_ensajes"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Ver/_Ordenar"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Ver/_Ordenar/Por _nmero"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Ver/_Ordenar/Por _tamao"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Ver/_Ordenar/Por _fecha"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Ver/_Ordenar/Por _remitente"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Ver/_Ordenar/Por _destinatario"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Ver/_Ordenar/Por a_sunto"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Ver/_Ordenar/Por _color de la etiqueta"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Ver/_Ordenar/Por _marca"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Ver/_Ordenar/Por _no ledo"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Ver/_Ordenar/Por adj_unto"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Ver/_Ordenar/N_o ordenar"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Ver/_Ordenar/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Ver/_Ordenar/Ascendente"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Ver/_Ordenar/Descendente"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Ver/_Ordenar/Atraer _por asunto"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Ver/_Vista jerrquica"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Ver/E_xpandir todos los hilos"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Ver/Co_lapsar todos los hilos"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Ver/Elementos visibles..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Ver/_Ir a"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Ver/_Ir a/Mensaje a_nterior"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Ver/_Ir a/Mensaje s_iguiente"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Ver/_Ir a/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Ver/_Ir a/_Anterior sin leer"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Ver/_Ir a/_Siguiente sin leer"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Ver/_Ir a/Mensaje nue_vo anterior"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Ver/_Ir a/Mensaje n_uevo s_iguiente"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Ver/_Ir a/Mensaje marcado a_nterior"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Ver/_Ir a/Siguiente mensaje marcado"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Ver/_Ir a/Mensaje etiquetado anterior"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Ver/_Ir a/Siguiente mensaje etiquetado"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Ver/_Ir a/_Ir a otra carpeta..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Ver/_Conjunto de cdigos/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Ver/_Conjunto de cdigos"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Ver/_Conjunto de cdigos/_Autodetectar"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Ver/_Conjunto de cdigos/ASCII de 7 bits (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Ver/_Conjunto de cdigos/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Ver/_Conjunto de cdigos/Europeo occidental (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Ver/_Conjunto de cdigos/Europeo occidental (ISO-8859-_15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Ver/_Conjunto de cdigos/Centroeuropeo (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Ver/_Conjunto de cdigos/Bltico (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Ver/_Conjunto de cdigos/Bltico (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Ver/_Conjunto de cdigos/Griego (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Ver/_Conjunto de cdigos/Turco (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Ver/_Conjunto de cdigos/Cirlico (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Ver/_Conjunto de cdigos/Cirlico (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Ver/_Conjunto de cdigos/Cirlico (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Ver/_Conjunto de cdigos/Cirlico (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Ver/_Conjunto de cdigos/Japons (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Ver/_Conjunto de cdigos/Japons (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Ver/_Conjunto de cdigos/Japons (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Ver/_Conjunto de cdigos/Japons (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Ver/_Conjunto de cdigos/Chino simplificado (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Ver/_Conjunto de cdigos/Chino tradicional (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Ver/_Conjunto de cdigos/Chino tradicional (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Ver/_Conjunto de cdigos/Chino (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Ver/_Conjunto de cdigos/Coreano (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Ver/_Conjunto de cdigos/Coreano (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Ver/_Conjunto de cdigos/Tailands (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Ver/_Conjunto de cdigos/Tailands (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Ver/Abrir en una ventana _nueva"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Ver/Fuente del mens_aje"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Ver/Mostrar todas las cabeceras"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Ver/Actualizar res_umen"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Mensaje"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/_Mensaje/Reci_bir"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Mensaje/Reci_bir/De la cuenta a_ctual"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Mensaje/Reci_bir/De tod_as las cuentas"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Mensaje/Reci_bir/Ca_ncelar recepcin"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Mensaje/Reci_bir/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Mensaje/Enviar mensa_jes en cola"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Mensaje/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Mensaje/Componer _nuevo mensaje"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Mensaje/_Responder"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Mensaje/Respon_der a"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Mensaje/Respon_der a/A _todos"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Mensaje/Respon_der a/Al _remitente"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Mensaje/Respon_der a/A la _lista de correo"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Mensaje/_Reenviar"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Mensaje/Reen_viar como adjunto"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Mensaje/Red_irigir"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Mensaje/M_over..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Mensaje/_Copiar..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Mensaje/_Borrar"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Mensaje/_Marcar"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Mensaje/_Marcar/_Marcar"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Mensaje/_Marcar/_Desmarcar"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Mensaje/_Marcar/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Mensaje/_Marcar/Marcar como no ledo"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Mensaje/_Marcar/Marcar como ledo"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Mensaje/_Marcar/Marcar todo como ledo"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Mensaje/Re_editar"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Herramientas/Aadir _remitente a la agenda"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Herramientas/_Filtrar todos los mensajes de la carpeta"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Herramientas/_Filtrar los mensajes seleccionados"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Herramientas/_Crear regla de filtrado"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Herramientas/_Crear regla de filtrado/_Automticamente"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Herramientas/_Crear regla de filtrado/Basada en _Desde"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Herramientas/_Crear regla de filtrado/Basada en _Para"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Herramientas/_Crear regla de filtrado/Basada en el _Asunto"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Herramientas/Borrar los mensajes re_petidos"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Herramientas/E_jecutar"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Herramientas/_Ventana de traza"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configuracin"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configuracin/Preferencias _comunes..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configuracin/Preferencias de _filtrado..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Configuracin/_Plantillas ..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configuracin/_Acciones..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configuracin/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configuracin/_Preferencias de la cuenta actual..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configuracin/Crear _nueva cuenta..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configuracin/_Editar cuentas..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configuracin/_Cambiar cuenta actual"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Ayuda/_Manual"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Ayuda/_Manual/_Ingls"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Ayuda/_Manual/_Japons"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Ayuda/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Ayuda/_FAQ/_Ingls"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Ayuda/_FAQ/_Alemn"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Ayuda/_FAQ/_Espaol"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Ayuda/_FAQ/_Francs"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Ayuda/_FAQ/_Italiano"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Ayuda/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Creando ventana principal...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: fallo solicitando color %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "hecho.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Sin ttulo"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "ninguna"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Cambiando el tipo de separacin de ventana de %d a %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Desconectado"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Esta desconectado. Conectar?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "Vaciar todas las papeleras"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "Vaciar los mensajes de todas las papeleras?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Aadir buzn"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Introduzca la localizacin del buzn.\n"
+"Si el buzn especificado ya existe ser\n"
+"escaneado automticamente."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "El buzn `%s' ya existe."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Correo"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Fall la creacin del buzn.\n"
+"Quizs ya existan los ficheros o no tenga permisos suficientes para "
+"escribir en el directorio."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - rbol de carpetas"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Vista de mensaje"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Responder"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Responder a _todos"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/Responder al _remitente"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/Responder a la _lista de correo"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Reenviar"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Reen_viar como adjunto"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Red_irigir"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Traer"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Incorporar correo nuevo"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Traer todo"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Incorporar correo nuevo de todas las cuentas"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Enviar mensaje(s) en la cola"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Componer"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Componer mensaje nuevo"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Responder"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Responder al mensaje"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "A todos"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Responder a todos"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Reenviar"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Reenviar el mensaje"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Borrar el mensaje"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Ejecutar"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Ejecutar el proceso marcado"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Siguiente no ledo"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferencias"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Preferencias comunes"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Cuenta"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Preferencias de la cuenta"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Esta desconectado. Haga click en el icono para conectar."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Esta conectado. Haga click en el icono para desconectar."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Salir"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Salir del programa?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "no se puede escribir el fichero temporal\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Obteniendo mensajes desde %s en %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "no puedo leer el fichero mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "formato de mbox invlido: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox malformada: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "no se puede abrir el fichero temporal\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Encontrado Desde sin escapar:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d mensajes encontrados.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "no se puede crear el fichero de bloqueo %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "usar 'flock' en vez de 'file' si es posible.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "no puedo crear %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "el buzn esta siendo usado por otro proceso, esperando...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "no se puede bloquear %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "tipo de bloqueo no vlido\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "no se puede desbloquear %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "no se puede truncar a cero el buzn.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportando mensajes de %s a %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Buscar en el mensaje actual"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Buscar texto:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Mays./mins."
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Buscar hacia atrs"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Buscar"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Bsqueda fallida"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Cadena no encontrada."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Se lleg al principio del mensaje. Seguir desde el final?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Se lleg al final del mensaje. Seguir desde el principio?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Bsqueda concluida"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Creando visor de mensaje...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Guardar como"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Sobreescribir"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Sobreescribir el fichero existente?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "No puedo guardar el fichero `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Teclee la orden para imprimir:\n"
+"(`%s' ser sustituido por el fichero)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"La orden de impresin es invlida:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "no se puede copiar mensaje %s a %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "No se puede abrir el fichero de marcas.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "carpetas de origen y destino idnticas.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copiando mensaje %s%c%d a %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "ltimo nmero en directorio %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Abrir"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Abrir _con..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Ver como texto"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Guardar como..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Verificar firma"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Creando visor de MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tipo MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Texto"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Adjuntos"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Seleccione \"Verificar firma\" para verificar"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "No se puede guardar la parte del mensaje multipartes."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Abrir con"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Teclee la orden para abrir el fichero:\n"
+"(`%s' ser sustituido por el fichero)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "La orden del visualizador MIME es invlida: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "creando conexin NNTP con %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "La conexin NNTP con %s:%d ha sido rota. Reconectando...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "el artculo %d ya esta en cach.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "obteniendo artculo %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "no puedo leer el artculo %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "no puedo obtener la lista de grupos\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "no se puede enviar el artculo.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "no puedo obtener el artculo %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "no puedo seleccionar grupo: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "rango de artculos no vlido: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "no hay artculos nuevos.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "obteniendo xover %d - %d en %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "no se puede obtener xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "hubo un error obteniendo xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "linea xover no vlida: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "no se puede obtener xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "hubo un error obteniendo xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "No se puede conectar con el servidor NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "error del protocolo: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "error del protocolo\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Hubo un error mientras se enviaba\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Hubo un error enviando el mandato\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Frase contrasea"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[sin id usuario]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sIntroduzca la frase contrasea para:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Contrasea errnea! Intentelo de nuevo...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "No se encontro en el saludo la marca temporal APOP requerida\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "La marca temporal del saludo tiene un error de sintaxis\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Error del protocolo POP3\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "respuesta UIDL no vlida: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Borrando mensaje expirado %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Ignorando mensaje %d (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "el buzn est bloqueado\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "tiempo de espera agotado para la sesin\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "no puedo abrir la sesin TLs\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "hubo algn error en la autentificacin\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "mandato no soportado\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "hubo algn error en la sesin POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Leyendo configuracin...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Encontrado %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Terminada la lectura de la configuracin.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Configuracin guardada.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Abriendo ventana de preferencias de cuenta...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Cuenta%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferencias para una nueva cuenta"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Preferencias de la cuenta"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Creando ventana de preferencias de cuenta...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Recibir"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacidad"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avanzadas"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nombre de esta cuenta"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Cuenta por defecto"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informacin personal"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nombre completo"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Direccin de correo"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacin"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informacin del servidor"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Noticias (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Ninguna (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Este servidor requiere autentificacin"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Servidor de news"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Servidor de recepcin"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Servidor SMTP (enviar)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Usuario"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Contrasea"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "Usar autentificacin segura (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Eliminar los mensajes del servidor al recibir"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Eliminar despus de"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "das"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 das: eliminar inmediatamente)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Descargar todos los mensajes del servidor"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Tamao lmite para recibir"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "Kb"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrar mensajes al recibir"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Buzn por defecto"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Los mensajes sin filtrar se guardarn en esta carpeta)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Mtodo de autentificacin"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automtica"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Traer todo' comprueba si hay mensajes nuevos en esta cuenta"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Cabecera"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Aadir campo Fecha"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generar ID-Mensaje"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Aadir cabecera de usuario"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Editar... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autentificacin"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Autentificacin SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Si deja estos campos vacos, se utilizar el mismo\n"
+"ID de usuario y contrasea usados para la recepcin."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autentificacin con POP3 antes de enviar"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Salida de la orden"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Establecer las siguientes direcciones automticamente"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Responder a"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Encriptar el mensaje por defecto"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Firmar el mensaje por defecto"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Usar formato ASCII blindado para encriptacin"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Usar firma de texto claro"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Firmar clave"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Usar clave GnuPG por defecto"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Seleccionar clave por direccin de correo"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Especificar clave manualmente"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Usuario o ID clave:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "No usar SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Usar SSL para la conexin POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Usar el mandato STARTTLS para abrir la sesin SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Usar SSL para la conexin IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Usar SSL para la conexin NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Enviar (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Usar SSL para la conexin SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Utilizar SSL no bloqueante"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Deshabiltelo si tiene problemas con la conexin SSL)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Puerto SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Puerto POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Puerto IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Puerto NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Nombre del dominio"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Directorio del servidor IMAP4"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Poner mensajes enviados en"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Poner borradores de mensajes en"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Poner mensajes borrados en"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "No se especific el nombre de cuenta."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "No se especific la direccin de correo."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "No se especific el servidor SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "No se especific el usuario."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "No se especific el servidor POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "No se especific el servidor IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "No se especific el servidor NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"No se recomienda usar el estilo antiguo de blindaje de\n"
+"ASCII plano para mensajes encriptados. No cumple con el\n"
+"RFC 3156 - Seguridad MIME con OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Configuracin de acciones"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nombre de men:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Lnea de orden:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nombre de men:\n"
+" Utilize / en el nombre para hacer submens.\n"
+"Lnea de orden:\n"
+" Comenzar con:\n"
+" | para enviar el cuerpo del mensaje o la seleccin a la orden\n"
+" > para enviar texto proporcionado por el usuario a la orden\n"
+" * para enviar sin mostrar el texto de usuario a la orden Finalizar con:\n"
+" | para sustituir el cuerpo del mensaje o seleccin con la salida de la "
+"orden\n"
+" > para insertar la salida de la orden sin sustituir el texto existente\n"
+" & para ejecutar la orden asncronamente (en segundo plano)\n"
+" Utilizar:\n"
+" %f para el nombre de fichero del mensaje\n"
+" %F para la lista de nombres de fichero de los mensajes seleccionados\n"
+" %p para la parte seleccionada del mensaje. %u para un argumento "
+"proporcionado por el usuario.\n"
+" %h para un argumento de usuario sin mostrar el texto.\n"
+" %s para el texto seleccionado actualmente"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Reemplazar "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Ayuda sintaxis "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Acciones registradas"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nueva)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "No se estableci el nombre de men."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "No se permiten dos puntos ':' en el nombre de men."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "El nombre del men es demasiado largo."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "No se estableci la lnea de orden."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "El nombre de men y la orden son demasiado largos."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"La orden\n"
+"%s\n"
+"tiene algn error de sintaxis."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Borrar accin"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Realmente quiere borrar esta accin?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Creando ventana de preferencias comunes...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferencias comunes"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citar"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Ver"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Mensaje"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Otras"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Programa externo"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Usar un programa externo para incorporar"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Orden"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Almacenamiento local"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorporar del almacn"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrar al incorporar"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Ruta al almacn"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Comprobar correo nuevo"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "cada"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuto(s)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Comprueba correo nuevo al inicio"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Actualizar todos las carpetas locales despus de incorporar"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Noticias"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Nmero mximo de artculos a descargar\n"
+"(sin lmite si se especifica 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Usar programa externo para enviar"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Guardar mensajes enviados en Salida"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Conjunto de cdigos para enviar"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automtico (Recomendado)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "ASCII de 7 bits (US-ASC_II)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europeo Occidental (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europeo Occidental (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Centroeuropeo (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Bltico (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Bltico (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Griego (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turco (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirlico (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirlico (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirlico (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirlico (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japons (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japons (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japons (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Chino simplificado (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Chino tradicional (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Chino tradicional (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chino (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Coreano (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tailands (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tailands (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Si se selecciona `Automtico' se utilizar la\n"
+"codificacin ptima para la localizacin actual."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Codificacin de transferencia"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Especificar la codificacin de transferencia (Content-Transfer-Encoding)\n"
+"cuando el cuerpo del mensaje contiene caracteres no-ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Separador de firma"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Insertar automticamente"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Lanzar el editor externo automticamente"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Niveles de deshacer"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Recortar mensajes a los"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caracteres"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Recortar citacin"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Recortar al escribir"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Recortar antes de enviar"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Seleccionar automticamente la cuenta para responder"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citar el mensaje al responder"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "El botn Responder invoca responder a la lista de correo"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formato de rplica"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Marca de citacin"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formato de reenvio"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Descripcin de smbolos "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Fuente"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traducir cabeceras (como `Desde:', `Asunto:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Ver el nmero de no ledos junto al nombre de la carpeta"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Abreviar nombres de grupos con ms de"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "letras"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Vista resumen"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Ver destinatario en la columna `Desde' si el remitente es usted mismo"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Expandir hilos"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formato de fecha"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Elementos visibles en cabecera... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Permitir colores en el mensaje"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Mostrar alfabticos y numricos multi-byte como\n"
+"caracteres ASCII (slo para Japons)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Mostrar panel de cabeceras sobre el mensaje"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Cabeceras breves en la vista del mensaje"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Interlineado"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Dejar espacio de cabecera"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Desplazamiento"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Media pgina"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Desplazamiento suave"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Paso"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "Redimensionar las imgenes adjuntas para adecuarlas a la ventana"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Comprobar las firmas automticamente"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Mostrar dilogo de comprobacin de firma"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Mantener contrasea en memoria temporalmente"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Expirar despus de"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuto(s) "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Poniendo '0' mantendr la contrasea\n"
+" durante toda la sesin)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Capturar la entrada mientras se introducen contraseas"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Mostrar aviso al arrancar si no funciona GnuPG"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Abrir siempre los mensajes del resumen al seleccionarlos"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Abrir el primer mensaje no ledo al abrir una carpeta"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Marcar mensaje como ledo slo al abrirlo en una ventana nueva"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Abrir entrada despues de recibir correo nuevo"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Ejecutar inmediatamente movimientos o borrados de mensajes"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Los mensajes se marcarn hasta la ejecucin\n"
+" si est desactivado)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Dilogo de recepcin"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Mostrar dilogo de recepcin"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Siempre"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Slo al recibir manualmente"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nunca"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "No mostrar dilogo de error si hay errores de recepcin"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Mostrar dilogo de recepcin al finalizar"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Establecer atajos de teclado... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "rdenes externas (%s se sustituir con el nombre de fichero / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Navegador web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Aadir direccin al destino con doble click"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Al salir"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Confirmar al salir"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Vaciar papelera al salir"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Preguntar antes de vaciar"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Avisar si existen mensajes en cola"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Tiempo de espera agotado E/S socket:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "segundo(s)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "el dia de la semana abreviado"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "el dia de la semana completo"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "el nombre del mes abreviado"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "el nombre del mes completo"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "la fecha y hora preferida para la localizacin actual"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "el nmero de siglo (ao/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "el dia del mes como nmero decimal"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "la hora como nmero usando el reloj de 24 horas"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "la hora como nmero usando el reloj de 12 horas"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "el dia del ao como nmero decimal"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "el mes como nmero decimal"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "el minuto como nmero decimal"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM o PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "el segundo como nmero decimal"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "el dia de la semana como nmero decimal"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "la fecha preferida para la localizacin actual"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "los dos ltimos dgitos del ao"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "el ao como nmero decimal"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "zona horaria o nombre o abreviatura"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Especificador"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Descripcin"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Ejemplo"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Colores del mensaje"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Colores"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Texto citado - Primer nivel"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Texto citado - Segundo nivel"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Texto citado - Tercer nivel"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Enlace URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Reutilizar colores de citacin"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Elejir color para el nivel de citado 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Elejir color para el nivel de citado 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Elejir color para el nivel de citado 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Elejir color para URIs"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Descripcin de smbolos"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Fecha\n"
+"Desde\n"
+"Nombre completo del remitente\n"
+"Nombre del remitente\n"
+"Inicial del remitente\n"
+"Asunto\n"
+"Para\n"
+"Cc\n"
+"Grupos de noticias\n"
+"ID-Mensaje"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Si x est, muestra expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Cuerpo del mensaje\n"
+"Cuerpo del mensaje citado\n"
+"Cuerpo del mensaje sin firma\n"
+"Cuerpo del mensaje citado sin firma\n"
+"El carcter %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Carcter barra invertida\n"
+"Carcter de interrogacin\n"
+"Carcter llave abierta\n"
+"Carcter llave cerrada"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Seleccin de tipografa"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Atajos de teclado"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Selecciona el conjunto de atajos de teclado.\n"
+"Se pueden modificar tambin los atajos de los mens pulsando\n"
+"cualquier tecla(s) al situar el ratn sobre el elemento del men."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Por defecto"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Antiguos de Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Configuracin de cabeceras de usuario"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Cabeceras de usuario"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "No se estableci el nombre de cabecera"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Borrar cabecera"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Quiere borrar realmente esta cabecera?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Creando ventana de visualizacin de propiedades de cabeceras...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Ver propiedades de cabeceras"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Cabecera"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Cabeceras mostradas"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Cabeceras ocultas"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Mostrar todas las cabeceras"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Leyendo configuracin para mostrar cabeceras...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Escribiendo configuracin para mostrar cabeceras...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Esa cabecera ya existe en la lista."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Preferencias de filtrado"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "Encima"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "Debajo"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Borrar regla"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Est seguro de que quiere borrar esta regla?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Regla de filtrado"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Si coincide alguna de las condiciones siguientes"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Si coinciden todas las condiciones siguientes"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Realizar las acciones siguientes:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "Para o Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Cualquier cabecera"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "Editar cabecera..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Cuerpo del mensaje"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Resultado de una orden"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "Edad"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "contiene"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "no contiene"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "es"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "no es"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "coincide con exp.reg."
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "no coincide con exp.reg."
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "es mayor que"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "es menor que"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "es ms largo que"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "es ms corto que"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Mover a"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Copiar a"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "No recibir"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Borrar del servidor"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "Establecer marca"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Establecer color"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Marcar como ledo"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Reenviar como adjunto"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Redirigir"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Ejecutar orden"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Detener la evaluacin de reglas"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "carpeta:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "direccin:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "Editar lista de cabeceras"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Cabeceras"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Cabecera:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "No se especific el nombre de la regla."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "No se especific la orden."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Existe una condicin invlida."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "No se especific la carpeta de destino."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Existe una orden invlida."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "No existe la condicin."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "No existe la accin."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Propiedades de la carpeta"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Generales"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "No mostrar [...] o (...) al inicio del asunto en el resumen"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Borrar [...] o (...) al inicio del asunto al responder"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Aplicar en subcarpetas"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "utilizar tambin al responder"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Responder-A:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Marca"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Adjunto"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Asunto"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Desde"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Fecha"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nmero"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Creando ventana de configuracin de columnas en el resumen...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Configuracin de elementos del resumen"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Seleccione los elementos a mostrar en el resumen. Se puede modificar\n"
+"el orden utilizando los botones Arriba/Abajo o arrastrandolos."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Elementos disponibles"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Elementos visibles"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Valores por defecto "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nombre de plantilla"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrar"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Sustituir "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Smbolos "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Plantillas registradas"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Plantillas"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Plantilla"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Error de formato en la plantilla."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Borrar plantilla"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Quiere borrar realmente esta plantilla?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Conversin de cdigos fallida.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "no se puede abrir el fichero de marcas\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "no se puede obtener el mensaje %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Fallo enviando mensaje %d de la cola.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "La orden de impresin es invlida: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Estado"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Creando dilogo de progreso...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "hubo un error mientras se obtenian datos.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "No se puede escribir al fichero.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: firma no verificada"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "No se encontr firma"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Firma vlida"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "Firma INVLIDA"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "No hay clave pblica para verificar la firma"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Error al verificar la firma"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Resultados diferentes para las firmas"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Error: Estado desconocido"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Firma vlida de \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Firma INVLIDA de \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "No encuentro ID de usuario para esta clave."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Firma hecha en %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Huella de clave: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Seleccione clave para `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Recogiendo info para `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Seleccione teclas"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID tecla"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Aadir clave"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Teclee otro usuario o ID-clave:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Cabecera corrupta en el mensaje en cola.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Conectando"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Conectando con el servidor SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Enviando HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autentificando"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Enviando mensaje..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Enviando EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Enviando MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Enviando"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Enviando RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Enviando DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Terminando..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Enviando mensaje (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Enviando mensaje"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Hubo un error enviando el mensaje."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Hubo un error enviando el mensaje:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Configurar buzn"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Primero establezca la localizacin de su buzn.\n"
+"Puede utilizar un buzn existente en formato MH\n"
+"si ya lo tiene.\n"
+"Si no est seguro, seleccione Aceptar."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Verificando firma"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s desde \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH no est disponible\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "respuesta SMTP errnea\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "hubo algn error en la sesin SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Creando ventana de fuente...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Fuente del mensaje"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Mostrando la fuente de %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Fuente"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 no est disponible\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 disponible\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 no est disponible\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 disponible\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Mtodo SSL no disponible\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Mtodo SSL desconocido *ERROR EN EL PROGRAMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Error creando el contexto SSL\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Conexin SSL fallida (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Conexin SSL usando %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certificado del servidor:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Asunto: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Generador: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Buscar en los mensajes"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "Coincidir con alguna de las siguientes"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "Coincidir con todas las siguientes"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Cuerpo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Seleccionar coincidentes"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Se lleg al principio de la lista, siguir desde el final?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Se termin la lista, comenzar desde el principio?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Respon_der a"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Respon_der a/A _todos"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Respon_der a/Al _remitente"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Respon_der a/A la _lista de correo"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Mover..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copiar..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Marcar"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Marcar/_Marcar"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Marcar/_Desmarcar"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Marcar/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Marcar/Marcar como _no ledo"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Marcar/Marcar como _ledo"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Marcar/Marca_r todos ledos"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/E_tiquetar de color"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Re_editar"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Aadir _remitente a la agenda"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Ver/_Fuente"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Ver/Todas las cabeceras"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Imprimir..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "x"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "N"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "No."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Creando vista de cabeceras...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Procesar marcas"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Queda alguna marca. Procesarla?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Revisando carpeta (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "No hay ms mensajes sin leer"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "No hay mensajes sin leer. Buscar desde el final?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "No hay mensajes sin leer."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "No hay mensajes sin leer. Ir a la carpeta siguiente?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Bscar de nuevo"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "No hay ms mensajes nuevos"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "No hay ms mensajes nuevos. Buscar desde el final?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "No hay mensajes nuevos."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "No hay ms mensajes nuevos. Ir a la carpeta siguiente?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "No hay ms mensajes marcados"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "No hay mensajes marcados. Buscar desde el final?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "No hay mensajes marcados."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "No hay mensajes marcados. Buscar desde el principio?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "No hay ms mensajes etiquetados"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "No hay mensajes etiquetados. Buscar desde el final?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "No hay mensajes etiquetados."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "No hay mensajes etiquetados. Buscar desde el principio?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Agrupando mensajes por asunto..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d borrados"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d movidos"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d copiado"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " elemento(s) seleccionados"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nuevos, %d no ledos, %d totales (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nuevos, %d no ledos, %d totales"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Ordenando cabeceras..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tExtrayendo cabeceras de los mensajes..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Resumiendo los mensajes..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Escribiendo cach resumen (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Sin fecha)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Mensaje %d est marcado\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Mensaje %d marcado como ledo\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Mensaje %d marcado como no ledo\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Mensaje %s/%d marcado para borrar\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Borrar mensaje(s)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Quiere realmente borrar el/los mensaje(s) de la papelera?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Borrando mensajes duplicados..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Mensaje %s/%d desmarcado\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Mensaje %d marcado para mover a %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "El destino es el mismo que la carpeta actual."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Mensaje %d marcado para copiar a %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "El destino de la copia es el mismo que la carpeta actual."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Seleccionando todos los mensajes..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Hubo algn error al procesar los mensajes."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Construyendo hilos..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Deshaciendo hilos..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Deshaciendo hilos para ejecucin..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrando..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrando..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "se ha(n) filtrado %d mensaje(s)."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "el fichero %s ya existe\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Creando vista de texto...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Este mensaje no puede visualizarse.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Para guardar esta parte, abra el menu contextual con el "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "botn derecho y seleccione `Guardar como...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"o pulse la tecla `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Para ver esta parte como un mensaje de texto, seleccione "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Ver como texto', o pulse la tecla `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Para abrir esta parte con un programa externo seleccione "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Abrir' o `Abrir con...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "o doble-click, o pulse el botn central, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "o pulse la tecla `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Esta firma an no ha sido verificada.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Para verificarla, abra el menu contextual con\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "el botn derecho y seleccione `Verificar firma'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"La URL real (%s) es distinta de la\n"
+"URL aparente (%s).\n"
+"Abrirla de todas maneras?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%db"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKb"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMb"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGb"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "fallo escribiendo en %s.\n"
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 00000000..4f1098ca
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,6692 @@
+# Estonian translation of sylpheed.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Peeter Vois <Peeter.Vois@mail.ee>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2002-10-02 09:08+0300\n"
+"Last-Translator: Peeter Vois <Peeter.Vois@mail.ee>\n"
+"Language-Team: Estonian <et@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Sellest"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME kopiaigused 2001 on Werner Koch'il <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"See programm on vaba tarkvara; te vite jagada ja/vi muuta seda vastavalt "
+"GNU General Public License-le, mis on publitseeritud Free Software "
+"Foundation poolt; versiooni 2, vi iga hilisema versiooni alusel.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"See programm on teile antud lootuses, et see on teile kasulik, kuid ILMA "
+"IGASUGUSE GARANTIITA; isegi ei garanteerita et see programm SOBIB "
+"KASUTAMISEKS. Vaata GNU General Public License detailide jaoks.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Teil peaks olema ka koopia GNU General Public License'st koos selle "
+"programmiga; kui ei, siis kirjuta: Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OLGU"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Loen kigi kontode seaded...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Silt %s on leitud\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Mned kirjutusaknad on avatud.\n"
+"Palun sulge kik kirjutusaknad enne kontode redigeerimist."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Avan kontode redigeerimisakna...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Loon kontode redigeerimisakna...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Kontode redigeerimine"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"*Uusi teateid vetakse selles jrjekorras. Mrgi kastikesed\n"
+"'G' tulbas lubamaks kirjade vtmist kasutades 'Vta kik'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nimi"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Lisa"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Redigeeri"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Kustuta "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Alla"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "les"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " M粐ra vaikimisi kontoks "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Sulge"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Kustuta konto"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Kas te testi soovite kustutada kontot?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Jah"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Ei"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Ei suutnud vtta kirjade faili."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Ei suutnud avada teate osa."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Ei saa mitmeosalise kirja osa ktte."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Mrgitud tegevust ei saa kasutada kirja kirjutamise aknas,\n"
+"sest see sisaldab %%f, %%F vi %%p-d."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Ksklust ei suudeta kivitada. Toru loomine ebannestus.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Ei suutnud hargneda, et kivitada jrgmist ksklust:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Kivitan: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Lpetatud: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Tegevuse sisend/vljund"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Saada "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Katkesta"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Sisesta trkkimise ksurida:\n"
+"(%s asendatakse failinimega)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Sisesta trkkimise ksurida:\n"
+"(%s asendatakse failinimega)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Lisa aadress raamatusse"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Aadress"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Mrkused"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Vali aadressiraamatu kaust"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Loobu"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Fail"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Fail/Uus raamat"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Fail/Uus _V-Kaart"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Fail/Uus _JPiloot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Fail/Uus _Server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Fail/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Fail/R_edigeeri"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Fail/Kustuta"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Fail/_Salvesta"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Fail/Sul_ge"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Aadress"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Aadress/Uus _Aadress"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Aadress/Uus _Grupp"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Aadress/Uus Kaust"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Aadress/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Aadress/R_edigeeri"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Aadress/Kustuta"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Triist"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Triist/Impordi _LDIF fail"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Abi"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Abi/Sellest"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Uus _Aadress"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Uus _Grupp"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Uus Kaust"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/R_edaktor"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/Kustuta"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-Posti aadress"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Aadressiraamat"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nimi:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Kustuta"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Otsi"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Kellele:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Koopia:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Pimekoopia:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Kustuta aadress(id)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Kas te testi soovite aadresse kustutada?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Ei"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Kas te soovite kustutada kataloogi `%s' JA kik aadressid ?\n"
+"Kui kustutate ainult kataloogi, siis aadressid kantakse pealmisse kausta."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Ainult kataloog"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Kaust ja aadressid"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Kas testi kustutada `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Uus kasutaja, ei saanud salvestada indeksifaili."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Uus kasutaja, ei saanud salvestada aadressiraamatu faile."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Vana aadressiraamat uuendati edukalt."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Vana aadressiraamat uuendati.\n"
+"ei saanud salvestada uut aadresside indeksifaili"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Ei saanud uuendada aadressiraamatut,\n"
+"kuid loodi uued ja thjad aadressiraamatu failid."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Ei suutnud uuendada aadressiraamatut,\n"
+"ei suutnud luua uusi aadressiraamatu faile."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Ei suutnud uuendada aadressiraamatut,\n"
+"ja ei suutnud luua uut aadressiraamatu faile."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Aadressiraamatu uuendamise viga"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Aadressiraamat viiakse uude formaati"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Aadressiraamatu viga"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Ei suutnud lugeda aadresside indeksit"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Uuendati vana aadressiraamat, kuid ei suudetud salvestada uut indeksifaili"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Ei suutnud uuendada aadressiraamatut, kuid loodi thjad ja uued "
+"aadressiraamatu failid."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Ei suutnud uuendada aadressiraamatut, ei suutnud luua uusi aadressiraamatu "
+"faile."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Ei suutnud uuendada aadressiraamatut ja ei suutnud luua uusi aadressiraamatu "
+"faile."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Aadressiraamatu uuendamise viga"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Aadressiraamatu uuendamine"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Kasutajaliides"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Aadressiraamat"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persoon"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "EPosti Aadress"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupp"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Kaust"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "V-Kaart"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPiloot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "ldine aadress"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Isiklik aadress"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Mrkus"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Hoiatus"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Viga"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "*Loon alert paneeli dialoogi...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Nita seda teadet jrgmisel korral"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Oran"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Punane"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Roosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Taevasinine"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Sinine"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Roheline"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Pruun"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Mittemiski"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/Lis_a..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/Eemalda"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/Omadus..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Fail/_Salvesta"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Kiri/Saada _hiljem"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Kiri/Salvesta _mustandi kausta"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Kiri/Salvesta ja jtka kirjutamist"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Fail/M_anusta fail"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Fail/L_isa fail"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Fail/Lisa allkiri"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/R_edigeeri/_Thista"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "R_edigeeri/_Ennista"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/R-edaktor/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/R_edaktor/_Lika"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/R_edaktor/_Kopeeri"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/R_edaktor/_Aseta"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/R_edaktor/Aseta kui tsitaat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/R_edaktor/_Mrgi kik"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/R_edigeeri/_Edendatud"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Redaktor/_Edendatud/Liigu the jagu tagasi"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Redaktor/_Edendatud/Liigu the jagu edasi"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Redaktor/_Edendatud/Liigu sna jagu tagasi"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Redaktor/_Edendatud/Liigu sna jagu edasi"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Redaktor/_Edendatud/Liigu rea algusesse"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Redaktor/_Edendatud/Liigu rea lppu"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Redaktor/_Edendatud/Liigu eelmisele reale"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Redaktor/_Edendatud/Liigu jrgmisele reale"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Redaktor/_Edendatud/Kustuta eelmine tht"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Redaktor/_Edendatud/Kustuta jrgmine tht"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Redaktor/_Edendatud/Kustuta eelmine sna"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Redaktor/_Edendatud/Kustuta jrgmine sna"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Redaktor/_Edendatud/Kustuta rida"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Redaktor/_Edendatud/Kustuta rea lpp"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/R_edaktor/_停rista aktiivne lik"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/R_edaktor/停_rista kik pikad read"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/R_edaktor/_Kopeeri"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Vaade"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Vaadde/_Kellele"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Vaade/Koopia"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Vaade/*_BCC"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Vaade/_Vasta"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_vaade/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Vaade/*Jrgneja"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Vaade/Joonla_ud"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Vaade/_Manus"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Triist/_Aadressiraamat"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Triist/_Mall"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Triist/Tegevused"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Triist/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/R_edaktor/Redi_geeri vlise redaktoriga"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Triist/Tegevused"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Kiri/Krpteeri"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "faili %s ei leidu\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Ei saa tekstiosa ktte\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "*Tsitaadimrgi formaadi viga."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Kirja vasta/edasta formaadi viga."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Faili %s ei leidu\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Ei saanud failile %s suurust\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Fail %s on thi."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "ei suuda lugeda %s-i"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Kiri: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ei saa mitmeosalise kirja osa ktte."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Redigeeritud]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Kirjuta kiri%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Kirjuta kiri%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Saaja pole m粐ratud."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Saada"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "P粐lkiri on thi. Kas saadame igal juhul?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "ei leia saajate nimistut."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Kirja saatmiseks pole m粐ratud kasutajtunnust.\n"
+"Palun vali kirja konto enne saatmist."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Tekkis viga kirja saatmisel %s-le."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Kirja ei nnestunud asetada vljunute kausta."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Ei suutnud leida htki vtit, mis oleks seotud valitud vtmega (id'%s')."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "Ei suuda muuta faili omadusi\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Ei suuda transleerida kirja tekstikoodi.\n"
+"Kas igatahes saata ?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "Ei suuda kirjutada pist\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "Ei suuda eemaldada vana kirja\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "Asetan kirja jrjekorda...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "jrjekorra kausta ei leidunud\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Ei suutnud kirja jrjekorda asetada\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Loodud Kirja-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Loon kirjutamise akent...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME tp"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Suurus"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Kellelt:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Saada kiri"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Hiljem"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Pane jrjekorda ja saada hiljem"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Mustand"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Salvesta mustandite kausta"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Lisa"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Lisa fail"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Manusta"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Manusta fail"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Allkiri"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Lisa allkiri"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Redaktor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Redigeeri vlise redaktoriga"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Rea粐r"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Murra kik pikad read"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Vale MIME tp."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Faili ei eksisteeri vi on see thi."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Omadus"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodeerimine"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Tee"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Failinimi"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Vlise redaktori ksurida on vale: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Vline redaktor ttab ikka veel.\n"
+"Kas hvitame protsessi?\n"
+"protsessi grupi id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Hvitatud protsessi grupi id: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Ajutine fail: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Kirjutaja: sisend monitoorprotsessilt\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Ei suutnud vlist redaktorit kivitada\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Ei suutnud faili salvestada\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Torust lugemine ebannestus\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Kirja ei nnestunud jrjekorda asetada."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "M粐ra fail"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Kaota kiri"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Seda kirja on muudetud. kas kaotame selle?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Kaota"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "Mustanditesse"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Kas te tahate seda malli lisada '%s'-e ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Lisa mall"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Asenda"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Redigeeri aadressi"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Lisa uus persoon"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Muuda persooni detaile"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "E-Posti aadress tuleb lisada."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Nimi ja V粐rtus tulevad lisada."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Muuda persooni andmeid"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Ekraani nimi"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Perekonnanimi"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Eesnii"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Hdnimi"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-Posti aadress"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Liiguta lesse"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Liiguta alla"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Muuda"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Kustuta"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "V粐rtus"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Baasandmed"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Kasutaja atribuudid"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Fail paistab olevad korras."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Failid ei paista olevat iges aadressiraamatu formaadis."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Ei suutnud lugeda faili."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Redigeeri aadressiraamatut"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Kontrolli faili "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fail"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Lisa uus aadressiraamat"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Grupi nimi peab olema antud."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Muuda grupi andmeid"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Grupi nimi"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Aadress grupis"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Olemasolevad aadressid"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Nihuta E-Posti aadressid gruppi vi grupist kasutades nooleklahve"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Muuda grupi detaile"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Lisa uus grupp"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Redigeeri kausta"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Sisesta uus nimi vi kaust:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Uus kaust"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Sisesta uue kausta nimi:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Fail ei paista olevat jPilot formaadis."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Vali JPilot Fail"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Redigeeri JPilot sissekannet"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Lisanduv E-Posti aadressi sissekanded"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Lisa uus JPilot'i sissekanne"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Edukalt hendatud serveriga"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Ei suutnud saada serveriga hendust"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Redigeeri LDAP serverit"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Arvuti nimi"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Kontrolli Serverit "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Otsingu baas"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Otsingu riteerium"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Resett "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Seo DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Seo parool"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Ajalimiit (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Sissekannete piirarv"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Baas"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Laiendatud"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Lisa uus LDAP server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Redigeeri LDAP - Vali otsingu baas"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Vimalikud otsingu baasid"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Ei suutnud lugeda otsingu baase serverist - palu m粐ra ksitsi"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Fail ei paista olevat vCard formaadis"
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Vali vCard Fail"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Redigeeri vCard sissekannet"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Lisa uus vCard sissekanne"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Vljasta"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "M粐ra sihtkaust ja kirjakasti (mbox) fail"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Lhte kataloog"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Vljastatav fail:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Vali... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Vali vljastatav fail"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "H粐lestuse salvestamine ebannestus\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Vali kaust"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Saabunud"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Saadetud"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Jrjekord"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Prgikast"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Mustandid"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Uus Kaust"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "Smbol `%c' ei saa olla lisatud kausta nimele."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Kaust %s on juba olemas."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Ei suuda luua kausta %s."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Loo uus kaust..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/Nimeta kaust mbe_r..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/Kustuta kaust"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Thjenda prgikast"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Vaata uusi kirju"
+
+#: src/folderview.c:224 src/folderview.c:242
+#, fuzzy
+msgid "/R_ebuild folder tree"
+msgstr "/_Uuenda kausta puu"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Otsi kirju..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Kirju mida pole loetud ei ole."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Telli uudi_stegrupp..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Eemalda uudisteg_rupp"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Loon kausta vaate...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Uus"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Pole loetud"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Sean kausta info...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Sean kausta info..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Tuhnin kaustas %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Tuhnin kaustas %s ..."
+
+#: src/folderview.c:707
+#, fuzzy
+msgid "Rebuild folder tree"
+msgstr "Uuenda kausta puu"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+#, fuzzy
+msgid "Rebuilding folder tree..."
+msgstr "Uuendan kasuta puu..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Uuendan kasuta puu..."
+
+#: src/folderview.c:741
+#, fuzzy
+msgid "Rebuilding all folder trees..."
+msgstr "Uuendan kigi kaustade puud..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Kigis kaustades otsitakse uusi kirju..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Valitud on kaust %s\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Saadan kirja"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Tekkis viga kirja saatmisel %s-le."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Sisest uue kausta nimi:\n"
+"(kui soovite luua kausta, millesse saaks teisi kaustu lisada,\n"
+" siis lisage / nime lppu)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Sisesta uus nimi %s-le:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Nimeta kaust mber"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Kustutatakse kik kaustad ja kirjad %s-s.\n"
+"Kas sa testi soovid kustutada?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Kustuta kaust"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Ei suuda kausta %s eemaldada."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Thjenda prgikast"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Kas eemaldada kik kirjad prgikastist?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Kas tepoolest eemaldada kirjakast %s?\n"
+"(Kirju ei kustutata kettalt)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Eemalda kirjakst"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Kas testi kustutada IMAP4 konto %s?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Kustuta IMAP4 konto"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Kas testi soovite kustutada uudistegruppi %s?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Kustuta uudistegrupp"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Kas testi kustutda uudistegrupp %s ?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Kustuta uudistegrupp"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Telli uudistegrupp"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Mrgi uudistegrupp kuhu registreeruda."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Leia grupid:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Otsi "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Uudistegrupi nimi"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Kirjad"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tp"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Uuenda"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "mdukas"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "ainult loetav"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "tundmatu"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Ei saanud uudistegrupi nimistut."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Tehtud."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "saadi %d uudistegruppi (%s loetud)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Uudistegrupid:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Pealkiri:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Loon pise vaadet...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Eikelleltki)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Pole pealkirja)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Loon pildi vaadet...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Ei suuda lugeda pilti."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 hendus %s:%d-ga katkes. Taashendan...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "loon IMAP4 hendust %s:%d-ga ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Ei suuda avada TLS sessiooni.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "ei suutnud seada kustutatu lippu: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "ei suuda vljastada\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "ei suutnud seada kustutatu lippu: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "ei suuuda valida kausta: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "*Mrgi faili ei leidunud.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "Nimistu saamisel tekkis viga.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Ei suuda luua '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Ei suuda luua '%s' Sisendkasti all\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "ei suuda luua kirjakasti: Nimistu ebannestus\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "ei suuda luua kirjakasti\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "ei suuda kirjakasti %s-lt mber nimetada %s-le\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "ei suuda kustutada kirjakasti\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "ei suuda vtta mbrikut\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "mbriku vtmisel tekis viga.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "ei suutnud avada mbrikut: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ei suuda hendada IMAP4 serveriga: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ei suuda hendada IMAP4 serveriga: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "ei suutnud leida nime asukohta\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "ei suuuda valida kausta: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Autoriseerimise meetod"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 sissekirjutus ebannestus.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "ei suuda %s-d lisada %s-i\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(saadan faili...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "ei suuda lisada kirja %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "ei suuda %d-d kopeerida %s-i\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "imapi ksu titmisel tekkis viga: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "imapi ksu titmisel tekkis viga: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "imapi ksu titmisel tekkis viga: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv ei suuda konversteerida UTF-7-t %s-ks\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv ei suuda konverteerida %s-i UTF-7-ks\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Impordi"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "*Mrgi vtav mbox fail ja sihtkaust."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Faili importimine:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Sihtkataloog:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Mrgi importiv fail"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Palun m粐ra aadressiraamatu nimi ja fail mida importida."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Mrgi ja nimeta LDIF vlja nimed mber, mida importida."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fail imporditud."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Palun valige fail."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Aadressiraamatu nimi peab olema antud."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Viga LDIF faili lugemisel."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF fail sisestati edukalt."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Vali LDIF fail"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Faili Nimi"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF Vli"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Atribuudi nimi"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribuudid"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Vali"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Aadressiraamat :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Faili nimi:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Salvestisi :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Impordi LDIF fail aadressiraamatusse"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Eelm"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Jrgmine"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Faili-info"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atribuudid"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Soome"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Vtan uusi kirju"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "*Juures"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Katkestatud"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Tirin"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Valmis (%d kirja (%s)-st vetud)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Valmis (uusi kirju pole)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "hendus ebannestus"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autoriseerimine ebannestus"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Lukustatud"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Ajalimiit (sek)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Lpetatud (%d uut kirja)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Lpetatud (uusi kirju pole)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Tekksiid mned vead kirjade vtmisel."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "vtan uued kirjad kontolt %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Uute kirjade vtmine"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "hendan POP3 serveriga: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Ei suuda henduda POP3 serveriga %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autoriseerin..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Vtan kirju %s-st ja panen %s-i...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Vtan uute kirjade arvu (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Vtan uute kirjade arvu (STAT)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Vtan uute kirjade arvu (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Vtan kirjade suuruse (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Kustutan kirja %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Vljun"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Vtan kirja (%d /%d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Valmis (%d kirja (%s)-st vetud)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "hendus ebannestus"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Tekkis viga kirja protsessimisel."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Tekkis viga kirja protsessimisel."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Ketas tis."
+
+#: src/inc.c:1097
+#, fuzzy
+msgid "Can't write file."
+msgstr "Ei saa kirjutada faili.\n"
+
+#: src/inc.c:1102
+#, fuzzy
+msgid "Socket error."
+msgstr "Soketi viga\n"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Kirjakast on lukus."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Kirjakast on lukus."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Autoriseerimise meetod"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Autoriseerimise meetod"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Sissekanne peatatud\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Vtame uued teated %s-ist %s-i.\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Sisesta parool %s-i jaoks %s-s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Sisesta parool"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protokolli sndmustik"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Fail %s on juba olemas.\n"
+"Ei saa kausta luua."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread ei ole glib poolt toetatud.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG pole installeeritud, vi on liialt vana.\n"
+"OpenPGP toetus keelustatud."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Kauta: %s [SEADED]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [aadress] ava kirjakirjutamise aken"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --manusta fail1 [fail2]...\n"
+" ava uue kirja aken nii, et mrgitud failid\n"
+" on manustatud kirjale"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive vta uued kirjad"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all vta uued kirjad kigilt konto"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --saada saada kik jrjekorras olevad kirjad"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --staatus nita kogu kirjade arvu"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --staatus nita kogu kirjade arvu"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug veaotsimise reiim"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help nita seda teadet ja vlju"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version nita versiooni informatsiooni ja vlju"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Kirjakirjutamine on pooleli. Testi lpetame?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "kirjad jrjekorras"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Mned saatmata kirjad on jrjekooras. Lpetame?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "ks teine Sylpheed juba ttab.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Fail/_Kaust"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Fail/_Kaust/_Loo uus kaust..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Fail/_Kaust/_Nimeta kaust mber"
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Fail/_Kaust/_Kustuta kaust"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Fail/_Lisa kirjakast..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Fail/_Lisa kirjakast..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Ee_malda kirjakst"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Fail/_Kaust"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Vaata uusi kirju"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Fail/_Vaata uusi kirju kigis kaustades"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Uuenda kausta puu"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Fail/_Impordi kirjakasti fail..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Fail/_Ekspordi kirjakasti faili..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Fail/_Thjenda prgikast"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Fail/_Salvesta kui..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Fail/_Trki..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Fail/L_isa fail"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Fail/_Vlju"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/R_edaktor/Mrgi _teema"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Redaktor/_Leia kesolevast kirjast..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Redaktor/_Otsi kirju..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Vaade/Nita vi varja"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Vaade/Nita vi varja/Kausta_puud"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Vaade/Nita vi varja/Kirja_vaadet"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Vaadde/Nita vi varja/_Nupuribal"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Vaade/Nita vi varja/_Nupuribal/Pilti _ja teksti"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Vaade/Nita vi varja/_Nupuribal/_Pilti"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Vaade/Nita vi varja/_Nupuribal/_Teksti"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Vaade/Nita vi varja/_Nupuribal/_Mitte midagi"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Vaade/Nita vi varja/Staatusri_ba"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Vaade/Eraldi kausta puu"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Vaade/Eraldi kirja vaade"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Vaade/_Sorteeri"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Vaade/_Sorteeri/_numbri jrgi"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Vaade/_Sorteeri/_suuruse jrgi"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Vaade/_Sorteeri/_kuupeva jrgi"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Vaade/_Sorteeri/_vormi jrgi"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Vaade/_Sorteeri/_suuruse jrgi"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Vaade/_Sorteeri/_pealkirja jrgi"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Vaade/_Sorteeri/v_rvi jrgi"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Vaade/_Sorteeri/_mrgi jrgi"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Vaade/_Sorteeri/m_itteloetute jrgi"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Vaade/_Sorteeri/kirja_lisade jrgi"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Vaade/_Sorteeri/ra sorteeri"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Vaade/_Sorteeri/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/Vaade/_Sorteeri/Kasvavas jrjekorras"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/Vaade/_Sorteeri/Kahanevas jrjekorras"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Vaade/_Sorteeri/*'_Attract' subjekti jrgi"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Vaade/Teema_vaade"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Vaade/Paisuta kik teemad"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Vaade/Sulge kik teemad"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Vaade/M粐_ra nidatavad parameetrid"
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Vaade/_Ava"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Vaade/_Ava/Eelmine kiri"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Vaade/_Ava/Jrgmine kiri"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Vaade/_Ava/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Vaade/_Ava/_Eelmine mitteloetud kiri"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Vaade/_Ava/_Jrgmine mitteloetud kiri"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Vaade/Mine/Eelmisele uuele kirjale"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Vaade/Mine/Jrgmisele uuele kirjale"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Vaade/_Ava/Eelmine _mrgitud kiri"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Vaade/_Ava/Jrgmine m_rgitud kiri"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Vaade/_Ava/Eelmine _sildiga kiri"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Vaade/_Ava/Jgmine s_ildiga kiri"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Vaade/_Ava/Teine kaust..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Vaade/_Kooditabel/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Vaade/_Kooditabel"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Vaade/_Kooditabel/M粐ra _Automaatselt"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Vaade/_Kooditabel/7bitine ascii (US-ASCII)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Vaade/_Kooditabel/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Vaade/_Kooditabel/L粐ne-Euroopa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Vaade/_Kooditabel/L粐ne-Euroopa (ISO-8859-_15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Vaade/_Kooditabel/Kesk-Euroopa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Vaade/_Kooditabel/_Balti (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Vaade/_Kooditabel/Balti (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Vaade/_Kooditabel/Greeka (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Vaade/_Kooditabel/Trgi (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Vaade/_Kooditabel/Kirillits (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Vaade/_Kooditabel/Kirillits (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Vaade/_Kooditabel/Kirillits (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Vaade/_Kooditabel/Kirillits (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Vaade/_Kooditabel/Jaapan (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Vaade/_Kooditabel/Jaapan (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Vaade/_Kooditabel/Jaapan (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Vaade/_Kooditabel/Jaapan (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Vaade/_Kooditabel/Lihtsustatud Hiina (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Vaade/_Kooditabel/Traditsionaalne Hiine (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Vaade/_Kooditabel/Traditsionaalne Hiina (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Vaade/_Kooditabel/Hiina (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Vaade/_Kooditabel/Korea (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Vaade/_Kooditabel/Korea (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Vaade/_Kooditabel/Tai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Vaade/_Kooditabel/Tai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/Vaade/Ava uues aknas"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Vaade/Nita kirja lhtekoodi"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Vaade/Nita ko_gu pist"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Vaade/_Uuenda koond"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Kiri"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Kiri/Kirjuta _mber"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Kiri/Vta _kigilt kontodelt"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Kiri/Vta _kigilt kontodelt"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Kiri/Katkesta kirjade vtmine"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Kiri/Kirjuta _mber"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Kiri/_Saada jrjekorras olevad kirjad"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Kiri/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Kiri/Uus k_iri"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Kiri/_Vasta"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Kiri/_Vasta"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Kiri/Vasta/k_igile"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Kiri/Vas_ta/_saatjale"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Kiri/Vasta/kirja _listi"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Kiri/Saada _edasi"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Kiri/Saada edasi _manusena"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Kiri/Suuna _mber"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Kiri/_Nihuta..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Kiri/K_opeeri..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Kiri/Kustuta"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Kiri/M_rk"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Kiri/M_rk/M_rgi"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Kiri/M_rk/_Eemaldan mrgi"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Kiri/M_rk/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Kiri/M_rk/Mrgin _mitteloetuks"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Kiri/M_rk/Mrgin _loetuks"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Kiri/M_rk/Mrgin _kik loetuks"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Kiri/Kirjuta _mber"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Triist/Lisa saatja aadressi raamatusse"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Triist/_Filtreeri kirjad"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Triist/_Filtreeri kirjad"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Triist/Loo filtri reeglistik"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Triist/Loo filtri reeglistik/Automaatselt"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Triist/Loo filtri reeglistik/ kasutades Kellelt"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Triist/Loo filtri reeglistik/kasutades Kellele"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Triist/Loo filtri reeglistik/ kasutades p粐lkirja"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Triist/_Kustuta topelt kirjad"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Triist/Kivita"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Triist/_Teadete aken"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_H粐lestus"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_H粐lestus/_ldised omadused..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_H粐lestus/_Filtri seaded..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_H粐lestus/_Mall..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_H粐lestus/Tegevused..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_H粐lestus/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_H粐lestus/_Hetkel kasutatava konto omadused..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_H粐lestus/_Loo uus konto..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_H粐lestus/_Redigeeri kontosid..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_H粐lestus/_Muuda kasutatavat kontot"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Abi/_Juhend"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Abi/_Juhend/_Inglise"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Abi/_Juhend/_Jaapani"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Abi/_KKK"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Abi/_KKK/_Inglise"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Abi/_KKK/_Saksa"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Abi/_KKK/_Hispaania"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Abi/_KKK/_Prantsuse"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Abi/_KKK/_Itaalia"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Abi/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Loon peamise akna...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "PeaAken: vrvi haldamine %d ebannestus\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "tehtud.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Tiitlita"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "mittemiski"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Muudan akna eraldamise tpi %d-lt %d-le\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Thjenda prgikast"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Kas eemaldada kik kirjad prgikastist?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Lisa kirjakast"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Sisesta kirjakasti asukoht.\n"
+"Kui m粐rate juba olemasoleva kirjakasti, siis seeskaneeritakse automaatselt."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Kirjakast %s on juba olemas."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Kirjakast"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Kirjakasti loomine ebannestus.\n"
+"Vibolla mned failid on olemas, vi teil pole igusi sinna kirjutamiseks."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - kausta vaade"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - kirja vaade"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/Vastan"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Vasta ja saada koopia kigile, kes said selle kirja"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Vasta/_saatjale"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Vasta/kirja_listi"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/Saadan edasi"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Saada edasi manusena"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Suuna mber"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Vta"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Vta uued kirjad"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Vta kik"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Vta kigilt kontodelt uued kirjad"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Saada kirjad jrjekorrast"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Kirjuta"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Kirjuta uus kiri"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Vasta"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Vasta kirjale"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Vasta ja"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Vasta ja saada koopia kigile, kes said selle kirja"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Edasta"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Saada kiri edasi"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Kustuta kiri"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Kivita"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Kivita mrgitud protsess"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Jrgmine kiri mida pole loetud"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Seaded"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "ldised omaduse"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Konto"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Konto seaded"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Vlju"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Lpetame programmi t."
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "ei suuda kirjutada ajutisse faili\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Vtan kirju %s-st ja panen %s-i...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Ei saa lugeda kirjakasti faili.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "sobimatu kirjakasti formaat: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "paha mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "ei saa avada ajutist fili\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Vabanematuid (kellelt) leitud:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "leiti %d kirju.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "ei saa luua lukufaili %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "kasuta 'flock'-i 'file' asemel kui vimalik.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "ei suuda luua %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "kirjakasti kasutab teine protsess, ootan...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "ei suuda lukustada %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "vale luku tp\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "ei saa lukku eemaldada %s-lt\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "kirjakasti ei saa ligata nulliks.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Ekspordime teated %s-ist %s-i ...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Avatud kirjast otsiine"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Otsi teksti:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Tstutundlik"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Otsi tagurpidi"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Otsi"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Otsimine ebannestus"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Otsitavat sna ei ole."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Judsin kirja algusesse; kas jtkan lpust alates?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Judsin kirja lppu; kas alustan algusest?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Otsimine lpetatud"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Loon kirja vaate...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Salvesta kui"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Kirjuta le"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Kirjutame olemasoleva faili le?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Ei suuda faili '%s' salvestada."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Trki"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Sisesta trkkimise ksurida:\n"
+"(%s asendatakse failinimega)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Trkkimise ksurida pole ige:\n"
+"%s"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "ei saa kirja kopeerida %s-st %s-i\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Ei suutnud avada mrgi faili.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "lhtekaust on identne sihtkaustale.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopeerin kirja %s%c%d kausta %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Viimane number kataloogis %s on %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/Ava"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Ava kasutades..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Nita tekstina"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Salveta kui..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Kontrolli allkirja"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Loon MIME vaate...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME Tp"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Manused"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Selekteeri \"Kontrolli signatuuri\" kontrollimiseks"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Ei saa salvestada seda osa mitmeosalisest kirjast."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Ava kasutades"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Faili avamiseks sisesta ksurida:\n"
+"(%s asendatakse failinimega)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME vaataja ksurida pole ige: %s"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "loon NNTP hendust %s:%d-ga ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP hendus %s:%d-ga on katkestatud. Taashendan...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "artikkel %d on juba hoidlas.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "vtan artikli %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "ei saanud artiklit %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "ei saanud uudistegrupi nimekirja\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "ei saanud saata artiklit.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "ei saanud artiklit %d kohale\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "ei saa valida gruppi %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "ebasobiv artiklite vahemik: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "uusi artikelid pole.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "*vtan xover-i %d - %d %s-is\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "*ei saa xover'it\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "*xover'i vtmisel tekkis viga\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "*vigane xover rida: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "*ei saa xhdr-i\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "xhdr-i vtmise kigus tekkis viga.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Ei saanud NNTP serveriga %s:%d hendust\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokolli viga: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokolli viga\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Kirja saatmisel tekkis viga\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Tekkis viga kirja protsessimisel."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Paroolifraas"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[pole kasutaja id-t]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s Palun sisestage parool:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Vale parool! Proovi uuesti...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Nutud APOP'i ajatemplit ei leidunud tervituses\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "*Tervituses on ajamrgi sntaksi viga\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protokolli viga\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "*vigane xover rida: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Kustutan aegunud kirja %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Jtan kirja (%d / %d baiti) vahele\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "kirjakast on lukus\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "ei suutnud kivitada TLS sessiooni\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "autoriseerimisel tekkis viga\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Ksklus"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "autoriseerimisel tekkis viga\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Loen h粐lestust...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Leiti %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "H粐lestuse lugemine lpetati.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "H粐lestus on salvestatud.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Rakenda"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Avan konto parameetrite akent...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Konto%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Uue konto omadused"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Konto omadused"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Loon konto omaduste akent...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Saabuvad kirjad"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privaatsus"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Spetsiaalne"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Selle konto nimi"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr " M粐ra vaikimisi kontoks "
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Isiku informatsioon"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Tisnimi"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-Posti aadress"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Ofganisatsioon"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Serveri informatsioon"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Uudised (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Lokaalarvutist"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "See servar nuab autoriseerimist"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Uudiste server"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Sissetulevate kirjade server"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Saatmise server (SMTP)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Kasutajanimi"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Parool"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "See servar nuab autoriseerimist"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Kustuta kirjad prast kohalejudmist serverist"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Eemalda prast"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "peva"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 peva: eemalda kohe)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Vta serverist kik kirjad"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Tmbamise suuruse limiit"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtreeri saabuvaid kirju"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Vaikimisi sisendkast"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Filtreerimata kirjad salvestatakse sellesse kausta)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Autoriseerimise meetod"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automaatne"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "Kui vajutate nuppu 'Vta kik', siis uusi kirju vetakse ka siia"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Pis"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Lisa kuupev pisesse"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Loo Kirja-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Lisa kasutaja defineeritud pis"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Redigeeri... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autoriseerimine"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP Autoriseerimine (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Kui te jtate need sissekanded thjaks, siis \n"
+"kasutatakse vastuvtva kasutaja ID-d ja parooli."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autoriseeri POP3 enne saatmist"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Ksklus"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Sti jrgmised aadressid automaatselt"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Vastus saata"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Vaikimisi tuleb kiri krpteerida"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Vaikimisi tuleb kiri allkirjastada"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Kasuta ASCII-ga varustatud krpteerimise formaati"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Kasuta seleget teksti allkirja"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Allkirja vti"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Kasuta algset GnuPG vtit"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Vali vti elektronposti aadressi juurest"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "M粐ra vti ksitsi"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Kasutaja vi vtme ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "ra kasuta SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Kasuta SSL-i POP3-e henduse jaoks"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Kasuta STARTTLS ksklust et alustada SSL sessiooni"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Kasuta SSL-i IMAP4-ja henduse jaoks"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Kasuta SSL-i NNTP henduse loomisel"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Saada (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Kasuta SSL-i SMTP henduse jaoks"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "M粐ra SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "M粐ra POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "M粐ra IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "M粐ra NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "M粐ra domeeni nimi"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP serveri kataloog"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Pane saadetud kirjad"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Pane mustandi kirjad"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Pane kustutatud kirjad"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Konto nime ei ole sisestatud."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Postiaadressi ei ole sisestatud."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP serverit ei ole sisestatud."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Kasutajanime ei ole sisestatud."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 serverit ei ole sisestatud."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 serverit ei ole sisestatud"
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP serverit ei ole sisestatud."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Ei ole soovitav kasutada vanastiilset ASCII-ga varustatud\n"
+"krpteerimise reziimi. See ei sobi RFC 3516 - MIME \n"
+"turvalisusega kasutades OpenPGP-d."
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Tegevuste konfiguratsiooni kirjutamine...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Men nimi:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Ksurida:"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Men nimi:\n"
+" Et teha alammensid, kasuta / mrki men nimes\n"
+"Ksurida:\n"
+" Algab mrgiga:\n"
+" | saata kirja sisu vi -mrgistus ksklusele\n"
+" > saata kasutaja antud tekst ksklusele\n"
+" * saata kasutaja antud varjatud tekst ksklusele\n"
+" Lppeb mrgiga:\n"
+" | asendada kirja sisu vi mrgistus ksu vljundiga\n"
+" & jooksutada ksklus asnkroonselt\n"
+" Kasuta %f -i kirja faili nimeks\n"
+" %F nimistu mrgitud kirja failinimedele\n"
+" %p mrgitud kirjaosa."
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "Asenda"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Sntaksi abi "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registreeritud tegevused"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Uus)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Men nime ei ole sisestatud."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Koolonit ':' ei ole lubatud kasutada men nimes."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Men nimi on liialt pikk."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Ksurida ei ole sisestatud."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Men nimi ja ksklus on liialt pikad."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Kskluses\n"
+"%s\n"
+"on sntaksiviga."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Kustuta tegevus"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Kas te testi soovite kustutada seda tegevust?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Loon ldiste omaduste akent...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "ldised omadused"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Tsitaat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Ekraan"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Kiri"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Muud asjad"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Vline programm"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Kasuta vlist programmi kirjade vtmiseks"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Ksklus"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokaalne kirja jada"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Vta kirjad lokaalsest kirja jadast"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtreeri kirju nende vtmisel"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Vta kirju"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "iga"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuti jrel"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Vta uued kirjad t alguses"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Uuenda kik lokaalsed kaustad peale kirjade vtmist"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Uudised"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maksimaalne vetavate artiklite arv\n"
+"(m粐ramata kui sisestate 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Kasuta saatmisel vlist programmi"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Pane saadetud kirjad kausta Saadetud"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Vljuva kirja kooditabel"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automaatne (Soovitatav)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7 bitine ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unikood (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "L粐ne-Euroopa (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "L粐ne-Euroopa (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Kesk Euroopa (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Balti (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Balti (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Kreeka (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Trgi (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Kirillits (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Kirillits (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Kirillits (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Kirillits (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Jaapani (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Jaapani (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Jaapani (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Lihtsustatud Hiina (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditsionaalne Hiina (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditsionaalne Hiina (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Hiina (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korea (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Kui on mrgitud 'Automaatne', siis kasutatakse praeguse\n"
+"lokaali jaoks optimaalset kodeeringut."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "停rista enne saatmist"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Allkirja eraldaja"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Lisa automaatselt"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Kivita vline redaktor automaatselt"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Meelespeetavaid muudatusi"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "停rista kirjaread"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "smboli laiuseks"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "停rista tsitaati"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Murra kik pikad read sisestamisel"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "停rista enne saatmist"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Vali vastuste jaoks konto automaatselt"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Kirjale vastamisel tsiteeri seda."
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Vasta nupp kivitab vastamise kirjalisti"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Vastuse formaat"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Tsitaadi mrk"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Edasta formaat"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Smbolite seletus "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Tekstistiil"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Tlgi pise nimed (niteks From: Subject: ...)"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Nita arvu, mitu kirja pole loetud, kausta nime jrel"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "lhenda uudistegruppe, mis on pikemad kui"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "thte"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Kirjaloendi vaade"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Nita kirja saajat 'Kellelt' tulbas, kui saatja olen mina ise"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Paisuta teemad"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Kuupeva formaat"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " M粐ra kirjaloendis nidatavad elemendid... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Kirja vrvimine lubatud"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Nita 2-baidiliste smbolitega teksti 1-baidiliste smbolitega"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Nita kirja pist lalpool kirja vaadet"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Nita piseid lhidalt"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Reavahe"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pinkti"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Jta vahe pisega"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Kerimine"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Pool lehte"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Sujuv kerimine"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Samm"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automaatselt kontrolli allkirju"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Nita allkirja kontrolli tulemusi ajutises aknas"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Silita parooli ajutiselt mlus"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Aegub prast"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuteid"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Kui seada '0'-ks, siis parool salvesatakse\n"
+"kogu sessiooniks)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "*Krahma sisendit senikaua kuni parooli sisestatakse"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Nita stardi ajal hoiatust kui GnuPG ei tta"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "Teate faili ei ole valitud."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Kausta sisenedes ava esimene lugemata kiri"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Kiri tuleb uues aknas avades mrkida kui loetu"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Ava Sisendkaust peale uute kirjade vastuvtmist"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Eemalda kohe peale liigutamist vi kustutamist"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Kirjad lihtsalt mrgitakse enne titmit\n"
+" kui see on vlja llitatud)"
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "Nita vastuvtmise dialoogi"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Nita vastuvtmise dialoogi"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Alati"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Mitte iial"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "ra tekita vea teadet vastuvtmise vea korral"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Sulge vastuvtmise dialoog kui lpetatud"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " M粐ra klahvi seosed... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Vlised ksklused (%s asendatakse faili / URI nimega)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Weebi sirvur"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Lisa aadress sihtlahtrisse kui topeltklpsutan"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Programmist vljumisel"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Kontrolli vljumist"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Thjenda prgikast"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Ksi enne thjendamist"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Hoiata mind, kui jrjekorras on kirju"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "ndalapeva esithed"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "tielik ndalapeva nimi"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "lhendatud kuu nimetus"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "tispikk kuu nimetus"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "eelistatud kuupev ja aeg kasutusel lokaali jaoks"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "sajandi number (aasta/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "Kuupev kmnendnumbrina"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "tund kmnendnumbrina kasutades 24-tunnilist kella"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "tund kmnendnumbrina kasutades 12-tunnilist kella"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "pev aastas kui kmnendnumber"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "kuu kui kmnendnumber"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minutid kmnendnumbrina"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "kas EL vi PL"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekundin kmnendnumbrina"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "ndalapev kmnendnumbrina"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "eelistatud kuupev"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "viimased kaks aasta numbrit"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "aasta kmnendnumbrina"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "ajatsoon vi nimi vi lhend"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "*M粐raja"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Seletus"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Nide"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Sti kirja vrvid"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Vrvid"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Tsiteeritud tekst - Aste 1"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Tsiteeritud tekst - Aste 2"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Tsiteeritud tekst - Aste 3"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI viide"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Tsitaadi vrvid ringelvad"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Vali astme 1 tsitaadile vrv"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Vali astme 2 tsitaadile vrv"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Vali astme 3 tsitaadile vrv"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Vali URI-le vrv"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Smbolite kirjeldus"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Kuupev\n"
+"Kellelt\n"
+"Saatja tisnimi\n"
+"Saatja eesnimi\n"
+"Saatja initsiaal\n"
+"Pealkiri\n"
+"Kellele\n"
+"Koopia\n"
+"Uudistegrupp\n"
+"Kirja-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Kui x on seatud, nitab vljendit"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Teate keha\n"
+"Tsiteeritud teate keha\n"
+"Teate keha allkirjata\n"
+"Tsiteeritud teate keha allkirjata\n"
+"Literaal %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Tht tagasinihe\n"
+"Tht ksimrk\n"
+"Tht avanev loogeline sulg\n"
+"Tht sulgev loogeline sulg"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Fondi valik"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Klahvi seosed"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Mrgi klahvide seoste eelseadistus.\n"
+"Te vite ka modifitseerida iga men kiirklahve vajutades\n"
+"suvalistele klahvidele asetades samal ajal hiire sellele."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Vaikimisi"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Vana Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Enda m粐ratud pise h粐lestus"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Enda m粐ratud pis"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Pise nimi ei ole sisestatud."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Kustuta pis"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Kas te testi tahate seda pist kustutada?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Loon pise nitamise h粐lestuse dialoogi...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Pise nitamine"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Pise nimi"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Nidatud pised"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Varjatud pised"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Nita kiki mrkimata piseid"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Loen pise nitamise h粐lestust...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Kirjutan pise nitamise h粐lestuse...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "See pis juba on nimekirjas."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filtri sttimine"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Kellele:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/Kopeeri..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Kustuta reegel"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Kas te testi soovite seda reeglit kustutada?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Kustuta reegel"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Kogu pis"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Pis"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Kiri"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "sisaldab"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "ei sisalda"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Liiguta alla"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/Kopeeri..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "ra vta vastu"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Kustuta kaust"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Mrkused"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Sti kirja vrvid"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/Mrk/Mrgi loetuks"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Saada edasi manusena"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Suuna mber"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Kivita"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Kaust"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Aadress"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Pis"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Pis"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Pis"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Saaja pole m粐ratud."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Ksurida ei ole sisestatud."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Sihtkaust pole m粐ratud."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Ksurida ei ole sisestatud."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "faili %s ei leidu\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Kausta omadus"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "ldine"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normaalne"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr ""
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:352
+#, fuzzy
+msgid "Reply-To:"
+msgstr "Vastus saata"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Mrk"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Manus"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Pealkiri"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Kellelt"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Kuupev"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Number"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Loon kirjaloendi tulba seade akna...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Kirjaloendi elementide stted"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Mrgi elemendid, mida nidata kirjaloendis. Te vite jrjekorda\n"
+"modifitserida kasutades [les] ja [Alla] nuppe."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Vimalikud elemendid"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Nidatud elemendid"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Vaikimisi tagasi "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Malli nimi"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registreeri"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr "Lisa"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Smbolid "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registreeritud mallid"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Vormid"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Vorm"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Malli formaadi viga."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Kustuta mall"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Kas te testi tahate seda vormi kustutada?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Koodi muundamine ebannestus.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "Ei suuda avada mrgifaili\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "ei suuda vtta kirja %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Jrjekorda seatud kirja %d saatmine ebannestus.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Trkkimise ksurida on vale: %s\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Staatus"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Loon progressi dialoogi...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "tekkis viga andmete vtmisel.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Ei saa kirjutada faili.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Allkirja pole kontrollitud"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Allkirja ei leidunud"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Hea allkiri"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "HALB allkiri"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Pole avalikku vtit allkirja kontrollimiseks"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Viga allkirja kontrollimisel"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Allkirja jaoks saadi erinevaid tulemeid."
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Viga: Tundmatu staatus"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "\"%s\"-lt on hea allkiri"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Halb allkiri \"%s\"-lt"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Ei suuda leida selle vtme jaoks kasutaja ID-d."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Allkiri %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Vtme srmejlg: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Palun valige vti %s-i jaoks"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Kogun nfot %s...%c-i jaoks"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Vali vtmed"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Vtme ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Lisa vti"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Sisesta teine kasutaja vi vtme ID:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Jrjekorda seatud kirja pis on katki.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "hendan"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "hendun SMTP serveriga: %s ..."
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "Saadan KIRJA...."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "Autoriseerimine"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Saadan kirja"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "Saadan KIRJA...."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Saadan KIRJA...."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Saadan"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Saadan RCPT..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Saadan andmed..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Vljun..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Saadan kirja (%d / %d baiti)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Saadan kirja"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Kirja saatmisel tekkis viga."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Kirja saatmisel tekkis viga."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Kirjakasti seaded"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Esmalt peate te m粐rama kirjakasti asukoha.\n"
+"Juhul kui teil on mni kirjakast MH formadis,\n"
+"siis te vite seda kasutada.\n"
+"Kui te pole aga kindel, sellisel juhul valige lihtsalt OLGU."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Allkirja kontroll"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s \"%s\"-lt"
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH pole saadav\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "autoriseerimisel tekkis viga\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Loon lhtekoodi akent...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Kirja lhtekood"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Nitan %s-i lhtekoodi ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Lhtekood"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 pole kttesaadav\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 on kttesaadav\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 pole saadav\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 on saadav\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL-i meetodit ei saa kasutada\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "ssl.c:94: Tundmatu SSL meetod *PROGRAMMI VIGA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Viga ssl konteksti loomisel\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "hendamine SSL-iga ebannestus (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL hendus kasutab %s-i\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Serveri srtifikaat:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Pealkiri: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Vljalaskja: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Otsi kirju"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Sti jrgmised aadressid automaatselt"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Sisu:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Mgi kik leitud"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Judsin nimistu algusesse; Kas jtkan lpust?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Judsin nimistu lppu; Kas jtkan algusest?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Vasta"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Vasta/_kigile"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Vasta/_saatjale"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Vasta/kirja_listi"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/Nihuta..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/Kopeeri..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/Mrk"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/Mrk/Mrgi"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/Mrk/Eemalda mrk"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/Mrk/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/Mrk/Mrgi kui mitteloetud"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/Mrk/Mrgi loetuks"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/Mrk/Mrgi kik loetuks"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Vrviline silt"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Kirjutan uuesti"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Lisa saatje aadressi raamatusse"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/Vaade/Lhtekood"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/Vaade/Kik pised"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "Trki..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Ei."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Loon kokkuvtte vaate...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Protsessi mrk"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Mned mrgid on j粐nud. Protsessime selle?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Tuhnin kaustas (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Pole rohkem kirju, mida pole loetud."
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Pole rohkem kirju, mida pole loetud. Otsime alates lpust?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Kirju mida pole loetud ei ole."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Ei leidunud kirju mida pole loetud. Otsime jrgmisest kaustast?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Otsi uuesti"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Pole rohkem kirju"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Pole rohkem uusi kirju. Otsime alates lpust?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Uusi kirju ei ole."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Uusi kirju ei leidu. Otsime jrgmisest kaustast?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Pole Rohkem mrgitud kirju"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Mrgitud kirju ei leidunud. Kas otsime lpust?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Mrgitud kirju ei ole."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Mrgitud kirju ei leidunud. Kas otsime algusest?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Rohkem sildiga kirju ei ole"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Rohkem sildiga kirju ei leitud. Kas otsime lpust?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Rohkem sildiga kirju ei ole."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Rohkem seildiga kirju ei leitud. Kas otsime algusest?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "*Vtan kirju p粐lkirja jrgi..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d on kustutatud"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d on lekantud"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d on kopeeritud"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " kirja mrgitud"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "uusi %d, mitteloetuid %d, kokku %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "uusi %d, mitteloetuid %d, kokku %d"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sorteerin kirjaloendi..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t stin kokkuvtte kirja andmetest..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Teen kokkuvtte teadete andmetest..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "*Kirjutan koondy puvrisse (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Kuupeva pole)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Kiri %d on mrgitud\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Kiri %d on mrgitud kui lbiloetu\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Kiri %d on mrgitud kui mitteloetu\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Kiri %s/%d on m粐ratud kustutamisele\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Kustuta kirjad"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Kas te testi soovite kirju eemaldada prgikastist?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Kustutan duplitseeritud kirju..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Kiri %s/%d pole mrgitud\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Kiri %d on m粐ratud lekandmiseks %s-i\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Sihtpunkt on sama mis aktiivne kaust."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Kiri %d on m粐ratud kopeerimisele %s-i\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Kopeerimise sihtpunkt on sama mis aktiivne kaust."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Mrgin kik kirjad..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Tekkis viga kirja protsessimisel."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Loon teemad..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Eemaldan teemad..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "*Kivitamiseks ilma teemadeta..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtreerin..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtreerin..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "kiri %d on juba salvestatud.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "fail %s on juba olemas\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Loon tekstivaate...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "kirja ei saanud\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Et seda osa salvestada, ava kontekstimen tehes "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "paremklpsu ja valides 'Salvesta kui...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"vi vajuta 'y' klahvi.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Et nidata seda osa kui tekstiteadet, vali "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"'Nita kui tekst', vi vajuta 't' klahvi.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Et avada seda osa vlise programmiga, vali "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "'Ava' vi 'Ava kasutades...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "vi topeltklps, vi kliki keskmist klahvi, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "vi vajuta 'l' klahvi."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Seda allkirja pole veel kontrollitud.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Et seda kontrollida, ava kontekstimen tehes\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "paremklps ja vali `kontrolli signatuur'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "%s-i kirjutamine ebannestus.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Ei suuda avada faili %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normaalne)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP autoriseerimine)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Ee_malda kirjakst"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Eemalda _IMAP4 konto"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "Eemalda uudiste konto"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Kiri/_Saada"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Kiri/Si_gn"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "Pole kirju lokaalses kirjakastis.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Kirja jada kataloog"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Vali... "
+
+#~ msgid "Condition"
+#~ msgstr "Tingimus"
+
+#~ msgid "Keyword"
+#~ msgstr "Sna"
+
+#~ msgid "Destination"
+#~ msgstr "Sihtkaust"
+
+#~ msgid "Use regex"
+#~ msgstr "Kasuta avaldisi"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registreeritud reeglid"
+
+#~ msgid "(none)"
+#~ msgstr "(mittemiski)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Ava URI ksklus on vale `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "*Puhvri andmed on katki\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Loo filtri reeglistik"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Loo filtri reeglistik/Automaatselt"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/Loo filtri reeglistik/ kasutades Kellelt"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/Loo filtri reeglistik/kasutades Kellele"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/Loo filtri reeglistik/ kasutades p粐lkirja"
+
+#~ msgid "Queueing"
+#~ msgstr "Lisan Jrjekorda"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Tekis viga kirja saatmisel.\n"
+#~ "Kas lisada see kiri jrjekorra kausta?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Pane kirjad, mida ei nnestunud saata, kausta Jrjekord"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/Kivita"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Mrgi kik"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Mrgi _teema"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "ei saanud seada gruppi: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "kirja ei saanud\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Kiri/Vta _uued kirjad"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tPole j粐dvustatud faili\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tLoen kirjaloendi j粐dvustust..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "J粐dvustatu versioon on erinev. Eemaldan selle.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "*Mrgi faili ei leidunud.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "*Mrgi versioon on erinev (%d != %d). Kaotan selle.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "*Ei suuda avada mrke faili lisamise moodis.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "*Ei suuda avada mrke faili kirjutamise moodis.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "ei saa luua lukufaili %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr "thi kaust\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Ainult siis kui aken on aktiivne"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Kaovad kik eelnevad kaustade seaded.\n"
+#~ "Kas jtkame?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "akna positsioon: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Stin vidinaid..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Liigutan kirja %s%c%d kausta %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tMrgin kirju..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d uut kirja\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "ei suuda mrkida kirjakasti %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "vtan kirja %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Kustutan j粐dvustatud teated %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Kustutan kuk j粐dvustatud teated... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Loendan kirjad kokku...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Ei suutnud vtta kirjade faili."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Kiri tuleb avada, kui kursoriklahve vajutatakse kokkuvttes"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Tekkis viga kirja protsessimisel."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Mned vead tekkisid jrjekorda seatud kirjade saatmisel."
+
+#~ msgid "No message part selected."
+#~ msgstr "Kirja osa pole mrgitud."
+
+#~ msgid "Predicate"
+#~ msgstr "vide"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Loon tegevuste sttimise akna...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Tegevuste seaded"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Loen tegevuste h粐lestust...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Tegevuse ksu viga\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Lpetame jrglase ja selle jrglase.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Jrglane: Ootan jrglase taga\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Jrglane: minu jrglane lpetas\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Hvitan jrglase, tema grupi id %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Vabastan jrglaste andmed %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Uuendan sndmusi sisend/vljund dialoogis.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Jrglane tagastas %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Saadame sisendi jrglase jrglasele.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Sisend saadetud jrglase jrglasele.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Vtan jrglase jrglase vljundit.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Soketi viga\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Kontot ei ole. Kasutan avatud kontot...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Ei leidnud kontot.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Ei saanud vlist ksklust kima: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH ebannestus\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "QUIT saatmisel tekkis viga\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Ei saa hendust SMTP serveriga: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL hendus ebannestus"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "hendades %s:%d-ga tekkis viga\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "HELO saatmisel tekkis viga\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "STARTTLS saatmisel tekkis viga\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "EHLO saatmisel tekkis viga\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Allkirja fail"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Loon enda m粐ratud pise sttimise akna...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Loen enda m粐ratud pise h粐lestust...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Kirjutan enda m粐ratud pise h粐lsetusse...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Loon filtri sttimise akna...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "Loen filtri konfiguratsiooni...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Kirjutan filtri konfiguratsiooni...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tOtsin muutmata kirju... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "Leidub %d j粐dvustamata kirja.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tSorteerin j粐dvustamata kirju numbrilises jrjekorras... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "sunnitud smbolistik: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Nita horisontaalset kerimisriba"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Nita kirju, mida pole veel loetud, paksu kirjaga"
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Fetchmail'i tkikesed on koopiaigustega 1997 Eric S. Raymond. Nondel "
+#~ "tkikestel on koopiaigused ka Carl Harrisel 1993 ja 1995. Koopiaigusi "
+#~ "silitatakse programmikoodi vaba levitamise eesmrgil.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc koopiaigused on Yasuhire Tonooka <tonooka@msi.co.jp> ja libkcc "
+#~ "koopiaigused on takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "Mlu sai otsa!\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Triist"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "Salvestan saadetud kirja...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "Ei suuda salvestada kirja\n"
+
+#~ msgid "Outbox"
+#~ msgstr "Saadetud"
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Kas testi kustutada kaust %s ?"
+
+#~ msgid "Done"
+#~ msgstr "Tehtud"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Loon teatenimistu akent...\n"
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Fail/_Uuenda kausta puu"
+
+#~ msgid "/_View/To_ggle summary view"
+#~ msgstr "/_Vaade/Kirjaloend sisse/vlja"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s on juba olemas."
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Kustutan hoidlast artiklid 1 - %d ... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tKustutan kik artiklid hoidlast... "
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Vaikimisi kasutatab allkirja vti"
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d laen malli %s-st\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d loen mallide kataloogi %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s:%d leiti fail %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s on tavaline fail\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d kirjutan malli \"%s\" %s-i\n"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): fail %s on juba olemas"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Kiri/_Kellele"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Kiri/K_oopia"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Kiri/_Pimekoopia"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Kiri/Lis_a"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Triist/Nita joonlauda"
+
+#~ msgid "Can't convert the codeset of the message."
+#~ msgstr "Ei suuda selle kirja kodeeringut muuta."
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "停rista kesolev lik"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/_Uuenda kausta puu"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Loon pise akent...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Nitan %s-i pist ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Kogu pis"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/R_edaktor/Ot_si kaustast"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/_Kiri/_Lisa saatja aadressiraamatusse"
+
+#~ msgid "/_Message/Open in new _window"
+#~ msgstr "/_Kiri/_Ava uues aknas"
+
+#~ msgid "/_Summary"
+#~ msgstr "/K_irjaloend"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/K_irjaloend/K_ivita"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/K_irjaloend/_Uuenda"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/K_irjaloend/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/K_irjaloend/_Ava"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/K_irjaloend/_Ava/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/K_irjaloend/_Sorteeri"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/K_irjaloend/_Sorteeri/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/K_irjaloend/_Teema vaade"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/K_irjaloend/_Jrjestikvaade"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Vline Weebi lehitseja (%s asendatakse URI-ga)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "trkkimine (%s asendatakse failinimega)"
+
+#~ msgid "Operator"
+#~ msgstr "Operaator"
+
+#~ msgid "Search folder"
+#~ msgstr "Kataloogist otsimine"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "Mine %s\n"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "Uudistegrupp %s on juba olemas."
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "Sisesta tellitav uudistegrupp:"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Alusta edastatud kirja:\n"
+#~ "\n"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "Uuendan kik kaustad..."
+
+#~ msgid "Usually used"
+#~ msgstr "Tavalisel kasutatud"
+
+#~ msgid "Program path"
+#~ msgstr "Programmi asukoht"
+
+#~ msgid "Quotation"
+#~ msgstr "Tsiteerimine"
+
+#~ msgid "Quotation format:"
+#~ msgstr "Tsitaadi formaat:"
+
+#~ msgid "Set display item"
+#~ msgstr "M粐ra nidatav element"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 00000000..a5a29b93
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,6137 @@
+# French translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+#
+# Paul Rolland <rol@as2917.net>, 2000.
+# Updated by : Sbastien Rodriguez <srodriguez@ifrance.com>
+# Updated by : Philippe trbich <philippe.trbich@free.fr>
+# Updated by : Lol Zimmerli <lol@headbanger.ch>
+# Updated 2002-01-07 by : Melvin Hadasht <melvin.hadasht@free.fr>
+# Updated 2002-04-20 by : Franois Barrire <barriere.francois@libertyrsurf.fr>
+# Updated by : P`tit Lu <ptitlu@ptitlu.org>
+# Nicolas Boos <nicolas.boos@wanadoo.fr>, 2003-2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-09 20:16+0100\n"
+"Last-Translator: Nicolas Boos <nicolas.boos@wanadoo.fr>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr " propos"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME est copyright 2001 par Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Ce programme est un logiciel libre, vous pouvez le redistribuer et/ou le "
+"modifier suivant les termes de la GNU General Public License publie par la "
+"Free Software Foundation, soit la version 2, soit ( votre convenance) une "
+"version ultrieure.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Ce programme est distribu en esprant qu'il sera utile, mais SANS AUCUNE "
+"GARANTIE. Consultez la GNU General Public License pour plus de dtails.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Vous devez avoir reu une copie de la GNU General Public License avec ce "
+"programme. Si ce n'est pas le cas, crivez la Free Software Foundation, "
+"Inc.,, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lecture de la configuration des comptes...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Label trouv : %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Des fentres de composition de message sont ouvertes.\n"
+"Veuillez fermer toutes les fentres de composition avant de configurer les "
+"comptes."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Ouverture de la fentre de configuration de compte...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Cration de la fentre de configuration de compte...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "dition des comptes"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Le courrier sera relev suivant l'ordre des comptes. Cocher la\n"
+"case dans la colonne G pour relever le courrier du compte \n"
+"correspondant lorsque Tout relever est activ"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nom"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocole"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Serveur"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Ajouter"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "diter"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Supprimer "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Plus bas"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Plus haut"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Dfinir comme compte par dfaut "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Fermer"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Supprimer le compte"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Voulez-vous vraiment supprimer ce compte ?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Oui"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Non"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Impossible d'obtenir le fichier %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Impossible d'obtenir la partie du message."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Impossible de lire une partie d'un message multipart."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"L'action slectionne ne peut tre utilise partir de la\n"
+"fentre de composition car elle contient %%f, %%F ou %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"La commande n'a pu tre lance. chec lors de la cration\n"
+"d'une connexion pipe : %s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"chec lors du fork pour lancer la commande :\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- En cours : %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Termin : %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Entres et sorties des actions"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "Envoyer"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Stopper"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Saisissez l'argument de l'action suivante :\n"
+"( %%h sera remplac par l'argument saisi)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Argument invisible de l'action"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Saisissez l'argument de l'action suivante :\n"
+"( %%u sera remplac par l'argument saisi)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Argument de l'action"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Ajouter l'adresse au carnet"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresse"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Remarques"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Choisissez un dossier"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Fichier"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Fichier/Nouveau _carnet d'adresses"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Fichier/Nouveau carnet _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Fichier/Nouveau carnet _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Fichier/Nouveau _serveur LDAP"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Fichier/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Fichier/dit_er"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Fichier/_Supprimer"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Fichier/En_registrer"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Fichier/_Fermer"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresse"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresse/Nouvelle _adresse"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresse/Nouveau _groupe"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresse/Nouveau _dossier"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresse/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresse/dit_er"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresse/_Supprimer"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Outils"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Outils/Importer un fichier _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/A_ide"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/A_ide/ _propos"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nouvelle _adresse"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nouveau _groupe"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nouveau _dossier"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_dition"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Supprimer"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Adresse lectronique"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Carnet d'adresses"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nom :"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Supprimer"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Rechercher"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr " :"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Copie :"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Copie discrte :"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Suppression d'adresse(s)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Voulez-vous supprimer la(les) adresse(s) slectionne(s) ?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Non"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Voulez-vous supprimer le dossier %s ET toutes les adresses qu'il "
+"contient ?\n"
+"Si vous supprimez uniquement le dossier, les adresses seront dplaces dans "
+"le dossier parent."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Dossier uniquement"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Dossier et adresses"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Voulez-vous vraiment supprimer %s ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nouvel utilisateur. Impossible d'enregistrer le fichier index."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr ""
+"Nouvel utilisateur, impossible d'enregistrer le fichier carnet d'adresses."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Ancien carnet d'adresses converti avec succs."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Ancien carnet d'adresses converti,\n"
+"mais impossible d'enregistrer le nouveau fichier index."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"chec lors de la conversion de l'ancien carnet d'adresses.\n"
+"Cration d'un nouveau carnet d'adresses vide."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"chec lors de la conversion du carnet d'adresses.\n"
+"Impossible de crer un nouveau carnet d'adresses vide."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"chec lors de la conversion du carnet d'adresses\n"
+"et lors de la cration d'un nouveau carnet d'adresses."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Erreur de conversion du carnet d'adresses"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Conversion de carnets d'adresses"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Erreur dans le carnet d'adresses"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "chec lors de la lecture de l'index des adresses"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Ancien carnet d'adresses converti, mais chec lors de l'criture du fichier "
+"index"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"chec lors de la conversion du carnet d'adresses. Cration d'un nouveau "
+"carnet d'adresses vide."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"chec lors de la conversion du carnet d'adresses et lors de la cration d'un "
+"nouveau carnet d'adresses vide."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"chec lors de la conversion du carnet d'adresses et lors de la cration d'un "
+"nouveau carnet d'adresses vide."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Erreur de conversion du carnet d'adresses"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Conversion de carnets d'adresses"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interface"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Carnet d'adresses"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Personne"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Adresse lectronique"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Groupe"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Dossier"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Serveur LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Adresse courante :"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Adresse personnelle :"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Information"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Avertissement"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Erreur"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Cration du dialogue d'alerte...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Afficher ce message la prochaine fois"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Orange"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rouge"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rose"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Bleu ciel"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Bleu"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Vert"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Brun"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Aucun"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Ajouter..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Enlever"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Proprits..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_Fichier/_Envoyer"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_Fichier/Envoyer _plus tard"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_Fichier/Enregistrer parmi les _brouillons"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_Fichier/Enregistrer et _poursuivre la composition"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Fichier/_Joindre un fichier"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Fichier/_Insrer un fichier"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Fichier/Insrer la si_gnature"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_dition/_Annuler"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_dition/_Refaire"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_dition/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_dition/Co_uper"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_dition/_Copier"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_dition/Co_ller"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_dition/Coller comme ci_tation"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_dition/Tout slectio_nner"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_dition/A_vance"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_dition/A_vance/Reculer d'un caractre"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_dition/A_vance/Avancer d'un caractre"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_dition/A_vance/Reculer d'un mot"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_dition/A_vance/Avancer d'un mot"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_dition/A_vance/Aller en dbut de ligne"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_dition/A_vance/Aller en fin de ligne"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_dition/A_vance/Aller la ligne prcdente"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_dition/A_vance/Aller la ligne suivante"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_dition/A_vance/Supprimer le caractre prcdent"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_dition/A_vance/Supprimer le caractre suivant"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_dition/A_vance/Supprimer le mot prcdent"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_dition/A_vance/Supprimer le mot suivant"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_dition/A_vance/Effacer la ligne"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_dition/A_vance/Supprimer jusqu' la fin de la ligne"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_dition/Justifier le _paragraphe actuel"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_dition/Justifier tout le _message"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_dition/Justification aut_omatique"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Affichage"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Affichage/"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Affichage/_Copie"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Affichage/Copie _discrte"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Affichage/_Rpondre "
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Affichage/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Affichage/_Faire suivre "
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Affichage/_Afficher une rgle"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Affichage/_Pice(s) jointe(s)"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Outils/_Carnet d'adresses"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Outils/_Modle"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Outils/_Actions"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Outils/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Outils/Modifier avec un diteur e_xterne"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Outils/_Signer"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Outils/_Chiffrer"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s : le fichier n'existe pas\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Impossible d'obtenir la partie texte\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Erreur du format de citation."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr ""
+"Erreur du format de citation d'un message lors d'une rponse ou d'un "
+"transfert."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Le fichier %s n'existe pas\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Impossible d'obtenir la taille de %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Le fichier %s est vide."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Impossible de lire %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Message : %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Impossible de lire une partie d'un message multipart."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [modifi]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Composition d'un message%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Composition d'un message%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Destinataire non spcifi."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Envoyer"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Le sujet est vide. Envoyer malgr cela ?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "liste de destinataires vide."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Aucun compte n'a t spcifi pour l'envoi.\n"
+"Veuillez slectionner un compte avant d'envoyer du courrier."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Une erreur est survenue lors de l'envoi du message %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Impossible d'enregistrer de message dans la bote de messages envoys"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Impossible de trouver une touche associe au code (de touche) %s ."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "impossible de modifier les droits d'accs du fichier\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Impossible de convertir le jeu de caractres du message\n"
+"de %s vers %s. Voulez-vous nanmoins l'envoyer ?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "impossible d'crire les en-ttes\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "Impossible d'enlever l'ancien message\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "Mise en file d'attente des messages...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "Impossible de trouver le dossier de file d'attente\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Impossible de mettre ce message dans la file d'attente\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Message-ID cr蜑 : %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Cration de la fentre de composition...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Type MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Taille"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "De :"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Envoyer le message"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Envoi diffr"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Mettre en file d'attente et envoyer plus tard"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Brouillon"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Enregistrer dans le dossier brouillon"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Insertion"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Insrer un fichier"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Joindre"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Joindre un fichier"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Signature"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Insrer la signature"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "diteur de texte"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "diter avec un diteur externe"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Justifier"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Justifier tout le message"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Type MIME invalide."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Le fichier n'existe pas ou est vide."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Proprits"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Encodage"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Chemin d'accs"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nom du fichier"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "La ligne de commande pour l'diteur externe est invalide : %s \n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"L'diteur externe est encore ouvert.\n"
+"Forcer sa fermeture ?\n"
+"id de traitement de groupe: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Id de traitement de groupe termin : %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Fichier temporaire : %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Compose : entre partir d'une surveillance de traitement\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Impossible de lancer l'diteur externe\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Impossible d'crire dans le fichier\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "chec de lecture de pipe\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Impossible de mettre ce message dans la file d'attente."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Choisissez un fichier"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Interruption de la composition du message"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr ""
+"Ce message a t modifi mais pas envoy. Voulez-vous interrompre la "
+"composition ?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Interrompre"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "vers brouillon"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Voulez-vous appliquer le modle %s ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Appliquer un modle"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Remplacer"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "dition d'une adresse"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Ajouter une personne"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "dition des coordonnes d'une personne"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "L'adresse lectronique est obligatoire."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Un nom et une valeur doivent tre donns."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "dition des coordonnes d'une personne"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nom affich"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Nom"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Prnom"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Surnom"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Adresse lectronique"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Plus haut"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Plus bas"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modifier"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Effacer"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valeur"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Gnral"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Donnes supplmentaires"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Le fichier semble correct."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Le fichier ne semble pas avoir le format du carnet d'adresses."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Impossible de lire le fichier."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "dition du carnet d'adresses"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Vrifier le fichier "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fichier"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Nouveau carnet d'adresses"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Donnez un nom de groupe."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "dition du groupe"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nom du groupe"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresses dans le groupe"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Adresses disponibles"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"Dplacer les adresses souhaites du/vers le groupe avec les boutons flchs"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "dition du groupe"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Nouveau groupe"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "dition du dossier"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Saisissez le nouveau nom du dossier :"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nouveau dossier"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Saisissez le nom du nouveau dossier :"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Le fichier ne semble pas avoir le format JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Choisir le fichier importer"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "dition de donnes JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Adresses lectroniques supplmentaires"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Ajouter une donne JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Connexion russie vers le serveur"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Impossible de se connecter au serveur"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "dition du serveur LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hte"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Test serveur "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Base de recherche"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Critres de recherche"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Remise zro "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "DN de connexion"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Mot de passe de connexion"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Dlai d'attente (secs)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Nombre maximal d'entres"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Gnral"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Avanc"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Nouveau serveur LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP - Slection de bases de recherches"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Base(s) disponible(s)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Impossible d'obtenir les bases du serveur - dfinir manuellement"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Le fichier ne semble pas avoir le format vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Slection d'un fichier vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "dition d'une entre vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Ajouter une entre vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exporter"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr ""
+"Veuillez indiquer le dossier exporter et le nom du nouveau fichier mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Dossier exporter :"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Fichier mbox :"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Choisir... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Slection du fichier export"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "chec d'criture de la configuration dans le fichier\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Choix d'un dossier"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Rception"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Envoy"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "File d'attente"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Corbeille"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Brouillons"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NouveauDossier"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr " %c n'est pas valide dans le nom du dossier."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Le dossier %s existe dj."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Impossible de crer le dossier %s ."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Crer un _nouveau dossier..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Renommer le dossier..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Supprimer le dossier"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/_Vider la corbeille"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Re_chercher les nouveaux messages"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Reconstruire l'_arborescence"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Rechercher dans le _dossier..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/T_lcharger"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Inscription aux groupes de discussion..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Supprimer le groupe de discussion"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Cration de la vue des dossiers...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nouveau"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Non lu"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Enregistrement des donnes des dossiers...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Initialisation des donnes des dossiers..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Analyse du dossier %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Analyse du dossier %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Reconstruire l'_arborescence"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "L'arborescence va tre reconstruite. Poursuivre ?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Reconstruction de l'arborescence..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "La reconstruction de l'arborescence a chou."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Reconstruction de l'arborescence complte..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Recherche des nouveaux messages..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Dossier %s slectionn\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Tlchargement des messages dans %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr ""
+"Une erreur est survenue lors du tlchargement des messages dans %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Saisissez le nom du nouveau dossier :\n"
+"(si vous voulez crer un dossier pouvant contenir d'autres dossiers,\n"
+" ajouter `/' la fin du nom)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Saisissez le nouveau nom pour %s :"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Changement de nom de dossier"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Tous les dossiers et messages sous %s vont tre supprims.\n"
+"Voulez-vous vraiment les supprimer ?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Suppression de dossier"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Impossible de supprimer le dossier %s ."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Vider la corbeille"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Supprimer tous les messages dans la corbeille ?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Ne plus utiliser la bote aux lettres %s (les\n"
+"messages existants ne seront PAS effacs du disque) ?"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Suppression d'une bote aux lettres"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Confirmez-vous la suppression du compte IMAP4 %s ?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Suppression du compte IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Confirmer la suppression du groupe de discussion %s ?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Suppression du groupe de discussion"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Confirmer la suppression du compte %s des groupes de discussion ?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Suppression du compte des groupes de discussion"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Inscription aux groupes de discussion"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Slectionner les groupes de discussions souhaits"
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Groupe(s) recherch(s) :"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Rechercher "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Groupe de discussion"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Messages"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Type"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Rafrachir"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "modr"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "lecture uniquement"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "inconnu"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Impossible d'obtenir la liste des groupes de discussion."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Termin."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d groupes de discussion reus (%s lu)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Groupe de discussion :"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Sujet :"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Cration de la vue des en-ttes...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Pas d'expditeur)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Pas de sujet)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Cration de la vue de l'image...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Impossible de charger l'image."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "La connexion IMAP4 vers %s a t interrompue. Reconnexion...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "cration de la connexion IMAP4 vers %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Impossible d'initier la session TLS.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "impossible de marquer pour la suppression : %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "impossible de purger\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "impossible de marquer pour la suppression : 1 : *\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "impossible de fermer le dossier\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "le dossier racine %s n'existe pas\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "Une erreur est survenue lors de la rception de LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Impossible de crer %s \n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Impossible de crer %s sous Rception \n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "Impossible de crer la bote aux lettres : LIST chou.\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "impossible de crer la bote aux lettres\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "impossible de renomer la bote aux lettres %s en %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "impossible de supprimer la bote aux lettres\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "Impossible de faire une enveloppe\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "erreur lors de la lecture de l'enveloppe.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "impossible d'analyser l'enveloppe : %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Impossible de se connecter au serveur IMAP4 : %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Impossible d'tablir une session IMAP4 avec : %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "Impossible d'obtenir l'espace nom\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "Impossible de slectionner le dossier : %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "L'authentification IMAP4 a chou.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "chec au login IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "Impossible de d'ajouter %s %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(envoi du fichier...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "impossible d'ajouter le message %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "impossible de copier %s vers %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "erreur avec la commande IMAP : STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "erreur lors de la commande IMAP : EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "erreur avec la commande IMAP : CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv ne peut convertir de UTF-7 vers %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv ne peut convertir de %s vers UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importer"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr ""
+"Veuillez indiquer le fichier mbox importer et le dossier destinataire"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Fichier mbox :"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Dossier destinataire :"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Choix du fichier importer"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+"Entrer le nom du nouveau carnet d'adresses et celui du fichier importer."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Slectionner et renommer les champs LDIF importer."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fichier import."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Veuillez slectionner une fichier."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Le nom du carnet d'adresses doit tre indiqu."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Erreur lors de la lecture des champs LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Fichier LDIF import avec succs."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Slection d'un fichier LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nom du fichier"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Champ LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Attribut"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Attribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Slectionner"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Carnet d'adresses :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nom de fichier :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Enregistrements :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importation d'un fichier LDIF dans un carnet d'adresses"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Prcdent"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Suivant"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Proprits du fichier"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Attributs"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Termin"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Rcupration des nouveaux messages"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Attente"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Annul"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Rcupration"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Termin - %d message(s) %s reu(s)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Termin - pas de nouveau(x) message(s)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "La connexion a chou"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "L'authentification a chou"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Verrouill"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Dlai d'attente"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Termin - %d nouveau(x) message(s)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Termin - pas de nouveau(x) message(s)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Erreur lors de la rcupration des messages."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "Rcupration des nouveaux messages du compte %s ...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s : Rcupration des nouveaux messages"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Connexion au serveur POP3 : %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Impossible de se connecter au serveur POP3 : %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Authentification..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Rception des messages de %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Rcupration du nombre de nouveaux messages (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Rcupration du nombre de nouveaux messages (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Rcupration du nombre de nouveaux messages (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Rcupration de la taille des messages"
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Suppression du message %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Fermeture"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Rcupration du message (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Rception - %d message(s) %s reu(s)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "La connexion a chou."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Une erreur est survenue pendant le traitement du message."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Une erreur est survenue pendant le traitement du message :\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Plus de place disponible sur le disque."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Impossible d'crire dans le fichier."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Erreur de protocole."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "La connexion a t ferme par le serveur."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Bote verrouille."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Bote verrouille :\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "L'authentification chou."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"L'authentification a chou :\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "Dpassement du dlai de rponse (timeout) de la session."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Relve du courrier annule\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Rcupration des nouveaux messages de %s dans %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Saisissez le mot de passe de %s pour %s :"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Saisissez le mot de passe"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Journal de connexion"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Le fichier %s existe dj.\n"
+"Impossible de crer le dossier."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread non support par glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG n'est pas install correctement.\n"
+"Support OpenPGP dsactiv."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Utilisation : %s [OPTION]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresse] ouvrir une fentre de composition de message"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fichier1 [fichier2]...\n"
+" ouvrir une fentre de composition avec comme pice"
+"(s)\n"
+" jointe(s) le(s) fichier(s) spcifi(s)"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive rcuprer les nouveaux messages"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr ""
+" --receive-all rcuprer les nouveaux messages de tous les comptes"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send envoyer les messages en attente"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [dossier]... afficher le nombre total de messages"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [dossier]...\n"
+" afficher l'tat de chaque dossier"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug afficher les informations de mise au point"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help afficher l'aide-mmoire"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version afficher les informations de version"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr ""
+"Une fentre de composition de message existe.\n"
+"Voulez-vous vraiment quitter ?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Messages en file d'attente"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr ""
+"Quelques messages non envoys sont dans la file d'attente. Quitter "
+"maintenant ?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "une autre session de Sylpheed existe.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Fichier/_Dossier"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Fichier/_Dossier/Crer un _nouveau dossier..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Fichier/_Dossier/_Renommer le dossier..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Fichier/_Dossier/_Supprimer le dossier"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/_Fichier/_Bote aux lettres"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Fichier/_Bote aux lettres/Ajouter une _bote aux lettres..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Fichier/_Bote aux lettres/_Supprimer la bote aux lettres"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/_Fichier/_Bote aux lettres/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Fichier/_Bote aux lettres/Re_chercher les nouveaux messages"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr ""
+"/_Fichier/_Bote aux lettres/Rechercher les nouveaux messages dans _toutes "
+"les botes"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Fichier/_Bote aux lettres/Reconstruire l'_arborescence"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Fichier/_Importer un fichier mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Fichier/_Exporter vers un fichier mbox..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/_Fichier/_Vider les corbeilles"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Fichier/Enregistrer _sous..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Fichier/Im_primer..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Fichier/_Travailler dconnect"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Fichier/_Quitter"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_dition/Slectionner l'en_filade"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_dition/Rechercher dans le _message..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_dition/Rechercher dans le _dossier..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Affichage/Affic_her ou masquer"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Affichage/Affic_her ou masquer/Fentre des _dossiers"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Affichage/Affic_her ou masquer/Fentre de _message"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Affichage/Affic_her ou masquer/Barre d'_outils"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Affichage/Affic_her ou masquer/Barre d'_outils/Icnes _et textes"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Affichage/Affic_her ou masquer/Barre d'_outils/_Icnes seulement"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Affichage/Affic_her ou masquer/Barre d'_outils/_Textes seulement"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr ""
+"/_Affichage/Affic_her ou masquer/Barre d'_outils/_Pas de barre d'outils"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Affichage/Affic_her ou masquer/_Barre d'tat"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Affichage/Sparer la fentre des _dossiers"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Affichage/Sparer la fentre des _messages"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Affichage/_Trier"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Affichage/_Trier/Trier par _numro"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Affichage/_Trier/Trier par _taille"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Affichage/_Trier/Trier par _date"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Affichage/_Trier/Trier par e_xpditeur"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Affichage/_Trier/Trier par d_estinataire"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Affichage/_Trier/Trier par _sujet"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Affichage/_Trier/Trier par _couleur"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Affichage/_Trier/Trier par _marque"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Affichage/_Trier/Trier par non _lu"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Affichage/_Trier/Trier par pice _jointe"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Affichage/_Trier/Ne _pas trier"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Affichage/_Trier/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Affichage/_Trier/_Ordre croissant"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Affichage/_Trier/O_rdre dcroissant"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Affichage/_Trier/_Attirer par sujet"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Affichage/Affichage par _fil de conversation"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Affichage/D_ployer les fils de conversation"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Affichage/_Compacter les fils de conversation"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Affichage/Slect_ion des lments affichs..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Affichage/_Aller "
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Affichage/_Aller /Message _prcdent"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Affichage/_Aller /Message suiva_nt"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Affichage/_Aller /---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Affichage/_Aller /Non l_u prcdent"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Affichage/_Aller /Non _lu suivant"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Affichage/_Aller /Message nouveau prcdent"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Affichage/_Aller /Message nouveau suivant"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Affichage/_Aller /M_arqu prcdent"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Affichage/_Aller /_Marqu suivant"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Affichage/_Aller /C_olor prcdent"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Affichage/_Aller /_Color suivant"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Affichage/_Aller /Autre _dossier..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Affichage/_Jeu de caractres/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Affichage/_Jeu de caractres"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Affichage/_Jeu de caractres/Dtection _automatique"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Affichage/_Jeu de caractres/ASCII 7 bits (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Affichage/_Jeu de caractres/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Affichage/_Jeu de caractres/Europe occidentale (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Affichage/_Jeu de caractres/Europe occidentale (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Affichage/_Jeu de caractres/Europe centrale (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Affichage/_Jeu de caractres/_Baltique (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Affichage/_Jeu de caractres/Europe du Nord (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Affichage/_Jeu de caractres/Grec (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Affichage/_Jeu de caractres/Turc (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Affichage/_Jeu de caractres/Cyrillique (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Affichage/_Jeu de caractres/Cyrillique (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Affichage/_Jeu de caractres/Cyrillique (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Affichage/_Jeu de caractres/Cyrillique (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Affichage/_Jeu de caractres/Japonais (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Affichage/_Jeu de caractres/Japonais (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Affichage/_Jeu de caractres/Japonais (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Affichage/_Jeu de caractres/Japonais (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Affichage/_Jeu de caractres/Chinois simplifi (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Affichage/_Jeu de caractres/Chinois traditionnel (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Affichage/_Jeu de caractres/Chinois traditionnel (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Affichage/_Jeu de caractres/Chinois (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Affichage/_Jeu de caractres/Coren (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Affichage/_Jeu de caractres/Coren (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Affichage/_Jeu de caractres/Tha (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Affichage/_Jeu de caractres/Tha (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Affichage/_Ouvrir dans une nouvelle fentre"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Affichage/_Voir le message complet"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Affichage/Afficher tous les e_n-ttes"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Affichage/Mettre jo_ur le rsum des messages"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Message"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/_Message/Rce_ptionner"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Message/Rce_ptionner/le courrier du _compte courant"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Message/Rce_ptionner/le courrier de _tous les comptes"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Message/Rce_ptionner/_Annuler la rception"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Message/Rce_ptionner/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Message/En_voyer les messages en file d'attente"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Message/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Message/Composer un _nouveau message"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Message/_Rpondre"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Message/Rp_ondre "
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Message/Rp_ondre /_tous"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Message/Rp_ondre /l'_expditeur"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Message/Rp_ondre /la _liste"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Message/_Transfrer"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Message/Transfrer en tant que pice _jointe"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Message/Rediri_ger"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Message/_Dplacer..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Message/_Copier..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Message/_Supprimer"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Message/_Marquer"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Message/_Marquer/_Marquer"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Message/_Marquer/_Dmarquer"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Message/_Marquer/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Message/_Marque/Marquer comme _non lu"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Message/_Marque/Marquer comme _lu"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Message/_Marque/Marquer _tous comme lu"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Message/R蜑dit_er"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Outils/Aj_outer l'expditeur dans le carnet d'adresses"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Outils/_Filtrer les messages du dossier"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Outils/Filtrer les messages _slectionns"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Outils/Crer une rgle de f_iltrage"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Outils/Crer une rgle de f_iltrage/automatiq_uement"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Outils/Crer une rgle de f_iltrage/base sur l'_expditeur"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Outils/Crer une rgle de f_iltrage/base sur le(s) _destinataire(s)"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Outils/Crer une rgle de f_iltrage/base sur le _sujet"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Message/Supprimer les messages en dou_ble"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Outils/E_xcuter"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/Ou_tils/_Journal de connexion"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configuration"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configuration/Prfrences _gnrales..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configuration/_Filtres..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Configuration/_Modles..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configuration/_Actions..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configuration/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configuration/_Configuration du compte courant..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configuration/Cration d'un _nouveau compte..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configuration/dition des compt_es..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configuration/Choi_sir un autre compte"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/A_ide/_Manuel"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/A_ide/_Manuel/_Anglais"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/A_ide/_Manuel/_Japonais"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)/_Anglais"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)/A_llemand"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)/_Espagnol"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)/_Franais"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/A_ide/_Foire Aux Questions (FAQ)/_Italien"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/A_ide/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Cration de la fentre principale...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Fentre principale : allocation de la couleur %d choue\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "termin.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Sans titre"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "aucun"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Changement du type de sparation de fentre de %d vers %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Dconnect"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Vous tes dconnect. Voulez-vous vous connecter ?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "Vider toutes les corbeilles"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "Supprimer tous les messages dans les corbeilles ?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Nouvelle bote aux lettres"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Saisissez le nom de la nouvelle bote aux lettres. Si elle\n"
+"existe dj, elle sera automatiquement analyse."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "La bote aux lettres %s existe dj."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Bote aux lettres"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"chec de la cration de bote.\n"
+"Il se peut que les fichiers existent dj, ou que vous n'ayez pas les droits "
+"en criture."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Dossiers"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Message"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Rpondre"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Rpondre _tous"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/Rpondre l'_expditeur"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/Rpondre la _liste"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Transfrer"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Transfrer en pice _jointe"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Rediri_ger"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Relever"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Relever le courrier du compte courant"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Tout relever"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Relever le courrier de tous les comptes"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Envoyer les messages en attente"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Composer"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Composer un nouveau message"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Rpondre"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Rpondre au message"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr " tous"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Rpondre tous"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Transfrer"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Transfrer le message"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Supprimer le message"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Excuter"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Excuter les commandes marques"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Message non lu suivant"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Prfrences"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Prfrences gnrales"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Compte"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Configuration du compte courant"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Vous tes dconnect. Cliquer sur l'icne pour vous connecter."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Vous tes connect. Cliquer sur l'icne pour vous dconnecter."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Quitter"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Quitter Sylpheed ?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "Impossible d'crire dans le fichier temporaire\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Rception des messages de %s dans %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Impossible de lire le fichier mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "Format mbox invalide : %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox mal forme : %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "Impossible d'ouvrir un fichier temporaire\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"From 'unescaped' trouv:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d messages trouvs.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "Impossible de crer le fichier verrou %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "Utilisation de 'flock' la place de 'file' si possible\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "Impossible de crer %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "mailbox utilise par un autre processus, attente...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "Impossible de verrouiller %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "Type de verrou invalide\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "Impossible de dverrouiller %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "Impossible de vider la bote aux lettres.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportation des messages de %s vers %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Recherche dans le message"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Texte recherch :"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Respecter la casse"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Recherche arrire"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Rechercher"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "La recherche a chou"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Texte recherch introuvable."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Dbut de message atteint, reprendre depuis la fin ?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Fin de message atteint, reprendre depuis le dbut ?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Recherche termine"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Cration de la vue message...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Enregistrer sous"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Remplacer"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Remplacer le fichier existant ?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Impossible d'enregistrer le fichier %s ."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Impression"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Saisissez la ligne commande pour imprimer :\n"
+"( %s sera remplac par le nom du fichier)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"La ligne de commande d'impression est invalide :\n"
+" %s "
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "Impossible de copier le message de %s %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Impossible d'ouvrir le fichier des marques.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "dossier source identique la destination.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copie du message %s%c%d vers %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Dernier numro dans le rpertoire %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Ouvrir"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Ouvrir _avec..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Afficher comme du _texte"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Enregistrer so_us..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Vrifier la signature"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Cration de la vue MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Type MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Texte"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Pices jointes"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Slectionner Vrifier la signature pour vrifier"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Impossible d'enregistrer une pice d'un message multipart"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Ouvrir avec"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Saisissez la ligne de commande pour ouvrir le fichier :\n"
+"( %s sera remplac par le nom du fichier)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "La ligne de commande du visualiseur MIME est invalide: %s "
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "Cration de la connexion NNTP vers %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "La connexion NNTP vers %s:%d a t coupe. Reconnexion...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "L'article %d a dj t cach.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "Rcupration de l'article %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "Impossible de lire l'article %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "Impossible d'obtenir la liste des groupes de discussion\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "Impossible de poster l'article.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "Impossible de rcuprer l'article %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "impossible de slectionner le groupe : %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "Intervalle d'articles invalide : %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "Pas d'article.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "Excution de xover %d - %d sur %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "Impossible de faire un xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "Une erreur a eu lieu pendant la lecture du xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "Ligne xover invalide : %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "Impossible d'obtenir xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "Erreur lors de la rception de xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Impossible de se connecter au serveur NNTP : %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "Erreur de protocole : %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "Erreur de protocole\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Erreur lors de l'envoi.\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Une erreur est survenue pendant l'envoi de la commande\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Phrase secrte"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[pas d'ID utilisateur]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sSaisissez la phrase secrte pour :\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Phrase secrte incorrecte. Autre tentative...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Le 'timestamp' APOP n'a pas t reu\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Erreur de syntaxe du 'timestamp' dans la bannire\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Erreur de protocole POP3\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "rponse UIDL invalide : %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Suppression du message expir %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Message ignor %d (%d octets)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "La bote aux lettres est verrouille\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "dpassement du dlai de rponse (timeout) de la session\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "chec lors de l'ouverture de la session TLS\n"
+
+#
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "Erreur lors de l'authorisation\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "commande non supporte\n"
+
+#
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "Une erreur est survenue pendant la session POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lecture de la configuration...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Trouv : %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Fin de lecture de la configuration.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "La configuration est enregistre.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Appliquer"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Ouverture de la fentre de configuration du compte...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Compte%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Configuration du nouveau compte"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Configuration du compte"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Cration de la fentre de configuration du compte...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Rception"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Confidentialit"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avance"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nom du compte"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Dfinir comme compte par dfaut"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informations personnelles"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nom complet"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Adresse lectronique"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organisation"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Configuration des serveurs"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Aucun (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ce serveur ncessite une authentification"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Serveur de groupes de discussion"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Serveur de rception"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Serveur SMTP (envoi)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Nom de l'utilisateur"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Mot de passe"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "Utiliser l'authentification scurise (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Suppression des messages du serveur aprs rception"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Supprimer aprs"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "jours"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 jours : supprimer immdiatement)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Rception de tous les messages sur le serveur"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Taille maximale pour la rception"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "Ko"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrage des messages la rception"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Bote de rception par dfaut"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Les messages non filtrs seront placs dans ce dossier)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Mthode d'authentification"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatique"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr " Tout relever relve le courrier pour ce compte"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "En-tte"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Ajouter un champ Date l'en-tte"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Gnration d'un Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Ajouter des en-ttes supplmentaires"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Modifier... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Authentification"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Authentification SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Laissez ces champs vides pour utiliser le nom d'utilisateur \n"
+"et le mot de passe spcifis pour la rception."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "S'authentifier sur le POP3 avant l'envoi"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Sortie"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Dfinition automatique des adresses suivantes"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Copie"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Copie discrte"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Rpondre "
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Chiffrer le message par dfaut"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Signer le message par dfaut"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Utiliser le format ASCII-arm pour le chiffrement"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Utiliser une signature non chiffre"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Cl de signature"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Utiliser la cl par dfaut de GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Slectionner la cl en fonction de l'adresse lectronique"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Indiquer manuellement la cl"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Utilisateur ou identificateur (ID) de cl :"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Ne pas utiliser SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Utiliser SSL pour les connexions POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Utiliser la commande STARTTLS pour commencer une session SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Utiliser SSL pour les connexions IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Utiliser SSL pour les connexions NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Envoi (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Utiliser SSL pour les connexions SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Utiliser SSL non-bloquant"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(dsactivez ceci si vous rencontrez des problmes de connexion SSL)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Indiquer le port SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Indiquer le port POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Indiquer le port IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Indiquer le port NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Indiquer le nom de domaine"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Rpertoire IMAP4"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Placer les messages envoys dans"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Placer les brouillons dans"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Placer les messages supprims dans"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Nom du compte non indiqu."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Adresse lectronique non saisie."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Serveur SMTP non indiqu."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Nom d'utilisateur manquant."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Serveur POP3 non indiqu."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Serveur IMAP4 non indiqu."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Serveur NNTP non indiqu."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Il est dconseill d'utiliser l'ancien mode ASCII-arm\n"
+"pour les messages chiffrs. Il n'est pas conforme avec\n"
+"la RFC 3156, intitule MIME Security with OpenPGP ."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Actions"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nom du menu :"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Commande :"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nom du menu :\n"
+" Utiliser / dans le nom pour crer des sous-menus.\n"
+"Commande :\n"
+" Commencer avec :\n"
+" | pour envoyer tout ou partie du texte du message la commande\n"
+" > pour envoyer un autre texte la commande\n"
+" * pour envoyer un autre texte cach la commande\n"
+" Terminer avec :\n"
+" | pour remplacer tout ou partie du texte du message par\n"
+" la sortie de la commande\n"
+" > pour insrer la sortie de la commande sans remplacer\n"
+" l'ancien texte du message\n"
+" & pour lancer la commande en arrire plan\n"
+" Utiliser :\n"
+" %f pour dsigner le fichier correspondant au message\n"
+" %F pour la liste des fichiers de tous les messages slectionns\n"
+" %p pour dsigner une partie MIME du message\n"
+" %u pour obtenir la saisie d'un argument\n"
+" %h pour obtenir la saisie invisible d'un argument\n"
+" %s pour utiliser la partie slectionne du message"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Remplacer "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Aide "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Actions enregistres"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nouveau)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Le nom du menu n'a pas t dfini."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Les deux-points : ne sont pas accepts dans le nom du menu."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Le nom du menu est trop long."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "La commande n'a pas t dfinie."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Le nom et la commande sont trop longs."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Erreur de syntaxe dans la commande :\n"
+"%s"
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Supprimer l'action"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Voulez-vous vraiment supprimer cette action ?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Cration de la fentre des prfrences gnrales...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Prfrences gnrales"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citation"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Affichage"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Message"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Autres"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Programme externe"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Utiliser un programme externe pour l'incorporation"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Commande"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Spool local"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorporation partir du spool"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrage l'incorporation"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Chemin du spool"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Relve automatique du courrier"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "chaque"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minute(s)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Relever le courrier au dmarrage"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Mettre jour tous les dossiers locaux aprs incorporation"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Articles de groupes de discussion"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Nombre maximum d'articles rcuprer\n"
+"(pas de limite si 0 est spcifi)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Utiliser un programme externe pour l'envoi"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Enregistrer les messages envoys dans la bote d'envoi"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Jeu de caractres pour l'envoi"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatique (recommand)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "ASCII 7 bits (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europe occidentale (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europe occidentale (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Europe centrale (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltique (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Europe du Nord (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grec (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turc (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillique (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillique (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillique (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrillique (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonais (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonais (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonais (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Chinois simplifi (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Chinois traditionnel (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Chinois traditionnel (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chinois (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Coren (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tha (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tha (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Si Automatique est slectionn, le jeu de caractres optimal pour le\n"
+"language utilis sera choisi automatiquement."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Algo. de transmission"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Prcise le champ Content-Transfer-Encoding utilis quand\n"
+"le corps du message contient des caractres non ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Sparateur de signature"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Insrer automatiquement"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Lancer automatiquement l'diteur externe"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Nombre maximal d'annulations"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Justifier les messages "
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caractres"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Justifier la citation"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Justification automatique"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Justifier avant d'envoyer"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Slection automatique du compte lors d'une rponse"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citer le message en rpondant"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Le bouton rpondre agit pour la liste de diffusion"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Citation lors d'une rponse"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Caractre de citation"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Citation lors d'un transfert"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Description des symboles "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Police"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traduire le nom des en-ttes From: , Subject: , etc."
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Afficher le nombre de messages non lus prs du nom de dossier"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Abrger les noms des groupes de discussion de plus de"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "lettres"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Rsum des messages"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr ""
+"Afficher le destinataire dans la colonne Expditeur si vous tes "
+"l'expditeur du message"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Dployer les fils de conversation"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Format de la date"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " lments affichs dans le rsum... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Coloration des messages"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Afficher l'alphabet et les nombres multi-octets\n"
+"comme des caractres ASCII (Japonais seulement)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Afficher un panneau d'en-ttes au dessus du message"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Afficher des en-ttes courts dans la fentre des messages"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Espacement des lignes"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Petite marge"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Dfilement"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Demi-page"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Dfilement continu"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "par pas de"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "Adapter les images aux dimensions de la fentre des messages"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Vrifier automatiquement les signatures"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Afficher le rsultat de la vrification dans une fentre"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Mmoriser temporairement la phrase secrte"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Expiration aprs"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minute(s) "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Mettre 0 pour mmoriser la phrase secrte\n"
+" pendant toute la dure de la session)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Monopoliser le clavier pendant la saisie de la phrase secrte"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Afficher un avertissement si GnuPG ne fonctionne pas"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Ouvrir automatiquement les messages slectionns dans le rsum"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Ouvrir le premier message non lu en ouvrant un dossier"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+"Marquer un message comme lu uniquement si ouvert dans une nouvelle fentre"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Aller dans la bote de rception lors de l'arrive de nouveau courrier"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Excuter immdiatement la suppression ou le dplacement de messages"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr "(sinon, les messages resteront marqus jusqu' excution)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Message de rception"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Afficher une fentre lors de la rception :"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr " toujours"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Seulement lors d'une relve manuelle du courrier"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr " jamais"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Ne pas afficher de fentre d'erreur lors d'une erreur de rception"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Fermer la fentre de rception la fin"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Choisir les raccourcis clavier... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Commandes externes (%s sera remplac par le nom du fichier/URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Navigateur web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Un double-clic sur une adresse l'ajoute la liste des destinataires"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "En quittant"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Confirmer en quittant"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Vider la corbeille en quittant"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Demander avant de vider"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Avertir s'il y a des messages envoyer en file d'attente"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Dpassement du dlai de rponse (timeout) des E/S du socket :"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "seconde(s)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "nom du jour de la semaine (abrg)"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "nom du jour de la semaine"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "nom du mois (abrg)"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "nom du mois"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "le format par dfaut de la date et de l'heure"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "le 'sicle' (anne/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "le jour du mois"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "l'heure en tant que nombre (0-23)"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "l'heure en tant que nombre (1-12)"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "le jour de l'anne en tant que nombre"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "le mois en tant que nombre"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "les minutes en tant que nombre"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM (matin) ou PM (aprs-midi)"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "les secondes en tant que nombre"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "le jour de la semaine en tant que nombre"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "le format par dfaut de la date"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "les deux derniers chiffres de l'anne"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "l'anne"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "le fuseau horaire, son nom ou abrviation"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Code"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Description"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Exemple"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Paramtrer les couleurs de message"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Couleurs"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Texte cit - 1er niveau"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Texte cit - 2e niveau"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Texte cit - 3e niveau"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Lien URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Rutiliser les couleurs"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Choix de la couleur de la citation niveau 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Choix de la couleur de la citation niveau 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Choix de la couleur de la citation niveau 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Choix de la couleur pour les liens URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Description des symboles"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Date\n"
+"De\n"
+"Nom complet de l'expditeur\n"
+"Prnom de l'expditeur\n"
+"Initiales de l'expditeur\n"
+"Sujet\n"
+"\n"
+"Copie\n"
+"Groupes de discussions\n"
+"Message-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Si x est dfini, afficher expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Corps du message\n"
+"Corps du message en tant que citation\n"
+"Corps du message sans signature\n"
+"Corps du message sans signature en tant que citation\n"
+"Caractre pourcent % "
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Caractre \\ \n"
+"Caractre ? \n"
+"Caractre { \n"
+"Caractre } "
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Slection de la police"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Raccourcis clavier"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Slectionnez une configuration de raccourcis clavier.\n"
+"\n"
+"Vous pouvez aussi modifier le raccourci de chaque menu\n"
+"en le pointant avec la souris et en pressant une\n"
+"combinaison de touches."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Par dfaut"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Ancien Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "dition des en-ttes supplmentaires"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "En-tte supplmentaires"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Le nom de l'en-tte n'est pas dfini."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Supprimer l'en-tte"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Voulez-vous vraiment dtruire cet en-tte ?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Cration de la fentre configuration en-ttes supplmentaires...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Options d'affichage des en-ttes"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "En-tte"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "En-ttes affichs"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "En-ttes cachs"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Afficher tous les en-ttes non spcifis"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lecture de la configuration de l'affichage des en-ttes...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Ecriture de la configuration de l'affichage des en-ttes...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Cet en-tte est dj dans la liste."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Rgles de filtrage"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "Activ"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "En haut"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "En bas"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Copier"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Supprimer une rgle"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Voulez-vous vraiment supprimer cette rgle ?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Rgle de filtrage"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Si au moins une des conditions suivantes est remplie"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Si toutes les conditions suivantes sont remplies"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Effectuer les actions suivantes :"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "To ou Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Tout en-tte"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "diter l'en-tte..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Corps du message"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Rsultat de la commande"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "Age"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "contient"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "ne contient pas"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "est"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "n'est pas"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "vrifie l'expression rgulire"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "ne vrifie pas l'expression rgulire"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "est plus grand que"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "est plus petit que"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "est plus long que"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "est plus court que"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Dplacer vers"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Copier vers"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ne pas recevoir"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Effacer du serveur"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "Marquer"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Colorer"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Marquer comme lu"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Transfrer en pice jointe"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Rediriger"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Excuter la commande"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Arrter l'valuation de la rgle"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "dossier :"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "adresse :"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "diter la liste des en-ttes"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "En-ttes"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "En-tte :"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "Le nom de la rgle n'est pas spcifi."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "La commande n'a pas t dfinie."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Une condition invalide est prsente."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "Le dossier cible n'a pas t dfini."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Une action invalide est prsente."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "La condition n'existe pas."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "L'action n'existe pas."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Proprits du dossier"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Gnral"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Ne pas afficher [...] ou (...) au dbut du sujet dans le rsum"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Supprimer [...] ou (...) au dbut du sujet lors d'une rponse"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Appliquer aux sous-dossiers"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "utiliser galement pour les rponses"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Rpondre :"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Marque"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Pices jointes"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Sujet"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Expditeur"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Date"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Numro"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Cration de la fentre de slection des lments du rsum...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "lments affichs dans le rsum"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Slectionnez les lments afficher dans le rsum. Pour\n"
+"modifier leur disposition, fates les glisser l'aide de la souris\n"
+"ou utilisez les boutons Plus haut et Plus bas ."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "lments disponibles"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "lments affichs"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Revenir aux valeurs par dfaut "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nom du modle"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Enregistrer"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Remplacer "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symboles "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Modles enregistrs"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Modles"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Modle"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Erreur de format dans le modle."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Supprimer le modle"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Voulez-vous vraiment dtruire ce modle ?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): la conversion de code a chou.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "Impossible d'ouvrir le fichier des marques\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "impossible de rcuprer le message %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "L'envoi du message %d de la file d'attente a chou.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "La ligne de commande d'impression est invalide : %s \n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "tat"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Cration du dialogue d'avancement...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "Une erreur est survenue pendant la rcupration des donnes.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Impossible d'crire dans le fichier.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops : signature non vrifie"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Pas de signature trouve"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Signature correcte"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "MAUVAISE signature"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Pas de cl publique pour vrifier la signature"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Erreur lors de la vrification de la signature"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Rsultats diffrents pour les signatures"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Erreur : statut inconnu"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Signature correcte de \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Mauvaise signature de \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Pas d'ID utilisateur pour cette cl"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " alias \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Date de la signature : %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Empreinte de la cl : %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Veuillez choisir la cl pour %s "
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Rcupration d'infos pour %s ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Slection de cls"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID de la cl"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Validit"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Ajouter une cl"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Saisissez le nom d'un autre utilisateur ou l'ID de la cl :"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "L'en-tte du message en attente est corrompu.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Connexion"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Connection au serveur SMTP : %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Envoi de HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Authentification"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Envoi du message..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Envoi de EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Envoi de MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Envoi"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Envoi de RCPT TO"
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Envoi de DATA"
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Fermeture..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Envoi du message (%d / %d octets)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Envoi de message"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Une erreur est survenue pendant l'envoi de message."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Une erreur est survenue pendant l'envoi du message :\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Paramtres de la bote aux lettres"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"D'abord, vous devez spcifier l'emplacement de la bote.\n"
+"Vous pouvez utiliser une bote existante au format MH, si vous en avez une.\n"
+"Si vous n'tes pas sr, cliquez sur OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "/_Vrification de la signature"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s de \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH pas disponible\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "mauvaise rponse SMTP\n"
+
+#
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "Une erreur est survenue pendant la session SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Cration de la fentre source...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Source du message"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Afficher le source de %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Source"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 absent\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 disponible\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 absent\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 disponible\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Mthode SSL non disponible\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Mthode SSL inconnue *BUG DU PROGRAMME*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Erreur lors de la cration du contexte SSL\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "chec de la connexion SSL (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Connexion SSL utilisant %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Serveur de certificat :\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Sujet : %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Dlivr par : %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Recherche dans le dossier"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "Si au moins une des conditions suivantes est remplie"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "Si toutes les conditions suivantes sont remplies"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Message :"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Slectionner"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Dbut de liste atteinte, reprendre depuis la fin ?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Fin de liste atteinte, reprendre au dbut ?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Rp_ondre "
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Rp_ondre /_tous"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Rp_ondre /l'_expditeur"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Rp_ondre /la _liste"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Dplacer..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copier..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Marquer"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Marquer/_Marquer"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Marquer/_Dmarquer"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Marquer/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Marquer/Marquer comme _non lu"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Marquer/Marquer comme _lu"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Marquer/Marquer _tous comme lus"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Co_lorer"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/R蜑dit_er"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/_Ajouter l'expditeur dans le carnet d'adresses"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Affichage/_Voir le message complet"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Affichage/Afficher tous les e_n-ttes"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Im_primer..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "N"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Cration de la vue de l'index...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Traitement des messages marqus"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Il reste des messages marqus, voulez-vous les traiter ?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Analyse du dossier (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Plus de messages non lus"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Plus de message non lu. Rechercher depuis la fin ?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Plus de messages non lus"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Pas de message non lu. Passer au dossier suivant ?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Chercher encore"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Plus de nouveaux messages"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Plus de nouveaux messages. Rechercher depuis la fin ?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Pas de nouveaux messages."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Plus de nouveaux messages. Aller au dossier suivant ?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Plus de messages marqus"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Plus de messages marqus. Rechercher depuis la fin ?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Pas de message marqu."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Plus de messages marqus. Rechercher depuis le dbut ?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Plus de messages marqus"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Plus de messages marqus. Rechercher depuis la fin ?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Plus de messages marqus."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Plus de messages marqus. Rechercher depuis le dbut ?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Tri des messages par sujet..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d effac"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d dplac"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d copi"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " lment(s) slectionn(s)"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nouveau(x), %d non lu(s), %d au total (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nouveau(x), %d non lu(s), %d au total"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Tri de l'index..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tDfinition de l'index partir des donnes du message..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Dfinition de l'index partir des donnes du message..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "criture du cache index (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(aucune date)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Le message %d est marqu\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Le message %d est marqu comme lu\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Le message %d est marqu comme non lu\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Le message %s/%d sera effac\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Suppression de message(s)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr ""
+"Voulez-vous vraiment supprimer dfinitivement ce(s) message(s) de la "
+"corbeille ?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Suppression des messages en double..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Le message %s/%d est dmarqu\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Le message %d est marqu pour dplacement dans %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "La destination est identique au dossier actuel."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Le message %d est copier vers %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "La destination et la source de la copie sont identiques."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Slection de tous les messages..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Une erreur est survenue pendant le traitement des messages."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Construction des threads..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Suppression des threads..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Suppression des threads pour excution..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "tri en cours..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Tri en cours..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d message(s) ont t filtr(s)."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "le fichier %s existe dj\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Cration de la vue texte...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Impossible d'afficher ce message.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Pour enregistrer cette pice, activer le menu contextuel avec "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "un clic droit et slectionner Enregistrer sous... , "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ou appuyer sur la touche y .\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Pour afficher cette pice comme du texte, slectionner "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+" Afficher comme du texte , ou appuyer sur la touche t .\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Pour ouvrir cette pice avec un programme externe, choisir "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr " Ouvrir ou Ouvrir avec... , "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ou double-cliquer, ou cliquer avec le bouton du milieu, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ou encore appuyer sur la touche l ."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Cette signature n'a pas encore t vrifie.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Pour la vrifier, ouvrir le menu contextuel avec\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "un clic droit et slectionner Vrifier la signature .\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"Le vritable URL (%s) est diffrent de\n"
+"l'URL affich (%s).\n"
+"Voulez-vous nanmoins l'ouvrir ?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%d o"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1f Ko"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2f Mo"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2f Go"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "L'criture dans %s a chou.\n"
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 00000000..6793ec4f
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,6463 @@
+# Galician translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Jorge Rivas <jorgeriv@vodafone.es>, 2000-2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-01-17 10:05+0100\n"
+"Last-Translator: Jorge Rivas\n"
+"Language-Team: Jorge Rivas\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Acerca de"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME copyright 2001 por Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Este programa software libre; pode redistribuirlo e/o modificarlo baixo os "
+"trminos da GNU General Public License publicada pola Free Software "
+"Foundation; tanto na versin 2, como (opcionalmente) calquer versin "
+"posterior.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Este programa distribuido con a esperanza de que sexa util, pero SEN "
+"NINGUNHA GARANTA; nin siquera a garanta implcita de COMERCIALIDADE ou "
+"ADECUACIN PARA ALGN PROPSITO PARTICULAR. Vease a GNU General Public "
+"License para mis detalles.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Vostede debera ter recibido unha copia da GNU General Public License xunto "
+"con este programa; en caso contrario, escriba a Free Software Foundation, "
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Aceptar"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lendo configuracin de cada conta...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Atopada etiqueta: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Hai Fiestras de composicin abertas.\n"
+"Peche todas as fiestras de composicin antes de editar as contas."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Abrindo fiestra de edicin de conta...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Creando fiestra de edicin de conta...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Editar contas"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"A orde de comprobacin de mensaxes ser este. Marque as casilas\n"
+"na columna `G' para activar a descarga mediante `Traer todo'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nome"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Servidor"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Engadir"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Editar"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Borrar "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Abaixo"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Arriba"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " conta por defecto "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Pechar"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Borrar conta"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Realmente quere borrar esta conta?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Si"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Non"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Non se puido obter o ficheiro da mensaxe."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Non se puido obter a parte da mensaxe."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Non se pode obter a parte da mensaxe multipartes"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"a accin seleccionada non se pode utilizar na fiestra de\n"
+"composicin porque conten %%f, %%F o %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Non se pudo iniciar o comando. Fallou a creacin da tubera.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Non se puido facer fork para executar o comando seguinte:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Executando: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Finalizou: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Entrada/saida de accions"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Enviar "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Abortar"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Teclee o argumento para a seguinte accin:\n"
+"(`%s' ser sustituido polo argumento)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Teclee o argumento para a seguinte accin:\n"
+"(`%s' ser sustituido polo argumento)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Engadir enderezo axenda"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Enderezo"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Notas"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Seleccionar carpeta da axenda"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Ficheiro"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Ficheiro/Nova _axenda"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Ficheiro/Nova _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Ficheiro/Novo _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Ficheiro/Novo _servidor"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Ficheiro/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Ficheiro/_Editar"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Ficheiro/_Borrar"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Ficheiro/_Gardar"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Ficheiro/_Pechar"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Enderezo"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Enderezo/Novo _enderezo"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "//_Enderezo/Novo _grupo"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Enderezo/Nova _carpeta"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Enderezo/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Enderezo/_Editar"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Enderezo/_Borrar"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Ferramentas"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Ferramentas/Importar ficheiro _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Axuda"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Ayuda/_Acerca de"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Novo _enderezo"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Novo _grupo"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nova _carpeta"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Editar"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Borrar"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Enderezo e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Axenda de enderezos"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Borrar"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Buscar"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Para:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Borrar enderezo(s)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Borrar realmente o(s) enderezo(s)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "+Non"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Quere borrar a carpeta E todos os enderezos en `%s'? \n"
+"Si so borra a carpeta os enderezos se movern carpeta pai."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Carpeta s"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Carpeta e enderezos"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Borrar realmente `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Novo usuario, non se puido gardar o ficheiro ndice."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Novo usuario, non se puido gardar os ficheiros de enderezos"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Antiga axenda de enderezos convertida con xito"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Antiga axenda de enderezos convertida,\n"
+"non se puido gardar o novo ficheiro ndice"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda,\n"
+"pero crearonse novos ficheiros valeiros."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda,\n"
+"Non se puideron crear os ficheiros para a nova."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda\n"
+"e non se puideron crear ficheiros para unha nova."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Error na conversin da axenda"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Conversin da axenda"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Error na axenda"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Non se puido ler o ndice de enderezos"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Antiga axenda de enderezos convertida, non se puido gardar o novo ficheiro "
+"ndice"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda, pero se crearon novos ficheiros "
+"valeiros."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda, non se puideron crear os ficheiros "
+"para a nova."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Non se puido convertir a antiga axenda e non se puideron crear ficheiros "
+"para unha nova."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Erro na conversin da axenda"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Conversin da axenda"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interfaz"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Axenda de enderezos"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persoa"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Enderezo e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupo"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Carpeta"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Servidor LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Enderezo comn"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Enderezo persoal"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notificacin"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Aviso"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Erro"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Creando o dilogo de alerta...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Mostrar este mensaxe de novo"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Laranxa"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Bermello"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Azul ceo"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Azul"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Verde"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Marrn"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ningn"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Engadir"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Quitar"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Propiedades..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Ficheiro/_Gardar"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Mensaxe/Enviar _logo"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Mensaxe/_Gardar como borrador"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Mensaxe/Gardar e _seguir editando"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Ficheiro/_Adxuntar ficheiro"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Ficheiro/_Inserir ficheiro"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Ficheiro/Inserir _sinatura"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Editar/_Desfacer"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Editar/_Refacer"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Editar/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Editar/Cor_tar"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Editar/_Copiar"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Editar/_Pegar"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Editar/Pegar como c_itacin"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Editar/_Seleccionar todo"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Editar/Avanza_das"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Editar/Avanza_das/Ir caracter anterior"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Editar/Avanza_das/Ir caracter seguinte"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Editar/Avanza_das/Ir palabra anterior"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Editar/Avanza_das/Ir palabra seguinte"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Editar/Avanza_das/Ir principio da lnea"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Editar/Avanza_das/Ir final da lnea"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Editar/Avanza_das/Ir lnea anterior"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Editar/Avanza_das/Ir lnea seguinte"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Editar/Avanza_das/Borrar o caracter anterior"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Editar/Avanza_das/Borrar o caracter seguinte"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Editar/Avanza_das/Borrar a palabra anterior"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Editar/Avanza_das/Borrar a palabra seguinte"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Editar/Avanza_das/Borrar lnea"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Editar/Avanza_das/Borrar ata o final da lnea"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Editar/_Recortar prrafo actual"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Editar/_Cortar todas as lneas longas"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Editar/_Copiar"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Ver"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Ver/_Para"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Ver/_Copia"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Ver/C_opia oculta"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Ver/_Respostar a"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Ver/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Ver/_Engadir a"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Ver/_Regra"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Ver/_Adxuntos"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Ferramentas/_Axenda de enderezos"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Ferramentas/Plan_tillas"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Ferramentas/Acci_ns"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Ferramentas/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Editar/Editar con editor e_xterno"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Ferramentas/Acci_ns"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Mensaxe/_Encriptar"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: o ficheiro non existe\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Non se pode obter o texto\n"
+
+#: src/compose.c:1263
+#, fuzzy
+msgid "Quote mark format error."
+msgstr "Marca de cita para erro."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Erro no formato da mensaxe para respostar/redirixir "
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "o ficheiro %s non existe\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Non se pode obter o tamao de %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "o Ficheiro %s esta valeiro."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Non poido ler %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Mensaxe: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Non se pode obter a parte do mensaxe multipartes."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Editado]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Compoer mensaxe%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Compoer mensaxe%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Non se especificou o destinatario."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Enviar"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "o asunto esta valeiro. Enviar de todas formas?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "non se pode obter a lista de destinatarios."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Non especific ningunha conta para enviar.\n"
+"Seleccione algunha conta antes de enviar."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Ocurriu un erro enviando o mensaxe a %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Non se pode gardar a mensaxe en Saida."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Non puiden atopar ningunha clave asociada con a Id-clave actual `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "non se pode cambiar os permisos de ficheiro\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Non podo convertir a codificacin de caracteres da mensaxe de\n"
+"%s a %s.\n"
+"Envia-lo de todo xeito?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "non se poden escribir as cabeceiras\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "non se pode eliminar a mensaxe antiga\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "poendo na cola...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "non podo atopar a carpeta de cola\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "a mensaxe non se pode poer na cola\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Message-ID generado: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Creando fiestra de composicion...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tipo MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Tamao"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Dende:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Enviar Mensaxe"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Enviar mais tarde"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Poer na cola e enviar mais tarde"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Borrador"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Gardar como borrador"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Inserir"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Inserir ficheiro"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Adxuntar"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Adxuntar ficheiro"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Sinatura"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Inserir sinatura"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Editar con un editor externo"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Recortar"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Cortar todas as lneas longas"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Tipo MIME invlido."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "O ficheiro non existe ou est valeiro."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Propiedades"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codificacin"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Ruta"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nome de ficheiro"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "o comando do editor externo non e vlido: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"o editor externo ainda esta activo.\n"
+"Desea terminar o proceso?\n"
+"Id. de proceso: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Terminado proceso id.: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Ficheiro temporal: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Compoer: entrada dende proceso monitor\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Non se puido executar o editor externo\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Non se puido escribir no ficheiro\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Fallo lendo tubera\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "O mensaxe non se pode poer na cola."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Seleccionar ficheiro"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Descartar Mensaxe"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Esta mensaxe foi modificado. Desea descartala?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Descartar"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "a Borrador"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Quere aplicar a plantilla `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Aplicar plantilla"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Substitur"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Editar enderezo"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Engadir nova persoa"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Editar detalles persoais"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Debe especificarse un enderezo de correo."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Debe especificarse un Nome e un Valor"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Editar datos persoais"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nome mostrado"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Apelidos"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Nome"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Alcume"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Enderezo e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Arriba"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Abaixo"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modificar"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Limpar"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valor"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Datos bsicos"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributos do usuario"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "O ficheiro parece correcto."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Non parece que o ficheiro est no formato da axenda."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Non se puido leer do ficheiro."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Editar axenda"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Comprobar ficheiro "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Ficheiro"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Engadir nova axenda"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Debe proporcionar un nome de grupo"
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Editar datos do grupo"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nome de grupo"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Enderezos no grupo"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Enderezos disponibles"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Mover os enderezos de correo dende/cara o grupo con as flechas"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Editar detalles do grupo"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Engadir novo grupo"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Editar carpeta"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Nome da nova carpeta:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nova carpeta"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Nome da nova carpeta:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Non parece que ese ficheiro est en formato JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Seleccionar ficheiro JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Editar entrada JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Elemento(s) adicional(is) do enderezo"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Engadir nova entrada JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Conectado con xito o servidor"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Non se puido conectar o servidor"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Editar servidor LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nome mquina"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Porto"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Comprobar servidor "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Base de bsqueda"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Criterio de bsqueda"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Limpar "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Asociar DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Asociar contrasinal"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Tiempo lmite (seg.)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "N entradas mximas"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Basico"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Extendido"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Engadir novo servidor LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Editar LDAP - Seleccionar base de bsqueda"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Base(s) de bsqueda disponible(s)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Non puiden ler a base de bsqueda do servidor - configre-a manualmente"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Non parece que o ficheiro est en formato vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Seleccionar Ficheiro vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Editar entrada vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Engadir nova entrada vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportar"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Especifique a carpeta orixen e ficheiro mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Carpeta orixen:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Ficheiro de exportacin:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "Seleccionar..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Seleccione ficheiro de exportacin"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "fallo escribiendo a configuracin a ficheiro\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Seleccionar carpeta"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Entrada"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Enviado"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Cola"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Papeleira"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Borradores"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NovaCarpeta"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' non pode estar no nome da carpeta."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "a carpeta `%s' xa existe."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Non se pode crear a carpeta `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Crear _nova carpeta..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Renomear carpeta..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Borrar carpeta"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Baleirar papeleira"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Comprobar si hai mensaxes novas"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/R_econstruir rbre de carpetas"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Buscar nas mensaxes"
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Non hai mensaxes sin leer."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Suscribirse a un grupo..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Eliminar grupo"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Creando vista de carpeta...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Novos"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Non ledos"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "N"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Establecendo informacin de carpeta...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Establecendo informacin de carpeta..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Revisando carpeta %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Revisando carpeta %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Reconstruir arbre de carpetas"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Reconstruindo a arbre de carpetas..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Reconstruindo a arbre de carpetas..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Reconstruindo todos os arbores de carpetas..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Comprobar si hai mensaxes novos en todas as carpetas..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Carpeta %s seleccionada\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Enviando mensaxe"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Ocurriu un erro enviando o mensaxe a %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Teclee o nome da nova carpeta:\n"
+"(si quere crear unha carpeta para almacenar subcarpetas,\n"
+" engada `/' o final do nome)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Novo nome para `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Renomear carpeta"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Todas as carpetas e mensaxes baixo `%s' sern borrados.\n"
+"Confirma o borrado?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Borrar carpeta"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Non se pode eliminar a carpeta `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Baleirar papeleira"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Baleirar todas as mensaxes da papeleira?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Realmente desexa eliminar a caixa de correo `%s' ?\n"
+"(As mensaxes NON se borrarn do disco)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Eliminar mailbox"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Eliminar realmente a conta IMAP4 `%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Borrar conta IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Borrar o grupo de novas `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Borrar grupo de novas"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Borrar a conta de novas `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Borrar conta de novas"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Subscribir grupo de novas"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Seleccione os grupos de novas a subscribir."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Buscar grupos:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Buscar "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nome de grupo"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Mensaxes"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tipo"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Refrescar"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderado"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "so lectura"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "desconecido"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Non se pode obter a lista de grupos."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Feito."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d grupos de novas recibidos (%s ledos)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Grupos de novas:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Creando vista de cabeceiras...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Sin remite)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Sin asunto)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Creando vista de imaxen...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Non se pode cargar a imaxen."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "Perdeuse a conexin IMAP4 con %s:%d . Reconectando...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "creando conexin IMAP4 con %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Non podo iniciar a sesin TLS.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "non podo establecer os indicadores borrados: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "non podo baleirar\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "non podo establecer os indicadores borrados: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "non se pode seleccionar a carpeta: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Ficheiro de marcas non atopado.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "ocurriu un erro obtendo LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Non podo crear '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Non podo crear '%s' bajo Entrada\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "non podo crear a: LIST fall\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "non podo crear a caixa de correo\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "non podo renomear a caixa de correo: %s a %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "non podo borrar a caixa de correo\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "non se pode obter a estructura da mensaxe\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Erro obtendo a estructura da mensaxe.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "Non se pode interpretar a estructura da mensaxe: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Non se pode conectar con o servidor IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Non podo establecer unha sesin IMAP4 con: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "no se pode obter o espacio de nomes\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "non se pode seleccionar a carpeta: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Fallo de autenticacin"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Autentificacin IMAP4 fallida.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "non podo engadir %s a %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(enviando ficheiro...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "non se pode engadir o mensaxe %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "non podo copiar %d a %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "erro no comando imap: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "erro no comando imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "erro no comando imap: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv non pode convertir UTF-7 a %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv non pode convertir %s a UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importar"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Especifique ficheiro mbox e carpeta de destio."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Ficheiro a importar:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Carpeta de destio:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Seleccionar ficheiro a importar"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Especifique o nome da axenda e o ficheiro a importar."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Seleccione e renomee os campos LDIF a importar."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Ficheiro importado."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Seleccione un ficheiro."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Debe proporcionar un nome de axenda de enderezos."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Erro lendo os campos LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Ficheiro LDIF importado con xito."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Seleccionar ficheiro LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nome do ficheiro"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Campo LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nome de atributo"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atributo"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Seleccionar"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Axenda de enderezos :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nome de ficheiro :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Rexistros :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importar ficheiro LDIF na axenda"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Anterior"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Seguinte"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informacin de ficheiro"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributos"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Finalizar"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Obtendo novos mensaxes"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "En espera"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Recuperando"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Feito (%d mensaxe(s) (%s) recibido(s))"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "feito (non hai mensaxes novos)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Conexin fallida"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autorizacin fallida"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Bloqueado"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Tiempo lmite (seg.)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Finalizado (%d mensaxe(s) novo(s))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Finalizado (non hai mensaxes novos)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Ocurriu algn erro obtendo o correo."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "obtendo novas mensaxes da conta %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Recuperando novas mensaxes"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Conectando servidor POP3: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Non se pode conectar servirdor POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autenticando..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Obtendo mensaxes dende %s en %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Obtendo o nmero de novas mensaxes (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Obtendo o nmero de novas mensaxes (STAT)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Obtendo o nmero de novas mensaxes (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Obtendo o tamao de novas mensaxes (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Borrando mensaxe %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Sando"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Recuperando mensaxe (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Feito (%d mensaxe(s) (%s) recibido(s))"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Conexin fallida"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Ocurriu un erro mentras se procesaba o correo."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Ocurriu un erro mentras se procesaba o correo:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Non hai espacio libre no disco."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Non se pode escribir o ficheiro."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Error de socket."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "a caixa de correo esta bloqueada."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"a caixa de correo esta bloqueada:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Fallo de autenticacin"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Fallo de autenticacin:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Incorporacin cancelada\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Obtendo novos mensaxes dende %s en %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Contrasinal para %s en %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Contrasinal"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Rexistro do protocolo"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"o Ficheiro `%s' xa existe.\n"
+"Non podo crear a carpeta."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread non est soportado por glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG non esta convenientemente instalado, ou unha versin antiga.\n"
+"Soporte para OpenPGP deshabilitado."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uso: %s [OPCIN]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [direccin] abre a fiestra de edicin"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fich1 [fich2]...\n"
+" abre a fiestra de composicin con os ficheiros\n"
+" especificados como adxuntos"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive recibe as mensaxes novas"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all recibe novas mensaxes para todas as contas"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send enviar todas as mensaxes na cola"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status mostra o nmero total de mensaxes"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status mostra o nmero total de mensaxes"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug modo de depuracin"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help presenta esta axuda e finaliza"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version da a informacin da versin e finaliza"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Est compoendo unha mensaxe. Quere sair?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Mensaxes en cola"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Hai mensaxes sin enviar na cola. Sair agora?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "xa hai outro Sylpheed executndose.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Ficheiro/_Carpeta"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Ficheiro/_Carpeta_/Crear _nova carpeta..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Ficheiro/_Carpeta_/_Renomear carpeta..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Ficheiro/_Carpeta_/_Borrar carpeta"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Ficheiro/_Engadir caixa de correo"
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Ficheiro/_Engadir caixa de correo"
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Eliminar _mailbox"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Ficheiro/_Carpeta"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Comprobar si hai mensaxes novas"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Ficheiro/_Comprobar mensaxes novas en todas as carpetas"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/R_econstruir rbre de carpetas"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Ficheiro/I_mportar ficheiro mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Ficheiro/_Exportar a ficheiro mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Ficheiro/_Baleirar Papeleira"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Ficheiro/_Gardar como..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Ficheiro/_Imprimir"
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Ficheiro/_Inserir ficheiro"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Ficheiro/Sai_r"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Editar/Seleccionar _fio"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Edicin/_Buscar na mensaxe actual..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Edicin/_Buscar en carpeta..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Ver/Mostrar ou o_cultar"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Ver/Mostrar ou o_cultar/_Arbre de carpetas"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Ver/Mostrar ou o_cultar/_Mensaxes"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Ver/Mostrar ou o_cultar/_Ferramentas"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Ver/Mostrar ou o_cultar/_Ferramentas/Iconos _e texto"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Ver/Mostrar ou o_cultar/_Ferramentas/_Iconos"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Ver/Mostrar ou o_cultar/_Ferramentas/_Texto"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Ver/Mostrar ou o_cultar/_Ferramentas/_Ocultar"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Ver/Mostrar ou o_cultar/_Barra de estado"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Ver/Separar arb_re de carpetas"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Ver/Separar vista de m_ensaxes"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Ver/_Ordear"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Ver/_Ordear/Por _nmero"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Ver/_Ordear/Por tama_o"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Ver/_Ordear/Por _data"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Ver/_Ordear/Por _remitente"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Ver/_Ordear/Por _destinatario"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Ver/_Ordear/Por as_unto"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Ver/_Ordear/Por _cor da etiqueta"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Ver/_Ordear/Por _marca"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Ver/_Ordear/Por _non ledo"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Ver/_Ordear/Por adxun_to"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Ver/_Ordear/N_on ordear"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Ver/_Ordear/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Ver/_Ordear/Ascendente"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Ver/_Ordear/Descendente"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Ver/_Ordear/Atraer _por asunto"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Ver/_Vista xerrquica"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Ver/E_xpandir todos os fios"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Ver/Co_lapsar todos os fios"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Ver/Elementos visibles..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Ver/_Ir a"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Ver/_Ir a/Mensaxe a_nterior"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Ver/_Ir a/Mensaxe s_eguinte"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Ver/_Ir a/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Ver/_Ir a/_Anterior sin ler"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Ver/_Ir a/_Seguinte sin ler"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Ver/_Ir a/Mensaxe no_va anterior"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Ver/_Ir a/Mensaxe nova s_eguinte"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Ver/_Ir a/Mensaxe marcada a_nterior"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Ver/_Ir a/Seguinte mensaxe _marcada"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Ver/_Ir a/Mensaxe etiqueta_da anterior"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Ver/_Ir a/Seguinte Mensaxe e_tiquetada"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Ver/_Ir a/_Ir a outra carpeta"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Ver/_Codificacin/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Ver/_Codificacin"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Ver/_Codificacin/_Autodetectar"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Ver/_Codificacin/ASCII de 7 bits (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Ver/_Codificacin/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Ver/_Codificacin/Europeo Occidental (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Ver/_Codificacin/Europeo Occidental (ISO-8859-_15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Ver/_Codificacin/Centroeuropeo (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Ver/_Codificacin/Bltico (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Ver/_Codificacin/Bltico (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Ver/_Codificacin/Grego (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Ver/_Codificacin/Turco (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Ver/_Codificacin/Cirlico (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Ver/_Codificacin/Cirlico (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Ver/_Codificacin/Cirlico (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Ver/_Codificacin/Cirlico (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Ver/_Codificacin/Xapons (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Ver/_Codificacin/Xapons (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Ver/_Codificacin/Xapons (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Ver/_Codificacin/Xapons (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Ver/_Codificacin/Chines simplificado (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Ver/_Codificacin/Chines tradicional (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Ver/_Codificacin/Chines tradicional (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Ver/_Codificacin/Chines (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Ver/_Codificacin/Coreano (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Ver/_Codificacin/Coreano (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Ver/_Codificacin/Tailands (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Ver/_Codificacin/Tailands (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Ver/Abrir en fiestra _nova"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Ver/Fonte da mens_axe"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Ver/Mostrar todas as cabeceiras"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Ver/Actualizar res_umen"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Mensaxe"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Mensaxe/Re_editar"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Mensaxe/Recibir de tod_as as contas"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Mensaxe/Recibir de tod_as as contas"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Mensaxe/_Cancelar recepcin"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Mensaxe/Re_editar"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Mensaxe/Enviar mensa_xes da cola"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Mensaxe/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Mensaxe/Compoer _nova mensaxe"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Mensaxe/_Respostar"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Mensaxe/Respos_tar a"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Mensaxe/Respos_tar a/A _todos"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Mensaxe/Respos_tar a/ _remitente"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Mensaxe/Respos_tar a/ _lista de correo"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Mensaxe/_Reenviar"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Mensaxe/Reen_viar como adxunto"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Mensaxe/Red_irixir"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Mensaxe/M_over..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Mensaxe/_Copiar..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Mensaxe/_Borrar"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Mensaxe/_Marcar"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Mensaxe/_Marcar/_Marcar"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Mensaxe/_Marcar/_Desmarcar"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Mensaxe/_Marcar/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Mensaxe/_Marcar/Marcar como non ledo"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Mensaxe/_Marcar/Marcar como ledo"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Mensaxe/_Marcar/Marcar todo como ledo"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Mensaxe/Re_editar"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Ferramentas/Engadir _remitente axenda"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Ferramentas/_Filtrar Mensaxes"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Ferramentas/_Filtrar Mensaxes"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Ferramentas/_Crear Regra de filtrado"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Ferramentas/_Crear Regra de filtrado/_Automticamente"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Ferramentas/_Crear Regra de filtrado/Baseada en _Dende"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Ferramentas/_Crear Regra de filtrado/Baseada en _Para"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Ferramentas/_Crear Regra de filtrado/Baseada no _Asunto"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Ferramentas/Borrar as mensaxes re_petidas"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Ferramentas/E_xecutar"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Ferramentas/_Fiestra de traza"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configuracin"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configuracin/Preferencias _comuns..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configuracin/Preferencias de _filtrado..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Configuracin/_Plantillas ..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configuracin/_Accions..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configuracin/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configuracin/_Preferencias da conta actual..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configuracin/Crear _nova conta..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configuracin/_Editar contas..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configuracin/_Cambiar conta actual"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Axuda/_Manual"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Axuda/_Manual/_Ingls"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Axuda/_Manual/_Xapons"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Axuda/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Axuda/_FAQ/_Ingls"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Axyuda/_FAQ/_Alemn"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Axuda/_FAQ/_Espaol"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Axuda/_FAQ/_Francs"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Axuda/_FAQ/_Italiano"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Axuda/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Creando Fiestra principal...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: fallo solicitando cor %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "feito.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Sen ttulo"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "ningunha"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Cambiando o tipo de separacin de fiestra de %d a %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Baleirar papeleira"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Baleirar todas as mensaxes da papeleira?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Engadir caixa de correo"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Introduzca a localizacin da caixa de correo.\n"
+"Si xa existe ser\n"
+"examinado automticamente."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "a caixa de correo `%s' xa existe."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Correo"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Fallu a creacin da caixa de correo.\n"
+"Quizis xa existan os ficheiros ou non tea permisos suficientes para "
+"escribir no directorio."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Arbre de carpetas"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Vista de mensaxe"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Respostar"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Respostar a todos"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Respon_der a/ _remitente"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Respon_der a/ _lista de correo"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Reenviar"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Reen_viar como adxunto"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Red_irixir"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Traer"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Incorporar correo novo"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Traer todo"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Incorporar correo novo de todas as contas"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Enviar mensaxe(s) na cola"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Compoer"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Compoer mensaxe novo"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Respostar"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Respostar mensaxe"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "A todos"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Respostar a todos"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Reenviar"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Reenviar o mensaxe"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Borrar o mensaxe"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Executar"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Executar o proceso marcado"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Seguinte non ledo"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferencias"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Preferencias comuns"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "conta"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Preferencias da conta"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Sair"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Sair do programa?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "non se pode escribir o ficheiro temporal\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Obtendo mensaxes dende %s en %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "non podo ler o ficheiro mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "formato de mbox invlido: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox malformada: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "non se pode abrir o ficheiro temporal\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Atopado Dende sin escapar:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d mensaxes atopados.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "non se pode crear o ficheiro de bloqueo %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "usar 'flock' en vez de 'file' si posible.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "non podo crear %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "a caixa de correo esta sendo usada por outro proceso, esperando...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "non se pode bloquear %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "tipo de bloqueo non vlido\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "non se pode desbloquear %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "non se pode truncar a cero a caixa de correo.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportando mensaxes de %s a %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Buscar no mensaxe actual"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Buscar texto:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Mais./mins."
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Buscar cara atrs"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Buscar"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Bsqueda fallida"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Cadea non atopada."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Cheguse principio da mensaxe. Seguir dende o final?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Cheguse final da mensaxe. Seguir dende o principio?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Bsqueda concluida"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Creando visor de mensaxe...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Gardar como"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Sobreescribir"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Sobreescribir o ficheiro existente?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Non podo gardar o ficheiro `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Teclee o comando para imprimir:\n"
+"(`%s' ser sustituido por o ficheiro)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"o comando de impresin non vlido:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "non se pode copiar mensaxe %s a %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Non se pode abrir o ficheiro de marcas.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "carpetas de orixen e destio idnticas.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copiando mensaxe %s%c%d a %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "ltimo nmero en directorio %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Abrir"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Abrir _con..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Ver como texto"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Gardar como..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Verificar sinatura"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Creando visor de MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tipo MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Texto"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Adxuntos"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Seleccione \"Verificar sinatura\" para verificar"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Non se pode gardar a parte da mensaxe multipartes."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Abrir con"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Teclee o comando para abrir o Ficheiro:\n"
+"(`%s' ser sustituido por o ficheiro)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "o comando do visor MIME non vlido: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "creando conexin NNTP con %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "perdeuse a conexin NNTP con %s:%d . Reconectando...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "o artigo %d xa esta en cach.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "obtendo artigo %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "no podo leer o artculo %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "no podo obter a lista de grupos\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "no se pode enviar o artculo.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "no podo obter o artculo %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "non podo seleccionar grupo %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "rango de artculos no vlido: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "no hai artculos novos.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "obteniendo xover %d - %d en %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "no se pode obtener xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "ocurriu un erro obtendo xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "linea xover non vlida: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "non se pode obter xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "ocurriu un erro obtendo xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Non se pode conectar con o servidor NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "erro do protocolo: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "erro do protocolo\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Ocurru un erro mentras se enviaba\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Ocurriu un erro mentras se enviaba o correo."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Frase contrasinal"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[sin id usuario]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sIntroduzca a frase contrasinal para:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Contrasinal errneo! Intenteo de novo...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Non se atopou no saudo a marca temporal APOP requerida\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "a marca temporal do saudo ten un erro de sintaxis\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Erro do protocolo POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "linea xover non vlida: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Borrando mensaxe expirado %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Ignorando mensaxe %d (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "a caixa de correo est bloqueado\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "non podo abrir a sesin TLs\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "ocurriu algn erro na autenticacin\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "Comando non soportado\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "ocurriu algn erro na sesin POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lendo configuracin...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Atopado %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Rematada a lectura da configuracin.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Configuracin gardada.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Abrindo Fiestra de preferencias de conta...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "conta%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferencias para unha nova conta"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Preferencias da conta"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Creando Fiestra de preferencias de conta...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Recibir"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacidad"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avanzadas"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nome desta conta"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "conta por defecto"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informacin persoal"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nome completo"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Enderezo de correo"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacin"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informacin do servidor"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Novas (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Ningunha (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Este servidor require autenticacin"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Servidor de novas"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Servidor de recepcin"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Servidor SMTP (enviar)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Usuario"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Contrasinal"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Este servidor require autenticacin"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Eliminar mensaxes do servidor recibir"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Eliminar despois de"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "das"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 das: eliminar inmediatamente)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Descargar todas as mensaxes do servidor"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Tamao lmite para recibir"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrar mensaxes recibir"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Caixa de correo por defecto"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(As mensaxes sen filtrar gardarnse nesta carpeta)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Mtodo de autenticacin"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automtica"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Traer todo' comproba si hai mensaxes novas nesta conta"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Cabeceira"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Engadir campo Data"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Xenerar ID-Mensaxe"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Engadir cabeceira de usuario"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Editar... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autenticacin"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Autenticacin SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Si deixa estes campos valeiros, utilizarse o mesmo\n"
+"ID de usuario e contrasinal usados para a recepcin."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autenticacin con POP3 antes de enviar"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Saida do comando"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Establecer os seguintes enderezos automticamente"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Respostar a"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Encriptar a mensaxe por defecto"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Asinar a mensaxe por defecto"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Usar formato ASCII blindado para encriptacin"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Usar sinatura de texto claro"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Asinar clave"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Usar clave GnuPG por defecto"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Seleccionar clave por direccin de correo"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Especificar clave manualmente"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Usuario ou ID clave:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Non usar SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Usar SSL para a conexin POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Usar o comando STARTTLS para abrir a sesin SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Usar SSL para a conexin IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Usar SSL para a conexin NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Enviar (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Usar SSL para a conexin SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Porto SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Porto POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Porto IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Porto NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Nome do dominio"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Directorio do servidor IMAP4"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Poer mensaxes enviadas en"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Poer borradores de mensaxes en"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Poer mensaxes borradas en"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Non se especificou o nome de conta."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Non se especificou o enderezo de correo."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Non se especificou o servidor SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Non se especificou o usuario."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Non se especificou o servidor POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Non se especificou o servidor IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Non se especificou o servidor NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Non se recomenda usar o estilo antigo de blindaxe de\n"
+"ASCII plano para mensaxes encriptados. Non cumple con o\n"
+"RFC 3156 - Seguridade MIME con OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "configuracin das accions"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nome de men:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Orde:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nome de men:\n"
+" Utilize / no nome para facer submens.\n"
+"Comando:\n"
+" Comence con:\n"
+" | para enviar o corpo da mensaxe ou a seleccin comando\n"
+" > para enviar texto proporcionado polo usuario comando\n"
+" * para enviar sen mostrar o texto de usuario comando\n"
+" Remate con:\n"
+" | para sustituir o corpo da mensaxe ou seleccin con a saida do comando\n"
+" & para executar o comando asncronamente\n"
+" Utilize %f para o nome de ficheiro do mensaxe\n"
+" %F para a lista de nomes de ficheiro das mensaxes seleccionados\n"
+" %p para a parte seleccionada da mensaxe."
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Substitur "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Axuda sintaxis "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Accions rexistradas"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nova)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Non se estableceu o nome de men."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Non se permiten dous puntos ':' no nome de men."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "o nome do men demasiado longo."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Non se estableceu o comando."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "o nome de men e o comando son demasiado longos."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"o comando\n"
+"%s\n"
+"ten algn erro de sintaxis."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Borrar accin"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Realmente quere borrar esta accin?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Creando fiestra de preferencias comuns...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferencias comuns"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citar"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Ver"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Mensaxe"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Outras"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Programa externo"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Usar un programa externo para incorporar"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Comando"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Almacenamento local"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorporar do almacn"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrar incorporar"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Comprobar correo novo"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "cada"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuto(s)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Comproba correo novo inicio"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Actualizar todas as carpetas locales despois de incorporar"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Novas"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Nmero mximo de artigos a descargar\n"
+"(sen lmite si se especifica 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Usar programa externo para enviar"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Gardar mensaxes enviados en Saida"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Codificacin para enviar"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automtico (Recomendado)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "ASCII de 7 bits (US-ASC_II)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europeo Occidental (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europeo Occidental (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Centroeuropeo (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Bltico (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Bltico (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grego (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turco (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirlico (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirlico (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirlico (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirlico (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Xapons (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Xapons (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Xapons (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Chines simplificado (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Chines tradicional (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Chines tradicional (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chines (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Coreano (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tailands (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tailands (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Si se selecciona `Automtico' utilizarase a\n"
+"codificacin ptima para a localizacin actual."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Codificacin de transferencia"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Especificar a codificacin de transferencia (Content-Transfer-Encoding)\n"
+"cando o corpo do mensaxe conten caracteres non-ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Separador de sinatura"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Inserir automticamente"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Lanzar o editor externo automticamente"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Niveles de desfacer"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Recortar mensaxes s"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caracteres"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Recortar citacin"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Recortar mentras se escribe"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Recortar antes de enviar"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Seleccionar automticamente a conta para respostar"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citar a mensaxe respostar"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "o botn Respostar invoca respostar lista de correo"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formato de rplica"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Marca de citacin"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formato de reenvio"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Descripcin de smbolos "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Fonte"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traducir cabeceiras (como `Dende:', `Asunto:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Ver o nmero de non ledas xunto nome da carpeta"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Abreviar nomes de grupos con mais de"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "letras"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Vista resumo"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Ver destinatario na columna `Dende' si o remitente vostede mismo"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Expandir fos"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formato de data"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Elementos visibles no resumo... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Permitir cores na mensaxe"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Mostrar alfabticos e numricos multi-byte como\n"
+"caracteres ASCII (s para Xapons)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Mostrar panel de cabeceiras sobre a mensaxe"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "cabeceiras breves na vista da mensaxe"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Interlineado"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Deixar espacio de cabeceira"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Desplazamento"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Media pxina"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Desplazamiento suave"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Paso"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Redimensionar as imxes adxuntas"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Comprobar as sinaturas automticamente"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Mostrar dilogo de comprobacin de sinatura"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Manter contrasinal en memoria temporalmente"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Expirar despois de"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuto(s) "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Poniendo '0' mantendr a contrasea\n"
+" durante toda a sesin)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Capturar a entrada mentras se introducen contrasinais"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Mostrar aviso no inicio si non funciona GnuPG"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Abrir sempre as mensaxes no sumario cando se seleccionan"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Abrir a primeira mensaxe non leda abrir unha carpeta"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Marcar mensaxe como leda s abrila nunha fiestra nova"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Abrir entrada despois de recibir correo novo"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Executar inmediatamente movimentos ou borrados de mensaxes"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Os mensaxes marcarnse hasta a execucin\n"
+" si est desactivado)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Dilogo de recepcin"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Mostrar dilogo de recepcin"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Sempre"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nunca"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Non mostrar dilogo de erro si hai erros de recepcin"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Mostrar dilogo de recepcin finalizar"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Establecer atallos de teclado... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Comandos externos (%s se sustituir con o nome de ficheiro / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Navegador web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Engadir direccin destino con doble click"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr " sair"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Confirmar sair"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Baleirar papeleira sair"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Preguntar antes de baleirar"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Avisar si existen mensaxes na cola"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "o dia da semana abreviado"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "o dia da semana completo"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "o nome do mes abreviado"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "o nome do mes completo"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "a data e hora preferida para a localizacin actual"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "o nmero de sculo (ao/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "o dia do mes como nmero decimal"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "a hora como nmero usando o reloxo de 24 horas"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "a hora como nmero usando o reloxo de 12 horas"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "o dia do ano como nmero decimal"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "o mes como nmero decimal"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "o minuto como nmero decimal"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM o PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "o segundo como nmero decimal"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "o dia da semana como nmero decimal"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "a data preferida para a localizacin actual"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "os dous ltimos dxitos do ano"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "o ano como nmero decimal"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "zona horaria ou nome ou abreviatura"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Especificador"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Descripcin"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Exemplo"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Cores do mensaxe"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Cores"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Texto citado - Primer nivel"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Texto citado - Segundo nivel"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Texto citado - Tercer nivel"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Enlace URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Reutilizar cores de citacin"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Escoller cor para o nivel de citado 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Escoller cor para o nivel de citado 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Escoller cor para o nivel de citado 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Escoller cor para URIs"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Descripcin de smbolos"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Data\n"
+"Dende\n"
+"Nome completo do remitente\n"
+"Nome do remitente\n"
+"Inicial do remitente\n"
+"Asunto\n"
+"Para\n"
+"Cc\n"
+"Grupos de novas\n"
+"ID-Mensaxe"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Si x est, mostra expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Corpo da mensaxe\n"
+"Corpo da mensaxe citado\n"
+"Corpo da mensaxe sen sinatura\n"
+"Corpo da mensaxe citado sen sinatura\n"
+"o carcter %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Carcter barra invertida\n"
+"Carcter de interrogacin\n"
+"Carcter chave aberta\n"
+"Carcter chave pechada"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Seleccin de fonte"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Atallos de teclado"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Selecciona o conxunto de atallos de teclado.\n"
+"Se poden modificar tamn os atallos dos mens pulsando\n"
+"calquer tecla(s) situar o ratn sobre o elemento do men."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Por defecto"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Antigos de Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Configuracin de cabeceiras de usuario"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "cabeceiras de usuario"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Non se estableceu o nome de cabeceira"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Borrar cabeceira"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Quere borrar realmente esta cabeceira?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Creando fiestra de visualizacin de propiedades de cabeceiras...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Ver propiedades de cabeceiras"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Cabeceira"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "cabeceiras mostradas"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "cabeceiras ocultas"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Mostrar todas as cabeceiras"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lendo configuracin para mostrar cabeceiras...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Escribindo configuracin para mostrar cabeceiras...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Esa cabeceira xa existe na lista."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Preferencias de filtrado"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Para:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Copiar..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Borrar regra"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Quere borrar realmente esta regra?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Borrar regra"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "cabeceiras ocultas"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Cabeceira"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Mensaxe"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "conten"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "non conten"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Abaixo"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Copiar..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Non recibir"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Borrar carpeta"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Notas"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Cores do mensaxe"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Marcar/Marcar como _ledo"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Reen_viar como adxunto"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Red_irixir"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Executar"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Carpeta"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Enderezo"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Cabeceira"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Cabeceira"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Cabeceira"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Non se especificou o destinatario."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Non se estableceu o comando."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Non se especificou destinatario."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Non se estableceu o comando."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: o ficheiro non existe\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Propiedades da carpeta"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Xerais"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Aplicar en subcarpetas"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "utilizar tamn respostar"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Respostar-A:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Marca"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Adxunto"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Asunto"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Dende"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Data"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nmero"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Creando fiestra de configuracin de columnas no resumo...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Configuracin de elementos do resumo"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Seleccione os elementos a mostrar no resumo. Se pode modificar\n"
+"a orde utilizando os botons Arriba/Abaixo ou arrastrandolos."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Elementos disponibles"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Elementos visibles"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Valores por defecto "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nome de plantilla"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Rexistrar"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Substitur "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Smbolos "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Plantilas rexistradas"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Plantilas"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Plantilla"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Error de formato na plantilla."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Borrar plantilla"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Quere borrar realmente esta plantilla?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Conversin de cdigos fallida.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "no se pode abrir o ficheiro de marcas\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "non se pode obter o mensaxe %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Fallo enviando mensaxe %d da cola.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "o comando de impresin non vlido: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Estado"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Creando dilogo de progreso...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "ocurriu un erro mentras se obtan datos.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Non se pode escribir ficheiro.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: sinatura no verificada"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Non se atopou sinatura"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Sinatura vlida"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "Sinatura INVLIDA"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Non hai clave pblica para verificar a sinatura"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Error verificar a sinatura"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Resultados diferentes para as sinaturas"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Error: Estado descoecido"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Sinatura vlida de \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Sinatura INVLIDA de \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Non atopo o ID de usuario para esta clave."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Sinatura feita en %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Pegada de clave: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Seleccione clave para `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Recollendo info para `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Seleccione teclas"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID tecla"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Engadir clave"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Teclee outro usuario ou ID-clave:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Cabeceira corrupta no mensaxe en cola.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Conectando"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Conectando con o servidor SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Enviando HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autenticando"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Enviando mensaxe"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Enviando EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Enviando MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Enviando"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Enviando RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Enviando DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Terminando..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Enviando mensaxe (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Enviando mensaxe"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Ocurriu un erro enviando as mensaxes."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Ocurriu un erro enviando a mensaxe:\n"
+".%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Configurar caixa de correo"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Primeiro establezca a localizacin da sua caixa de correo.\n"
+"Pode utilizar unha caixa de correo existente en formato MH\n"
+"si xa a ten.\n"
+"Si non est seguro, seleccione Aceptar."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Verificando sinatura"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s dende \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH non est disponible\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "ocurriu algn erro na sesin SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Creando fiestra de fonte...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Fonte da mensaxe"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Mostrando a fonte de %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Fonte"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 non est disponible\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 disponible\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 non est disponible\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 disponible\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Mtodo SSL non disponible\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Mtodo SSL desconocido *ERROR no PROGRAMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Error creando o contexto SSL\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Conexin SSL fallida (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Conexin SSL usando %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certificado do servidor:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Asunto: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Xenerador: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Buscar nas mensaxes"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Establecer os seguintes enderezos automticamente"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Corpo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Seleccionar coincidentes"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Chegouse principio da lista, siguir dende o final?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Terminouse a lista, comenzar dende o principio?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Respon_der a"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Respon_der a/A _todos"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Respon_der a/ _remitente"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Respon_der a/ _lista de correo"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Mover..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copiar..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Marcar"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Marcar/_Marcar"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Marcar/_Desmarcar"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Marcar/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Marcar/Marcar como _non ledo"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Marcar/Marcar como _ledo"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Marcar/Marca_r todos ledos"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/E_tiquetar de cor"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Re_editar"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Engadir _remitente axenda"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Ver/_Fonte"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Ver/Todas as cabeceiras"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Imprimir..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "x"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "N"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Non."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Creando vista de cabeceiras...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Procesar marcas"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Queda algunha marca. Procesa-la?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Revisando carpeta (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Non hai mais mensaxes sin ler"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Non hai mensaxes sin ler. Buscar dende o final?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Non hai mensaxes sin leer."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Non hai mensaxes sen ler. Ir carpeta seguinte?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Bscar de novo"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Non hai mais mensaxes novas"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Non hai mais mensaxes novas. Buscar dende o final?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Non hai mensaxes novas."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Non hai mis mensaxes novas. Ir a a carpeta seguinte?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Non hai mais mensaxes marcadas"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Non hai mensaxes marcadas. Buscar dende o final?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Non hai mensaxes marcadas."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Non hai mensaxes marcadas. Buscar dende o principio?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Non hai mais mensaxes etiquetadas"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Non hai mensaxes etiquetadas. Buscar dende o final?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Non hai mensaxes etiquetadas."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Non hai mensaxes etiquetadas. Buscar dende o principio?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Agrupando mensaxes por asunto..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d borrados"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d movidos"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d copiado"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " elemento(s) seleccionados"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novas, %d non ledos, %d totales (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novas, %d non ledos, %d totales"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Ordeando cabeceiras..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tExtraindo cabeceiras das mensaxes..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Resumindo as mensaxes..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Escribindo cach resumo (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Sin data)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Mensaxe %d est marcado\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Mensaxe %d marcada como ledo\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Mensaxe %d marcada como non ledo\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Mensaxe %s/%d marcada para borrar\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Borrar mensaxe(s)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Quere realmente borrar a/as mensaxe(s) da papeleira?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Borrando mensaxes duplicadas..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Mensaxe %s/%d desmarcada\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Mensaxe %d marcada para mover a %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "o destino e o mismo que a carpeta actual."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Mensaxe %d marcada para copiar a %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "o destino de copia a carpeta actual."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Seleccionando todas as mensaxes..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Ocurriu un erro mentras se procesaba o correo."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Construindo xerarqua..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Desfacendo xerarqua..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Desfacendo xerarqua para execucin..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrando..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrando..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "o mensaxe %d xa esta en cach.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "o ficheiro %s xa existe\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Creando vista de texto...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "unha mensaxe non ser recibido\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Para gardar esta parte, abra o menu contextual con o "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "botn dereito e seleccione `Gardar como...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ou pulse a tecla `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Para ver esta parte coma unha mensaxe de texto, seleccione "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Ver como texto', o pulse a tecla `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Para abrir esta parte con un programa externo seleccione "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Abrir' o `Abrir con...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ou doble-click, ou pulse o botn central, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ou pulse a tecla `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Esta sinatura ainda non foi verificada.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Para verificarla, abra o menu contextual con\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "o botn dereito e seleccione `Verificar sinatura'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "fallo escribindo en %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Non poido abrir %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (autorz. APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Eliminar _mailbox"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Eliminar conta _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/_Eliminar conta de novas"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Mensaxe/_Enviar"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Mensaxe/_Asinar"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "non hai mensaxes no correo local.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Directorio de almacn"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "Seleccionar..."
+
+#~ msgid "Condition"
+#~ msgstr "Condicin"
+
+#~ msgid "Keyword"
+#~ msgstr "Palabra"
+
+#~ msgid "Destination"
+#~ msgstr "Destio"
+
+#~ msgid "Use regex"
+#~ msgstr "Usar exp.reg."
+
+#~ msgid "Registered rules"
+#~ msgstr "Regas rexistradas"
+
+#~ msgid "(none)"
+#~ msgstr "(ningunha)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Entrada non gardada"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "a entrada no se gardou. Pechar igualmente?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "a orde de apertura dun URI invlida: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "a cach de datos esta corrupta\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Crear Regra de f_iltrado"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Crear Regra de f_iltrado/_Automticamente"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/Crear Regra de f_iltrado/Baseada en _Dende"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/Crear Regra de f_iltrado/Baseada en _Para"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/Crear Regra de f_iltrado/Baseada no _Asunto"
+
+#~ msgid "Queueing"
+#~ msgstr "Poendo na cola"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Ocurru un erro enviando los Mensaxes.\n"
+#~ "Desea poer este mensaxe na cola?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Poer en cola os envios fallidos"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/E_jecutar"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_Seleccionar todo"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Seleccionar _fo"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "no podo establecer grupo: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "unha mensaxe non ser recibido\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Mensaxe/Rec_ibir correo novo"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNon hai ficheiro cach\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tLendo cach de resumo..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "a versin en cach distinta. Descartndo-a.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Ficheiro de marcas non atopado.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Versin de marca diferente (%d != %d). Descartndo-a.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Non se pode abrir o ficheiro de marcas para engadir.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Non se pode abrir o ficheiro de marcas para escribir.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "non se pode crear o ficheiro de bloqueo %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "carpeta vaca\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "S si esta activa una Fiestra"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Todas as configuracions previas de cada carpeta se perdern.\n"
+#~ "Desea continuar?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "posicin da fiestra: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Establecendo controles..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Movendo mensaxe %s%c%d a %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tMarcando as mensaxes..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d nova(s) mensaxe(s)\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "non poido seleccionar a caixa de correo %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "obtendo mensaxe %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Borrando mensaxes en cach %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Borrando todas as mensaxes na cach... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Contando o nmero total de mensaxes...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Non se puido obter o ficheiro da mensaxe."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Abrir mensaxe utilizar os cursores no resumo"
+
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ocurru algn erro enviando o correo:\n"
+#~ "%s"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Ocurriron alguns erros enviando as mensaxes da cola."
+
+#~ msgid "No message part selected."
+#~ msgstr "Non se seleccionou ningunha parte da mensaxe."
+
+#~ msgid "Predicate"
+#~ msgstr "Predicado"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Creando fiestra de configuracin de accions...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Preferencias de accions"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Lendo configuracin de accions...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Erro no comando da accin\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Creando fillo e neto.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Fillo: esperando polo neto\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Fillo: o neto finalizou\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Matando grupo do fillo id %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Liberando datos dos fillos %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Actualizando dialogo de entrada/saida de accions.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "o fillo devolveu %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Enviando entrada neto.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Entrada enviada neto.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Capturando a saida do neto.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Erro de socket\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "conta no atopada. Usando a conta actual...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "conta non atopada.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Non se pode executar o comando externo: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH fall\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Ocurru algn erro enviando QUIT\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Non se pode conectar con o servidor SMTP: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "Conexin SSL fallida"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Ocurru un erro mentras se conectaba a %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Ocurru algn erro enviando HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Ocurru algn erro enviando STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Ocurru algn erro enviando EHLO\n"
+
+#~ msgid "Non"
+#~ msgstr "Non"
+
+#~ msgid "Getting the number of new messages (asT)..."
+#~ msgstr "Obtendo o nmero de novas mensaxes (asT)..."
+
+#~ msgid "Signature file"
+#~ msgstr "Ficheiro de sinatura"
+
+#~ msgid "No message file selected."
+#~ msgstr "Non se seleccionou ficheiro de mensaxe."
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 00000000..8e764f9d
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,6802 @@
+# Croatian translation of Sylpheed.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Ante Karamati <ivoks@cdnet.com.hr>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2001-09-17 13:22+0100\n"
+"Last-Translator: Ante Karamati <ante@cdnet.com.hr>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME je vlasnitvo Wernera Kocha <dd9jn@gnu.org>, (c) 2001.\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Ovaj program je slobodan software; moete ga redistribuirati i/ili mjenjati "
+"unutar pravila GNU General Public Licence kao to je objavljeno od strane "
+"Free Software Foundation-a; verzija 2, ili (po vlastition izboru) neka "
+"novija verzija.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Ovaj program distribuira se u nadi da e biti koristan, ali BEZ IKAKOVIH "
+"JAMSTVA; bez podrazumijevane garancije o PRODUKTIVNOSTI ili NAMJENI ZA "
+"ODREENU SVRHU. Vidite GNU General Public Licencu za vie detalja.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Uz ovaj program trebali ste dobiti i kopiju GNU General Public Licence; ako "
+"niste, piite ne Free Software Foundation, Inc., 59 Temple Place - Suite "
+"330, Boston, MA 02111-1307, SAD."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "U redu"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "itam konfiguracije za svaki raun...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Pronaena oznaka: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Neki prozori za pisanje pisma su otvoreni.\n"
+"Molim, zatvorite sve prozore prije ureivanja rauna."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Otvaram prozor za ureivanje rauna...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Stvaram prozor za ureivanje rauna...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Uredi raune"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nove poruke biti e provjerene ovim redom. Oznaite pod\n"
+"S one raune s kojih elite skinuti potu sa `Primi sve'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Ime"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Posluitelj"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Dodaj"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Uredi"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Obrii "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Dolje"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Gore"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Postavi kao uobiajeni raun "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zatvori"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Obrii raun"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "elite li usitinu obrisati ovaj raun?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Da"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Ne"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Ne mogu itati datoteku."
+
+#: src/action.c:359
+#, fuzzy
+msgid "Could not get message part."
+msgstr "Nema neproitanih poruka."
+
+#: src/action.c:376
+#, fuzzy
+msgid "Can't get part of multipart message"
+msgstr "Ne mogu dobiti dio viedjelne poruke."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+
+#: src/action.c:804
+#, fuzzy, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr "Ne mogu izvriti vanjsku naredbu: %s\n"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr ""
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr ""
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr ""
+
+#: src/action.c:1106
+#, fuzzy
+msgid " Send "
+msgstr "Poalji"
+
+#: src/action.c:1117
+#, fuzzy
+msgid "Abort"
+msgstr "O"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Unesite naredbu za ispis:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Unesite naredbu za ispis:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Dodaj adresu u adresar"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresa"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Biljeke"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Odaberite spis adresara"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Odustani"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Datoteka"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Datoteka/Nova _knjiga"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Datoteka/Nova _V-kartica"
+
+#: src/addressbook.c:338
+#, fuzzy
+msgid "/_File/New _JPilot"
+msgstr "/_Datoteka/Novi _J-Pilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Datoteka/Novi _posluitelj"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Datoteka/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Datoteka/_Uredi"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Datoteka/_Obrii"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Datoteka/_Spremi"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Datoteka/_Zatvori"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresa"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresa/Nova _adresa"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresa/Nova _grupa"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresa/Novi _spis"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresa/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresa/_Uredi"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresa/O_brii"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Alati"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Datoteka/Unesi _LDIF datoteku"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Pomo"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Pomo/_O"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nova _adresa"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nova _grupa"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Novi _spis"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Uredi"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Obrii"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-mail adresa"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adresar"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Ime:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Obrii"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Potrai"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Za:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Obrii adresu/e"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Uistinu obrisati adresu/e?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Ne"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"elite li obrisati spis I sve adrese u `%s' ? \n"
+"Ukoliko briete samo spis, adrese e biti premjetene u prethodni spis."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Samo spis"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Spis i adrese"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Uistinu obrisati `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Novi korisnik, ne mogu spretmiti index datoteku."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Novi korisnik, ne mogu spremiti datoteke adresara."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Stari adresar uspjeno uneen."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Stari adresar ne moe biti uneen,\n"
+"ne mogu spremiti novu index datoteku adresara."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Ne mogu unjeti adesar,\n"
+"ali sam kreirao nove prazne datoteke adresara."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Ne mogu unjeti adresar,\n"
+"ne mogu kreirati nove datoteke adresara."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Ne mogu unjeti adresar,\n"
+"i ne mogu stvoriti nove datoteke adresara."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Greka pri unosu adresara"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Unos adresara"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Greka adresara"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Ne mogu itati index adresara"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "Stari adresar uneen, ne mogu spremiti index datoteke novih adresa"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "Ne mogu unjeti adresar, kreiram prazne datoteke novog adresara."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "Ne mogu unjeti adresar, ne mogu kreirati nove datoteke adresara."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "Ne mogu unjeti adresar i ne mogu kreirati nove datoteke adresara."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Greka pri unosu adresara"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Unos adresara"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Suelje"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adresar"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Osoba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-mail adresa"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupa"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Spis"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "V-kartica"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+#, fuzzy
+msgid "JPilot"
+msgstr "J-Pilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Posluitelj"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Uobiajene adrese"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Osobne adrese"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Obavijest"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Upozorenje"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Greka"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Stvaram suelje za upozoravajui prozor...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Prikai ovu poruku slijedei put"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Naranasta"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Crvena"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Roza"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Nebesko plava"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Plava"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zelena"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Smea"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Nita"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Dodaj..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Ukloni"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/_Postavke..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Datoteka/_Spremi"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Poruka/Poalji _kasnije"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Poruka/Snimi u spis _nedovreno"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Poruka/Poalji _kasnije"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Datoeka/_Priloi datoteku"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Datoteka/_Unesi datoteku"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Datoteka/Unesi _potpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Uredi/_Undo"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Uredi/_Redo"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Uredi/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Uredi/R_ei"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Uredi/_Kopiraj"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Uredi/U_baci"
+
+#: src/compose.c:491
+#, fuzzy
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Uredi/U_baci"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Uredi/Odaberi _sve"
+
+#: src/compose.c:494
+#, fuzzy
+msgid "/_Edit/A_dvanced"
+msgstr "/_Uredi/_Undo"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr ""
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr ""
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr ""
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr ""
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr ""
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr ""
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr ""
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr ""
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr ""
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr ""
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr ""
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr ""
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr ""
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr ""
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Uredi/Sami _poglavlje"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Uredi/Sami sve duge _linije"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Uredi/_Kopiraj"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Pregled"
+
+#: src/compose.c:572
+#, fuzzy
+msgid "/_View/_To"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/compose.c:573
+#, fuzzy
+msgid "/_View/_Cc"
+msgstr "/_Pregled"
+
+#: src/compose.c:574
+#, fuzzy
+msgid "/_View/_Bcc"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/compose.c:575
+#, fuzzy
+msgid "/_View/_Reply to"
+msgstr "/_Pregled/_Znakovni standard"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Pregled/---"
+
+#: src/compose.c:577
+#, fuzzy
+msgid "/_View/_Followup to"
+msgstr "/_Poruka/P_roslijedi"
+
+#: src/compose.c:579
+#, fuzzy
+msgid "/_View/R_uler"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/compose.c:581
+#, fuzzy
+msgid "/_View/_Attachment"
+msgstr "Prilog"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+#, fuzzy
+msgid "/_Tools/_Address book"
+msgstr "/_Alat/_Adresar"
+
+#: src/compose.c:585
+#, fuzzy
+msgid "/_Tools/_Template"
+msgstr "/_Alat/_Obrazac"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+#, fuzzy
+msgid "/_Tools/Actio_ns"
+msgstr "/_Izvri"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+#, fuzzy
+msgid "/_Tools/---"
+msgstr "/_Alat"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Uredi/Uredi s _vanjskim ureivaem"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Izvri"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Poruka/_Kriptiraj"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: datoteka ne postoji\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Ne mogu dobiti dio tekst\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Greka formata citata."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Greka poruke odgovori/proslijedi."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Datoteka %s ne postoji\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Ne mogu dobiti veliinu datoteke %s\n"
+
+#: src/compose.c:1572
+#, fuzzy, c-format
+msgid "File %s is empty."
+msgstr "Datoteka %s je prazna\n"
+
+#: src/compose.c:1576
+#, fuzzy, c-format
+msgid "Can't read %s."
+msgstr "ne mogu kreirati %s\n"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Poruka: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ne mogu dobiti dio viedjelne poruke."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Ureeno]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Pisanje poruke%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Pisanje poruke%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Nije upisan primatelj."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Poalji"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr ""
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "ne mogu dobiti listu primatelja."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Raun za slanje pote nije definiran.\n"
+"Molim, odaberite raun prije slanja."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Dolo je do greke prilikom slanja poruke %s -u."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Ne mogu snimiti poruku u spis poslano."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "ne mogu promjeniti atribut datoteke\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr "Ne mogu promjeniti charset poruke."
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "ne mogu pisati zaglavlje\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "ne mogu ukloniti staru poruku\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "odlaem poruku...\n"
+
+#: src/compose.c:3063
+#, fuzzy
+msgid "can't find queue folder\n"
+msgstr "ne mogu odabrati spis: %s\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "ne mogu odloiti poruku\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generiran ID-poruke: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Stvaram prozor za pisanje...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME tip"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Veliina"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Od:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Poalji poruku"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Poalji kasnije"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Odloi u spis odloeno i poalji kasnije"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Nedovreno"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Spremi u spis nedovreno"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Unesi"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Unesi datoteku"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Priloi"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Priloi datoteku"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Potpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Unesi potpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Ureiva"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Uredi s vanjskim ureivaem"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Saimanje"
+
+#: src/compose.c:4229
+#, fuzzy
+msgid "Wrap all long lines"
+msgstr "/_Uredi/Sami sve duge _linije"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Pogrean MIME tip"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Datoteka ne postoji ili je prazna."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Postavke"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodiranje"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Staza"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Ime datoteke"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Naredba za vanjski ureiva je pogrena: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Vanjski ureiva jo uvijek radi.\n"
+"Ugasiti proces?\n"
+"grupa procesa: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Ugaena grupa procesa: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Privremena datoteka: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Napii: unos iz procesa motrenja\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Ne mogu pokrenuti vanjski ureiva\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Ne mogu pisati u datoteku\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "itanje pipe-a nije uspjelo\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Ne mogu odloiti poruku."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Odaberite datoteku"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Odbaci poruku"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Ova poruka je promijenjena, odbaciti?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Odbaci"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "u Nedovreno"
+
+#: src/compose.c:5395
+#, fuzzy, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Uistinu obrisati ovaj obrazac?"
+
+#: src/compose.c:5397
+#, fuzzy
+msgid "Apply template"
+msgstr "Brii obrazac"
+
+#: src/compose.c:5398
+#, fuzzy
+msgid "Replace"
+msgstr "Obrazac"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Uredi adresu"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Dodaj novu osobu"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Uredi detalje osobe"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "E-mail adresa nije upisana."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Ime i iznos moraju biti upisani."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Uredi osobne podatke"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Prikaz imena"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Prezime"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Ime"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Nadimak"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-mail adresa"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Pomakni gore"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Pomakni dolje"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Promjeni"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Poisti"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Iznos"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Osnovno"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributi korisnika"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Datoteka je U redu"
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Datoteka nije u formatu adresara."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Ne mogu itati datoteku."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Uredi adresar"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Provjeri datoteku "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Datoteka"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Dodaj Novi Adresar"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Ime grupe mora biti uneeno."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Uredi grupu"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Ime grupe"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adrese u grupi"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Dostupne adrese"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Pomaknite E-mail adrese prema ili od grupe sa strelicama"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Uredi detalje grupe"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Dodaj novu grupu"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Uredi spis"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Unesite ime novog spisa:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Novi spis"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Unesite ime novog spisa:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Datoteka nije JPilot formata."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Odaberite JPilot datoteku"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Uredite JPilot unos"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Dodatne pojedinosti e-Mail adrese"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Dodajte novi JPilot unos"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Uspjeno spojen na server"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Ne mogu se povezati na server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Uredi LDAP Posluitelj"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hostname"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Provjeri Posluitelj "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Baza potrage"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Kriterij potrage"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Ponovo "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind Lozinka"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Max. Unos"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Osnovno"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Produeno"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Novi LDAP Posluitelj"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Uredit LDAP - Odabir Baze Potrage"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Dostupne Baze"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Ne mogu itati Baze Potrage sa servera - molim postavite runo"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Datoteka nije V-kartica formata."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Odaberite V-kartica datoteku"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Uredite V-kartica unose"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Dodaj Novi V-kartica Unos"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Iznesi"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Odredite ciljani spis i mbox datoteku."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Izvorni dir:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Iznosim datoteku:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Odaberite... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Odaberite datoteku za iznoenje"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "neuspjeh pri pisanju konfiguracije u datoteku\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Odaberite spis"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Sandui"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+#, fuzzy
+msgid "Sent"
+msgstr "Poalji"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Odloeno"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Smee"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+#, fuzzy
+msgid "Drafts"
+msgstr "Nedovreno"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NoviSpis"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' ne moe biti ukljuen u ime spisa."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Spis `%s' ve postoji."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Ne mogu stvoriti spis `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Kreiraj _novi spis..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Preimenuj spis..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Obrii spis"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Isprazni smee"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+#, fuzzy
+msgid "/_Check for new messages"
+msgstr "Kreiranje nove pote"
+
+#: src/folderview.c:224 src/folderview.c:242
+#, fuzzy
+msgid "/R_ebuild folder tree"
+msgstr "/O_svjei stablo spisa"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Trai poruka..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Nema neproitanih poruka."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Pribiljei se na _news grupu..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Ukloni news _grupu"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Stvaram spisni pregled...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Novo"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Neproitano"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Postavljam info spisa...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Postavljam info spisa..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Pretraujem spise %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Pretraujem spis %s ..."
+
+#: src/folderview.c:707
+#, fuzzy
+msgid "Rebuild folder tree"
+msgstr "/O_svjei stablo spisa"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+#, fuzzy
+msgid "Rebuilding folder tree..."
+msgstr "Osvjeavam stablo spisa..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Osvjeavam stablo spisa..."
+
+#: src/folderview.c:741
+#, fuzzy
+msgid "Rebuilding all folder trees..."
+msgstr "Pretraujem sva stabla spisa..."
+
+#: src/folderview.c:818
+#, fuzzy
+msgid "Checking for new messages in all folders..."
+msgstr "Kreiranje nove pote"
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Spis %s je odabran\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "aljem poruku"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Dolo je do greke prilikom slanja poruke %s -u."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Unesite ime novog spisa:\n"
+"(ukoliko elite stvoriti spis za pohranjivanje podspisa,\n"
+"dodajte `/' na kraju imena)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Unesite novo ime za `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Preimenuj spis"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Svi spisi i poruke pod `%s' biti e obrisane.\n"
+"elite li ih uistinu obrisati?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Obrii spis"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Ne mogu premjestiti spis `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Isprazni smee"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Isprazniti sve poruke u smeu?"
+
+#: src/folderview.c:1996
+#, fuzzy, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Uistinu premjestiti spis `%s' ?\n"
+"(Poruke NEE biti obrisane s diska)"
+
+#: src/folderview.c:1998
+#, fuzzy
+msgid "Remove mailbox"
+msgstr "/_Ukloni sandui"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Uistinu obrisati `%s' IMAP4 raun?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Obrii IMAP4 raun"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Uistinu obrisati `%s' news grupu?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Obrii news grupu"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Uistinu obrisati `%s' news raun?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Obrii news raun"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Pribiljei se na news grupu"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Odaberite grupe za predbiljebu."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Nai grupe:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Trai "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "News grupa:"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Poruke"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tip"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Osvjei"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderirano"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "read only"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "nepoznato"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Ne mogu pronai listu news grupa."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Gotovo."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d news grupa primljeno (%s proitano)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "News grupe:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Tema:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Stvaram pregled zaglavlja...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Bez poiljatelja)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Bez teme)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Kreiram pregled slika...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Ne mogu prikazati sliku."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 veza prema %s:%d je pukla. Povezujem se ponovo...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "ostvarujem IMAP4 vezu prema %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr ""
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "ne mogu postaviti obrisane oznake: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "ne mogu obrisati\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "ne mogu postaviti obrisane oznake: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "ne mogu odabrati spis: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Oznaena datoteka ne postoji.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "dolo je do greke prilikom dobivanja LISTe.\n"
+
+#: src/imap.c:1842
+#, fuzzy, c-format
+msgid "Can't create '%s'\n"
+msgstr "ne mogu kreirati %s\n"
+
+#: src/imap.c:1847
+#, fuzzy, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "ne mogu kreirati %s\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "ne mogu kreirati sandui: LIST nije uspio\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "ne mogu kreirati sandui\n"
+
+#: src/imap.c:1997
+#, fuzzy, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "ne mogu kreirati sandui\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "ne mogu obrisati sandui\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "ne mogu dobiti omot\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "dolo je do greke prilikom dobivanja omota.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "ne mogu analizirati omot: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ne mogu se povezati s IMAP4 posluiteljom: %s%d\n"
+
+#: src/imap.c:2257
+#, fuzzy, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ne mogu se povezati s IMAP4 posluiteljom: %s%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "ne mogu dobiti namespace\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "ne mogu odabrati spis: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Autorizacija"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 login propao.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "ne mogu privrstiti %s na %s\n"
+
+#: src/imap.c:3366
+#, fuzzy
+msgid "(sending file...)"
+msgstr "aljem DATA..."
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "ne mogu obiljeiti poruku %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "ne mogu kopirati %d u %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "greka prilikom imap naredbe: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "greka prilikom imap naredbe: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "greka prilikom imap naredbe: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr ""
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr ""
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Uvezi"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Odredite ciljanu mbox datoteku i destinacijski spis."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Uvozim datoteku:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Destinacijski dir:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Odaberite datoteku za uvoz"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr ""
+
+#: src/importldif.c:124
+#, fuzzy
+msgid "File imported."
+msgstr "Ime datoteke"
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Molim, odaberite datoteku."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Ime adresara mora biti uneeno."
+
+#: src/importldif.c:333
+#, fuzzy
+msgid "Error reading LDIF fields."
+msgstr "Greka pri unosu LDIF datoteke."
+
+#: src/importldif.c:356
+#, fuzzy
+msgid "LDIF file imported successfully."
+msgstr "Stari adresar uspjeno uneen."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Odaberite LDIF datoteku"
+
+#: src/importldif.c:516
+#, fuzzy
+msgid "File Name"
+msgstr "Ime datoteke"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr ""
+
+#: src/importldif.c:558 src/importldif.c:607
+#, fuzzy
+msgid "LDIF Field"
+msgstr "Odaberite LDIF datoteku"
+
+#: src/importldif.c:559
+#, fuzzy
+msgid "Attribute Name"
+msgstr "Atributi korisnika"
+
+#: src/importldif.c:617
+#, fuzzy
+msgid "Attribute"
+msgstr "Atributi korisnika"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Odaberi"
+
+#: src/importldif.c:679
+#, fuzzy
+msgid "Address Book :"
+msgstr "Adresar"
+
+#: src/importldif.c:689
+#, fuzzy
+msgid "File Name :"
+msgstr "Ime datoteke"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr ""
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Unesi LDIF datoteku u Adresar"
+
+#: src/importldif.c:760
+#, fuzzy
+msgid "Prev"
+msgstr "Postav"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Slijedea"
+
+#: src/importldif.c:790
+#, fuzzy
+msgid "File Info"
+msgstr "Ime datoteke"
+
+#: src/importldif.c:791
+#, fuzzy
+msgid "Attributes"
+msgstr "Atributi korisnika"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr ""
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Primam nove poruke"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Standby"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Otkazano"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Primam"
+
+#: src/inc.c:531
+#, fuzzy, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Ukloni poruke sa posluitelja nakon primanja"
+
+#: src/inc.c:535
+#, fuzzy
+msgid "Done (no new messages)"
+msgstr "Nema neproitanih poruka"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Veza nije uspjela"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Identifikacija nije uspjela"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr ""
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (sek)"
+
+#: src/inc.c:609
+#, fuzzy, c-format
+msgid "Finished (%d new message(s))"
+msgstr "\t%d novih poruka\n"
+
+#: src/inc.c:612
+#, fuzzy
+msgid "Finished (no new messages)"
+msgstr "Nema neproitanih poruka"
+
+#: src/inc.c:621
+#, fuzzy
+msgid "Some errors occurred while getting mail."
+msgstr "Dolo je do greaka prilikom primanja pote."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "primam nove poruke s rauna %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Primam nove poruke"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Povezujem se na POP3 posluitelj: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Ne mogu se povezati na POP3 posluitelj: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Prijavljujem se..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Primam poruke sa %s u %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Primam broj novih poruka (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Primam broj novih poruka (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Primam broj novih poruka (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Primam veliinu poruka (LIST)..."
+
+#: src/inc.c:795
+#, fuzzy, c-format
+msgid "Deleting message %d"
+msgstr "Briem poruke"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Izlazim"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Primam poruke (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Ukloni poruke sa posluitelja nakon primanja"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Veza nije uspjela"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Dolo je do greke pri radu s potom."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Dolo je do greke pri radu s potom."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Nema vie mjesta na disku."
+
+#: src/inc.c:1097
+#, fuzzy
+msgid "Can't write file."
+msgstr "Ne mogu pisati u datoteku.\n"
+
+#: src/inc.c:1102
+#, fuzzy
+msgid "Socket error."
+msgstr "protokol greka\n"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+#, fuzzy
+msgid "Mailbox is locked."
+msgstr "Postavke sanduia"
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Postavke sanduia"
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Autorizacija"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Autorizacija"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+#, fuzzy
+msgid "Incorporation cancelled\n"
+msgstr "Prima novu potu"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Primam nove poruke s %s u %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Unesite lozinku za %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Unesite lozinku"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Zapis protokola"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Datoteka `%s' ve postoji.\n"
+"Ne mogu stvoriti spis."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread nije podran od glib-a.\n"
+
+#: src/main.c:246
+#, fuzzy
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG nije pravilno instaliran.\n"
+"OpenPGP podrka je onemoguena."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Upotreba: %s [OPCIJA]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresa] otvara prozor za pisanje"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive prima nove poruke"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all prima sve poruke sa svih rauna"
+
+#: src/main.c:408
+#, fuzzy
+msgid " --send send all queued messages"
+msgstr " --recive prikazuje broj poruka"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --recive prikazuje broj poruka"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --recive prikazuje broj poruka"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug debug nain"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help prikazuje ovu pomo i izlazi"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version prikazuje verziju i izlazi"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Pisanje poruke postoji. Uistinu prekinuti?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Odloene poruke"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Neke neposlane poruke su odloene. Izai odmah?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "drugi Sylpheed ve radi.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Datoteka/_Spis"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Datoteka/_Spis/Kreiraj _novi spis..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Datoteka/_Spis/_Preimenuj spis..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Datoteka/_Spis/_Obrii spis"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Datoteka/Dodaj _sandui..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Datoteka/Dodaj _sandui..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Ukloni sandui"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Datoteka/_Spis"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "Kreiranje nove pote"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "Kreiranje nove pote"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/O_svjei stablo spisa"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Datoteka/_Unesi mbox datoteku"
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Datoteka/_Izvezi u mbox datoteku..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Datotkea/Isprazni s_mee"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Datoteka/Spremi _kao..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Datoteka/Is_pii..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Datoteka/_Unesi datoteku"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Datoteka/I_zlaz"
+
+#: src/mainwindow.c:487
+#, fuzzy
+msgid "/_Edit/Select _thread"
+msgstr "/_Uredi/Odaberi _sve"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+#, fuzzy
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Uredi/P_ronai u poruci"
+
+#: src/mainwindow.c:491
+#, fuzzy
+msgid "/_Edit/_Search messages..."
+msgstr "/_Trai poruka..."
+
+#: src/mainwindow.c:494
+#, fuzzy
+msgid "/_View/Show or hi_de"
+msgstr "/_Pregled/Prikai s_vo zaglavlje"
+
+#: src/mainwindow.c:495
+#, fuzzy
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Pregled/_Stablo spisa"
+
+#: src/mainwindow.c:497
+#, fuzzy
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Pregled/_Pregled poruka"
+
+#: src/mainwindow.c:499
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Pregled/_Traka alata"
+
+#: src/mainwindow.c:501
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Pregled/_Traka alata/Slike i tekst"
+
+#: src/mainwindow.c:503
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Pregled/_Traka alata/_Slike"
+
+#: src/mainwindow.c:505
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Pregled/_Traka alata/_Tekst"
+
+#: src/mainwindow.c:507
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Pregled/_Traka alata/_Nita"
+
+#: src/mainwindow.c:509
+#, fuzzy
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Pregled/Stat_us traka"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Pregled/Odvoji sta_blo spisa"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Pregled/Odvoji pre_gled poruka"
+
+#: src/mainwindow.c:515
+#, fuzzy
+msgid "/_View/_Sort"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/mainwindow.c:516
+#, fuzzy
+msgid "/_View/_Sort/by _number"
+msgstr "/_Odravanje/Pos_loi/Posloi po _broju"
+
+#: src/mainwindow.c:517
+#, fuzzy
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Odravanje/Pos_loi/Posloi po _veliini"
+
+#: src/mainwindow.c:518
+#, fuzzy
+msgid "/_View/_Sort/by _date"
+msgstr "/_Odravanje/Pos_loi/Posloi po _datumu"
+
+#: src/mainwindow.c:519
+#, fuzzy
+msgid "/_View/_Sort/by _from"
+msgstr "/_Odravanje/Pos_loi/Posloi po _poiljatelju"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Odravanje/Pos_loi/Posloi po _veliini"
+
+#: src/mainwindow.c:521
+#, fuzzy
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Odravanje/Pos_loi/Posloi po _temi"
+
+#: src/mainwindow.c:522
+#, fuzzy
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Odravanje/Pos_loi/Posloi oznaci _boje"
+
+#: src/mainwindow.c:524
+#, fuzzy
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Odravanje/Pos_loi/Posloi po _oznaci"
+
+#: src/mainwindow.c:525
+#, fuzzy
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Odravanje/Pos_loi/Posloi po _neproitanom"
+
+#: src/mainwindow.c:526
+#, fuzzy
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Odravanje/Pos_loi/Posloi po _prilogu"
+
+#: src/mainwindow.c:528
+#, fuzzy
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Odravanje/Pos_loi/Posloi po _neproitanom"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+#, fuzzy
+msgid "/_View/_Sort/---"
+msgstr "/_Pregled/_Znakovni standard/---"
+
+#: src/mainwindow.c:530
+#, fuzzy
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/mainwindow.c:531
+#, fuzzy
+msgid "/_View/_Sort/Descending"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/mainwindow.c:533
+#, fuzzy
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Odravanje/Pos_loi/P_rivuci po temi"
+
+#: src/mainwindow.c:535
+#, fuzzy
+msgid "/_View/Th_read view"
+msgstr "/_Pregled/_Pregled poruka"
+
+#: src/mainwindow.c:536
+#, fuzzy
+msgid "/_View/E_xpand all threads"
+msgstr "Rairi stablo"
+
+#: src/mainwindow.c:537
+#, fuzzy
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Pregled/Prikai s_vo zaglavlje"
+
+#: src/mainwindow.c:538
+#, fuzzy
+msgid "/_View/Set display _item..."
+msgstr "/Odravanje/Postavi po_jedinosti prikaza"
+
+#: src/mainwindow.c:541
+#, fuzzy
+msgid "/_View/_Go to"
+msgstr "/_Pregled/_Znakovni standard"
+
+#: src/mainwindow.c:542
+#, fuzzy
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Odravanje/Idi pre_ma/_Prethodna poruka"
+
+#: src/mainwindow.c:543
+#, fuzzy
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Odravanje/Idi pre_ma/Slij_edea poruka"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+#, fuzzy
+msgid "/_View/_Go to/---"
+msgstr "/_Pregled/_Znakovni standard/---"
+
+#: src/mainwindow.c:545
+#, fuzzy
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Odravanje/Idi pre_ma/Prethodna _neproitana poruka"
+
+#: src/mainwindow.c:547
+#, fuzzy
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Odravanje/Idi pre_ma/_Slijedea neproitana poruka"
+
+#: src/mainwindow.c:550
+#, fuzzy
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Odravanje/Idi pre_ma/_Prethodna poruka"
+
+#: src/mainwindow.c:551
+#, fuzzy
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Odravanje/Idi pre_ma/Slij_edea poruka"
+
+#: src/mainwindow.c:553
+#, fuzzy
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Odravanje/P_rethodna oznaena poruka"
+
+#: src/mainwindow.c:555
+#, fuzzy
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Odravanje/Idi pre_ma/Slijedea _oznaena poruka"
+
+#: src/mainwindow.c:558
+#, fuzzy
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Odravanje/Idi pre_ma/Pre_thodna label poruka"
+
+#: src/mainwindow.c:560
+#, fuzzy
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Odravanje/Idi pre_ma/Slijedea _label poruka"
+
+#: src/mainwindow.c:563
+#, fuzzy
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Odravanje/_Idi u drugi spis..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Pregled/_Znakovni standard/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Pregled/_Znakovni standard"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Pregled/_Znakovni standard/_Auto detekcija"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Pregled/_Znakovni standard/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Pregled/_Znakovni standard/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Pregled/_Znakovni standard/Zapadna Europa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+#, fuzzy
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Pregled/_Znakovni standard/Zapadna Europa (ISO-8859-_1)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Pregled/_Znakovni standard/Srednja Europa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Pregled/_Znakovni standard/_Baltik (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Pregled/_Znakovni standard/Baltik (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Pregled/_Znakovni standard/Grka (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Pregled/_Znakovni standard/Turska (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Pregled/_Znakovni standard/irilica (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Pregled/_Znakovni standard/irilica (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Pregled/_Znakovni standard/irilica (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Pregled/_Znakovni standard/irilica (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Pregled/_Znakovni standard/Japan (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Pregled/_Znakovni standard/Japan (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Pregled/_Znakovni standard/Japan (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Pregled/_Znakovni standard/Japan (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Pregled/_Znakovni standard/Pojednostavljeni Kineski (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Pregled/_Znakovni standard/Tradicionalni Kineski (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Pregled/_Znakovni standard/Tradicionalni Kineski (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Pregled/_Znakovni standard/Kina (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Pregled/_Znakovni standard/Koreja (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Pregled/_Znakovni standard/Koreja (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Pregled/_Znakovni standard/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Pregled/_Znakovni standard/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Pregled/Otvori u novom _prozoru"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+#, fuzzy
+msgid "/_View/Mess_age source"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Pregled/Prikai s_vo zaglavlje"
+
+#: src/mainwindow.c:653
+#, fuzzy
+msgid "/_View/_Update summary"
+msgstr "/_Pregled/_Znakovni standard"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Poruka"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Pota/Pre_Uredi"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Pota/Primi potu sa _svih rauna"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Pota/Primi potu sa _svih rauna"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Poruka/Poalji _kasnije"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Pota/Pre_Uredi"
+
+#: src/mainwindow.c:664
+#, fuzzy
+msgid "/_Message/_Send queued messages"
+msgstr "/_Pota/Poalji _odloene poruke"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Poruka/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Pota/Kreiraj _novu poruku"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Pota/O_dgovori"
+
+#: src/mainwindow.c:669
+#, fuzzy
+msgid "/_Message/Repl_y to"
+msgstr "/_Poruka/O_dgovori"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+#, fuzzy
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Pota/Odgovori svi_ma"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+#, fuzzy
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Pota/Od_govori poiljatelju"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+#, fuzzy
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Pota/Odgovori svi_ma"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Pota/P_roslijedi"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+#, fuzzy
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Pota/Proslijedi _kao prilog"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+#, fuzzy
+msgid "/_Message/Redirec_t"
+msgstr "/_Pota/Pre_Uredi"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Pota/Prem_jesti..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Pota/Kopir_aj"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Pota/O_brii"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Pota/O_znai"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Pota/O_znai/_Oznai"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Pota/O_znai/_Ukloni oznaku"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Pota/O_znai/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Pota/O_znai/Oznai kao _neproitano"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Pota/O_znai/Oznai kao _proitano"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Pota/O_znai/Oznai sve _proitano"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Pota/Pre_Uredi"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+#, fuzzy
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/Dod_aj poiljatelja u adresar"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+#, fuzzy
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+#, fuzzy
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Odravanje/_Filtriraj potu"
+
+#: src/mainwindow.c:716
+#, fuzzy
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Odravanje/_Obrii duplicirane poruke"
+
+#: src/mainwindow.c:719
+#, fuzzy
+msgid "/_Tools/E_xecute"
+msgstr "/_Izvri"
+
+#: src/mainwindow.c:721
+#, fuzzy
+msgid "/_Tools/_Log window"
+msgstr "/_Alat/Zapisni prozor"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Konfiguracija"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Konfiguracija/U_obiajene postavke..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Konfiguracija/Postavke _filtera..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Konfiguracija/_Obrazac..."
+
+#: src/mainwindow.c:729
+#, fuzzy
+msgid "/_Configuration/_Actions..."
+msgstr "/_Konfiguracija/_Uredi raune..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Konfiguracija/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Konfiguracija/_Postavke za trenutni raun..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Konfiguracija/Kreiraj _novi raun..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Konfiguracija/_Uredi raune..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Konfiguracija/Promjeni _trenutni raun"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Pomo/_Prirunik"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Pomo/_Prirunik/_Japanski"
+
+#: src/mainwindow.c:744
+#, fuzzy
+msgid "/_Help/_FAQ"
+msgstr "/_Pomo/_O"
+
+#: src/mainwindow.c:745
+#, fuzzy
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:746
+#, fuzzy
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:747
+#, fuzzy
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr ""
+
+#: src/mainwindow.c:749
+#, fuzzy
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Pomo/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Kreiram glavne prozore...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: prikaz boje %d nije uspio\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "gotovo.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Neimenovano"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "nita"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr ""
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Isprazni smee"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Isprazniti sve poruke u smeu?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Dodaj sandui"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Unesite lokaciju sanduia.\n"
+"Ako je uneen postojei sandui, biti e\n"
+"automatski pretraen."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Sandui `%s' ve postoji."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Sandui"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Kreiranje sanduia propalo.\n"
+"Moda neke datoteke ve postoje ili nemate pravo pisanja u direktoriju."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr ""
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr ""
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/Od_govori"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odgovara svima"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Odgovor_i poiljatelju"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Odgovori svi_ma"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/Prosli_jedi"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+#, fuzzy
+msgid "/For_ward as attachment"
+msgstr "/Proslijedi kao prilo_g"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+#, fuzzy
+msgid "/Redirec_t"
+msgstr "/Pre-_uredi"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Primi"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Prima novu potu"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Primi sve"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Prima novu potu sa svih rauna"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "alje odloene poruke"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Kreiraj"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Kreiranje nove pote"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odgovori"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odgovara na poruku"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odgovori s."
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odgovara svima"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Proslijedi"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Prosljeuje poruku"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Brie poruke"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Izvri"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Izvrava oznaene procese"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Slijedea neproitana poruka"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Postav"
+
+#: src/mainwindow.c:2238
+#, fuzzy
+msgid "Common preferences"
+msgstr "Uobiajene postavke"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Raun"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Postavke rauna"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Izlaz"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Izlaz iz ovog programa?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "ne mogu pisati u privremenu datoteku\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Primam poruke sa %s u %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "ne mogu itati mbox datoteku.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "pogrean mbox format: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "pokvaren mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "ne mogu otvoriti privremenu datoteku\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"neizbjean Od pronaen:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d poruka pronaeno.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "ne mogu kreirati lock datoteku %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "koristi 'flock' umjesto 'file' ako je mogue.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "ne mogu kreirati %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "neki drugi proces koristi sandui, ekam...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "ne mogu zakljuati %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "neispravan tip zakljuavanja\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "ne mogu otkljuati %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "ne mogu skratiti sandui na nulu.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Izvozim poruke iz %s u %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Pronai u trenutnoj poruci"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Pronai tekst:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Osjetljiv na velika/mala slova"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Potraga unatrake"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Potraga"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Polje potrage"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Zadani uzorak nije pronaen."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Poetak liste dosegnut; nastaviti od kraja?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Kraj liste dosegnut; nastaviti od poetka?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Potraga zavrena"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Kreiram pregled poruka...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Spremi kao"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Prepii"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Prepisati postojeu datoteku?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, fuzzy, c-format
+msgid "Can't save the file `%s'."
+msgstr "Ne mogu premjestiti spis `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Ispii"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Unesite naredbu za ispis:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Naredba za ispis je pogrena:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "ne mogu kopirati poruku %s u %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Ne mogu otvoriti oznaenu datoteku.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "izvorni spis jednak je destinaciji.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopiram poruke %s%c%d u %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Posljednji broj u direktoriju %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Otvori"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Otvori _s..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Prikai kao _tekst"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/S_premi kao"
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Pro_vjeri potpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Stvaram MIME pregled...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME tip"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+#, fuzzy
+msgid "Attachments"
+msgstr "Prilog"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Odaberite \"Provjeri potpis\" za provjeru"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Ne mogu spremiti dio viedjelne poruke"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Otvori s"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Unesite naredbu za otvaranje datoteke:\n"
+"(`%s' je sinonim za ime datoteke)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Naredba MIME preglednika nije ispravna: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "uspostavljam NNTP vezu s %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP veza s %s:%d je pukla. Povezujem ponovo...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "lanak %d ve je pohranjen.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "primam lanak %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "ne mogu proitati lanak %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "ne mogu primiti listu news grupa\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "ne mogu poslati lanak.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "ne mogu primiti lanak %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "ne mogu odabrati grupu %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "pogrean opseg lanaka: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "nema novih lanaka.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "primam xover %d - %d u %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "ne mogu dobiti xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "dolo je do greke prilikom dobivanja xovera.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "pogrena xover linija: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "ne mogu dobiti xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "dolo je do greke prilikom dobivanja xhdra.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Ne mogu uspostaviti vezu s NNTP posluiteljem: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokol greka: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokol greka\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Dolo je do greke prilikom slanja\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Dolo je do greke pri radu s potom."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Lozinka"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[nema ID korinika]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sMolim unesite lozink za:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Pogrena lozinka! Pokuajte ponovo...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Nuni APOP timestamp nije pronaen u pozdravu\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Syntax greka u timestampu kod pozdrava\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protokol greka\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "pogrena xover linija: %s\n"
+
+#: src/pop.c:621
+#, fuzzy, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "Briim duplicirane poruke..."
+
+#: src/pop.c:629
+#, fuzzy, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "aljem poruku (%d / %d bytea)"
+
+#: src/pop.c:660
+#, fuzzy
+msgid "mailbox is locked\n"
+msgstr "Postavke sanduia"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+#, fuzzy
+msgid "can't start TLS session\n"
+msgstr "Korsiti STARTTLS naredbu za pokretanje SSL-a"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "greka prilikom ovjeravanja\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Naredba"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "greka prilikom ovjeravanja\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "itam konfiguraciju...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Pronaen %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Zavrio itanje konfiguracije.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguracija je spremljena.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Primjeni"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Otvaram prozor za postavke rauna...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Raun%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Postavke za novi raun"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Postavke rauna"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Kreiram prozor za postvake rauna...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Primanje"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privatnost"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Napredno"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Ime ovog rauna"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Postavi kao uobiajeni"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Osobne informacije"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Puno ime"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-mail adresa"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacija"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informacije o posluitelju"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Nita (lokalno)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ovaj server zahtijeva autorizaciju"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "News posluitelj"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Posluitelj za primanje"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP posluitelj (slanje)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "ID korisnika"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Lozinka"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Ovaj server zahtijeva autorizaciju"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Ukloni poruke sa posluitelja nakon primanja"
+
+#: src/prefs_account.c:1007
+#, fuzzy
+msgid "Remove after"
+msgstr "Ukloni spis"
+
+#: src/prefs_account.c:1016
+#, fuzzy
+msgid "days"
+msgstr "Uvijek"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr ""
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Primi sve poruke sa posluitelja"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr ""
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtriraj poruke pri primanju"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Uobiajeni sandui"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nefiltrirane poruke biti e spremljene u ovaj spis)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+#, fuzzy
+msgid "Authentication method"
+msgstr "Autorizacija"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr ""
+
+#: src/prefs_account.c:1125
+#, fuzzy
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Primi sve' uzima potu s ovog rauna"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Zaglavlje"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dodaj polje Datum u zaglavlje"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generiraj ID poruke"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Dodatna zaglavlja"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Uredi... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autorizacija"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP autorizacija (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autoriziraj s POP3 prije slanja"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Naredba"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Automatski postavi slijedee adrese"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Odvovori-Na"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Uvijek kriptiraj poruke"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Uvijek potpii poruke"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr ""
+
+#: src/prefs_account.c:1453
+#, fuzzy
+msgid "Use clear text signature"
+msgstr "Unesi potpis"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Klju potpisa"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Koristi uobiajeni GnuPG klju"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Odaberi klju po e-mail adresi"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Neki drugi klju"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ID kljua ili korisnika:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Ne koristi SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Koristi SSL za POP3 veze"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Korsiti STARTTLS naredbu za pokretanje SSL-a"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Koristi SSL za IMAP4 veze"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr ""
+
+#: src/prefs_account.c:1635
+#, fuzzy
+msgid "Use SSL for NNTP connection"
+msgstr "Koristi SSL za SMTP veze"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Slanje (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Koristi SSL za SMTP veze"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Specificirani SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Specificirani POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Specificirani IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Specificirani NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Specificirano ime domene"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Direktorij IMAP posluitelja"
+
+#: src/prefs_account.c:1853
+#, fuzzy
+msgid "Put sent messages in"
+msgstr "Spremi poslane poruke u poslano"
+
+#: src/prefs_account.c:1855
+#, fuzzy
+msgid "Put draft messages in"
+msgstr "Sami poruke na"
+
+#: src/prefs_account.c:1857
+#, fuzzy
+msgid "Put deleted messages in"
+msgstr "Obrii poruku/e"
+
+#: src/prefs_account.c:1917
+#, fuzzy
+msgid "Account name is not entered."
+msgstr "E-mail adresa nije upisana."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "E-mail adresa nije upisana."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP posluitelj nije upisan."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "ID korisnika nije upisan."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 posluitelj nije upisan."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 posluitelj nije upisan."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP posluitelj nije upisan."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Piem konfiguraciju filtera...\n"
+
+#: src/prefs_actions.c:190
+#, fuzzy
+msgid "Menu name:"
+msgstr "Puno ime"
+
+#: src/prefs_actions.c:199
+#, fuzzy
+msgid "Command line:"
+msgstr "Naredba"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "Obrazac"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr ""
+
+#: src/prefs_actions.c:288
+#, fuzzy
+msgid "Registered actions"
+msgstr "Registrirani obrasci"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Novo)"
+
+#: src/prefs_actions.c:464
+#, fuzzy
+msgid "Menu name is not set."
+msgstr "Ime zaglavlja nije postavljeno."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr ""
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr ""
+
+#: src/prefs_actions.c:488
+#, fuzzy
+msgid "Command line not set."
+msgstr "Ime zaglavlja nije postavljeno."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr ""
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+
+#: src/prefs_actions.c:559
+#, fuzzy
+msgid "Delete action"
+msgstr "Obrii raun"
+
+#: src/prefs_actions.c:560
+#, fuzzy
+msgid "Do you really want to delete this action?"
+msgstr "elite li usitinu obrisati ovaj raun?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Stvaram prozor za uobiajene postavke...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Uobiajene postavke"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Prikaz"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Pota"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Drugo"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Vanjski program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Koristi vanjski program za prihvat"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Naredba"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokalni spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Prihvati sa spoola"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtriraj pri prihvaanju"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Auto-provjera nove pote"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "svakih"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuta"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Provjeri potu prilikom starta"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Osvjei sve spise poslije prihvaanja"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maksimalni broj lanaka za skidanje\n"
+"(0 je za neogranieno)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Koristi vanjski program za slanje"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Spremi poslane poruke u poslano"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Izlazni charset"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatsko (preporueno)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Zapadno-Europski (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+#, fuzzy
+msgid "Western European (ISO-8859-15)"
+msgstr "Zapadno-Europski (ISO-8859-1)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Srednje-Europski (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Blatiki (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Blatiki (ISO'8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grki (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turski (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "irilica (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "irilica (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "irilica (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "irilica (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japanski (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japanski (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japanski (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Pojednostavljeni Kineski (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradicionalni Kineski (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradicionalni Kineski (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Kineski (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korejski (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Ako je `Automatski' odabrano, optimalni charset\n"
+"za locale e biti koriten."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "Sami prije slanja"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Razdjelnik potpisa"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Ubaci automatski"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automatski pokreni vanjski ureiva"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr ""
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Sami poruke na"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znakova"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Sami citat"
+
+#: src/prefs_common.c:1353
+#, fuzzy
+msgid "Wrap on input"
+msgstr "/_Uredi/Sami sve duge _linije"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Sami prije slanja"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automatski odaberi raun pri odgovaranju"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citiraj poruku pri odgovaranju"
+
+#: src/prefs_common.c:1369
+#, fuzzy
+msgid "Reply button invokes mailing list reply"
+msgstr "/Odgovori svi_ma"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Format odgovora"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Oznaka citata"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Format prosljeivanja"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Objanjenje simbola "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Font"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Prevedi ime zaglavlja (kao to su `Od:' i `Tema:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Prikai broj neproitanih poruka kraj imena spisa"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr ""
+
+#: src/prefs_common.c:1598
+#, fuzzy
+msgid "letters"
+msgstr "Obrii"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Pregled odravanja"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Prikai primatelja na `Od' ukoliko ste Vi autor"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Rairi stablo"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Format datuma"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Postavi pojedinosti prikaza... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Omogui poruke u boji"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Prikai 2-byte abecedu i brojeve s 1-byte znakovima"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Prikai zaglavlje iznad poruke"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Prikai kratko zaglavlje na pregledu poruka"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Razmak linija"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(a)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Ostavi prostora na poetku"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Scroll"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Pola stranice"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Miran scroll"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Korak"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automatski provjeri potpis"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Prikai potpis u popup prozoru"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr ""
+
+#: src/prefs_common.c:1884
+#, fuzzy
+msgid "Expired after"
+msgstr "Poalji kasnije"
+
+#: src/prefs_common.c:1897
+#, fuzzy
+msgid "minute(s) "
+msgstr "minuta"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Uhvati unos pri upisivanju lozinke"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Prikai upozorenje na startu ako GnuPG ne radi"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "poruka nee biti primljena\n"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Otvori prvu neproitanu poruku pri ulasku u spis"
+
+#: src/prefs_common.c:1984
+#, fuzzy
+msgid "Only mark message as read when opened in new window"
+msgstr "/_Pota/O_tvori u novom prozoru"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Idi u sandui nakon primanja pote"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Izvri odmah pri premjetanju ili brisanju poruka"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Poruke e samo biti oznaene do izvrenja\n"
+" ako je ovo iskljueno)"
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "Prikai dijalog primanja"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Prikai dijalog primanja"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Uvijek"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nikada"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr ""
+
+#: src/prefs_common.c:2040
+#, fuzzy
+msgid "Close receive dialog when finished"
+msgstr "Prikai dijalog primanja"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr ""
+
+#: src/prefs_common.c:2102
+#, fuzzy, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Vanjski ureiva (%s predstavlja ime datoteke)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr ""
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Dodaj adresu u destinaciju kada se dva put klikne"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Na izlazu"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potvrdi izlaz"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Isprazni smee pri izlazu"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Pitaj prije pranjenja"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Upozori ako ima odloenih poruka"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "pojednostavljeno ime tjedna"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "puno ime tjedna"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "skraeno ime mjeseca"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "puno ime mjeseca"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "eljeni datum i vrijeme za trenutni locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "broj stoljea (godina/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dan u mjesecu kao decimalni broj"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "sat kao decimalni broj koristei 24 satno vrijeme"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "sat kao decimalni broj koristei 12 satno vrijeme"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dan u godini kao decimalni broj"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "mjesec kao decimalni broj"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minute kao decimalni broj"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AP ili PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekunde kao decimalni broj"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "dan u tjednu kao decimalni broj"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "eljeni datum za trenutni locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "posljednje dvije znamenke godine"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "godina kao decimalni broj"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "vremenska zona"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Oznaitelj"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Opis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Primjer"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Postavi boje poruka"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Boje"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citirani tekst - prvi stupanj"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citirani tekst - drugi stupanj"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citirani tekst - trei stupanj"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI poveznice"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Cikliki mijenjaj boje citata"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Odaberite boju za citat 1. stupnja"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Odaberite boju za citat 2. stupnja"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Odaberite boju za citat 3. stupnja"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Odaberite boju za URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Obajnjenje znakova"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Od\n"
+"Puno ime poiljatelja\n"
+"Ime poiljatelja\n"
+"Inicijali poiljatelja\n"
+"Tema\n"
+"Za\n"
+"Cc\n"
+"News grupe\n"
+"ID poruke"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Ako je x odabrano, prikazuje expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Odabir fonta"
+
+#: src/prefs_common.c:3011
+#, fuzzy
+msgid "Key bindings"
+msgstr "aljem"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+#, fuzzy
+msgid "Default"
+msgstr "Uobiajeni sandui"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr ""
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Postaljvanje odreenog zaglavlja"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Odreeno zaglavlje"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Ime zaglavlja nije postavljeno."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Obrii zaglavlje"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Uistinu obrisati ovo zaglavlje?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Kreiram prozor postavki zaglavlja...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Prikaz postavki zaglavlja"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Ime zaglavlja"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Prikazana zaglavlja"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skrivena zaglavlja"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Prikai sva nedefinirana zaglavlja"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "itam konfiguraciju za prikaz zaglavlja...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Piem konfiguraciju za prikaz zaglavlja...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Ovo zaglavlje je ve na listi."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Postavke filtera"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Za:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Kopiraj..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Obrii pravilo"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Uistinu obrisati pravilo?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Obrii pravilo"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Svo zaglavlje"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Pota"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "sadri"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "ne sadri"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Pomakni dolje"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Kopiraj..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ne primaj"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Obrii spis"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Biljeke"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Postavi boje poruka"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Oznai/Oznai kao _proitano"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Proslijedi kao prilo_g"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Pre-_uredi"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Izvri"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Spis"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adresa"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Nije upisan primatelj."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Ime zaglavlja nije postavljeno."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Destinacija nije postavljena."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Ime zaglavlja nije postavljeno."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: datoteka ne postoji\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Postavke"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr ""
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr ""
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr ""
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:352
+#, fuzzy
+msgid "Reply-To:"
+msgstr "Odvovori-Na"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Oznaka"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Prilog"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Tema"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Broj"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Kreiram prozor za postavke prikaza...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Postavke pojedinosti prikaza"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Odaberite pojedinosti za prikaz. Moete modificirati poredak\n"
+"koristei Gore / Dolje tipke, ili povlaenjem miem."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Dostupne pojedinosti"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Prikazane pojedinosti"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Vrati na uobiajeno "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Ime obrasca"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Unesi"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Zamjeni "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Simboli "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrirani obrasci"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Obrasci"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Obrazac"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Greka formata obrasca."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Brii obrazac"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Uistinu obrisati ovaj obrazac?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Promjena koda nije uspjela.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "ne mogu otvoriti obiljeenu datoteku\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "ne mogu dohvatiti poruku %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Slanje odloene poruke %d nije uspjelo.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Naredba za ispis nije dobra: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Kreiram dijalog napretka...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "dolo je do greke prilikom prihvaanja podataka.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Ne mogu pisati u datoteku.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Upss: Potpis nije potvren"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Nema potpisa"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Dobar potpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "LO potpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nema javnog kljua za potvrdu potpisa"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Greka pri potvrivanju potpisa"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Razliiti rezultati za potpise"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Greka: Nepoznat status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Dobar potpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, fuzzy, c-format
+msgid "BAD signature from \"%s\""
+msgstr "LO potpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Ne mogu nai ID korisnika za ovaj klju."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, fuzzy, c-format
+msgid "Signature made at %s\n"
+msgstr "Potpis napravio/la %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Otisak kljua: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Molim, odaberite klju za `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Primam info za `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Odaberite kljueve"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID kljua"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Oznaka"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Dodaj klju"
+
+#: src/select-keys.c:445
+#, fuzzy
+msgid "Enter another user or key ID:"
+msgstr "Upiite drugi ID kljua ili korisnika\n"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Zaglavlje odloene poruke je loe.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Povezujem se"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Spajam se na SMTP posluitelj: %s ..."
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "Autorizacija"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "aljem poruku"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "aljem"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "aljem RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "aljem DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Zavravam..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "aljem poruku (%d / %d bytea)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "aljem poruku"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Dolo je do greke prilikom slanja poruke."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Dolo je do greke prilikom slanja poruke."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Postavke sanduia"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Prvo, morate postaviti lokaciju sanduia.\n"
+"Moete koristiti postojei u MH fomratu\n"
+"ako imate jedan.\n"
+"Ako niste sigurni, odaberite U redu."
+
+#: src/sigstatus.c:129
+#, fuzzy
+msgid "Checking signature"
+msgstr "/Pro_vjeri potpis"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+#, fuzzy
+msgid "SMTP AUTH not available\n"
+msgstr "TLSv1 nije dostupan\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "greka prilikom ovjeravanja\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Kreiram prozor izvora...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Izvorna poruka"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Prikazujem izvor od %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Izvor"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 nije dostupan\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 dostupan\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 nije dostupan\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 dostupan\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL metoda nije dostupna\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Nepoznata SSL metoda *BUG PROGRAMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Greka pri kreiranju ssl konteksta\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL veza propala (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL veza koristei %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certifikat posluitelja:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Tema: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Izdava: %s\n"
+
+#: src/summary_search.c:106
+#, fuzzy
+msgid "Search messages"
+msgstr "/_Trai poruka..."
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Automatski postavi slijedee adrese"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Tijelo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Odaberi sve"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Poetak liste dosegnut; nastaviti od kraja?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Kraj liste dosegnut; nastaviti od poetka?"
+
+#: src/summaryview.c:341
+#, fuzzy
+msgid "/Repl_y to"
+msgstr "/Odgovori svi_ma"
+
+#: src/summaryview.c:342
+#, fuzzy
+msgid "/Repl_y to/_all"
+msgstr "/Odgovori svi_ma"
+
+#: src/summaryview.c:343
+#, fuzzy
+msgid "/Repl_y to/_sender"
+msgstr "/Odgovor_i poiljatelju"
+
+#: src/summaryview.c:344
+#, fuzzy
+msgid "/Repl_y to/mailing _list"
+msgstr "/Odgovori svi_ma"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Premjesti..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopiraj..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Oznai"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Oznai/_Oznai"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Oznai/_Ukloni oznaku"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Oznai/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Oznai/Oznai kao _neproitano"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Oznai/Oznai kao _proitano"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Oznai/Oznai sve _proitano"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Oznaka _boje"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Pre-_uredi"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Dod_aj poiljatelja u adresar"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Pregled/Prikai s_vo zaglavlje"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Is_pii"
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Ne."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Kreiram pregled odravanja...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Izvri oznaku"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Neke oznake su izostavljene. Izvriti ih?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Pregledavam spis (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Nema neproitanih poruka"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nema vie neproitanih poruka. Traiti od kraja?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Nema neproitanih poruka."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Nema vie neproitanih poruka. Nastaviti u slijedei spis?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+#, fuzzy
+msgid "Search again"
+msgstr "Polje potrage"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+#, fuzzy
+msgid "No more new messages"
+msgstr "Nema neproitanih poruka"
+
+#: src/summaryview.c:978
+#, fuzzy
+msgid "No new message found. Search from the end?"
+msgstr "Nema vie neproitanih poruka. Traiti od kraja?"
+
+#: src/summaryview.c:987
+#, fuzzy
+msgid "No new messages."
+msgstr "Nema neproitanih poruka."
+
+#: src/summaryview.c:1002
+#, fuzzy
+msgid "No new message found. Go to next folder?"
+msgstr "Nema vie neproitanih poruka. Nastaviti u slijedei spis?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Nema vie oznaenih poruka"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Nema vie oznaenih poruka. Nastaviti od kraja?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Nema oznaenih poruka."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Nema oznaenih poruka. Traiti od poetka?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Nema vie label poruka"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Nema label poruka. Traiti od kraja?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Nema label poruka."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nema label poruka. Krenuti od poetka?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Prihvaam poruke po temi..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d obrisano"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d premjeteno"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopirano"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " jedinica odabrano"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novih, %d neproitanih, %d ukupno (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novih, %d neproitanih, %d ukupno"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Slaem pregled..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tPostavljam pregled od podataka poruke..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Postavljam pregled od podataka poruke..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Piem pohranu pregleda (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Nema Datuma)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Poruka %d je oznaena\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Poruka %d je oznaena kao proitana\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Poruka %d je oznaena kao neproitana\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Poruka %s/%d oznaena je za brisanje\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Obrii poruku/e"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "elite li uistinu obrisati poruke iz smea?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Briim duplicirane poruke..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Poruka %s/%d je neoznaena\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Poruka %d je oznaena za premjetanje u %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Destinacija je ista kao i trenutni spis."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Poruka %d je oznaena za kopiranje u %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Destinacija za kopiranje je ista kao i trenutni spis."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Odabirem sve poruke..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Dolo je do greke pri radu s potom."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Izgraujem stablo..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Rasipavam..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Rasipavam za izvrenje..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtriram..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtriranje..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "poruka %d ve je prihvaena.\n"
+
+#: src/template.c:169
+#, fuzzy, c-format
+msgid "file %s already exists\n"
+msgstr "datoteka %s ve postoji\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Kreiram pregled teksta...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "poruka nee biti primljena\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Za spremanje ovog dijela, podignite menu konteksta s "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "desnim klikom i odaberite `Spremi kao...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ili pritisnite `y tipku.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Za prikaz ovog dijela kao tekst, odaberite "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Prikai kao tekst' ili pritisnite `t' tipku.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Za prikaz ovog dijela s vanjskim programom, odaberite "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Otvori' ili `Otvori s...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ili dva put kliknite, ili kliknite srednju tipku, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ili pritisnite tipku `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Ovaj potpis jo nije provjeren.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Za prvojeru, podignite kontekst menu s\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "desnom tipkom i odaberite `Provjeri potpis'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "pisanje u %s nije uspjelo.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Ne mogu otvoriti datoteku %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normalni)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_Ukloni sandui"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Ukloni _IMAP4 raun"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Ukloni news _raun"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Poruka/_Poalji"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Poruka/Potp_ii"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "nema poruka u lokalnom sanduiu.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spool direktorij"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Citat"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Odaberite... "
+
+#, fuzzy
+#~ msgid "Condition"
+#~ msgstr "/_Konfiguracija"
+
+#~ msgid "Keyword"
+#~ msgstr "Kljuna rije"
+
+#~ msgid "Destination"
+#~ msgstr "Destinacija"
+
+#~ msgid "Use regex"
+#~ msgstr "Korsiti regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrirana pravila"
+
+#~ msgid "(none)"
+#~ msgstr "(nita)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Otvori URI naredba nije ispravna: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Pohranjeni podaci su pokvareni\n"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Odravanje/_Filtriraj potu"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Odravanje/_Filtriraj potu"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Odravanje/_Filtriraj potu"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Odravanje/_Filtriraj potu"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Odravanje/_Filtriraj potu"
+
+#~ msgid "Queueing"
+#~ msgstr "Odlaem"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Dolo je do greke prilikom slanja poruke.\n"
+#~ "Odloiti poruku u spis odloeno?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Odloene poruke koje nisu poslane"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Izvri"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Oda_beri sve"
+
+#, fuzzy
+#~ msgid "/Select t_hread"
+#~ msgstr "/Oda_beri sve"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "ne mogu postaviti grupu: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "poruka nee biti primljena\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Pota/Primi novu _potu"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNema datoteke pohrane\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\titam pohranu odravanja..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Pohranjena verzije je drugaija. Odbacujem.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Oznaena datoteka ne postoji.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Oznaena verzija je drugaija (%d != %d). Odbacujem.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Ne mogu otvoriti oznaenu poruku.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Ne mogu otvoriti oznaenu datoteku.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "ne mogu kreirati lock datoteku %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "prazan spis\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Samo ako je prozor aktivan"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "pozicija prozora: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Postavljam widgete..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Premjetam poruke %s%c%d u %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tOznaujem poruku..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d novih poruka\n"
+
+#, fuzzy
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "ne mogu obrisati sandui\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "primam poruku %d...\n"
+
+#, fuzzy
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Briem pohranjene poruke %d - %d ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Briem sve pohranjene poruke... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Brojim konani broj poruka...\n"
+
+#, fuzzy
+#~ msgid "Could not get message file."
+#~ msgstr "Ne mogu itati datoteku."
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Dolo je do greke pri radu s potom."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Dolo je do greke prilikom slanja odloenih poruka."
+
+#~ msgid "Predicate"
+#~ msgstr "Predikat"
+
+#, fuzzy
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Kreiram prozor postavki filtera...\n"
+
+#, fuzzy
+#~ msgid "Actions setting"
+#~ msgstr "Postavke rauna"
+
+#, fuzzy
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "itam konfiguraciju...\n"
+
+#, fuzzy
+#~ msgid "Action command error\n"
+#~ msgstr "protokol greka\n"
+
+#, fuzzy
+#~ msgid "Socket error\n"
+#~ msgstr "protokol greka\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Raun nije pronaen. Koristim trenutni raun...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Raun nije pronaen.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Ne mogu izvriti vanjsku naredbu: %s\n"
+
+#, fuzzy
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "TLSv1 nije dostupan\n"
+
+#, fuzzy
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Dolo je do greke prilikom slanja EHLO\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Ne mogu se povezati na SMTP posluitelj: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL veza propala"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Dolo je do greke prilikom povezivanja na %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Dolo je do greke prilikom slanja HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Dolo je do greke prilikom slanja STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Dolo je do greke prilikom slanja EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Datoteka potpisa"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Kreiram prozor za postavke odreenog zaglavlja...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "itam konfiguraciju odreenog zaglavlja...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Piem konfiguraciju odreenog zaglavlja...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Kreiram prozor postavki filtera...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "itam konfiguraciju filtera...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Piem konfiguraciju filtera...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tTraim nepohranjene poruke... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d nepohranjenih poruka pronaeno.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tSlaem nepohranjene poruke po rednom broju... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "forsirani charset: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Omogui horizontalnu scroll traku"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Prikai neproitane poruke podebljano"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Potraga zavrena"
+
+#~ msgid "Done"
+#~ msgstr "Gotovo"
+
+#, fuzzy
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "Kreiranje nove pote"
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Datoteka/_Osvjei stablo spisa"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): datoteka %s ve postoji."
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d podie obrazac od %s\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d ita dir obrazaca %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s:%d naao datoteku %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s nije obina datoteka\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d pie obrazac \"%s\" za %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Stalni klju potpisa"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "spremam poslanu poruku...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "ne mogu spremiti poruku\n"
+
+#, fuzzy
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Kreiram dijalog napretka...\n"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Stvaram zapisni prozor...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Briem pohranjene lanke 1 - %d ..."
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tBriem sve pohranjene lanke..."
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dijelovi uzeti iz fetchmail-a vlasnitvo su Erica S. Raymonda, (c) 1997. "
+#~ "Dijelovi tih su takoer vlasnitvo Carla Harrisa, (c) 1993. i 1995. "
+#~ "Autorska prava su zadrana zbog zatite slobodne distribucije izvornog "
+#~ "koda.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc je vlasnitvo Yasuhiro Tonookae <tonooka@msi.co.jp>, a libkcc je "
+#~ "vlasnitvo takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "ne mogu locirati memoriju\n"
+
+#, fuzzy
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/_Pregled/_Pregled poruka"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s ve postoji."
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Uistinu obrisati spis `%s'?"
+
+#, fuzzy
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "Dolo je do greke prilikom slanja\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Alat"
+
+#~ msgid "Outbox"
+#~ msgstr "Poslano"
+
+#, fuzzy
+#~ msgid "Skipping message %d\n"
+#~ msgstr "primam poruku %d...\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Stvaram prozor za zaglavlje...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Prikazujem zaglavlje od %s ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Svo zaglavlje"
+
+#, fuzzy
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/_Pregled/_Pregled poruka"
+
+#, fuzzy
+#~ msgid " Apply "
+#~ msgstr "Primjeni"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Vanjski pretraiva (%s predstavlja URI)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "Ispis (%s predstavlja ime datoteke)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "Idi u %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "Operator"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Poruka/_Za"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Poruka/_Cc"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Poruka/_Bcc"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Poruka/Pri_loi"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Alat/Prikai _ravnalo"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/O_svjei stablo spisa"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/_Uredi/_Pretrai spis"
+
+#~ msgid "Search folder"
+#~ msgstr "Trai spis"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "Sami poglavlje"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/Dod_aj poiljatelja u adresar"
+
+#~ msgid "/_Summary"
+#~ msgstr "/_Odravanje"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/_Odravanje/I_zvri"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/_Odravanje/O_svjei"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/_Odravanje/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/_Odravanje/Idi pre_ma"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/_Odravanje/Idi pre_ma/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/_Odravanje/Pos_loi"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/_Odravanje/Pos_loi/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/_Odravanje/_Thread pregled"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/_Odravanje/_Unthread pregled"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "News grupa `%s' ve postoji."
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "Unesite ime grupe:"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Proslijeena poruka:\n"
+#~ "\n"
+
+#~ msgid "Usually used"
+#~ msgstr "Uglavnom koriten"
+
+#~ msgid "Program path"
+#~ msgstr "Staza programa"
+
+#~ msgid "Quotation format:"
+#~ msgstr "Format citata:"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "Osvjeavam sve spise..."
+
+#~ msgid "Set display item"
+#~ msgstr "Postavi pojedinosti prikaza"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 00000000..a21bd54b
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,6338 @@
+# Hungarian translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Szkely Kriszitn <szekelyk@different.hu>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-07-26 22:58-0100\n"
+"Last-Translator: Zahemszky Gbor <Gabor@Zahemszky.HU>\n"
+"Language-Team: Hungarian <gnome-hu@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Nvjegy"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"A GPGME (2001) szerzi joga Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Ez a program szabad szoftver. n tovbbadhatja s/vagy mdosthatja a Szabad "
+"Szoftver Alaptvny ltal kiadott GNU General Public License (ltalnos "
+"Nyilvnos Liszensz) 2. verzijban (vagy vlasztsa szerint) brmely jabb "
+"verziban foglaltak szerint.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Ezt a programot abban a remnyben terjesztjk, hogy hasznos, de mindennem "
+"GARANCIA NLKL. Rszletesen errl a GNU General Public License-ben "
+"(ltalnos Nyilvnos Liszensz) olvashat.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"A programmal egytt meg kellett kapnia a GNU General Public License "
+"(ltalnos Nyilvnos Liszensz) egy pldnyt. Amennyiben nem gy trtnt, "
+"akkor beszerezhet a Szabad Szoftver Alaptvnytl. Free Software Foundation "
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. http://www."
+"fsf.org "
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Rendben"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Belltsok beolvassa az sszes hozzfrshez...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "A tallt cmke: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Nhny szerkeszt ablak nyitva van.\n"
+"Krlek zrd be az ablakokat a hozzfrsek mdostsa eltt!"
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Hozzfrsek szerkesztablaknak megnyitsa...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Hozzfrsek szerkesztablaknak ltrehozsa...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Hozzfrsek szerkesztse"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Az j zeneteket ebben a sorrendben fogom ellenrizni. A 'Minden zenet "
+"letltse'\n"
+"funkci bekapcsolshoz vlaszd ki a 'G' oszlopban a jelldobozt!"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nv"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Szerver"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Hozzads"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Szerkeszts"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Trls"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Le"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Fel"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Alaprtelmezett hozzfrsknt bellt "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Bezrs"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Hozzfrs trlse"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Tnyleg trljem ezt a hozzfrst?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Igen"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nem"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "zenetfjl %d nem hozzfrhet."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "zenetrsz nem hozzfrhet."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Egy tbbrszes zenet egy darabja nem hozzfrhet."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"A kivlasztott mvelet nem alkalmazhat szerkesztablakban\n"
+"mert tartalmaz %%f-t, %%F-t vagy %%p-t."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"A parancsot nem sikerlt elindtani. Csvezetk ltrehozsa sikertelen.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"A kvetkez parancs futtatshoz szksges processz ltrehozsa nem "
+"sikerlt:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- %s futtatsa\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- %s befejezdtt\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Mvelet bemenete/kimenete"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Klds"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Megszakts"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Add meg a kvetkez mvelet paramtert:\n"
+"(`%%h' a paramterrel helyettestdik)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "A mvelet rejtett felhasznli paramtere"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Add meg a kvetkez mvelet paramtert:\n"
+"(`%%u' a paramterrel helyettestdik)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "A mvelet felhasznli paramtere"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Cm hozzadsa a cmlisthoz"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Cm"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Megjegyzsek"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Cmjegyzk mappa vlaszts"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Mgsem"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Fjl"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Fjl/j cm_jegyzk"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Fjl/j _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Fjl/j _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Fjl/j _Szerver"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Fjl/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Fjl/_Szerkeszts"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Fjl/_Trls"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Fjl/_Ments"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Fjl/_Bezrs"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Cm"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Cm/j _cm"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Cm/j cso_port"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Cm/j _mappa"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Cm/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Cm/_Szerkeszts"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Cm/_Trls"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Eszkzk"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Eszkzk/_LDIF fjl import"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Segtsg"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Segtsg/_Nvjegy"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/j _cm"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/j cso_port"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/_j Mappa"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Szerkeszts"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Trls"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-Mail cm"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Cmjegyzk"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nv:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Trls"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Elnzet"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Cmzett:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Msolat:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Titkos msolat:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Cm(ek) trlse"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Tnyleg trljem a cm(ek)et?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nem"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Tnyleg trlni akarod a(z) `%s' mappt S az sszes cmet benne? \n"
+"Ha csak a mappt trld, a cmek tkerlnek a szl mappba."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Csak mappa"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Mappa s cmek"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "`%s'-t biztos trljem?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Az j felhasznl nem tudja menteni az index fjlt."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Az j felhasznl nem tudja menteni a cmjegyzk fjlt."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "A rgi cmjegyzk konvertlsa sikerlt."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"A rgi cmjegyzk konvertlva,\n"
+"nem sikerlt menteni az j cm index fjlt."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Nem sikerlt a cmjegyzk konvertlsa,\n"
+"de ltrehoztam egy res j cmjegyzket."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Nem sikerlt a cmjegyzk konvertlsa,\n"
+"s nem sikerlt az j cmjegyzk ltrehozsa sem."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Nem sikerlt a cmjegyzk konvertlsa,\n"
+"s nem sikerlt az j cmjegyzk ltrehozsa sem."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Cmjegyzk konvertlsi hiba"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Cmjegyzk konvertlsa"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Cmjegyzk hiba"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Cm index olvassa nem sikerlt"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"A rgi cmjegyzk konvertlva, nem sikerlt menteni az j cm index fjlt."
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Nem konvertlhat a cmjegyzk, de ltrehoztam egy j res cmjegyzket."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Nem konvertlhat a cmjegyzk, s nem hozhat ltre j cmjegyzk sem."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Nem konvertlhat a cmjegyzk, s nem hozhat ltre j cmjegyzk sem."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Cmjegyzk konverzis hiba"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Cmjegyzk konverzi"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Illeszt"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Cmjegyzk"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Szemly"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-mail cm"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Csoport"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Mappa"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Szerver"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "ltalnos cm"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Szemlyes cm"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Megjegyzs"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Figyelmeztets"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Hiba"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Figyelmeztetpanel dialgus ltrehozsa...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Mutasd ezt az zenetet legkzelebb"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Narancs"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Vrs"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rzsaszn"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "gsznkk"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Kk"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zld"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Barna"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Semmi"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Hozzads..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Eltvolts"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Tulajdonsgok..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Fjl/_Ments"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_zenet/Klds ksbb"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_zenet/Ments _vzlatknt"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_zenet/Ments s marad _szerkesztsben"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Fjl/Fjl _csatolsa"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Fjl/Fjl _beszrsa"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Fjl/_Al瘢rs beszrsa"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Szerkeszts/_Visszavons"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Szerkeszts/_Ismtls"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Szerkeszts/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Szerkeszts/_Kivgs"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Szerkeszts/_Msols"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Szerkeszts/_Beilleszts"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Szerkeszts/_Beilleszts idzetknt"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Szerkeszts/Mindet kijelli"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Szerkeszts/_Halad"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/S_zerkeszts/_Halad/Karakter mozgatsa visszafel"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/S_zerkeszts/_Halad/Karakter mozgatsa elrefel"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/S_zerkeszts/_Halad/Sz mozgatsa visszafel"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/S_zerkeszts/_Halad/Sz mozgatsa elrefel"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/S_zerkeszts/_Halad/Sor elejre mozgats"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/S_zerkeszts/_Halad/Sor vgre mozgats"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/S_zerkeszts/_Halad/Elz sorba mozgats"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/S_zerkeszts/_Halad/Kvetkez sorba mozgats"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/S_zerkeszts/_Halad/Karakter trlse visszafel"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/S_zerkeszts/_Halad/Karakter trlse elrefel"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/S_zerkeszts/_Halad/Sz trlse visszafel"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/S_zerkeszts/_Halad/Sz trlse elrefel"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/S_zerkeszts/_Halad/Sor trlse"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/S_zerkeszts/_Halad/Trls sor vgig"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Szerkeszts/Aktulis bekez_ds trse"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/__Szerkeszts/Minden hossz _sor trse"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Szerkeszts/_Msols"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Nzet"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Nzet/_Cmzett"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Nzet/_Msolat"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Nzet/_Titkos msolat"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Nzet/_Vlasz"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Nzet/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Nzet/_Nyomkvets"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Nzet/V_onalz"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Nzet/_Csatols"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Eszkzk/_Cmjegyzk"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Eszkzk/_Sablon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Eszkzk/_Akcik"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Eszkzk/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/__Szerkeszts/Szerkeszts _kls programmal"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Eszkzk/_Akcik"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_zenet/_Titkost"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: fjl nem ltezik\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Nem tudtam olvasni a szvegrszt\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Idzet jells formtum hiba."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "zenet vlasz/tovbbts formtum hiba."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "%s fjl nem ltezik\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "%s mrete nem meghatrozhat\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "A %s fjl res."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "%s nem olvashat."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "zenet: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Egy tbb rszes zenet egy darabja nem hozzfrhet."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Szerkesztett]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - zenet rsa%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "zenet rsa%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Nincs cmzett."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Klds"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "A levl trgya res. Ennek ellenre elkldd?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "cmzett lista nem hozzfrhet."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nincs megadva hozzfrs a levl kldshez.\n"
+"Krek vlassz ki egy hozzfrst klds eltt!"
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Hiba lpett fel a %s-nak kldend zenet kldse kzben."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Az zenet nem menthet a kimen mappba."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Nem talltam hozzrendelt kulcsot a kivlasztott kulcs azonosthoz `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "fjl mdja nem vltoztathat\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Nem tudom konvertlni az zenet kdkszlett\n"
+"%s-rl %s-ra.\n"
+"Elkldjem ennek ellenre?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "fejlc nem rhat\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "a rgi zenetet nem tudom eltvoltani\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "zenet a Vrakoz sorba...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "nem tallom a Vrakoz sor mappjt\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Az zenetet nem sikerlt a Vrakoz sorba rakni\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generlt zenet-azonost: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Szerkesztablak ltrehozsa...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME tpus"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Mret"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Felad:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "zenet kldse"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Klds ksbb"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "zenet a Vrakoz sorba, klds ksbb"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Vzlat"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Ments a vzlat mappba"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Beszrs"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Fjl beszrsa"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Csatols"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Fjl csatolsa"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Al瘢rs"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Al瘢rs beillesztse"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Szerkeszt"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Szerkeszts kls programmal"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Sortrs"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Az sszes hossz sor trse"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "rvnytelen MIME tpus."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "A fjl nem ltezik vagy res."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Tulajdonsgok"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kdols"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Elrsi t"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Fjlnv"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Kls szerkeszt parancssora rvnytelen: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"A kls szerkeszt mg dolgozik.\n"
+"Processz kilvse?\n"
+"processz csoport azonost: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "A lelltott processz csoport azonostja: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Ideiglenes fjl: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Szerkeszts: bemenet a monitoroz processzbl\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Kls szerkeszt nem indthat\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Nem tudok a fjlba rni\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Hiba trtnt a csvezetk olvassa kzben\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Az zenetet nem sikerlt a Vrakoz sorba rakni"
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Fjl vlaszts"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "zenet elvetse"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Az zenet megvltozott. Eldobjam?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Elvet"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "vzlatok kz"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Tnyleg alkalmazni akarod a `%s' sablont?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Sablon alkalmazsa"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Helyettest"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Cm szerkesztse"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "j szemly hozzadsa"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Szemly tulajdonsgainak szerkesztse"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Egy E-mail cmet meg kell adni."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Nevet s rtket kell adni."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Szemly adatainak szerkesztse"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nv kijelzse"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Vezetknv"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Keresztnv"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Becenv"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-mail cm"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "lnv"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Mozgats fel"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Mozgats le"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Mdost"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Trl"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "rtk"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Alap adatok"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Felhasznl tulajdonsgai"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "A fjl jnak tnik."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "A fjl nem tnik rvnyes cmjegyzknek."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "A fjl nem olvashat."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Cmjegyzk szerkesztse"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Fjl ellenrzse"
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fjl"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "j cmjegyzk hozzadsa"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Egy csoportnevet meg kell adni."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Csoportadatok szerkesztse"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Csoportnv"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Cmek a csoportban"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Elrhet cmek"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "E-mail cmek mozgatsa csoportbl vagy csoportba a nyilakkal"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Csoport tulajdonsgainak szerkesztse"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "j csoport hozzadsa"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Mappa szerkesztse"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "A mappa j neve:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "j mappa"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Az j mappa neve:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "A fjl nem tnik JPilot formtumnak."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "JPilot fjl vlasztsa"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "JPilot bejegyzs szerkesztse"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Tovbbi E-mail cmek"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "j JPilot bejegyzs hozzadsa"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Sikeresen kapcsoldtam a szerverhez"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Nem tudtam kapcsoldni a szerverhez"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "LDAP szerver szerkesztse"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Gpnv"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Szerver ellenrzs"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Keress bzisa"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Keressi kritrium"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Nullzs "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind jelsz"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Idtllps (sec)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maximlis bejegyzsek"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Alap"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Kiterjesztett"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "j LDAP szerver hozzadsa"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP szerkeszts - Keressi bzis vlaszts"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Elrhet keressi bzis(ok)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Keressi bzis(ok) nem olvashat(k) a szerverrl - krem kzzel belltani"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "A fjl nem tnik vCard formtumnak."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "vCard fjl kivlasztsa"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "vCard bejegyzs szerkesztse"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "j vCard bejegyzs hozzadsa"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportls"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Adj meg cl mappt s mbox fjlt!"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Forrs mappa:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Export fjlba:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Kivlaszt... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Exportland fjl vlaszts"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "a belltsokat nem tudtam elmenteni\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Mappa vlasztsa"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Bejv"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Kimen"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Vrakoz"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Kuka"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Vzlatok"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "j mappa"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' nem tehet a mappanvbe."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "`%s' mappa mr ltezik."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "`%s' nem hozhat ltre."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/j _mappa ltrehozsa..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/Mappa t_nevezse..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/Mappa _trlse"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Kuka rtse"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_j zenetek ellenrzse"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/_Mappafa jraptse"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_zenetek keresse..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Nincs olvasatlan zenet.."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Hrcsoport _elfizetse..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Hrcsoport e_ltvoltsa"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Mappa nzet ltrehozsa...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "j"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Olvasatlan"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Mappa informci belltsa...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Mappa informci belltsa..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "%s%c%s mappa tvizsglsa..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "%s mappa tvizsglsa..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Mappafa jraptse"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Mappafa jraptse..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Mappafa jraptse..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Az sszes mappafa jraptse..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "j zenetek keresse minden mappban..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "%s mappa kivlasztva\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "zenet kldse ..."
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Hiba lpett fel a %s-nak kldend zenet kldse kzben."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Krem az j mappa nevt:\n"
+"(Ha egy almappkat tartalmaz mappt szeretnl ltrehozni,\n"
+"akkor tegyl egy `/'-t a nv vgre)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Krem `%s' j nevt:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Mappa tnevezse"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"`%s' minden mappja s zenete trldik.\n"
+"Tnyleg ezt akarod?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Mappa trlse"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "`%s' nem tvolthat el."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Kuka rtse"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Minden zenet trlse a kukbl?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"`%s' postaldt tnyleg eltvoltsam?\n"
+"(Az zenetek NEM trldnek a meghajtrl)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Postalda eltvoltsa"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Tnyleg trljem a(z) `%s' IMAP4 hozzfrst?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "IMAP4 hozzfrs trlse"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "`%s' hrcsoportot tnyleg trljem?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Hrcsoport trlse"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "`%s' hr hozzfrst tnyleg trljem?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Hr hozzfrs trlse"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Feliratkozs hrcsoportra"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Hrcsoport vlasztsa feliratkozshoz."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Csoportok keresse:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Keress "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Hrcsoport nv"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "zenetek"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tpus"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Frissts"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderlt"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "csak olvashat"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Nem tudom olvasni a hrcsoportok listjt."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Ksz."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d hrcsoportot megkaptam (%s olvasott)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Hrcsoportok:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Trgy:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Fejlc nzet ltrehozsa...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Nincs Felad)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Nincs Trgy)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Kp nzet ltrehozsa...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Nem tudom betlteni a kpet ."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "Az IMAP4 kapcsolat %s fel megszakadt. jrakapcsolds...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "%s:%d IMAP4 kapcsolat ltrehozsa ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Nem tudok TLS menetet indtani.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "nem tudom belltani a trlt jelzst: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "nem tudom trlni\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "nem tudom belltani a trlt jelzst: 1:%d\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "mappa bezrsa nem sikerlt\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Kijellt fjl nem tallhat.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "hiba trtnt a LISTA lekrdezse kzben.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "'%s' nem hozhat ltre\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "'%s' nem hozhat ltre a BEJV mappa alatt\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "nem tudom ltrehozni a postaldt: LISTA sikertelen\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "nem tudom ltrehozni a postaldt\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "nem tudtam a postaldt tnevezni %s-rl, %s-ra\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "nem tudom trlni a postaldt\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "a bortkot nem tudtam megszerezni\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "hiba trtnt a bortk fogadsa kzben.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "nem tudom rtelmezni a bortkot: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "%s:%d IMAP4 szerverhez nem tudok kapcsoldni\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "IMAP4 szerverhez nem sikerlt kapcsoldni: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "nvtr nem elrhet\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "%s mappa kivlasztsa nem sikerlt\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "Az IMAP4 azonosts nem sikerlt.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 bejelentkezs sikertelen.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "%s hozzfzse %s-hoz nem sikerlt\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(fjl kldse...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "%s hozzfzse %s-hoz nem sikerlt\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "%s nem msolhat %s-ba\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "hiba az IMAP parancs kzben: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "hiba az IMAP parancs kzben: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "hiba az IMAP parancs kzben: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "az iconv nem tud UTF-7-bl %s-ba konvertlni\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "az iconv nem tud %s-t UTF-7-re konvertlni\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importls"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Krem a clfjlt s a clmappt!"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Fjl importls:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Clknyvtr:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Importland fjl vlasztsa"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Add meg a cmjegyzk mappa s fjl nevt az importlshoz!"
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "LDIF meznevek kivlasztsa s tnevezse az importhoz."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fjl importlva."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Krlek vlassz fjlt!"
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Cmjegyzk nevet meg kell adni!"
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Hiba az LDIF mezk olvassakor."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF fjl importlsa sikerlt."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "LDIF fjl vlaszts"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Fjlnv"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF mez"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Tulajdonsg nv"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Tulajdonsg"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Vlaszt"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Cmjegyzk:"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Fjlnv:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Rekordok:"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "LDIF fjl importlsa a cmjegyzkbe"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Elz"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Kvetkez"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Fjl informci"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Tulajdonsgok"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Vge"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "j zenetek fogadsa"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Kszenlt"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Megszaktva"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Fogads"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Befejezdtt (%d zenet (%s) fogadott)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Befejezdtt (nincs j zenet)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Kapcsolat megszakadt"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Azonosts nem sikerlt"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zrolt"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Idtllps (sec)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Vge (%d db j zenet)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Ksz (nincs j zenet)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Hiba trtnt az E-mailek fogadsakor."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "%s hozzfrsrl az j zenetek letltse...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: j zenetek fogadsa"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Kapcsolds a %s POP3 szerverhez ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Nem sikerlt kapcsoldni a POP3 szerverhez: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Azonosts..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "zenetek fogadsa %s-bl..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "j zenetek szmnak megszerzse (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "j zenetek szmnak megszerzse (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "j zenetek szmnak megszerzse (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "j zenetek mretnek megszerzse (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "zenet trlse %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Kilps"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "zenet vtele (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "zenetek fogadsa (%d zenet (%s) fogadott)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Kapcsolat megszakadt."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Hiba az E-mail feldolgozsa kzben."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Hiba az E-mail feldolgozsa kzben:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Nincs tbb szabad hely a lemezen."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Nem tudok a fjlba rni."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Socket hiba."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "A tloldal bezrta a kapcsolatot."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "A postafik zrolt."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"A postafik zrolt:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Az azonosts nem sikerlt."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Az azonosts nem sikerlt:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "kapcsolat idtllpse\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Egyests megszaktva\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "j zenetek megszerzse %s-tl %s-ba...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Krem %s jelszavt a %s szerveren:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Krem a jelszt"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protokoll napl"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"`%s' fjl mr ltezik.\n"
+"Mappa nem hozhat ltre."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread-et a glib nem tmogatja.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"A GnuPG nincs megfelelen teleptve, vagy tl rgi verzi.\n"
+"OpenPGP tmogats kikapcsolva."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Hasznlat: %s [OPCI]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [cm] szerkesztablak megnyitsa"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fjl1 [fjl2]...\n"
+" szerkesztablak nyitsa a megadott fjl(ok)\n"
+" csatolsval"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive j zenetek vtele"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all j zenetek vtele minden hozzfrsrl"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send minden vrakoz levl kldse"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [mappa]... zenetek szmnak kijelzse"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [mappa]...\n"
+" az sszes mappa sttusznak kijelzse"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug hibakeres zemmd"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help e segtsg megjelentse s kilps"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version verzi informcik kirsa s kilps"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "zenet szerkeszts alatt. Tnyleg kilpsz?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Vrakoz zenetek"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Vannak elkldetlen zenetek. Kilps most?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "Egy msik Sylpheed mr fut.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Fjl/_Mappa"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Fjl/_Mappa/_j mappa ltrehozsa..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Fjl/_Mappa/Mappa t_nevezse..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Fjl/_Mappa/Mappa _Trlse"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Fjl/_Postalda hozzadsa..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Fjl/_Postalda hozzadsa..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Postalda eltvoltsa"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Fjl/_Mappa/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_j zenetek ellenrzse"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Fjl/_Mappa/_j zenetek ellenrzse az sszes mappban"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Mappafa jraptse"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Fjl/Mbox fjl _importlsa..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Fjl/Mbox fjl _exportlsa..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Fjl/_Kuka rtse"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Fjl/_Ments msknt..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Fjl/_Nyomtats..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Fjl/Fjl _beszrsa"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Fjl/_Kilps"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Szerkeszts/zenet_folyam kivlasztsa"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Szerkeszts/_Keress az aktulis zenetben..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Szerkeszts/_zenetek keresse..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Nzet/_Megjelent vagy elrejt"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Nzet/_Megjelent vagy elrejt/Mappa_fa"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_zenet nzet"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_Eszkzsv"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_Eszkzsv/Ikon s Szveg"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_Eszkzsv/_Ikon"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_Eszkzsv/_Szveg"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_Eszkzsv/Se_mmi"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Nzet/_Megjelent vagy elrejt/_llapotsor"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Nzet/_Kln mappa fa"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Nzet/Kln z_enetnzet"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Nzet/_Rendezs"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Nzet/_Rendezs/_Szm szerint"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Nzet/_Rendezs/_Mret szerint"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Nzet/_Rendezs/_Dtum szerint"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Nzet/_Rendezs/_Felad szerint"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Nzet/_Rendezs/_Cmzett szerint"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Nzet/_Rendezs/_Trgy szerint"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Nzet/_Rendezs/S_znes cmke szerint"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Nzet/_Rendezs/_Jells szerint"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Nzet/_Rendezs/_Olvasatlan szerint"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Nzet/_Rendezs/Cs_atols szerint"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Nzet/_Rendezs/Nem _rendez"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Nzet/_Rendez/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Nzet/_Rendezs/_Nvekv"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Nzet/_Rendezs/_Cskken"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Nzet/_Rendezs/_Trgyhoz vonz"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Nzet/_zenetfolyam nzet"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Nzet/_Minden zenetfolyam kifejtse"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Nzet/_Minden zenetfolyam bezrsa"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Nzet/K_ijelzett cikk bellts..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Nzet/_Ugrs"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Nzet/_Ugrs/_Elz zenethez"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Nzet/_Ugrs/_Kvetkez zenethez"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Nzet/_Ugrs/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Nzet/_Ugrs/_Elz olvasatlan zenethez"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Nzet/_Ugrs/_Kvetkez olvasatlan zenethez"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Nzet/_Ugrs/_Elz j zenethez"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Nzet/_Ugrs/_Kvetkez j zenethez"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Nzet/_Ugrs/_Elz megjellt zenethez"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Nzet/_Ugrs/_Kvetkez megjellt zenethez"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Nzet/_Ugrs/_Elz cmkzett zenethez"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Nzet/_Ugrs/_Kvetkez cmkzett zenethez"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Nzet/_Ugrs/_Msik _mapphoz"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Nzet/_Kdkszlet/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Nzet/_Kdkszlet"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Nzet/_Kdkszlet/_Automatikus felismers"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Nzet/_Kdkszlet/7 bites ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Nzet/_Kdkszlet/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Nzet/_Kdkszlet/Nyugat-Eurpai (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Nzet/_Kdkszlet/Nyugat-Eurpai (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Nzet/_Kdkszlet/Kzp-Eurpai (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Nzet/_Kdkszlet/_Baltikumi (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Nzet/_Kdkszlet/Baltikumi (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Nzet/_Kdkszlet/Grg (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Nzet/_Kdkszlet/Trk (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Nzet/_Kdkszlet/Cirill (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Nzet/_Kdkszlet/Cirill (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Nzet/_Kdkszlet/Cirill (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Nzet/_Kdkszlet/Cirill (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Nzet/_Kdkszlet/Japn (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Nzet/_Kdkszlet/Japn (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Nzet/_Kdkszlet/Japn (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Nzet/_Kdkszlet/Japn (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Nzet/_Kdkszlet/Egyszerstett Knai (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Nzet/_Kdkszlet/Tradicionlis Knai (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Nzet/_Kdkszlet/Tradicionlis Knai (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Nzet/_Kdkszlet/Knai (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Nzet/_Kdkszlet/Koreai (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Nzet/_Kdkszlet/Koreai (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Nzet/_Kdkszlet/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Nzet/_Kdkszlet/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Nzet/Me_gnyits j ablakban"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Nzet/_zenet forrsa"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Nzet/_Minden fejlc megjelentse"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Nzet/_sszegzs frisstse"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_zenet"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_zenet/_Szerkeszts jra"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_zenet/Fog_ads minden hozzfrsrl"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_zenet/Fog_ads minden hozzfrsrl"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_zenet/Fo_gads megszaktsa"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_zenet/_Szerkeszts jra"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_zenet/_zenetek kldse a Vrakoz sorbl"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_zenet/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_zenet/_j zenet szerkesztse"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_zenet/V_lasz"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_zenet/_Vlasz msnak"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_zenet/Vlasz _msnak/ _Mindenkinek"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_zenet/Vlasz _msnak/A _feladnak"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_zenet/Vlasz _msnak/_Levelez listnak"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_zenet/_Tovbbts"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_zenet/Tovbbts _csatolsknt"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_zenet/_tirnyt"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_zenet/M_ozgats..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_zenet/_Msols..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_zenet/_Trls"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_zenet/_Megjell"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_zenet/_Megjell/_Megjell"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_zenet/_Megjell/Megjells visszavonsa"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_zenet/_Megjell/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_zenet/_Megjell/Mint olvasatla_n"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_zenet/_Megjell/Mint olvaso_tt"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_zenet/_Megjell/_Minden olvasottat"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_zenet/_Szerkeszts jra"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Eszkzk/_Kld cmt a cmlistba"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Eszkzk/_zenetek szrse"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Eszkzk/_zenetek szrse"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Eszkzk/_Szrsi szablyok"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Eszkzk/_Szrsi szablyok/_Automatikusan"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Eszkzk/_Szrsi szablyok/_Felad alapjn"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Eszkzk/_Szrsi szablyok/_Cmzett alapjn"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Eszkzk/_Szrsi szablyok/_Trgy alapjn"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Eszkzk/_Dupliklt levelek trlse"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Eszkzk/_Futtats"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Eszkzk/_Napl ablak"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Belltsok"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Belltsok/Kzs _Belltsok..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Belltsok/_Szr belltsok..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Belltsok/_Sablon..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Belltsok/_Akcik..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Belltsok/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Belltsok/Aktulis _hozzfrs belltsai..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Belltsok/_j hozzfrs ltrehozsa..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Belltsok/Hozzfrs _szerkesztse..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Belltsok/_Aktulis hozzfrs vltsa..."
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Segtsg/_Kziknyv"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Segtsg/Kziknyv/_Angol"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Segtsg/Kziknyv/_Japn"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Segtsg/_GYIK"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Segtsg/_GYIK/_Angol"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Segtsg/_GYIK/_Nmet"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Segtsg/_GYIK/_Spanyol"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Segtsg/_GYIK/_Francia"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Segtsg/_GYIK/_Olasz"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Segtsg/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Fablak ltrehozsa...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Fablak: %d szn foglalsa nem sikerlt\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "ksz.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Nvtelen"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "semmi"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Ablak elvlaszts tpus vltoztatsa %d-rl, %d-ra\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Kuka rtse"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Minden zenet trlse a kukbl?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Postalda hozzadsa"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Krem a postalda helyt!\n"
+"Ha mr ltezik a postalda, akkor\n"
+"automatikusan tvizsglom."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "A `%s' postalda mr ltezik."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Postalda"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"A postalda ltrehozsa nem sikerlt.\n"
+"Taln nhny fjl mr ltezik, vagy nincs rsi jogod."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Mappa nzet"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - zenet nzet"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Vlasz"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Vlasz mindenkinek"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/_Vlasz msnak/a _feladnak"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/_Vlasz msnak/_levelezlistnak"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Tovbbts"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Csatolsknt tovbbt"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/tirny_t"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Fogads"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "j E-mailek fogadsa"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Mind fogadsa"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "j E-mail fogadsa minden hozzfrsen"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Vrakoz sorbl zenet(ek) kldse"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Szerkeszts"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "j zenet szerkesztse"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Vlasz"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Vlasz az zenetre"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Vlasz mindre"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Vlasz mindenkinek"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Tovbbt"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "zenet tovbbtsa"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "zenet trlse"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Futtats"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Megjellt processz futtatsa"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Kvetkez olvasatlan zenet"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Belltsok"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Kzs belltsok"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Hozzfrs"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Hozzfrs belltsok"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Kilps"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Kilps a programbl?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "nem tudok az ideiglenes fjlba rni\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "zenetek fogadsa %s-bl %s-ba...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "az mbox-fjlt nem tudom olvasni.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "rvnytelen mbox formtum: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "srlt mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "nem tudok ideiglenes fjlt megnyitni\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Kdolatlan feladt talltam:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d zenetet talltam.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "%s zrol fjlt nem tudom ltrehozni\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "'flock' hasznlata 'file' helyett, ha lehet.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "%s-t nem tudom ltrehozni\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "A postalda egy msik processzhez tartozik, vrakozs...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "%s nem zrolhat\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "rvnytelen zrols tpus\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "%s zrolsa nem oldhat fel\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "nem tudom nulla mretre vltoztatni a postafikot.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "zenetek exportlsa %s-bl %s-ba...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Keress az aktulis zenetben"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Szveg keresse:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Nagy-/kis-bet rzkenysg"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Keress visszafel"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Keress"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Keress sikertelen"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "A keresett szveget nem talltam."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Az zenet elejre rtem; folytassam a vgrl?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Az zenet vgre rtem; folytassam az elejrl?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Keress befejezdtt"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "zenet nzet ltrehozsa...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Ments msknt"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Fellrs"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Ltez fjl fellrsa?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "`%s' fjlt nem tudom elmenteni."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Nyomtats"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Krem a nyomtatsi parancsot:\n"
+"(`%s' helyre a fjlnv kerl)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Nyomtatsi parancs rvnytelen:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "Nem tudom %s zenetet %s-ba msolni\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "A jell fjlt nem tudom megnyitni.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "A forrs- s clmappa azonos.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "%s%c%d zenet msolsa %s-ba ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Az utols szm a %s mappban = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Megnyits"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Megnyits m_int..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Megjelents _szvegknt"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Ment_s msknt..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Digitlis al瘢rs _ellenrzse"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "MIME nzet ltrehozsa...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME tpus"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Szveg"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Csatolsok"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr ""
+"Vlassza ki a \"Digitlis al瘢rs ellenrzse\" pontot az ellenrzshez"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Egy tbbrszes zenet egy darabja nem menthet."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Megnyits mint"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Krem a fjl megnyitshoz szksges parancsot:\n"
+"(`%s' helyre a fjlnv kerl)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME megjelent parancssor rvnytelen: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "NNTP kapcsolat ltestse %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "Az NNTP kapcsolat %s:%d megszakadt. jrakapcsolds...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "%d cikk mr a gyorstrban van.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "%d cikk fogadsa...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "%d cikket nem tudtam olvasni\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "Hrcsoport lista nem hozzfrhet\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "Nem tudom a cikket elkldeni.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "%d cikket nem tudom fogadni\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "%s csoportot nem sikerlt kivlasztani\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "rvnytelen cikk sorozat: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "Nincsenek j cikkek.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "Hrjegyzk fogadsa %d - %d %s-ba...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "A hrjegyzk nem elrhet\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "Hiba a hrjegyzk fogadsa kzben.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "rvnytelen hrjegyzk sor: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "xhdr nem elrhet\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "Hiba trtnt xhdr vtele kzben.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "%s:%d NNTP szerverhez nem sikerlt kapcsoldni\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "Protokollhiba: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "Protokollhiba\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Hiba klds kzben\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Hiba trtnt zenetklds kzben."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Jelmondat"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[nincs felhasznli azonost]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sKrem a jelmondatot:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Rossz jelmondat! Mg egyszer...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "A szksges APOP idpecst nem tallhat az dvzletben\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Idpecst szintaktikai hiba az dvzletben\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protokollhiba\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "rvnytelen hrjegyzk sor: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Lejrt zenetek trlse %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: zenet tugrsa %d (%d byte)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "a postafik zrolt\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "kapcsolat idtllpse\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "nem tudok TLS menetet indtani\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "Hiba trtnt azonostskor\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "A parancs nem tmogatott\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "hiba trtnt a POP3 kapcsolat kzben\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Belltsok olvassa...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Talltam %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Belltsok olvassa megtrtnt.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Belltsok trolva.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Alkalmaz"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Hozzfrsek belltsa...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Hozzfrs%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "j hozzfrs belltsai"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Hozzfrs belltsok"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Hozzfrsek belltsa ablak megnyitsa...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Fogads"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Magnszfra"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Halad"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Hozzfrs neve"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Alaprtelmzsknt bellts"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Szemlyes informci"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Teljes nv"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-mail cm"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Szervezet"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Szerver informci"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Hrek (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Semmi (loklis)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ezen a szerveren ktelez az azonosts"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Hrszerver"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Szerver fogadshoz"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP szerver (klds)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Felhasznli Azonost"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Jelsz"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Ezen a szerveren ktelez az azonosts"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "zenetek trlse a szerverrl fogads utn"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Eltvolts utna"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "nap"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 nap: azonnal eltvoltani)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Minden zenet letltse a szerverrl"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Fogadott levl mretkorlt"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "zenetek szrse fogads kzben"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Alaprtelmezett bejv postafik"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(A nem szrt zenetek ebbe a mappba kerlnek)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Azonostsi mdszer"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatikus"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Mindent fogad' ellenrizze ezt a hozzfrst is"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Fejlc"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dtum fejlc mez hozzads"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "zenet-azonost generlsa"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Felhasznl ltal definilt fejlc hozzadsa"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Szerkeszts... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Azonosts"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP Azonosts (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Ha ezeket a mezket resen hagyod, a levelek fogadshoz\n"
+"hasznlatos felhasznli azonostt s jelszt fogom hasznlni."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Azonosts klds eltti POP3-mal"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Parancskimenet"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Az albbi cmek automatikus belltsa"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Msolat"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Titkos msolat"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Vlasz"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "zenetet mindig titkostsa"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "zenetet mindig rja al digitlisan"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "ASCII-pnclozott formtum hasznlata titkostshoz"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Szveges al瘢rs hasznlata"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Digitlis al瘢rs kulcs"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Alaprtelmezett GnuPG kulcs hasznlata"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Kulcs vlaszts E-mail cmed alapjn"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Kulcs kzi megadsa"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Felhasznl vagy kulcs Azonost:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Nem hasznl SSL-t"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "SSL hasznlata POP3 kapcsolathoz"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "STARTTLS parancs hasznlata SSL kapcsolat indtshoz"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "SSL hasznlata IMAP4 kapcsolathoz"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "SSL hasznlata NNTP kapcsolathoz"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Klds (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SSL hasznlata SMTP kapcsolathoz"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Nem-blokkold SSL hasznlata"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Ezt kapcsold ki, ha az SSL kapcsolattal problma van!)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTP port megadsa"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3 port megadsa"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4 port megadsa"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "NNTP port megadsa"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Tartomnynv (domain) megadsa"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP szerver knyvtr"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Elkldtt zenetek elhelyezse"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Vzlatok elhelyezse"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Trlt zenetek elhelyezse"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Hozzfrs nv nincs megadva."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Nincs E-mail cm megadva."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Nincs megadott SMTP szerver."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Nincs felhasznli azonost megadva."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Nincs megadott POP3 szerver."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Nincs megadott IMAP4 szerver."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Nincs megadott NNTP szerver."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Nem javasolt a rgi tipus ASCII-pnclozott md\n"
+"hasznlata titkostott zenetekhez. Nem felel meg az\n"
+"RFC 3156 - MIME Security with OpenPGP-ben lertaknak."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Mveletek belltsa"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Men nv:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Parancssor:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Mennv:\n"
+" Hasznld a /-t a men nevben almen ltrehozshoz.\n"
+"Parancssor:\n"
+" Elejre:\n"
+" | az zenettrzs vagy a kijellt szveg kldse a parancsnak\n"
+" > felhasznl ltal megadott szveg kldse a parancsnak\n"
+" * felhasznl ltal megadott rejtett szveg kldse a parancsnak\n"
+" Vgre:\n"
+" | az zenettrzs vagy a kijellt szveg helyettestse a parancs "
+"kimenetvel\n"
+" > a parancs kimenetnek beszrsa az eredeti szveg trlse nlkl\n"
+" & parancs futtatsa aszinkron mdon\n"
+" Hasznlj:\n"
+" %f zenet fjlneve\n"
+" %F kivlasztott zenetek fjlneveinek listja\n"
+" %p kivlasztott zenetrsz\n"
+" %u egy felhasznl ltal megadott paramter\n"
+" %h egy felhasznl ltal megadott rejtett paramter\n"
+" %s a kijellt szvegrsz"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr "Helyettest"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Szintaxis segtsg"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Regisztrlt mveletek"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(j)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Men nv nincs belltva."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Kettspont ':' nem hasznlhat mennvben."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "A mennv tl hossz."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Nincs belltva a parancssor."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Mennv s parancs tl hossz."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"A%s\n"
+"parancs\n"
+"szintaktikai hibt tartalmaz."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Mvelet trlse"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Tnyleg trljem ezt a mveletet?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "ltalnos belltsok ablak ltrehozsa...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "ltalnos belltsok"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Idzet"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Megjelents"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "zenet"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Egyb"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Kls program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Kls program hasznlata E-mail fogadshoz"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Parancs"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Helyi trol"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Fogads trolbl"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Szrs fogads kzben"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automatikus levlfigyels"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "minden"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "perc"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "j levelek ellenrzse indulskor"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Fogads utn minden loklis mappa frisstse"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Hrek"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximum ennyi cikk letltse\n"
+"(0 esetn korltlan)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Kls program hasznlata kldshez"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Elkldtt zenetek mentse a Kimen postafikba"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Kimen zenetek kdkszlete"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatikus (Ajnlott)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7 bites ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Nyugat Eurpai (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Nyugat Eurpai (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Kzp Eurpai (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltikumi (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltikumi (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grg (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Trk (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirill (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirill (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirill (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirill (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japn (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japn (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japn (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Egyszerstett Knai (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradicionlis Knai (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradicionlis Knai (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Knai (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Koreai (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Ha az `Automatikus' be van kapcsolva, akkor az optimlis kdolst\n"
+"hasznlom a helyi nyelvi belltsoknak megfelelen."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "tvitel kdolsa"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Hatrozd meg a Content-Transfer-Encoding rtkt\n"
+"ha az zenet tartalmaz nem-ASCII karaktereket is."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Al瘢rs elvlaszt"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Automatikus beilleszts"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Kls szerkeszt automatikus indtsa"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Visszavons mlysge"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Sortrs helye"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "karakter"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Idzet trse"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Bevitel trdelse"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Sortrdels klds eltt"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automatikus hozzfrs vlaszts vlaszkor"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "zenet idzse a vlaszban"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "A `Vlasz' gomb a `Vlasz levelez listra' funkcit hozza fel"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Vlasz formtuma"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Idzet jele"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Tovbbtsi formtuma"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Szimblumok lersa "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Betkszlet"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Fejlc fordtsa (mint `Felad:', `Trgy:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Mappanv mellett az olvasatlan levelek szmnak kijelzse"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Hrcsoportok rvidtse, ha hosszabb mint"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "levl"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "sszefoglal nzet"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Cmzett mutatsa a `Felad' oszlopban ha nmagadnak kldted"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Folyam kifejtse"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Dtum formtuma"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " sszefoglals kijelzsnek belltsa... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Sznek hasznlata az zenetekhez"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Tbb byte-os karakterek s szmok megjelentse\n"
+"ASCII karakterekkel (csak japn esetn)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Fejlcmez megjelentse az zenet fltt"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Rvid fejlcek az zenet nzetben"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Sortvolsg"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "Kppont"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Hely kihagysa a fejtl"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Grgets"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Fl oldal"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Finom grgets"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Lps"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "A csatolt kpek tmretezse"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Digitlis al瘢rs automatikus ellenrzse"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Al瘢rsellenrzs eredmnye felbukkan ablakban"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Jelmondat ideiglenes trolsa a memriban"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Lejr, utn"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "perc"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"('0'-ra lltva a kapcsolds teljes idtartamra\n"
+" trolja a jelmondatot)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Bevitel elkapsa egy jelmondat beadsakor"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Figyelmeztets indulskor, ha a GnuPG nem mkdik"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Az zenetek mindig sszefoglalva jelennek meg, ha ez kivlasztott"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Mappba lpskor az els olvasatlan zenet megnyitsa"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Csak az j ablakban megnyitott zeneteket jellje olvasottknt."
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Vltson a bejv postafikra e-mail fogads utn"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Azonnali vgrehajts zenet mozgats vagy trls esetn"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Az zenetek kijellten lthatk a feldolgozskor,\n"
+" ha ez kikapcsolt llapotban van)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Fogad ablak"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Fogad ablak mutatsa"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Mindig"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Soha"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Ne dobjon fel hibaablakot fogadsi hiba esetn"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Fogad ablak bezrsa ha vgzett"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Billenty hozzrendelsek... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Kls parancsok (%s helyre a fjlnv / URI kerl)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Web bngsz"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Dupla-klikk esetn cm a clmezbe"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Kilpskor"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Kilpskor rkrdez"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Kuka rtse kilpskor"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "rts eltt rkrdez"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Elkldetlen zenetek esetn figyelmeztet"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Hlzati adattvitel idtllps:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "msodperc"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "rvidtett nap nv"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "teljes nap nv"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "rvidtett hnapnv"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "a teljes hnapnv"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "ajnlott dtum- s idformtum a jelenlegi nyelvi belltshoz"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "vszzad (v/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "hnap napja szmknt"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "ra szmknt (24 rs kijelzs)"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "ra szmknt (12 rs kijelzs)"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "Az v napja szmknt"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "hnap szmknt"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "perc szmknt"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "DE vagy DU"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "msodperc szmknt"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "ht napja szmknt"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "ajnlott dtum az aktulis nyelvi belltshoz"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "az vszm utols kt szmjegye"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "v szmknt"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "idzna vagy nv vagy rvidts"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Vezrljel"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Lers"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Plda"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "zenetszn belltsa"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Sznek"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Idzett szveg - els szint"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Idzett szveg - msodik szint"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Idzett szveg - harmadik szint"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI-kapocs"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Idzet szneinek jrahasznostsa"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "1. szint idzet szne"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "2. szint idzet szne"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "3. szint idzet szne"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "URI szne"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Szimblumok lersa"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Dtum\n"
+"Felad\n"
+"Felad teljes neve\n"
+"Felad keresztneve\n"
+"Felad monogramja\n"
+"Trgy\n"
+"Cmzett\n"
+"Msolat\n"
+"Hrcsoportok\n"
+"zenet-azonost"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Ha x belltva, akkor kifejezs megjelentse"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"zenet trzs\n"
+"Idzett zenet trzs\n"
+"zenet trzs al瘢rs nlkl\n"
+"Idzett zenet trzs al瘢rs nlkl\n"
+"Sz szerint %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Repjel karakterrel\n"
+"Krdjel karakterrel\n"
+"Nyit kapcsos zrjel\n"
+"Zr kapcsos zrjel"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Bettpus vlaszts"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Billenty hozzrendelsek"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Billenty hozzrendels elvlaszt belltsa.\n"
+"Mdosthatod minden men gyorsbillentyjt, ha az egrmutatval\n"
+"rmutatva megnyomod a kvnt billentyt."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Alaprtelmezs"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Rgi Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Sajt fejlc belltsok"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Sajt fejlc"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Fejlc nv nincs belltva."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Fejlc trlse"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Tnyleg trljem ezt a fejlcet?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Fejlc bellt ablak ltrehozsa...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Fejlc belltsok"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Fejlc nv"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Megjelentett fejlcek"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Rejtett fejlcek"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Az sszes meghatrozatlan fejlc mutatsa"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Megjelent fejlcek belltsainak beolvassa...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Megjelent fejlcek belltsainak mentse...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Ez a fejlc mr szerepel a listn."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Szr belltsa"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Cmzett:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Msols..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Szably trlse"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Tnyleg trljem ezt a szablyt?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Szably trlse"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Rejtett fejlcek"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Fejlc"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "zenet"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "tartalmaz"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "nem tartalmaz"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Mozgats le"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Msols..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ne fogadjon"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Mappa trlse"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Megjegyzsek"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "zenetszn belltsa"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Kijell/_Olvasottknt jell"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Csatolsknt tovbbt"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/tirny_t"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Futtats"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Mappa"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Cm"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Fejlc"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Fejlc"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Fejlc"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Nincs cmzett."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Nincs belltva a parancssor."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Nincs cl belltva."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Nincs belltva a parancssor."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: fjl nem ltezik\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Mappa tulajdonsgai"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "ltalnos"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normlis"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Ne mutassam a [...] vagy (...) szveget a trgy mezben sszegzskor"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Vlasz esetn trljem a [...] vagy (...) szveget a trgy mezbl"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Alkalmazs almappkra."
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "vlasznl is hasznld"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Vlasz:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Kijellt"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Csatols"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Trgy"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Felad"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Dtum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Szm"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "ttekint oszlop belltablak ltrehozsa...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "ttekint megjelents elemeinek belltsa"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"A megjelenteni kvnt elemeket az ttekint nzeten jellheted ki.\n"
+"A sorrendjk a Fel/Le gombbal vagy egrrel vonszolssal vltoztathat meg."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Elrhet elemek"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Megjelentett elemek"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Alaprtelmezettre visszallt"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Sablon nv"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Regisztrci"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Helyettest "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Szimblumok "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Regisztrlt sablonok"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Sablonok"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Sablon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Sablon formtumhiba."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Sablon trlse"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Tnyleg trljem ezt a sablont?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Kd konverzis hiba.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "A kijellt fjl nem nyithat meg\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "%d zenet vtele nem sikerlt\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Hiba a %d besorolt zenet kldsekor.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "rvnytelen nyomtat parancs: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "llapot"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Kszltsgi ablak ltrehozsa...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "hiba az adatok fogadsa kzben.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Nem tudok a fjlba rni.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Hopp: a digitlis al瘢rs nem ellenrztt"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Nem talltam digitlis al瘢rst"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "J digitlis al瘢rs"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "ROSSZ digitlis al瘢rs"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nincs publikus kulcs az al瘢rs ellenrzshez"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Hiba az al瘢rs ellenrzse kzben"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Eltr eredmnyek az al瘢rshoz"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Hiba: ismeretlen llapot"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "J digitlis al瘢rs \"%s\"-tl"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "ROSSZ digitlis al瘢rs \"%s\"-tl"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Nem tallok felhasznli azonostt ehhez a kulcshoz."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " azaz \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Az al瘢rs kszlt %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Kulcs ujjlenyomat: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Vlassz kulcsot '%s'-nak "
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Informci gyjts '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Kulcs vlaszts"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Kulcs azonost"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Kulcs hozzads"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Krek egy msik felhasznlt vagy kulcs azonostt:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "A vrakoz zenet fejlce srlt.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Kapcsolds"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Kapcsolds %s SMTP szerverhez..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "HELO kldse..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Azonosts"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "zenet kldse ..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "EHLO kldse..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "MAIL FROM kldse..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Klds"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "RCPT TO kldse..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "DATA kldse..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Kilps..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "zenet kldse (%d / %d byte)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "zenet kldse"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Hiba trtnt zenetklds kzben."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Hiba trtnt az zenet kldse kzben:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Postalda belltsok"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Elszr a postalda helyt kell megadni!\n"
+"Hasznlhatsz egy ltez MH formtum postaldt is.\n"
+"Ha bizonytalan vagy, vlaszd az OK-t!"
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Digitlis al瘢rs ellenrzse"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s \"%s\"-bl"
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH nem elrhet\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "hibs SMTP vlasz\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "hiba trtnt az SMTP kapcsolat kzben\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Forrs ablak ltrehozsa...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "zenet forrsa"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "%s forrsnak megjelentse...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Forrs"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 nem elrhet\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 elrhet\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 nem elrhet\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 elrhet\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL eljrs nem elrhet\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Ismeretlen SSL eljrs *PROGRAM HIBA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Hiba az ssl krnyezet ltrehozsa kzben\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL kapcsolat hiba (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL kapcsolat %s hasznlatval\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Szerver igazolvny:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Trgy: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Szerz: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "zenetek keresse"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Az albbi cmek automatikus belltsa"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Trzs:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Minden tallatot kivlaszt"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "A lista elejre rtem. Folytassam a vgrl?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "A lista vgre rtem. Folytassam az elejrl?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Vlasz msnak"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Vlasz msnak/_mindenkinek"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/_Vlasz msnak/a _feladnak"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/_Vlasz msnak/_levelezlistnak"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/M_ozgats..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Msols..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Kijell"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Kijell/_Kijell"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Kijell/Kijells trlse"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Kijell/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Kijell/O_lvasatlanknt jell"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Kijell/_Olvasottknt jell"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Kijell/_Minden olvasottat kijell"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/_Sznes cmke"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/j_raszerkeszt"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Kld _cmt a cmlistba"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Nzet/_Forrs"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Nzet/_Minden fejlc megjelentse"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Nyomtat..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "J"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Db"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "ttekint nzet ltrehozsa...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Kijelltek feldolgozsa"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Maradt mg nhny kijellt. Feldolgozzam?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "(%s) mappa tvizsglsa..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Nincs tovbbi olvasatlan zenet"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nem talltam olvasatlan zenetet. Keress a vgrl?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Nincs olvasatlan zenet.."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Nem talltam olvasatlan zenetet. Ugrs a kvetkez mappra?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Keress ismt"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Nincs tbb j zenet"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Nem talltam j zenetet. Keress a vgrl?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Nincs j zenet."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Nem talltam j zenetet. Menjek a kvetkez mappra?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Nincs tovbbi kijellt zenet"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Nem talltam kijellt zenetet. Keress a vgrl?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Nincs kijellt zenet."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Nem talltam kijellt zenetet. Keress az elejrl?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Nincs tovbbi cmkzett zenet."
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Nem talltam cmkzett zenetet. Keress a vgrl?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Nincs cmkzett zenet."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nem talltam cmkzett zenetet. Keress az elejrl?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "zenetek trgy szerint..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d trlve"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d mozgatva"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d msolva"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " darab kivlasztva"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d j, %d olvasatlan, %d sszesen (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d j, %d olvasatlan, %d sszesen"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "sszefoglal rendezse..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tsszefoglal belltsa az zenetek adataibl..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "sszefoglal belltsa az zenetek adataibl..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "sszefoglal gyorstr rsa (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Nincs Dtum)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "%d zenet kijellve.\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "%d zenet olvasottnak jellve.\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "%d zenet olvasatlannak jellve.\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "%s/%d zenet trlsre kijellve\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "zenet(ek) trlse"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Tnyleg trljem az zenete(ke)t a kukbl?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Tbb pldnyban ltez zenetek trlse..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "%s/%d zenet kijellsnek megszntetse.\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "%d zenet kijellve %s-ba mozgatsra\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "A cl azonos az aktulis mappval."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "%d zenet kijellve %s-ba msolsra\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "A msols clja megegyezik az aktulis mappval."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Minden zenet kijellse..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Hiba az E-mail feldolgozsa kzben."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "zenetfolyam felptse"
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "zenetfolyam lebonts..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "zenetfolyam lebonts vgrehajtshoz..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "szrs..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Szrs..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr ""
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "%s fjl mr ltezik\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Szvegnzet ltrehozsa...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "egy zenet fogadsa nem sikerlt\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "E rsz elmentshez nyisd meg a helyzetfgg ment a "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "a jobb egrgombbal s vlaszd a `Ments msknt...' menpontot, "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"vagy nyomd meg az `Y'-gombot.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Szvegknt val megjelentshez, vlaszd a "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Megjelents szvegknt', vagy `T'-gomb.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "E rsz kls programmal val megnyitshoz vlaszd a "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Megnyit' vagy `Megnyit mint...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "vagy dupla klikk, vagy nyomd meg a kzps egrgombot, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "vagy `L' gomb."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Ez a digitlis al瘢rs mg nincs ellenrizve.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Az ellenrzshez nyisd meg a helyzetfgg ment a\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr ""
+"jobb egrgombbal s vlaszd a `Digitlis al瘢rs ellenrzse' menpontot!\n"
+"\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "%s fjlba nem sikerlt rni.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "%s fjl nem nyithat meg\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (norml)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP azonosts)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_Postalda eltvoltsa"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/_IMAP4 hozzfrs eltvoltsa"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/_Hrcsoport hozzfrs eltvoltsa"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_zenet/_Klds"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_zenet/_Digitlisan al瘢r"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "nincsenek zenetek a helyi postaldban.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Trol knyvtr"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Kivlaszt... "
+
+#~ msgid "Condition"
+#~ msgstr "Felttel"
+
+#~ msgid "Keyword"
+#~ msgstr "Kulcssz"
+
+#~ msgid "Destination"
+#~ msgstr "Cl"
+
+#~ msgid "Use regex"
+#~ msgstr "Szablyos kifejezsek (regex) hasznlata"
+
+#~ msgid "Registered rules"
+#~ msgstr "Regisztrlt szablyok"
+
+#~ msgid "(none)"
+#~ msgstr "(nincs)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "A bejegyzs nincs elmentve"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "A bejegyzs nincs elmentve. Ettl fggetlenl zrjam be?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "URI nyitsa parancs rvnytelen: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "A gyorstrolban lv adatok srltek\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Szrsi szablyok"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Szrsi szablyok/_Automatikusan"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Szrsi szablyok/_Felad alapjn"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Szrsi szablyok/_Cmzett alapjn"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Szrsi szablyok/_Trgy alapjn"
+
+#~ msgid "Queueing"
+#~ msgstr "Sorballts"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Hiba trtnt az zenet kldse kzben.\n"
+#~ "Az zenetet a Vrakoz sorba tegyem?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Sikertelenl kldtt zenetek mentse a Vrakoz sor-mappba"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Futtats"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_Mindet kijelli"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/_Folyam vlasztsa"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "%s csoportot nem tudom belltani\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "egy zenet fogadsa nem sikerlt\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_zenet/j E-mail _fogadsa"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNincs gyorstrol fjl\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tsszefoglal gyorstr olvassa..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "A gyorstrban lv vltozat eltr. Eldobom.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Kijellt fjl nem tallhat.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "A kijellt vltozat eltr (%d != %d). Eldobom.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "A kijellt fjlt nem tudom hozzfzsre megnyitni.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "A kijellt fjlt nem tudom rsra megnyitni.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "%s zrol fjlt nem tudom ltrehozni\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "res mappa\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Csak ha az ablak aktv"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Minden mappa korbbi belltsa elveszik.\n"
+#~ "Folytatod?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "ablak pozci: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Elemek belltsa..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "%s%c%d zenet mozgatsa %s-ba...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tzenetek kijellse..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d j zenet\n"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 00000000..b26de01f
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 00000000..1184b64d
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,6123 @@
+# Italian translation of Sylpheed pot file
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Danilo Bodei <dbodei@lombardiacom.it> 2001-2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sylpheed 1.0.0beta2\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-11-13 11:30+0100\n"
+"Last-Translator: Danilo Bodei <dbodei@lombardiacom.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Informazioni"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME 竪 copyright 2001 di Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Questo programma 竪 software libero; potete ridistribuirlo e/o modificarlo "
+"nei termini della GNU General Public License come pubblicata dalla Free "
+"Software Foundation; sia la versione 2, o (a vostra scelta) una versione "
+"successiva.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Questo programma 竪 distribuito nella speranza che sia utile, ma SENZA UNA "
+"GARANZIA; senza neppure l'implicita garanzia di COMMERCIABILITA' o IDONEITA' "
+"AD UN PARTICOLARE SCOPO. Consultare la licenza GNU General Public License "
+"per ulteriori dettagli.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Dovreste aver ricevuto una copia della licenza GNU General Public License "
+"insieme a questo programma; in caso contrario, scrivete alla Free Software "
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Ok"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lettura della configurazione per ogni account...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Trovata l'etichetta: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Alcune finestre di composizione sono aperte.\n"
+"Chiudere tutte le finestre di composizione prima di modificare gli account."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Apertura della finestra di modifica dell'account...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Creazione della finestra di modifica dell'account...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Modifica degli account"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"I nuovi messaggi saranno controllati in questo ordine. Spuntare le caselle "
+"nella\n"
+"colonna 束G損 per consentire il recupero dei messaggi attraverso 束Ricevi "
+"tutti損."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nome"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocollo"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr " Aggiungi "
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr " Modifica "
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Elimina "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Gi湛"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Su"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Imposta come account predefinito "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Chiudi"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Elimina account"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Eliminare questo account?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "S狸"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+No"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Impossibile ricevere il file del messaggio %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Impossibile ricevere una parte del messaggio."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Impossibile ricevere parte di un messaggio composto."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"L'azione selezionata non pu嘆 essere usata nella finestra di composizione\n"
+"perch竪 contiene %%f, %%F o %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Il comando non pu嘆 essere avviato. La creazione della pipe 竪 fallita.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Impossibile fare il fork per eseguire il comando seguente:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Avvio: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Terminato: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Azione di input/output"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Invia "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Interrompi"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Inserire l'argomento per l'azione seguente:\n"
+"(束%%h損 verr sostituito con l'argomento)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Argomento nascosto dell'azione utente"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Inserire l'argomento per l'azione seguente:\n"
+"(束%%u損 verr sostituito con l'argomento)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Argomento dell'azione utente"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Aggiunta dell'indirizzo alla rubrica"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Indirizzo"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Note"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Selezione della cartella della rubrica"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Annulla"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_File"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_File/Nuova _rubrica"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_File/Nuova _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_File/Nuovo _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_File/_Nuovo server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_File/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_File/_Modifica"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_File/_Elimina"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_File/_Salva"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_File/_Chiudi"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Indirizzo"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Indirizzo/Nuovo _indirizzo"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Indirizzo/Nuovo _gruppo"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Indirizzo/Nuova _cartella"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Indirizzo/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Indirizzo/_Modifica"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_indirizzo/_Elimina"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/S_trumenti"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/S_trumenti/Importa file _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/A_iuto"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/A_iuto/I_nformazioni"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nuovo _indirizzo"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nuovo _gruppo"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nuova _cartella"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Modifica"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/Eli_mina"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Indirizzo e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Rubrica"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Elimina"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Cerca"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "A:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Elimina l'indirizzo(i)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Eliminare l'indirizzo(i)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "No"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Eliminare la cartella E tutti gli indirizzi in 束%s損 ? \n"
+"Eliminando solo la cartella, gli indirizzi saranno spostati nella cartella "
+"di origine."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Solo la cartella"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Cartella e indirizzi"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Eliminare 束%s損 ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nuovo utente, impossibile salvare il file indice."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nuovo utente, impossibile salvare i file della rubrica."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "La vecchia rubrica 竪 stata convertita con successo."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Vecchia rubrica convertita,\n"
+"impossibile salvare il nuovo file indice dell'indirizzo"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Impossibile convertire la rubrica,\n"
+"ma ho creato nuovi file vuoti della rubrica."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Impossibile convertire la rubrica,\n"
+"impossibile creare i nuovi file della rubrica."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Impossibile convertire la rubrica,\n"
+"e impossibile creare i nuovi file della rubrica."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Errore di conversione della rubrica"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Conversione della rubrica"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Errore nella rubrica"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Impossibile leggere l'indice dell'indirizzo"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Vecchia rubrica convertita, impossibile salvare il nuovo file indice "
+"dell'indirizzo"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Impossibile convertire la rubrica, ma ho creato nuovi file vuoti della "
+"rubrica."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Impossibile convertire la rubrica, impossibile creare i nuovi file della "
+"rubrica."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Impossibile convertire la rubrica e impossibile creare i nuovi file della "
+"rubrica."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Errore di conversione della rubrica"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Conversione della rubrica"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interfaccia"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Rubrica"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persona"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Indirizzo email"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Gruppo"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Cartella"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Server LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Indirizzo comune"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Indirizzo personale"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Avviso"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Avvertimento"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Errore"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Creazione della finestra di dialogo dell'allarme...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Mostra questo messaggio la prossima volta"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Arancio"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rosso"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Blu cielo"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Blu"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Verde"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Marrone"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Niente"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Aggiungi..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Rimuovi"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Propriet..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_File/In_via"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_File/Invia _pi湛 tardi"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_File/_Salva nella cartella 束Bozze損"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_File/Sa_lva e mantieni l'editazione"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_File/_Allega file"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_File/_Inserisci file"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_File/Inserisci fi_rma"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Modifica/_Annulla"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Modifica/_Ripeti"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Modifica/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Modifica/_Taglia"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Modifica/_Copia"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Modifica/_Incolla"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Modifica/Incolla co_me citazione"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Modifica/_Seleziona tutto"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Modifica/A_vanzato"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Modifica/A_vanzato/Un carattere indietro"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Modifica/A_vanzato/Un carattere avanti"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Modifica/A_vanzato/Una parola indietro"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Modifica/A_vanzato/Una parola avanti"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Modifica/A_vanzato/Inizio riga"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Modifica/A_vanzato/Fine riga"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Modifica/A_vanzato/Riga precedente"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Modifica/A_vanzato/Riga successiva"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Modifica/A_vanzato/Elimina carattere indietro"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Modifica/A_vanzato/Elimina carattere avanti"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Modifica/A_vanzato/Elimina parola indietro"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Modifica/A_vanzato/Elimina parola avanti"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Modifica/A_vanzato/Elimina riga"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Modifica/A_vanzato/Elimina fino al termine riga"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Modifica/A capo _paragrafo attuale"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Modifica/A capo tutte le righe _lunghe"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Modifica/A cap_o automatico"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Visualizza"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Visualizza/_A"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Visualizza/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Visualizza/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Visualizza/_Rispondi a"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Visualizza/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Visualizza/_Seguito di"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Visualizza/R_ighello"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Visualizza/Alle_gato"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/S_trumenti/_Rubrica"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/S_trumenti/_Modello"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/S_trumenti/A_zioni"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/S_trumenti/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Strumenti/Modifica con l'_editor esterno"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Strumenti/Firma P_GP"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Strumenti/_Cifratura PGP"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: il file non esiste\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Impossibile ricevere parte del testo\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Errore del formato del segno di citazione."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Errore del formato nel messaggio di risposta/inoltro."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Il file %s non esiste\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Impossibile ottenere la dimensione di %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Il file %s 竪 vuoto."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Impossibile leggere %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Messaggio: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Impossibile ricevere parte del messaggio composto."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Modificato]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Composizione messaggio %s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Composizione messaggio %s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Il destinatario non 竪 specificato."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Invia"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "L'oggetto 竪 vuoto. Inviarlo comunque?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "impossibile ottenere la lista dei destinatari."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Non 竪 specificato l'account per l'invio della posta.\n"
+"Scegliere un account di posta prima dell'invio."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Si 竪 verificato un errore durante l'invio del messaggio a %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Impossibile salvare il messaggio nella cartella 束Inviata損."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Impossibile trovare qualsiasi chiave associata con l'id chiave 束%s損 "
+"attualmente selezionato."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "impossibile cambiare i permessi del file\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Impossibile convertire la codifica del carattere del messaggio da\n"
+"%s a %s.\n"
+"Spedirlo comunque?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "impossibile scrivere le intestazioni\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "impossibile rimuovere il vecchio messaggio\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "accodamento messaggio...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "impossibile trovare la cartella 束Coda損\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "impossibile accodare il messaggio\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generato l'ID-messaggio: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Creazione della finestra di composizione...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tipo MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Dimensione"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Da:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Invia il messaggio"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Invia pi湛 tardi"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Mette nella cartella 束Coda損 e invia pi湛 tardi"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Bozze"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Salva nella cartella 束Bozze損"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Inserisci"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Inserisce il file"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Allega"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Allega il file"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Firma"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Inserisce la firma"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Modifica con l'editor esterno"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "A capo riga"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Manda a capo tutte le righe lunghe"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Tipo MIME non valido."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Il file non esiste o 竪 vuoto."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Propriet"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codifica"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Percorso"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nome del file"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "La riga di comando per l'editor esterno non 竪 valida: 束%s損\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"L'editor esterno 竪 ancora attivo.\n"
+"Forzare la conclusione del processo?\n"
+"group id del processo: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Group id del processo terminato: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "File temporaneo: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Composizione: input da un processo di controllo\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Impossibile eseguire l'editor esterno\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Impossibile scrivere sul file\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Lettura dalla pipe fallita\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Impossibile accodare il messaggio."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Selezione del file"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Scarta il messaggio"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Questo messaggio 竪 stato modificato. Scartarlo?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Scarta"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "nella cartella 束Bozze損"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Applicare il modello 束%s損 ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Applica il modello"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Sostituisci"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Modifica l'indirizzo"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Aggiunta di una nuova persona"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Modifica dei dettagli della persona"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Deve essere fornito un indirizzo e-mail."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Devono essere forniti un nome e un valore."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Modifica i dati della persona"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nome da visualizzare"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Ultimo nome"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Primo nome"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Nick"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Indirizzo e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Sposta su"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Sposta gi湛"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modifica"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Pulisci"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valore"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Dati essenziali"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Attibuti user"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Il file sembra essere ok."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Il file non sembra essere un formato valido della rubrica."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Impossibile leggere il file."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Modifica la rubrica"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Controllo file "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "File"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Aggiunta di una nuova rubrica"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Deve essere fornito un nome del gruppo."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Modifica i dati del gruppo"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nome del gruppo"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Indirizzi nel gruppo"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Indirizzi disponibili"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"Sposta gli indirizzi di e-mail da o in un gruppo con i pulsanti freccia"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Modifica i dettagli del gruppo"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Aggiunta di un nuovo gruppo"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Modifica la cartella"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Inserire il nuovo nome della cartella:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nuova cartella"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Inserire il nome della nuova cartella:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Il file non sembra essere in formato JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Seleziona il file JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Modifica la voce JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Voce(i) addizionale dell'indirizzo e-mail"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Aggiunta di una nuova voce JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Connesso al sever con successo"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Impossibile connettersi al server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Modifica il server LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nome dell'host"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Porta"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Controllo server "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Ricerca base"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Criteri di ricerca"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Reimposta "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind Password"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (secondi)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Numero massimo di voci"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Essenziale"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Esteso"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Aggiunta di un nuovo server LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Modifica LDAP - Seleziona la ricerca base"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Ricerca base(i) disponibile"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Impossibile leggere la ricerca base(i) dal server - impostarla manualmente"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Il file non sembra essere in formato VCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Selezione del file VCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Modifica la voce vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Aggiunta di una nuova voce vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Esporta"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Specificare la cartella di origine e il file mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Directory di origine:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "File su cui esportare:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Seleziona... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Seleziona il file da esportare"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "la scrittura della configurazione sul file 竪 fallita\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Selezione della cartella"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "In entrata"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Inviata"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Coda"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Cestino"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Bozze"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Nuova cartella"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "束%c損 non pu嘆 essere incluso nel nome della cartella."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "La cartella 束%s損 esiste gi."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Impossibile creare la cartella 束%s損."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Crea _nuova cartella..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Rinomina cartella..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Elimina cartella"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/Svuo_ta cestino"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Controllo nuovi messaggi"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/R_icostruisci l'albero cartella"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Ricerca _messaggi..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/Sc_arica"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Iscrizione newsgroup..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Rimuovi newsgroup..."
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Creazione della vista della cartella...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nuovi"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Non letti"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "Tot."
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Impostazione delle informazioni della cartella...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Impostazione delle informazioni della cartella..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Analisi della cartella %s%c%s..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Analisi della cartella %s..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Ricostruisco l'albero della cartella"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "L'albero della cartella sar ricostruito. Continuo?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Sto ricostruendo l'albero della cartella..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "La ricostruzione delll'albero della cartella 竪 fallita."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Sto ricostruendo tutti gli alberi della cartella..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Controllo per nuovi messaggi in tutte le cartelle..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "La cartella %s 竪 selezionata\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Sto scaricando i messaggi in %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Si 竪 verificato un errore scaricando i messaggi in 束%s損."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Immettere il nome della nuova cartella:\n"
+"(se si vuole creare una catella per memorizzare sottocartelle,\n"
+" aggiungere 束/損 alla fine del nome)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Inserire il nuovo nome per 束%s損:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Rinomina la cartella"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Tutte le cartelle e i messaggi all'interno di 束%s損 saranno eliminati.\n"
+"Eliminare?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Elimina la cartella"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Impossibile rimuovere la cartella 束%s損."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Svuota cestino"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Svuotare tutti i messaggi nel cestino?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Rimuovere la casella postale 束%s損 ?\n"
+"(I messaggi NON saranno eliminati dal disco)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Rimuovi la casella postale"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Eliminare l'account IMAP4 束%s損?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Elimino l'account IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Eliminare il newsgroup 束%s損 ?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Elimino il newsgroup"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Eliminare l'account delle news 束%s損 ?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Elimino l'account delle news"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Iscrizione al newsgroup"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Seleziona i newsgroup a cui iscriversi."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Trova i gruppi:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Ricerca "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nome del newsgroup"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Messaggi"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tipo"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Rinfresca"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderato"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "sola lettura"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Impossibile recuperare la lista dei newsgroup."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Fatto."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "ricevuti %d newsgroup (%s letti)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Newsgroup:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Oggetto:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Creazione della vista dell'intestazione...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Nessun mittente)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Nessun oggetto)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Creazione della vista dell'immagine...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Impossibile caricare l'immagine."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "La connessione IMAP4 a %s 竪 stata interrotta. Riconnessione...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "creazione della connessione IMAP4 a %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Impossibile avviare la sessione TLS.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "impossibile impostare i flag eliminati: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "impossibile cancellare\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "impossibile impostare i flag eliminati: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "impossibile chiudere la cartella\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "la cartella radice %s non esiste\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "si 竪 verificato un errore durante la ricezione di LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Impossibile creare 束%s損\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Impossibile creare 束%s損 sotto IN ENTRATA\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "impossibile creare la casella postale: LIST fallito\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "impossibile creare la casella postale\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "impossibile rinominare la casella postale: %s in %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "impossibile eliminare la casella postale\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "impossibile ricevere la busta\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "si 竪 verificato un errore durante la ricezione della busta.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "impossibile analizzare la busta: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Impossibile connettersi al server IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Impossibile stabilire la sessione IMAP4 con: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "impossibile ricevere il namespace\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "impossibile selezionare la cartella: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "Autenticazione IMAP4 fallita.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Login IMAP4 fallito.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "impossibile aggiungere %s a %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(spedizione del file...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "impossibile aggiungere a %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "impossibile copiare %s in %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "errore durante il comando imap: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "errore durante il comando imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "errore durante il comando imap: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv non pu嘆 convertire UTF-7 in %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv non pu嘆 convertire %s in UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importa"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Specificare il file mbox da importare e la cartella di destinazione."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "File da importare:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Directory di destinazione:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Selezione del file da importare"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Specificare il nome della rubrica e del file da importare."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Seleziona e rinomina i nomi del campo LDIF da importare."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "File importato."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Seleziona un file."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Deve essere fornito un nome per la rubrica."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Errore leggendo i campi LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "File LDIF importato con successo."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Seleziona il file LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nome del file"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Campo LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nome dell'attributo"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Attibuto"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Seleziona"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Rubrica :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nome del file:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Record :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importazione del file LDIF nella rubrica"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Precedente"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Successivo"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Info sul file"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Attibuti"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Fine"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Recupero i nuovi messaggi"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Attesa"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Cancellato"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Recupero"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Fatto (ricevuti %d messaggio(i) (%s))"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Fatto (non ci sono nuovi messaggi)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Connessione fallita"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autenticazione fallita"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Bloccato"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Timeout"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Finito (%d nuovo(i) messaggio(i))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Finito (non ci sono nuovi messaggi)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Ci sono stati degli errori durante la ricezione della posta."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "ricezione dei nuovi messaggi dell'account %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Recupero i nuovi messaggi"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Connessione al server POP3: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Impossibile connettersi al server POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autenticazione..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Ricezione dei messaggi da %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Ricezione del numero dei nuovi messaggi (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Ricezione del numero dei nuovi messaggi (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Ricezione del numero dei nuovi messaggi (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Ricezione della dimensione dei messaggi (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Eliminazione del messaggio %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Esco"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Recupero il messaggio (%d di %d) (%s di %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Ricezione di (%d messaggio(i) ricevuti (%s))"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Connessione fallita."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Si 竪 verificato un errore durante l'elaborazione della posta."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Si 竪 verificato un errore durante l'elaborazione della posta:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Spazio su disco esaurito."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Impossibile scrivere il file."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Errore del socket."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Connessione chiusa dall'host remoto."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "La casella postale 竪 bloccata."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"La casella postale 竪 bloccata:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Autenticazione fallita."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Autenticazione fallita:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "La sessione 竪 andata in timeout."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Incorporazione cancellata\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Ricezione in %s dei nuovi messaggi da %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Inserire la password di %s su %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Inserire la password"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Log del protocollo"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Il file 束%s損 esiste gi.\n"
+"Impossibile creare la cartella."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread non 竪 supportato da glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG non 竪 installato correttamente, o questa versione 竪 troppo vecchia.\n"
+"Il supporto per OpenPGP 竪 disabilitato."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uso: %s [OPZIONE]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [indirizzo] apre una finestra di composizione"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" apre la finestra di composizione con allegati\n"
+" i file specificati"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive riceve i nuovi messaggi"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all riceve i nuovi messaggi di tutti gli account"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send invia tutti i messaggi accodati"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [cartella]... mostra il numero totale dei messaggi"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [cartella]...\n"
+" mostra lo stato di ogni cartella"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug modalit di debug"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help mostra questo aiuto ed esce"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version mostra informazioni sulla versione ed esce"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "C'竪 un messaggio in composizione. Uscire?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Messaggi accodati"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Ci sono messaggi non spediti in 束Coda損. Uscire ora ?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "un altro Sylpheed 竪 gi in esecuzione.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_File/Ca_rtella"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_File/Ca_rtella/Crea _nuova cartella..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_File/Ca_rtella/_Rinomina cartella..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_File/Ca_rtella/Eli_mina cartella"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/_File/_Casella postale"
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_File/_Casella postale/_Aggiungi casella postale..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_File/_Casella postale/Rimuovi ca_sella postale"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/_File/_Casella postale/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_File/_Casella postale/_Controllo nuovi messaggi"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_File/_Casella postale/Controllo nuovi mess_aggi in tutte le cartelle"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_File/_Casella postale/R_icostruisci l'albero cartella"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_File/_Importa file mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_File/Esp_orta file mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_File/S_vuota cestino"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_File/Sa_lva come..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_File/Stam_pa..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_File/Lavora offli_ne"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_File/_Esci"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Modifica/Seleziona t_hread"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Modifica/_Trova nel messaggio attuale..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Modifica/Ricerca _messaggi..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Visualizza/Mostra o _nascondi"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Visualizza/Mostra o _nascondi/A_lbero cartella"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Visualizza/Mostra o _nascondi/Vista _messaggio"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra degli _strumenti"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra degli _strumenti/Icone _e testo"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra degli _strumenti/I_cone"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra degli _strumenti/_Testo"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra degli _strumenti/_Niente"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Visualizza/Mostra o _nascondi/Barra di s_tato"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Visualizza/Albero _cartella separato"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Visualizza/Vista m_essaggio separata"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Visualizza/_Ordina"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Visualizza/_Ordina/per n_umero"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Visualizza/_Ordina/per dim_ensione"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Visualizza/_Ordina/per _data"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Visualizza/_Ordina/per _mittente"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Visualizza/_Ordina/per dest_inatario"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Visualizza/_Ordina/per _oggetto"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Visualizza/_Ordina/per colore etic_hetta"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Visualizza/_Ordina/per _segno"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Visualizza/_Ordina/per non le_tti"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Visualizza/_Ordina/per a_llegato"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Visualizza/_Ordina/No_n ordinare"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Visualizza/_Ordina/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Visualizza/_Ordina/_Ascendente"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Visualizza/_Ordina/Dis_cendente"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Visualizza/_Ordina/_Raggruppa per oggetto"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Visualizza/Vista _thread"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Visualizza/E_spandi tutti i thread"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Visualizza/Nascondi tutti i t_hread"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Visualizza/I_mposta voci da visualizzare..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Visualizza/V_ai a"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Visualizza/V_ai a/Messaggio preced_ente"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Visualizza/V_ai a/Messaggio successi_vo"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Visualizza/V_ai a/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Visualizza/V_ai a/Messaggio non letto p_recedente"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Visualizza/V_ai a/Messaggio non _letto successivo"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Visualizza/V_ai a/Messaggio nuovo pre_cedente"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Visualizza/V_ai a/Messaggio nu_ovo successivo"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Visualizza/V_ai a/Messaggio _segnato precedente"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Visualizza/V_ai a/Messaggio se_gnato successivo"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Visualizza/V_ai a/Messaggio etic_hettato precedente"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Visualizza/V_ai a/Messaggio e_tichettato successivo"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Visualizza/V_ai a/Cartella di_fferente..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Visualizza/Co_difica/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Visualizza/Co_difica"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Visualizza/Co_difica/_Automatica"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Visualizza/Co_difica/ASCII a 7 bit (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Visualizza/Co_difica/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Visualizza/Co_difica/Europa Occidentale (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Visualizza/Co_difica/Europa Occidentale (IS_O-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Visualizza/Co_difica/Europa Centrale (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Visualizza/Co_difica/Baltico (I_SO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Visualizza/Co_difica/Baltico (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Visualizza/Co_difica/Greco (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Visualizza/Co_difica/Turco (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Visualizza/Co_difica/Cirillico (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Visualizza/Co_difica/Cirillico (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Visualizza/Co_difica/Ciri_llico (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Visualizza/Co_difica/Cirillico (_Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Visualizza/Co_difica/Giapponese (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Visualizza/Co_difica/Gia_pponese (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Visualizza/Co_difica/Giapponese (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Visualizza/Co_difica/Giapponese (S_hift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Visualizza/Co_difica/Cinese semplificato (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Visualizza/Co_difica/Cinese tradizionale (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Visualizza/Co_difica/Cinese tradizionale (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Visualizza/Co_difica/Cinese (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Visualizza/Co_difica/Coreano (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Visualizza/Co_difica/Corea_no (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Visualizza/Co_difica/Tailandese (TIS-_620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Visualizza/Co_difica/Tailan_dese (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Visualizza/Apri nuova _finestra"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Visualizza/Sorgente messagg_io"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Visualizza/Mostra intesta_zioni"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Visualizza/A_ggiorna sommario"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/M_essaggio"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/M_essaggio/Rice_vi"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/M_essaggio/Rice_vi/Ricevi dall'a_ccount attuale"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/M_essaggio/Rice_vi/Ricevi da _tutti gli account"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/M_essaggio/Rice_vi/Cancella in rice_zione"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/M_essaggio/Rice_vi/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/M_essaggio/Invia messa_ggi accodati"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/M_essaggio/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/M_essaggio/Componi _nuovo messaggio"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/M_essaggio/_Rispondi"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/M_essaggio/Rispondi _a"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/M_essaggio/Rispondi _a/_tutti"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/M_essaggio/Rispondi _a/_mittente"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/M_essaggio/Rispondi _a/mailing _list"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/M_essaggio/_Inoltra"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/M_essaggio/Inoltra come a_llegato"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/M_essaggio/Rispe_disci"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/M_essaggio/Sp_osta..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "M_essaggio/_Copia..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/M_essaggio/Eli_mina"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/M_essaggio/_Segna"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/M_essaggio/_Segna/Segn_a"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/M_essaggio/_Segna/To_gli segno"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/M_essaggio/_Segna/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/M_essaggio/_Segna/Segna co_me non letto"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/M_essaggio/_Segna/Segna come _letto"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/M_essaggio/_Segna/Segna come tutti l_etti"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/M_essaggio/Rimodi_fica"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/S_trumenti/Aggiungi mittente alla ru_brica"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/S_trumenti/_Filtra tutti i messaggi nella cartella"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/S_trumenti/Filtra i messaggi _selezionati"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/S_trumenti/_Crea regola per il filtro"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/S_trumenti/_Crea regola per il filtro/A_utomaticamente"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/S_trumenti/_Crea regola per il filtro/con _Da"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/S_trumenti/_Crea regola per il filtro/con _A"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/S_trumenti/_Crea regola per il filtro/con l'_Oggetto"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/S_trumenti/Elimina messaggi _duplicati"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/S_trumenti/Ese_gui"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/S_trumenti/Finestra di _log"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configurazione"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configurazione/Preferenze _comuni..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configurazione/Configurazione _filtri..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Configurazione/Mo_dello..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configurazione/_Azioni..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configurazione/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configurazione/_Preferenze per l'account attuale..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configurazione/Crea _nuovo account..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configurazione/_Modifica account..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configurazione/Ca_mbia account attuale"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/A_iuto/_Manuale"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/A_iuto/_Manuale/Ingl_ese"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/A_iuto/_Manuale/_Giapponese"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/A_iuto/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/A_iuto/_FAQ/Ingl_ese"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/A_iuto/_FAQ/_Tedesco"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/A_iuto/_FAQ/_Spagnolo"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/A_iuto/_FAQ/_Francese"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/A_iuto/_FAQ/_Italiano"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/A_iuto/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Creazione della finestra principale...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "FinestraPrincipale: l'allocazione del colore %d 竪 fallita.\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "fatto.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Senza titolo"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "niente"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Cambio del tipo di separazione della finestra da %d a %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Offline"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Siete offline. Andare online?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Svuota cestino"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Svuotare tutti i messaggi nel cestino?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Aggiunta di una casella postale"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Inserire la posizione della casella postale.\n"
+"Se 竪 specificata una casella postale esistente, sar\n"
+"esaminata automaticamente."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "La casella postale 束%s損 esiste gi."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Casella postale"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"La creazione della casella postale 竪 fallita.\n"
+"Pu嘆 darsi che esistano gi alcuni file, oppure non si ha il permesso di "
+"scrittura."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Vista cartella"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Vista messaggio"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Rispondi"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Rispondi a _tutti"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/Rispondi _al mittente"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/Rispondi alla mailing _list"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Inoltra"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Inoltra com_e allegato"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Rispe_disci"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Ricevi"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Include la nuova posta"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Ricevi tutti"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Include la nuova posta di tutti gli account"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Invia i messaggi accodati"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Componi"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Compone un nuovo messaggio"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Rispondi"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Risponde al messaggio"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Rispondi tutti"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Risponde a tutti"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Inoltra"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Inoltra il messaggio"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Elimina il messaggio"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Esegui"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Esegue le operazioni segnate"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Successivo messaggio non letto"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferenze"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Preferenze comuni"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Account"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Impostazione dell'account"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Siete offline. Fare click sull'icona per andare online."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Siete online. Fare click sull'icona per andare offline."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Esci"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Uscire da questo programma?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "impossibile scrivere sul file temporaneo\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Ricezione in %s dei messaggi da %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "impossibile leggere il file mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "formato mbox non valido: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox non valida: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "impossibile aprire il file temporaneo\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"trovato un Da senza la sequenza di escape:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "trovati %d messaggi.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "impossibile creare il file di lock %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "se possibile usare 束flock損 al posto di 束file損.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "impossibile creare %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "la casella postale 竪 occupata da un altro processo, attendo...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "impossibile effettuare il lock %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "tipo di lock non valido\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "impossibile liberare il lock su %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "impossibile troncare a zero la casella postale.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Esportazione dei messaggi da %s in %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Trova nel messaggio attuale"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Testo da trovare:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Maiuscole/minuscole"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Ricerca all'indietro"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Ricerca"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Ricerca fallita"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "La stringa ricercata non 竪 stata trovata."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Ho raggiunto l'inizio del messaggio; continuo dalla fine?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Ho raggiunto la fine del messaggio; continuo dall'inizio?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Ricerca terminata"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Creazione della vista del messaggio...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Salva come"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Sovrascrivere"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Sovrascrivere il file esistente?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Impossibile salvare il file 束%s損."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Stampa"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Inserire la riga di comando per la stampa:\n"
+"(束%s損 verr sostituito col nome del file)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"La riga di comando per la stampa non 竪 valida:\n"
+"束%s損"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "impossibile copiare il messaggio %s in %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "impossibile aprire il file delle segnature.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "la cartella sorgente 辿 identica a quella di destinazione.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copia del messaggio %s%c%d in %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Ultimo numero nella cartella %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Apri"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/A_pri con..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Mostra come testo"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Sa_lva come..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Controlla firma"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Creazione della vista MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tipo MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Testo"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Allegati"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Seleziona 束Controlla firma損 per controllare"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Impossibile salvare parte del messaggio composto."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Apri con"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Inserire la riga di comando per aprire il file:\n"
+"(束%s損 verr sostituito col nome del file)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "La riga di comando del visualizzatore MIME non 竪 valida: 束%s損"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "Creazione della connessione NNTP con %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "La connessione NNTP a %s:%d 竪 stata interrotta. Riconnessione...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "l'articolo %d 竪 gi nella cache.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "ricezione dell'articolo %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "impossibile leggere l'articolo %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "impossibile recuperare la lista dei newsgroup\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "impossibile inviare l'articolo.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "impossibile recuperare l'articolo %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "impossibile selezionare il gruppo: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "intervallo di articoli non valido: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "non ci sono nuovi articoli.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "ricezione di xover %d - %d in %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "impossibile ricevere xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "si 竪 verificato un errore durante la ricezione di xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "riga xover non valida: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "impossibile ricevere xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "si 竪 verificato un errore durante la ricezione di xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Impossibile connettersi al server NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "errore del protocollo: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "errore del protocollo\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Si 竪 verificato un errore durante l'invio dell'articolo\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Si 竪 verificato un errore durante l'invio del comando\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Passphrase"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[nessun user id]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sInserire la passphrase per:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Passphrase sbagliata! Provare ancora...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Nel saluto non 竪 stata trovata la necessaria data/ora APOP\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Errore di sintassi nella data/ora del saluto\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Errore nel protocollo POP3\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "risposta UIDL non valida: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Eliminazione del messaggio scaduto %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Salto il messaggio %d (%d byte)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "la casella postale 竪 bloccata\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "timeout della sessione \n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "impossibile avviare la sessione TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "si 竪 verificato un errore durante l'autenticazione\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "comando non supportato\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "si 竪 verificato un errore durante la sessione POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lettura della configurazione...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Trovato %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "La lettura della configurazione 竪 finita.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "La configurazione 竪 stata salvata.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Applica"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Apertura della finestra delle preferenze degli account...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Account%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferenze per il nuovo account"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Preferenze dell'account"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Creazione della finestra delle preferenze degli account...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Ricevi"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacy"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avanzato"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nome di questo account"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Imposta come predefinito"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informazioni personali"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nome completo"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Indirizzo di posta"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizzazione"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informazioni sui server"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+# src/prefs_account.c:634
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Nessuno (locale)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Questo server richiede l'autenticazione"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Server delle news"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server per la ricezione"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Server SMTP (spedisce)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "User ID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Password"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "Usa l'autenticazione sicura (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Rimuovi i messaggi sul server dopo averli ricevuti"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Rimuovi dopo "
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr " giorni"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 giorni: rimuovi immediatamente)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Scarica tutti i messaggi sul server"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Limite della dimensione da ricevere di"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtra i messaggi in ricezione"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Inbox predefinita"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(I messaggi non filtrati saranno memorizzati in questa cartella)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Metodo di autenticazione"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatico"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "束Ricevi tutti損 controlla i nuovi messaggi su questo account"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Intestazione"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Aggiungi il campo Data nell'intestazione"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Genera ID messaggio"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Aggiungi un'intestazione definita dall'utente"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Modifica... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autenticazione"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Autenticazione SMTP (SMTP AUT)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Lasciando vuote queste voci verranno usate\n"
+"la stessa user ID e password della ricezione."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autentica con POP3 prima dell'invio"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Output del comando"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Imposta automaticamente i seguenti indirizzi"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Rispondi a"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Cifra il messaggio per predefinizione"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Firma il messaggio per predefinizione"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Usa il formato ASCII-armato per la cifratura"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Usa la firma con il testo in chiaro"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Chiave della firma"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Usa la chiave predefinita di GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Scegli la chiave per il tuo indirizzo email"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Specifica la chiave manualmente"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ID user o chiave:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Non usare SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Usa SSL per la connessione POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Usa il comando STARTTLS per iniziare la sessione SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Usa SSL per la connessione IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Usa SSL per la connessione NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Invio (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Usa SSL per la connessione SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Usa SSL non bloccato"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Disattivare se si hanno problemi nella connessione SSL)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Specifica la porta SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Specifica la porta POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Specifica la porta IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Specifica la porta NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Specifica il nome di dominio"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Directory del server IMAP4"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Metti i messaggi spediti in"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Metti i messaggi abbozzati in"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Mettei i messaggi eliminati in"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Non 竪 stato immesso il nome dell'account."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Non 竪 stato immesso l'indirizzo di posta."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Non 竪 stato immesso il server SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Non 竪 stato immesso lo user ID."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Non 竪 stato immesso il server POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Non 竪 stato immesso il server IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Non 竪 stato immesso il server NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Non 竪 raccomandato l'uso del vecchio stile ASCII-armato\n"
+"per i messaggi cifrati. Non 竪 compatibile con\n"
+"RFC 3156 - Sicurezza MIME con OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Configurazione delle azioni"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nome del men湛:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Riga di comando:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nome del men湛:\n"
+" Usare / nel nome del men湛 per creare i sottomen湛.\n"
+"Riga di comando:\n"
+" Iniziare con:\n"
+" | per inviare al comando il corpo del messaggio o la selezione\n"
+" > per inviare al comando il testo fornito dall'utente\n"
+" * per inviare al comando il testo nascosto fornito dall'utente\n"
+" Finire con:\n"
+" | per sostituire il corpo del messaggio o la selezione con l'output del "
+"comando\n"
+" >per inserire l'output del comando senza sostituire il vecchio testo\n"
+" & per avviare il comando in maniera asincrona\n"
+" Usare:\n"
+" %f per il nome del file del messaggio\n"
+" %F per la lista dei nomi di file dei messaggi selezionati\n"
+" %p per la parte del messaggio selezionato\n"
+" %u per l'argomento fornito dall'utente\n"
+" %h per l'argomento nascosto fornito dall'utente\n"
+" %s per la selezione del testo"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Sostituisci "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Aiuto sintassi "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Azioni registrate"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nuovo)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Il nome del men湛 non 竪 impostato."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "I due punti 束:損 non sono ammessi nel nome del men湛."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Il nome del men湛 竪 troppo lungo."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "La riga di comando non 竪 impostata."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Il nome del men湛 e il comando sono troppo lunghi."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Il comando\n"
+"%s\n"
+"ha un errore di sintassi."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Elimina l'azione"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Eliminare questa azione?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Creazione della finestra delle preferenze comuni...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferenze comuni"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Cita"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Visualizzazione"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Messaggio"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Altro"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Programma esterno"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Usa un programma esterno per incorporare la posta"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Comando"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Spool locale"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorpora dallo spool"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtra quando incorpori"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Percorso dello spool"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Controllo automatico nuova posta"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "ogni"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuto(i)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Controlla se c'竪 nuova posta all'avvio"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Aggiorna tutte le cartelle locali dopo l'incorporazione"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Massimo numero di articoli da scaricare\n"
+"(0 significa illimitato)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Usa il programma esterno per l'invio"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Salva i messaggi inviati nella cartella 束Inviata損"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Codifica usata in uscita"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatica (Raccomandata)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "ASCII a 7 bit (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europa Occidentale (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europa Occidentale (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Europa Centrale (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltico (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltico (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Greco (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turco (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirillico (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirillico (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirillico (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirillico (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Giapponese (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Giapponese (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Giapponese (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Cinese semplificato (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Cinese tradizionale (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Cinese tradizionale (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Cinese (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Coreano (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tailandese (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tailandese (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Selezionando 束Automatico損 verr usata la codifica\n"
+"ottimale per la localit attuale."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Codifica di trasferimento"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Specificare il contenuto della codifica di trasferimento usata\n"
+"quando il corpo del messaggio contiene dei caratteri non-ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Separatore della firma"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Inserisci automaticamente"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Lancia automaticamente l'editor esterno"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Livello di annulla"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Vai a capo nei messaggi dopo"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caratteri"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "A capo nella citazione"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "A capo durante l'input"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "A capo prima dell'invio"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Seleziona automaticamente l'account per le risposte"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Cita il messaggio quando rispondi"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Il pulsante di risposta attiva la risposta alla mailing list"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formato della risposta"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Simbolo di citazione"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formato di inoltro"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Descrizione dei simboli "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Carattere"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traduci il nome dell'intestazione (come 束Da:損, 束Oggetto:損)"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Mostra il numero dei messaggi non letti vicino al nome della cartella"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Accorcia i newsgroup pi湛 lunghi di"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "lettere"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Vista sommario"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Mostra il destinatario nella colonna 束Da損 se il mittente sei tu stesso"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Espandi i thread"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formato della data"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Imposta le voci visibili nel sommario... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Abilita la colorazione del messaggio"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Mostra l'alfabeto e il numero multy-byte come\n"
+"carattere ASCII (solo Giapponese)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Mostra il riquadro intestazione sopra la vista messaggio"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Mostra le intestazioni abbreviate nella vista messaggio"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Spazio tra le righe"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Lascia spazio all'inizio"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Scorrimento"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Mezza pagina"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Scorrimento uniforme"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Passo"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "Ridimensiona le immagini allegate per adattarle nella finestra"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Controlla automaticamente le firme"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Mostra il risultato del controllo della firma in una finestra di popup"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Conserva temporaneamente in memoria la phassphrase"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Scade dopo"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuto(i)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Impostando a 束0損 si conserver la passphrase\n"
+"per l'intera sessione)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Nascondi l'input durante l'inserimento della passphrase"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Mostra un avvertimento alla partenza se GnuPG non 竪 attivo"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Apri sempre i messaggi nel sommario quando selezionati"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Apri il primo messaggio non letto quando entri in una cartella"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+"Segna il messaggio come letto solo quando 竪 aperto in una nuova finestra"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Vai a 束In entrata損 dopo la ricezione di nuova posta"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Esegui immediatamente quando sposti o elimini dei messaggi"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(I messaggi verranno solo segnati fino all'esecuzione\n"
+"se questa 竪 inattiva)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Finestra di ricezione"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Mostra la finestra di ricezione"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Sempre"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Solo in ricezione manuale"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Mai"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Non mostrare la finestra di popup alla ricezione di un errore"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Chiudi la finestra di ricezione quando finito"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Impostazione delle associazioni dei tasti... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr ""
+"Comandi esterni (gli %s verranno sostituiti con il nome del file / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Browser web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Aggiungi l'indirizzo di destinazione con un doppio click"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "In uscita"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Chiedi la conferma all'uscita"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Svuota il cestino all'uscita"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Chiedi prima di svuotare"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Avverti se ci sono messaggi accodati"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Timeout del socket I/O:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "secondo(i)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "il nome abbreviato del giorno della settimana"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "il nome completo del giorno della settimana"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "il nome abbreviato del mese"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "il nome completo del mese"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "la data e l'ora preferite per la localit attuale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "il numero del secolo (anno/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "il giorno del mese come numero decimale"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "l'ora come numero decimale con l'orologio di 24 ore"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "l'ora come numero decimale con l'orologio di 12 ore"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "il giorno dell'anno come numero decimale"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "il mese come numero decimale"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "i minuti come numero decimale"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM o PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "i secondi come numero decimale"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "il giorno della settimana come numero decimale"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "la data preferita per la localit attuale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "le ultime due cifre dell'anno"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "l'anno come numero decimale"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "il fuso orario o l'abbreviazione"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Specificatore"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Descrizione"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Esempio"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Impostazione dei colori del messaggio"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Colori"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Testo citato - Primo livello"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Testo citato - Secondo livello"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Testo citato - Terzo livello"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Link URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Ricicla i colori di citazione"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Scelta del colore per la citazione di livello 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Scelta del colore per la citazione di livello 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Scelta del colore per la citazione di livello 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Scelta del colore per l'URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Descrizione dei simboli"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Data\n"
+"Da\n"
+"Nome completo del mittente\n"
+"Nome del mittente\n"
+"Iniziali del mittente\n"
+"Oggetto\n"
+"A\n"
+"Cc\n"
+"Newsgroups\n"
+"ID-Messaggio"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Se 竪 impostato x, mostra expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Corpo del messaggio\n"
+"Corpo del messaggio citato\n"
+"Corpo del messaggio senza firma\n"
+"Corpo del messaggio citato senza firma\n"
+"Percentuale"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Backslash\n"
+"Punto interrogativo\n"
+"Parentesi graffa aperta\n"
+"Parentesi graffa chiusa"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Selezione del carattere"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Associazioni dei tasti"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Seleziona la preimpostazione delle associazioni dei tasti.\n"
+"Si pu嘆 anche modificare ognuno dei tasti scorciatoia del men湛 premendo\n"
+"un(dei) tasto(i) quando il puntatore del mouse 竪 sulla voce del men湛."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Predefinita"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Vecchio sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Impostazione dell'intestazione personalizzata"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Intestazioni personalizzate"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Il nome dell'intestazione non 竪 impostato."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Elimina l'intestazione"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Eliminare questa intestazione?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Creazione della finestra di impostazione dell'intestazione...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Mostra l'impostazione dell'intestazione"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Nome dell'intestazione"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Intestazioni visualizzate"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Intestazioni nascoste"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Mostra tutte le intestazioni non specificate"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lettura della configurazione delle intestazioni visualizzate...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Scrittura della configurazione delle intestazioni visualizzate...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Questa intestazione 竪 gi nella lista."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Impostazione dei filtri"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "In alto"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "In basso"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Copia"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Elimina la regola"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Eliminare questa regola?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Regola del filtro"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Se qualcuna delle seguenti condizioni corrisponde"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Se tutte le seguenti condizioni corrispondono"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Eseguire le seguenti azioni:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "A o Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Qualsiasi intestazione"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "Modifica intestazione..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Corpo messaggio"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Risultato del comando"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "Et"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "contiene"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "non contiene"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "竪"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "non 竪"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "corrisponde alla esp.reg."
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "non corrisponde alla esp. reg."
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "竪 pi湛 grande di"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "竪 pi湛 piccolo di"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "竪 pi湛 lungo di"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "竪 pi湛 corto di"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Sposta in"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Copia in"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Non ricevere"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Elimina dal server"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "Imposta segno"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Imposta colore"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Segna come letto"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Inoltra come allegato"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Rispedisci"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Esegui comando"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Ferma valutazione regola"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "cartella:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "indirizzo:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "Modifica lista intestazione"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Intestazioni"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Intestazione:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "Il nome della regola non 竪 specificato."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "Il comando non 竪 specificato."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Esiste una condizione non valida."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "La cartella di destinazione non 竪 specificata."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Esiste un'azione non valida."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "La condizione non esiste."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "L'azione non esiste."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Propriet della cartella"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Generale"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normale"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Non mostrare [...] o (...) all'inizio dell'oggetto nel sommario"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Elimina [...] o (...) all'inizio dell'oggetto nella risposta"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Applica alle sottocartelle"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "usa anche nella risposta"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Rispondi a:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Segna"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Allegato"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Oggetto"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Da"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Data"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Numero"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr ""
+"Creazione della finestra di impostazione delle colonne del sommario...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Impostazione delle voci visibili nel sommario"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Seleziona le voci da visualizzare nella vista sommario. Si pu嘆 modificare\n"
+"l'ordine con i tasti Su / Gi湛 oppure trascinando le voci."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Voci disponibili"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Voci visualizzate"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Ritorna al predefinito "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nome del modello"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr " Registra "
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Sostituisci "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Simboli "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Modelli registrati"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Modelli"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Modello"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Errore nel formato del modello."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Elimina il modello"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Eliminare questo modello?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Conversione del codice fallita.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "Impossibile aprire il file delle segnature\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "impossibile prelevare il messaggio %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "L'invio del messaggio accodato %d 竪 fallito.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "La riga di comando di stampa non 竪 valida: 束%s損\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Stato"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Creazione della finestra di avanzamento...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "si 竪 verificato un errore durante il recupero dei dati.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Impossibile scrivere sul file.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Firma non verificata"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Firma non trovata"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Firma corretta"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "Firma DIFETTOSA"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nessuna chiave pubblica per verificare la firma"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Errore verificando la firma"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Risultati differenti per le firme"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Errore: Stato sconosciuto"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Firma valida da 束%s損"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Firma DIFETTOSA da 束%s損"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Impossibile trovare lo user ID per questa chiave."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " alias 束%s損\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Firma fatta a %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Impronta digitale della chiave: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Seleziona la chiave per 束%s損"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Raccolta delle informazioni per 束%s損 ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Selezione delle chiavi"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID chiave"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Valore"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Aggiungi una chiave"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Immettere un altro user o chiave ID:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "L'intestazione del messaggio accodato 竪 rovinata.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Connessione"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Connessione al server SMTP: %s..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Invio di HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autenticazione"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Invio del messaggio..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Invio di EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Invio di MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Invio"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Invio di RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Invio di DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Esco..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Invio del messaggio (%d di %d byte)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Invio del messaggio"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Si 竪 verificato un errore durante l'invio del messaggio."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Si 竪 verificato un errore durante l'invio del messaggio:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Impostazione della casella postale"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Prima si deve impostare la posizione della casella postale.\n"
+"Si pu嘆 usare una casella postale esistente in formato MH\n"
+"avendone una.\n"
+"In caso di dubbio seleziona semplicemente OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Controllo della firma"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s da 束%s損"
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH non disponibile\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "risposta SMTP difettosa\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "si 竪 verificato un errore durante la sessione SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Creazione della finestra del sorgente...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Sorgente del messaggio"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Visualizzazione del sorgente di %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Sorgente"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 non disponibile\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 disponibile\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 non disponibile\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 disponibile\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Metodo SSL non disponibile\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Metodo SSL sconosciuto *BUG DEL PROGRAMMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Errore creando il contesto ssl\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Connessione SSL fallita (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Connessione SSL usando %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certificato del server:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Oggetto: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Distributore: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Ricerca dei messaggi"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "Corrisponde a qualcuno dei seguenti"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "Corrisponde a tutti i seguenti"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Corpo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Seleziona tutte le corrispondenze"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Ho raggiunto l'inizio della lista; continuo dalla fine?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Ho raggiunto la fine della lista; continuo dall'inizio?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Rispondi _a"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Rispondi _a/t_utti"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Rispondi _a/_mittente"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Rispondi _a/mailing _list"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/Spos_ta..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copia..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/Seg_na"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/Seg_na/Segn_a"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/Seg_na/To_gli segno"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/Seg_na/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/Seg_na/Segna co_me non letto"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/Seg_na/Segna come _letto"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/Seg_na/Segna come tutti l_etti"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Colore etic_hetta"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Rim_odifica"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Aggiungi mittente alla ru_brica"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Visualizza/_Sorgente"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Visualizza/Tutte le intesta_zioni"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Stam_pa..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "S"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "N"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "No."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Creazione della vista del sommario...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Segno del processo"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Sono rimaste alcune operazioni segnate. Le elaboro?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Esame della cartella (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Non esistono pi湛 messaggi non letti"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Non 竪 stato trovato nessun messaggio non letto. Ricerco dalla fine?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Non esistono messaggi non letti."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr ""
+"Non 竪 stato trovato nessun messaggio non letto. Passo alla cartella seguente?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Ricerca ancora"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Non esistono pi湛 messaggi nuovi"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Non 竪 stato trovato nessun messaggio nuovo. Ricerco dalla fine?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Non esistono messaggi nuovi."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr ""
+"Non 竪 stato trovato nessun messaggio nuovo. Passo alla cartella seguente?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Non esistono pi湛 messaggi segnati"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Non 竪 stato trovato nessun messaggio segnato. Ricerco dalla fine?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Non esistono messaggi segnati."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Non 竪 stato trovato nessun messaggio segnato. Ricerco dall'inizio?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Non esistono pi湛 messaggi etichettati"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Non 竪 stato trovato nessun messaggio etichettato. Ricerco dalla fine?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Non esistono messaggi etichettati."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Non 竪 stato trovato nessun messaggio etichettato. Ricerco dall'inizio?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Raggruppamento dei messaggi per oggetto..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d eliminato"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d spostato"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d copiato"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " voci selezionate"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nuovi, %d non letti, %d totale (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nuovi, %d non letti, %d totale"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Ordinamento del sommario..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tImpostazione del sommario dai dati dei messaggi..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Impostazione del sommario dai dati dei messaggi..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Scrittura della cache del sommario (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Nessuna Data)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Il messaggio %d 竪 segnato\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Il messaggio %d 竪 segnato come gi letto\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Il messaggio %d 竪 segnato come non letto\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Il messaggio %s/%d 竪 impostato per l'eliminazione\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Elimina il(i) messaggio(i)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Eliminare il(i) messaggio(i) dal cestino?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Eliminazione dei messaggi duplicati..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Il messaggio %s/%d non 竪 segnato\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Il messaggio %d 竪 impostato per lo spostamento in %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "La destinazione coincide con la cartella attuale."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Il messaggio %d 竪 impostato per la copia in %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "La destinazione della copia coincide con la cartella attuale."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Selezione di tutti i messaggi..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Si 竪 verificato un errore durante l'elaborazione dei messaggi."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Costruzione dei thread..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Senza thread..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Senza thread in esecuzione..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtraggio..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtraggio..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "sono stati filtrati %d messaggi(o)."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "il file %s esiste gi\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Creazione della vista del testo...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Questo messaggio non pu嘆 essere visualizzato.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Per salvare questa parte, aprire il men湛 contestuale "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "cliccando con il tasto destro e selezionare 束Salva come...損, "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"o premere il tasto 束y損.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Per mostrare questa parte come testo, selezionare "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"束Mostra come testo損, o premere il tasto 束t損.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Per aprire questa parte con un programma esterno, selezionare "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "束Apri損 o 束Apri con...損, "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "o fare doppio click, o cliccare col pulsante centrale, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "o premere il tasto 束l損."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Questa firma non 竪 stata ancora controllata.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Per controllarla, aprire il men湛 contestuale cliccando con\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "il tasto destro e selezionare 束Controlla firma損.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"L'URL reale (%s) 竪 diverso dall'URL\n"
+"apparente (%s).\n"
+"Aprirlo comunque?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "la scrittura su %s 竪 fallita.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Impossibile aprire il file %s\n"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 00000000..be35ab42
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,6099 @@
+# Japanese translation of Sylpheed
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>, 1999,2000,2001,2002,2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 1999-10-12\n"
+"Last-Translator: Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>\n"
+"Language-Team: Japanese <ja@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "このプログラムについて"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME の著作権は Werner Koch <dd9jn@gnu.org> 氏 (2001) に帰属します。\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "すべてのアカウント毎の設定を読み込み中...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "ラベル発見: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"メッセージ作成ウィンドウが開いています。\n"
+"アカウントを編集する前にすべてのメッセージ作成ウィンドウを閉じてください。"
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "アカウント編集ウィンドウを開いています...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "アカウント編集ウィンドウを作成中...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "アカウントの編集"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"新着メッセージはこの順番でチェックされます。「全受信」によるメッセージ\n"
+"の取得を有効にするには、「G」カラムのボックスをチェックしてください。"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "名前"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "プロトコル"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "サーバ"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "追加"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "編集"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " 削除 "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr " ↓ "
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr " ↑ "
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 通常使用するアカウントに指定 "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "閉じる"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "アカウントの削除"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "本当にこのアカウントを削除してもいいですか?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "はい"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+いいえ"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "メッセージファイル %d を取得できません"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "メッセージのパートを取得できません。"
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "マルチパートメッセージのパートを取得できません"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"選択されたアクションは %%f, %%F, %%p を含んでいるため\n"
+"メッセージ作成ウィンドウでは使用できません。"
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"コマンドを開始できません。パイプの作成に失敗しました。\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"次のコマンドを実行するために fork できません:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 実行中: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 終了: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "アクションの入出力"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " 送信 "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "中断"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"以下のアクションの引数を入力してください:\n"
+"(`%%h' は引数で置き換えられます)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "アクションの不可視ユーザ引数"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"以下のアクションの引数を入力してください:\n"
+"(`%%u' は引数で置き換えられます)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "アクションのユーザ引数"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "アドレスをアドレス帳に追加"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "アドレス"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "備考"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "アドレス帳フォルダを選択"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/ファイル(_F)"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/ファイル(_F)/新規アドレス帳(_B)"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/ファイル(_F)/新規_vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/ファイル(_F)/新規_JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/ファイル(_F)/新規サーバ(_S)"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/ファイル(_F)/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/ファイル(_F)/編集(_E)"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/ファイル(_F)/削除(_D)"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/ファイル(_F)/保存(_S)"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/ファイル(_F)/閉じる(_C)"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/アドレス(_A)"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/アドレス(_A)/新規アドレス(_A)"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/アドレス(_A)/新規グループ(_G)"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/アドレス(_A)/新規フォルダ(_F)"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/アドレス(_A)/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/アドレス(_A)/編集(_E)"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/アドレス(_A)/削除(_D)"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/ツール(_T)"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/ツール(_T)/_LDIFファイルをインポート"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/ヘルプ(_H)"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/ヘルプ(_H)/このプログラムについて(_A)"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/新規アドレス(_A)"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/新規グループ(_G)"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/新規フォルダ(_F)"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/編集(_E)"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/削除(_D)"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "電子メール アドレス"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "アドレス帳"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "名前:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "削除"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "検索"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "宛先:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "アドレスの削除"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "本当にこのアドレスを削除しますか?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "いいえ"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"`%s' 内のすべてのフォルダとアドレスを削除してもいいですか?\n"
+"フォルダのみを削除する場合、アドレスは親フォルダに移動します。"
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "フォルダのみ"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "フォルダとアドレス"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "本当に `%s' を削除しますか?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "新規ユーザ、インデックスファイルを保存できません。"
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "新規ユーザ、アドレス帳ファイルを保存できません。"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "旧形式のアドレス帳は正しく変換されました。"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"旧形式のアドレス帳は変換されました。\n"
+"新規アドレスインデックスファイルに保存できません"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"アドレス帳を変換できません。\n"
+"しかし空の新規アドレス帳ファイルが作成されました。"
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"アドレス帳を変換できません。\n"
+"新規アドレス帳ファイルを作成できません。"
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"アドレス帳を変換できません。\n"
+"新規アドレス帳ファイルを作成できません。"
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "アドレス帳の変換エラー"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "アドレス帳の変換"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "アドレス帳のエラー"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "アドレスインデックスを読み込めません"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"旧形式のアドレス帳は変換されましたが、新規アドレスインデックスファイルを保存"
+"できません"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"アドレス帳を変換できませんでしたが、空の新規アドレス帳ファイルが作成されまし"
+"た。"
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"アドレス帳を変換できません。新規アドレス帳ファイルを作成できませんでした。"
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"アドレス帳を変換できません。新規アドレス帳ファイルを作成できませんでした。"
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "アドレス帳変換エラー"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "アドレス帳変換"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "インタフェース"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "アドレス帳"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "人物"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "電子メール アドレス"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "グループ"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "フォルダ"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAPサーバ"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "共有アドレス"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "個人用アドレス"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "注意"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "警告"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "エラー"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "警告パネルダイアログを作成中...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "次回もこのメッセージを表示する"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "オレンジ"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "赤"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "ピンク"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "空色"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "青"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "緑"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "茶"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "なし"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/追加(_A)..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/削除(_R)"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/プロパティ(_P)..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/ファイル(_F)/送信(_S)"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/ファイル(_F)/後で送信(_L)"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/ファイル(_F)/草稿フォルダに保存(_D)"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/ファイル(_F)/保存して編集を続ける(_K)"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/ファイル(_F)/ファイルを添付(_A)"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/ファイル(_F)/ファイルを挿入(_I)"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/ファイル(_F)/署名を挿入(_G)"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/編集(_E)/元に戻す(_U)"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/編集(_E)/やり直し(_R)"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/編集(_E)/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/編集(_E)/カット(_T)"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/編集(_E)/コピー(_C)"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/編集(_E)/ペースト(_P)"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/編集(_E)/引用としてペースト(_Q)"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/編集(_E)/すべて選択(_A)"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/編集(_E)/高度な操作(_D)"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/編集(_E)/高度な操作(_D)/1文字戻る"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/編集(_E)/高度な操作(_D)/1文字進む"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/編集(_E)/高度な操作(_D)/1単語戻る"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/編集(_E)/高度な操作(_D)/1単語進む"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/編集(_E)/高度な操作(_D)/行頭に移動"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/編集(_E)/高度な操作(_D)/行末に移動"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/編集(_E)/高度な操作(_D)/前の行に移動"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/編集(_E)/高度な操作(_D)/次の行に移動"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/編集(_E)/高度な操作(_D)/後ろの1文字を削除"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/編集(_E)/高度な操作(_D)/次の1文字を削除"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/編集(_E)/高度な操作(_D)/後ろの1単語を削除"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/編集(_E)/高度な操作(_D)/次の1単語を削除"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/編集(_E)/高度な操作(_D)/行削除"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/編集(_E)/高度な操作(_D)/行末までを削除"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/編集(_E)/現在の段落を整形する(_W)"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/編集(_E)/すべての長い行を折り返す(_L)"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/編集(_E)/自動整形(_O)"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/表示(_V)"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/表示(_V)/宛先(_T)"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/表示(_V)/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/表示(_V)/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/表示(_V)/返信先を指定(_R)"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/表示(_V)/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/表示(_V)/フォロー先を指定(_F)"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/表示(_V)/ルーラ(_U)"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/表示(_V)/添付(_A)"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/ツール(_T)/アドレス帳(_A)"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/ツール(_T)/テンプレート(_T)"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/ツール(_T)/アクション(_N)"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/ツール(_T)/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/ツール(_T)/外部エディタで編集(_X)"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/ツール(_T)/PGP署名(_G)"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/ツール(_T)/PGP暗号化(_E)"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: ファイルが存在しません\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "テキストパートを取得できません\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "引用符の書式が不正です。"
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "メッセージの返信/転送の書式が不正です。"
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "ファイル %s は存在しません\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "ファイル %s のサイズを取得できません\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "ファイル %s は空です。"
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "%s を読み込めません。"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "メッセージ: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "マルチパートメッセージのパートを取得できません。"
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [更新]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - メッセージの作成%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "メッセージの作成%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "宛先が指定されていません。"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "送信"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "件名が空です。とにかく送信しますか?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "送信先のリストを取得できません。"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"メールを送信するためのアカウントが指定されていません。\n"
+"送信する前にメールアカウントを選択してください。"
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "メッセージを %s にポストする途中にエラーが発生しました。"
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "メッセージを送信控に保存できません。"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "現在選択されている鍵ID `%s' に対応する鍵が見つかりませんでした。"
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "ファイルモードを変更できません\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"メッセージの文字エンコーディングを\n"
+"%s から %s に変換できません。\n"
+"とにかく送信しますか?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "ヘッダを書き込めません。\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "古いメッセージを削除できません\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "メッセージを送信待ちに入れています...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "送信待ちフォルダが見つかりません\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "メッセージを送信待機できません\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "生成されたメッセージID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "メッセージ作成ウィンドウを作成中...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME タイプ"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "サイズ"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "差出人:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "メッセージを送信"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "後で送信"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "送信待ちフォルダに入れて後で送信"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "草稿"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "草稿フォルダに保存"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "挿入"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "ファイルを挿入"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "添付"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "ファイルを添付"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "署名"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "署名を挿入"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "エディタ"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "外部エディタで編集"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "整形"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "すべての長い行を折り返す"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "無効な MIME タイプです。"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "ファイルが存在しないかまたは空です。"
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "プロパティ"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "エンコーディング"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "パス"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "ファイル名"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "外部エディタのコマンドラインが無効です: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"外部エディタが動作中です。\n"
+"プロセスを強制終了しますか?\n"
+"プロセスグループID: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "終了したプロセスグループID: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "一時ファイル: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Compose: 監視プロセスからの入力\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "外部エディタを実行できません\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "ファイルに書き込めません\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "パイプの読み込みに失敗\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "メッセージを送信待機できません。"
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "ファイルの選択"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "メッセージの破棄"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "このメッセージは変更されています。破棄しますか?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "破棄"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "草稿へ"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "テンプレート `%s' を適用しますか?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "テンプレートの適用"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "置換"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "アドレスを編集"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "新しい人物を追加"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "人物の詳細を編集"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "メールアドレスを指定する必要があります。"
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "名前と値を指定する必要があります。"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "人物のデータを編集"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "表示名"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "姓"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "名"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "ニックネーム"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "電子メール アドレス"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "別名"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "上に移動"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "下に移動"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "変更"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "クリア"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "内容"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "基本データ"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "ユーザの属性"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "ファイルはOkのようです。"
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "ファイルは有効なアドレス帳フォーマットではないようです。"
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "ファイルを読み込めません。"
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "アドレス帳の編集"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " ファイルをチェック "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "ファイル"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "新規アドレス帳を追加"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "グループ名を指定する必要があります。"
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "グループデータの編集"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "グループ名"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "グループのアドレス"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " → "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " ← "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "利用可能なアドレス"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "矢印ボタンで電子メールアドレスをグループに(から)移動"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "グループの詳細の編集"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "新規グループの追加"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "フォルダの編集"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "フォルダの新しい名前を入力してください:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "新規フォルダ"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "新規フォルダの名前を入力してください:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "ファイルはJPilot形式ではないようです。"
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "JPilotファイルを選択"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "JPilotエントリを編集"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "追加の電子メールアドレスの項目"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "新規JPilotエントリを追加"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "サーバとの接続に成功しました"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "サーバに接続できません"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "LDAPサーバを編集"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "ホスト名"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "ポート"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " サーバをチェック "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "検索ベース"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "検索基準"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " リセット "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "DNをバインド"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "パスワードをバインド"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "タイムアウト(秒)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "最大エントリ数"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "基本"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "拡張"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "新規LDAPサーバを追加"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAPの編集 - 検索ベースを選択"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "利用可能な検索ベース"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "サーバから検索ベースを読み込めません - 手動で指定してください"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "ファイルはvCard形式ではないようです。"
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "vCardファイルの選択"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "vCardエントリの編集"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "新規vCardエントリの追加"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "エクスポート"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "対象となるフォルダとmboxファイルを指定してください。"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "エクスポート元"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "エクスポートファイル:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " 選択... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "エクスポートするファイルを選択"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "設定のファイルへの書き込みに失敗しました\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "フォルダの選択"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "受信箱"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "送信控"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "送信待ち"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "ごみ箱"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "草稿"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NewFolder"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "フォルダ名に `%c' を含むことはできません。"
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "フォルダ `%s' はすでに存在します。"
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "フォルダ `%s' を作成できません。"
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/新規フォルダを作成(_N)..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/フォルダ名を変更(_R)..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/フォルダを削除(_D)"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/ごみ箱を空にする(_T)"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/新着メッセージをチェック(_C)"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/フォルダツリーを再構築(_E)"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/メッセージを検索(_S)..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/ダウンロード(_L)"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/ニュースグループを購読(_B)..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/ニュースグループを削除(_R)"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "フォルダビューを作成中...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "新着"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "未読"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "総数"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "フォルダ情報を設定中...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "フォルダ情報を設定中..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "フォルダをスキャン中 (%s%c%s) ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "フォルダをスキャン中 (%s)..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "フォルダツリーの再構築"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "フォルダツリーを再構築します。続けますか?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "フォルダツリーを再構築中..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "フォルダツリーの再構築に失敗しました。"
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "全フォルダツリーを再構築中..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "全フォルダの新着メッセージをチェック中..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "フォルダ %s が選択されました\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "%s 中のメッセージをダウンロード中..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "`%s' 中のメッセージのダウンロード中にエラーが発生しました。"
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"新規フォルダの名前を入力してください:\n"
+"(サブフォルダを格納するフォルダを作成したい場合は、\n"
+" 名前の最後に `/' を追加してください)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "`%s' の新しい名前を入力してください:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "フォルダ名の変更"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"`%s' 以下のフォルダとメッセージはすべて削除されます。\n"
+"本当に削除してもいいですか?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "フォルダの削除"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "フォルダ `%s' を削除できません。"
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "ごみ箱を空にする"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "ごみ箱の中のメッセージをすべて削除しますか?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"本当にメールボックス `%s' を削除しますか?\n"
+"(メッセージはディスクからは削除されません)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "メールボックスの削除"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "本当にIMAP4アカウント `%s' を削除しますか?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "IMAP4アカウントの削除"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "本当にニュースグループ `%s' を削除しますか?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "ニュースグループの削除"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "本当にニュースアカウント `%s' を削除しますか?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "ニュースアカウントの削除"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "ニュースグループの購読"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "購読するニュースグループを選択してください。"
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "グループを検索:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 検索 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "ニュースグループ名"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "メッセージ"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "タイプ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "更新"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "モデレート"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "購読のみ"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "不明"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "ニュースグループリストを取得できません。"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "完了."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d ニュースグループを受信 (%s 受信)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "日本語Abc"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "ニュースグループ:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "件名:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "ヘッダビューを作成中...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(差出人不明)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(件名なし)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "イメージビューを作成中...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "画像を読み込めません。"
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "%s へのIMAP4の接続が切れています。再接続します...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "%s:%d へのIMAP4の接続を確立中...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "TLS セッションを開始できません。\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "deleted フラグをセットできません: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "expunge できません\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "deleted フラグをセットできません: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "フォルダをクローズできません\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "ルートフォルダ %s が存在しません\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "LIST の取得中にエラーが発生しました。\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "'%s' を作成できません。\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "INBOX の下に '%s' を作成できません。\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "メールボックスを作成できません: LIST に失敗\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "メールボックスを作成できません\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "メールボックスを名称変更できません: %s -> %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "メールボックスを削除できません\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "エンベロープを取得できません\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "エンベロープを取得中にエラーが発生しました。\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "エンベロープを解析できません: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "IMAP4 サーバ: %s:%d に接続できません\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "%s:%d との IMAP4 セッションを確立できません\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "namespace を取得できません\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "フォルダ %s を選択できません\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 の認証に失敗しました。\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4のログインに失敗しました。\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "%s を %s に追加できません\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(ファイルを送信中...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "メッセージを %s に追加できません\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "%s を %s にコピーできません\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "imap コマンド中のエラー: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "imap コマンド中のエラー: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "imap コマンド中のエラー: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv が UTF-7 を %s に変換できません\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv が %s を UTF-7 に変換できません\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "インポート"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "対象となるmboxファイルとインポート先のフォルダを指定してください。"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "インポートファイル:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "インポート先:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "インポートするファイルを選択"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "インポートするアドレス帳の名前とファイルを指定して下さい。"
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "インポートするLDIFフィールド名を選択して名称を変更してください。"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "ファイルをインポートしました。"
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "ファイルを選択してください。"
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "アドレス帳の名前を指定する必要があります。"
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "LDIFファイルの読み込み中にエラーが発生しました。"
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIFファイルは正しく変換されました。"
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "LDIFファイルの選択"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "ファイル名"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIFフィールド"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "属性名"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "属性"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "選択"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "アドレス帳 :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "ファイル名 :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "レコード :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "LDIFファイルをアドレス帳へインポート"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "前へ"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "次へ"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "ファイル情報"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "属性"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "完了"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "新着メッセージを受信中"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "待機中"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "キャンセル"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "受信中"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "完了 (%d 通 (%s) 受信)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "完了 (新着メッセージなし)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "接続失敗"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "認証失敗"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "ロック中"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "タイムアウト"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "完了 (%d 通の新着メッセージ)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "完了 (新着メッセージなし)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "メールの取得中にエラーが発生しました。"
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "アカウント %s の新着メッセージを取り込んでいます...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 新着メッセージを受信中"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "POP3サーバ: %s に接続中..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "POP3サーバ: %s:%d に接続できません\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "認証中..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "%s からメッセージを受信中..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "新着メッセージの数を取得中 (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "新着メッセージの数を取得中 (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "新着メッセージの数を取得中 (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "メッセージのサイズを取得中 (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "メッセージ %d を削除中"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "切断中"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "メッセージを受信中 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "受信中 (%d 通 (%s) 受信)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "接続に失敗しました。"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "メールの処理中にエラーが発生しました。"
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"メールの処理中にエラーが発生しました:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "ディスクの空き容量がありません。"
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "ファイルに書き込めません。"
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "ソケットエラーです。"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "リモートホストによって接続を切断されました。"
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "メールボックスはロックされています。"
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"メールボックスはロックされています:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "認証に失敗しました。"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"認証に失敗しました:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "セッションがタイムアウトしました。"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "受信をキャンセルしました\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "新しいメッセージを %s から %s に取り込んでいます...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "%s (%s) のパスワードを入力してください:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "パスワードの入力"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "プロトコルログ"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"ファイル `%s' がすでに存在します。\n"
+"フォルダを作成できません。"
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread は glib によってサポートされていません。\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG が正しくインストールされていないか、バージョンが古すぎます。\n"
+"OpenPGP サポートは無効です。"
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "使用法: %s [オプション]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [address] メッセージ作成ウィンドウを開く"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" 指定したファイルを添付してメッセージ作成\n"
+" ウィンドウを開く"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 新着メッセージを受信する"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 全アカウントの新着メッセージを受信する"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 送信待機中のメッセージをすべて送信する"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [folder]... メッセージの総数を表示する"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [folder]...\n"
+" 各フォルダの状態を表示する"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug デバッグモード"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help このヘルプを表示して終了する"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version バージョン情報を出力して終了する"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "作成中のメッセージが存在します。本当に終了しますか?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "送信待機中のメッセージ"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "送信待機中の未送信メッセージがあります。終了しますか?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "別の Sylpheed がすでに起動しています。\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/ファイル(_F)/フォルダ(_F)"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/ファイル(_F)/フォルダ(_F)/新規フォルダを作成(_N)..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/ファイル(_F)/フォルダ(_F)/フォルダ名を変更(_R)..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/ファイル(_F)/フォルダ(_F)/フォルダを削除(_D)"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/ファイル(_F)/メールボックス(_M)"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/ファイル(_F)/メールボックス(_M)/メールボックスを追加(_M)..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/ファイル(_F)/メールボックス(_M)/メールボックスを削除(_R)"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/ファイル(_F)/メールボックス(_M)/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/ファイル(_F)/メールボックス(_M)/新着メッセージをチェック(_C)"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr ""
+"/ファイル(_F)/メールボックス(_M)/すべてのメールボックスの新着メッセージを"
+"チェック(_A)"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "//ファイル(_F)/メールボックス(_M)/フォルダツリーを再構築(_E)"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/ファイル(_F)/mboxファイルをインポート(_I)..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/ファイル(_F)/mboxファイルにエクスポート(_E)..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/ファイル(_F)/すべてのごみ箱を空にする(_T)"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/ファイル(_F)/名前を付けて保存(_S)..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/ファイル(_F)/印刷(_P)..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/ファイル(_F)/オフラインにする(_W)"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/ファイル(_F)/終了(_X)"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/編集(_E)/スレッドを選択(_T)"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/編集(_E)/現在のメッセージを検索(_F)..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/編集(_E)/メッセージを検索(_S)..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/表示(_V)/表示・非表示(_D)"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/表示(_V)/表示・非表示(_D)/フォルダツリー(_F)"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/表示(_V)/表示・非表示(_D)/メッセージビュー(_M)"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/表示(_V)/表示・非表示(_D)/ツールバー(_T)"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/表示(_V)/表示・非表示(_D)/ツールバー(_T)/アイコンと文字(_A)"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/表示(_V)/表示・非表示(_D)/ツールバー(_T)/アイコン(_I)"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/表示(_V)/表示・非表示(_D)/ツールバー(_T)/文字(_T)"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/表示(_V)/表示・非表示(_D)/ツールバー(_T)/非表示(_N)"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/表示(_V)/表示・非表示(_D)/ステータスバー(_B)"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/表示(_V)/フォルダツリーを分離(_O)"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/表示(_V)/メッセージビューを分離(_E)"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/表示(_V)/ソート(_S)"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/表示(_V)/ソート(_S)/番号順(_N)"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/表示(_V)/ソート(_S)/サイズ順(_I)"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/表示(_V)/ソート(_S)/日付順(_D)"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/表示(_V)/ソート(_S)/差出人順(_F)"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/表示(_V)/ソート(_S)/宛先順(_R)"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/表示(_V)/ソート(_S)/件名順(_S)"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/表示(_V)/ソート(_S)/カラーラベル順(_C)"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/表示(_V)/ソート(_S)/マーク(_M)"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/表示(_V)/ソート(_S)/未読(_U)"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/表示(_V)/ソート(_S)/添付(_T)"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/表示(_V)/ソート(_S)/ソートしない(_O)"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/表示(_V)/ソート(_S)/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/表示(_V)/ソート(_S)/昇順"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/表示(_V)/ソート(_S)/降順"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/表示(_V)/ソート(_S)/件名で寄せる(_A)"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/表示(_V)/スレッド表示(_R)"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/表示(_V)/すべてのスレッドを展開(_X)"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/表示(_V)/すべてのスレッドを閉じる(_L)"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/表示(_V)/表示項目の設定(_I)..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/表示(_V)/移動(_G)"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/表示(_V)/移動(_G)/前のメッセージ(_P)"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/表示(_V)/移動(_G)/次のメッセージ(_N)"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/表示(_V)/移動(_G)/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/表示(_V)/移動(_G)/前の未読メッセージ(_R)"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/表示(_V)/移動(_G)/次の未読メッセージ(_E)"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/表示(_V)/移動(_G)/前の新着メッセージ(_W)"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/表示(_V)/移動(_G)/次の新着メッセージ(_X)"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/表示(_V)/移動(_G)/前のマーク付きメッセージ(_M)"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/表示(_V)/移動(_G)/次のマーク付きメッセージ(_A)"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/表示(_V)/移動(_G)/前のラベル付きメッセージ(_L)"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/表示(_V)/移動(_G)/次のラベル付きメッセージ(_B)"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/表示(_V)/移動(_G)/別のフォルダ(_F)..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/表示(_V)/文字コードセット(_C)/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/表示(_V)/文字コードセット(_C)"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/表示(_V)/文字コードセット(_C)/自動検出(_A)"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/表示(_V)/文字コードセット(_C)/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/表示(_V)/文字コードセット(_C)/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/表示(_V)/文字コードセット(_C)/欧米 (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/表示(_V)/文字コードセット(_C)/欧米 (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/表示(_V)/文字コードセット(_C)/中欧 (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/表示(_V)/文字コードセット(_C)/バルト諸国 (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/表示(_V)/文字コードセット(_C)/バルト諸国 (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/表示(_V)/文字コードセット(_C)/ギリシャ語 (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/表示(_V)/文字コードセット(_C)/トルコ語 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/表示(_V)/文字コードセット(_C)/キリル文字 (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/表示(_V)/文字コードセット(_C)/キリル文字 (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/表示(_V)/文字コードセット(_C)/キリル文字 (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/表示(_V)/文字コードセット(_C)/キリル文字 (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/表示(_V)/文字コードセット(_C)/日本語 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/表示(_V)/文字コードセット(_C)/日本語 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/表示(_V)/文字コードセット(_C)/日本語 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/表示(_V)/文字コードセット(_C)/日本語 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/表示(_V)/文字コードセット(_C)/簡体字中国語 (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/表示(_V)/文字コードセット(_C)/繁体字中国語 (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/表示(_V)/文字コードセット(_C)/繁体字中国語 (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/表示(_V)/文字コードセット(_C)/中国語 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/表示(_V)/文字コードセット(_C)/韓国語 (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/表示(_V)/文字コードセット(_C)/韓国語 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/表示(_V)/文字コードセット(_C)/タイ語 (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/表示(_V)/文字コードセット(_C)/タイ語 (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/表示(_V)/新しいウィンドウで開く(_W)"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/表示(_V)/メッセージのソース(_A)"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/表示(_V)/すべてのヘッダを表示(_H)"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/表示(_V)/サマリを更新(_U)"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/メッセージ(_M)"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/メッセージ(_M)/受信(_V)"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/メッセージ(_M)/受信(_V)/現在のアカウントから受信(_C)"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/メッセージ(_M)/受信(_V)/全アカウントから受信(_A)"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/メッセージ(_M)/受信(_V)/受信を中止(_G)"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/メッセージ(_M)/受信(_V)/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/メッセージ(_M)/送信待機中のメッセージを送信(_S)"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/メッセージ(_M)/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/メッセージ(_M)/新規メッセージを作成(_N)"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/メッセージ(_M)/返信(_R)"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/メッセージ(_M)/返信の宛先(_Y)"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/メッセージ(_M)/返信の宛先(_Y)/全員に返信(_A)"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/メッセージ(_M)/返信の宛先(_Y)/差出人に返信(_S)"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/メッセージ(_M)/返信の宛先(_Y)/メーリングリストに返信(_L)"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/メッセージ(_M)/転送(_F)"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/メッセージ(_M)/添付として転送(_W)"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/メッセージ(_M)/手を加えずに転送(_T)"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/メッセージ(_M)/移動(_O)..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/メッセージ(_M)/コピー(_C)..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/メッセージ(_M)/削除(_D)"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/メッセージ(_M)/マーク(_M)"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/メッセージ(_M)/マーク(_M)/マーク(_M)"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/メッセージ(_M)/マーク(_M)/マーク解除(_U)"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/メッセージ(_M)/マーク(_M)/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/メッセージ(_M)/マーク(_M)/未読としてマーク(_E)"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/メッセージ(_M)/マーク(_M)/読んだことにする(_D)"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/メッセージ(_M)/マーク(_M)/すべて読んだことにする(_R)"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/メッセージ(_M)/再編集(_E)"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/ツール(_T)/差出人をアドレス帳に追加(_K)"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/ツール(_T)/フォルダ中のすべてのメッセージを振り分け(_F)"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/ツール(_T)/選択中のメッセージを振り分け(_F)"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/ツール(_T)/振り分けルールを作成(_C)"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/ツール(_T)/振り分けルールを作成(_C)/自動(_A)"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/ツール(_T)/振り分けルールを作成(_C)/_Fromから"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/ツール(_T)/振り分けルールを作成(_C)/_Toから"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/ツール(_T)/振り分けルールを作成(_C)/_Subjectから"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/メッセージ(_M)/重複メッセージを削除(_P)"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/ツール(_T)/実行(_X)"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/ツール(_T)/ログウィンドウ(_L)"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/設定(_C)"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/設定(_C)/全般の設定(_C)..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/設定(_C)/振り分けの設定(_F)..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/設定(_C)/テンプレート(_T)..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/設定(_C)/アクション(_A)..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/設定(_C)/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/設定(_C)/現在のアカウントの設定(_P)..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/設定(_C)/新規アカウントの作成(_N)..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/設定(_C)/アカウントの編集(_E)..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/設定(_C)/現在のアカウントを変更(_H)"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/ヘルプ(_H)/マニュアル(_M)"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/ヘルプ(_H)/マニュアル(_M)/英語(_E)"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/ヘルプ(_H)/マニュアル(_M)/日本語(_J)"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/ヘルプ(_H)/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/ヘルプ(_H)/_FAQ/英語(_E)"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/ヘルプ(_H)/_FAQ/ドイツ語(_G)"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/ヘルプ(_H)/_FAQ/スペイン語(_S)"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/ヘルプ(_H)/_FAQ/フランス語(_F)"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/ヘルプ(_H)/_FAQ/イタリア語(_I)"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/ヘルプ(_H)/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "メインウィンドウを作成中...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: 色の割り当て %d に失敗しました\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "完了。\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "名称未設定"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "なし"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "ウィンドウの分離タイプを %d から %d に変更しています\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "オフライン"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "現在オフラインです。オンラインにしますか?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "すべてのごみ箱を空にする"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "すべてのごみ箱の中のメッセージを削除しますか?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "メールボックスを追加"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"メールボックスの位置を入力してください。\n"
+"既存のメールボックスを指定すると自動的にスキャンします。"
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "メールボックス `%s' はすでに存在します。"
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "メール箱"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"メールボックスの作成に失敗しました。\n"
+"いくつかのファイルがすでに存在するか、あるいは書き込む権限がありません。"
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - フォルダビュー"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - メッセージビュー"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/返信(_R)"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/全員に返信(_A)"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/差出人に返信(_S)"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/メーリングリストに返信(_L)"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/転送(_F)"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/添付として転送(_W)"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/手を加えずに転送(_T)"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "受信"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "新着メールの取込"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "全受信"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "全アカウントの新着メールの取込"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "送信待機中のメッセージを送信する"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "作成"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "新規メッセージの作成"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "返信"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "メッセージに返信する"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "全員に返信"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "全員に返信"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "転送"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "メッセージを転送する"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "メッセージを削除する"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "実行"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "マークされた処理を実行"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "次の未読メッセージ"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "設定"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "全般の設定"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "アカウント"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "アカウントの設定"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "現在オフラインです。アイコンをクリックするとオンラインになります。"
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "現在オンラインです。アイコンをクリックするとオフラインになります。"
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "終了"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "このプログラムを終了しますか?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "一時ファイルに書き込めません\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "メッセージを %s から %s に取り込んでいます...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "メールボックスファイルを読み込めません。\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "無効なメールボックスの形式: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "メールボックスが異常です: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "一時ファイルを開けません\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"エスケープされていない From が見つかりました:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d 通のメッセージが見つかりました。\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "ロックファイル %s を開けません\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "可能であれば 'file' の代わりに 'flock' を使用してください。\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "%s を作成できません。\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "メールボックスは別のプロセスによって所有されています。待機中...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "%s をロックできません\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "無効なロックタイプです\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "%s をロック解除できません\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "メールボックスをゼロに切り詰められません。\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "メッセージを %s から %s に書き出しています...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "現在のメッセージを検索"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "検索文字列:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "大文字/小文字を区別"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "後方検索"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "検索"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "検索失敗"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "検索文字列が見つかりません。"
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "メッセージの先頭まで検索しました。最後から検索しますか?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "メッセージの終わりまで検索しました。始めから検索しますか?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "検索完了"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "メッセージビューを作成中...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "名前を付けて保存"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "上書き"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "既存のファイルを上書きしますか?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "ファイル `%s' を保存できません。"
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "印刷"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"印刷コマンドを入力してください:\n"
+"(`%s' はファイル名で置き換えられます)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"印刷のコマンドラインが無効です:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "メッセージ %s を %s にコピーできません\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "マークファイルを開けません。\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "移動元フォルダが移動先と同一です。\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "メッセージ %s%c%d を %s にコピーしています...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "ディレクトリ %s 内の最後の番号 = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/開く(_O)"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/アプリケーションから開く(_W)..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/テキストとして表示(_D)"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/名前を付けて保存(_S)..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/署名を検証(_C)"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "MIME ビューを作成中...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME タイプ"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "テキスト"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "添付"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "検証するには、 \"署名を検証\" を選択してください"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "マルチパートメッセージのパートを保存できません。"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "アプリケーションから開く"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"ファイルを開くコマンドを入力してください:\n"
+"(`%s' はファイル名で置き換えられます)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME ビューアのコマンドラインが無効です: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "%s:%d への NNTP の接続を確立中...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "%s:%d への NNTP の接続が切れています。再接続します...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "%d 番の記事はすでにキャッシュされています。\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "%d 番の記事を取得しています...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "%d 番の記事を読めません\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "ニュースグループリストを取得できません\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "記事をポストできません。\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "%d 番の記事を取得できません\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "グループを選択できません: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "無効な記事の範囲です: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "新着記事はありません。\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "xover %d - %d を取得中 (%s)...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "xover 情報を取得できません\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "xover 情報を取得中にエラーが発生しました。\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "無効な xover 行です: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "xhdr 情報を取得できません\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "xhdr 情報を取得中にエラーが発生しました。\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "NNTPサーバ: %s:%d に接続できません\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "プロトコルエラー: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "プロトコルエラー\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "ポスト中にエラーが発生しました\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "コマンドの送信中にエラーが発生しました\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "パスフレーズ"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[ユーザIDなし]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sパスフレーズを入力してください:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"不正なパスフレーズです! 再入力して下さい...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "必要なAPOPタイムスタンプが応答メッセージにありません\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "応答メッセージのタイムスタンプの文法エラー\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 プロトコルエラー\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "無効な UIDL 応答です: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 期限切れのメッセージ %d を削除します\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: メッセージ %d をスキップします (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "メールボックスはロックされています\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "セッションがタイムアウトしました\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "TLS セッションを開始できません\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "認証中にエラーが発生しました\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "コマンドがサポートされていません\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "POP3 セッション中にエラーが発生しました\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "設定を読み込み中...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "%s が見つかりました\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "設定の読み込みを完了しました。\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "設定を保存しました。\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "適用"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "アカウントプリファレンスウィンドウを開いています...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Account%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "新規アカウントの設定"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "アカウントの設定"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "アカウントプリファレンスウィンドウを作成中...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "受信"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "個人情報"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "高度な設定"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "このアカウントの名称"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "通常使用"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "個人情報"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "名前"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "メールアドレス"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "組織"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "サーバ情報"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "ニュース (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "なし (ローカル)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "このサーバは認証が必要"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "ニュースサーバ"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "受信用サーバ"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTPサーバ (送信)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "ユーザID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "パスワード"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "安全な認証方式を使用する (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "受信時にサーバ上のメッセージを削除する"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "メッセージを"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "日後に削除"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0日: 即座に削除)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "サーバ上のすべてのメッセージを受信する"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "受信サイズ制限"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "受信時にメッセージを振り分ける"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "標準の受信箱"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(振り分けされないメッセージはこのフォルダに格納されます)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "認証方式"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "自動"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "「全受信」でこのアカウントの新着メッセージをチェックする"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "ヘッダ"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dateヘッダフィールドを付ける"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "メッセージIDを生成する"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "ユーザ定義のヘッダを追加する"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " 編集... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "認証"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP認証 (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"このエントリが空のときは、受信時と同じ\n"
+"ユーザIDとパスワードが使用されます。"
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "送信前にPOP3認証を行う"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "コマンドの出力"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "以下のアドレスを自動指定"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Reply-To"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "標準でメッセージを暗号化する"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "標準でメッセージに署名する"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "暗号化に ASCII 包装形式を使用する"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "クリアテキスト署名を使用する"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "署名鍵"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "標準のGnuPG鍵を使用する"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "自分の電子メールアドレスで鍵を選択する"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "鍵を手動で指定する"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ユーザまたは鍵ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "SSLを使用しない"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "POP3の接続にSSLを使用"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "SSLセッションの開始にSTARTTLSコマンドを使用"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "IMAP4の接続にSSLを使用"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "NNTPの接続にSSLを使用"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "送信 (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SMTPの接続にSSLを使用"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "非ブロッキングSSLを使用する"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(SSL の接続に問題が生じる場合はオフにしてください)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTPポートを指定"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3ポートを指定"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4ポートを指定"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "NNTPポートを指定"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "ドメイン名を指定"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAPサーバディレクトリ"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "送信控フォルダの場所"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "草稿フォルダの場所"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "ごみ箱フォルダの場所"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "アカウント名が入力されていません。"
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "メールアドレスが入力されていません。"
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTPサーバが入力されていません。"
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "ユーザIDが入力されていません。"
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3サーバが入力されていません。"
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4サーバが入力されていません。"
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTPサーバが入力されていません。"
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"暗号化メッセージに旧形式の ASCII 包装方式を使用することは推奨されて\n"
+"いません。この形式は RFC 3156 - MIME Security with OpenPGP\n"
+"に準拠していません。"
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "アクションの設定"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "メニュー名:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "コマンドライン:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"メニュー名:\n"
+" サブメニューを作成するにはメニュー名の中に / を使用してください。\n"
+"コマンドライン:\n"
+" 先頭:\n"
+" | メッセージ本文または選択部をコマンドに送る\n"
+" > ユーザが指定した文字列をコマンドに送る\n"
+" * ユーザが指定した不可視文字列をコマンドに送る\n"
+" 末尾:\n"
+" | メッセージ本文または選択部をコマンドの出力で置き換える\n"
+" > 元の文字列を置換せずにコマンドの出力を挿入する\n"
+" & コマンドを非同期に実行する\n"
+" 変換文字:\n"
+" %f メッセージのファイル名\n"
+" %F 選択されたメッセージのファイル名のリスト\n"
+" %p 選択されたメッセージのパート\n"
+" %u ユーザが指定した引数\n"
+" %h ユーザが指定した不可視引数\n"
+" %s 選択文字列"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " 置換 "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " 文法のヘルプ "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "登録済みアクション"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(新規)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "メニュー名が指定されていません。"
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "コロン ':' はメニュー名には使えません。"
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "メニュー名が長すぎます。"
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "コマンドラインが指定されていません。"
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "メニュー名とコマンドラインが長すぎます。"
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"コマンド\n"
+"%s\n"
+"に文法の誤りがあります。"
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "アクションの削除"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "本当にこのアクションを削除してもいいですか?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "全般プリファレンスウィンドウを作成中...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "全般の設定"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "引用"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "表示"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "メッセージ"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "その他"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "外部プログラム"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "メールの受信に外部プログラムを使用する"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "コマンド"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "ローカルスプール"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "スプールから取り込む"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "取込時に振り分ける"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "スプールのパス"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "新着メールを自動チェックする"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr " "
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "分ごと"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "起動時に新着メールをチェックする"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "受信後にすべてのローカルフォルダを更新する"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "ニュース"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"ダウンロードする記事数の上限\n"
+"(0で無制限)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "メールの送信に外部プログラムを使用する"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "送信したメッセージを送信控に保存する"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "送信コードセット"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "自動設定 (推奨)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "欧米 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "欧米 (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "中欧 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "バルト諸国 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "バルト諸国 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "ギリシャ語 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "トルコ語 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "キリル文字 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "キリル文字 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "キリル文字 (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "キリル文字 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "日本語 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "日本語 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "日本語 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "簡体字中国語 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "繁体字中国語 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "繁体字中国語 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "中国語 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "韓国語 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "タイ語 (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "タイ語 (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"「自動設定」を選択した場合は、現在のロカールに最適な\n"
+"エンコーディングが使用されます。"
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "転送符号化方式"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"メッセージ本文が ASCII 文字以外を含む場合に使用する\n"
+"Content-Transfer-Encoding を指定してください。"
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "署名の区切り"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "自動的に挿入する"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "外部エディタを自動的に起動する"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "アンドゥの回数"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "メッセージを半角"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "文字で改行"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "引用部を自動整形する"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "入力時に自動整形する"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "送信時に自動整形する"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "返信時に自動的にアカウントを選択する"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "返信時にメッセージを引用する"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "返信ボタンでメーリングリストに返信する"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "返信の書式"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "引用符"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "転送の書式"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 記号の説明 "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "フォント"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "ヘッダの項目を翻訳する (例えば `From:', `Subject:' 等)"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "フォルダ名の横に未読数を表示する"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "文字数が"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "字より長いニュースグループ名を簡略表示"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "サマリビュー"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "差出人が自分の場合は `差出人' カラムに宛先を表示する"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "スレッドを展開する"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "日付の書式"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " サマリの表示項目を設定... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "メッセージの色を有効にする"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "マルチバイト英数字を ASCII 文字で表示する (日本語のみ)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "メッセージビューの上部にヘッダペインを表示する"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "メッセージビューに簡略ヘッダを表示する"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "行間を空ける"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "ピクセル"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "行頭を空ける"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "スクロール"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "半ページ単位"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "スムーズスクロール"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "間隔"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "大きな添付画像をウィンドウにあわせてリサイズする"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "署名を自動的に検証する"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "署名の検証結果をポップアップウィンドウで表示する"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "パスフレーズをメモリ上に一時的に記憶する"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "有効期間"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "分"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"('0' に設定するとセッションの間中パスフレーズを\n"
+" 記憶します)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "パスフレーズの入力時に入力を捕捉する"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "GnuPG が動作しない場合起動時に警告を表示する"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "サマリでメッセージを選択したとき常に開く"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "フォルダに入ったときに最初の未読メッセージを開く"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "新規ウィンドウで開いたときのみメッセージを既読としてマーク"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "新着メールを受信した後受信箱に移動する"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "メッセージを移動または削除したら即座に実行する"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(これを無効にすると、メッセージは実行されるまで\n"
+" マークされた状態になります)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "受信ダイアログ"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "受信ダイアログを"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "常に表示"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "手動で受信した場合のみ表示"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "表示しない"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "受信エラー時にエラーダイアログをポップアップしない"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "完了時に受信ダイアログを閉じる"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " キーバインドを設定... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "外部コマンド (%s はファイル名・URIで置き換えられます)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Webブラウザ"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "ダブルクリックしたときにアドレスを宛先に追加する"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "終了時"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "終了時に確認する"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "終了時にごみ箱を空にする"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "空にする前に尋ねる"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "送信待機中のメッセージがあれば警告する"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "ソケット I/O のタイムアウト:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "秒"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "曜日の省略名"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "曜日の完全な名前"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "月の省略名"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "月の完全な名前"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "現在の地域における一般的な日付と時刻の表記"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "世紀(西暦年の上2桁)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "日(10進数表記)"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "24時間時計での時"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "12時間時計での時"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "年の初めから通算の日数(10進数表記)"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "月(10進数表記)"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "分(10進数表記)"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "午前または午後"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "秒(10進数表記)"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "週の何番目の日か(10進数表記)"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "現在の地域における一般的な日付表記"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "西暦の下2桁(世紀部分を含まない年)"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "(4桁の)西暦年"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "タイムゾーンまたはゾーン名または省略名"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "指定子"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "説明"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "例"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "メッセージの色を指定"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "色"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "引用文 - 1段階"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "引用文 - 2段階"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "引用文 - 3段階"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI リンク"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "引用色を循環"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "引用レベル1の色を選択"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "引用レベル2の色を選択"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "引用レベル3の色を選択"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "URI の色を選択"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "記号の説明"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"日付\n"
+"差出人\n"
+"差出人の氏名\n"
+"差出人の名前\n"
+"差出人のイニシャル\n"
+"件名\n"
+"宛先\n"
+"Cc\n"
+"ニュースグループ\n"
+"メッセージID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "xが指定されていればexprを表示"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"メッセージ本文\n"
+"引用符付きメッセージ本文\n"
+"メッセージ本文(署名なし)\n"
+"引用符付きメッセージ本文(署名なし)\n"
+"文字 %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"文字 バックスラッシュ(円記号)\n"
+"文字 疑問符\n"
+"文字 開き中括弧\n"
+"文字 閉じ中括弧"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "フォントの選択"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "キーバインド"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"キーバインドのプリセットを選択してください。\n"
+"また、マウスポインタをメニューの項目の上に置きキーを押す\n"
+"ことで各メニューのショートカットを変更することもできます。"
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "標準"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "旧Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "カスタムヘッダの設定"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "カスタムヘッダ"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "ヘッダ名が指定されていません。"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "ヘッダの削除"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "本当にこのヘッダを削除してもいいですか?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "表示ヘッダ設定ウィンドウを作成中...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "表示ヘッダの設定"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "ヘッダ名"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "表示するヘッダ"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "表示しないヘッダ"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "指定されていないヘッダをすべて表示"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "表示ヘッダの設定を読み込み中...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "表示ヘッダの設定を書き出し中...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "このヘッダはすでにリスト中に存在します。"
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "振り分けの設定"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "有効"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "先頭"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "末尾"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "コピー"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "ルールの削除"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "本当にこのルールを削除してもいいですか?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "フィルタルール"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "次の条件のいずれかが該当する場合"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "次の条件のすべてが該当する場合"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "次のアクションを実行:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "To または Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "いずれかのヘッダ"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "ヘッダを編集..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "メッセージ本文"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "コマンドの実行結果"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "経過日数"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "が次を含む"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "が次を含まない"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "が次に一致"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "が次に一致しない"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "が次の正規表現にマッチ"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "が次の正規表現にマッチしない"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "が次より大きい"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "が次より小さい"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "が次より長い"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "が次より短い"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "移動"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "コピー"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "受信しない"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "サーバから削除"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "マーク"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "カラーラベルを指定"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "読んだことにする"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "添付として転送"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "手を加えずに転送"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "コマンドを実行"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "ルールの評価を停止"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "フォルダ:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "アドレス:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "ヘッダリストの編集"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "ヘッダ"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "ヘッダ:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "ルール名が指定されていません。"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "コマンドが指定されていません。"
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "無効な条件が存在します。"
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "移動先のフォルダが指定されていません。"
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "無効なアクションが存在します。"
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "条件が存在しません。"
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "アクションが存在しません。"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "フォルダのプロパティ"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "一般"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "通常"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "サマリで件名の先頭の[...]または(...)の部分を表示しない"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "返信時に件名の先頭の[...]または(...)の部分を削除する"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "サブフォルダにも適用する"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "返信時にも使用"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Reply-To:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "マーク"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "添付"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "件名"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "差出人"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "日付"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "番号"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "サマリカラム設定ウィンドウを作成中...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "サマリの表示項目の設定"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"サマリビューに表示する項目を選択してください。\n"
+"上・下ボタン、または項目のドラッグで項目の順番を変更することができます。"
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "利用可能な項目"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " → "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " ← "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "表示する項目"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " 初期設定に戻す "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "テンプレート名"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "登録"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " 置換 "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 記号 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "登録済みテンプレート"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "テンプレート"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "テンプレート"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "テンプレートの書式が不正です。"
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "テンプレートの削除"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "本当にこのテンプレートを削除してもいいですか?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): コード変換に失敗しました。\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "マークファイルを開けません\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "メッセージ %d を取り込めません\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "送信待機中メッセージ %d の送信に失敗しました。\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "印刷のコマンドラインが無効です: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "状態"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "進行状況ダイアログを作成中...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "データの取得中にエラーが発生しました。\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "ファイルに書き込めません。\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: 署名は検証されていません"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "署名がありません"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "正当な署名"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "不正な署名"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "署名を検証するための公開鍵がありません"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "署名検証エラー"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "署名に対して複数の異なった結果"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "エラー: 不明な状態"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "差出人 \"%s\" の正当な署名"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "差出人 \"%s\" の不正な署名"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "この鍵のためのユーザIDが見つかりません。"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " または \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "署名の作成時刻 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "鍵指紋: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "`%s' の鍵を選択してください"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "`%s' の情報を収集しています ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "鍵の選択"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "鍵ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "正当性"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "鍵の追加"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "別のユーザまたは鍵IDを入力してください:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "送信待機中のメッセージのヘッダが壊れています。\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "接続中"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "SMTPサーバ: %s に接続中..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "HELO を送信中..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "認証中"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "メッセージを送信中..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "EHLO を送信中..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "MAIL FROM を送信中..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "送信中"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "RCPT TO を送信中..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "DATA を送信中..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "切断中..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "メッセージを送信中 (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "メッセージを送信中"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "メッセージの送信中にエラーが発生しました。"
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"メッセージの送信中にエラーが発生しました:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "メールボックスの設定"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"最初にメールボックスの位置を指定する必要があります。\n"
+"MHフォーマットのメールボックスが既にある場合は、\n"
+"それを使用することが出来ます。\n"
+"よく分からない場合は、そのままOKを選択してください。"
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "署名を検証中"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s: 差出人 \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH が利用できません\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "不正な SMTP 応答です\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "SMTP セッション中にエラーが発生しました\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "ソースウィンドウを作成中...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "メッセージのソース"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "%s のソースを表示しています...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - ソース"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 は利用できません\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 は利用可能です\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 は利用できません\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 は利用可能です\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL メソッドが利用できません\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "未知の SSL メソッド *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "ssl コンテキスト生成中にエラー発生\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL の接続に失敗しました (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "%s を用いて SSL 接続\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "サーバ証明書:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Subject: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 発行者: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "メッセージを検索"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "次の条件のいずれかが該当"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "次の条件のすべてが該当"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "本文:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "一括検索"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "リストの先頭まで検索しました。最後から検索しますか?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "リストの終わりまで検索しました。始めから検索しますか?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/返信の宛先(_Y)"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/返信の宛先(_Y)/全員に返信(_A)"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/返信の宛先(_Y)/差出人に返信(_S)"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/返信の宛先(_Y)/メーリングリストに返信(_L)"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/移動(_O)..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/コピー(_C)..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/マーク(_M)"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/マーク(_M)/マーク(_M)"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/マーク(_M)/マーク解除(_U)"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/マーク(_M)/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/マーク(_M)/未読としてマーク(_E)"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/マーク(_M)/読んだことにする(_D)"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/マーク(_M)/すべて読んだことにする(_R)"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/カラーラベル(_B)"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/再編集(_E)"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/差出人をアドレス帳に追加(_K)"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/表示(_V)/ソース(_S)"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/表示(_V)/すべてのヘッダ(_H)"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/印刷(_P)..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "番号"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "サマリビューを作成中...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "マークの処理"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "マークが残っています。処理しますか?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "フォルダをスキャン中 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "未読メッセージなし"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "未読メッセージがありません。最後から検索しますか?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "未読メッセージがありません。"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "未読メッセージがありません。次のフォルダに移動しますか?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "再検索"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "新着メッセージなし"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "新着メッセージがありません。最後から検索しますか?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "新着メッセージがありません。"
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "新着メッセージがありません。次のフォルダに移動しますか?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "マーク付きメッセージなし"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "マーク付きメッセージがありません。最後から検索しますか?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "マーク付きメッセージがありません。"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "マーク付きメッセージがありません。最初から検索しますか?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "ラベル付きメッセージなし"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "ラベル付きメッセージがありません。最後から検索しますか?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "ラベル付きメッセージがありません。"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "ラベル付きメッセージがありません。最初から検索しますか?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "メッセージを件名で寄せています..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d 通削除"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d 通移動"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d 通コピー"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 通選択"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "新着 %d 通, 未読 %d 通, 総数 %d 通 (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "新着 %d 通, 未読 %d 通, 総数 %d 通"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "サマリをソート中..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tメッセージデータからサマリを設定中..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "メッセージデータからサマリを設定中..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "サマリキャッシュを書き込み中 (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(日付なし)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "メッセージ %d をマークしました\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "メッセージ %d を既読としてマークしました\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "メッセージ %d を未読としてマークしました\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "メッセージ %s/%d を削除するようにセットしました\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "メッセージの削除"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "本当にごみ箱からメッセージを削除してもいいですか?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "重複メッセージを削除しています..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "メッセージ %s/%d をマーク解除しました\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "メッセージ %d を %s に移動するようにセットしました\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "移動先が現在のフォルダと同じです。"
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "メッセージ %d を %s にコピーするようにセットしました\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "コピー先が現在のフォルダと同じです。"
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "すべてのメッセージを選択中..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "メッセージの処理中にエラーが発生しました。"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "スレッドを構築中..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "スレッドを解除中..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "実行のためにスレッドを解除中..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "振り分け中..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "振り分け中..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d 通のメッセージが振り分けられました。"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "ファイル %s はすでに存在します\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "テキストビューを作成中...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "このメッセージは表示できません。\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "このパートを保存するには、右クリックでコンテキストメニューを"
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "表示し、「名前を付けて保存...」を選択するか、"
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"`y' キーを押してください。\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "このパートをテキストメッセージとして表示するには、"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"「テキストとして表示」を選択するか、`t' キーを押してください。\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "このパートを外部プログラムで開くには、「開く」または"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "「アプリケーションから開く」を選択するか、"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "あるいはダブルクリックするか、中央ボタンをクリックするか、"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "`l' キーを押して下さい。"
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "この署名はまだ検証されていません。\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "検証するには、右クリックでコンテキストメニューを表示し、\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr ""
+"「署名を検証」を選択してください。\n"
+"\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"実際の URL (%s) が\n"
+"表示されている URL (%s) と異なります。\n"
+"とにかく開きますか?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "%s への書き込みに失敗しました。\n"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 00000000..e1b43118
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,6386 @@
+# korean po file for sylpheed mailer
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# ChiDeok, Hwang <hwang@mizi.co.kr>, 2001
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed 0.8.6\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2002-12-02 11:09+0900\n"
+"Last-Translator: Nam SungHyun <namsh@kldp.org>\n"
+"Language-Team: Korean <gnome-kr-translation@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-kr\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "戚 覗稽益轡精"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "溌昔"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "唖 域舛拭企廃 乞窮 竺舛聖 石柔艦陥...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "虞婚 %s研 降胃梅柔艦陥\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"陥献 畷増 但戚 伸形赤柔艦陥.\n"
+"域舛聖 畷増馬奄穿拭 乞窮 畷増但級聖 丸焼爽室推."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "域舛 畷増但聖 娠艦陥...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "域舛 畷増但聖 持失杯艦陥...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "域舛 畷増"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"歯 五獣走澗 戚 授辞企稽 溌昔吃 依脊艦陥. `乞砧 閤奄'稽 五獣走研\n"
+"閤生形檎 `G' 鎮軍 雌切研 識澱馬室推."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "戚硯"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "覗稽塘紬"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "辞獄"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "蓄亜"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "畷増"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "肢薦"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "焼掘稽"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "是稽"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 奄沙 域舛生稽 竺舛 "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "丸奄"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "域舛 肢薦"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "舛源稽 戚 域舛聖 肢薦馬獣畏柔艦猿?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "溌昔"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "焼艦推"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "五獣走 督析聖 亜閃臣 呪 蒸柔艦陥."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "五獣走 採歳聖 亜閃臣 呪 蒸柔艦陥."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "multipart 五獣走税 採歳聖 条聖 呪亜 蒸柔艦陥."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"識澱吉 疑拙精 畷走 拙失 但拭辞 紫遂吃 呪 蒸柔艦陥\n"
+"訊劃馬檎 %%f, %%F 箸精 %%p研 匂敗馬壱 赤奄 凶庚脊艦陥."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"誤敬聖 獣拙拝 呪 蒸柔艦陥. 督戚覗 持失戚 叔鳶梅柔艦陥.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"陥製 誤敬聖 叔楳拝 呪 蒸柔艦陥:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 叔楳掻脊艦陥: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 魁概柔艦陥: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr ""
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " 降勺 "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "掻走喫"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"昔錫 誤敬嬢辞 脊径馬室推:\n"
+"(`%s'澗 督析戚硯生稽 企端吃 依脊艦陥)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"昔錫 誤敬嬢辞 脊径馬室推:\n"
+"(`%s'澗 督析戚硯生稽 企端吃 依脊艦陥)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "爽社系拭 蓄亜"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "爽社"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "五乞"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "爽社系 虹希 識澱"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "昼社"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/督析(_F)"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/督析(_F)/歯 爽社系(_B)"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/督析(_F)/歯 vCard(_v)"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/督析(_F)/歯 JPilot(_J)"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/督析(_F)/歯 辞獄(_S)"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/督析(_F)/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/督析(_F)/畷増(_E)"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/督析(_F)/肢薦(_D)"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/督析(_F)/煽舌(_S)"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/督析(_F)/丸奄(_C)"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/爽社(_A)"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/爽社(_A)/歯 爽社(_A)"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/爽社(_A)/歯 益血(_G)"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/爽社(_A)/歯 虹希(_F)"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/爽社(_A)/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/爽社(_A)/畷増(_E)"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/爽社(_A)/肢薦(_D)"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/亀姥(_T)"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/亀姥(_T)/LDIF 督析 亜閃神奄(_L)"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/亀崇源(_H)"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/亀崇源(_H)/sylpheed 舛左(_A)"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/歯 爽社(_A)"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/歯 益血(_G)"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/歯 虹希(_F)"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/畷増(_E)"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/肢薦(_D)"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "戚五析 爽社"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "爽社系"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "戚硯:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "肢薦"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "達奄"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "閤澗 紫寓:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "凧繕:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "需精 凧繕:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "爽社研 肢薦"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "舛源稽 爽社研 肢薦馬獣畏柔艦猿?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "焼艦神"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"`%s'税 乞窮 爽社人 虹希研 肢薦拝猿推 ? \n"
+"虹希幻 走随 井酔 爽社澗 益 雌是 虹希稽 薪移増艦陥."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "虹希幻"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "虹希人 爽社"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "舛源稽 `%s'研 走酔獣畏柔艦猿?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "歯 紫遂切, 事昔 督析聖 煽舌拝 呪 蒸柔艦陥."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "歯 紫遂切, 爽社系 督析聖 煽舌拝 呪 蒸柔艦陥."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "森穿 爽社系聖 失因旋生稽 痕発馬心柔艦陥."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"森穿 爽社系戚 痕発鞠醸柔艦陥,\n"
+"歯 爽社系税 事昔 督析聖 煽舌拝 呪 蒸柔艦陥"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"爽社系聖 痕発拝 呪 蒸柔艦陥,\n"
+"企重拭 朔 歯 爽社系 督析聖 持失馬心柔艦陥."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"爽社系聖 痕発馬走 公梅柔艦陥,\n"
+"歯 爽社系 督析聖 持失馬走 公梅柔艦陥."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"爽社系聖 痕発馬走 公梅壱\n"
+"歯 爽社系 督析亀 持失馬走 公梅柔艦陥."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "爽社系 痕発 拭君"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "爽社系 痕発"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "爽社系 拭君"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "爽社 事昔聖 石聖 呪 蒸柔艦陥"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "森穿 爽社系戚 痕発鞠醸柔艦陥, 歯 爽社系 事昔 督析聖 煽舌拝 呪 蒸柔艦陥"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"爽社系聖 痕発拝 呪 蒸柔艦陥, 企重拭 朔 歯 爽社系 督析聖 持失馬心柔艦陥."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "爽社系聖 痕発馬走 公梅柔艦陥, 歯 爽社系 督析聖 持失馬走 公梅柔艦陥."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "爽社系聖 痕発馬走 公梅壱 歯 爽社系 督析亀 持失馬走 公梅柔艦陥."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "爽社系 痕発 拭君"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "爽社系 痕発"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "昔斗凪戚什"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "爽社系"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "紫寓"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "戚五析 爽社"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "益血"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "虹希"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP 辞獄"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "因遂 爽社系"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "鯵昔 爽社系"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "硝顕"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "井壱"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "拭君"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "井壱 鳶確 陥戚杖稽益研 持失杯艦陥...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "陥製腰拭 戚 五獣走 左奄"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "神兄走事"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "旋事"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "歳畠事"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "馬潅事"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "短事"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "褐事"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "哀事"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "蒸製"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/蓄亜(_A)..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/肢薦(_R)"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/働失(_P)..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/督析(_F)/煽舌(_S)"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/五獣走(_M)/蟹掻拭 左鎧奄(_l)"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/五獣走(_M)/績獣 左淫敗生稽 左鎧奄(_d)"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/五獣走(_M)/煽舌馬壱 畷増 左糎(_k)"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/督析(_F)/歎採 督析(_A)"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/督析(_F)/督析 諮脊(_I)"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/督析(_F)/辞誤 諮脊(_g)"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/畷増(_E)/叔楳昼社(_U)"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/畷増(_E)/陥獣 叔楳(_R)"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/畷増(_E)/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/畷増(_E)/設虞鎧奄(_t)"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/畷増(_E)/差紫(_C)"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/畷増(_E)/細食隔奄(_P)"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/畷増(_E)/quotation生稽 細食隔奄(_q)"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/畷増(_E)/乞砧 識澱(_a)"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/畷増(_E)/壱厭(_d)"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/畷増(_E)/壱厭(_d)/庚切研 及稽 戚疑"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/畷増(_E)/壱厭(_d)/庚切研 蒋生稽 戚疑"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/畷増(_E)/壱厭(_d)/舘嬢研 及稽 戚疑"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/畷増(_E)/壱厭(_d)/舘嬢研 蒋生稽 戚疑"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/畷増(_E)/壱厭(_d)/虞昔税 坦製生稽 戚疑"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/畷増(_E)/壱厭(_d)/虞昔税 魁生稽 戚疑"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/畷増(_E)/壱厭(_d)/戚穿 虞昔生稽 戚疑"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/畷増(_E)/壱厭(_d)/陥製 虞昔生稽 戚疑"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/畷増(_E)/壱厭(_d)/庚切研 及稽 肢薦"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/畷増(_E)/壱厭(_d)/庚切研 蒋生稽 肢薦"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/畷増(_E)/壱厭(_d)/舘嬢研 及稽 肢薦"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/畷増(_E)/壱厭(_d)/舘嬢研 蒋生稽 肢薦"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/畷増(_E)/壱厭(_d)/虞昔 肢薦"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/畷増(_E)/壱厭(_d)/虞昔 魁猿走 肢薦"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/畷増(_E)/薄仙 舘喰 切疑 匝郊嘩(_W)"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/畷増(_E)/乞窮 延 虞昔 切疑 匝郊嘩(_l)"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/畷増(_E)/差紫(_C)"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/左奄(_V)"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/左奄(_V)/To(_T)"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/左奄(_V)/Cc(_C)"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/左奄(_V)/Bcc(_B)"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/左奄(_V)/Reply to(_R)"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/左奄(_V)/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/左奄(_V)/魚虞臣軒奄(_F)"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/左奄(_V)/Ruler(_u)"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/左奄(_V)/歎採(_A)"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/亀姥(_T)/爽社系(_A)"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/亀姥(_T)/奴巴鹸(_T)"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/亀姥(_T)/疑拙(_n)"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/亀姥(_T)/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/畷増(_E)/須採 畷増奄稽 畷増(_x)"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/亀姥(_T)/疑拙(_n)"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/五獣走(_M)/章硲鉢(_E)"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 督析戚 蒸柔艦陥\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "努什闘 採歳聖 条聖 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "昔遂 採硲 莫縦 拭君."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "五獣走 噺重/穿含 莫縦 拭君."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "%s督析戚 蒸柔艦陥\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "%s税 督析 滴奄研 硝呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "%s 督析戚 朔 督析脊艦陥."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "%s研 石聖 呪亜 蒸柔艦陥."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "五獣走: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "multipart 五獣走税 採歳聖 条聖 呪亜 蒸柔艦陥."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [呪舛喫]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 五獣走 畷増%s "
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "五獣走%s 畷増"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "閤澗 紫寓戚 走舛鞠走省紹柔艦陥"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "五析 降勺"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "薦鯉戚 搾醸柔艦陥. 益掘亀 左馨猿推?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "閤澗 紫寓 鯉系聖 条聖 呪亜 蒸柔艦陥"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"五析聖 左鎧奄是廃 域舛戚 走舛鞠嬢赤走省柔艦陥.\n"
+"左鎧奄 穿拭 五析 域舛聖 識澱馬室推."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "%s稽 五獣走研 左鎧澗 掻 拭君亜 降持梅柔艦陥."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "五獣走研 左浬 畷走敗拭 煽舌拝 呪亜 蒸柔艦陥"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "薄仙 識澱吉 徹 ID `%s'拭 尻衣吉 嬢恐 徹亀 達聖 呪 蒸柔艦陥."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "督析 乞球研 郊蝦呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"五獣走税 庚切実聖 痕井拝 呪亜 蒸柔艦陥.\n"
+"益掘亀 左馨猿推?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "伯希研 承 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "神掘吉 五獣走研 薦暗拝 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "五獣走研 績獣 左淫杯艦陥...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "泥 虹希研 達聖 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "五獣走研 績獣 左淫拝 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "持失吉 Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "畷増但聖 持失杯艦陥...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "原績 展脊"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "滴奄"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "左浬 紫寓:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "五獣走 左鎧奄"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "蟹掻拭 左鎧奄"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "左馨 畷走敗拭 隔嬢辞 蟹掻拭 左鎧奄"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "績獣 左淫敗"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "績獣 左淫敗拭 隔奄"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "諮脊"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "督析聖 諮脊杯艦陥"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "歎採"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "督析 歎採"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "辞誤"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "辞誤 督析聖 晦趨隔柔艦陥"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "畷増奄"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "須採 畷増奄稽 畷増"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "匝郊嘩"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "延 匝拭企背 切疑 匝郊嘩聖 杯艦陥"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "臣郊牽走省精 原績 展脊."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "督析戚 蒸暗蟹 搾食赤柔艦陥."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "働失"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "昔坪漁"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "井稽"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "督析 戚硯"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "須採 畷増奄 誤敬嬢亜 臣郊牽走省柔艦陥: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"須採 畷増奄亜 食穿備 詞焼赤柔艦陥.\n"
+"戚 覗稽室什研 悪薦稽 曽戟獣迭猿推?\n"
+"覗稽室什 益血 焼戚巨: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "覗稽室什 益血 id: %d研 曽戟獣鉄"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "績獣 督析: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "畷増: 乞艦斗元馬澗 覗稽室什稽採斗 脊径戚 赤醸柔艦陥\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "須採 畷増奄研 叔楳拝 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "督析稽 承 呪亜 蒸柔艦陥\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "督戚覗 石奄 叔鳶\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "五獣走研 績獣 左淫敗拭 隔聖呪亜 蒸柔艦陥."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "督析 識澱"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "五獣走 獄軒奄"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "戚 五獣走澗 呪舛鞠醸柔艦陥. 痕井紫牌聖 獄険猿推?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "獄軒奄"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "績獣 左淫敗生稽"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "`%s' 奴巴鹸聖 旋遂拝猿推?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "奴巴鹸聖 旋遂杯艦陥."
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "企端"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "爽社 畷増"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "歯 昔弘 蓄亜"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "昔弘 雌室鎧蝕 畷増"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "五析 爽社亜 走舛鞠走 省紹柔艦陥."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "戚硯引 葵戚 走舛鞠走 省紹柔艦陥."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "昔弘 切戟 畷増"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "妊獣 誤"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "原走厳 戚硯"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "坦製 戚硯"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "亜誤"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "戚五析 爽社"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "紺誤"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "是稽 戚疑"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "焼掘稽 戚疑"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "呪舛"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "走崇"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "葵"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "奄沙 切戟"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "紫遂切 紗失"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "督析戚 舛雌旋生稽 左脊艦陥."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "督析戚 舛雌旋昔 爽社系 莫縦戚 焼鑑艦陥."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "督析聖 石聖 呪亜 蒸柔艦陥."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "爽社系 畷増"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 督析 溌昔 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "督析"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "歯 爽社系 蓄亜"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "益血誤戚 走舛鞠走 省紹柔艦陥."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "益血 切戟 畷増"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "益血誤"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "益血税 爽社"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "紫遂亜管廃 爽社"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "鉢詞妊 獄動生稽 益血拭辞 箸精 益血生稽 穿切酔畷 爽社 戚疑"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "益血 雌室鎧遂 畷増"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "歯 益血 蓄亜"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "虹希 畷増"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "歯 虹希税 戚硯聖 隔生室推:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "歯 虹希"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "歯 虹希税 戚硯聖 隔生室推:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "督析戚 JPilot 莫縦戚 焼鑑艦陥."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "JPilot 督析 識澱"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "JPilot 牌鯉 畷増"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "蓄亜旋昔 穿切酔畷 爽社 牌鯉(級)"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "歯 JPilot 牌鯉 蓄亜"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "辞獄拭 失因旋生稽 尻衣鞠醸柔艦陥"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "辞獄拭 尻衣拝 呪亜 蒸柔艦陥"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "LDAP 辞獄 畷増"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "硲什闘誤"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "匂闘"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 辞獄 溌昔 "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr ""
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr ""
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr ""
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr ""
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr ""
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr ""
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr ""
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "奄沙"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "溌舌"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "歯 LDAP 辞獄 蓄亜"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP 畷増 - 奄沙 達奄 識澱"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "亜管廃 奄沙 達奄(級)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "辞獄拭辞 奄沙 達奄(級)聖 石聖 呪 蒸柔艦陥 - 呪疑生稽 竺舛馬室推"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "督析戚 vCard 莫縦戚 焼鑑艦陥."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "vCard 督析 識澱"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "vCard 牌鯉 畷増"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "歯 vCard 牌鯉 蓄亜"
+
+#: src/export.c:127
+msgid "Export"
+msgstr ""
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "企雌 虹希人 mbox 督析聖 走舛馬室推."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr ""
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr ""
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "壱牽奄..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr ""
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "督析拭 竺舛聖 床奄亜 叔鳶梅柔艦陥\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "虹希 識澱"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "閤精 畷走敗"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "降勺 畷走敗"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "左馨 畷走敗"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "走錘 畷走敗"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "績獣 左淫敗"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "歯 虹希"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c'澗 虹希 戚硯拭 匂敗吃 呪 蒸柔艦陥."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "`%s' 虹希亜 戚耕 糎仙杯艦陥."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "`%s' 虹希研 持失拝 呪亜 蒸柔艦陥."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/歯 虹希 幻級奄(_n)..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/虹希 戚硯 郊荷奄(_R)..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/虹希 走酔奄(_D)"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "走錘 畷走敗 搾酔奄"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/歯 五獣走 溌昔(_C)"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/虹希 闘軒 飴重(_e)"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/五獣走 達奄(_S)..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "照 石精 五獣走亜 蒸柔艦陥."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/敢什益血 姥偽(_b)..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/敢什益血 肢薦(_R)"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "虹希 坂研 持失杯艦陥...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "歯依"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "照石製"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "穿端"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "虹希 舛左研 竺舛杯艦陥...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "虹希 舛左研 竺舛杯艦陥..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "%s%c%s研 什諜杯艦陥..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "%s 虹希研 什諜杯艦陥..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "虹希 闘軒 飴重"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "虹希 闘軒研 飴重杯艦陥..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "虹希 闘軒研 飴重杯艦陥..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "乞窮 虹希 闘軒研 飴重杯艦陥..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "乞窮 虹希税 歯稽錘 五獣走研 溌昔杯艦陥..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "%s 虹希亜 識澱鞠醸柔艦陥\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "五獣走聖 左鎧澗 掻"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "%s稽 五獣走研 左鎧澗 掻 拭君亜 降持梅柔艦陥."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"歯 虹希税 戚硯 脊径:\n"
+"(幻析 馬是虹希研 煽舌馬奄 是廃 虹希研 持失馬形檎,\n"
+"戚硯税 原走厳拭 `/'研 蓄亜馬室推)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "`%s'拭企廃 歯 戚硯聖 隔生室推:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "虹希 戚硯 痕井"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"`%s'焼掘拭 赤澗 乞窮 虹希人 五獣走亜 肢薦吃 依脊艦陥.\n"
+"舛源稽 肢薦馬獣畏柔艦猿?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "虹希 肢薦"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "`%s' 虹希研 薦暗拝 呪亜 蒸柔艦陥."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "走錘 畷走敗 搾酔奄"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "走錘 畷走敗拭赤澗 乞窮 五獣走研 搾随猿推?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"`%s' 五析酵什研 舛源稽 肢薦馬獣畏柔艦猿?\n"
+"(五獣走亜 巨什滴稽採斗 肢薦鞠澗依精 焼鑑艦陥)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "五析酵什研 薦暗杯艦陥"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "舛源稽 `%s' IMAP4 域舛聖 肢薦馬獣畏柔艦猿?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "IMAP4 域舛 肢薦"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "舛源稽 `%s' 敢什益血聖 肢薦馬獣畏柔艦猿?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "敢什益血 肢薦"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "舛源稽 `%s' 敢什益血 域舛聖 肢薦馬獣畏柔艦猿?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "敢什益血 域舛 肢薦"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "敢什益血 姥偽"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "姥偽拝 敢什益血聖 識澱馬室推."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "益血 達奄:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 達奄 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "敢什益血 戚硯"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "五獣走"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "莫縦"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "飴重"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr ""
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "石奄穿遂"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr ""
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "敢什益血 鯉系聖 条聖 呪亜 蒸柔艦陥."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "刃戟."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr ""
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "廃越"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "敢什益血:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "薦鯉:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "伯希 坂研 持失杯艦陥...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(???)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(薦鯉 蒸製)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "戚耕走 坂研 持失杯艦陥...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "戚耕走研 災君臣 呪亜 蒸柔艦陥."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "%s:%d拭企廃 IMAP4 羨紗戚 快嬢然柔艦陥. 陥獣 羨紗...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "%s:%d拭企廃 IMAP4 羨紗聖 幻旧艦陥 ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "TLS 室芝聖 獣拙拝 呪 蒸柔艦陥.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "肢薦 巴掘益研 竺舛拝 呪亜 蒸柔艦陥: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "走随 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "肢薦 巴掘益研 竺舛拝 呪亜 蒸柔艦陥: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "虹希研 識澱拝 呪亜 蒸柔艦陥: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "妊獣 督析戚 降胃鞠走省製.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "LIST研 条澗 亀掻 拭君亜 降持.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "'%s'研 持失拝 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "INBOX 焼掘拭 '%s'研 持失拝 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "酔畷敗聖 持失拝 呪 蒸柔艦陥: LIST 叔鳶\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "酔畷敗聖 持失拝 呪 蒸柔艦陥\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "酔畷敗誤聖 郊蝦 呪 蒸柔艦陥: %s拭辞 %s稽\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "酔畷敗聖 肢薦拝 呪 蒸柔艦陥\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "envelope研 条聖 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "envelope研 条澗 掻 拭君 降持.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "envelope研 督縮拝 呪亜 蒸柔艦陥: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "%s:%d IMAP4 辞獄拭 尻衣拝 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "IMAP4 室芝聖 幻級 呪 蒸柔艦陥: %s: %d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "namespace研 条聖 呪 蒸柔艦陥\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "虹希研 識澱拝 呪亜 蒸柔艦陥: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "昔装 号狛"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 稽益昔聖 叔鳶梅柔艦陥.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "%s研 %s拭 細析 呪 蒸柔艦陥\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(督析聖 左垣艦陥...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "%s 五獣走研 蓄亜拝 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "%d研 %s稽 差紫拝 呪亜 蒸柔艦陥\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "imap 誤敬嬢 叔楳掻 拭君: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "imap 誤敬嬢 叔楳掻 拭君: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "imap 誤敬嬢 叔楳掻 拭君: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv亜 UTF-7研 %s稽 痕発拝 呪 蒸柔艦陥\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv亜 %s研 UTF-7稽 痕発拝 呪 蒸柔艦陥\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "亜閃神奄"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "企雌 mbox 督析引 企雌 虹希研 走舛馬室推."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "亜閃臣 督析:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "煽舌拝 虹希:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "災君臣 督析聖 識澱"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "亜閃臣 爽社系 戚硯引 督析聖 走舛馬室推."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "亜閃臣 LDIF 牌鯉聖 識澱馬壱 郊荷室推."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "督析聖 亜閃尽柔艦陥."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "督析聖 識澱馬室推."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "爽社系 戚硯戚 走舛鞠走省紹柔艦陥."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "LDIF field研 石陥亜 拭君亜 降持梅柔艦陥."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF 督析聖 失因旋生稽 亜閃尽柔艦陥."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "LDIF 督析 識澱"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "督析 戚硯"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF Field"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "紗失 戚硯"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "紗失"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "識澱"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "爽社系 :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "督析 戚硯 :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr ""
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "LDIF 督析聖 爽社系生稽 亜閃神奄"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "戚穿"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "陥製"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "督析 舛左"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "紗失"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr ""
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "歯 五獣走研 亜閃身"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr ""
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "昼社鞠醸柔艦陥"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr ""
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "刃戟 (%d 五獣走 (%s)亜 閤焼像)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "刃戟 (歯 五獣走 蒸製)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "尻衣戚 叔鳶梅柔艦陥"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "昔装戚 叔鳶梅柔艦陥."
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr ""
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr ""
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "魁概柔艦陥 (%d鯵税 歯稽錘 五獣走)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "魁概柔艦陥 (歯 五獣走 蒸製)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "畷走研 閤陥亜 拭君亜 降持梅柔艦陥."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "%s 域舛生稽採斗 歯 五獣走研 条柔艦陥...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 歯 五獣走研 亜閃身"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "POP3 辞獄 %s拭 尻衣杯艦陥..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "%s:%d POP3 辞獄拭 尻衣拝 呪亜 蒸柔艦陥\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "昔装 掻脊艦陥..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "%s稽採斗 %s稽 五獣走研 亜閃辛艦陥...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "歯 五獣走税 姐呪研 条澗 掻 (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "歯 五獣走税 姐呪研 条澗 掻 (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "歯 五獣走税 姐呪研 条澗 掻 (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "五獣走税 滴奄研 条澗 掻 (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "%d 五獣走研 肢薦馬澗 掻"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "魁原帖澗 掻"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "五獣走 (%d / %d) 研 亜閃神澗 掻 (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "刃戟 (%d 五獣走 (%s)亜 閤焼像)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "尻衣戚 叔鳶梅柔艦陥"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "五析聖 坦軒馬澗 亀掻 拭君"
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "五析聖 坦軒馬澗 亀掻 拭君"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "巨什滴拭 害精 因娃戚 蒸戎."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "督析拭 承 呪亜 蒸柔艦陥."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "社掴 拭君."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "五析酵什亜 節移赤柔艦陥."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "五析酵什亜 節移赤柔艦陥."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "昔装 号狛"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "昔装 号狛"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "佐杯戚 昼社鞠醸柔艦陥.\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "%s稽採斗 %s稽 歯 五獣走研 亜閃身...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr ""
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "章硲 脊径"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "覗稽塘紬 稽益"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"督析 `%s'亜 戚耕 糎仙杯艦陥.\n"
+"虹希研 持失拝 呪亜 蒸柔艦陥."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread亜 glib拭税背 走据鞠走省柔艦陥.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG亜 旋箭馬惟 昔什島鞠走 省紹暗蟹 格巷 神掘吉 獄穿脊艦陥.\n"
+"OpenPGP 走据奄管聖 戒艦陥."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "紫遂狛: %s [辛芝]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [爽社] 畷増 但聖 娠艦陥"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" 走舛吉 督析聖 歎採背辞 畷走 拙失 但\n"
+" attached"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 歯 五獣走研 閤柔艦陥"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 乞窮 域舛拭辞 歯 五獣走研 閤柔艦陥"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 泥拭 赤澗 乞窮 五獣走研 左垣艦陥"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status 恥 五獣走 姐呪研 硝形掃艦陥"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status 恥 五獣走 姐呪研 硝形掃艦陥"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 巨獄焔 乞球"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 戚 亀崇源聖 妊獣馬壱 魁原徴艦陥"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 獄腰 舛左 窒径馬壱 曽戟"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "五獣走研 畷増馬澗 但戚 赤柔艦陥. 舛源 魁鎧獣畏柔艦猿?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr ""
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "左鎧走走 省精 五獣走亜 泥拭 赤柔艦陥. 走榎 曽戟拝猿推?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "陥献 Sylpheed亜 戚耕 叔楳鞠壱 赤柔艦陥.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/督析(_F)/虹希(_F)"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/督析(_F)/虹希(_F)/歯 虹希(_n)"
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/督析(_F)/虹希(_F)/虹希 戚硯 痕井(_R)..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/督析(_F)/虹希(_F)/虹希 肢薦(_D)"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/督析(_F)/五析 酵什 蓄亜(_A)..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/督析(_F)/五析 酵什 蓄亜(_A)..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/五析酵什研 走酔奄(_m)"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/督析(_F)/虹希(_F)"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/歯 五獣走 溌昔(_C)"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/督析(_F)/乞窮 虹希税 歯 五獣走 溌昔(_C)"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/虹希 闘軒 飴重(_e)"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/督析(_F)/mbox 督析 亜閃神奄(_I)..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/督析(_F)/mbox 督析稽 煽舌(_E)..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/督析(_F)/走錘 畷走敗 搾酔奄(_t)"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/督析(_F)/歯 戚硯生稽(_S)..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/督析(_F)/昔錫(_P)..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/督析(_F)/督析 諮脊(_I)"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/督析(_F)/魁鎧奄(_x)"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/畷増(_E)/床傾球 識澱(_t)"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/畷増(_E)/薄仙 五獣走 達奄(_F)..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/畷増(_E)/五獣走 達奄(_S)..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(d)/虹希 闘軒(_F)"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/五獣走 左奄(_M)"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/祷郊(_T)"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/祷郊(_T)/焼戚嬬引 努什闘(_a)"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/祷郊(_T)/焼戚嬬(_I)"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/祷郊(_T)/努什闘(_T)"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/祷郊(_T)/蒸製(_N)"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/左奄(_V)/左戚暗蟹 姶蓄奄(_d)/雌殿郊(_b)"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/左奄(_V)/紺亀税 虹希 闘軒 但(_o)"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/左奄(_V)/紺亀税 五獣走 但(_e)"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/左奄(_V)/舛慶(_S)"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/左奄(_V)/舛慶(_S)/腰硲(_n)"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/左奄(_V)/舛慶(_S)/滴奄(_i)"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/左奄(_V)/舛慶(_S)/劾促(_d)"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/左奄(_V)/舛慶(_S)/左浬 紫寓(_f)"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/左奄(_V)/舛慶(_S)/滴奄(_i)"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/左奄(_V)/舛慶(_S)/薦鯉(_s)"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/左奄(_V)/舛慶(_S)/事 虞婚(_c)"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/左奄(_V)/舛慶(_S)/妊獣(_m)"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/左奄(_V)/舛慶(_S)/省石製(_u)"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/左奄(_V)/舛慶(_S)/歎採(_t)"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/左奄(_V)/舛慶(_S)/省敗(_o)"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/左奄(_V)/舛慶(_S)/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/左奄(_V)/舛慶(_S)/神硯託授"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/左奄(_V)/舛慶(_S)/鎧顕託授"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/誤敬(_S)/舛慶(_S)/薦鯉(_A)"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/左奄(_V)/床傾球 左奄(_r)"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/左奄(_V)/乞窮 床傾球 縄奄(_x)"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/左奄(_V)/乞窮 床傾球 羨奄(_l)"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/左奄(_V)/妊獣 牌鯉 竺舛(_i)..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/左奄(_V)/亜奄(_G)"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/誤敬(_S)/亜奄(_G)/戚穿 五獣走(_P)"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/左奄(_V)/亜奄(_G)/陥製 五獣走(_N)"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/左奄(_V)/亜奄(_G)/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/左奄(_V)/亜奄(_G)/照石精 陥製 五獣走(_e)"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/左奄(_V)/亜奄(_G)/照石精 陥製 五獣走(_e)"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/左奄(_V)/亜奄(_G)/戚穿 歯 五獣走(_w)"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/左奄(_V)/亜奄(_G)/陥製 歯 五獣走(_x)"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/左奄(_V)/亜奄(_G)/妊獣吉 戚穿 五獣走(_m)"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/左奄(_V)/亜奄(_G)/妊獣吉 陥製 五獣走(_a)"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/左奄(_V)/亜奄(_G)/何軒妊赤澗 戚穿 五獣走(_l)"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/左奄(_V)/亜奄(_G)/何軒妊赤澗 陥製 五獣走(_b)"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/左奄(_V)/亜奄(_G)/陥献 虹希稽(_f)..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/左奄(_V)/庚切実(_C)/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/左奄(_V)/庚切実(_C)"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/左奄(_V)/庚切実(_C)/切疑(_A)"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/左奄(_V)/庚切実(_C)/7bit 焼什徹 (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/左奄(_V)/庚切実(_C)/政艦坪球(_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/左奄(_V)/庚切実(_C)/辞採 政郡(ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/左奄(_V)/庚切実(_C)/辞採 政郡(ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/左奄(_V)/庚切実(_C)/掻肖 政郡(ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/左奄(_V)/庚切実(_C)/_Baltic (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/左奄(_V)/庚切実(_C)/Baltic (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/左奄(_V)/庚切実(_C)/益軒什(ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/左奄(_V)/庚切実(_C)/斗奄 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/左奄(_V)/庚切実(_C)/Cyrillic (ISo-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/左奄(_V)/庚切実(_C)/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/左奄(_V)/庚切実(_C)/Cyrillic (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/左奄(_V)/庚切実(_C)/Cyrillic (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/左奄(_V)/庚切実(_C)/析沙 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/左奄(_V)/庚切実(_C)/析沙 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/左奄(_V)/庚切実(_C)/析沙 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/左奄(_V)/庚切実(_C)/析沙 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/左奄(_V)/庚切実(_C)/Simplified Chinese (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/左奄(_V)/庚切実(_C)/Traditional Chinese (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/左奄(_V)/庚切実(_C)/Traditional Chinese (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/左奄(_V)/庚切実(_C)/Chinese (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/左奄(_V)/庚切実(_C)/廃厩 (EUC-KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/左奄(_V)/庚切実(_C)/廃厩 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/左奄(_V)/庚切実(_C)/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/左奄(_V)/庚切実(_C)/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/左奄(_V)/歯 但生稽 伸奄(_w)"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/左奄(_V)/五獣走 社什(_a)"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/左奄(_V)/乞窮 伯希左奄(_h)"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/左奄(_V)/推鉦 飴重(_U)"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/五獣走(_M)"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/五獣走(_M)/陥獣 畷増(_e)"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/五獣走(_M)/乞窮 域舛拭辞 閤奄(_a)"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/五獣走(_M)/乞窮 域舛拭辞 閤奄(_a)"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/五獣走(_M)/閤奄 昼社(_g)"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/五獣走(_M)/陥獣 畷増(_e)"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/五獣走(_M)/績獣 左淫吉 五獣走 降勺(_S)"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/五獣走(_M)/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/五獣走(_M)/歯稽 幻級奄(_n)"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/五獣走(_M)/噺重(_R)"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/五獣走(_M)/噺重(_y)"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/五獣走(_M)/噺重(_y)/穿端(_a)"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/五獣走(_M)/噺重(_y)/左浬戚(_s)"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/五獣走(_M)/噺重(_y)/五析元軒什闘(_l)"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/五獣走(_M)/穿含(_F)"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/五獣走(_M)/歎採督析稽 穿含(_w)"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/五獣走(_M)/Redirec_t"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/五獣走(_M)/戚疑(_o)..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/五獣走(_M)/差紫(_C)..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/五獣走(_M)/肢薦(_D)"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/五獣走(_M)/妊獣(_M)"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/五獣走(_M)/妊獣(_M)/妊獣(_M)"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/五獣走(_M)/妊獣(_M)/妊獣 走崇(_U)"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/五獣走(_M)/妊獣(_M)/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/五獣走(_M)/妊獣(_M)/石走省精 依生稽 妊獣(_e)"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/五獣走(_M)/妊獣(_M)/石精 依生稽 妊獣(_d)"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/五獣走(_M)/妊獣(_M)/乞砧 石精 依生稽 妊獣(_r)"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/五獣走(_M)/陥獣 畷増(_e)"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/亀姥(_T)/爽社系拭 左浬戚 蓄亜(_k)"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/亀姥(_T)/五獣走 琶斗(_F)"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/亀姥(_T)/五獣走 琶斗(_F)"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/亀姥(_T)/琶斗 鋭帳 持失(_C)"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/亀姥(_T)/琶斗 鋭帳 持失(_C)/切疑(_A)"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/亀姥(_T)/琶斗 鋭帳 持失(_C)/左浬戚稽(_F)"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/亀姥(_T)/琶斗 鋭帳 持失(_C)/閤澗戚稽(_T)"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/亀姥(_T)/琶斗 鋭帳 持失(_C)/薦鯉生稽(_S)"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/亀姥(_T)/掻差吉 五獣走 走酔奄(_p)"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/亀姥(_T)/叔楳(_x)"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/亀姥(_T)/稽益 但(_L)"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/竺舛(_C)"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/竺舛(_C)/奄沙旋昔 竺舛(_C)..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/竺舛(_C)/琶斗 竺舛(_F)..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/竺舛(_C)/奴巴鹸(_T)..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/竺舛(_C)/疑拙(_A)..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/竺舛(_C)/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/竺舛(_C)/域舛拭 魚献 竺舛(_P)..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/竺舛(_C)/歯 域舛 幻級奄(_n)..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/竺舛(_C)/域舛 畷増(_E)..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/竺舛(_C)/薄仙 域舛聖 痕井(_h)"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/亀崇源(_H)/竺誤辞(_M)"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/亀崇源(_H)/竺誤辞(_M)/慎嬢(_E)"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/亀崇源(_H)/竺誤辞(_M)/析沙嬢(_J)"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/亀崇源(_H)/FAQ(_F)"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/亀崇源(_H)/FAQ(_F)/慎嬢(_E)"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/亀崇源(_H)/FAQ(_F)/偽析嬢(_G)"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/亀崇源(_H)/FAQ(_F)/什凪昔嬢(_S)"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/亀崇源(_H)/FAQ(_F)/覗櫛什嬢(_F)"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/亀崇源(_H)/FAQ(_F)/戚殿軒嬢(_I)"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/亀崇源(_H)/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "歯 但聖 幻旧艦陥...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "五昔 但: 事 拝雁 %d 叔鳶\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "原徴.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "薦鯉 蒸戎"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "蒸製"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "但 歳軒 莫縦聖 %d拭辞 %d稽 郊貨艦陥\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "走錘 畷走敗 搾酔奄"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "走錘 畷走敗拭赤澗 乞窮 五獣走研 搾随猿推?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "五析酵什 蓄亜"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"五析 酵什税 是帖研 脊径馬室推.\n"
+"奄糎税 五析 酵什亜 走舛鞠檎 切疑生稽\n"
+"什諜吃依脊艦陥."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "五析 酵什 `%s'亜 戚耕 糎仙杯艦陥."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "五析酵什"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"五析酵什 持失戚 叔鳶梅柔艦陥.\n"
+"焼原 嬢恐 督析戚 戚耕 糎仙馬暗蟹 益 員拭 床奄 映廃戚 蒸柔艦陥."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - 虹希 左奄"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - 五獣走 左奄"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/噺重(_R)"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "穿採拭惟 噺重聖 左垣艦陥"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/噺重(_y)/左浬戚(_s)"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/噺重(_y)/五析元軒什闘(_l)"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/穿含(_F)"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/歎採稽 穿含(_w)"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Redirec_t"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "閤奄"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "歯 五析聖 亜閃辛艦陥"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "穿採 閤奄"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "乞窮 域舛拭辞 歯 五析聖 亜閃辛艦陥"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "績獣 左淫吉 五獣走研 左垣艦陥"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "拙失"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "歯 五獣走研 拙失杯艦陥"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "噺重"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "五獣走拭 噺重聖 左垣艦陥"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "穿端 噺重"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "穿採拭惟 噺重聖 左垣艦陥"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "穿含"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "五獣走研 陥献 紫寓拭惟 穿含杯艦陥"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "五獣走研 走嵩艦陥"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "叔楳"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "妊獣吉 覗稽室什級聖 叔楳杯艦陥"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "陥製 照 石精 五獣走研 左食掃艦陥"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "竺舛"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "奄沙旋昔 発井 竺舛"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "域舛"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "域舛聖 竺舛杯艦陥"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "魁鎧奄"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "戚 覗稽益轡聖 魁鎧獣畏柔艦猿?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "績獣 督析拭 承 呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "%s稽採斗 %s稽 五獣走研 亜閃辛艦陥...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "mbox 督析聖 石聖 呪亜 蒸柔艦陥.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "臣郊牽走省精 mbox 匂娯: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "薦企稽鞠嬢赤走省精 mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "績獣督析聖 伸 呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"五獣走 沙庚掻 From生稽 獣拙馬澗 匝戚 赤柔艦陥:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d鯵税 五獣走亜 降胃鞠醸柔艦陥.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "節榎 督析 %s聖 幻級呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "亜管馬檎 'file'企重拭 'flock'研 紫遂馬室推.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "%s研 持失拝 呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "五析酵什研 陥献 覗稽室什亜 石壱赤柔艦陥. 節獣 奄陥軒室推...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "%s拭 lock研 杏呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "臣郊牽走省精 節榎 展脊\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "%s拭 lock研 熱 呪亜 蒸柔艦陥\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "五析酵什税 滴奄研 0生稽 幻級呪亜 蒸柔艦陥.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "五獣走研 %s拭辞 %s稽 左垣艦陥...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "薄仙 五獣走拭辞 達奄"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "達聖 庚切伸:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "企社 庚切 姥紺"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "及稽 達奄"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "達奄"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "達奄 叔鳶"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "達澗 庚切伸戚 降胃鞠切省紹柔艦陥."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "五獣走税 固蒋拭 亀含梅柔艦陥; 魁拭辞 域紗拝猿推?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "五獣走税 魁拭 亀含梅柔艦陥; 獣拙採歳拭辞 域紗拝猿推?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "達奄亜 刃戟"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "五獣走 坂研 持失杯艦陥...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "歯 戚硯生稽"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "気嬢床奄"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "奄糎 督析聖 気嬢床獣畏柔艦猿?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "`%s' 督析聖 煽舌拝 呪亜 蒸柔艦陥."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "昔錫"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"昔錫 誤敬嬢辞 脊径馬室推:\n"
+"(`%s'澗 督析戚硯生稽 企端吃 依脊艦陥)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"昔錫 誤敬嬢亜 臣郊牽走省柔艦陥:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "五獣走 %s聖 %s稽 差紫拝 呪亜 蒸柔艦陥\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "妊獣 督析聖 伸 呪亜 蒸柔艦陥.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "薪掩 虹希人 薪移霜 虹希亜 旭柔艦陥.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "五獣走 %s%c%d研 %s稽 差紫掻脊艦陥 ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "巨刑塘軒 %s拭辞 原走厳 収切 = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/伸奄(_O)"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/...稽 伸奄(_w)"
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/努什闘稽 左奄(_D)"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/歯 戚硯生稽(_S)..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/辞誤 溌昔(_C)"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "原績 坂研 持失杯艦陥...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "原績 展脊"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "努什闘"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "歎採"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "溌昔馬奄 是背 \"辞誤 溌昔\" 識澱"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "multipart 五獣走税 採歳聖 煽舌拝 呪亜 蒸柔艦陥."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "...稽 伸奄"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"督析聖 伸 誤敬聖 脊径馬室推:\n"
+"(`%s'澗 督析戚硯生稽 企端吃 依脊艦陥)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "原績 坂嬢税 誤敬楳戚 採旋箭杯艦陥: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "%s:%d稽 NNTP 羨紗聖 持失杯艦陥...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "%s:%d稽税 NNTP 尻衣戚 快嬢然柔艦陥. 陥獣 尻衣杯艦陥...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "奄紫 %d澗 戚耕 蝶習鞠醸柔艦陥.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "奄紫 %d研 条柔艦陥...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "奄紫 %d研 石聖 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "敢什益血 鯉系聖 閤聖 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "奄紫研 臣険 呪亜 蒸柔艦陥.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "奄紫 %d研 亜閃臣 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "%s 益血聖 識澱拝 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "臣郊牽走省精 奄紫 骨是: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "歯 奄紫亜 蒸柔艦陥.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "%3$s拭辞 %1$d - %2$d xover研 亜閃身...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "xover研 亜閃臣 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "xover研 条澗 亀掻 拭君亜 降持.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "臣郊牽走省精 xover line: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "xhdr聖 亜閃臣 呪亜 蒸柔艦陥\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "xhdr聖 条澗 亀掻 拭君亜 降持.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "%s:%d NNTP 辞獄拭 尻衣拝 呪亜 蒸柔艦陥\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "覗稽塘紬 拭君: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "覗稽塘紬 拭君\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "越聖 臣軒澗 亀掻 拭君 降持\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "五析聖 坦軒馬澗 亀掻 拭君"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Passphrase"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[紫遂切 焼戚巨 蒸製]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s passphrase研 脊径馬室推:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Bad passphrase! 陥獣 獣亀馬室推...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "greeting拭辞 降胃鞠走省精 APOP 展績 什兎覗亜 推姥喫\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "greeting拭辞 展績 什兎覗拭 庚狛 神嫌\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 覗稽塘紬 拭君\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "臣郊牽走省精 xover line: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 幻戟吉 五獣走 %d研 肢薦杯艦陥\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: 五獣走 %d研 闇格菌艦陥 (%d 郊戚闘)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "酔畷敗戚 節移赤柔艦陥\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "TLS 室芝聖 獣拙拝 呪 蒸柔艦陥\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "昔装 亀掻 拭君 降持\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "誤敬嬢"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "昔装 亀掻 拭君 降持\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "竺舛聖 石柔艦陥...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "%s聖 降胃\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "竺舛 石奄研 原徴.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "竺舛戚 煽舌鞠醸柔艦陥.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "旋遂"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "域舛 竺舛 但聖 娠艦陥...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "域舛%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "歯 域舛拭企廃 竺舛"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "域舛 奄沙 竺舛"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "域舛 竺舛 但聖 持失杯艦陥...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "閤奄"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "覗虞戚獄獣"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "壱厭"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "戚 域舛税 戚硯"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "奄沙 域舛生稽 竺舛"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "重雌 舛左"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "舛縦 戚硯"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "五析 爽社"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "奄淫"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "辞獄 舛左"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "敢什(NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "稽鎮"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "戚 辞獄澗 昔装聖 琶推稽 杯艦陥"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "敢什 辞獄"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "閤澗 辞獄"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP 辞獄(降勺遂)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "紫遂切 域舛"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "章硲"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "戚 辞獄澗 昔装聖 琶推稽 杯艦陥"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "閤精 板 辞獄拭辞 五獣走研 走崇"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr ""
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr ""
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 析: 聡獣 肢薦)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "辞獄拭辞 乞窮 五獣走研 閤製"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "閤聖 滴奄 廃亀"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "閤聖凶 五獣走研 琶斗元"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "奄沙 酔畷敗"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(琶斗元 鞠走 省精 五獣走澗 戚 虹希拭 煽舌吃 依脊艦陥)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "昔装 号狛"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "切疑"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr ""
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "伯希"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Date 伯希 牌鯉聖 蓄亜"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Message-ID 持失"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "紫遂切 舛税吉 伯希 蓄亜"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " 畷増..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "昔装"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP 昔装(SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "左鎧奄穿 POP3人 昔装"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "誤敬嬢"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "陥製 爽社研 切疑旋生稽 舛敗"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "凧繕"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "需精 凧繕"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "噺重爽社"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "奄沙生稽 五獣走研 章硲鉢"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "奄沙生稽 五獣走拭 紫昔聖 敗"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr ""
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "授呪廃 努什闘 辞誤 紫遂"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr ""
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "奄沙 GnuPG 徹 紫遂"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "雁重税 穿切酔畷 爽社稽 徹 識澱"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "呪疑生稽 徹 走舛"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "紫遂切 箸精 徹 ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "SSL聖 紫遂馬走 省柔艦陥"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "POP3 尻衣拭 SSL聖 紫遂杯艦陥"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "SSL 室芝聖 獣拙馬奄 是背 STARTTLS 誤敬聖 紫遂杯艦陥"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "IMAP4 尻衣拭 SSL聖 紫遂杯艦陥"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "NNTP 尻衣拭 SSL聖 紫遂杯艦陥"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr ""
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SMTP 尻衣拭 SSL聖 紫遂杯艦陥"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTP 匂闘 腰硲"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3 匂闘 腰硲"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4 匂闘 走舛"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "NNTP 匂闘 走舛"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "亀五昔 戚硯 走舛"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP 辞獄 巨刑塘軒"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "左浬 五獣走 煽舌"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "績獣 五獣走 煽舌"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "肢薦吉 五獣走 煽舌"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "域舛 戚硯戚 脊径鞠走 省紹柔艦陥."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "五析 爽社亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP 辞獄亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "紫遂切 焼戚巨亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 辞獄亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 辞獄亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP 辞獄亜 走舛鞠走省紹柔艦陥."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "疑拙 竺舛聖 捷艦陥...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "五敢 戚硯:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "誤敬嬢:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "企端"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr ""
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "去系吉 疑拙"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(歯 鋭帳)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "五敢 戚硯戚 走舛鞠走省製"
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "五敢 戚硯拭辞 紬経 ':'聖 紫遂拝 呪 蒸柔艦陥."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "五敢 戚硯戚 格巷 演艦陥."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "誤敬戚 走舛鞠走省製"
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "五敢 戚硯引 誤敬戚 格巷 演艦陥."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"誤敬\n"
+"%s\n"
+"拭 莫縦拭君亜 赤柔艦陥."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "疑拙 肢薦"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "舛源稽 戚 疑拙聖 肢薦馬獣畏柔艦猿?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "析鋼 竺舛 但聖 持失杯艦陥...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "析鋼 竺舛"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "昔遂"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "左奄"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "沙庚"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "奄展"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "須採 覗稽益轡"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "杯端聖 是背 須採 覗稽益轡聖 紫遂"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "誤敬嬢"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Local spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "spool稽採斗 杯端"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "杯端獣 琶斗元"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "歯 畷走研 切疑 伊紫"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr ""
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "歳"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "獣拙拝 凶 歯 畷走研 伊紫"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "佐杯 板拭 乞窮 走蝕 虹希 飴重"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "敢什"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"鎧形閤聖 置企 奄紫 呪\n"
+"(0昔 井酔 薦廃 蒸製)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "降勺聖 是背 須採 覗稽益轡聖 紫遂"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "左浬 五獣走研 '左浬 畷走敗'拭 煽舌"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "左鎧澗 五析税 庚切実"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "切疑 (蓄探)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit 焼什徹 (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "政艦坪球 (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "辞採 政郡(ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "辞採 政郡(ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "掻採 政郡(ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltic (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltic (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "益軒什 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "斗徹 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillic (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillic (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillic (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrillic (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "析沙 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "析沙 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "析沙 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Simplified Chinese (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditional Chinese (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditional Chinese (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "掻厩 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "廃厩 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"`切疑'戚 識澱鞠檎, 薄仙 稽追析拭 限澗 置旋税\n"
+"昔坪漁 号縦戚 紫遂桔艦陥."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "左鎧奄 穿拭 匝 郊嘩"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "辞誤 歳軒切"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "走疑生稽 諮脊"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "切疑生稽 須採 畷増奄 紫遂"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr ""
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "匝 郊嘩 at"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "越切"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "昔遂亀 匝 郊嘩"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr ""
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "左鎧奄 穿拭 匝 郊嘩"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "切疑生稽 噺重拝 域舛 識澱"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "噺重拝 凶 五獣走研 昔遂"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "噺重 獄動戚 五析元軒什闘拭 企廃 噺重生稽 疑拙"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "噺重 莫縦"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "昔遂 採硲"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "穿含 莫縦"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 採硲 竺誤 "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "越加"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "伯希 戚硯聖 腰蝕(`From:', `Subject:' 去去)"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "虹希戚硯新拭 石走省聖 五獣走 呪研 妊獣"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr ""
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr ""
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "推鉦 左奄"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "左浬 紫寓戚 沙昔昔 井酔 左浬 紫寓 牒拭 閤澗 紫寓聖 妊獣"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "床傾球 縄奄"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "劾促 莫縦"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "推鉦拭 妊獣吃 牌鯉 竺舛... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "五獣走拭 事聖 戚遂馬食 左食爽奄"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"陥掻郊戚闘 硝督昏引 収切研 ASCII 庚切稽\n"
+"妊獣 (析沙嬢昔 井酔拭幻)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "五獣走 左奄 是拭 伯希 但 妊獣"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "五獣走研 瑳凶 娃舘廃 伯希幻 妊獣"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "匝 娃維"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "波漆"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "袴軒採歳拭 因娃聖 害奄奄"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "什滴継"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "鋼 凪戚走"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "採球君錘 什滴継"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr ""
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "歎採吉 戚耕走 滴奄 繕舛"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "切疑生稽 辞誤 溌昔"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "橡穣 但拭 辞誤 溌昔 衣引 左戚奄"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "搾腔腰硲研 五乞軒拭 績獣 左淫"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr ""
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "歳 "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "passphrase研 脊径拝凶 Grab input"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "GnuPG亜 疑拙馬走 省聖 井酔 獣拙獣 井壱 妊獣"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "嬢恐 五獣走 督析亀 識澱鞠走 省紹柔艦陥."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "虹希拭 級嬢亜檎 湛腰属 照石精 五獣走 伸奄"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "歯 但拭辞 伸携聖 井酔拭幻 五獣走研 石精 依生稽 妊獣"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "歯 畷走研 閤精 板 閤精 畷走敗生稽 亜奄"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "五獣走研 戚疑馬暗蟹 走随凶 聡獣 叔楳"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(戚依戚 襖閃赤澗 井酔 五獣走澗 叔楳凶猿走\n"
+"舘走 妊獣幻 吃 依脊艦陥)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "閤奄 企鉢雌切"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "閤奄 企鉢雌切 左奄"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "牌雌"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "左戚走 省製"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "閤奄 拭君 降持獣 拭君 雌切 左戚走 省製"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "魁概聖 凶 閤奄 企鉢雌切 丸奄"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " 徹 郊昔漁 竺舛... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "須採 誤敬 (%s澗 督析 戚硯 / URI稽 企端桔艦陥)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "瀬 貼事奄"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "希鷺適遣獣拭 企雌拭 爽社 蓄亜"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "魁馨凶"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "魁蛎凶 溌昔"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "魁馨凶 走錘 畷走敗 搾酔奄"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "走錘 畷走敗 搾随凶 溌昔馬奄"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "泥拭 五獣走亜 赤聖 凶 井壱"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr ""
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr ""
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr ""
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr ""
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "薄仙 稽追析拭 旋雁廃 劾促人 獣娃"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "鰍亀 (鰍/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr ""
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr ""
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr ""
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr ""
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr ""
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr ""
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr ""
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "竺誤"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "森薦"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "五獣走 事 竺舛"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "事"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "昔遂庚 - 湛腰属 舘域"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "昔遂庚 - 砧腰属 舘域"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "昔遂庚 - 室腰属 舘域"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI 元滴"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "昔遂 事 鋼差"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "湛腰属 舘域 昔遂庚 事 識澱"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "砧腰属 舘域 昔遂庚 事 識澱"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "室腰属 舘域 昔遂庚 事 識澱"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "URI 事 識澱"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "採硲 竺誤"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"劾促\n"
+"左浬 紫寓\n"
+"左浬 紫寓税 戚硯\n"
+"左浬 紫寓税 失\n"
+"左浬 紫寓税 戚艦屡\n"
+"薦鯉\n"
+"閤澗 紫寓\n"
+"凧繕\n"
+"敢什益血\n"
+"五獣走-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr ""
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "越加 識澱"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "徹 郊昔漁"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "奄沙"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "森穿 Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "紫遂切 伯希 竺舛"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "紫遂切 伯希"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "伯希 戚硯戚 走舛鞠走省製"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "伯希 肢薦"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "舛源稽 戚 伯希研 肢薦馬獣畏柔艦猿?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "妊獣吃 伯希 竺舛 但聖 持失杯艦陥...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "妊獣吃 伯希 竺舛"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "伯希 戚硯"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "妊獣吃 伯希"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "需掩 伯希"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "走舛鞠走 省精 乞窮 伯希 妊獣"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "妊獣吃 伯希 竺舛聖 石柔艦陥...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "妊獣吃 伯希 竺舛聖 捷艦陥...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "戚 伯希澗 鯉系拭 戚耕 赤柔艦陥."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "暗牽鯵 竺舛"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "閤澗 紫寓:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/差紫(_C)..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "鋭帳 肢薦"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "舛源稽 戚 鋭帳聖 肢薦馬獣畏柔艦猿?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "鋭帳 肢薦"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "需掩 伯希"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "伯希"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "沙庚"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "匂敗"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "匂敗 照喫"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "焼掘稽 戚疑"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/差紫(_C)..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "閤走 省製"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "虹希 肢薦"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "五乞"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "五獣走 事 竺舛"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/妊獣(_M)/石精 依生稽 妊獣(_d)"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/歎採稽 穿含(_w)"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Redirec_t"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "叔楳"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "虹希"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "爽社"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "伯希"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "伯希"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "伯希"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "閤澗 紫寓戚 走舛鞠走省紹柔艦陥"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "誤敬戚 走舛鞠走省製"
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "煽舌 虹希亜 竺舛戚 鞠嬢赤走省柔艦陥"
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "誤敬戚 走舛鞠走省製"
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: 督析戚 蒸柔艦陥\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "虹希 働失"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "析鋼"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "左搭"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "馬是 虹希拭 旋遂"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "噺重獣拭亀 紫遂"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "噺重爽社:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "妊獣"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "歎採"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "薦鯉"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "左浬 紫寓"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "劾促"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "収切"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "推鉦 伸 竺舛 但聖 持失杯艦陥...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "推鉦 妊獣 牌鯉 竺舛"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "紫遂亜管廃 牌鯉"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "妊獣吃 牌鯉"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " 奄沙葵生稽 据雌差姥 "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "奴巴鹸 戚硯"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "去系"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " 帖発"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 宿瑳 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "去系吉 奴巴鹸"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "奴巴鹸"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "奴巴鹸"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "奴巴鹸 莫縦 拭君."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "奴巴鹸聖 走嵩艦陥"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "舛源稽 戚 奴巴鹸聖 肢薦馬獣畏柔艦猿?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): 坪球 痕発戚 叔鳶梅柔艦陥.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "妊獣 督析聖 伸呪亜 蒸柔艦陥\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "五獣走 %d研 亜閃臣 呪亜 蒸柔艦陥\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "左淫吉 五獣走 %d研 左鎧奄亜 叔鳶梅柔艦陥.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "昔錫 誤敬嬢亜 臣郊牽走省柔艦陥: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "雌殿"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "遭楳 陥戚杖稽益研 持失杯艦陥...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "汽戚展研 亜閃神澗 掻 拭君亜 降持梅柔艦陥.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "督析拭 承 呪亜 蒸柔艦陥.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "跡?: 辞誤戚 昔装鞠走省紹柔艦陥"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "辞誤戚 降胃鞠走省製"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Good signature"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "BAD signature"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "辞誤聖 伊装拝 因鯵徹亜 蒸柔艦陥"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "辞誤聖 伊装馬澗 亀掻 拭君"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr ""
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "拭君: 乞牽澗 雌殿"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr ""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr ""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "戚 徹拭 企廃 紫遂切 ID研 達聖 呪 蒸柔艦陥."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr ""
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr ""
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr ""
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "`%s'拭 企廃 徹研 識澱馬室推"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr ""
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "徹 識澱"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "徹 ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "葵"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "徹 蓄亜"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "陥献 紫遂切 箸精 徹 ID 脊径:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "左馨 五獣走税 伯希亜 凹然柔艦陥.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "尻衣 掻脊艦陥"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "SMTP 辞獄拭 尻衣馬壱 赤柔艦陥: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "HELO研 左垣艦陥..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "昔装"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "五獣走聖 左鎧澗 掻"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "EHLO研 左垣艦陥..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "MAIL FROM聖 左垣艦陥..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "左垣艦陥"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "RCPT TO研 左垣艦陥..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "DATA研 左垣艦陥..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "魁原帖澗 掻..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "五獣走研 左鎧澗 掻 (%d / %d 郊戚闘)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "五獣走聖 左鎧澗 掻"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "五獣走研 左鎧澗汽 拭君 降持"
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "五獣走研 左鎧澗汽 拭君 降持"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "五析酵什 竺舛"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"胡煽 五析酵什税 是帖研 走舛背醤杯艦陥.\n"
+"奄糎拭 紫遂馬壱 赤生獣檎 MH 匂娯税 五析酵什研\n"
+"紫遂馬叔 呪 赤柔艦陥\n"
+"設 乞牽畏生檎 益撹 溌昔聖 刊牽室推."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "辞誤 溌昔"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP 昔装聖 紫遂拝 呪 蒸柔艦陥\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "昔装 亀掻 拭君 降持\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "社什 但聖 幻旧艦陥...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "五獣走税 社什"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "%s税 社什研 左食掃艦陥...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 社什"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23聖 紫遂拝 呪 蒸柔艦陥\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23聖 紫遂拝 呪 赤柔艦陥\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1聖 紫遂拝 呪 蒸柔艦陥\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1聖 紫遂拝 呪 赤柔艦陥\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL研 紫遂拝 呪 蒸柔艦陥\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "乞牽澗 SSL *覗稽益轡 獄益*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "ssl 庚呼 持失 拭君\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL 尻衣戚 叔鳶梅柔艦陥(%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "%s 紫遂馬食 SSL 尻衣\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "辞獄 装誤:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " 薦鯉: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 降楳昔: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "五獣走 達奄"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "陥製 爽社研 切疑旋生稽 舛敗"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "沙庚:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "繕闇拭 限澗 依聖 乞砧 識澱"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "軒什闘税 固蒋拭 亀含梅柔艦陥; 魁拭辞 域紗拝猿推?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "軒什闘税 魁拭 亀含梅柔艦陥; 獣拙採歳拭辞 域紗拝猿推?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/噺重(_y)"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/噺重(_y)/穿端(_a)"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/噺重(_y)/左浬戚(_s)"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/噺重(_y)/五析元軒什闘(_l)"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "戚疑(_o)..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/差紫(_C)..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/妊獣(_M)"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/妊獣(_M)/妊獣(_U)"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/妊獣(_M)/妊獣 蒸証(_U)"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/妊獣(_M)/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/妊獣(_M)/石走省精 依生稽 妊獣(_e)"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/妊獣(_M)/石精 依生稽 妊獣(_d)"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/妊獣(_M)/乞砧 石精 依生稽 妊獣(_r)"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/事 虞婚(_b)"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/陥獣 畷増(_e)"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/爽社系拭 左浬戚 蓄亜(_k)"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/左奄(_V)/社什(_S)"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/左奄(_V)/乞窮 伯希(_h)"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/昔錫(_)..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "腰硲"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "推鉦 但聖 持失杯艦陥...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "妊獣 坦軒"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "妊獣亜 食穿備 害焼赤柔艦陥. 益依級聖 坦軒拝猿推?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "虹希(%s)研 什諜..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "照 石精 五獣走亜 蒸戎 "
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "照 石精 五獣走亜 蒸柔艦陥. 魁拭辞 採斗 達聖猿推?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "照 石精 五獣走亜 蒸柔艦陥."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "照 石精 五獣走亜 蒸柔艦陥. 陥製 虹希稽 哀猿推?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "陥獣 達奄"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "歯 五獣走亜 蒸柔艦陥."
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "歯 五獣走亜 蒸柔艦陥. 魁拭辞 採斗 達聖猿推?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "歯 五獣走亜 蒸柔艦陥."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "歯 五獣走亜 蒸柔艦陥. 陥製 虹希稽 哀猿推?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "妊獣吉 五獣走亜 蒸柔艦陥"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "妊獣吉 五獣走亜 蒸柔艦陥. 魁拭辞 採斗 達聖猿推?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "妊獣吉 五獣走亜 蒸柔艦陥."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "妊獣吉 五獣走亜 蒸柔艦陥. 陥製 虹希稽 哀猿推?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "何軒妊赤澗 五獣走亜 蒸柔艦陥"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "何軒妊赤澗 五獣走亜 蒸柔艦陥. 魁拭辞 採斗 達聖猿推?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "何軒妊赤澗 五獣走亜 蒸柔艦陥."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "何軒妊赤澗 五獣走亜 蒸柔艦陥. 坦製採斗 達聖猿推?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr ""
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d鯵 肢薦喫"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d鯵 戚疑"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr ""
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 焼戚奴 識澱"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 歯 五獣走, %d 照 石製, %d鯵 五獣走(%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 歯 五獣走, %d 照 石製, %d鯵 五獣走"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "推鉦聖 舛慶杯艦陥..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t五獣走 汽戚展稽採斗 推鉦聖 幻旧艦陥..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "五獣走 汽戚展稽採斗 推鉦聖 幻旧艦陥..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "推鉦 蝶習 (%s)研 捷艦陥..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(劾促 蒸戎)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "五獣走 %d亜 妊獣鞠醸柔艦陥\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "五獣走 %d亜 石精 依生稽 妊獣鞠醸柔艦陥\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "五獣走 %d亜 石走省精 依生稽 妊獣鞠醸柔艦陥\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "五獣走 %s/%d亜 走随依生稽 妊獣鞠醸柔艦陥\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "五獣走研 走嵩艦陥"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "舛源稽 戚 五獣走研 妃走搭拭辞 肢薦馬獣畏柔艦猿?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "掻差吉 五獣走研 走嵩艦陥..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "五獣走 %s/%d税 妊獣研 走頗柔艦陥\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "五獣走 %d亜 %s稽 戚疑馬亀系 梅柔艦陥\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "亀鐸走亜 薄仙 虹希人 旭柔艦陥"
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr ""
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "差紫拝 企雌戚 薄仙 虹希人 旭柔艦陥."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "乞窮 五獣走研 識澱..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "五析聖 坦軒馬澗 亀掻 拭君"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "床傾球研 幻旧艦陥..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "床傾球研 蒸詔艦陥..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "叔楳聖 是背 床傾球研 蒸詔艦陥..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "琶斗元..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "琶斗元..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "五獣走 %d澗 戚耕 蝶習鞠醸柔艦陥.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "%s 督析戚 戚耕 糎仙杯艦陥\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "努什闘 坂研 持失杯艦陥...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "戚 五獣走研 閤走省聖 依脊艦陥\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr ""
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr ""
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr ""
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr ""
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr ""
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr ""
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr ""
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr ""
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr ""
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr ""
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "%s稽 床奄亜 叔鳶梅柔艦陥.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "%s 督析聖 伸 呪亜 蒸柔艦陥\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (左搭)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP 昔装)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/五析酵什研 走酔奄(_m)"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/IMAP4 域舛 肢薦(_I)"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/敢什益血 域舛 肢薦(_n)"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/五獣走(_M)/左鎧奄(_S)"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/五獣走(_M)/Sign(_g)"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "稽町 五析酵什拭 五獣亜 蒸製.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "什熱 巨刑塘軒"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "壱牽奄..."
+
+#~ msgid "Condition"
+#~ msgstr "繕闇"
+
+#~ msgid "Keyword"
+#~ msgstr "徹趨球"
+
+#~ msgid "Destination"
+#~ msgstr "煽舌 虹希"
+
+#~ msgid "Use regex"
+#~ msgstr "舛鋭縦 紫遂"
+
+#~ msgid "Registered rules"
+#~ msgstr "去系吉 鋭帳"
+
+#~ msgid "(none)"
+#~ msgstr "(竺舛照喫)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "URI伸奄 誤敬嬢亜 臣郊牽走省柔艦陥: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "蝶習 汽戚展亜 凹閃赤柔艦陥\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/琶斗 鋭帳 持失(_i)"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/琶斗 鋭帳 持失(_i)/切疑(_A)"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/琶斗 鋭帳 持失(_i)/左浬戚稽(_F)"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/琶斗 鋭帳 持失(_i)/閤澗戚稽(_T)"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/琶斗 鋭帳 持失(_i)/薦鯉生稽(_S)"
+
+#~ msgid "Queueing"
+#~ msgstr "績獣左淫"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "五獣走研 左鎧澗 掻 拭君 降持.\n"
+#~ "戚 五獣走研 績獣 左淫敗拭 隔聖猿推?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "左鎧奄研 叔鳶梅聖凶 五獣走研 左馨 畷走敗生稽 左蛙"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/叔楳(_x)"
+
+#~ msgid "/Select _all"
+#~ msgstr "/穿採 識澱(_a)"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/床傾球 識澱(_t)"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "%s 益血聖 舛拝 呪亜 蒸柔艦陥\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "戚 五獣走研 閤走省聖 依脊艦陥\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/五獣走(_M)/歯 五析 閤奄(_i)"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\t蝶習 督析戚 蒸柔艦陥\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\t推鉦 蝶習研 石嬢球験艦陥..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "蝶習 獄穿戚 陥絹艦陥. 益依聖 獄顕.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "妊獣 督析戚 降胃鞠走省製.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "妊獣 獄穿戚 陥絹艦陥(%d != %d). 益依聖 巷獣杯艦陥.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "蓄亜 乞球稽 妊獣 督析聖 伸 呪亜 蒸柔艦陥.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "床奄 乞球稽 妊獣 督析聖 伸 呪亜 蒸柔艦陥.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "節榎 督析 %s聖 幻級呪亜 蒸柔艦陥\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "朔 虹希\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "但戚 醗失鉢鞠嬢 赤聖 凶幻"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "唖 虹希拭 企廃 戚穿税 乞窮 竺舛葵聖 籍惟 桔艦陥.\n"
+#~ "域紗拝猿推?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "但 是帖: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "是銭級聖 竺舛杯艦陥..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "五獣走 %s%c%d研 %s稽 戚疑杯艦陥...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\t五獣走級聖 妊獣杯艦陥..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d 歯 五獣走\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "%s 酔畷敗聖 識澱拝 呪 蒸柔艦陥\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "五獣走 %d研 亜閃辛艦陥...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "蝶習吉 乞窮 五獣走 %u研 走崇艦陥 - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "蝶習吉 乞窮 五獣走研 走崇艦陥... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "恥 五獣走税 姐呪研 室澗 掻...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "五獣走 督析聖 亜閃臣 呪 蒸柔艦陥."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "推鉦拭辞 朕辞 徹亜 喚形然聖 井酔 五獣走 伸奄"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "五析聖 坦軒馬澗 亀掻 拭君"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "泥拭 赤澗 五獣走研 左鎧澗汽 拭君 降持"
+
+#~ msgid "No message part selected."
+#~ msgstr "嬢恐 五獣走 採歳亀 識澱鞠走 省紹柔艦陥."
+
+#~ msgid "Predicate"
+#~ msgstr "繕闇"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "疑拙 竺舛 但聖 持失杯艦陥...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "疑拙 竺舛"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "疑拙 竺舛聖 石柔艦陥...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "疑拙 誤敬 拭君\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "社掴 拭君\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "域舛戚 降胃鞠走省製. 薄仙 域舛聖 紫遂...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "域舛戚 降胃鞠走省紹柔艦陥.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "須採 誤敬聖 叔楳拝 呪亜 蒸柔艦陥: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP 昔装戚 叔鳶梅柔艦陥\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "QUIT研 左鎧澗 掻 拭君 降持\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "%s:%d SMPT 辞獄拭 尻衣拝 呪亜 蒸柔艦陥\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL 尻衣戚 叔鳶梅柔艦陥"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "%s稽 尻衣 掻 拭君 降持:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "HELO研 左鎧澗 掻 拭君 降持\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "STARTTLS研 左鎧澗 掻 拭君 降持\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "EHLO研 左鎧澗 掻 拭君 降持\n"
+
+#~ msgid "Signature file"
+#~ msgstr "辞誤 督析"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "紫遂切 伯希 竺舛 但聖 持失杯艦陥...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "紫遂切 伯希 竺舛聖 石嬢級脊艦陥...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "紫遂切 伯希 竺舛聖 捷艦陥...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "暗牽鯵 竺舛 但聖 持失杯艦陥...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "琶斗 竺舛聖 石嬢級脊艦陥...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "琶斗 竺舛聖 捷艦陥...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\t蝶習鞠走省精 五獣走研 達柔艦陥... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d鯵税 蝶習鞠走省精 五獣走亜 降胃鞠醸柔艦陥.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\t蝶習鞠走省精 五獣走研 舛慶杯艦陥..."
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "竺舛吉 庚切実: %s\n"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 00000000..f8309b5f
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,6470 @@
+# Dutch translation of Sylpheed.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Vincent van Adrighem <V.vanAdrighem@ITS.TUDelft.nl>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sylpheed 0.8\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-02-18 13:03--100\n"
+"Last-Translator: Vincent van Adrighem <V.vanAdrighem@dirck.mine.nu>\n"
+"Language-Team: Dutch <vertaling@nl.linux.rg>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Info"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME is copyright 2001 door Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Dit programma is vrije software. U kunt het verspreiden en/of aanpassen "
+"binnen de afspraken die in de GNU GPL (General Public License) zijn "
+"gepubliceerd. U mag zelf kiezen of u versie 2 of (als u dat wenst) iedere "
+"latere versie van het GPL hanteert.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Dit programma wordt verspreid in de hoop dat het nuttig is, maar ZONDER "
+"ENIGE GARANTIE. Zelfs zonder de impliciete garantie van VERKOOPWAARDIGHEID "
+"of GESCHIKTHEID VOOR ENIG DOEL. Lees de GNU General Public License voor "
+"verdere details.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"U zou een kopie van de GNU GPL (General Public License) ontvangen moeten "
+"hebben bij dit programma. Als dit niet het geval is, dan kun u een aanvragen "
+"bij de Free Software Foundation Inc., 59 Temple Place - Suite 330, Boston, "
+"MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Accountinstellingen worden ingelezen...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Label gevonden: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Er zijn nog schermen open om een nieuw bericht op te stellen.\n"
+"Deze moeten gesloten worden om de postvakken te kunnen bewerken."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Accountvoorkeuren worden geopend...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Postvakeigenschappen venster word gemaakt...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Accountbeheer"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nieuwe berichten zullen gecontroleerd worden in deze volgorde.\n"
+"Zet een vinkje in de 'G' kolom om berichten binnen te halen wanneer\n"
+"u op de knop 'Alles ophalen' klikt."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Naam"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Toevoegen"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Bewerken"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "Verwijderen"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Omlaag"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Omhoog"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Instellen als hoofdaccount"
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Sluiten"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Account verwijderen"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Wilt u dit account werkelijk verwijderen?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Ja"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nee"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Kon berichtbestand niet verkrijgen."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Kon berichtdeel niet verkrijgen."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Kan een deel van een meerdelig bericht niet verkrijgen"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"De geselecteerde actie kan niet gebruikt worden in het venster\n"
+"'bericht opstellen' omdat het %%f, %%F of %%p bevat."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Opdracht kon niet gestart worden. Pijp kon niet aangemaakt worden.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kon het externe programma niet aanroepen:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Actief: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Klaar: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Acties invoer/uitvoer"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Verzenden"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Afbreken"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Geef de afdrukopdracht:\n"
+"('%s' zal vervangen worden door de bestandsnaam)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Geef de afdrukopdracht:\n"
+"('%s' zal vervangen worden door de bestandsnaam)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Adres toevoegen aan adresboek"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adres"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Opmerkingen"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Selecteer adresboekmap"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Bestand"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Bestand/Nieuw _adresboek"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Bestand/Nieuwe _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Bestand/Nieuwe _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Bestand/Nieuwe _Server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Bestand/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Bestand/Aanpassen"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Bestand/_Verwijderen"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Bestand/_Opslaan"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Bestand/_Sluiten"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adres"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adres/Nieuw _adres"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adres/Nieuwe _groep"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adres/Nieuwe _map"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adres/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adres/_Bewerken"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adres/_Verwijderen"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Gereedschap"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Gereedschap/_LDIF bestand importeren"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Hulp"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Hulp/_Info"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nieuw _adres"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nieuwe _groep"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nieuwe _map"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/Be_werken"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/Ver_wijderen"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-mail adres"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adresboek"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Naam:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Zoeken"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Aan:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Adres(sen) verwijderen"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Wilt u de adressen werkelijk verwijderen?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nee"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Wilt u behalve de map, OOK alle adressen in '%s' verwijderen?\n"
+"Als u alleen de map verwijdert, dan zullen de adressen naar de \n"
+"hoger gelegen map verplaatst worden."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Alleen map"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Map en adressen"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Wilt u '%s' werkelijk verwijderen?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nieuwe gebruiker: Kon indexbestand niet opslaan."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nieuwe gebruiker: Kon adresboekbestanden niet opslaan."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Oude adresboekgegevens succesvol omgezet."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Oude adresboekgegevens omgezet.\n"
+"Kon het nieuwe adresboek indexbestand niet opslaan."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Kon adresboekgegevens niet omzetten.\n"
+"Nieuw leeg adresboek is gemaakt."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Kon adresboekgegevens niet omzetten.\n"
+"Kon geen nieuwe adresboek bestanden aanmaken."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Kon adresboekgegevens niet omzetten.\n"
+"Kon ook geen nieuwe adresboekbestanden aanmaken."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Adresboek omzetprobleem"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Adresboek omzetting"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Adresboekprobleem"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Kon adresboek index niet lezen"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Oude adresboekgegevens omgezet. Kon het nieuwe adresboek indexbestand niet "
+"opslaan."
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "Kon adresboekgegevens niet omzetten. Nieuw leeg adresboek is gemaakt."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Kon adresboekgegevens niet omzetten. Kon geen nieuwe adresboek bestanden "
+"aanmaken."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Kon adresboekgegevens niet omzetten. Kon ook geen nieuwe adresboek bestanden "
+"aanmaken."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Adresboek omzetprobleem"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Adresboek Omzetting"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interface"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adresboek"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persoon"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-mail adres"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Groep"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Accounts"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Algemene adressen"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Persoonlijke adressen"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Bericht"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Fout"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Waarschuwingsdialoog wordt gemaakt...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Dit bericht de volgende keer weergeven"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Oranje"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rood"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Roze"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Hemelsblauw"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Blauw"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Groen"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Bruin"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Geen"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Toevoegen..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Verwijderen"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Eigenschappen..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Bestand/_Opslaan"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/Be_richt/_Later verzenden"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/Be_richt/Klad opslaan"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/Be_richt/Opslaan en blijven bewer_ken"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Bestand/_Bijlage toevoegen"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Bestand/Bijlage _invoegen"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Bestand/_Handtekening Invoegen"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/B_ewerken/_Ongedaan maken"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/B_ewerken/O_pnieuw toepassen"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/B_ewerken/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/B_ewerken/Knippen"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/B_ewerken/_Kopi谷ren"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/B_ewerken/_Plakken"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/B_ewerken/Plakken als _citaat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/B_ewerken/_Alles selecteren"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/B_ewerken/Ge_avanceerd"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/B_ewerken/Ge_avanceerd/Ga een teken terug"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/B_ewerken/Ge_avanceerd/Ga een teken verder"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/B_ewerken/Ge_avanceerd/Ga een woord terug"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/B_ewerken/Ge_avanceerd/Ga een woord verder"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/B_ewerken/Ge_avanceerd/Ga naar begin van regel"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/B_ewerken/Ge_avanceerd/Ga naar einde van regel"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/B_ewerken/Ge_avanceerd/Ga naar vorige regel"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/B_ewerken/Ge_avanceerd/Ga naar volgende regel"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder vorig teken"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder volgend teken"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder vorig woord"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder volgend woord"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder regel"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/B_ewerken/Ge_avanceerd/Verwijder alles tot einde regel"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/Be_werken/Regelterugloop in deze paragraaf"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/B_ewerken/Regelterugloop in hele bericht"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/B_ewerken/_Kopi谷ren"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/B_eeld"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/B_eeld/_Aan"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/B_eeld/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/B_eeld/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/B_eeld/Ant_woord naar"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/B_eeld/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/Be_richt/_Vervolg op"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/B_eeld/_Lineaal"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/B_eeld/_Bijvoeging"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Gereedschap/_Adresboek"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Gereedschap/_Sjabloon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Gereedschap/A_cties"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Gereedschap/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/B_ewerken/Be_werken met externe editor"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Gereedschap/A_cties"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/Be_richt/Codeer"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: bestand bestaat niet\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Kan tekstgedeelte niet ophalen\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Citeerteken opmaakfout."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Bericht beantwoorden/doorsturen opmaakfout."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Bestand %s bestaat niet\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Kan de bestandsgrootte niet bepalen van %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Bestand %s is leeg"
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Kan %s niet inlezen."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Bericht: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ik kan het deel van een meerdelig bericht niet ophalen."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Aangepast]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - bericht opstellen%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Bericht opstellen%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Ontvanger is niet gespecificeerd."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Verzenden"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "U heeft geen onderwerp ingevuld. Toch versturen?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "Kan geen ontvangerlijst opvragen."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Account voor het verzenden van email is niet gespecificeerd.\n"
+"Selecteer een account voordat u verzend."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Er is een fout opgetreden bij het versturen van het bericht naar %s."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Het bericht kan niet opgeslagen worden in de outbox."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Kon gee bijpassende sleutel vinden voor geselecteerde sleutel-id `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "kan de bestandmodus niet veranderen\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Kan de tekenset van het bericht niet omzetten van\n"
+"%s naar %s.\n"
+"Toch versturen?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "kan geen headers schrijven\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "kan het oude bericht niet verwijderen\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "bericht wordt in de wachtrij geplaatst...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "kan de Wachtrij-map niet vinden\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "kan het bericht niet in de wachtrij plaatsen\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "gegenereerd bericht-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Venster \"Bericht opstellen\" wordt aangemaakt...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME type"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Grootte"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Afzender:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Verzend bericht"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Wachtrij"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "In de wachtrij plaatsen en later verzenden"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Klad"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Opslaan als klad"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Invoegen"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Bestand invoegen"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Bijvoegen"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Bestand bijvoegen"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Tekenen"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Handtekening (signature) invoegen"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Bewerken met ander (extern) programma"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Terugloop"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Lange regels op meerdere regels zetten"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Ongeldig MIME type."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Bestand bestaat niet of is leeg."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Eigenschappen"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codering"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Pad"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Bestandsnaam"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "De ingegeven opdracht voor de externe editor is onjuist: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Het andere programma is nog steeds actief.\n"
+"Zal ik het programma afbreken?\n"
+"procesgroep id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Programma (id: %d) afgebroken."
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Tijdelijk bestand: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Opstellen: invoer van \"monitoring process\"\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Kon het externe programma voor bewerken van e-mail niet aanroepen\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Kon niet naar bestand schrijven\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Inlezen van pijp mislukt\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Kan bericht niet in de wachtrij plaatsen."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Selecteer bestand"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Gooi bericht weg"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Dit bericht is aangepast. weggooien?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Gooi weg"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "opslaan als klad"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Wilt u het sjabloon '%s' toepassen?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Sjabloon toepassen"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Vervangen"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Adres bewerken"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Nieuw persoon toevoegen"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Persoonsgegevens bewerken"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "E-mail adres is niet ingevoerd."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Een naam en waarde moeten worden gegeven."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Persoonsgegevens bewerken"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Naam in de lijst"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Achternaam"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Voornaam"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Alias"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-mail adres"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Omhoog"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Omlaag"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Bewerken"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Legen"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Waarde"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Algemeen"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "User Attributes"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Bestand ziet er goed uit."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Bestand ziet er niet uit als een geldig adresboek."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Kon niet uit bestand lezen."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Adresboek bewerken"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Controleer bestand"
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Bestand"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Adresboek toevoegen"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "U moet wel een groepsnaam geven."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Groepsgegevens bewerken"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Groepsnaam"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adressen in groep"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " ->"
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <-"
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Beschikbare adressen"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"Verplaats e-mail adressen van en naar de nieuwe groep met de pijl-knoppen"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Groepsdetails bewerken"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Nieuwe groep toevoegen"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Map hernoemen"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Geef de nieuwe naam van de map:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nieuwe map"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Geef de naam van de nieuwe map:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Bestand ziet er niet uit als een JPilot bestand."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Selecteer JPilot bestand"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Bewerk JPilot veld"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr "Bladeren..."
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Extra e-mail adressen"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Voeg nieuw JPilot veld toe"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Verbinding met server tot stand gebracht"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Kon niet verbinden met de server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Bewerk LDAP server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hostnaam"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Poort"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Controleer server"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Zoekbasis"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Zoek criterium"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Opnieuw"
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind Wachtwoord"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (sec)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maximum aantal velden"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Algemeen"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Uitgebreid"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "LDAP server toevoegen"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Bewerk LDAP - Selecteer zoekbasis"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Beschikbare zoekbases"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Kon de zoekbasis niet inlezen vanaf de server - Kies alstublieft met de hand"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Bestand ziet er niet uit als een vCard bestand."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Selecteer vCard bestand"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Bewerk vCard veld"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Nieuw vCard veld toevoegen"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exporteren"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Geef doelmap en mbox bestand"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Bronmap:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Doelbestand:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "Selecteer..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Selecteer doelbestand"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "opslaan van de configuratie is mislukt\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Selecteer map"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Inbox"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Verzonden"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Wachtrij"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Prullenbak"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Klad"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NieuweMap"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "'%c' mag niet in de naam van een map."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "De map '%s' bestaat al."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Kan map '%s' niet aanmaken."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/_Nieuwe map maken..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/Map _hernoemen"
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/Map ver_wijderen"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Prullenbak leegmaken"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Nieuwe e-mail _ophalen"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Accountlijst _verversen"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Berichten _doorzoeken..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Geen ongelezen berichten."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/A_bonneren op een nieuwsgroep..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Nieuws_groep verwijderen"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Mapoverzicht wordt gemaakt...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nieuw"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Ongelezen"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Mapinfo wordt ingesteld...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Mapinfo wordt ingesteld..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Bezig met inlezen van map %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Bezig met inlezen van map %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Accountlijst verversen"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Accountlijst wordt ververst..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Accountlijst wordt ververst..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Accountlijsten worden ververst..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Bezig met controleren op nieuwe berichten in alle mappen..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Map %s is geselecteerd\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Bezig met verzenden van bericht"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Er is een fout opgetreden bij het versturen van het bericht naar %s."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Geef de naam van de map:\n"
+"(Als je een map wilt maken om daarin submappen te plaatsen,\n"
+"sluit de naam dan af met een '/')"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Geef een nieuwe naam voor '%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Hernoem map"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Alle mappen en berichten in '%s' zullen worden verwijderd.\n"
+"Wilt u werkelijk verwijderen?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Verwijder map"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Kan map '%s' niet verwijderen."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Prullenbak leegmaken"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Alle berichten uit de prullenbak weggooien?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Wilt u de '%s' mailbox werkelijk verwijderen?\n"
+"(De berichten zelf zullen NIET van de schijf worden verwijderd)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "mailbox verwijderen"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "IMAP4 account '%s' werkelijk verwijderen?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Verwijder IMAP4 account"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Nieuwsgroep '%s' werkelijk verwijderen?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Verwijder nieuwsgroep"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Nieuwsaccount '%s' werkelijk verwijderen?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Verwijder nieuwsaccount"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Abonneer op nieuwsgroep"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Selecteer nieuwsgroepen om op te abonneren."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Zoek groepen:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Zoek"
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nieuwsgroep naam"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Berichten"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Type"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Verversen"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "gemodereerd"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "alleen lezen"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "onbekend"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Kan geen nieuwsgroep opvragen."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Klaar."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d nieuwsgroepen ontvangen (%s ingelezen)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Nieuwsgroepen:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Onderwerp:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Header view wordt aangemaakt...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Geen afzender)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Geen onderwerp)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Plaatje wordt weergegeven...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Kan plaatje niet weergeven."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr ""
+"IMAP4 verbinding naar %s:%d is verbroken. Contact wordt opnieuw gelegd...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "IMAP4 verbinding naar %s:%d wordt opgezet...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Kan geen TLS sessie starten.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "kan verwijderde vlaggen: %d niet instellen\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "kan niet wissen\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "kan de vlaggen \"verwijderd\" : 1.%d niet instellen\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "kan map niet selecteren: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Markeerbestand is niet gevonden\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "er is een fout opgetreden tijdens het ophalen van de LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr ""
+"kan %s niet aanmaken\n"
+"\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "kan %s niet aanmaken onder INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "Ik kan geen mailbox maken: LIST mislukt\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "Ik kan geen mailbox maken\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "kan de mailbox niet hernoemen van %s naar %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "Ik kan de mailbox niet verwijderen\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "Ik kan de envelope niet verkrijgen\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Er is een fout opgetreden bij het verkrijgen van de envelope.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "Ik kan de envelope niet verwerken: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Kan niet verbinden met de IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Kan gaan sessie opzetten met de IMAP4 server: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "kan de NAMESPACE niet vinden\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "kan map niet selecteren: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Identificatiemethode"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 login mislukt.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "kan %s niet toevoegen aan %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(bestand wordt verzonden...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "kan bericht %s niet toevoegen\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "kan %d niet naar %s kopi谷ren\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "Fout tijdens IMAP opdracht: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "Fout tijdens IMAP opdracht: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "Fout tijdens IMAP opdracht: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv kan UTF-7 niet naar %s omzetten\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv kan %s niet naar UTF-7 omzetten\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importeren"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Specificeer mbox bestand (bron) en de doelmap."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Te importeren bestand:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Doelmap:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Selecteer het te importeren bestand"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+"Geef alstublieft de naam van het adresboek en het te importeren bestand."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Kies en hernoem LDIF veldnamen om te importeren."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Bestand ge誰mporteerd."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Selecteer een bestand."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "U moet wel een adresboek naam geven."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Fout bij lezen LDIF velden."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF bestand succesvol ge誰mporteerd."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Selecteer LDIF bestand"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Bestandsnaam"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF Veld"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Attribuutnaam"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Attribuut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Selecteer"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adresboek :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Bestandsnaam :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Kaarten :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importeer LDIF bestand in het adresboek"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Vorig"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Volgende"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Bestandsinfo"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Attributen"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Afronden"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Nieuwe berichten worden opgehaald"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Een ogenblik geduld alstublieft"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Afgebroken"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Bezig met ophalen"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Klaar (%d bericht(en) (%s) ontvangen)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Klaar (geen nieuwe bercihten)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Verbinding mislukt"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Identificatie mislukt"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Vergrendeld"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (sec)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Klaar (%d nieuwe bericht(en))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Klaar (geen nieuwe berichten)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Er is een fout opgetreden bij het ophalen van de e-mail."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "nieuwe berichten voor account %s worden opgehaald...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Nieuwe berichten worden opgehaald"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Verbinden met POP3 server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Kan niet verbinden met POP3 server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Bezig met identificatie..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Berichten worden van %s naar %s opgehaald...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Opvragen van het aantal nieuwe berichten (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Opvragen van het aantal nieuwe berichten (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Opvragen van het aantal nieuwe berichten (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Opvragen van de grootte van de nieuwe berichten (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Bezig met verwijderen van bericht %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Bezig met afsluiten"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Bericht wordt opgehaald (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Klaar (%d bericht(en) (%s) ontvangen)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Verbinding mislukt"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Fout bij het verwerken van de e-mail"
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Fout bij het verwerken van de e-mail"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "De ruimte op de schijf is op."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Het bestand is niet beschrijfbaar."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Socket-fout."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Mailbox is vergrendeld."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Mailbox is vergrendeld."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Identificatiemethode"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Identificatiemethode"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "E-mail verwerken geannuleerd\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Nieuwe berichten worden opgehaald van %s naar %s ...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Geef wachtwoord voor %s op %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Geef wachtwoord"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protocol-logboek"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Bestand '%s' bestaat al.\n"
+"Kan geen map aanmaken."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread is niet ondersteunt door glib\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG is niet goed ge誰nstalleerd of is te oud.\n"
+"OpenPGP ondersteuning wordt uitgeschakeld."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Gebruik: %s [OPTIES]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adres] open venster \"Bericht opstellen\""
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" -- attach bestand1 [bestand2]...\n"
+" venster 'bericht opstellen' openen met de\n"
+" gespacificeerde bestanden als bijvoegingen"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive haal nieuwe berichten op"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all Berichten ophalen van alle accounts"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send verstuur alle berichten uit de wachtrij"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status\t\t\ttotaal aantal berichten weergeven"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status\t\t\ttotaal aantal berichten weergeven"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug debug modus"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help geef deze hulp weer"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version\t\tgeef versie informatie en sluit af"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr ""
+"U bent een bericht aan het opstellen.\n"
+"Wilt u werkelijk het programma afsluiten?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Berichten zijn in de wachtrij gezet"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Er staan nog berichten in de wachtrij. Toch afsluiten?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "er draait al een Sylpheed.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Bestand/_Map"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Bestand/_Map/Nieuwe map aanmaken..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Bestand/_Map/Map _hernoemen..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Bestand/_Map/Map ver_wijderen"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Bestand/Mailbox toevoegen..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Bestand/Mailbox toevoegen..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Mailbox verwijderen"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Bestand/_Map"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/Nieuwe e-mail _ophalen"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Bestand/Nieuwe e-mail _ophalen"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/Accountlijst _verversen"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Bestand/Mbox bestand importeren..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Bestand/Mbox bestand _exporteren..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Bestand/Prullenbak _leegmaken"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Bestand/Opslaan _als..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Bestand/Af_drukken..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Bestand/Bijlage _invoegen"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Bestand/A_fsluiten"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/B_ewerken/_Discussie selecteren"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/Be_werken/_Huidig bericht doorzoeken..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/Be_werken/Berichten door_zoeken..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/B_eeld/_Tonen of Verbergen"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/B_eeld/_Tonen of Verbergen/_Accountlijst"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/B_eeld/_Tonen of Verbergen/_Bericht"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/B_eeld/_Tonen of Verbergen/_Werkbalk"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/B_eeld/_Tonen of Verbergen/_Werkbalk/Afbeelding _en tekst"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/B_eeld/_Tonen of Verbergen/_Werkbalk/_Afbeelding"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/B_eeld/_Tonen of Verbergen/_Werkbalk/_Tekst"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/B_eeld/_Tonen of Verbergen/_Werkbalk/_Niet weergeven"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/B_eeld/_Tonen of Verbergen/Status_balk"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/B_eeld/Acc_ountlijst los"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/B_eeld/_Bericht los"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/B_eeld/_Sorteren"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/B_eeld/_Sorteren/Op _nummer"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/B_eeld/_Sorteren/Op _grootte"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/B_eeld/_Sorteren/Op _datum"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/B_eeld/_Sorteren/Op _afzender"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/B_eeld/_Sorteren/Op _ontvanger"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/B_eeld/_Sorteren/Op _onderwerp"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/B_eeld/_Sorteren/Op _kleurlabel"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/B_eeld/_Sorteren/Op _markering"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/B_eeld/_Sorteren/Op on_gelezen"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/B_eeld/_Sorteren/Op _bijvoeging"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/B_eeld/_Sorteren/_Ongesorteerd"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/B_eeld/_Sorteren/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/B_eeld/_Sorteren/Oplopend"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/B_eeld/_Sorteren/Aflopend"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/B_eeld/_Sorteren/Aantrekken op onderwerp"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/B_eeld/Ge_nest"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/B_eeld/Discussies _uitklappen"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/B_eeld/Discussies _inklappen"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/B_eeld/Beeld_item instellen..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/B_eeld/_Ga naar"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/B_eeld/_Ga naar/_Vorige bericht"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/B_eeld/_Ga naar/Vo_lgende bericht"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/B_eeld/_Ga naar/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/B_eeld/_Ga naar/Vo_rige ongelezen bericht"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/B_eeld/_Ga naar/Volgende on_gelezen bericht"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/B_eeld/_Ga naar/_Vorige nieuwe bericht"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/B_eeld/_Ga naar/Vo_lgende nieuwe bericht"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/B_eeld/_Ga naar/Vorige ge_markeerd bericht"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/B_eeld/_Ga naar/Volgende gem_arkeerd bericht"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/B_eeld/_Ga naar/Vorige gela_beld bericht"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/B_eeld/_Ga naar/Volgende gelab_eld bericht"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/B_eeld/_Ga naar/Andere _map..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/B_eeld/Codering/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/B_eeld/Codering"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/B_eeld/Codering/Automatisch"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/B_eeld/Codering/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/B_eeld/Codering/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/B_eeld/Codering/Westeuropees (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/B_eeld/_Codering/Westeuropees (ISO-8859-_1)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/B_eeld/_Codering/Centraaleuropees (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/B_eeld/_Codering/Baltisch (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/B_eeld/_Codering/Baltisch (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/B_eeld/_Codering/Grieks (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/B_eeld/_Codering/Turks (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/B_eeld/_Codering/Cyrillisch (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/B_eeld/_Codering/Cyrillisch (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/B_eeld/_Codering/Cyrillisch (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/B_eeld/_Codering/Cyrillisch (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/B_eeld/_Codering/Japans (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/B_eeld/_Codering/Japans (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/B_eeld/_Codering/Japans (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/B_eeld/_Codering/Japans (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/B_eeld/_Codering/Simpel Chinees (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/B_eeld/_Codering/Traditioneel Chinees (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/B_eeld/_Codering/Traditioneel Chinees (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/B_eeld/_Codering/Chinees (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/B_eeld/_Codering/Koreaans (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/B_eeld/_Codering/Koreaans (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/B_eeld/_Codering/Thais (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/B_eeld/_Codering/Thais (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/B_eeld/Open in _nieuw venster"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/B_eeld/Bekijk _broncode"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/B_eeld/Vo_lledige header"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/B_eeld/_Verversen"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/Be_richt"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/Be_richt/Bewerken"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/Be_richt/_Alle e-mail ophalen"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/Be_richt/_Alle e-mail ophalen"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/Be_richt/Ontvangen af_breken"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/Be_richt/Bewerken"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/Be_richt/Berichten uit wachtrij verzenden"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/Be_richt/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/Be_richt/_Nieuw bericht opstellen"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/Be_richt/_Beantwoorden"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/Be_richt/Antwoord _sturen aan"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/Be_richt/Antwoord _sturen aan/_iedereen"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/Be_richt/Antwoord _sturen aan/_afzender"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/Be_richt/Antwoord _sturen aan/_mailinglijst"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/Be_richt/_Doorsturen"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/Be_richt/Doorsturen als bij_voeging"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/Be_richt/Om_leiden"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/Be_richt/_Verplaatsen..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/Be_richt/_Kopi谷ren..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/Be_richt/Ver_wijderen"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/Be_richt/_Markeren"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/Be_richt/_Markeren/_Markeren"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/Be_richt/_Markeren/_Demarkeren"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/Be_richt/_Markeren/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/Be_richt/_Markeren/Als _ongelezen"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/Be_richt/_Markeren/Als _gelezen"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/Be_richt/_Markeren/_Alles gelezen"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/Be_richt/Bewerken"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Gereedschap/Af_zender toevoegen aan adresboek"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Gereedschap/Berichten _filteren"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Gereedschap/Berichten _filteren"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Gereedschap/Filterregel _aanmaken"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Gereedschap/_Cre谷er Filterregel/_Automatisch"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Gereedschap/_Cre谷er filterregel/voor A_fzender"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Gereedschap/_Cre谷er filterregel/voor _Geadresseerde"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Gereedschap/_Cre谷er filterregel/voor _Onderwerp"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Gereedschap/Du_bbele berichten verwijderen"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Gereedschap/_Uitvoeren"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Gereedschap/_Logboek"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Instellingen"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Instellingen/Algemene voorkeuren..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Instellingen/_Filterbeheer..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Instellingen/_Sjabloonbeheer..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Instellingen/A_cties..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Instellingen/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Instellingen/Accountvoorkeuren..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Instellingen/Nieuw account aanmaken..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Instellingen/Accountbeheer..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Instellingen/Huidig account veranderen"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Hulp/_Handboek"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Hulp/_Handboek/_Engels"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Hulp/_Handboek/_Japans"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Hulp/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Hulp/_FAQ/_Engels"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Hulp/_FAQ/_Duits"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Hulp/_FAQ/_Spaans"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Hulp/_FAQ/_Frans"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Hulp/_FAQ/_Italiaans"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Hulp/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Hoofdvenster wordt aangemaakt...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "HoofdVenster: kleur %d kon niet gealloceerd worden\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "klaar.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Geen titel"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "niets"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Vensterscheidingstype wordt gewijzigd van %d naar %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Prullenbak leegmaken"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Alle berichten uit de prullenbak weggooien?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Mailbox toevoegen"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Geef de lokatie van de mailbox.\n"
+"Als een bestaande mailbox wordt ingevuld,\n"
+"dan wordt hij automatisch gescand."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "De mailbox '%s' bestaat al."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"De mailbox kon niet aangemaakt worden.\n"
+"Misschien bestaan er al wat bestanden, of heb je geen toestemming om er te "
+"schrijven."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Mappenoverzicht"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Berichtenoverzicht"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Antwoord"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Bericht naar iedereen terugsturen."
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Ant_woord sturen aan/_afzender"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Ant_woord sturen aan/_mailinglijst"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/D_oorsturen"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Doorsturen als _bijvoeging"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/_Omleiden"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Ophalen"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "E-mail ophalen en in de lijst zetten."
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Alles oph."
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "E-mail van alle accounts ophalen en in de lijsten zetten"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Verzend berichten uit de wachtrij"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Opstellen"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Nieuw bericht opstellen"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Antwoord"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Stuur een bericht terug naar de afzender"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Iedereen"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Bericht naar iedereen terugsturen."
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Doorsturen"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Stuur dit bericht door"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Verwijder dit bericht"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Uitvoeren"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Voer de gemarkeerde acties uit"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Volgende ongelezen"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Voork."
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Algemene voorkeuren"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Account"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Accountinstellingen"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Afsluiten"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Sylpheed afsluiten?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "kan niet naar tijdelijk bestand schrijven\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Berichten worden van %s naar %s opgehaald...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "kan mbox bestand niet inlezen.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "mbox formaat is onjuist: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "onjuist formaat in mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "kan tijdelijk bestand niet openen\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Afzender zonder escapecodes gevonden:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d berichten gevonden\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "kan lock-bestand niet aanmaken: %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "gebruik 'flock' in plaats van 'file' waar mogelijk\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "kan %s niet aanmaken\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "mailbox wordt vastgehouden door een ander proces. we wachten even...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "kan %s niet locken\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "ongeldig locktype\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "kan de lock niet verwijderen van %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "kan de mailbox niet inkorten tot 0.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Berichten worden ge谷xporteerd van %s naar %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Zoek in huidig bericht"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Zoek naar:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Hoofdlettergevoelig"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Achteruit zoeken"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Zoek"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Zoeken mislukt"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Opgegeven tekst niet gevonden"
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Begin van het bericht bereikt; verdergaan vanaf het einde?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Einde van het bericht bereikt; verdergaan vanaf het begin?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Zoeken voltooid"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Berichtview wordt gemaakt...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Opslaan als"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Overschrijven"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Bestaand bestand overschrijven?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Kan het bestand '%s' niet opslaan."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Afdrukken"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Geef de afdrukopdracht:\n"
+"('%s' zal vervangen worden door de bestandsnaam)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Afdrukopdracht is ongeldig:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "kan bericht niet kopi谷ren van %s naar %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "kan het bestand met markeringen niet openen\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "de bronmap is hetzelfde als de doelmap.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Bericht %s%c%d wordt gekopieerd naar %s...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Laatste nummer in map %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/Openen"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Open met..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Als tekst weergeven"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Opslaan als..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Verifieer handtekening"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "MIME view wordt aangemaakt...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME type"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Bijvoegingen"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Selecteer \"Verifieer handtekening\" om te controleren"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Kan het deel van een meerdelig bericht niet opslaan."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Open met"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Geef de opdracht om het bestand mee te openen:\n"
+"('%s' zal vervangen worden door de bestandsnaam)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIMEviewer commandoregel is ongeldig: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "verbinding met nieuwsserver (NNTP) %s%d wordt opgezet...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr ""
+"De NNTP-verbinding met %s:%d is verbroken. Opnieuw contact aan het "
+"leggen...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "artikel %d is al gebufferd.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "artikel %d wordt opgehaald...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "kan artikel %d niet lezen\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "kan nieuwgroepenlijst niet ophalen\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "kan het ertikel niet versturen.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "kan het artikel %d niet ophalen\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "kan groep %s niet selecteren\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "ongeldig artikelbereik: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "geen nieuwe artikelen.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "xover %d - %d uit %s wordt opgehaald...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "Kan xover niet ophalen\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "er is een fout opgetreden tijdens het ophalen van de xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "Ongeldige xover regel: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "Kan xhdr niet ophalen\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "er is een fout opgetreden tijdens het ophalen van de xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Kan niet verbinden met de NNTP-server: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protocolfout: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protocolfout\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Er is een fout opgetreden bij het versturen\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Fout bij het verwerken van de e-mail"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Wachtwoord"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[geen gebruikersnaam]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sGeef alstublieft het wachtwoord voor:\n"
+"\n"
+" %.*s\n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr "Slecht wachtwoord! Probeer opnieuw...\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Er is geen APOP timestamp gevonden in de begroeting\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "APOP Timestamp in de begroeting is ongeldig\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protocolfout\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "Ongeldige xover regel: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Bezig met verwijderen van verlopen bericht %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Bericht %d wordt overgeslagen (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "e-mailpostbux is vergrendeld\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "Kan TLS sessie niet starten\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "er is een fout opgetreden tijdens de identificatie\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Opdracht"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "er is een fout opgetreden tijdens de identificatie\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Bezig met inlezen van configuratie...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "%s gevonden\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Klaar met inlezen van de configuratie.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Configuratie is opgeslagen.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Toepassen"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Venster accountvoorkeuren wordt geopend...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Account%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Voorkeuren voor nieuw account"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Accountvoorkeuren"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Venster accountvoorkeuren wordt geopend...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Ontvangen"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacy"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Naam van dit account"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Instellen als standaard"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Persoonlijke informatie"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Volledige naam"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-mail adres"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organisatie"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Serverinformatie"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Nieuws (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Niets (lokaal)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Deze server vereist authentificatie"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Nieuwsserver"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server om van te ontvangen"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP server (om te verzenden)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Gebruikersnaam"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Deze server vereist authentificatie"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Verwijder berichten op de server wanneer ze worden opgehaald"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Verwijderen na"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dagen"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dagen: direct verwijderen)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Haal alle berichten op van server"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Limiet ontvangstgrootte"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filter de berichten bij het ophalen"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Standaard inbox"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Ongefilterde berichten zullen hier opgeslagen worden)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Identificatiemethode"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "'Alles ophalen' haalt de e-mail voor dit account op"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Header"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Datum veld toevoegen aan header"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Bericht-ID aanmaken"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Voeg een door de gebruiker gespecificeerde header toe"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "Bewerken"
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Identificatie"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP identificatie (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Als u deze ingangen niet invult, zal hetzelfde\n"
+"naam/wachtwoord-paar gebruikt worden als\n"
+"voor het ontvangen."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Identificatie met POP3 voor het verzenden"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Opdracht"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Stel automatisch de volgende adressen in"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Antwoorden naar"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Standaard het bericht coderen"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Standaard een identificatiehandtekening toevoegen"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "ASCII-versterkt formaat gebruiken voor codering"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Teksthandtekening gebruiken"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Signeersleutel"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Gebruik standaard GnuPG sleutel"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Selecteer sleutel naar e-mail adres"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Specificeer sleutel zelf"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Gebruikers- of sleutel-ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Geen SSL gebruiken"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "SSL gebruiken voor POP3 verbinding"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Het STARTTLS commando gebruiken om een SSL sessie te starten"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "SSL gebruiken voor IMAP verbinding"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "SSL gebruiken voor NNTP verbinding"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Verzenden (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SSL gebruiken voor SMTP verbinding"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTP poort"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3 poort"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4 poort"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "SMTP poort"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Specificeer domeinnaam"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP server-map"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Verzonden berichten opslaan in"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Kladberichten opslaan in"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Verwijderde berichten opslaan in"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Accountnaam is niet ingevuld."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "E-mail adres is niet ingevoerd."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP server is niet ingevoerd."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Gebruikersnaam is niet ingevoerd."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 server is niet ingevoerd."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 server is niet ingevoerd."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP server is niet ingevoerd."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Het wordt afgeraden om de oude stijl van ASCII-versterkte\n"
+"codering te gebruiken. Het voldoet niet aan de RFC 3156\n"
+"- MIME-beveiligingsregels als u OpenPGP gebruikt."
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Bezig met wegschrijven van configuratie van acties...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Menunaam:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Opdrachtregel:"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Menunamen:\n"
+" Gebruik / in menunaam om submenu's te maken.\n"
+"Opdrachtregel:\n"
+" Begin met:\n"
+" | om berichtinhoud of selectie naar opdracht te sturen\n"
+" > om door gebruiker gegeven tekst naar opdracht te sturen\n"
+" * om door gebruiker gegeven verborgen tekst naar opdracht te sturen\n"
+" Eindig op:\n"
+" | om berichtinhoud te vervangen met opdrachtuitvoer\n"
+" & om opdracht asynchroon uit te voeren\n"
+" Gebruik %f voor bestandsnaam van bericht\n"
+" %F voor de lijst van bestandsnamen van geselecteerde berichten\n"
+" %p voor het geselecteerde deel van het bericht."
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Vervangen"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Syntaxhulp"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Ingestelde acties"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(nieuw)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Menunaam is niet ingesteld."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Een dubbele punt is niet toegestaan in een menunaam."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Menunaam is te lang."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Opdrachtregel is niet ingesteld."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Menunaam en opdrachtregel zijn te lang."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"De opdracht\n"
+"%s\n"
+"bevat een syntaxfout."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Actie verwijderen"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Wilt u werkelijk deze actie verwijderen?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Venster algemene voorkeuren wordt aangemaakt...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Algemene voorkeuren"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citaat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Beeld"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Bericht"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Diversen"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Extern programma"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Extern programma gebruiken voor verwerking van de e-mail"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Opdracht"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokale e-mail spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Lokale e-mail beheren"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filteren bij het ophalen"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Kijk "
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "iedere"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuten of er nieuwe e-mail is."
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Kijk bij opstarten of er nieuwe e-mail is"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Ververs alle lokale mappen na de verwerking"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Nieuws"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximum aantal te downloaden artikelen\n"
+"(0 = alles)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Extern programma gebruiken voor het verzenden"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Verzonden berichten opslaan in de outbox"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Codering voor uitgaande berichten"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatisch (aanbevolen)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Westeuropees (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Westeuropees (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Centraaleuropees (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltisch (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltisch (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grieks (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turks (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillisch (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillisch (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillisch (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrillisch (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japans (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japans (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japans (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Vereenvoudigd Chinees (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditioneel Chinees (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditioneel Chinees (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chinees (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Koreaans (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thais (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thais (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Als 'Automatisch' is geselecteerd, wordt de meest\n"
+"optimale codering voor de huidige locale gebruikt."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Berichtcodering"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Geef de Content-Transfer-Encoding die gebruikt wordt om\n"
+"het bericht te coderen wanneer deze non-ASCII tekens bevat."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Handtekening scheidingsteken"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Automatisch invoegen"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automatisch extern programma starten voor bewerken van e-mail bericht"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "niveau van ongedaan maken"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Regelterugloop na:"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "tekens"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Regelterugloop gebruiken bij citeren"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Regelterugloop tijdens invoer"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Regelterugloop activeren bij het verzenden"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Account automatisch selecteren voor beantwoorden"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Originele bericht citeren bij beantwoorden"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Antwoorden roept de functie 'Mailinglijst beantwoorden' aan"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Antwoordopmaak"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Citeerteken"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Doorstuuropmaak"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Beschrijving der symbolen"
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Lettertype"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Headervelden vertalen (zoals 'From:', 'Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Aantal ongelezen berichten weergeven naast mapnaam"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Nieuwsgroepen inkorten die langer zijn dan"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "brieven"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Berichtenlijst"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr ""
+"Ontvanger weergeven in 'Afzender' kolom wanneer u zelf de afzender bent"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Discussies uitklappen"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Datumopmaak"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "Kies kolommen voor berichtenlijst..."
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Kleurmarkering in berichten aanzetten"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Multi-byte tekens weergeven als ASCII tekens\n"
+"(alleen Japans)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Headerinformatie weergeven boven bericht"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Korte headerinformatie weergeven boven bericht"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Regelafstand"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Ruimte overlaten aan de bovenkant"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Schuiven"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Halve pagina"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Vloeiend schuiven"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Stap"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Bijgevoegde afbeeldingen schalen"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Controleer identificatiehandtekeningen automatisch"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Geef het resultaat van de controle weer in een popupvenster"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Wachtwoord tijdelijk in geheugen opslaan"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Verloopt na"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuten"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Instellen op '0' zal het wachtwoord tot het\n"
+" einde bam de sessie opslaan)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Toetsenbord vasthouden tijdens het intikken van het wachtwoord"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Waarschuw mij wanneer GnuPG bij het opstarten niet werkt"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "Geen berichtsbestand geselecteerd."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Het eerste ongelezen e-mailtje openen wanneer een map geopend wordt"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+"Bericht alleen als gelezen markeren wanneer het geopend is in een nieuw "
+"venster"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Ga naar de inbox na het ophalen van nieuwe e-mail"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Meteen uitvoeren wanneer een bericht verplaatst of verwijderd wordt"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Berichten worden gemarkeerd voor deze acties\n"
+"wanneer dit uitgeschakeld is)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Ontvangstvenster"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Ontvangstvenster weergeven"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Altijd"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nooit"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Geen foutmelding geven bij ontvangstfout"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Ontvangstvenster sluiten wanneer het klaar is."
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Sneltoetsen instellen..."
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Externe opdrachten (%s is het bestand / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Webbrowser"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Adres toevoegen aan 'Geadresseerden' bij dubbelklikken"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Afsluiten"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Bevestigen bij het afsluiten"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Prullenbak leegmaken bij het afsluiten"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Bevestigen bij het legen"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Waarschuw wanneer er berichten in de wachtrij staan"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "afgekorte dag van de week"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "volledige dag van de week"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "afgekorte naam van de maand"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "volledig naam van de maand"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "de voorkeurs datum en tijd voor de huidige locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "eeuwnummer (jaar/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dag van de maand als decimaal nummer"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "het uur als decimaal nummer op een 24 uurs klok"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "het uur als decimaal nummer op een 12-uurs klok"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dag van het jaar als decimaal nummer"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "de maand als decimaal nummer"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "de minuut als decimaal nummer"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM of PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "de seconde als decimaal nummer"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "de dag van de week als decimaal nummer"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "de voorkeursdatum voor de huidige locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "de laatste twee cijfers van het jaartal"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "het jaartal als decimaal nummer"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "de tijdzone of naam of afkorting"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Selecteer"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Beschrijving"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Voorbeeld"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Berichtkleuren instellen"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Kleuren"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Geciteerde tekst - eerste niveau"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Geciteerde tekst - tweede niveau"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Geciteerde tekst - derde niveau"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI link"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Gebruikte kleuren opnieuw gebruiken"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Selecteer kleur voor niveau 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Selecteer kleur voor niveau 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Selecteer kleur voor niveau 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Selecteer kleur voor URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Beschrijving der symbolen"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Afzender\n"
+"Volledige naam van de afzender\n"
+"Voornaam van de afzender\n"
+"Initiaal van de afzender\n"
+"Onderwerp\n"
+"Aan\n"
+"Cc\n"
+"Nieuwsgroepen\n"
+"Bericht-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Als x ingesteld is, expr weergeven"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Berichtinhoud\n"
+"Geciteerde berichtinhoud\n"
+"Berichtinhoud zonder handtekening\n"
+"Geciteerde berichtinhoud zonder handtekening\n"
+"Letterlijk %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Letterlijke backslash\n"
+"Letterlijk vraagteken\n"
+"Letterlijk haakje openen\n"
+"Letterlijk haakje sluiten"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Lettertype"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Sneltoetsen"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Kies de vooringestelde sneltoetsbindingen.\n"
+"U kunt ook de sneltoetsen van de menu's aanpassen door\n"
+"op de gewenste toetscombinatie te drukken wanneer de\n"
+"muis boven het menu item zweeft."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Standaard"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Oude Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Header aanpassen"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Header handmatig instellen"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Headernaam is niet ingesteld."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Verwijder header"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Wil je deze header werkelijk verwijderen?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Headerweergave instellingenvenster wordt aangemaakt...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Headerweergave instellingen"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Header naam"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Weergegeven headers"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Verborgen headers"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Alle ongespecificeerde headers weergeven"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Bezig met inlezen van headerweergaveconfiguratie...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Configuratie voor headerweergave wordt opgeslagen...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Deze header staat al in de lijst."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filterbeheer"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Aan:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Kopieer..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Verwijder deze regel"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Wil je deze regel werkelijk verwijderen?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Verwijder deze regel"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Verborgen headers"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Header"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Bericht"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "bevat"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "bevat geen"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Omlaag"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Kopieer..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ontvangst weigeren"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Verwijder map"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Opmerkingen"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Berichtkleuren instellen"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Markeren/Als _gelezen"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Doorsturen als _bijvoeging"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/_Omleiden"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Uitvoeren"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Accounts"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adres"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Header"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Header"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Header"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Ontvanger is niet gespecificeerd."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Opdrachtregel is niet ingesteld."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Er is geen map gekozen om het heen te verplaatsen."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Opdrachtregel is niet ingesteld."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: bestand bestaat niet\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Mapeigenschappen"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Algemeen"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normaal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+"Geen [...] of (...) weergeven aan het begin van het onderwerp in de "
+"berichtenlijst"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+"[...] of (...) verwijderen aan het begin van het onderwerp bij beantwoorden"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Toepassen op submappen"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "ook gebruiken bij beantwoorden"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Antwoord-Aan:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Gemarkeerd"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Bijvoeging"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Onderwerp"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Afzender"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nummer"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Venster samenvattingskolom instellen wordt aangemaakt...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Samenvattingsweergave instellen"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Selecteer weer te geven items voor in het samenvattingsvenster.\n"
+"U kunt de volgorde veranderen door op de knoppen Omhoog en Omlaag\n"
+"te klikken, of door de items te slepen."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Beschikbare items"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " ->"
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <-"
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Weergegeven items"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Standaard herstellen"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Sjabloonnaam:"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Toevoegen"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Vervangen"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr "Beschrijving der symbolen"
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Gebruikte sjablonen"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Sjabloonbeheer"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Sjabloon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Sjabloon opmaakfout."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Verwijder sjabloon"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Wil je dit sjabloon werkelijk verwijderen?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Codeconversie mislukt\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "kan het bestand met markeringen niet openen\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "kan bericht %d niet ophalen\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Verzenden van bericht %d uit de wachtrij is mislukt.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Opdracht voor het afdrukken in onjuist: '%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Voortgangsdialoogvenster wordt gemaakt...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "er is een fout opgetreden bij het ontvangen van de gegevens.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Het bestand is niet beschrijfbaar.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oeps: Handtekening is niet geverifieerd"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Geen hadtekening gevonden"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Correcte handtekening"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "FOUTIEVE handtekening"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Geen publieke key om de handtekening te verifi谷ren"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Er is een fout opgetreden bij het controleren van de handtekening"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Verschillende resultaten voor handtekeningen"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Fout: Onbekende status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Goedgekeurde handtekening van \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "SLECHTE handtekening van \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Kan gebruikers-ID niet vinden voor deze sleutel."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr "\t\talias \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Handtekening gemaakt op %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Sleutel vingerafdruk: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Selecteer sleutel voor '%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Info wordt verzameld voor '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Selecteer keys"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Sleutel ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Waarde"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Sleutel toevoegen"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Geef een ander gebruikers- of sleutel-ID"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "De header van het bericht in de wachtrij is kapot.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Bezig met maken van verbinding"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Bezig met verbinden met SMTP server: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Bezig met sturen van HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Bezig met identificatie"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Bezig met verzenden van bericht"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Bezig met sturen van EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Bezig met verzenden van MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Bezig met verzenden"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Bezig met verzenden van RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Bezig met verzenden van DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Bezig met afsluiten..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Bezig met verzenden van bericht (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Bezig met verzenden van bericht"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Er is een fout opgetreden bij het verzenden."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Er is een fout opgetreden bij het verzenden."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Mailboxinstellingen"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"U zult eerst de lokatie van de mailbox moeten geven.\n"
+"U kunt een bestaande mailbox in MH formaat gebruiken.\n"
+"Als u twijfelt, dan kunt u het beste gewoon op OK klikken."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Bezig met verifi谷ren handtekening"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s van \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH niet beschikbaar\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "er is een fout opgetreden tijdens de identificatie\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Bronvenster wordt aangemaakt...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Broncode van het bericht"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Bron wordt weergegeven voor %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Broncode"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 niet beschikbaar\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSL v23 beschikbaar\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 niet beschikbaar\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 beschikbaar\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL methode niet beschikbaar\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Onbekende SSL methode * PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Fout bij het maken van de ssl context\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL verbinding mislukt (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL verbinding met %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Server certificaat:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Onderwerp: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Uitgever: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Berichten doorzoeken"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Stel automatisch de volgende adressen in"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Inhoud:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Selecteer alle gevonden resultaten"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Begin van de lijst bereikt; verdergaan vanaf het einde?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Einde van de lijst bereikt; verdergaan vanaf het begin?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Ant_woord sturen aan"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Ant_woord sturen aan/_iedereen"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Ant_woord sturen aan/_afzender"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Ant_woord sturen aan/_mailinglijst"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Verplaats..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopieer..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Markeren"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Markeren/_Markeren"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Markeren/D_emarkeren"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Markeren/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Markeren/Als _ongelezen"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Markeren/Als _gelezen"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Markeren/_Alles als gelezen"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Kle_urlabel"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Be_werken"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Afz_ender toevoegen aan adresboek"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/B_eeld/Bekijk broncode"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/B_eeld/Vo_lledige header"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Afdrukken..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "O"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nr."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Venster Berichtenlijst wordt aangemaakt...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Verwerk markering"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Sommige markeringen zijn nog aanwezig. Verwerken?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Bezig met inlezen van map (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Geen ongelezen berichten meer"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Geen ongelezen berichten gevonden. Doorgaan naar de volgende map?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Geen ongelezen berichten."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Geen ongelezen berichten gevonden. Doorgaan naar de volgende map?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Opnieuw zoeken"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Geen nieuwe berichten meer"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Geen nieuw bericht gevonden. Zoeken vanaf het einde?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Geen nieuwe berichten."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Geen nieuwe berichten gevonden. Doorgaan naar de volgende map?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Geen gemarkeerde berichten meer"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Geen gemarkeerd bericht gevonden. Zoeken vanaf het einde?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Geen gemarkeerde berichten."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Geen gemarkeerd bericht gevonden. Zoeken vanaf het begin?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Geen gelabelde berichten meer"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Geen gelabeld bericht gevonden. Zoeken vanaf het einde?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Geen gelabelde berichten."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Geen gelablede berichten gevonden. Zoeken vanaf het begin?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Berichten worden aangetrokken op onderwerp..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d verwijderd"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d verplaatst"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ","
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d gekopieerd"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr "item(s) geselecteerd"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "nieuw: %d, ongelezen:%d, totaal: %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "nieuw: %d, ongelezen:%d, totaal: %d"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Lijst wordt gesorteerd..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t"
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Samenvatting wordt ingesteld van berichtinformatie..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Samenvattingbuffer wordt weggeschreven (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Geen datum)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Bericht %d is gemarkeerd\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Bericht %d is gemarkeerd als 'wordt gelezen'.\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Bericht %d is gemarkeerd als ongelezen\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Bericht %s/%d staat klaar om verwijderd te worden\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Verwijder bericht(en)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr ""
+"Wilt u dit bericht / deze berichten werkelijk verwijderen uit de prullenbak?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Bezig met verwijderen van dubbele berichten..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Bericht %s/%d is gedemarkeerd\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Bericht %d staat klaar om verplaatst te worden naar %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Doel is gelijk aan de huidige map."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Bericht %d staat klaar om gekopieerd te worden naar %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Doel is gelijk aan de huidige map."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Alle berichten worden geselecteerd..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Fout bij het verwerken van de e-mail"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Discussies worden bij elkaar gevoegd..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Discussies worden uit elkaar gehaald..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Discussies worden uit elkaar gehaald voor de uitvoering..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "Bezig met filteren..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Bezig met filteren..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "bericht %d is reeds gebufferd.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "bestand %s bestaat al\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Tekstvenster wordt aangemaakt...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "een bericht wordt niet ontvangen\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Om dit deel te bewaren, kunt u met de rechter muisknop het "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "contextmenu oproepen en de optie 'Opslaan als...' selecteren,"
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr "of druk op de 'y'-toets.\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Om dit gedeelte weer te geven als een tekstbericht"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"selecteert u de optie 'Als tekst weergeven', of druk op de 't'-toets.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Om dit deel te openen met een extern programma selecteert u "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "de optie 'Openen' of 'Openen met...',"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "of dubbelklik, of klik met de middelste muisknop,"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "of druk op de 'l'-toets."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Deze handtekening is nog niet gecontroleerd.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr ""
+"Om te controleren kunt u met de rechter muisknop het contextmenu oproepen\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "en de optie'Controleer handtekening' selecteren.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "schrijven naar %s is mislukt.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Kan bestand niet openen %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normaal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP identificatie)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_Mailbox verwijderen"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/_IMAP4 account verwijderen"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/_Nieuwsaccount verwijderen"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/Be_richt/_Verzenden"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/Be_richt/Si_gneer"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "geen berichten in de lokale mailbox\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Map voor de lokale mail"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "Selecteer..."
+
+#~ msgid "Condition"
+#~ msgstr "Voorwaarde"
+
+#~ msgid "Keyword"
+#~ msgstr "Sleutelwoord"
+
+#~ msgid "Destination"
+#~ msgstr "Doel"
+
+#~ msgid "Use regex"
+#~ msgstr "Gebruik regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "Gebruikte filters"
+
+#~ msgid "(none)"
+#~ msgstr "(niets)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Ingang niet opgeslagen"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "De ingang is niet opgeslagen. Toch sluiten?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Open URI opdrachtregel is onjuist: '%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Buffergegevens zijn corrupt\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/F_ilterregel aanmaken"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/F_ilterregel aanmaken/_Automatisch"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/F_ilterregel aanmaken/op _Afzender"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/F_ilterregel aanmaken/op _Geadresseerde"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/F_ilterregel aanmaken/op _Onderwerp"
+
+#~ msgid "Queueing"
+#~ msgstr "Wordt in de wachtrij geplaatst"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Er is een fout opgetreden bij het verzenden.\n"
+#~ "Wilt u het bericht in de wachtrij plaatsen?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Berichten die niet verzonden konden worden in de wachtrij zetten"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Uitvoeren"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Selecteer alles"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Selecteer _discussie"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "kan groep niet instellen: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "een bericht wordt niet ontvangen\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/Be_richt/E-mail _ophalen"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tGeen bufferbestand\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tLijstbuffer wordt gelezen..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Bufferversie komt niet overeen. De buffer wordt genegeerd.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Markeerbestand is niet gevonden\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr ""
+#~ "Markeerversie is anders (%d != %d). Het markeerbestand wordt genegeerd.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Kan markeerbestand niet openen in de 'append-modus'\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Kan het markeerbestand niet openen om te schrijven\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "kan lock-bestand niet aanmaken: %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr "lege map\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Alleen wanneer actief"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Alle eerdere instellingen voor alle mappen zullen verloren gaan.\n"
+#~ "Wilt u doorgaan?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "Vensterpositie: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Widgets worden aangemaakt..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Bericht %s%c%d wordt verplaatst naar %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tBerichten worden gemarkeerd..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d nieuwe berichten\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "Ik kan de mailbox %s niet selecteren\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "bericht %d wordt opgehaald...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Bezig met verwijderen van gebufferde berichten %u - %u ..."
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Alle gebufferde berichten worden verwijderd..."
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Het aantal berichten wordt geteld...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Kon berichtbestand niet verkrijgen."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr ""
+#~ "Bericht openen wanneer de pijltjestoetsen worden gebruikt op de "
+#~ "berichtenlijst"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Fout bij het verwerken van de e-mail"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr ""
+#~ "Er is een fout opgetreden bij het verzenden van de berichten uit de "
+#~ "wachtrij."
+
+#~ msgid "No message part selected."
+#~ msgstr "Geen berichtdeel geselecteerd."
+
+#~ msgid "Predicate"
+#~ msgstr "Predikaat"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Venster Acties-instellingen wordt aangemaakt...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Acties-instellingen"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Bezig met inlezen van configuratie van acties...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Actie opdrachtfout\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Kind en kleinkind worden gestart.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Kind: Wachtend op kleinkind\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Kind: kleinkind is klaar\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Kind met groeps-id %d wordt be谷indigd\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Kinderdata wordt vrijgemaakt: %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Bezig met verversen van invoer/uitvoer-venster 'Acties'\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Kind retourneerde %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Bezig met versturen van invoer naar kleinkind\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Invoer is verzonden naar kleinkind.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Bezig met opvangen van uitvoer van kleinkind.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Socketfout\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Account is niet gevonden. Huidig account wordt gebruikt...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Account is niet gevonden.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Kon het externe programma niet aanroepen: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH mislukt\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Er is een fout opgetreden bij het verzenden van QUIT\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Kan geen contact krijgen met de SMTP server: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL verbinding mislukt"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Er is een fout opgetreden bij verbinden met %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Er is een fout opgetreden bij het verzenden van HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Er is een fout opgetreden bij het verzenden van STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Er is een fout opgetreden bij het verzenden van EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Bestand met handtekening"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 00000000..171ac3b2
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,6285 @@
+# Polish translation of Sylpheed
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Przemyslaw Sulek <psulek@plo.pl> <pbs@linux.net.pl> <pc2000@poczta.onet.pl>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed 0.9.9 \n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-12-26 11:25+0200\n"
+"Last-Translator: Przemysaw Suek <pbs@linux.net.pl>\n"
+"Language-Team: POLISH <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O programie"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME jest zastrzeone przez Wernera Kocha <dd9jn@gnu.org> w 2001 r.\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Niniejszy program jest wolnodostpnym oprogramowaniem; mona go \n"
+"rozpowszechnia i/lub modyfikowa na warunkach Powszechnej\n"
+"Licencji Publicznej GNU, wydanej przez Fundacj Wolnego Oprogramowania\n"
+"- wedug wersji 2-giej tej Licencji lub dowolnej p鷦niejszej.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Niniejszy program rozpowszechniany jest z nadziej, i bdzie on \n"
+"uyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domylnej \n"
+"gwarancji PRZYDATNOCI HANDLOWEJ albo PRZYDATNOCI DO OKRELONYCH \n"
+"ZASTOSOWA. W celu uzyskania bliszych informacji - Powszechna \n"
+"Licencja Publiczna GNU. \n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Z pewnoci wraz z niniejszym programem za咳czono te egzemplarz Powszechnej "
+"Licencji Publicznej GNU (GNU General Public License);jeli nie - napisz do "
+"Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Odczyt ustawie wszystkich kont...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Znaleziono etykiet: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Niektre okna edycji s otwarte.\n"
+"Zamknij wszystkie okna edycji przed zmianami konta."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Otwieranie okna edycji konta...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Tworzenie okna edycji konta...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Edycja kont"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nowe wiadomoci zostan sprawdzone w tej kolejnoci. Zaznacz\n"
+"w kolumnie \"G\" konta, ktre maj by sprawdzone przez 'Odbierz wsz.'"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nazwa"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protok鶻"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Serwer"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Dodaj"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Edycja"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Usu "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "W d鶻"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "W gr"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Ustaw jako podstawowe konto "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zamknij"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Usu konto"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Czy naprawd chcesz usun掩 to konto?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Tak"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nie"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Nie mona odczyta pliku wiadomoci %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Nie mona odczyta cz蟠ci wiadomoci."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Nie mona pobra cz蟠ci wiadomoci wielocz蟠ciowej."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Wybrane polecenie nie moe by uyte w oknie tworzenia wiadomoci\n"
+"poniewa zawiera %%f, %%F lub %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Polecenie nie mogo zosta uruchomione. B咳d podczas tworzenia potoku.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nie mona rozwidli procesu by uruchomi nastpujce polecenie:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Wykonywanie: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Zakoczono: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Wejcie/wyjcie polece"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "Wylij"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Przerwij"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Wprowad argument dla nastpujcej akcji:\n"
+"(`%%h' zostanie zastpione tym argumentem)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Ukryte argumenty uytkownika akcji"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Argumenty uytkownika dla akcji"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Dodaj do ksi運ki adresowej"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adres"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Uwagi"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Wybierz katalog ksi運ki adresowej"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Plik"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Plik/Nowa _ksi運ka"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Plik/Nowy _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Plik/Nowy _J-Pilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Plik/Nowy _Serwer"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Plik/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Plik/_Edycja"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Plik/_Usu"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Plik/Zapi_sz"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Plik/_Zamknij"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adres"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Plik/Nowy _adres"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Plik/Nowa _grupa"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Plik/Nowy _katalog"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adres/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adres/_Edycja"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adres/_Usu"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Narzdzia"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Plik/Importuj plik _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/Pomo_c"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/Pomo_c/_O programie"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nowy _adres"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nowa _grupa"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nowy _katalog"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Edycja"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Usu"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Adres e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Ksi運ka adresowa"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Usu"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Wyszukaj"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Do:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Kopia:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Ukryta kopia:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Usu adres(y)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Czy naprawd chcesz usun掩 ten adres(y)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nie"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Czy chcesz usun掩 katalog ORAZ wszystkie wiadomoci w \"%s\" ?\n"
+"Jeli usuniesz tylko katalog, adresy zostan przeniesione do nadrzdnego "
+"katalogu."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Tylko katalog"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Katalog i adresy"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Czy naprawd usun掩 \"%s\" ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nowy uytkownik, nie mona byo zapisa pliku indeksu."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nowy uytkownik, nie mona byo zapisa plikw ksi運ki adresowej."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Konwersja starej ksi運ki adresowej zostaa zakoczona pomylnie."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Stara ksi運ka adresowa zostaa skonwertowana,\n"
+"nie mona byo zapisa nowego pliku indeksu adresw."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej,\n"
+"utworzono puste pliki nowej ksi運ki adresowej."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej,\n"
+"nie mona byo utworzy nowych plikw ksi運ki adresowej."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej\n"
+"oraz utworzy nowych plikw ksi運ki adresowej."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "B咳d konwersji ksi運ki adresowej"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Konwersja ksi運ki adresowej"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "B咳d ksi運ki adresowej"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Nie mona odczyta ksi運ki adresowej"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Stara ksi運ka adresowa zostaa skonwertowana, nie mona byo zapisa nowego "
+"pliku indeksw adresowych."
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej lecz utworzono puste pliki "
+"nowej ksi運ki adresowej."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej oraz utworzy nowych plikw "
+"ksi運ki adresowej."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Nie mona byo skonwertowa ksi運ki adresowej i utworzy nowych plikw "
+"ksi運ki adresowej"
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "B咳d konwersji ksi運ki adresowej"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Konwersja ksi運ki adresowej"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interfejs"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Ksi運ka adresowa"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Osoba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Adres e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupa"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Katalog"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Serwer LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Wsplny adres:"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Osobisty adres:"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notatka"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Ostrzeenie"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "B咳d"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Tworzenie panelu z ostrzeeniami...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Wywietl t wiadomo倶 nastpnym razem"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Pomaraczowy"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Czerwony"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "R鷽owy"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Jasnoniebieski"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Niebieski"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zielony"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Brzowy"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Brak"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/Dod_aj..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Usu"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Waciwoci..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Plik/Zapi_sz"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Wiadomo倶/Wylij _p鷦niej"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Wiadomo倶/Zapisz w katalogu _Draft"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Wiadomo倶/Zapisz i dalej _edytuj"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Plik/_Do咳cz plik"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Plik/Wstaw pl_ik"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Plik/Wstaw p_odpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Edycja/_Cofnij"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Edycja/Po_nw"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Edycja/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Edycja/Wy_tnij"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Edycja/_Kopiuj"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Edycja/_Wstaw"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Edycja/Wstaw jako c_ytat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Edycja/W_ybierz wszystko"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Edycja/_Zaawansowane"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Edycja/_Zaawansowane/Przejd znak do tyu"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Edycja/_Zaawansowane/Przejd znak do przodu"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Edycja/_Zaawansowane/Przejd sowo do tyu"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Edycja/_Zaawansowane/Przejd sowo do przodu"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Edycja/_Zaawansowane/Przejd do pocztku linii"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Edycja/_Zaawansowane/Przejd do koca linii"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Edycja/_Zaawansowane/Przejd do poprzedniej linii"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Edycja/_Zaawansowane/Przejd do nastpnej linii"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Edycja/_Zaawansowane/Usu znak z tyu"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Edycja/_Zaawansowane/Usu znak z przodu"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Edycja/_Zaawansowane/Usu sowo z tyu"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Edycja/_Zaawansowane/Usu sowo z przodu"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Edycja/_Zaawansowane/Usu lini"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Edycja/_Zaawansowane/Usu do koca linii"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Edit/Za_wi bie娠cy akapit"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Edycja/Zawijaj wszystkie dugie _linie"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Edycja/_Kopiuj"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Widok"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Widok/_Do"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Widok/_Kopia"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Widok/_Ukryta kopia"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Widok/_Odpowiedz do"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Widok/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Widok/_Przeka do"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Widok/_Linijka"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Widok/Za咳cznik"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Narzdzia/_Ksi運ka adresowa"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Narzdzia/_Szablon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Narzdzia/Polecen_ia"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Narzdzia/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Edycja/Edytuj za pomoc z_ewntrznego edytora"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Narzdzia/Polecen_ia"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Wiadomo倶/_Szyfruj"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: brak pliku\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Nie mog pobra cz蟠ci tekstu\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "B咳d formatu znacznika cytatu."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "B咳d formatu odpowiedz/przeka wiadomo倶."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Plik %s nie istnieje\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Nie mona odczyta wielkoci pliku %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Plik %s jest pusty."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Nie mona odczyta %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Wiadomo倶: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Nie mona pobra cz蟠ci wiadomoci wielocz蟠ciowej."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Edytowany]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Utwrz wiadomo倶%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Utwrz wiadomo倶%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Nie podano odbiorcy."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Wylij"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Wiadomo倶 nie posiada tematu. Czy wysa j mimo tego ?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "nie mona pobra listy odbiorcw."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nie podano konta pocztowego do wysyania wiadomoci.\n"
+"Naley wybra konto przed wysaniem."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "B咳d podczas wysyania wiadomoci do %s."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Nie mona zapisa wiadomoci do outbox."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Nie mona znale惹 klucza zwizanego z wybranym identyfikatorem klucza \"%s\"."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "nie mona zmieni trybu pliku\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Nie mona skonwertowa strony kodowej wiadomoci z\n"
+"%s na %s.\n"
+"Czy mimo to wysa wiadomo倶?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "nie mona zapisa nag鞄wkw\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "Nie mona usun掩 starej wiadomoci\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "kolejkowanie wiadomoci...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "nie mona znale惹 katalogu kolejki\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "nie mona zapisa wiadomoci do kolejki\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "wygenerowany Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Tworzenie okna edycji...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "typ MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Rozmiar"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Od:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Wylij wiadomo倶"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Wylij p鷦niej"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Umie倶 w katalogu kolejki i wylij p鷦niej"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Draft"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Zapisz w katalogu szablonw"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Wstaw"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Wstaw plik"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Do咳cz"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Do咳cz plik"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Podpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Wstaw podpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Edytor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Edytuj w zewntrznym edytorze"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Zawijanie linii"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Zawijaj wszystkie dugie linie"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Niepoprawny typ MIME."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Brak pliku lub pusty plik."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Waciwoci"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodowanie"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "cieka"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nazwa pliku"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Niepoprawna linia wywoania zewntrznego edytora: \"%s\"\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Zewntrzny edytor wci運 pracuje.\n"
+"Czy wymusi zakoczenie procesu?\n"
+"identyfikator grupy procesw: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Identyfikator zakoczonej grupy procesw: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Plik tymczasowy: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Edycja: wejcie z procesu monitorujcego\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Nie mona uruchomi zewntrznego edytora\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Nie mona zapisa do pliku\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "B滑dny odczyt z potoku\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Nie mona wstawi wiadomoci do kolejki."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Wybierz plik"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Porzu wiadomo倶"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Wiadomo倶 zostaa zmieniona, czy porzuci j?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Porzu"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "do Draft"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Czy chcesz zastosowa szablon \"%s\"?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Zastosuj szablon"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Zamie"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Edytuj adres"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Dodaj now osob"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Edytuj informacje osoby"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Naley poda adres e-mail."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Naley poda nazw i warto倶."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Edytuj dane osoby"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Wywietlana nazwa"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Nazwisko"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Imi"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Pseudonim"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Adres e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Zwany inaczej"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "W gr"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "W d鶻"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Zmie"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Wyczy倶"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Warto倶"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Dane podstawowe"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atrybuty uytkownika"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Plik wyglda na dobry."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Plik nie wyglda na poprawny plik ksi運ki adresowej."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Nie mona odczyta pliku."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Edytuj ksi運k adresow"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Sprawd plik"
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Plik"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Dodaj now ksi運k adresow"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Naley poda nazw grupy."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Edytuj dane grupy"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nazwa grupy"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresy w grupie"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Dostpne adresy"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Przenie przyciskami strzaek adresy email do lub z grupy"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Edytuj szczeg鶻y grupy"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Dodaj now grup"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Edytuj katalog"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Podaj now nazw katalogu:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nowy katalog"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Podaj nazw nowego katalogu:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Plik nie wyglda na plik formatu JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Wybierz plik JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Edytuj wpis JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Dodatkowe elementy adresu email"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Dodaj nowy wpis JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Po咳czono pomylnie z serwerem"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Nie mona po咳czy si z serwerem"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Edytuj serwer LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nazwa hosta"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Sprawd serwer "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Przeszukuj baz"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Kryteria wyszukiwania"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Zeruj "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Wi運 DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Wi運 haso"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Op鷦nienie (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maksymalna ilo倶 pozycji"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Podstawowe"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Rozszerzone"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "/Dod_aj nowy serwer LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Edytuj LDAP - Wybierz baz wyszukiwania"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Dostpne bazy wyszukiwania"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Nie mona odczyta baz wyszukiwania z serwera - ustaw j rcznie"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Plik nie wyglda na plik w formacie VCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Wybierz plik VCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Edytuj wpis VCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Dodaj nowy wpis VCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Eksport"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Wybierz katalog docelowy i plik w formacie mbox"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Katalog rdowy:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Eksportowanie pliku:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Wybierz... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Wybierz plik eksportu"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "b咳d podczas zapisu konfiguracji do pliku\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Wybierz katalog"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Odebrane"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Wysane"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Kolejka"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "mietnik"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Szablony"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Nowy katalog"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "'%c' nie moe wystpi w nazwie katalogu."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Katalog '%s' ju istnieje."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Nie mona utworzy katalog '%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Utwrz _nowy katalog..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Zmie nazw katalogu..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Usu katalog"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Opr鷽nij mietnik"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Sprawd nowe wiadomo_ci"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Odbuduj drz_ewo katalogw"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Wy_szukaj wiadomoci..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Brak nieprzeczytanych wiadomoci."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Subskrybuj grup news..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Usu g_rup news"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Tworzenie widoku katalogw...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nowy"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Nieprzeczytane"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Ustawianie informacji o katalogu...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Ustawianie informacji o katalogu..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Przeszukiwanie katalogu %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Przeszukiwanie katalogu %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Odbuduj drzewo katalogw"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Drzewo katalogw zostnie przebudowane. Kontynuowa?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Odbudowywanie drzewa katalogw..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "B咳d podczas odbudowywania drzewa katalogw."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Odbudowywanie wszystkich drzew katalogw..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Sprawdzanie nowych wiadomoci we wszystkich katalogach..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Wybrano katalog %s\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Wysyanie wiadomoci..."
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "B咳d podczas wysyania wiadomoci do %s."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Wprowad nazw nowego katalogu:\n"
+"(jeli ma zosta utworzony katalog w celu przechowywania\n"
+"innych wiadomoci, naley do咳czy \"/\" na kocu nazwy)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Wprowad now nazw dla '%s' :"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Zmie nazw katalogu"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Wszystkie katalogi i wiadomoci w \"%s\" zostan usunite.\n"
+"Czy naprawd chcesz je usun掩?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Usu katalog"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Nie mona usun掩 katalogu \"%s\"."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Opr鷽nij mietnik"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Czy usun掩 wszystkie wiadomoci ze mietnika?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Czy naprawd usun掩 skrzynk \"%s\" ?\n"
+"(Wiadomoci NIE zostan usunite z dysku)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Usu skrzynk"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Czy naprawd chcesz usun掩 konto IMAP4 \"%s\" ?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Usu konto IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Czy naprawd chcesz usun掩 grup dyskusyjn \"%s\"?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Usu grup dyskusyjn"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Czy naprawd chcesz usun掩 konto grup dyskusyjnych \"%s\"?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Usu konto grup dyskusyjnych"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Subskrybuj grup dyskusyjn"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Wybierz grupy do subskrybcji."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Znajd grupy dyskusyjne:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Szukaj "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nazwa grupy dyskusyjnej:"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Wiadomoci"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Typ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Odwie"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderowana"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "tylko do odczytu"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "nieznany"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Nie mona pobra listy grup dyskusyjnych."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Gotowe."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "pobrano %d grup dyskusyjnych (%s przeczytano)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Grupy dyskusyjne:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Temat:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Tworzenie widoku nag鞄wkw...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Bez Od)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Bez tematu)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Tworzenie widoku obrazu...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Nie mona zaadowa obrazu."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr ""
+"Po咳czenie IMAP4 z %s zostao przerwane. Ponowne nawizywanie po咳czenia...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "tworzenie po咳czenia IMAP4 do %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Nie mona uruchomi sesji TLS\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "nie mona ustawi flag skasowany: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "nie mona zlikwidowa\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "nie mona ustawi flagi skasowany: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "nie mona zamkn掩 katalogu\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "brak g鞄wnego katalogu %s\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "wystpi b咳d podczas przy pobieraniu LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "nie mona utworzy \"%s\"\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "nie mona utworzy \"%s\" w INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "nie mona utworzy skrzynki: b咳d LIST.\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "nie mona utworzy skrzynki\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "nie mona zmieni nazwy skrzynki: %s na %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "nie mona skasowa skrzynki\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "nie mona pobra koperty\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "wystpi b咳d podczas pobierania koperty.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "nie mona przetworzy koperty: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Nie mona nawiza po咳czenia z serwerem IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Nie mona ustanowi sesji IMAP4 z: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "nie mona pobra przestrzeni nazw\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "nie mona wybra katalogu: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "B咳d uwierzytelniania IMAP4.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Nie mona zalogowa si do serwera IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "nie mona do咳czy %s do %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(wysyanie pliku...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "nie mona do咳czy wiadomoci do %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "nie mona skopiowa %s do %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "wystpi b咳d przy wykonywaniu polecenia IMAP: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "wystpi b咳d przy wykonywaniu polecenia IMAP: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "wystpi b咳d przy wykonywaniu polecenia IMAP: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "nie mona skonwertowa UTF-7 do %s za pomoc programu iconv\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "nie mona skonwertowa %s do UTF-7 za pomoc programu iconv\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Import"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Okrel docelowy plik ze skrzynk oraz docelowy katalog."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importowanie pliku:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Katalog docelowy:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Wybierz importowany plik"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Okrel nazw ksi運ki adresowej i pliku do importu."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Wybierz i zmie nazwy pl LDIF do importu."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Plik zaimportowano."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Wybierz plik."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Naley poda nazw ksi運ki adresowej."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "B咳d przy odczycie pl LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Plik LDIF zosta pomylnie zaimportowany."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Wybierz plik LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nazwa pliku"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Pole LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nazwa atrybutu"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atrybut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Wybierz"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Ksi運ka adresowa :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nazwa pliku :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Rekordy :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importuj plik LDIF do ksi運ki adresowej"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Poprzednia"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Nastpna"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informacja o pliku"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atrybuty"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Koniec"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Pobieranie nowych wiadomoci"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Oczekiwanie"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Anulowano"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Pobieranie"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Gotowe (%d wiadomo倶i (%s) odebrano)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Gotowe (brak nowych wiadomoci)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "B咳d po咳czenia"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "B咳d autoryzacji"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zablokowano"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Op鷦nienie (sek)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Zakoczono (%d nowe wiadomoci)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Zakoczono (brak nowych wiadomoci)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Wystpiy b滑dy podczas pobierania poczty."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "pobieranie nowych wiadomoci z konta %s ...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s : Pobieranie nowych wiadomoci"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Nawizywanie po咳czenia z serwerem POP3: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Nie mona nawiza po咳czenia z serwerem POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Uwierzytelnianie..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Pobieranie wiadomoci z %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Pobieranie liczby nowych wiadomoci (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Pobieranie liczby nowych wiadomoci (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Pobieranie liczby nowych wiadomoci (UIDL)"
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Pobieranie rozmiaru wiadomoci (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Usuwanie wiadomoci %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Wychodzenie"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Pobieranie wiadomoci (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Pobieranie (%d wiadomo倶i (%s) odebrano)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "B咳d po咳czenia."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "B咳d podczas przetwarzania wiadomoci."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"B咳d podczas przetwarzania wiadomoci:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Brak miejsca na dysku."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Nie mona zapisa pliku."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "B咳d gniazda."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Po咳czenie zamknite przez zdalny komputer."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Skrzynka jest zablokowana."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Skrzynka jest zablokowana:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "B咳d uwierzytelniania."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"B咳d uwierzytelniania:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "przekroczenie czasu sesji\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Odbieranie anulowano\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Pobieranie wiadomoci z %s do %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Wprowad haso dla %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Wprowad haso"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Dziennik protokou"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Plik \"%s\" ju istnieje.\n"
+"Nie mona utworzy katalogu."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "Bibltioteka glib nie obsuguje wywoania g_thread.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"Program GnuPG nie jest poprawnie zainstalowany, lub jego\n"
+"wersja jest zbyt stara. Obsuga OpenPGP zostaa wy咳czona."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uycie: %s [OPCJE]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adres] otwiera okno tworzenia wiadomoci"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach plik1 [plik2]...\n"
+" otwiera okno tworzenia wiadomoci z plikami,\n"
+" ktre maj zosta do咳czone"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive odbiera nowe wiadomoci"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all odbiera nowe wiadomoci dla wszystkich kont"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send wysya wszystkie skolejkowane wiadomoci"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [katalog]... pokazuje 咳czn liczb wiadomoci"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [katalog]...\n"
+" pokazuje 咳czn liczb wiadomoci"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug tryb debugowania"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help wywietla t pomoc i wychodzi"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr ""
+" --version wywietla informacj o wersji i koczy dziaanie"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Tworzenie nowej wiadomoci. Czy zakoczy?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Skolejkowane wiadomoci"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Niektre niewysane wiadomoci zostay skolejkowane. Czy wyj倶?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "Jest ju uruchomiona kopia programu Sylpheed.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Plik/_Katalog"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Plik/_Katalog/Utwrz _nowy katalog..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Plik/_Katalog/_Zmie nazw katalo_gu..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Plik/_Katalog/_Usu kata_log"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Plik/Dod_aj skrzynk..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Plik/Dod_aj skrzynk..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Usu _skrzynk"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Plik/_Katalog/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/Sprawd nowe wiadomo_ci"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Plik/_Katalog/Sprawd nowe wiadomo_ci we wszystkich katalogach"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/Odbuduj drz_ewo katalogw"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Plik/_Importuj plik mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Plik/_Eksportuj do pliku mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Plik/Opr鷽nij mie_tnik"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Plik/Zapi_sz jako..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Plik/_Drukuj..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Plik/Praca _offline"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Plik/_Koniec"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Edycja/Wybierz w_tek"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Edycja/Zna_jd w bie娠cej wiadomoci..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Edycja/Wy_szukaj wiadomoci..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Widok/Wywietl lub _ukryj"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Widok/Wywietl lub _ukryj/_Drzewo katalogw"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Widok/Wywietl lub _ukryj/Widok wiado_moci"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Widok/Wywietl lub _ukryj/_Pasek narzdzi"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Widok/Wywietl lub _ukryj/_Pasek narzdzi/I_kony i tekst"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Widok/Wywietl lub _ukryj/_Pasek narzdzi/_Ikony"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Widok/Wywietl lub _ukryj/_Pasek narzdzi/_Tekst"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Widok/Wywietl lub _ukryj/_Pasek narzdzi/ade_n"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Widok/Wywietl lub _ukryj/Pa_sek stanu"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Widok/_Oddzielne drzewo katalogw"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Widok/Oddzielny widok wiado_moci"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Widok/_Sortuj"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Widok/_Sortuj/wg _numeru"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Widok/_Sortuj/wg w_ielkoci"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Widok/_Sortuj/wg _daty"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Widok/_Sortuj/wg pola _od"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Widok/_Sortuj/wg odbio_rcy"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Widok/_Sortuj/wg _tematu"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Widok/_Sortuj/wg _kolorw etykiet"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Widok/_Sortuj/wg _zaznacze"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Widok/_Sortuj/wg _nieprzeczytanych"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Widok/_Sortuj/wg z_a咳cznikw"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Widok/_Sortuj/Nie s_ortuj"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Widok/_Sortuj/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Widok/_Sortuj/Rosnco"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Widok/_Sortuj/Malejco"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Widok/_Sortuj/_Grupuj wg tematu"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Widok/Widok w_tkw"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Widok/_Rozwi wszystkie wtki"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Widok/_Zwi wszystkie wtki"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Widok/Ustaw wywietlane _elementy..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Widok/_Id do"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Widok/_Id do/_Poprzednia wiadomo倶"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Widok/_Id do/_Nastpna wiadomo倶"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Widok/_Id do/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Widok/_Id do/Poprzednia niep_rzeczytana wiadomo倶"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Widok/_Id do/Nastpna ni_eprzeczytana wiadomo倶"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Widok/_Id do/_Poprzednia wiadomo倶"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Widok/_Id do/_Nastpna nowa wiadomo倶"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Widok/_Id do/Poprzednia zaznaczona wiado_mo倶"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Widok/_Id do/Nastpna z_aznaczona wiadomo倶"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Widok/_Id do/_Poprzednia etykietowana wiadomo倶"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Widok/_Id do/_Nastpna etykietowana wiadomo倶"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Widok/Id do inne_go katalogu..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Widok/_Strona kodowa/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Widok/_Strona kodowa"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Widok/_Strona kodowa/_Automatycznie"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Widok/_Strona kodowa/7 bitw ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Widok/_Strona kodowa/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Widok/_Strona kodowa/Europa Zachodnia (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Widok/_Strona kodowa/Europa Zachodnia (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Widok/_Strona kodowa/Europa rodkowa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Widok/_Strona kodowa/Kraje _Batyckie (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Widok/_Strona kodowa/Kraje Batyckie (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Widok/_Strona kodowa/Grecja (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Widok/_Strona kodowa/Turcja (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Widok/_Strona kodowa/Cyrylica (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Widok/_Strona kodowa/Cyrylica (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Widok/_Strona kodowa/Cyrylica (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Widok/_Strona kodowa/Cyrylica (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Widok/_Strona kodowa/Japonia (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Widok/_Strona kodowa/Japonia (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Widok/_Strona kodowa/Japonia (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Widok/_Strona kodowa/Japonia (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Widok/_Strona kodowa/Uproszczony Chiny (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Widok/_Strona kodowa/Tradycyjny Chiny (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Widok/_Strona kodowa/Tradycyjny Chiny (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Widok/_Strona kodowa/Chiny (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Widok/_Strona kodowa/Korea(EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Widok/_Strona kodowa/Korea (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Widok/_Strona kodowa/Tajlandia (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Widok/_Strona kodowa/Tajlandia (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/W_Widok/Ot_wrz w nowym oknie"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Widok/P_oka rdo"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Widok/Poka wszystkie na_g鞄wki"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Widok/_Odwie podsumowanie"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Wiadomo倶"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/Wiado_mo倶/Odbier_z"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/Wiado_mo倶/Odbier_z/Pobierz z bie娠_cego konta"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/Wiado_mo倶/Odbier_z/Pobierz ze _wszystkich kont"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Wiadomo倶/Odbier_z/Anuluj pob_ieranie"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/Wiado_mo倶/Odbier_z/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/Wiado_mo倶/Wylij wia_domoci z kolejki"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Wiadomo倶/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/Wiado_mo倶/Twrz _now wiadomo倶"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/Wiado_mo倶/_Odpowiedz"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/Wiado_mo倶/Odpowied_z"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/Wiado_mo倶/Odpowied_z/w_szystkim"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/Wiado_mo倶/Odpowied_z/nadawc_y"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/Wiado_mo倶/Odpowiedz/_licie dyskusyjnej"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/Wiado_mo倶/Przeka da_lej"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/Wiado_mo倶/Przeka j_ako za咳cznik"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/Wiado_mo倶/Prze_kieruj"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/Wiado_mo倶/_Przesu..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/Wiado_mo倶/_Kopiuj"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/Wiado_mo倶/_Usu"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/Wiado_mo倶/_Zaznacz"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/Wiado_mo倶/_Zaznacz/_Zaznacz"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/Wiado_mo倶/_Zaznacz/_Odznacz"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/Wiado_mo倶/_Zaznacz/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/Wiado_mo倶/_Zaznacz/Zaznacz jako ni_eprzeczytane"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/Wiado_mo倶/_Zaznacz/Zaznacz jako przecz_ytane"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/Wiado_mo倶/_Zaznacz/Zaznacz wszystkie jako przecz_ytane"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/Wiado_mo倶/Prz_eedytuj"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Narzdzia/Dodaj nadawc do _ksi運ki adresowej"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Narzdzia/_Filtruj wiadomoci"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Narzdzia/_Filtruj wiadomoci"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Narzdzia/_Utwrz regu滑 filtrowania"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Narzdzia/_Utwrz regu滑 filtrowania/_Automatycznie"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Narzdzia/_Utwrz regu滑 filtrowania/_Od"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Narzdzia/_Utwrz regu滑 filtrowania/_Do"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Narzdzia/_Utwrz regu滑 filtrowania/_Temat"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/Wiado_mo倶/Usu z_duplikowane wiadomoci"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Narzdzia/_Wykonaj"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Narzdzia/Okno _logw"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/Konfigura_cja"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/Konfigura_cja/Preferen_cje..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/Konfigura_cja/Ustawienia _filtrowania"
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/Konfigura_cja/_Szablon..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/Konfigura_cja/Poleceni_a..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/Konfigura_cja/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/Konfigura_cja/_Preferencje bie娠cego konta..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/Konfigura_cja/Utwrz _nowe konto..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/Konfigura_cja/_Edytuj konta..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/Konfigura_cja/Zmie bie娠_ce konto"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Pomoc/_Podrcznik"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Pomoc/_Podrcznik/Angi_elski"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Pomoc/_Podrcznik/_Japoski"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/Pomo_c/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Pomoc/_FAQ/Angi_elskie"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Pomoc/_FAQ/_Niemieckie"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Pomoc/_FAQ/Hi_szpaskie"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Pomoc/_FAQ/_Francuskie"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Pomoc/_FAQ/_Woskie"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Pomoc/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Tworzenie g鞄wnego okna...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Okno g鞄wne: b咳d alokacji kolorw %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "gotowe.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Bez tytuu"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "aden"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Zmiana typu rozdzielania okna z %d na %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Offline"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Jeste offline. Przej倶 do trybu online?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Opr鷽nij mietnik"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Czy usun掩 wszystkie wiadomoci ze mietnika?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Dodaj skrzynk"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Wprowad pooenie skrzynki.\n"
+"Jeli zostanie podana istniejca skrzynka, bdzie ona\n"
+"automatycznie skanowana."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Skrzynka \"%s\" ju istnieje."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Skrzynka"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Tworzenie skrzynki zakoczone niepowodzeniem.\n"
+"By moe pliki ju istniej lub brak jest wystarczajcych uprawnie do "
+"zapisu w tym miejscu."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Widok Katalogw"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Widok Wiadomoci"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Odpowiedz"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odpowiedz na wszystkie"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Odpowied_z/nadawc_y"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Odpowied_z/_licie dyskusyjnej"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/Prze_ka"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Przeka jako za咳cznik"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Prze_kieruj"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Odbierz"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Odbierz now poczt"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Odbierz wsz."
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Odbierz now poczt z wszystkich kont"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Wylij wiadomoci z kolejki"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Utwrz"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Utwrz now wiadomo倶"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odpowiedz"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odpowiedz na wiadomo倶"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odp. na wsz."
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odpowiedz na wszystkie"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Przeka"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Przeka wiadomo倶 dalej"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Usu wiadomo倶"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Wykonaj"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Wykonaj zaznaczony proces"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Nastpna nieprzeczytana wiadomo倶"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferencje"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Wsplne preferencje "
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Konto"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Ustawienia konta"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Jeste offline. Kliknij ikon by przej倶 do trybu online."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Jeste online. Kliknij ikon, by przej倶 do trybu offline."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Koniec programu"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Czy zakoczy program?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "nie mona zapisa do pliku tymczasowego\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Pobieranie wiadomoci z %s do %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "nie mona odczyta pliku mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "niepoprawny format mbox: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "uszkodzona skrzynka: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "nie mona otworzy pliku tymczasowego\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"znaleziono \"unescaped\" From:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "znaleziono %d wiadomoci.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "nie mona utworzy pliku lock %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "jeli to moliwe, naley uy \"flock\" zamiast \"file\".\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "nie mona utworzy %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "skrzynka jest kontrolowana przez inny proces, oczekiwanie...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "nie mona zablokowa %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "nieprawidowy typ blokady\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "nie mona odblokowa %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "nie mona skrci do zera.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Eksportowanie wiadomoci z %s do %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Znajd w bie娠cej wiadomoci"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Znajd tekst:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Rozr鷽nianie wielkoci liter"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Wyszukiwanie wstecz"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Szukaj"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "B咳d wyszukiwania"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Nie znaleziono szukanego cigu."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Osignito pocztek wiadomoci; czy kontynuowa od koca?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Osignito koniec wiadomoci; czy kontynuowa od pocztku?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Przeszukiwanie zakoczone"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Tworzenie widoku wiadomoci...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Zapisz jako"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Nadpisz"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Czy nadpisa istniejcy plik?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Nie mona zapisa pliku \"%s\"."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Drukuj"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Podaj polecenie wydruku:\n"
+"(\"%s\" zostanie zastpione nazw pliku)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"B滑dne polecenie wydruku:\n"
+"\"%s\""
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "nie mona skopiowa wiadomoci %s do %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Nie mona otworzy pliku zaznacze.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "katalog rdowy jest taki sam jak docelowy.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopiowanie wiadomoci %s%c%d do %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Ostatni numer w katalogu %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Otwrz"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Otwrz _z..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Wywietl jako tekst"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/Zapi_sz jako..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Spr_awd podpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Tworzenie widoku MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Typ MIME "
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Za咳czniki"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Wybierz \"Sprawd podpis\" by sprawdzi"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Nie mona zapisa cz蟠ci wiadomoci wielocz蟠ciowej."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Otwrz z"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Wprowad polecenie dla otwarcia pliku:\n"
+"(\"%s\" zostanie zastpione nazw pliku)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Niepoprawne polecenie podgldu MIME: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "tworzenie po咳czenia NNTP z %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr ""
+"Po咳czenie NNTP %s:%d zostao zerwane. Ponowne nawizywanie po咳czenia...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "artyku %d zosta ju zapamitany.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "pobieranie artykuu %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "nie mona odczyta artykuu %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "nie mona pobra listy grup news\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "nie mona wysa artykuu.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "nie mona odebra artykuu %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "nie mona wybra grupy: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "niepoprawny zakres artykuu: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "brak nowych artyku鞄w.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "pobieranie xover %d - %d w %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "nie mona pobra xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "b咳d podczas pobierania xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "niepoprawna linia xover: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "nie mona pobra xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "b咳d podczas pobierania xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Nie mona po咳czy si z serwerem NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "b咳d protokou: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "b咳d protokou\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Wystpi b咳d podczas publikowania\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "B咳d podczas wysyania wiadomoci."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Haso"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[ brak identyfikatora ]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s Wprowad haso dla:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Niewaciwe haso! Sprbuj ponownie...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Przy powitaniu zabrako wymaganego znacznika czasowego APOP\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "B咳d skadni przy znaczniku czasowym powitania\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "B咳d protokou POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "niepoprawna linia xover: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Usuwanie przestarzaej wiadomoci %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Pomijanie wiadomoci %d (%d bajtw)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "skrzynka jest zablokowana\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "przekroczenie czasu sesji\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "nie mona uruchomi sesji TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "wystpi b咳d podczas uwierzytelniania\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "nieobsugiwane polecenie\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "wystpi b咳d podczas sesji POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Odczytywanie konfiguracji...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Znaleziono: %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Zakoczono odczyt konfiguracji.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguracja zapisana.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Zastosuj"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Otwieranie okna preferencji konta...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Konto%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferencje nowego konta"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Preferencje konta"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Tworzenie okna preferencji okna...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Odbieranie"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Prywatno倶"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Zaawansowane"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nazwa tego konta"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Ustaw jako domylne"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informacje osobiste"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Pena nazwa"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Adres e-mail"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacja"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informacje o serwerze"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "aden (lokalnie)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ten serwer wymaga autoryzacji"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Serwer news"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Serwer dla odbioru"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Serwer SMTP (dla wysyania)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Identyfikator uytkownika"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Haso"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Ten serwer wymaga autoryzacji"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Usuwanie wiadomoci z serwera po odebraniu"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Usuwanie po"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dniach"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dni: usuwa natychmiast)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Pobieranie wszystkich wiadomoci z serwera"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Ograniczenie wielkoci pobierania"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrowanie wiadomoci podczas odbierania"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Domylny inbox"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nieprzefiltrowane wiadomoci zostan zachowane w tym katalogu)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Sposb uwierzytelniania"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatycznie"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "\"Odbierz wszystkie\" sprawdza poczt dla tego konta"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Nag鞄wek"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dodawanie pola Data do nag鞄wka"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generowanie identyrikatora wiadomoci"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Dodawanie nag鞄wka zdefiniowanego przez uytkownika"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "Edycja..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Uwierzytelnianie"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Uwierzytelnianie SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Jeli te pola nie zostan wypenione, uyty zostanie\n"
+"ten sam identyfikator uytkownika i haso co przy odbieraniu."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Uwierzytelnianie POP3 przed wysyaniem"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Wyjcie polecenia"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Automatyczne ustawianie nastpujcych adresw"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Kopia"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Ukryta kopia"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Adres zwrotny"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Domylnie szyfrowanie wiadomoci"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Domylnie podpisywanie wiadomoci"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Uywanie formatu ASCII-armored dla szyfrowania"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Wstawianie podpisu czystym tekstem"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Klucz"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Uywanie standardowego klucza GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Wybieranie klucz poprzez swj adres e-mail"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Rczne okrelanie klucza"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Uytkownik lub klucz ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Nie korzystanie z SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Uywanie SSL dla po咳cze POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Uywanie polecenia STARTTLS by rozpocz掩 sesj SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Uywanie SSL dla po咳cze IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Uywanie SSL dla po咳cze NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Wysyanie (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Uywanie SSL dla po咳cze SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Uywanie nieblokujcego SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Wy咳cz to, jeli masz problemy z po咳czeniem SSL)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Okrel port SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Okrel port POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Okrel port IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Okrel port NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Okrel nazw domeny"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Katalog serwera IMAP4."
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Zapisywanie wysanych wiadomoci do"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Zapisywanie szablonw wiadomoci do"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Zapisywanie usunitych wiadomoci do"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Nie okrelono nazwy konta."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Nie okrelono adresu e-mail."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Nie okrelono serwera SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Nie okrelono ID uytkownika."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Nie okrelono serwera POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Nie okrelono serwera IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Nie okrelono serwera NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Nie zaleca si uywania starego stylu trybu ASCII-armored\n"
+"dla kodowanych wiadomoci. Nie jest to zgodne z RFC 3156\n"
+"- Bezpieczestwo MIME z OpenPGP"
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Ustawienia akcji"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nazwa w menu:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Polecenie:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nazwa w menu:\n"
+" Uyj / w nazwie by zrobi submenu.\n"
+"Polecenie:\n"
+" Rozpoczyna si znakiem:\n"
+" | by przesa tre倶 wiadomoci lub wybr do polecenia\n"
+" > by przesa tekst uytkownika do polecenia\n"
+" * by przesa ukryty tekst uytkownika do polecenia\n"
+" Koczy si znakiem:\n"
+" | by zamieni tre倶 wiadomoci lub wybr na wyjcie polecenia\n"
+" > by wstawi wyjcie polecenia bez zamiany starego tekstu\n"
+" & by uruchomi polecenie asynchronicznie\n"
+" Uyj:\n"
+" %f dla nazwy pliku wiadomoci\n"
+" %F dla listy nazw plikw wybranych wiadomoci\n"
+" %p dla wybranej cz蟠ci wiadomoci\n"
+" %u dla argumentu podanego przez uytkownika\n"
+" %h dla ukrytego argumentu podanego przez uytkownika\n"
+" %s dla wybranego tekstu"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Zamie "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Pomoc skadni "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Zarejestrowane polecenia"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nowy)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Nie ustawiono nazwy w menu."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Dwukropek \":\" nie jest dopuszczalny w nazwie w menu."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Nazwa w menu jest zbyt duga."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Nie ustawiono polecenia."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Nazwa w menu i polecenie jest zbyt dugie."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Polecenie\n"
+"%s\n"
+"posiada b咳d skadni."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Usu polecenie"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Czy naprawd usun掩 to polecenie?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Tworzenie okna preferencji...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferencje"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Cytat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Wywietlanie"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Wiadomo倶"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Inne"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Program zewntrzny"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Uycie zewntrznego programu do odbierania poczty"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Polecenie"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokalny Spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Odbierz ze spoola"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrowanie przy odbieraniu"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automatyczne sprawdzanie poczty"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "kade"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuta(y)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Sprawdzanie poczty przy uruchamianiu programu"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Aktualizacja wszystkich lokalnych katalogw po odebraniu"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maksymalna liczba pobieranych artyku鞄w\n"
+"(bez ogranicze - 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Uywanie zewntrznego programu do wysyania"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Zapisywanie wysanych wiadomoci do Poczta wysana"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Strona kodowa dla wychodzcych"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatycznie (Zalecane)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7 bitw ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europa Zachodnia (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europa Zachodnia (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Europa odkowa (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Kraje Batyckie (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Kraje Batyckie (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grecja (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turcja (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrylica (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrylica (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrylica (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrylica (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonia (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonia (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonia (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Uproszczony Chiny (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradycyjny Chiny (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradycyjny Chiny (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chiny (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korea (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tajlandia (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tajlandia (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Jeli wybrano \"Automatycznie\" to zostanie uyte\n"
+"optymalne kodowanie dla bie娠cych ustawie lokalnych."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Kodowanie przesyanych danych"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Opcja ta okrela Content-Transfer-Encoding dla sytuacji,\n"
+"gdzie tre倶 listu zawiera znaki nie-ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Oddzielenie podpisu"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Automatyczne wstawianie podpisu"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automatyczne uruchamianie zewntrznego edytora"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Poziom Cofnij"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Zawijaj wiadomoci przy"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znakach"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Zawijanie cytatu"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Zawijanie podczas wprowadzania"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Zawijanie przed wysaniem"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automatyczne ustawianie konta dla odpowiedzi"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Cytowanie wiadomoci przy odpowiedzi"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Przycisk Odpowiedz wysya odpowied na list dyskusyjn"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Format odpowiedzi"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Znak cytowania"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Format przekazywania"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Opis symboli "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Czcionka"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Tumaczenie nazwy nag鞄wka (jak np. 'Od:', 'Temat:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Wywietlanie iloci nieprzeczytanych przy nazwie katalogu"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Skracanie nazwy grup duszych ni "
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "liter"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Widok listy wiadomoci"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Wywietlanie odbiorcy w kolumnie \"Od\" gdy uytkownik jest nadawc"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Rozwijanie wtkw"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Format daty"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Ustaw element wywietlania podsumowania... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "W咳czenie kolorowania wiadomoci"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Wywietlanie znakw wielobajtowych jako ASCII (tylko japoski)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Wywietlanie panelu nag鞄wkw ponad oknem wiadomoci"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Wywietlanie krtkich nag鞄wkw w widoku wiadomoci"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Odstp midzywierszowy"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "piksel(e)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Zostawianie miejsca w nag鞄wku"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Przewijanie"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "P鶻 strony"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Wygadzone przewijanie"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Krok"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Dopasowywanie rozmiaru do咳czonych obrazkw"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automatyczne sprawdzanie podpisw"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Wywietlanie wyniku sprawdzania podpisu w oknie komunikatw"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Tymczasowe zapamitywanie hasa w pamici"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Wygasanie po"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuta(y)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Warto倶 \"0\" ustawi zapamitywanie hasa na czas\n"
+" caej sesji)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Przechwytywanie wejcia podczas wprowadzania hasa"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Wywietlanie ostrzeenia przy uruchamianiu gdy nie dziaa GnuPG"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Zawsze otwieraj wiadomoci gdy wybrano widok podsumowania."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr ""
+"Otwieranie pierwszej nieprzeczytanej wiadomoci przy wchodzeniu do katalogu"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+"Zaznaczanie wiadomoci jako odczytanych tylko po otwarciu w nowym oknie"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Przechodzenie do Poczty przychodzcej po odbiorze poczty"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Natychmiastowe wykonywanie przy przenoszeniu lub kasowaniu wiadomoci"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Wiadomoci pozostan zaznaczone do wykonania\n"
+" gdy opcja ta jest wy咳czona)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Okno dialogowe odbierania"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Wywietlanie okna dialogowego odbierania"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Zawsze"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Tylko przy rcznym odbieraniu"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nigdy"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Okno b滑du pobierania wiadomoci nie jest wywietlane"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Zamykanie okna dialogowego odbierania po zakoczeniu"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Ustaw dowizania klawiszy... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Polecenia zewntrzne (%s zostanie zastpione nazw pliku / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Przegldarka Web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Dodawanie adresu do docelowego po dwukrotnym klikniciu"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Podczas wyjcia"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potwierdzanie zamykania programu"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Opr鷽nianie mietnika przy zamykaniu programu"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Wywietlanie pytania przed opr鷽nieniem"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Ostrzeganie jeli s wiadomoci w kolejce"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Limit czasu gniazda I/O:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "sekund(y)"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "skrcona nazwa dnia tygodnia"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "pena nazwa dnia tygodnia"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "skrcona nazwa miesica"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "pena nazwa miesica"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "preferowana data i czas dla ustawie lokalnych"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "numer roku (rok/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dzie miesica jako liczba dziesitna"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "godzina jako liczba dziesitna z uyciem czasu 24-ro godzinnego"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "godzina jako liczba dziesitna z uyciem czasu 12-to godzinnego"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dzie roku jako liczba dziesitna"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "miesic jako liczba dziesitna"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minuta jako liczba dziesitna"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "albo AM albo PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekunda jako liczba dziesitna"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "dzie tygodnia jako liczba dziesitna"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "preferowana data dla ustawie lokalnych"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "ostatnie dwie cyfry roku"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "rok jako liczba dziesitna"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "strefa czasowa jako nazwa lub skrt"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Wyszczeglniacz"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Opis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Przykad"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Ustaw kolory wiadomoci"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Kolory"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Cytowany tekst - poziom pierwszy"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Cytowany tekst - poziom drugi"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Cytowany tekst - poziom trzeci"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "1cze URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Powtarzanie kolorw cytowania"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Wybierz kolor dla pierwszego poziomu cytowania"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Wybierz kolor dla drugiego poziomu cytowania"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Wybierz kolor dla trzeciego poziomu cytowania"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Wybierz kolor dla URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Opis symboli"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Data\n"
+"Od\n"
+"Pena nazwa nadawcy\n"
+"Imi nadawcy\n"
+"Inicja nadawcy\n"
+"Temat\n"
+"Do\n"
+"Kopia\n"
+"Grupy news\n"
+"ID wiadomoci"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Wywietla expr jeli ustawiono x"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Ciao wiadomoci\n"
+"Ciao cytowanej wiadomoci\n"
+"Ciao wiadomoci bez sygnatury\n"
+"Ciao cytowanej wiadomoci bez sygnatury\n"
+"Literalny %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Literalny backslash\n"
+"Literalny znak zapytania\n"
+"Literalny nawias klamrowy otwierajcy\n"
+"Literalny nawias klamrowy zamykajcy"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Wybr czcionki"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Dowizania klawiszy"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Wybierz ustawienia dowiza klawiszy.\n"
+"Mona rwnie zmieni kady skrt klawiaturowy w menu\n"
+"naciskajc klawisze gdy kursor myszy znajduje si nad elementem."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Domylny"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Dawny Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Ustawienia nag鞄wka uytkownika"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Nag鞄wki uytkownika"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Brak nazwy nag鞄wka."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Usu nag鞄wek"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Czy naprawd chcesz usun掩 ten nag鞄wek?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Tworzenie okna ustawie wywietlania nag鞄wka\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Ustawienia wywietlania nag鞄wka"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Nazwa nag鞄wka"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Wywietlone nag鞄wki "
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Ukryte nag鞄wki"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Wywietl wszystkie nieokrelone nag鞄wki"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Odczytywanie konfiguracji wywietlania nag鞄wkw...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Zapisywanie konfiguracji wywietlania nag鞄wkw...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Taki nag鞄wek ju wystpuje."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "UStawienia filtra"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "Gra"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "D鶻"
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Kopiuj..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Usu regu滑"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Naprawd chcesz usun掩 t regu滑?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Usu regu滑"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Ukryte nag鞄wki"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Nag鞄wek"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Wiadomo倶"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "zawiera"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "nie zawiera"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "W d鶻"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Kopiuj..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Nie odbieraj"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Usu katalog"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Uwagi"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Ustaw kolory wiadomoci"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Zaznacz/Zaznacz jako prz_eczytane"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Przeka jako za咳cznik"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Prze_kieruj"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Wykonaj"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Katalog"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adres"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Nag鞄wek"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Nag鞄wek"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Nag鞄wek"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Nie podano odbiorcy."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Nie ustawiono polecenia."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Nie okrelone Przeznaczenie."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Nie ustawiono polecenia."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: brak pliku\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Waciwoci katalogu"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Oglne"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Zwyke"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Nie wywietlaj [...] lub (...) na pocztku tematu przy podsumowaniu"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Usu [...] lub (...) z pocztku tematu przy odpowiedzi"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Stosowane take do podkatalogw"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "uycie take przy odpowiadaniu"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Adres zwrotny:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Zaznacz"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Za咳cznik"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Temat"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Data"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Numer"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Tworzenie okna ustawie kolumn podgldu...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Ustawienia wywietlanych elementw podsumowania"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Wybierz pozycje wywietlane w widoku podsumowania.\n"
+"Mona zmieni ich kolejno倶 przyciskami Gra / D鶻 lub przecigajc elementy."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Dostpne elementy"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Wywietlone elementy"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Przywr黽 domylne "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nazwa szablonu"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Rejestruj"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Zastp "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symbole "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Zarejestrowane szablony"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Szablony"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Szablon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "B咳d formatu szablonu."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Usu szablon"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Czy naprawd chcesz usun掩 ten szablon?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmine_get_text_content(): B咳d konwersji kodu.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "nie mona otworzy pliku zaznacze\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "nie mona pobra wiadomoci %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "B咳d wysyania wiadomoci %d z kolejki.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "B滑dny wiersz polecenia wydruku: \"%s\"\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Stan"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Tworzenie dialogu postpu...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "b咳d podczas odbierania danych.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Nie mona zapisa do pliku.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Podpis nie zweryfikowany"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Nie znaleziono podpisu"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Poprawny podpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "ZY podpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Brak klucza publicznego dla sprawdzenia podpisu"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "B咳d podczas sprawdzania podpisu"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "R鷽ne wyniki dla podpisw"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "B咳d: Nieznany stan"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Poprawny podpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "NIEPOPRAWNY podpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Nie mona znale惹 ID uykownika dla tego klucza"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " jako \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Podpis wykonano %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Odcisk klucza: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Wybierz klucz dla `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Zbieranie informacji dla \"%s\" ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Wybierz klucze"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID klucza"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Warto倶"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Dodaj klucz"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Wprowad innego uytkownika lub ID klucza:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Uszkodzony nag鞄wek wiadomoci w kolejce.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Pod咳czanie"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "1czenie z serwerem SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Wysyanie HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Uwierzytelnianie"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Wysyanie wiadomoci..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Wysyanie EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Wysyanie MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Wysyanie"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Wysyanie RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Wysyanie DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Wychodzenie..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Wysyanie wiadomoci (%d / %d)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Wysyanie wiadomoci"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "B咳d podczas wysyania wiadomoci."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"B咳d podczas wysyania wiadomoci:\n"
+".%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Ustawienia skrzynki"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Najpierw naley wybiera pooenie skrzynki.\n"
+"W przypadku posiadania jej, mona uy istniejcej\n"
+"skrzynki w formacie MH.\n"
+"W przypadku braku pewnoci, naley wybra OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Sprawdzanie podpisu"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s od \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH niedostpna\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "nieprawidowa odpowied SMTP\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "wystpi b咳d w sesji SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Tworzenie okna rda...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "rdo wiadomoci"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Wywietlanie rda %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - rdo"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 niedostpny\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 dostpny\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 niedostpny\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 dostpny\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Niedostpna metoda SSL\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Nieznana metoda SSL *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "B咳d tworzenia kontekstu ssl\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "B咳d po咳czenia SSL (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Po咳czenie SSL z uyciem %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Ceryfikat serwera:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr "Temat: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Nadawca: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Wyszukaj wiadomoci"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Automatyczne ustawianie nastpujcych adresw"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Ciao:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Wszystkie pasujce"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Osignito pocztek listy; zacz掩 od koca?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Osignito koniec listy; zacz掩 od pocztku?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Odpowied_z"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Odpowied_z/wszystki_m"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Odpowied_z/nadawc_y"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Odpowied_z/_licie dyskusyjnej"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Przenie..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopiuj..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Zaznacz"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Zaznacz/_Zaznacz"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Zaznacz/_Odznacz"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Zaznacz/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Zaznacz/Zaznacz jako niep_rzeczytane"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Zaznacz/Zaznacz jako prz_eczytane"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Zaznacz/Zaznacz wszystkie jako prz_eczytane"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Kolor etykiety"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Prz_eedytuj"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Dodaj nadawc do _ksi運ki adresowej"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Widok/rd_o"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Widok/Wszystkie na_g鞄wki"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Drukuj..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nr"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Tworzenie widoku podsumowania...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Znacznik procesu"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "brak niektrych znacznikw, czy wykona ?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Skanowanie katalogu (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Nie ma wicej nieprzeczytanych wiadomoci"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr ""
+"Nie znaleziono nieprzeczytanych wiadomoci.\n"
+"Czy rozpocz掩 wyszukiwanie od koca?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Brak nieprzeczytanych wiadomoci."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr ""
+"Nie znaleziono nieprzeczytanych wiadomoci.\n"
+"Czy przej倶 do nastpnego folderu?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Szukaj ponownie"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Nie ma wicej nowych wiadomoci"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr ""
+"Nie znaleziono nowych wiadomoci.\n"
+"Czy rozpocz掩 wyszukiwanie od koca?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Brak nowych wiadomoci"
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr ""
+"Nie znaleziono nowych wiadomoci.\n"
+"Czy przej倶 do nastpnego folderu?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Nie ma wicej zaznaczonych wiadomoci"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr ""
+"Nie znaleziono zaznaczonych wiadomoci.\n"
+"Czy rozpocza wyszukiwanie od koca?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Brak zaznaczonych wiadomoci"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr ""
+"Nie znaleziono zaznaczonych wiadomoci.\n"
+"Czy rozpocz掩 wyszukiwanie od pocztku?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Nie ma wicej etykietowanych wiadomoci"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr ""
+"Nie znaleziono etykietowanych wiadomoci.\n"
+"Czy rozpocz掩 wyszukiwanie od koca?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Brak etykietowanych wiadomoci."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr ""
+"Nie znaleziono etykietowanych wiadomoci.\n"
+"Czy rozpocz掩 wyszukiwanie od pocztku?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "1czenie wiadomoci wg tematu..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d usunito"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d przeniesiono"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d skopiowano"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " element(w) wybrany(o)"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nowych, %d nieprzeczytanych, razem %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nowych, %d nieprzeczytanych, %d razem"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sortowanie podsumowania..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tUstawianie podsumowania z danych wiadomoci..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Ustawianie podsumowania z danych wiadomoci..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Zapisywanie cache podsumowania (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Bez daty)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Wiadomo倶 %d zaznaczona\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Wiadomo倶 %d zaznaczona jako przeczytana\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Wiadomo倶 %d zaznaczona jako nieprzeczytana\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Wiadomo倶 %s/%d ustawiona do usunicia\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Usu wiadomo倶"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Czy naprawd chcesz usun掩 wiadomoci z kosza?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Kasowanie powielonych wiadomoci..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Wiadomo倶 %s/%d niezaznaczona\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Wiadomo倶 %d ustawiona do przesunicia do %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Folder docelowy taki sam jak bie娠cy."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Wiadomo倶 %d ustawiona do kopiowania do %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Folder docelowy jest taki sam jak bie娠cy."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Wybieranie wszystkich wiadomoci..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "B咳d podczas przetwarzania wiadomoci."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Tworzenie wtkw..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Odwtkowanie .."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Odwtkowanie w celu wykonania..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrowanie..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtowanie..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr ""
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "plik %s ju istnieje\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Tworzenie widoku tekstowego...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Ta wiadomo倶 nie moe zosta wywietlona.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "By zapisa t cz蟠, rozwi menu kontekstowe "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "prawym przyciskiem i wybierz \"Zapisz jako...\","
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"lub nacinij \"y\".\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "By wywietli cz蟠 jako wiadomo倶 tekstow wybierz"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"\"Wywietl jako tekst\" lub nacinij klawisz \"t\".\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "By otworzy t cz蟠 w zewntrznym programie wybierz"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Otwrz' lub `Otwrz z...',"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "lub kliknij podwjnie, lub w rodek przycisku,"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "lub nacinij klawisz \"l\"."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Ten podpis nie zosta jeszcze sprawdzony.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "By to sprawdzi, rozwi menu kontekstowe prawym \n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "przyciskiem myszy i wybierz \"Sprawd podpis\".\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "b咳d zapisu do %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Nie mona otworzy pliku %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normalny)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (autoryzacja APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Usu _skrzynk"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Usu konto _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Usu konto _news"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Wiadomo倶/Wy_lij"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "_Wiadomo倶/P_odpisz"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "brak wiadomoci w lokalnej skrzynce.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Katalog Spool"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Wybierz... "
+
+#~ msgid "Condition"
+#~ msgstr "Warunek"
+
+#~ msgid "Keyword"
+#~ msgstr "Sowo kluczowe"
+
+#~ msgid "Destination"
+#~ msgstr "Przeznaczenie"
+
+#~ msgid "Use regex"
+#~ msgstr "Uyj wyraenia regularnego"
+
+#~ msgid "Registered rules"
+#~ msgstr "Zarejestrowane reguy"
+
+#~ msgid "(none)"
+#~ msgstr "(aden)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Pozycja nie zapisana"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "Pozycja nie zostaa zapisana. Zamkn掩?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "B滑dne polecenie otwarcia URI : '%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Zapamitane dane s uszkodzone\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Utwrz regu滑 filtrowania"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Utwrz regu滑 filtrowania/_Automatycznie"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Utwrz regu滑 filtrowania/Uywajc '_Od'"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Utwrz regu滑 filtrowania/Uywajc '_Do'"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Utwrz regu滑 filtrowania/Uywajc '_Temat'"
+
+#~ msgid "Queueing"
+#~ msgstr "Kolejkowanie"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Wystpi b咳d podczas wysyania wiadomoci.\n"
+#~ "Czy wstawi t wiadomo倶 do kolejki?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Kolejkowanie wiadomoci, ktrych nie dao si wysa"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Wykonaj"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_Wybierz wszystkie"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Wybierz w_tek"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "nie mona ustawi grupy: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "wiadomo倶 nie moe zosta odebrana\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 00000000..a1141788
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,7004 @@
+# Portuguese translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Andr Casteliano <digitalcoder@users.sourceforge.net>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2002-07-15 13:06-0300\n"
+"Last-Translator: Andr Casteliano <digitalcoder@users.sourceforge.net>\n"
+"Language-Team: Andr Casteliano <digitalcoder@users.sourceforge.net> Isaas "
+"V. Prestes <isix@uol.com.br> Andr Lus Lopes <andrelop@ig.com.br> Debian-BR "
+"<debian-l10n-portuguese@lists.debian.org> Gustavo Noronha Silva <kov@debian."
+"org>\n"
+"MIME-Version: (null)\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Sobre"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr "GPGME copyright 2001 por Werner Koch <dd9jn@gnu.org>\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Este programa software livre; pode redistribu-lo ou modific-lo \n"
+"de acordo com os termos da GPL (GNU General Public License) publicada \n"
+"pela Free Software Foundation; tanto a verso 2, ou (opcionalmente) \n"
+"qualquer verso posterior.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Este programa distribuido com a esperana de que seja til, mas SEM \n"
+"NENHUMA GARANTIA; sem qualquer garantia implcita de COMERCIALIDADE ou \n"
+"ADEQUA巴O PARA ALGUM PROPSITO PARTICULAR. Veja a Licena Pblica Geral \n"
+"GNU para maiores detalhes.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Voc deve ter recebido uma cpia da GNU General Public License junto com "
+"este \n"
+"programa; caso no, escreva para a Free Software Foundation, Inc., \n"
+"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Aceitar"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lendo as configura苺es de cada conta...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Texto encontrado: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Por favor feche todas as janelas de composi艫o antes de editar as contas."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Abrindo janela de edi艫o de conta...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Criando janela de edi艫o de conta...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Editar contas"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Mensagens novas sero pegas nessa ordem. Marque as caixas\n"
+"na coluna `G' para habilitar essa caixa no `Baixar tudo'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nome"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Servidor"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Adicionar"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Editar"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Apagar "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Abaixo"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Acima"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Marcar como conta padro "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Fechar"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Apagar conta"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Voc realmente deseja apagar esta conta?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Sim"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+No"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "No foi possvel ler o arquivo de mensagem."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "No foi possvel obter parte da mensagem."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "No foi possvel obter parte da mensagem multi-partes."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"A a艫o selecionada no pode ser usada na mensagem de composi艫o\n"
+"porque contm %%f, %%F ou %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"O comando no pde ser iniciado. Cria艫o do pipe falhou.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"No foi possvel executar o comando a seguir:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Rodando: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Terminou: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Entrada/sada das A苺es"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Enviar "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Abortar"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Digite o comando de impresso:\n"
+"(`%s' ser sustitudo pelo arquivo)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Digite o comando de impresso:\n"
+"(`%s' ser sustitudo pelo arquivo)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Adicionar ao Livro de endereos"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Endereo"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Notas"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Selecione Pasta do Livro de Endereos"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Arquivo"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Arquivo/Novo _Livro"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Arquivo/Novo _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Arquivo/Novo _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Arquivo/Novo _Servidor"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Arquivo/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Arquivo/_Editar"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Arquivo/_Apagar"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Arquivo/_Salvar"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Arquivo/_Fechar"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Endereo"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Endereo/Novo _Endereo"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Endereo/Novo _Grupo"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Endereo/Nova _Pasta"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Endereo/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Endereo/_Editar"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Endereo/_Apagar"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Ferramentas"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Ferramentas/Importar arquivo _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Ajuda"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Ajuda/_Sobre"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Novo _Endereo"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Novo _Grupo"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nova _Pasta"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Editar"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Apagar"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Endereo de e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Livro de endereos"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Apagar"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Procurar"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Para:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Apagar endereo(s)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Apagar realmente o(s) endereo(s)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "No"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Voc quer apagar a pasta E todos os endereos em `%s' ?\n"
+"Caso apague somente a pasta, os endereos sero movidos para a pasta pai."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Pasta apenas"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Pasta e Endereos"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Apagar realmente `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Novo usurio, no foi possvel salvar arquivo de ndice."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Novo usurio, no foi possvel salvar arquivos de livro de endereos."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Livro de endereos antigo convertido com sucesso."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Livro de endereos antigo convertido,\n"
+"no foi possvel salvar o arquivo de ndice de endereos "
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"No foi possvel converter livro de endereos,\n"
+"mas arquivos de livro de endereos vazios foram criados."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"No foi possvel converter livro de endereos,\n"
+"no foi possvel criar novos arquivos de livro de endereos."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"No foi possvel converter livro de endereos\n"
+"e no foi possvel criar novos arquivos de livro de endereos."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Erro de converso de livro de endereos"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Converso de Livro de endereos"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Erro no Livro de endereos"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "No foi possvel ler o ndice de endereos."
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Livro de endereos antigo convertido, no foi possvel salvar novo arquivo "
+"de indce de endereos."
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"No foi possvel converter o livro de endreos, mas arquivos de livro de "
+"endereos vazios foram criados."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"No foi possvel connverte o livro de endereos, no foi possvel criar "
+"novos arquivos de livro de endereos."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"No foi possvel converter o livro de endereos e no foi possvel criar "
+"novos arquivos de livro de endreos."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Erro de converso de livro de endereos"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Converso de Livro de endereos"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interface"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Livro de Endereos"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Pessoa"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Endereo de e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupo"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Pasta"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Servidor LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Endereos comuns"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Endereos pessoais"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notifica艫o"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Aviso"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Erro"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Criando a tela de alerta...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Mostrar essa mensagem da prxima vez"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Laranja"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Vermelho"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Azul cu"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Azul"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Verde"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Marrom"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Nenhuma"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Adicionar"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Remover"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/_Propriedades..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Arquivo/_Salvar"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Mensagem/Enviar _depois"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Mensagem/Salvar na pasta rascunho"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Mensagem/Salvar e _continuar editando"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Arquivo/_Anexar arquivo"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Arquivo/_Inserir arquivo"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Arquivo/Inserir as_sinatura"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Editar/_Desfazer"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Editar/_Refazer"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Editar/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Editar/_Cortar"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Editar/C_opiar"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Editar/Co_lar"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Editar/Colar como ci_ta艫o"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Editar/_Selecionar tudo"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Editar/_Avanado"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Editar/_Avanado/Mover um caractere para trs"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Editar/_Avanado/Mover um caractere para frente"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Editar/_Avanado/Mover uma palavra para a trs"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Editar/_Avanado/Mover uma palavra para frente"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Editar/_Avanado/Mover para o incio da linha"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Editar/_Avanado/Mover para o fim da linha"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Editar/_Avanado/Mover para a linha anterior"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Editar/_Avanado/Mover para a prxima linha"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Editar/_Avanado/Apagar um caractere para trs"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Editar/_Avanado/Apagar um caractere para frente"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Editar/_Avanado/Apagar uma palavra para trs"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Editar/_Avanado/Apagar uma palavra para frente"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Editar/_Avanado/Apagar linha"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Editar/_Avanado/Apagar at o fim da linha"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Editar/_Quebrar pargrafo atual"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Editar/Quebrar todas as _linhas grandes"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Editar/C_opiar"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/E_xibir"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/E_xibir/_Para"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/E_xibir/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/E_xibir/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/E_xibir/_Responder para"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/E_xibir/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/E_xibir/_Seguir respondendo"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/E_xibir/_Rgua"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/E_xibir/_Anexo"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Ferramentas/_Livro de endereos"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Ferramenta/_Modelo"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Ferramentas/_A苺es"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Ferramentas/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Editar/Editar com editor e_xterno"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Ferramentas/_A苺es"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Mensagem/_Encriptar"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: o arquivo no existe\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "No foi possvel obter o texto\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Erro no formato de marca de cita艫o."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Erro no formato de mensagem de resposta/encaminhada."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "O arquivo %s no existe\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "No foi possvel especificar o tamanho de %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "O arquivo %s est vazio."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "No foi possvel ler %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Mensagem: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "No foi possvel obter alguma(s) parte(s) dessa mensagem."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Editado]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Compondo mensagem%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Compondo mensagem%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Destinatrio no especificado."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Enviar"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Assunto vazio. Enviar assim mesmo?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "no pude obter a lista de destinatrios."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Conta para envio de mensagem no est especificada.\n"
+"Por favor selecione uma conta de e-mail antes de enviar."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Ocorreu um erro enquanto tentava postar a mensagem para %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "No foi possvel armazenar a mensagem na caixa de sada."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "No foi possvel obter nenhuma chave associada ao ID Selecionado '%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "No foi possvel modificar as permisses do arquivo\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"No foi possvel converter o cdigo de caracteres da mensagem.\n"
+"Enviar assim mesmo?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "no foi possvel escrever o cabealho\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "no posso remover a mensagem antiga\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "colocando mensagem na fila...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "no foi possvel encontrar a pasta da fila\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "No foi possvel por a mensagem na fila\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Message-ID gerado: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Criando janela de composi艫o...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tipo MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Tamanho"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "De:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Enviar mensagem"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Enviar depois"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Por na 'fila de sada' e enviar depois"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Rascunho"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Salvar na pasta Rascunho"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Inserir"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Inserir arquivo"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Anexar"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Anexar arquivo"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Assinatura"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Inserir assinatura"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Editar com um editor externo"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Quebra de linha"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Quebrar todas as linhas grandes"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Tipo MIME invlido."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "O arquivo no existe ou est vazio."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Propriedades"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codifica艫o"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Caminho"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nome do arquivo"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Linha de comando do editor externo invlida: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"O editor externo est ativo.\n"
+"Deseja matar o processo?\n"
+"Id. do grupo do processo : %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Terminado grupo de processo id.: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Arquivo temporrio: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Compositor: entrada para monitorar processo\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "No foi possvel executar o editor externo\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "No foi possvel gravar o arquivo\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Fallhou ao ler o pipe\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "No foi possvel por a mensagem na fila."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Selecionar arquivo"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Descartar mensagem"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Esta mensagem foi modificada. Deseja descart-la ?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Descartar"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "como rascunho"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Quer aplicar o modelo `%s'?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Aplicar Modelo"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Substituir"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Editar endereo"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Adicionar nova pessoa"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Editar detalhes da pessoa"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Endereo de e-mail no especificado."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Um Nome e um Valor devem ser informados"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Editar dados pessoais"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Exibir Nome"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "ltimo Nome"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Primeiro Nome"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Apelido"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Endereo de e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Apelido"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Mover para cima"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Mover para Baixo"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modificar"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Limpar"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valor"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Dados Bsicos"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributos de Usurio"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "O arquivo parece estar OK."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "O arquivo no parece estar em um formato de livro de endereos vlido."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "No foi possvel ler o arquivo"
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Editar Livro de Endereos"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Verificar Arquivo "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Arquivo"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Adicionar Novo Livro de endereos"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Um Nome de Grupo deve ser informado."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Editar Dados do Grupo"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nome do Grupo"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Endereos no Grupo"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Endereos Disponveis"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"Mover endreos de e-mail para ou a partir grupos com as setas dos botes"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Editar Detalhes de Grupo"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Adicionar Novo Grupo"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Editar pasta"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Nome da nova pasta:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nova pasta"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Digite o nome da nova pasta:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "O arquivo no parece estar no formato JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Selecionar Arquivo JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Editar entrada JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Item(s) de endereo e e-mail adicionais"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Adicionar nova entrada JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Conectado ao servidor com sucesso"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "No foi possvel conectar ao servidor"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Editar Servidor LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nome da mquina"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Porta"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Conferir Servidor "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Procurar Base"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Critrio de Procura"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Recomear "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Ligar DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Senha da Liga艫o"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (segundos)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Mximo de Entradas"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Bsicas"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Extendido"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Adicionar Novo Servidor LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Editar LDAP - Selecione Base de Procura"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Base(s) de Procura disponvel(is)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"No foi spossvel ler a(s) Base(s) de Procura do servidor - por favor defina "
+"manualmente"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "O arquivo no parece estar no formato vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Selecionar Arquivo vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Editar Entrada vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Adicionar Nova Entrada vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportar"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Especifique a pasta destino e o arquivo mbox"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Diretrio fonte:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Arquivo a exportar:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "Selecionar..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Selecione o filtro de exporta艫o"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "falhou ao gravar a configura艫o no arquivo\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Selecione uma pasta"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Caixa de Entrada"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Enviadas"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Fila de sada"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Lixeira"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Rascunhos"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NovaPasta"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' no pode ser usado no nome da pasta."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "A pasta `%s' j existe."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "no foi possvel criar a pasta `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Criar _nova pasta..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Renomear pasta..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Apagar pasta"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Esvaziar lixeira"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Buscar novas mensagens"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/_Atualizar rvore de pastas"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Procurar mensagens..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "No h mensagens no lidas."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Assinar grupo de notcias..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Eliminar grupo de notcias"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Criando visualizador de pasta...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nova"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "No lido"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Configurando informa苺es da pasta...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Configurando informa苺es da pasta..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Revisando pasta %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Revisando pasta %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "/_Atualizar rvore de pastas"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Atualizando visualizador de pasta..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Atualizando visualizador de pasta..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Revisando todas as rvores de pastas..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Checar novas mensagens em todas as pastas..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Pasta %s selecionada\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Enviando mensagem"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Ocorreu um erro enquanto tentava postar a mensagem para %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Insira o nome da nova pasta:\n"
+"(se voc quer criar uma pasta para armazenar subpastas.\n"
+" adicione `/' no final do nome)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Novo nome para `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Renomear pasta"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Todas as pastas e mensagens sob `%s' sero apagados.\n"
+"Confirma a excluso?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Apagar pasta"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "no foi possvel excluir a pasta `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Esvaziar lixeira"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Limpar todas as mensagens na lixeira ?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Realmente remover a caixa de correio `%s' ?\n"
+"(As mensagens NO so apagadas do disco)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Remover caixa de correio"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Realmente apagar conta IMAP4 `%s' ?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Apagar conta IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Realmente apagar o grupo de notcias `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Apagar grupo de notcias"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Realmente apagar o grupo de notcias `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Apagar conta de grupo de notcias"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Assinar grupo de notcias"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Selecionar grupo de notcias para assinar."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Achar grupos:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr "Procurar "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nome do Grupos de Notcias:"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Mensagens"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tipo"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderado"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "somente para leitura"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "desconhecido"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "No foi possvel obter a lista de grupos de notcias."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Feito."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d grupos de notcias recebidos (%s lidos)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Grupos de notcias:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Assunto:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Criando visualizador de cabealhos...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Sem remetente)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Sem assunto)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Criando visualizador de imagem...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "No foi possvel carregar a imagem."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "A conexo IMAP4 com %s:%d terminou. Reconectando...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "criando conexo IMAP4 com %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "No foi possvel iniciar sesso TLS.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "no posso atribuir flags 'apagado' : %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "no posso eliminar\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "no posso atribuir flags 'apagado': 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "no posso selecionar pasta: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Arquivo de marcas no encontrado.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "ocorreu um erro ao obter LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "No foi possvel criar '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "no foi possvel criar '%s' em baixo da INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "no posso criar caixa de correio: LIST falhou\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "no posso criar caixa de correio\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "no possvel renomear caixa de correio: %s para %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "no posso apagar caixa de correio\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "No foi possvel obter o 'envelope'\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "Ocorreu um erro ao obter 'envelope'\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "no foi possvel realizar o parse no envelope: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "No foi possvel se conectar ao servidor IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "No foi possvel estabelecer uma sesso IMAP4 com: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "No foi possvel obter o 'envelope'\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "no posso selecionar pasta: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Mtodo de Autentica艫o"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Falha ao logar no servidor IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "no foi possvel copiar a mensagem %s para %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(enviando arquivo...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "no foi possvel salvar a mensagem %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "no posso copiar %d para %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "erro no comando imap: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "erro no comando imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "erro no comando imap: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "o iconv no pode converter UTF-7 para %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "o iconv no pode converter %s para UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importar"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Especifique o arquivo mbox e a pasta de destino."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importando arquivo:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Diretrio de destino:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Selecionar arquivo a importar"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr ""
+"Por favor especifique o nome do livro de endereos e o arquivo para importar."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Selecione e renomeie os nomes dos campos LDIF para importar."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Arquivo importado."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Por favor selecione um arquivo."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Um nome deve ser informado para o Livro de Endereos."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Erro lendo campos do LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Arquivo LDIF importado com sucesso."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Selecione arquivo LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nome do arquivo"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Campo LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nome do Atributo"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atributo"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Selecione"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Livro de Endereos :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nome do arquivo :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Registros :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importar arquivo LDIF para o Livro de Endereos"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Anterior"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Prxima"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informa艫o do Arquivo"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributos"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Terminar"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Obtendo novas mensagens"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Aguardando"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Recuperando"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Concludo (%d mensagen(s) (%s) recebida(s))"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Feito (No h mensagens novas)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Conexo falhou"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autentica艫o falhou"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Travado"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (segundos)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Concludo (%d nova(s) mensagem(ns))"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Concludo (No h mensagens novas)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Alguns erros aconteceram ao baixar os emails."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "obtendo novas mensagens da conta %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Recuperando novas mensagens"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Conectando ao servidor POP3: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "No foi possvel se conectar ao servidor POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autenticando..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Obtendo Mensagens de %s at %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Obtendo o nmero de novas mensagens (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Obtendo o nmero de novas mensagens (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Obtendo o nmero de novas mensagens (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Obtendo o nmero de novas mensagens (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Apagando mensagem %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Saindo"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Baixando mensagem (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Concludo (%d mensagen(s) (%s) recebida(s))"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Conexo falhou"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Ocorreu um erro enquanto as mensagens eram processadas."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Ocorreu um erro enquanto as mensagens eram processadas."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "No h espao disponvel no disco."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "No foi possvel gravar o arquivo."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "erro de socket."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Caixa de correio est travada."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Caixa de correio est travada."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Mtodo de Autentica艫o"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Mtodo de Autentica艫o"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Incorpora艫o cancelada\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Obtendo novas mensagens de %s at %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Insira a senha para %s em %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Informe a senha"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Log do protocolo"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"O arquivo `%s' j existe.\n"
+"No foi possvel criar a pasta."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread no suportada pela glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG no est instalado adequadamente.\n"
+"Suporte a OpenPGP desabilitado."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uso: %s [OP巴O]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [endreo] abre janela de composi艫o"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive recebe novas mensgens"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all recebe novas mensagens de todas as contas"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send envia todas as mensagens da fila"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status mostra o nmero total de mensagens"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status mostra o nmero total de mensagens"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug modo debug"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help exibe esta ajuda e sai"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version mostra informa艫o de verso e sai"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Ainda h mensagens sendo escritas. Deseja sair?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Mensagens enviadas para a fila"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Algumas mensagens no enviadas esto na fila. Sair agora?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "outra cpia do Sylpheed j est sendo executada.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Arquivo/_Pasta"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "_Arquivo/_Pasta/Criar _nova pasta ..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Arquivo/_Pasta/_Renomear pasta..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Arquivo/_Pasta/A_pagar pasta"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "_Arquivo/_Adicionar caixa de correio..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "_Arquivo/_Adicionar caixa de correio..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Remover _caixa de correio"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Arquivo/_Pasta"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Buscar novas mensagens"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Arquivo/_Checar novas mensagens em todas as pastas"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Atualizar rvore de pastas"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Arquivo/I_mportar arquivo mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Arquivo/_Exportar para arquivo mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Arquivo/Esvaziar _lixeira"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Arquivo/_Salvar como..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Arquivo/Im_primir"
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Arquivo/_Inserir arquivo"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Arquivo/Sai_r"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Editar/_Selecionar t_hread"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Editar/_Encontrar na mensagem atual..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Editar/_Procurar mensagens..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/E_xibir/_Mostrar ou esconder"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/E_xibir/_Mostrar ou esconder/_rvore de pastas"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/E_xibir/_Mostrar ou esconder/Ver _Mensagens"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/E_xibir/_Mostrar ou esconder/_Barra de Ferramentas"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/E_xibir/_Mostrar ou esconder/_Barra de Ferramentas/cones _e texto"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/E_xibir/_Mostrar ou esconder/_Barra de Ferramentas/_cones"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/E_xibir/_Mostrar ou esconder/_Barra de Ferramentas/_Texto"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/E_xibir/_Mostrar ou esconder/_Barra de Ferramentas/_Nenhum"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/E_xibir/_Mostrar ou esconder/Barra de _estado"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/E_xibir/_rvore de pastas separadas"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/E_xibir/Separar m_ensagens"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/E_xibir/_Ordena艫o"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/E_xibir/_Ordenar/por _nmero"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/E_xibir/_Ordenar/por _tamanho"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/E_xibir/_Ordenar/por _data"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/E_xibir/_Ordenar/por _remetente"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/E_xibir/_Ordenar/por _destinatrio"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/E_xibir/_Ordenar/por as_sunto"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/E_xibir/_Ordenar/por _etiqueta de cor"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/E_xibir/_Ordenar/por _marca"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/E_xibir/_Ordenar/por _no lidas"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/E_xibir/_Ordenar/por _anexos"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/E_xibir/_Ordenar/_No ordenar"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/E_xibir/_Ordenar/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/E_xibir/_Ordenar/Crescente"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/E_xibir/_Ordenar/Decrescente"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/E_xibir/_Ordenar/Atrair _por assunto"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/E_xibir/Viso de th_read"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/E_xibir/E_xpandir todas as threads"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/E_xibir/_Fechar todas as threads"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/E_xibir/Elementos _visveis..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/E_xibir/Ir _Para"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/E_xibir/Ir _Para/Mensagem a_nterior"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/E_xibir/Ir _Para/_Prxima mensagem"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/E_xibir/Ir _Para/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/E_xibir/Ir _Para/Anterior no _lida"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/E_xibir/Ir _Para/Prxima no l_ida"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/E_xibir/Ir _Para/Mensagem n_ova anterior"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/E_xibir/Ir _Para/Prxima mensagem _nova"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/E_xibir/Ir _Para/Mensagem marcada a_nterior"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/E_xibir/Ir _Para/Prxima mensagem ma_rcada"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/E_xibir/Ir _Para/Mensagem eti_quetada anterior"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/E_xibir/Ir _Para/Prxima mensagem etique_tada"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/E_xibir/Ir _Para/Outra _pasta..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/E_xibir/Conjunto de ca_racteres/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/E_xibir/Conjunto de ca_racteres"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/E_xibir/Conjunto de ca_racteres/_Autodetectar"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/E_xibir/Conjunto de ca_racteres/ASCII de 7 bits (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/E_xibir/Conjunto de ca_racteres/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/E_xibir/Conjunto de ca_racteres/Europa Ocidental (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/E_xibir/Conjunto de ca_racteres/Europa Ocidental (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/E_xibir/Conjunto de ca_racteres/Europa Central (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/E_xibir/Conjunto de ca_racteres/_Bltico (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Bltico (ISO-8859-4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Grego (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Turco (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Cirlico (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Cirlico (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Cirlico (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Cirlico (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Japons (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Japons (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Japons (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Japons (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Chins simplificado (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Chins tradicional (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Chins tradicional (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Chins (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/E_xibir/_Conjunto de ca_racteres/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/E_xibir/Abrir em uma n_ova janela"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/E_xibir/Ver _fonte"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/E_xibir/_Mostrar todos os cabealhos"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/E_xibir/A_tualizar sumrio"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Mensagem"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Mensagem/Ed_itar novamente"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Mensagem/Receber de _todas as contas"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Mensagem/Receber de _todas as contas"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Mensagem/_Cancelar recebimento"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Mensagem/Ed_itar novamente"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Mensagem/Enviar mensagens da _fila"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Mensagem/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Mensagem/Compor _nova mensagem"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Mensagem/_Responder"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Mensagem/_Responder para"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/Mensagem/Responder para/_todos"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Mensagem/Responder para/_quem enviou"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/Mensagem/Responder para/_lista"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Mensagem/Encam_inhar"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Mensagem/Encaminhar como ane_xo"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Mensagem/Redire_cionar"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Mensagem/Mo_ver..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Mensagem/_Copiar..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Mensagem/_Apagar"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Mensagem/_Marcar"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Mensagem/_Marcar/_Marcar"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Mensagem/_Marcar/_Desmarcar"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Mensagem/_Marcar/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Mensagem/_Marcar/Marcar como _no lida"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Mensagem/_Marcar/Marcar como l_ida"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Mensagem/_Marcar/Marcar todas como _lidas"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Mensagem/Ed_itar novamente"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Ferramentas/Adicionar remetente ao Livro de _Endereos"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Ferramentas/_Filtrar mensagens"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Ferramentas/_Filtrar mensagens"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Ferramentas/_Criar regra de filtro"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Ferramentas/_Criar regra de filtro/_Automaticamente"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Ferramentas/_Criar regra de filtro/pelo _remtente"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Ferramentas/_Criar regra de filtro/pelo _destinatrio"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Ferramentas/_Criar regra de filtro/pelo A_ssunto"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Ferramentas/_Apagar mensagens duplicadas"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Ferramentas/E_xecutar"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Ferramentas/_Janela de log"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configura艫o"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configura艫o/_Preferncias comuns..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configura艫o/Configura艫o de _filtros..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Configura艫o/_Modelo..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configura艫o/_A苺es..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configura艫o/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configura艫o/Preferncias da conta _atual..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configura艫o/Criar uma _nova conta..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configura艫o/_Editar contas..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configura艫o/_Mudar conta atual"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Ajuda/_Manual"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Ajuda/_Manual/_Ingls"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Ajuda/_Manual/_Japons"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Ajuda/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Ajuda/_FAQ/_Ingls"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Ajuda/_FAQ/_Alemo"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Ajuda/_FAQ/_Espanhol"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Ajuda/_FAQ/_Francs"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Ajuda/_FAQ/_Italiano"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Ajuda/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Criando janela principal...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "MainWindow: falhou ao alocar cores %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "Pronto.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Sem ttulo"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "nenhuma"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Mudando tipo de separa艫o de janela de %d para %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Esvaziar lixeira"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Limpar todas as mensagens na lixeira ?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Adicionar caixa de correio"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Informe a localiza艫o da caixa de correio.\n"
+"Se uma caixa de correio existente especificada, ela ser\n"
+"mapeada automaticamente."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "A caixa de correio `%s' j existe."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Correio"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"A cria艫o da caixa de correio falhou.\n"
+"Talvez alguns arquivos j existam, ou voc no tem permisso para escrever "
+"l."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Viso de Pastas"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Viso de Mensagens"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Responder"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Responder para todos"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "Res_ponder para/_quem enviou"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "Responder para/_lista"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/En_caminhar"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Encaminhar como ane_xo"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Re_direcionar"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Baixar"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Incorporar mensagens novas"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Baixar tudo"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Incorporar novas mensagens de todas as contas"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Enviar Mensagem(s) da fila"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Escrever"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Escrever nova mensagem"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Responder"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Responder Mensagem"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Responder todas"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Responder para todos"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Encaminhar"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Encaminhar a mensagem"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Apagar a mensagem"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Executar"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Executar os processos marcados"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Prxima mensagem no lida"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferncias"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Preferncias comuns"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Conta"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Preferncias da conta"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Sair"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Sair do programa?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "no possvel gravar no arquivo temporrio\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Obtendo Mensagens de %s at %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "no foi possvel ler o arquivo mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "formato de mbox invlido: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox corrompida: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "no foi possvel abrir o arquivo temporrio\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"Encontrado De sem codificar:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d mensagens encontradas.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "no foi possvel criar o arquivo de trava %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "usar 'flock' em vez de 'file' se for possvel.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "no foi possvel criar %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "o correio est sendo usado por outro processo, aguardando...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "no foi possvel travar %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "tipo de trava invlido\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "no foi possvel destravar %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "no foi possvel zerar o mailbox.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportando mensagens de %s em %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Encontrar na mensagem atual"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Encontrar texto:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Mais./mins."
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Procurar para trs"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Procurar"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Erro na procura"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "String de busca no encontrada."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Incio da mensagem atingido; comear do final?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Fim da mensagem atingido; continuar do incio?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Procura concluda"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Criando visualizador de mensagem...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Salvar como"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Sobrescrever"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Sobrescrever o arquivo existente?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "No foi possvel salvar arquivo `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Digite o comando de impresso:\n"
+"(`%s' ser sustitudo pelo arquivo)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"O comando de impresso invlido:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "no foi possvel copiar a mensagem %s para %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "No foi possvel abrir o arquivo de marcas.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "pastas de origem e destino so idnticas.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copiando mensagem %s%c%d para %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "ltimo nmero no diretrio %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Abrir"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Ab_rir com..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/E_xibir como texto"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Salvar como..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Checar assinatura"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Criando visualizador de MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tipo MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Texto"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Anexos"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Selecione \"Checar assinatura\" para checar"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "No foi possvel gravar alguma(s) parte(s) dessa mensagem"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Abrir com"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Digite o comando de impresso:\n"
+"(`%s' ser sustitudo pelo arquivo)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "O comando do visualizador MIME invlido: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "criando conexo NNTP com %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "A conexo NNTP com %s:%d terminou. Reconectando...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "o artigo %d j est no cache.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "obtendo artigo %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "no foi possvel ler o artigo %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "no foi possvel obter a lista de grupo de notcias\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "no posso postar artigo.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "no foi possvel obter o artigo %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "no foi possvel estabelecer o grupo: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "intervalo de artigos invlido: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "no h novos artigos.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "obtendo xover %d - %d en %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "no foi possvel obter xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "ocorreu um erro ao obter xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "linha xover invlida: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "no foi possvel obter xover\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "ocorreu um erro ao obter xover.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "No foi possvel se conectar com o servidor NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "erro do protocolo: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "erro do protocolo\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Ocorreu um erro quando postando\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Ocorreu um erro enquanto as mensagens eram processadas."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Passphrase"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[sem id de usurio]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sPor favor informe a senha para:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Senha errada! Tente novamente...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Timestamp APOP requerida no encontrada no greeting\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Erro de sintaxe no greeting\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Erro do protocolo POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "linha xover invlida: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Apagando mensagem expirada %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Pulando mensagem %d (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "a caixa de correio est travada\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "no foi possvel iniciar sesso TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "ocorreu um erro na autentica艫o\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Comando"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "ocorreu um erro na autentica艫o\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lendo configura艫o...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Encontrado %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Terminada a leitura da configura艫o.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Configura艫o salva.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Abrindo janela de preferncias da conta...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Conta%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferncias para a nova conta"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Preferncias da Conta"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Criando janela de preferncias da conta...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Receber"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacidade"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avanadas"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nome desta conta"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Marcar como padro"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informa苺es pessoais"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nome completo"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Endereo de e-mail"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organiza艫o"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informa苺es do servidor"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Notcias (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Nenhuma (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Este servidor requer autentica艫o"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Servidor de notcias"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Servidor de recep艫o"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Servidor SMTP (envio)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Usuario"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Senha"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Este servidor requer autentica艫o"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Ao receber, eliminar a(s) mensagem(ns) do servidor"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Remover depois de"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dias"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dias: remover imediatamente)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Receber todas as mensagens no servidor"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Limite de tamanho de recebimento"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrar mensagens ao receber"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Caixa de Entrada Padro"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Mensagens no filtradas sero guardadas nesta pasta)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Mtodo de Autentica艫o"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automtico"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Obter todas' confere novas mensagens nessa conta"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Cabealho"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Adicionar campo de data"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Gerar Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Adicionar cabealho do usurio"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Editar... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autentica艫o"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Autentica艫o SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Se voc deixar essas entradas em branco, o mesmo\n"
+"ID de usurio e senha do recebimento sero usados."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autenticar com POP3 antes de enviar"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Comando"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Estabelecer os seguintes endereos automaticamente"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Responder"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Encriptar mensagems por padro"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Assinar mensagens por padro"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Usar formato ASCII-armored para encripta艫o"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Inserir assinatura de texto puro"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Assinar chave"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Usar chave GnuPG padro"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Selecionar chave atravs de seu endereo de e-mail"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Especificar chave manualmente"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Usurio ou ID da chave:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "No usar SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Utilizar SSL para conexo POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Utilizar comando STARTTLS para iniciar a sesso SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Utilizar SSL para conexo IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Usar SSL para conexo NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Enviar (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Utilizar SSL para conexo SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Especifique a porta SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Especifique a porta POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Especificar a porta IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Especificar a porta NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Especificar nome do domnio"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Servidor de diretrio IMAP"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Colocar mensagens enviadas em"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Colocar mensagens de rascunho em"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Colocar mensagens apagadas em"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Nome da conta no definido."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Endereo de e-mail no especificado."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Servidor SMTP no especificado."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Usurio no especificado."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Servidor POP3 no especificado."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Servidor IMAP4 no especificado."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Servidor NNTP no especificado."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"No recomendado o uso do velho estilo ASCII-armored\n"
+"para mensagens encriptadas. No compatvel com a \n"
+"RFC 3156 - Segurana MIME com OpenPGP."
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Gravando configura苺es das a苺es...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nome do Menu:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Linha de Comando:"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nome do menu:\n"
+" Use / no nome do menu para criar submenus.\n"
+"Linha de comando:\n"
+" Comea com:\n"
+" | para enviar o corpo da mensagem ou sele艫o para o comando\n"
+" > para enviar um texto fornecido pelo usurio para o comando\n"
+" * para enviar texto escondido fornecido pelo usurio para o comando\n"
+" Termina com:\n"
+" | para substituir o corpo da mensagem ou sele艫o com a sada do comando\n"
+" & para todar comandos asncronamente\n"
+" Use %f para o nome do arquivo da mensagem\n"
+" %F para a lista de nomes de arquivo das mensagens selecionadas\n"
+" %p para a parte selecionada da mensagem."
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "Substituir"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr "Ajuda com sintaxe"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "A苺es registradas"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Novo)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Nome do menu no definido."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Dois pontos (':') no so permitidos no nome do menu."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Nome do menu muito longo."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Linha de comando no definida."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Nome do menu e o comando so muito longos."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"O comando\n"
+"%s\n"
+"tem um erro de sintaxe."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Apagar a艫o"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Voc realmente deseja apagar esta a艫o?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Criando janela de preferncias comuns...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferncias comuns"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Cita艫o"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Exibir"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Mensagem"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Outros"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Programa externo"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Usar um programa externo para obter mensagens"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Comando"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Spool local"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorporar do spool"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrar ao incorporar"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Checar nova mensagem"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "a cada"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuto(s)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Checar o correio quando iniciar"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Atualizar todas as pastas locais ao incorporar"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Notcias"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Nmero mximo de artigos para baixar\n"
+"(ilimitado se 0 for especificado)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Usar programa externo para enviar"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Salvar mensagens enviadas na Caixa de sada"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Conjunto de caracteres para enviar"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automtico (Recomendado)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "ASCII de 7 bits (US-ASC_II)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Europeu Ocidental (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Europeu Ocidental (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Europeu Central (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Bltico (ISO-8859-4)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Bltico (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grego (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turco (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirlico (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirlico (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirlico (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirlico (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japons (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japons (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japons (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Chins simplificado (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Chins tradicional (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Chins tradicional (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chins (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Coreano (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Se `Automtico' for selecionado, a melhor codifica艫o\n"
+"para o locale atual ser usada."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "Quebrar antes de enviar"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Separador de assinatura"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Inserir automaticamente"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Executar o editor externo automaticamente"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Nvel de desfazer"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Quebrar mensagens em"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caracteres"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Quebrar quote"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Quebrar na entrada"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Quebrar antes de enviar"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Escolher conta para respostas automaticamente"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Quotar mensagem ao responder"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Boto de responder chama resposta para a lista"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formato de resposta"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Marca de cita艫o"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formato de Mensagem Encaminhada"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Descri艫o dos smbolos "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Fonte"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traduzir cabealhos (como `De:', `Assunto:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Exibir nmero de no lidas prximas ao nome da pasta"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Abreviar newsgroups maiores que"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "letras"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Viso de Sumrio "
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Mostrar remetente na coluna `De' se ele for o mesmo"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Expandir threads"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formato de data"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Elementos visveis no cabealho... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Permitir cores na mensagem"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Exibir alfabetos de 2-bytes e numricos com \n"
+"caracteres ASCII (1-byte)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Exibir cabealho acima da viso da mensagem"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Cabealhos pequenos na visualiza艫o da mensagem"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Linha de espao"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(s)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Deixar espao do cabealho"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Rolagem"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Meia pgina"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Rolagem silenciosa"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Passo"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Redimensionar imagens em anexo"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automaticamente checar assinatura"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Exibir resultado de checagem de assinatura em uma janela popup"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Armazenar senha temporariamente na memria"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Expirado depois"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minuto(s)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Definindo '0' ir guardar a senha para\n"
+" toda a sesso)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Obter entrada quando informando uma passphrase"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Exibir aviso na inicializa艫o se o GnuPG no funciona"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "Nenhum arquivo de mensagem selecionado."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Abrir a primeira mensagem no lida ao abrir uma pasta"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Somente marcar a mensagem como lida quando aberta em uma nova janela"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Ir para Caixa de Entrada depois de receber novas mensagens"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Executar imediatamente enquanto movendo ou apagando mensagens"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Mensagens sero marcadas at a execu艫o\n"
+" se isto estiver desligado)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Dilogo de recep艫o"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Exibir dilogo de recep艫o"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Sempre"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nunca"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "No mostrar dilogo de erro no caso de erros ao receber"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Fechar dilogo de recep艫o quando terminar"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Definir atalhos de teclado... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Comandos externos (%s ser sustituido pelo nome do arquivo)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Navegador Web"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Adicionar endereo para o destino quando clicado duas vezes"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Ao sair"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Confirmar ao sair"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Esvaziar lixeira ao sair"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Pergunte antes de esvaziar"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Avise se existirem mensagens na fila"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "o nome completo do ms abreviado"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "o nome completo do dia da semana"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "o nome do ms abreviado"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "o nome completo do ms"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "a data hora preferida para a localiza艫o atual"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "o nmero do sculo (ano/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "o dia do ms como um nmero decimal"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "a hora como um nmero decimal usando um relgio de 24 horas"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "a hora como um nmero decimal usando um relgio de 12 horas"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "o dia do ano como um nmero decimal"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "o ms como um nmero decimal"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "o minuto como um nmero decimal"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "ou AM ou PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "o segundo como um nmero decimal"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "o dia da semana como um nmero decimal"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "a data preferida para localiza艫o atual"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "os ltimos dois dgitos de um ano"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "o ano como um nmero decimal"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "o zona de tempo ou nome ou abrevia艫o"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Especificador"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Descri艫o"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Exemplo"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Defina as cores de mensagens"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Cores"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Texto Quotado - Primeiro Nvel"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Texto Quotado - Segundo Nvel"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Texto Quotado - Terceiro Nvel"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Liga艫o URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Reaproveitar cores de quote"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Escolher cor para quota艫o nvel 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Escolher cor para quota艫o nvel 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Escolher cor para quota艫o nvel 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Escolher cor para URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Descri艫o dos smbolos"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Data\n"
+"De\n"
+"Nome Completo do Remetente\n"
+"Primeiro Nome do Remetente\n"
+"Iniciais do Remetente\n"
+"Assunto\n"
+"Para\n"
+"CC\n"
+"Grupo de Notcias\n"
+"Message-ID\n"
+"%"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Se x estiver definido, mostra expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Corpo da mensagem\n"
+"Corpo da mensagem citada\n"
+"Corpo da mensagem sem assinatura\n"
+"Corpo da mensagem citada sem assinatura\n"
+"%% literal"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Barra invertida literal\n"
+"Ponto de interroga艫o literal\n"
+"Abre-chave literal\n"
+"Fecha-chave literal"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Sele艫o de fonte"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Atalhos de teclado"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Selecionar os atalhos de teclado.\n"
+"Voc pode tambm modificar o atalho para cada menu\n"
+"pressionando qualquer tecla enquanto coloca o ponteiro\n"
+"do mouse sobre o item."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Padro"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Sylpheed antigo"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Configura艫o de cabealho personalizado"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Cabealhos personalizados"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Nome do cabealho no definido."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Apagar cabealho"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Quer realmente apagar este cabealho?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Criando janela de configura艫o de cabealhos personalizados...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "/E_xibir configura艫o de cabealho"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Nome do cabealho"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Cabealhos mostrados"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Cabealhos escondidos"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Mostrar todos os cabealhos no especificados"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lendo configura艫o para mostrar cabealhos...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Gravando configura艫o para os cabealhos mostrados...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Este cabealho j est na lista."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Configura艫o de filtros"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Para:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Copiar..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Apagar regra"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Quer realmente apagar esta regra?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Apagar regra"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Todos os cabealhos"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Cabealho"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Mensagem"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "contm"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "no contm"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Mover para Baixo"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Copiar..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "No receber"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Apagar servidor de notcias"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Notas"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Defina as cores de mensagens"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Marcar/Marcar como _lida"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Encaminhar como ane_xo"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Re_direcionar"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Executar"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Pasta"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Endereo"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Cabealho"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Cabealho"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Cabealho"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Destinatrio no especificado."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Linha de comando no definida."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Destinatrio no especificado."
+
+#: src/prefs_filter_edit.c:1872
+#, fuzzy
+msgid "Invalid action exists."
+msgstr "Ms invlido\n"
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Linha de comando no definida."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: o arquivo no existe\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Propriedades da Pasta"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Geral"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Aplicar nas subpastas"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "Usar tambm ao responder"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Responder para:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Marca"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Anexo"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Assunto"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "De"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Data"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nmero"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Criando janela de configura艫o da coluna de resumo...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Configura苺es de itens a serem mostrados no resumo"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Selecione os tens a serem mostrados na visualiza艫o resumida. Voc\n"
+"pode modificar a ordem usando as setas pra cima ou para baixo, ou\n"
+"arrastando os itens."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Itens disponveis"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Itens mostrados"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Voltar ao padro "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nome do Modelo"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrar"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Sustituir "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Smbolos "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Modelos registrados"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Modelos"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Modelo"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Erro no formato do modelo"
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Apagar modelo"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Quer realmente apagar este modelo?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Converso de cdigo falhou.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "no foi possvel abrir o arquivo de marcas\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "no posso obter mensagem %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Falha ao enviar a mensagen %d.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "O comando de impresso invlido: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Criando dilogo de progresso...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "ocorreu um erro enquanto os dados eram obtidos.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "No foi possvel gravar no arquivo.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Assinatura no verificada"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Assinatura no encontrada"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Assinatura correta"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "Assinatura ERRADA"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Sem chave pblica para verificar a assinatura"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Erro verificando a assinatura"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Resultados diferentes para assinaturas"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Erro: Status desconhecido"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Assinatura correta de \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Assimanatura ERRADA de \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "No posso encontrar identifica艫o de usurio para esta chave."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr "\t\t\t\t\t\tconhecido como \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Assinatura feita em %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Chave fingerprint: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Por favor selecione a chave para `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Coletando informa艫o para `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Selecione Chaves"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Key ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Valor"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Adicionar chave"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Informe outro usurio ou ID da chave:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Mensagem da fila com cabealho corrompido.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Conectando"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Conectando com o servidor SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Enviando HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autenticando"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Enviando mensagem"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Enviando EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Enviando MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Enviando"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Enviando RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Enviando DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Saindo..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Enviando mensagem (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Enviando mensagem"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Ocorreu um erro ao enviar suas mensagens."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Ocorreu um erro ao enviar suas mensagens."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Configura艫o da caixa de correio"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Primeiro, voc tem de definir a localiza艫o da caixa de correio.\n"
+"Voc pode usar uma cixa de correio existente em formato MH\n"
+"caso voc possua uma.\n"
+"Caso vo no tenha certeza, somente selecione OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Checando assinatura"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s de \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH no disponvel\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "ocorreu um erro na autentica艫o\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Criando janela fonte ...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Fonte da mensagem"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Exibindo a fonte de %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Fonte"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 no disponvel\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 disponvel\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 no disponvel\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 disponvel\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "mtodo SSL no disponvel\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Mtodo SSL desconhecido *ERRO DE PROGRAMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Erro criando contexto SSL\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Conexo SSL falhou (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Conexo SSL usando %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certificado do servidor:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Assunto: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr "Emissor: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Procurar mensagens"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Estabelecer os seguintes endereos automaticamente"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Corpo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Selecionar todos que combinam (match)"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Inico da lista atingido; seguir a partir do final?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Chegou no fim da lista; procurar a partir do comeo?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "Responder para"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "Responder para/_todos"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "Res_ponder para/_quem enviou"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "Responder para/_lista"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/M_over..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copiar..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Marcar"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Marcar/_Marcar"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Marcar/_Desmarcar"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Marcar/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Marcar/Marcar como _no lida"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Marcar/Marcar como _lida"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Marcar/Marcar _todas como lidas"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Cor de _identifica艫o"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Re-_editar"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Adicionar remetente ao Livro de _Endereos"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/E_xibir/_Fonte"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/E_xibir/_Todos os cabealhos"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Imprimir..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "x"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "N"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "No."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Criando visualizador de sumrios...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Procesar marca"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Algumas marcas foram deixadas. Process-las?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Revisando pasta (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "No h mais mensagens no lidas"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nenhuma mensagens no lidas encontrada. Procurar a partir do fim?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "No h mensagens no lidas."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "No h mensagens no lidas. Ir para a prxima pasta?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Procurar novamente"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "No h mais mensagens novas"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Nenhuma mensagens nova encontrada. Procurar a partir do fim?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "No h mensagens novas."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "No h mensagens novas. Ir para a prxima pasta?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "No h mais mensagens marcadas"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "No foram encontradas mensagens marcadas. Procurar a partir do fim?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "No h mensagens marcadas"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "No foram encontradas mensagens marcadas. Procurar a partir do incio?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "No h mais mensagens etiquetadas"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "No foram encontradas mensagens etiquetadas. Procurar a partir do fim?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "No h mensagens etiquetadas."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nenhuma mensagem no lida encontrada. Procurar do incio ?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Agrupando mensagens por assunto..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d apagadas"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d movidas"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d copiadas"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " item(ns) selecionado(s)"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novas, %d no lidas, %d no total (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novas, %d no lidas, %d no total"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Ordenando resumos..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tConfigurando resumo a partir dos dados das mensagens..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Configurando resumo a partir dos dados das mensgens..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Gravando cache de resumo (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Sem data)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Mensagem %d marcada\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Mensagem %d marcada como sendo lida\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Mensagem %d marcada como no lida\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Mensagem %s/%d marcada para dele艫o\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Apagar a(s) mensagem(s)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Quer realmente apagar a(s) mensagem(s) da lixeira?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Apagando mensagens duplicadas..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Mensagem %s/%d est desmarcada\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Mensagem %d marcada para ser movida para %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "O destino o mesmo que a pasta atual."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Mensagem %d est marcada para ser copiada para %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "O destino o mesmo que a pasta atual."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Selecionando todas as mensagens"
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Ocorreu um erro enquanto as mensagens eram processadas."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Construindo a hierarquia..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Desfazendo a hierarquia..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Desfazendo a hierarquia para a execu艫o..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrando..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrando..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "a mensagem %d j est no cache.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "arquivo %s j existe\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Criando visualiza艫o do texto...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "uma mensagem no ser recebida\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Para salvar esta parte, abra o menu contextual com o"
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "boto direito e selecione `Salvar como...' "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ou tecle `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Para ver esta parte como uma mensagem de texto, selecione"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Exibir como texto', ou tecle `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Para abrir esta parte com um programa externo, selecione"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Abrir' ou `Abrir com...'. "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ou duplo-clique, ou clique com o boto do meio, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ou pressione `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Esta assinatura ainda no foi checada.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Para chec-la, abra o menu de contexto com\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "um clique do boto direito e selecione `Checar assinatura'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "Erro ao gravar em %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "No foi possvel abrir %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (autoriz. APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Remover _caixa de correio"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Remover conta _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/_Eliminar grupo de notcias"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Mensagem/_Enviar"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Mensagem/As_sinar"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "no h mensagens no caixa de correio local.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Diretrio de spool"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Abortar a苺es"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "Selecionar..."
+
+#~ msgid "Condition"
+#~ msgstr "Condi艫o"
+
+#~ msgid "Keyword"
+#~ msgstr "Palavra-chave"
+
+#~ msgid "Destination"
+#~ msgstr "Destino"
+
+#~ msgid "Use regex"
+#~ msgstr "Usar exp.reg."
+
+#~ msgid "Registered rules"
+#~ msgstr "Regras registradas"
+
+#~ msgid "(none)"
+#~ msgstr "(nenhuma)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "O comando de abertura de URI invlido: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Dados do cache esto corrompidos\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Criar regra de filtro"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Criar regra de filtro/_Automaticamente"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Criar regra de filtro/pelo _remtente"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Criar regra de filtro/pelo _destinatrio"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Criar regra de filtro/pelo A_ssunto"
+
+#~ msgid "Queueing"
+#~ msgstr "Armazenando"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Ocorreu um erro ao enviar as mensagens.\n"
+#~ "Deseja por esta mensagem na 'Fila de Sada'?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Por na fila os e-mails que falharam"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/E_xecutar"
+
+#~ msgid "/Select _all"
+#~ msgstr "/_Selecionar tudo"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/_Selecionar t_hread"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "no foi possvel estabelecer o grupo: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "uma mensagem no ser recebida\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Mensagem/Receber novas _mensagens"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNo h arquivo de cache\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tLendo cache de sumrios..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "A verso em cache diferente. Descartando-a.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Arquivo de marcas no encontrado.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Verso de marca diferente (%d != %d). Discartando-a.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "No foi possvel abrir o arquivo de marcas para di艫o.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "No foi possvel abrir o arquivo de marcas para grava艫o.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "no foi possvel criar o arquivo de trava %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "pasta vazia\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Somente se uma janela estiver ativa"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Todas as configura苺es prvias para cada pasta sero perdidas.\n"
+#~ "Continuar?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "posi艫o da janela: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Configurando widgets..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Movendo mensagem %s%c%d para %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tMarcando as mensagens..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d nova(s) mensagem(ns)\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "no foi possvel selecionar a caixa de correio %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "obtendo mensagem %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Apagando mensagens no cache %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "\tApagando todas as mensagens no cache... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Contando nmero total de mensagens...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "No foi possvel ler o arquivo de mensagem."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Abrir mensagem quando teclas de cursor so pressionadas no resumo"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Ocorreu um erro enquanto as mensagens eram processadas."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Ocorreram erros ao enviar mensagens da fila."
+
+#~ msgid "No message part selected."
+#~ msgstr "No h parte selecionada na mensagem."
+
+#~ msgid "Predicate"
+#~ msgstr "Predicado"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Criando janela de configura艫o de a苺es...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Configura艫oes das A苺es"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "lendo configura苺es das a苺es...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Erro no comando da a艫o\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Chamando processo filho e net.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Filho: Esperando por neto\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Filho: neto terminou\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Matando filho de id de grupo %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Liberando dados do filho %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Atualizando o dilogo de entrada/sada das a苺es.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Filho retornou %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Enviando entrada para neto.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Entrada enviada para neto.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Pegando sada do neto.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "erro de socket\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Conta no encontrada. Usando conta corrente...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Conta no encontrada\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "No foi possvel executar o comando externo: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH falhou\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Ocorreu um erro ao enviar o QUIT\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "No foi possvel se conectar com o servidor SMTP: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "Falha na conexo SSL"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Ocorreu um erro ao conectar em %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Ocorreu um erro enviando HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Ocorreu um erro ao enviar o STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Ocorreu um erro ao enviar o EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Arquivo de assinatura"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Criando janela de configura艫o de cabealhos personalizados...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Lendo configura艫o dos cabealhos personalizados...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Gravando configura艫o dos cabealhos personalizados...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Criando janela de configura艫o de filtros...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "Lendo configura艫o dos filtros...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Gravando configura艫o dos filtros...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tProcurando mensagens no cacheadas..."
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "Encontrada(s) %d mensagen(s) no cacheada(s).\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tOrdenando mensagens no cacheadas numericamente..."
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "conjunto de caracteres forado: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Habilitar barra de rolagem horizontal"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Mostrar mensagens no lidas com fonte em negrito"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Terminar"
+
+#~ msgid "Done"
+#~ msgstr "Feito"
+
+#, fuzzy
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "/_Buscar novas mensagens"
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Arquivo/Atualizar rvore de _pastas"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): arquivo %s j existe."
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d carregando modelo de %s\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d lendo o diretrio de modelos %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s:%d encontrou arquivo %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s no um arquivo comum\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d escrevendo modelo \\\"%s\\\" para %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Assinatura de chave padro"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "guardando mensagem enviada...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "no foi possvel salvar a mensagem\n"
+
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Criando dilogo das a苺es...\n"
+
+#~ msgid "Close window"
+#~ msgstr "Fechar janela"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Criando janela de log...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Apagando artigos em cache 1 - %d ... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tApagando artigos em cache... "
+
+#~ msgid "/_Help/_Manual/_French"
+#~ msgstr "/_Ajuda/_Manual/_Francs"
+
+#~ msgid "/_Help/_Manual/_German"
+#~ msgstr "/_Ajuda/_Manual/_Alemo"
+
+#~ msgid "/_Help/_Manual/_Spanish"
+#~ msgstr "/_Ajuda/_Manual/_Espanhol"
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "As partes usadas do fetchmail so Copyright 1997 por Eric S. Raymond. \n"
+#~ "Estas partes so tambm Copyright de Carl Harris, 1993 e 1995. \n"
+#~ "O Copyright protegido com o propsito de proteger a livre "
+#~ "distribui艫o \n"
+#~ "dos fontes.\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc copyright de Yasuhiro Tonooka <tonooka@msi.co.jp>, e libkcc "
+#~ "copyright de takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "Falha ao alocar memria\n"
+
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/E_xibir/_Alternar viso de resumo"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s j existe."
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Realmente apagar pasta `%s'?"
+
+#, fuzzy
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "Ocorreu um erro quando postando\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Ferramentas"
+
+#~ msgid "Outbox"
+#~ msgstr "Caixa de Sada"
+
+#, fuzzy
+#~ msgid "Skipping message %d\n"
+#~ msgstr "obtendo mensagem %d...\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Criando janela de cabealhos...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Exibindo cabealhos de %s ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Todos os cabealhos"
+
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/E_xibir/Viso sem t_hreads"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Visualizador web externo (%s ser sustituido pela URL)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "Impresso (%s ser sustituido pelo nome do arquivo)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "Ir para %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "Operador"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Mensagem/ _Para"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Mensagem/_Cc"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Mensagem/_Bcc"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Mensagem/_Anexar"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Ferramentas/E_xibir rgua"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/_Arquivo/_Atualizar rvore de diretrios"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/_Editar/_Procurar pasta"
+
+#~ msgid "Search folder"
+#~ msgstr "Procurar pasta"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "Quebrar pargrafo atual"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/_Mensagem/Adicionar remetente ao Li_vro de Endereos"
+
+#~ msgid "/_Summary"
+#~ msgstr "/_Resumo"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/_Resumo/_Executar"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/_Resumo/A_tualizar"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/_Resumo/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/_Resumo/Ir _Para"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/_Resumo/Ir _Para/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/_Resumo/_Ordenar"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/_Resumo/_Ordenar/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/_Resumo/_Visualiza艫o hierrquica"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/_Resumo/Visualiza艫o nor_mal"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "O grupo de notcias `%s' j existe."
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "Informe o nome do grupo de notcias a se inscrever:"
+
+#~ msgid "Quotation format:"
+#~ msgstr "Formato da cita艫o:"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "Atualizando todas as pastas"
+
+#~ msgid "Set display item"
+#~ msgstr "Indicar elemento visual"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
+
+#~ msgid "Preferences for each account"
+#~ msgstr "Preferncias para cada conta"
+
+#~ msgid "each"
+#~ msgstr "cada"
+
+#~ msgid "/View so_urce"
+#~ msgstr "/Ver _fonte"
+
+#~ msgid "/Show all _header"
+#~ msgstr "/_Mostrar todos os cabealhos"
+
+#~ msgid "Current folder is Trash."
+#~ msgstr "A pasta atual a Lixeira."
+
+#~ msgid "Reading addressbook file..."
+#~ msgstr "Lendo livro de endereos..."
+
+#~ msgid "%s doesn't exist.\n"
+#~ msgstr "%s no existe.\n"
+
+#~ msgid "Exporting addressbook to file..."
+#~ msgstr "Exportando livro de endereos..."
+
+#~ msgid "failed to write addressbook data.\n"
+#~ msgstr "Falhou ao gravar o livro de endereos.\n"
+
+#~ msgid "The name already exists."
+#~ msgstr "Este nome j existe."
+
+#~ msgid "New group"
+#~ msgstr "Novo grupo"
+
+#~ msgid "Input the name of new group:"
+#~ msgstr "Nome do novo grupo:"
+
+#~ msgid "Input the new name of group:"
+#~ msgstr "Nome do novo grupo:"
+
+#~ msgid "/_Message/Show all _header"
+#~ msgstr "/_Mensagem/Mo_strar todos os cabealhos"
+
+#~ msgid "Sending queued message failed."
+#~ msgstr "Falhou enviando mensagens da fila."
+
+#~ msgid "Current account: %s"
+#~ msgstr "Conta atual: %s"
+
+#~ msgid ""
+#~ "Emulate the behavior of mouse operation of\n"
+#~ "Emacs-based mailer"
+#~ msgstr ""
+#~ "Emular o comportamento de opera苺es de mouse como\n"
+#~ "em clientes de e-mail baseados no Emacs"
+
+#~ msgid "Authorizing..."
+#~ msgstr "Autorizando..."
+
+#~ msgid ""
+#~ "Ordinary characters placed in the format string are copied without "
+#~ "conversion. Conversion specifiers are introduced by a % character, and "
+#~ "are replaced as follows:\n"
+#~ "%a: the abbreviated weekday name\n"
+#~ "%A: the full weekday name\n"
+#~ "%b: the abbreviated month name\n"
+#~ "%B: the full month name\n"
+#~ "%c: the preferred date and time for the current locale\n"
+#~ "%C: the century number (year/100)\n"
+#~ "%d: the day of the month as a decimal number\n"
+#~ "%H: the hour as a decimal number using a 24-hour clock\n"
+#~ "%I: the hour as a decimal number using a 12-hour clock\n"
+#~ "%j: the day of the year as a decimal number\n"
+#~ "%m: the month as a decimal number\n"
+#~ "%M: the minute as a decimal number\n"
+#~ "%p: either AM or PM\n"
+#~ "%S: the second as a decimal number\n"
+#~ "%w: the day of the week as a decimal number\n"
+#~ "%x: the preferred date for the current locale\n"
+#~ "%y: the last two digits of a year\n"
+#~ "%Y: the year as a decimal number\n"
+#~ "%Z: the time zone or name or abbreviation"
+#~ msgstr ""
+#~ "Caracteres ordinrios colocados no formato string so copiados sem "
+#~ "converso. Especificadores de converso so introduzidos por um caracter "
+#~ "% , e so trocados como abaixo:\n"
+#~ "%a: o dia da semana abreviado\n"
+#~ "%A: o nome do dia da semana completo\n"
+#~ "%b: o nome do ms abreviado\n"
+#~ "%B: o nome do ms completo\n"
+#~ "%c: o dia e hora preferido para a localiza艫o corrente\n"
+#~ "%C: o nmero do sculo (ano/100)\n"
+#~ "%d: o dia do ms como nmero decimal\n"
+#~ "%H: a hora como nmero decimalusando um formato de 24 horas\n"
+#~ "%I: a hora como nmero decimal usando um formato de 12 horas\n"
+#~ "%j: o dia do ano como um nmero decimal\n"
+#~ "%m: o ms como um nmero decimal\n"
+#~ "%M: o minuto como um nmero decimal\n"
+#~ "%p: AM ou PM\n"
+#~ "%S: o segundo como um nmero decimal\n"
+#~ "%w: o dia do ms como um nmero decimal\n"
+#~ "%x: a data preferida para a localiza艫o corrente\n"
+#~ "%y: os ltimos dois dgitos de um ano\n"
+#~ "%Y: o ano como um nmero decimal\n"
+#~ "%Z: a zone de tempo como um nome ou abrevia艫o"
+
+#~ msgid "done."
+#~ msgstr "concludo."
+
+#~ msgid "/_Message/_Acompanhar"
+#~ msgstr "/_Mensagem/ E_ncaminhar para"
+
+#~ msgid "can't get the next uid of folder: %s\n"
+#~ msgstr "no foi possvel obter o prximo uid da pasta: %s\n"
+
+#~ msgid "/Remove _news server"
+#~ msgstr "/_Apagar servidor de notcias"
+
+#~ msgid "Really delete news server `%s'?"
+#~ msgstr "Realmente apagar o servidor de notcias `%s'?"
+
+#~ msgid "/_View/_Toolbar/_Non-display"
+#~ msgstr "/E_xibir/_Barra de Ferramentas/_Ocultar"
+
+#~ msgid "/_Message/_Mark/Mark it as _being read"
+#~ msgstr "/_Mensagem/_Marcar/Marcar como _lida"
+
+#~ msgid "deleting article %d...\n"
+#~ msgstr "apagando artigo %d...\n"
+
+#~ msgid "/_Mark/Make it as _being read"
+#~ msgstr "/_Marcar/Marcar como _lida"
+
+#~ msgid "Show other headers"
+#~ msgstr "Mostrar outros cabealhos"
+
+#~ msgid "Receive at getting from all accounts"
+#~ msgstr "Receber de todas as contas"
+
+#~ msgid ""
+#~ "The MD5 support is copyright by RSA Data Security, Inc. See the header "
+#~ "comment of the md5.c module for license terms.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "O suporte MD5 copyright da RSA Data Security, Inc. Veja os "
+#~ "comentrios no incio do mdulo md5.c para os termos da licena.\n"
+#~ "\n"
+
+#~ msgid "SunMonTueWedThuFriSat"
+#~ msgstr "DomSegTerQuaQuiSexSab"
+
+#~ msgid "/_Summary/Select a_ll"
+#~ msgstr "/_Resumo/_Selecionar todos"
+
+#~ msgid "Clean trash"
+#~ msgstr "Limpar lixeira"
+
+#~ msgid "/_Mark/Mark as _important"
+#~ msgstr "/_Marcar/Marcar como _importante"
+
+#~ msgid "TextView: color allocation failed\n"
+#~ msgstr "TextView: falhou ao alocar cores\n"
+
+#~ msgid "*** Warning: code conversion failed ***\n"
+#~ msgstr "*** Warning: Erro ao converter conjunto de caracteres ***\n"
+
+#~ msgid "Invalid MIME type\n"
+#~ msgstr "Tipo MIME invlido\n"
+
+#~ msgid "%s - Compose message [Edited]"
+#~ msgstr "%s - Compondo mensagem [Editada]"
+
+#~ msgid "deleting folder %s ...\n"
+#~ msgstr "apagando pasta %s ...\n"
+
+#~ msgid "deleting newsgroup %s ...\n"
+#~ msgstr "apagando grupo de notcias %s ...\n"
+
+#~ msgid "Input adding news server:"
+#~ msgstr "Nome do servidor de notcias:"
+
+#~ msgid "The news server `%s' already exists."
+#~ msgstr "O servidor de notcias `%s' j existe."
+
+#~ msgid "deleting cache folder of %s ...\n"
+#~ msgstr "apagando pasta de cache %s ...\n"
+
+#~ msgid "IMAP login command is invalid.\n"
+#~ msgstr "Comando IMAP de login invlido.\n"
+
+#~ msgid "Next unread"
+#~ msgstr "Prxima no lida"
+
+#~ msgid "New directory"
+#~ msgstr "Novo diretrio"
+
+#~ msgid "The directory not found. Create it?"
+#~ msgstr "Diretrio no encontrado. Cri-lo?"
+
+#~ msgid "Can't create directory."
+#~ msgstr "No foi possvel criar o diretrio."
+
+#~ msgid "Selected name isn't a directory."
+#~ msgstr "O nome selecionado no um diretrio."
+
+#~ msgid "Writing mail folder list..."
+#~ msgstr "Gravando lista de pastas de correio..."
+
+#~ msgid "Writing imap folder list..."
+#~ msgstr "Gravando lista de pastas imap..."
+
+#~ msgid "Writing news folder list..."
+#~ msgstr "Gravando lista das pastas de notcias..."
+
+#~ msgid "Mail Server (IMAP4)"
+#~ msgstr "Servidor de Correio (IMAP4)"
+
+#~ msgid "NetNews"
+#~ msgstr "Notcias"
+
+#~ msgid "reading folder list %s ..."
+#~ msgstr "lendo lista de pastas %s ..."
+
+#~ msgid "Broken folder list cache.\n"
+#~ msgstr "Cache da lista de pastas corrompido.\n"
+
+#~ msgid "Select destination directory"
+#~ msgstr "Selecionar diretrio de destino"
+
+#~ msgid "can't drop message into %s\n"
+#~ msgstr "no foi possvel guardar a mensagem em %s\n"
+
+#~ msgid "%s exists\n"
+#~ msgstr "%s existe\n"
+
+#~ msgid "can't move tmpmsg to %s\n"
+#~ msgstr "no foi possvel renomear tmpmsg para %s\n"
+
+#~ msgid "IMAP session is not established\n"
+#~ msgstr "seso IMAP no estabelecida\n"
+
+#~ msgid "news session is not established\n"
+#~ msgstr "sesso de notcias no estabelecida\n"
+
+#~ msgid "Unlinking message %s in trash...\n"
+#~ msgstr "Eliminando mensagem %s da lixeira...\n"
+
+#~ msgid "Enable thread view on summary"
+#~ msgstr "Habilitar visualiza艫o hierrquica em resumos"
+
+#~ msgid "Not yet implemented."
+#~ msgstr "Ainda no implementado."
+
+#~ msgid "/_Sumary/Unsele_ct all"
+#~ msgstr "/_Resumo/_Deselecionar todos"
+
+#~ msgid ""
+#~ "Date\n"
+#~ "from\n"
+#~ "Subject\n"
+#~ "To\n"
+#~ "Message-ID\n"
+#~ "%"
+#~ msgstr ""
+#~ "Data\n"
+#~ "de\n"
+#~ "Assunto\n"
+#~ "Para\n"
+#~ "Message-ID\n"
+#~ "%"
+
+#~ msgid "Printing"
+#~ msgstr "Imprimindo"
+
+#~ msgid "/_Mark/Mark _all"
+#~ msgstr "/_Marcar/_Marcar todos"
+
+#~ msgid "/_Mark/U_nmark all"
+#~ msgstr "/_Marcar/Desmarca_r todos"
+
+#~ msgid "/_Mark/M_ove marked"
+#~ msgstr "/_Marcar/_Mover marcados"
+
+#~ msgid "/_Mark/_Delete marked"
+#~ msgstr "/_Marcar/A_pagar marcados"
+
+#~ msgid "/U_nselect all"
+#~ msgstr "/_Deselecionar tudo"
+
+#~ msgid "/_Message/Reply with _quotation"
+#~ msgstr "/_Mensagem/Responder com _cita艫o"
+
+#~ msgid "/Reply with _quotation"
+#~ msgstr "/Responder com _cita艫o"
+
+#~ msgid "queueing message that failed to send...\n"
+#~ msgstr "mensagens na fila que falharam ao enviar...\n"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 00000000..0122c463
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/\1/g
+s/`\([^`']*\)'/\1/g
+s/ '\([^`']*\)' / \1 /g
+s/ '\([^`']*\)'$/ \1/g
+s/^'\([^`']*\)' /\1 /g
+s//""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 00000000..2436c49e
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 00000000..2a98d3e7
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,7271 @@
+# Romanian translation of Sylpheed
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Little Dragon <littledragon@altern.org>, 2002.
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2000-08-28\n"
+"Last-Translator: Little Dragon <littledragon@altern.org>\n"
+"Language-Team: Little Dragon <littledragon@altern.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Despre"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME este Copyright 2001 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+#, fuzzy
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Acest program este software liber, l putei redistribui i/sau\n"
+"modifica n concordan cu Licena Public General GNU\n"
+"publicat de Fundaia pentru Software Liber, fie versiunea 2, sau\n"
+"(la alegerea dvs.) orice versiune mai nou.\n"
+"\n"
+
+#: src/about.c:217
+#, fuzzy
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Acest program este distribuit n sperana c va fi util,\n"
+"dar FARA NICI O GARANIE. Consultai Licena Public General GNU\n"
+"pentru mai multe detalii\n"
+"\n"
+
+#: src/about.c:223
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Ar trebui s fi primit o copie a Licenei Publice Generale\n"
+"cu acest program. Dac nu este cazul, scriei la Free Software\n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Citire configuraia conturilor...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Etichet gasit: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Exist una sau mai multe ferestre de compunere deschise.\n"
+"V rugm s nchidei toate ferestrele de compunere nainteaeditrii de "
+"conturi."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Deschidere fereastr de editare...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Creare fereastr de editarea conturilor...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Editare de conturi"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Mesajele noi vor fi verificate in aceast ordine. Activai\n"
+"checkboxurile din coloana `G' pentru a activa recepionarea\n"
+"mesajelor de comanda `Ia tot'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Nume"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protocol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Adugare"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Editare"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " tergere "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Jos"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Sus"
+
+#: src/account.c:707
+#, fuzzy
+msgid " Set as default account "
+msgstr " Setare drept cont curent "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "nchidere"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "tergere cont"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Suntei sigur c dorii s tergei acest cont ?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Da"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nu"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Fiierul nu a putut fi citit."
+
+#: src/action.c:359
+#, fuzzy
+msgid "Could not get message part."
+msgstr "Mesajul nu a putut fi copiat in lista de ateptare"
+
+#: src/action.c:376
+#, fuzzy
+msgid "Can't get part of multipart message"
+msgstr "Citirea unei pari din mesajul multipart este imposibil."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+
+#: src/action.c:804
+#, fuzzy, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr "Editorul extern nu poate fi executat\n"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr ""
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr ""
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr ""
+
+#: src/action.c:1106
+#, fuzzy
+msgid " Send "
+msgstr "Trimitere"
+
+#: src/action.c:1117
+#, fuzzy
+msgid "Abort"
+msgstr "Despre"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Introducei linia de comand pentru imprimare:\n"
+"('%s' va fi nlocuit cu numele fiierului)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Introducei linia de comand pentru imprimare:\n"
+"('%s' va fi nlocuit cu numele fiierului)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Adugare n agend"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adres"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Observaii"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Selectai un director"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Anulare"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Fiier"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Fiier/A_gend nou"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Fiier/_vCard nou"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Fiier/_JPilot nou"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Fiier/Server _LDAP nou"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Fiier/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Fiier/_Editare"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Fiier/_tergere"
+
+#: src/addressbook.c:347
+#, fuzzy
+msgid "/_File/_Save"
+msgstr "/_Fiier/_Salvare ca..."
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Fiier/_nchidere"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adres"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adres/_Adres nou"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adres/_Grup nou"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adres/_Director nou"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adres/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adres/_Editare"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adres/_tergere"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+#, fuzzy
+msgid "/_Tools"
+msgstr "/_Utilitare"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Utilitare/Importare fiier _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/A_jutor"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/A_jutor/_Despre"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+#, fuzzy
+msgid "/New _Address"
+msgstr "/_Adres nou"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+#, fuzzy
+msgid "/New _Group"
+msgstr "/_Grup nou"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+#, fuzzy
+msgid "/New _Folder"
+msgstr "/_Director nou"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Editare"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_tergere"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Adres E-Mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Agend"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr " Nume:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "tergere"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Cutare"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "La:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "tergere adrese"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Suntei sigur c dorii sa tergei adresa (adresele) ?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nu"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Suntei sigur c dorii tergerea directorului `%s` I a tuturor\n"
+"adreselor coninute de el ? Dac tergei doar directorul, adresele\n"
+"vor fi mutate in directorul printe."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Doar directorul"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Directorul i adresele"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Suntei sigur c dorii s tergei `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Utilizator nou. Fiierul index nu a putut fi salvat."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Utilizator nou. Fiierele agendei nu au putut fi salvate."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Agenda veche a fost convertit cu succes."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Agenda veche a fost convertit cu succes, dar\n"
+"fiierul index al noii agende nu a putut fi salvat."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit, dar\n"
+"a fost creat o agend nou goal."
+
+#: src/addressbook.c:2383
+#, fuzzy
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit iar ncercarea de creare a unei agende noia "
+"euat."
+
+#: src/addressbook.c:2388
+#, fuzzy
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit iar ncercarea de creare a unei agende noia "
+"euat."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Eroare de convertire a agendei"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Convertire agend"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Eroare agend"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Fiierul index al agendei nu a putut fi citit"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Agenda veche a fost convertit, dar salvarea noului fiier indexa euat"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit, dar a fost creat o noua agend goal."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit iar ncercarea de creare a unei agende noia "
+"euat."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Agenda nu a putut fi convertit iar ncercarea de creare a unei agende noia "
+"euat."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Eroare de convertire a agendei"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Convertire agend"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Interfa"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Agend"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Persoan"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Adres E-Mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Group"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Director"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Server LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Adresse comun:"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Adresse personal:"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Informaie"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Avertisment"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Eroare"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Creare dialog de avertisment...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Acest mesaj va aprea i data viitoare"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Portocaliu"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rou"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Roz"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Albastru Cer"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Albastru"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Verde"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Maro"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Niciunul"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Adugare..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_tergere"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/_Propriet筐i..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Fiier/_Salvare ca..."
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Mesaj/Tr_imitere mai trziu"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Mesaj/Sal_vare"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Message/Salvare i _continuare"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Fiier/_Ataare fiier"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Fiier/_Inserare fiier"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Fiier/Inserare sem_ntur"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Editare/An_ulare"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Editare/_Repetare"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Editare/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Editare/_Tiere"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Editare/_Copiere"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Editare/Li_pire"
+
+#: src/compose.c:491
+#, fuzzy
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Editare/Li_pire"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Editare/Select_are tot"
+
+#: src/compose.c:494
+#, fuzzy
+msgid "/_Edit/A_dvanced"
+msgstr "/_Editare/An_ulare"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr ""
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr ""
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr ""
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr ""
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr ""
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr ""
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr ""
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr ""
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr ""
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr ""
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr ""
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr ""
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr ""
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr ""
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr ""
+
+#: src/compose.c:568
+#, fuzzy
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Editare/Tie_re linii lungi"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Editare/_Copiere"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Vedere"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Vedere/_La"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Vedere/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Vedere/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Vedere/_Rspuns"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Vedere/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Vedere/_Urmare"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Vedere/Ri_gl"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Vedere/_Ataamente"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+#, fuzzy
+msgid "/_Tools/_Address book"
+msgstr "/_Utilitare/_Agend"
+
+#: src/compose.c:585
+#, fuzzy
+msgid "/_Tools/_Template"
+msgstr "/_Utilitare/_Modele"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+#, fuzzy
+msgid "/_Tools/Actio_ns"
+msgstr "/E_xecutare"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+#, fuzzy
+msgid "/_Tools/---"
+msgstr "/_Utilitare/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Editare/Editare cu un editor e_xtern"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/E_xecutare"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Message/Cr_iptare"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: fiierul nu exist\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+#, fuzzy
+msgid "Can't get text part\n"
+msgstr "xover imposibil\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Eroare de formatare a citaiei."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Eroare de formatare a rspunsului/mesajului naintat."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Fiierul %s nu exist\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Obinerea dimensiunii fiierului %s este imposibil\n"
+
+#: src/compose.c:1572
+#, fuzzy, c-format
+msgid "File %s is empty."
+msgstr "Fiierul %s este gol\n"
+
+#: src/compose.c:1576
+#, fuzzy, c-format
+msgid "Can't read %s."
+msgstr "nu poate fi creat %s\n"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Mesaj: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Citirea unei pari din mesajul multipart este imposibil."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Editat] "
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Compunere mesaj%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Compunere mesaj%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Destinatarul nu a fost specificat."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Trimitere"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr ""
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "nu pot obine lista destinatarilor."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nu a fost specificat contul de pe care se dorete trimiterea de mail.\n"
+"V rugm s selectai un cont nainte de a trimite."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "A avut loc o eroare la ncercarea de a posta mesajul pe %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Salvarea mesajului n outbox este imposibil."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "schimbarea permisiunilor fiierului este imposibil\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr "Convertirea codificrii mesajului este imposibil."
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "scrierea antetelor este imposibil\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "tergerea mesajului vechi a euat\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "punere mesaj n lista de ateptare...\n"
+
+#: src/compose.c:3063
+#, fuzzy
+msgid "can't find queue folder\n"
+msgstr "directorul nu a putut fi selectat: %s\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "punerea mesajului n lista de ateptare este imposibil\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "Message-ID creat: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Creare fereastra de compunere...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tip MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Dimensiune"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "De la:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Trimitere mesaj"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Mai trziu"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Punere n lista de ateptare i trimitere mai trziu"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Salvare"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Salvare"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Inserare"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Isertion fiier"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Ataament"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Ataare fiier"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Semntur"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Inserare semntur"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Editare cu editor extern"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Tiere linii"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Tiere toate liniile lungi"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Tip MIME invalid."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Fiierul nu exist sau este gol."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Proprietate"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Codare"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Cale"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Numele fiierului"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Linia de comand este invalid: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Editorul extern este nc n funciune.\n"
+"Dorii terminarea forat a procesului ?\n"
+"process group id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Procesul a fost terminat: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Fiier temporar: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Compunere: introducere din proces monitorizat\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Editorul extern nu poate fi executat\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Scrierea n fiier este imposibil\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Citirea din pipe a euat\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Este imposibil punerea mesajului n lista de ateptare."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Selectare fiier"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Anulare mesaj"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Acest mesaj a fost modificat. Dorii sa anulai schimbrile ?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Anulare schimbri"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "Salvare"
+
+#: src/compose.c:5395
+#, fuzzy, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Suntei sigur c dorii s tergei aceast regul ?"
+
+#: src/compose.c:5397
+#, fuzzy
+msgid "Apply template"
+msgstr "tergere mesaj"
+
+#: src/compose.c:5398
+#, fuzzy
+msgid "Replace"
+msgstr "/_Utilitare/_Modele"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Editare adres"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Adugare Persoan"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Editare Detalii Personale"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "O adresa E-Mail trebuie specificat."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Un Nume i o Valoare trebuiesc specificate."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Editare Date Personale"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Nume Afiat"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Nume"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Prenume"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Porecl"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Adres E-Mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Sus"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Jos"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Modificare"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "tergere"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Valoare"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Date Generale"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atribute Utilizator"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Fiierul pare a fi n regul."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Fiierul nu pare a fi o agend valid."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Fiierul nu a putut fi citit."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Editare Agend"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Verificare Fiier "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fiier"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Adugare agend"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Trebuie specificat un Nume de Grup."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Editare Date de Grup"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Numele Grupului"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresa n Grup"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Adrese Disponibile"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Mutai Adresele E-Mail din sau n Grup cu ajutorul butoanelor sgei"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Editare Detalii de Grup"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Adugare Grup"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Editare director"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Introducei noul nume al directorului:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Director nou"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Introducei numele noului director:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Fiierul nu pare a fi n format JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Selectare Fiier JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Editare nregistrare JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Adrese E-Mail adiionale"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Adaugare nregistrare JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Conexiunea la server s-a soldat cu succes"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Conexiunea la server nu a putut fi realizat"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Editare server LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hostname"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Testare Server "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Baz de Cutare"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Criterii de Cutare"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Resetare "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "DN-ul conexiunii"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Parola conexiunii"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (secs)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Numr Maxim de nregistrri"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "General"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Avansat"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Adugare Server LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Editare LDAP - Selectare Baz de Cutare"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Baze de Cutare Disponibile"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Nu a fost posibil citirea Bazei de Cutare de pe server - v rugm so "
+"setai manual"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Fiierul nu pare a fi n format vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Selectare Fiier vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Editare nregistrare vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Adugare nregistrare vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportare"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Specificai directorul destinaie i fiierul mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Directorul surs:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Exportare fiier:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Selectare... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Selectare fiier exportat"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "scrierea configuraie n fiier a euat\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Selectare director"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Inbox"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+#, fuzzy
+msgid "Sent"
+msgstr "Trimitere"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Lista de ateptare"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Gunoi"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+#, fuzzy
+msgid "Drafts"
+msgstr "Salvare"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+#, fuzzy
+msgid "NewFolder"
+msgstr "Director nou"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "'%c' nu poate fi inclus n numele directorului."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Directorul '%s' exist deja."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Directorul `%s' nu a putut fi creat."
+
+#: src/folderview.c:216 src/folderview.c:232
+#, fuzzy
+msgid "/Create _new folder..."
+msgstr "/Creare director _nou"
+
+#: src/folderview.c:217 src/folderview.c:233
+#, fuzzy
+msgid "/_Rename folder..."
+msgstr "/_Redenumire director"
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/tergere _director"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "/_Fiier/_Cur筐are gunoi"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Verificare _mesaje noi"
+
+#: src/folderview.c:224 src/folderview.c:242
+#, fuzzy
+msgid "/R_ebuild folder tree"
+msgstr "/R_escanare directoare"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+#, fuzzy
+msgid "/_Search messages..."
+msgstr "\tCutare mesaje nestocate... "
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Nu exist mesaje necitite"
+
+#: src/folderview.c:250
+#, fuzzy
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/n_scriere la newsgroup"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/te_rgere newsgroup"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Creare mod vedere director...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nou"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Necitit"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Setare informaii despre director...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Setare informaii despre director..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Scanare director %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Scanare director %s ..."
+
+#: src/folderview.c:707
+#, fuzzy
+msgid "Rebuild folder tree"
+msgstr "/R_escanare directoare"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+#, fuzzy
+msgid "Rebuilding folder tree..."
+msgstr "Scanare directoare..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Scanare directoare..."
+
+#: src/folderview.c:741
+#, fuzzy
+msgid "Rebuilding all folder trees..."
+msgstr "Rescanare directoare..."
+
+#: src/folderview.c:818
+#, fuzzy
+msgid "Checking for new messages in all folders..."
+msgstr "/Verificare _mesaje noi"
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Directorul %s este selectat\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Trimitere mesaj"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "A avut loc o eroare la ncercarea de a posta mesajul pe %s ."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Introducei numele noului director:\n"
+"(dac dorii crearea de subdirectoare in acest director,\n"
+" adugai un `/' la sfritul numelui)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Introducei noul nume pentru '%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Redenumire director"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Toate directoarele i mesajele din '%s' vor fi terse.\n"
+"Dorii ntr-adevr s continuai ?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "tergere director"
+
+#: src/folderview.c:1932
+#, fuzzy, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Directorul `%s' nu a putut fi creat."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr ""
+
+#: src/folderview.c:1965
+#, fuzzy
+msgid "Empty all messages in trash?"
+msgstr "Dorii tergerea tuturor mesajelor din gunoi ?"
+
+#: src/folderview.c:1996
+#, fuzzy, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Suntei sigur c dorii s tergei cutia potal '%s'\n"
+"(Mesajele NU sunt terse de pe disc)"
+
+#: src/folderview.c:1998
+#, fuzzy
+msgid "Remove mailbox"
+msgstr "/tergere _cutie potal"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Suntei sigur c dorii tergerea contului IMAP4 '%s' ?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "tergere cont IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Suntei sigur c dorii tergerea newsgroupului '%s' ?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "tergere newsgroup"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Suntei sigur c dorii tergerea contului de news '%s' ?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "tergere cont de news"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "nscriere la newsgroup"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Selectare newsgroup."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Cutare:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Cutare "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nume newsgroup"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Mesaje"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tip"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "mprosptare"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderat"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "doar citire"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "necunoscut"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Lista de newsgroup-uri nu a putut fi obinut."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Gata."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d newsgroup-uri recepionate (%s citite)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Grupuri de discuii:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Subiect:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Creare vedere antet...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Fr expeditor)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Fr subiect)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Creare vedere imagine...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Imaginea nu a putut fi ncrcat."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "Conexiunea IMAP4 la %s:%d a fost ntrerupt. Reconectare...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "creare conexiune IMAP4 la %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr ""
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "marcajul de tergere nu a putut fi setat: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "tergere imposibil\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "marcajul de tergere nu a putut fi setat: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "directorul nu a putut fi selectat: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Fiierul de marcaje nu a fost gsit.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "a avut loc o eroare la comanda LIST.\n"
+
+#: src/imap.c:1842
+#, fuzzy, c-format
+msgid "Can't create '%s'\n"
+msgstr "nu poate fi creat %s\n"
+
+#: src/imap.c:1847
+#, fuzzy, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "nu poate fi creat %s\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "crearea cutiei potale a euat: LIST a euat.\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "crearea cutiei potale este imposibil\n"
+
+#: src/imap.c:1997
+#, fuzzy, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "cutia potal nu a putut fi setat: %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "tergerea cutiei potale este imposibil\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "recepionarea plicului nu a putut fi realizat\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "a avut loc o eroare n timpul recepionrii plicului.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "plicul nu poate fi analizat: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "ncercarea de conectare la serverul IMAP4 a euat: %s:%d\n"
+
+#: src/imap.c:2257
+#, fuzzy, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "ncercarea de conectare la serverul IMAP4 a euat: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "spaiul de nume nu a putut fi obinut\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "directorul nu a putut fi selectat: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Autentificare..."
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Logare IMAP4 euat.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "nu a putut fi adugat %s la %s\n"
+
+#: src/imap.c:3366
+#, fuzzy
+msgid "(sending file...)"
+msgstr "Citire director %s ..."
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "mesajul %s nu a putut fi adugat\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "nu a putut fi copiat %d la %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "eroare comand IMAP: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "eroare comand IMAP: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "eroare comand IMAP: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr ""
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr ""
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importare"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Specificai fiierul mbox int i directorul destinaie."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importare fiier:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Director destinaie:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Selectare fiier de importat"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Specificai numele agendei si a fiierului ce trebuie importat."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Selectai i redenumii cmpurile LDIF de importat."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fiier importat."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Selectai un fiier."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Numele agendei trebuie specificat."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Eroare la citirea cmpurilor LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Fiier LDIF importat cu succes."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Selectare fiier LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Numele Fiierului"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Cmp LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Numele Atributului"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Selectare"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Agend:"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Numele Fiierului:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "nregistrri:"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importare fiier LDIF n agend"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "napio"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "nainte"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Informaii despre Fiier"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atribute"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Terminare"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Recepionare mesaje noi"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Ateptai"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Anulat"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Recepionare"
+
+#: src/inc.c:531
+#, fuzzy, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "tergere mesaje de pe server dup primire"
+
+#: src/inc.c:535
+#, fuzzy
+msgid "Done (no new messages)"
+msgstr "Nu exist mesaje necitite"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Conexiunea a euat"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autorizarea a euat"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr ""
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (secs)"
+
+#: src/inc.c:609
+#, fuzzy, c-format
+msgid "Finished (%d new message(s))"
+msgstr "\t%d mesaje noui\n"
+
+#: src/inc.c:612
+#, fuzzy
+msgid "Finished (no new messages)"
+msgstr "Nu exist mesaje necitite"
+
+#: src/inc.c:621
+#, fuzzy
+msgid "Some errors occurred while getting mail."
+msgstr "Au avut loc un numr de erori la recepionarea potei."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "recepionare mesaje noi pentru contul %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Recepionare mesaje noi"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Conectare la serverul POP3: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "ncercarea de conectare la serverul POP3 a euat: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autentificare..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Recepionare mesaje din %s n %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Recepionarea numrului de mesaje noi"
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Recepionarea numrului de mesaje noi (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Recepionarea numrului de mesaje noi (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Recepionarea dimensiunii mesajelor (LIST)..."
+
+#: src/inc.c:795
+#, fuzzy, c-format
+msgid "Deleting message %d"
+msgstr "tergere mesaj"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "nchidere conexiune"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Recepionare mesaj (%d / %d) (%s / %s octei)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "tergere mesaje de pe server dup primire"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Conexiunea a euat"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "A avut loc o eroare la procesarea mesajului."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "A avut loc o eroare la procesarea mesajului."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Nu mai este spaiu pe disc."
+
+#: src/inc.c:1097
+#, fuzzy
+msgid "Can't write file."
+msgstr "Scrierea n fiier este imposibil.\n"
+
+#: src/inc.c:1102
+#, fuzzy
+msgid "Socket error."
+msgstr "eroare de protocol\n"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+#, fuzzy
+msgid "Mailbox is locked."
+msgstr "Setri csu potal"
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Setri csu potal"
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Autentificare..."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Autentificare..."
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+#, fuzzy
+msgid "Incorporation cancelled\n"
+msgstr "Recepionare mesaje noi pentru contul curent"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Recepionare mesaje noi pentru %s n %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Introducei parola pentru %s la %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Introducere parol"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Log protocol"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Fiierul '%s' exist deja.\n"
+"Directorul nu poate fi creat."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread nu este suportat de glib.\n"
+
+#: src/main.c:246
+#, fuzzy
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG nu este instalat corect.\n"
+"Suportul pentru OpenPGP a fost dezactivat."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Utilizare: %s [OPIUNE]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adres] deschidere fereastr de compunere"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive recepionare mesaje noi"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr ""
+" --receive-all recepionare mesaje noi pentru toate conturile"
+
+#: src/main.c:408
+#, fuzzy
+msgid " --send send all queued messages"
+msgstr " --status afiare numr total de mesaje"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status afiare numr total de mesaje"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status afiare numr total de mesaje"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug mod debug"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help afiare ajutor i ieire"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version afiare versiune i ieire"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr ""
+"Fereastra de compunere de mesaje exist.\n"
+"Suntei sigur c dorii sa ieii ?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Mesaje n lista de ateptare"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Exista mesaje netrimise n lista de ateptare. Dorii sa ieii ?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "ruleaz o alta sesiune Sylpheed.\n"
+
+#: src/mainwindow.c:454
+#, fuzzy
+msgid "/_File/_Folder"
+msgstr "/_Fiier/_nchidere"
+
+#: src/mainwindow.c:455
+#, fuzzy
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/Creare director _nou"
+
+#: src/mainwindow.c:457
+#, fuzzy
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Redenumire director"
+
+#: src/mainwindow.c:458
+#, fuzzy
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/tergere _director"
+
+# xxx#
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Fiier/_Adugare cutie potal..."
+
+# xxx#
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Fiier/_Adugare cutie potal..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/tergere _cutie potal"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Fiier/_nchidere"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/Verificare _mesaje noi"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/Verificare _mesaje noi"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/R_escanare directoare"
+
+#: src/mainwindow.c:471
+#, fuzzy
+msgid "/_File/_Import mbox file..."
+msgstr "/_Fiier/_Importare fiier mbox"
+
+#: src/mainwindow.c:472
+#, fuzzy
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Fiier/_Importare fiier mbox"
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Fiier/_Cur筐are gunoi"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Fiier/_Salvare ca..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Fiier/Im_primare..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Fiier/_Inserare fiier"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Fiier/Iei_re"
+
+#: src/mainwindow.c:487
+#, fuzzy
+msgid "/_Edit/Select _thread"
+msgstr "/_Editare/Select_are tot"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr ""
+
+#: src/mainwindow.c:491
+#, fuzzy
+msgid "/_Edit/_Search messages..."
+msgstr "/_Editare/_Cutare"
+
+#: src/mainwindow.c:494
+#, fuzzy
+msgid "/_View/Show or hi_de"
+msgstr "/_Afiare antet"
+
+#: src/mainwindow.c:495
+#, fuzzy
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Vedere/Ar_bore"
+
+#: src/mainwindow.c:497
+#, fuzzy
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Vedere/Vedere _mesaj"
+
+#: src/mainwindow.c:499
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Vedere/Bar de _utilitare"
+
+#: src/mainwindow.c:501
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Vedere/Bar de _utilitare/Icoane i te_xt"
+
+#: src/mainwindow.c:503
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Vedere/Bar de _utilitare/_Icoane"
+
+#: src/mainwindow.c:505
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Vedere/Bar de _utilitare/_Text"
+
+#: src/mainwindow.c:507
+#, fuzzy
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Vedere/Bar de _utilitare/_Icoane"
+
+#: src/mainwindow.c:509
+#, fuzzy
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Vedere/Bar de _stare"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Vedere/Separare arbore de direct_oare"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Vedere/Separare arbore de m_esaje"
+
+#: src/mainwindow.c:515
+#, fuzzy
+msgid "/_View/_Sort"
+msgstr "/_Vedere/_La"
+
+#: src/mainwindow.c:516
+#, fuzzy
+msgid "/_View/_Sort/by _number"
+msgstr "/Re_zumat/_Sortare/Sortare dup _numr"
+
+#: src/mainwindow.c:517
+#, fuzzy
+msgid "/_View/_Sort/by s_ize"
+msgstr "/Re_zumat/_Sortare/Sortare dup d_imensiune"
+
+#: src/mainwindow.c:518
+#, fuzzy
+msgid "/_View/_Sort/by _date"
+msgstr "/Re_zumat/_Sortare/Sortare dup _dat"
+
+#: src/mainwindow.c:519
+#, fuzzy
+msgid "/_View/_Sort/by _from"
+msgstr "/Re_zumat/_Sortare/Sortare dup e_xpeditor"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/Re_zumat/_Sortare/Sortare dup d_imensiune"
+
+#: src/mainwindow.c:521
+#, fuzzy
+msgid "/_View/_Sort/by _subject"
+msgstr "/Re_zumat/_Sortare/Sortare dup subiect"
+
+#: src/mainwindow.c:522
+#, fuzzy
+msgid "/_View/_Sort/by _color label"
+msgstr "/Re_zumat/_Sortare/Sortare dup _dat"
+
+#: src/mainwindow.c:524
+#, fuzzy
+msgid "/_View/_Sort/by _mark"
+msgstr "/Re_zumat/_Sortare/Sortare dup _numr"
+
+#: src/mainwindow.c:525
+#, fuzzy
+msgid "/_View/_Sort/by _unread"
+msgstr "/Re_zumat/_Sortare/Sortare dup _numr"
+
+#: src/mainwindow.c:526
+#, fuzzy
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Vedere/_Ataamente"
+
+#: src/mainwindow.c:528
+#, fuzzy
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/Re_zumat/_Sortare/Sortare dup _numr"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+#, fuzzy
+msgid "/_View/_Sort/---"
+msgstr "/_Vedere/---"
+
+#: src/mainwindow.c:530
+#, fuzzy
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Vedere/_La"
+
+#: src/mainwindow.c:531
+#, fuzzy
+msgid "/_View/_Sort/Descending"
+msgstr "/_Vedere/_La"
+
+#: src/mainwindow.c:533
+#, fuzzy
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/Re_zumat/_Sortare/_Atracie dup subiect"
+
+#: src/mainwindow.c:535
+#, fuzzy
+msgid "/_View/Th_read view"
+msgstr "/_Vedere/Vedere _mesaj"
+
+#: src/mainwindow.c:536
+#, fuzzy
+msgid "/_View/E_xpand all threads"
+msgstr "/_Afiare antet"
+
+#: src/mainwindow.c:537
+#, fuzzy
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Afiare antet"
+
+#: src/mainwindow.c:538
+#, fuzzy
+msgid "/_View/Set display _item..."
+msgstr "/Re_zumat/Selectare elemente afiate..."
+
+#: src/mainwindow.c:541
+#, fuzzy
+msgid "/_View/_Go to"
+msgstr "/_Vedere/_La"
+
+#: src/mainwindow.c:542
+#, fuzzy
+msgid "/_View/_Go to/_Prev message"
+msgstr "/Re_zumat/Mesajul _precedent"
+
+#: src/mainwindow.c:543
+#, fuzzy
+msgid "/_View/_Go to/_Next message"
+msgstr "/Re_zumat/Mesajul _urmtor"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+#, fuzzy
+msgid "/_View/_Go to/---"
+msgstr "/_Vedere/---"
+
+#: src/mainwindow.c:545
+#, fuzzy
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "Urmtorul mesaj necitit"
+
+#: src/mainwindow.c:547
+#, fuzzy
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/Re_zumat/Urmtorul mesaj n_ecitit"
+
+#: src/mainwindow.c:550
+#, fuzzy
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/Re_zumat/Mesajul _precedent"
+
+#: src/mainwindow.c:551
+#, fuzzy
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/Re_zumat/Mesajul _urmtor"
+
+#: src/mainwindow.c:553
+#, fuzzy
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Vedere/Separare arbore de m_esaje"
+
+#: src/mainwindow.c:555
+#, fuzzy
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "Urmtorul mesaj necitit"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr ""
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr ""
+
+#: src/mainwindow.c:563
+#, fuzzy
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/Re_zumat/Alt di_rector"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+#, fuzzy
+msgid "/_View/_Code set/---"
+msgstr "/_Mesaj/Set de _caractere/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+#, fuzzy
+msgid "/_View/_Code set"
+msgstr "/_Mesaj/Set de _caractere"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+#, fuzzy
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Mesaj/Set de _caractere/Detectare _automat"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+#, fuzzy
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Mesaj/Set de _caractere/7bit ASCII (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+#, fuzzy
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Mesaj/Set de _caractere/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+#, fuzzy
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Mesaj/Set de _caractere/Vest European (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+#, fuzzy
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Mesaj/Set de _caractere/Vest European (ISO-8859-_1)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+#, fuzzy
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Mesaj/Set de _caractere/Central European (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+#, fuzzy
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Mesaj/Set de _caractere/_Baltic (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+#, fuzzy
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Mesaj/Set de _caractere/Baltic (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+#, fuzzy
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Mesaj/Set de _caractere/Grec (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+#, fuzzy
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Mesaj/Set de _caractere/Turcesc (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Mesaj/Set de _caractere/Chirilic (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Mesaj/Set de _caractere/Chirilic (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Mesaj/Set de _caractere/Chirilic (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Mesaj/Set de _caractere/Chirilic (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+#, fuzzy
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Mesaj/Set de _caractere/Japonez (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+#, fuzzy
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Message/Set de _caractere/Japonez (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+#, fuzzy
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Message/Set de _caractere/Japonez (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+#, fuzzy
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Message/Set de _caractere/Japonez (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+#, fuzzy
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Mesaj/Set de _caractere/Chinezesc Simplificat (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+#, fuzzy
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Mesaj/Set de _caractere/Chinezesc Tradiional (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+#, fuzzy
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Mesaj/Set de _caractere/Chinezesc Tradiional (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+#, fuzzy
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Mesaj/Set de _caractere/Chinezesc (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+#, fuzzy
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Mesaj/Set de _caractere/Corean (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+#, fuzzy
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Mesaj/Set de _caractere/Corean (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+#, fuzzy
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Mesaj/Set de _caractere/Chinezesc (ISO-2022-_CN)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+#, fuzzy
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Mesaj/Set de _caractere/Chirilic (Windows-1251)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+#, fuzzy
+msgid "/_View/Open in new _window"
+msgstr "/Deschidere n _fereastr nou"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+#, fuzzy
+msgid "/_View/Mess_age source"
+msgstr "/_Vedere/Ar_bore"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+#, fuzzy
+msgid "/_View/Show all _header"
+msgstr "/_Afiare antet"
+
+#: src/mainwindow.c:653
+#, fuzzy
+msgid "/_View/_Update summary"
+msgstr "/_Vedere/Ar_bore"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Mesaj"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Mesaj/Re_editare"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Mesaj/Recepion_are pot pentru toate conturile"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Mesaj/Recepion_are pot pentru toate conturile"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Message/Salvare i _continuare"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Mesaj/Re_editare"
+
+#: src/mainwindow.c:664
+#, fuzzy
+msgid "/_Message/_Send queued messages"
+msgstr "/_Mesaj/Trimite mesa_jele din lista de ateptare"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Mesaj/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Mesaj/Compunere mesaj _nou"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Mesaj/_Rspunde"
+
+#: src/mainwindow.c:669
+#, fuzzy
+msgid "/_Message/Repl_y to"
+msgstr "/_Mesaj/Rspunde _la toi"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+#, fuzzy
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Mesaj/Rspunde _la toi"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+#, fuzzy
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Mesaj/_Rspuns"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+#, fuzzy
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Mesaj/Rspunde _la toi"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Mesaj/_naintare"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+#, fuzzy
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Mesaj/naintare ca a_taament"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+#, fuzzy
+msgid "/_Message/Redirec_t"
+msgstr "/_Mesaj/Re_editare"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Mesaj/M_utare..."
+
+#: src/mainwindow.c:681
+#, fuzzy
+msgid "/_Message/_Copy..."
+msgstr "/_Mesaj/M_utare..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Mesaj/ter_gere"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Mesaj/_Marcare"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Mesaj/_Marcare/_Marcare"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Mesaj/_Marcare/_Demarcare"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Mesaj/_Marcare/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Mesaj/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/mainwindow.c:689
+#, fuzzy
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Mesaj/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/mainwindow.c:691
+#, fuzzy
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Mesaj/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+#, fuzzy
+msgid "/_Message/Re-_edit"
+msgstr "/_Mesaj/Re_editare"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+#, fuzzy
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Utilitare/_Agend"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/Re_zumat/_Filtrare mesaje"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/Re_zumat/_Filtrare mesaje"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+#, fuzzy
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Fiier/Act_ualizare directoare"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+#, fuzzy
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Fiier/Act_ualizare directoare"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Fiier/Act_ualizare directoare"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Fiier/Act_ualizare directoare"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+#, fuzzy
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Fiier/Act_ualizare directoare"
+
+#: src/mainwindow.c:716
+#, fuzzy
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/Re_zumat/tergere mesaje _duplicate"
+
+#: src/mainwindow.c:719
+#, fuzzy
+msgid "/_Tools/E_xecute"
+msgstr "/E_xecutare"
+
+#: src/mainwindow.c:721
+#, fuzzy
+msgid "/_Tools/_Log window"
+msgstr "/_Utilitare/Fereastr _jurnal"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Configuraie"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Configuraie/Preferine _comune..."
+
+#: src/mainwindow.c:726
+#, fuzzy
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Configuraie/_Editare conturi..."
+
+#: src/mainwindow.c:728
+#, fuzzy
+msgid "/_Configuration/_Template..."
+msgstr "/_Configuraie/_Editare conturi..."
+
+#: src/mainwindow.c:729
+#, fuzzy
+msgid "/_Configuration/_Actions..."
+msgstr "/_Configuraie/_Editare conturi..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Configuraie/---"
+
+#: src/mainwindow.c:731
+#, fuzzy
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Configuraie/_Preferine per cont..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Configuraie/Creare cont _nou..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Configuraie/_Editare conturi..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Configuraie/_Selectare cont curent"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Ajutor/_Manual"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Ajutor/_Manual/_Englez"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Ajutor/_Manual/_Japonez"
+
+#: src/mainwindow.c:744
+#, fuzzy
+msgid "/_Help/_FAQ"
+msgstr "/A_jutor/_Despre"
+
+#: src/mainwindow.c:745
+#, fuzzy
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Ajutor/_Manual/_Englez"
+
+#: src/mainwindow.c:746
+#, fuzzy
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Ajutor/_Manual/_Englez"
+
+#: src/mainwindow.c:747
+#, fuzzy
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Ajutor/_Manual/_Englez"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr ""
+
+#: src/mainwindow.c:749
+#, fuzzy
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Ajutor/_Manual/_Englez"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Ajutor/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Creare fereastr principal...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Fereastra principal: alocarea culorii %d a euat\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "gata.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Neintitulat"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "nimic"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr ""
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "/_Fiier/_Cur筐are gunoi"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Dorii tergerea tuturor mesajelor din gunoi ?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Adugare cutie potal"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Introducei locaia cutiei potale.\n"
+"Dac este specificat o cutie potal existent, aceasta\n"
+"va fi scanat automat."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Cutia potal '%s' exist deja."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Cutie potal"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Crearea cutiei potale a euat.\n"
+"Probabil c anumite fiiere exist deja, sau nu avei permisiuni de "
+"scriereadecvate."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr ""
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr ""
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Rspunde"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Rspunde la toi"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Rspunde _la toi"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Rspunde _la toi"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_naintare"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+#, fuzzy
+msgid "/For_ward as attachment"
+msgstr "/naintare ca a_taament"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+#, fuzzy
+msgid "/Redirec_t"
+msgstr "/Re_editare"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Ia"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Recepionare mesaje noi pentru contul curent"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Ia tot"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Recepionare mesaje noi pentru toate conturile"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Trimiterea mesajului(lor) din lista de ateptare"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Creare"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Creare mesaj nou"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Rspuns"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Rspunde la mesaj"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Rspuns toi"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Rspunde la toi"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "naintare"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "naintare mesaj"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "tergere mesaj"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Executare"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Execut toate procesele marcate"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Urmtorul mesaj necitit"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Preferine"
+
+#: src/mainwindow.c:2238
+#, fuzzy
+msgid "Common preferences"
+msgstr "Preferine comune"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Cont"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Setri cont curent"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Ieire"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Dorii s prsii acest program ?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "fiierul temporar nu a putut fi scris\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Recepionare mesaje din %s n %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "fiierul mbox nu a putut fi citit.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "format mbox invalid: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "mbox malformat: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "fiierul temporar nu a putut fi deschis\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"From 'unescaped' gsit:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d mesaje gsite.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "fiierul lock %s nu poate fi creat\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "folosii 'flock' n loc de 'file' dac este posibil.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "nu poate fi creat %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "cutia potal este folosit de alt proces, atept...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "blocarea %s imposibil\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "tip de lock invalid\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "deblocarea %s imposibil\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "vidarea cutiei potale este imposibil.\n"
+
+#: src/mbox.c:410
+#, fuzzy, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Recepionare mesaje din %s n %s...\n"
+
+#: src/message_search.c:88
+#, fuzzy
+msgid "Find in current message"
+msgstr "salvare mesaj trimis...\n"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr ""
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Distincie minuscule/majuscule"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Cutare napoi"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Cutare"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Cutarea a euat"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Textul cutat nu a fost gsit."
+
+#: src/message_search.c:192
+#, fuzzy
+msgid "Beginning of message reached; continue from end?"
+msgstr "S-a atins prima linie din list; continuai de la sfrit ?"
+
+#: src/message_search.c:195
+#, fuzzy
+msgid "End of message reached; continue from beginning?"
+msgstr "S-a atins sfritul listei; continuai de la nceput ?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Cutarea a luat sfrit"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Creare vedere mesaj...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Salvare ca"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Suprascriere"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Dorii suprascrierea fiierului existent ?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, fuzzy, c-format
+msgid "Can't save the file `%s'."
+msgstr "Directorul `%s' nu a putut fi creat."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Imprimare"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Introducei linia de comand pentru imprimare:\n"
+"('%s' va fi nlocuit cu numele fiierului)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Linia de comand pentru imprimare este invalid:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "copierea mesajului %s n %s a euat\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Deschiderea fiierului marcaj este imposibil.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "directorul surs este identic cu cel destinaie.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Copiere mesaj %s%c%d n %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Ultimul numr din directorul %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Deschidere"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr ""
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Afiare ca te_xt"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Salvare ca..."
+
+#: src/mimeview.c:120
+#, fuzzy
+msgid "/_Check signature"
+msgstr "Inserare semntur"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Creare vedere MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tip MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+#, fuzzy
+msgid "Text"
+msgstr "nainte"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Ataamente"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr ""
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Salvarea prii selectate din mesajul multipart este imposibil."
+
+#: src/mimeview.c:858
+#, fuzzy
+msgid "Open with"
+msgstr "La ieire"
+
+#: src/mimeview.c:859
+#, fuzzy, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Introducei linia de comand pentru imprimare:\n"
+"('%s' va fi nlocuit cu numele fiierului)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Linia de comanda pentru vizualizare MIME este invalid: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "creare conexiune NNTP la %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "Conexiunea NNTP la %s:%d a fost ntrerupt. Reconectare...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "Articolul %d a fost deja stocat.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "Receptionare articol %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "articolul %d nu poate fi citit\n"
+
+#: src/news.c:540
+#, fuzzy
+msgid "can't retrieve newsgroup list\n"
+msgstr "Lista de newsgroup-uri nu a putut fi obinut."
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "postarea articolului este imposibil.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "articolul %d nu poate fi recepionat\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "grupul nu poate fi setat: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "interval invalid: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "nu exist articole noi.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "executare xover %d - %d n %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "xover imposibil\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "a avut loc o eroare n timpul execuiei xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "linie xover invalid: %s\n"
+
+#: src/news.c:836 src/news.c:868
+#, fuzzy
+msgid "can't get xhdr\n"
+msgstr "xover imposibil\n"
+
+#: src/news.c:848 src/news.c:880
+#, fuzzy
+msgid "error occurred while getting xhdr.\n"
+msgstr "a avut loc o eroare n timpul execuiei xover.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "ncercarea de conectare la serverul NNTP a euat: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "eroare de protocol: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "eroare de protocol\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "A avut loc o eroare la postare\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "A avut loc o eroare la procesarea mesajului."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr ""
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr ""
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Eroare de recepionare timestamp APOP\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Eroare de sintax timestamp\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Eroare protocol POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "linie xover invalid: %s\n"
+
+#: src/pop.c:621
+#, fuzzy, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "tergere mesaje duplicate..."
+
+#: src/pop.c:629
+#, fuzzy, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "Recepionare mesaj (%d / %d) (%s / %s octei)"
+
+#: src/pop.c:660
+#, fuzzy
+msgid "mailbox is locked\n"
+msgstr "Setri csu potal"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+#, fuzzy
+msgid "can't start TLS session\n"
+msgstr "salvarea mesajului este imposibil\n"
+
+#: src/pop.c:676 src/smtp.c:445
+#, fuzzy
+msgid "error occurred on authentication\n"
+msgstr "a avut loc o eroare la autorizaie\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Command"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "a avut loc o eroare la autorizaie\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Citire configuraie...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Gsit: %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Sfritul citirii configuraiei.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Configuraia a fost salvat.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Aplicare"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Deschidere fereastr de configurare cont...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Cont%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Preferine pentru noul cont"
+
+#: src/prefs_account.c:652
+#, fuzzy
+msgid "Account preferences"
+msgstr "Preferine comune"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Creare fereastr de preferine cont...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Recepionare"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr ""
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr ""
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avansat"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Numele contului"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr ""
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Informatii personale"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Nume complet"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Adresa de mail"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizaie"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informatii despre server"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Nimic (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr ""
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Server news"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server pentru recepionare"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Server SMTP (trimitere)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Utilizator"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Parola"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "a avut loc o eroare la autorizaie\n"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "tergere mesaje de pe server dup primire"
+
+#: src/prefs_account.c:1007
+#, fuzzy
+msgid "Remove after"
+msgstr "tergere director"
+
+#: src/prefs_account.c:1016
+#, fuzzy
+msgid "days"
+msgstr "Alias"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr ""
+
+#: src/prefs_account.c:1040
+#, fuzzy
+msgid "Download all messages on server"
+msgstr "Recepionare toate mesajele de pe server"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr ""
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrare mesaje la primire"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr ""
+
+#: src/prefs_account.c:1091
+#, fuzzy
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "Deschide primul mesaj necitit la intrarea ntr-un director"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+#, fuzzy
+msgid "Authentication method"
+msgstr "Autentificare..."
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automat"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr ""
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Antet"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Adugare cmp Date la antet"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generare Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Adugare de cmpuri definite de utilizator"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Editare..."
+
+#: src/prefs_account.c:1200
+#, fuzzy
+msgid "Authentication"
+msgstr "Autentificare..."
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr ""
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr ""
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Command"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+#, fuzzy
+msgid "Automatically set the following addresses"
+msgstr "Setare automat a adreselor urmtoare"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Reply-To"
+
+#: src/prefs_account.c:1447
+#, fuzzy
+msgid "Encrypt message by default"
+msgstr "Taie liniile mesajului la"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr ""
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr ""
+
+#: src/prefs_account.c:1453
+#, fuzzy
+msgid "Use clear text signature"
+msgstr "Inserare semntur"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr ""
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr ""
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr ""
+
+#: src/prefs_account.c:1483
+#, fuzzy
+msgid "Specify key manually"
+msgstr "Nume domeniu"
+
+#: src/prefs_account.c:1499
+#, fuzzy
+msgid "User or key ID:"
+msgstr "Utilizator"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr ""
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr ""
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr ""
+
+#: src/prefs_account.c:1614
+#, fuzzy
+msgid "Use SSL for IMAP4 connection"
+msgstr "creare conexiune tunel IMAP4\n"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr ""
+
+#: src/prefs_account.c:1635
+#, fuzzy
+msgid "Use SSL for NNTP connection"
+msgstr "creare conexiune tunel IMAP4\n"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr ""
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr ""
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Port SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Port POP3"
+
+#: src/prefs_account.c:1770
+#, fuzzy
+msgid "Specify IMAP4 port"
+msgstr "Port SMTP"
+
+#: src/prefs_account.c:1776
+#, fuzzy
+msgid "Specify NNTP port"
+msgstr "Port SMTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Nume domeniu"
+
+#: src/prefs_account.c:1799
+#, fuzzy
+msgid "IMAP server directory"
+msgstr "Serverul IMAP4 nu a fost introdus."
+
+#: src/prefs_account.c:1853
+#, fuzzy
+msgid "Put sent messages in"
+msgstr "Salvare mesaje trimise n outbox"
+
+#: src/prefs_account.c:1855
+#, fuzzy
+msgid "Put draft messages in"
+msgstr "Taie liniile mesajului la"
+
+#: src/prefs_account.c:1857
+#, fuzzy
+msgid "Put deleted messages in"
+msgstr "tergere mesaj"
+
+#: src/prefs_account.c:1917
+#, fuzzy
+msgid "Account name is not entered."
+msgstr "Adresa de mail nu a fost introdus."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Adresa de mail nu a fost introdus."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Serverul SMTP nu a fost introdus."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Numele de utilizator nu a fost introdus."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Serverul POP3 nu a fost introdus."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Serverul IMAP4 nu a fost introdus."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Serverul NNTP nu a fost introdus."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Scriere configuraia filtrului...\n"
+
+#: src/prefs_actions.c:190
+#, fuzzy
+msgid "Menu name:"
+msgstr "Nume complet"
+
+#: src/prefs_actions.c:199
+#, fuzzy
+msgid "Command line:"
+msgstr "Command"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "/_Utilitare/_Modele"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr ""
+
+#: src/prefs_actions.c:288
+#, fuzzy
+msgid "Registered actions"
+msgstr "Reguli nregistrate"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nou)"
+
+#: src/prefs_actions.c:464
+#, fuzzy
+msgid "Menu name is not set."
+msgstr "Antetul nu a fost definit."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr ""
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr ""
+
+#: src/prefs_actions.c:488
+#, fuzzy
+msgid "Command line not set."
+msgstr "Antetul nu a fost definit."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr ""
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+
+#: src/prefs_actions.c:559
+#, fuzzy
+msgid "Delete action"
+msgstr "tergere cont"
+
+#: src/prefs_actions.c:560
+#, fuzzy
+msgid "Do you really want to delete this action?"
+msgstr "Suntei sigur c dorii s tergei acest cont ?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Creare fereastr de preferine comune...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Preferine comune"
+
+#: src/prefs_common.c:856
+#, fuzzy
+msgid "Quote"
+msgstr "Lista de ateptare"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Afiare"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Mesaj"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Altele"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Program extern"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Folosete un program extern pentru incorporare"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Command"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Spool local"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Incorporare din spool"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrare la incorporare"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Verificare automat a potei"
+
+#: src/prefs_common.c:980
+#, fuzzy
+msgid "every"
+msgstr "Server"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minut(e)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Verificare pot la pornire"
+
+#: src/prefs_common.c:1003
+#, fuzzy
+msgid "Update all local folders after incorporation"
+msgstr "Folosete un program extern pentru incorporare"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+#, fuzzy
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Numrul maxim al articolului\n"
+"pentru recepionare (0 = nelimitat) "
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Folosire program extern pentru trimitere"
+
+#: src/prefs_common.c:1109
+#, fuzzy
+msgid "Save sent messages to outbox"
+msgstr "Salvare mesaje trimise n outbox"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Set de caractere"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr ""
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ASCII (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Vest European (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+#, fuzzy
+msgid "Western European (ISO-8859-15)"
+msgstr "Vest European (ISO-8859-1)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Central European (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltic (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltic (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grec (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turcesc (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Chirilic (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Chirilic (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Chirilic (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Chirilic (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonez (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonez (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonez (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Chinezesc Simplificat (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Chinezesc Tradiional (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Chinezesc Tradiional (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Chinezesc"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Corean"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr ""
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr ""
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "Taie liniile nainte de trimitere"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Separator de semntur"
+
+#: src/prefs_common.c:1285
+#, fuzzy
+msgid "Insert automatically"
+msgstr "Insereaz semntura automat"
+
+#: src/prefs_common.c:1295
+#, fuzzy
+msgid "Automatically launch the external editor"
+msgstr "Editare cu editor extern"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr ""
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Taie liniile mesajului la"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "caractere"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Taie liniile semnturii"
+
+#: src/prefs_common.c:1353
+#, fuzzy
+msgid "Wrap on input"
+msgstr "Tiere toate liniile lungi"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Taie liniile nainte de trimitere"
+
+#: src/prefs_common.c:1365
+#, fuzzy
+msgid "Automatically select account for replies"
+msgstr "Setare automat a adreselor urmtoare"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citeaz mesajul la care se rspunde"
+
+#: src/prefs_common.c:1369
+#, fuzzy
+msgid "Reply button invokes mailing list reply"
+msgstr "/Rspunde _la toi"
+
+#: src/prefs_common.c:1415
+#, fuzzy
+msgid "Reply format"
+msgstr "Rspunde la toi"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Semn de citare"
+
+#: src/prefs_common.c:1454
+#, fuzzy
+msgid "Forward format"
+msgstr "naintare"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Descrierea simbolurilor "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Font"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Traducere antet (cu ar fi 'From:', 'Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Afiare numr de mesaje necitite lng numele directorului"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr ""
+
+#: src/prefs_common.c:1598
+#, fuzzy
+msgid "letters"
+msgstr "tergere"
+
+#: src/prefs_common.c:1604
+#, fuzzy
+msgid "Summary View"
+msgstr "/Re_zumat"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Destinatarul pe coloana 'From', daca suntei expeditorul"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr ""
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+#, fuzzy
+msgid "Date format"
+msgstr "Format de citare:"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Elemente afiate... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Colorare mesaje"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Afiare caractere pe 2 bii cu un alfabet pe 1 bit"
+
+#: src/prefs_common.c:1728
+#, fuzzy
+msgid "Display header pane above message view"
+msgstr "Afiare antet scurt"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Afiare antet scurt"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Spaiere linii"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(i)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Las spaiu la nceput"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr ""
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr ""
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr ""
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr ""
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+#, fuzzy
+msgid "Automatically check signatures"
+msgstr "Setare automat a adreselor urmtoare"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr ""
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr ""
+
+#: src/prefs_common.c:1884
+#, fuzzy
+msgid "Expired after"
+msgstr "Mai trziu"
+
+#: src/prefs_common.c:1897
+#, fuzzy
+msgid "minute(s) "
+msgstr "minut(e)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr ""
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr ""
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "un mesaj nu a putut fi recepionat\n"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Deschide primul mesaj necitit la intrarea ntr-un director"
+
+#: src/prefs_common.c:1984
+#, fuzzy
+msgid "Only mark message as read when opened in new window"
+msgstr "/_Mesaj/Desc_hidere n fereastr nou"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr ""
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr ""
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "Recepionare"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr ""
+
+#: src/prefs_common.c:2029
+#, fuzzy
+msgid "Always"
+msgstr "Alias"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+#, fuzzy
+msgid "Never"
+msgstr "Server"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr ""
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr ""
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr ""
+
+#: src/prefs_common.c:2102
+#, fuzzy, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Editor extern (%s va fi nlocuit de numele fiierului)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr ""
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr ""
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "La ieire"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Confirmare ieire"
+
+#: src/prefs_common.c:2192
+#, fuzzy
+msgid "Empty trash on exit"
+msgstr "Cur筐are gunoi"
+
+#: src/prefs_common.c:2194
+#, fuzzy
+msgid "Ask before emptying"
+msgstr "ntreab nainte de cur筐are"
+
+#: src/prefs_common.c:2198
+#, fuzzy
+msgid "Warn if there are queued messages"
+msgstr "Trimiterea mesajului(lor) din lista de ateptare"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr ""
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr ""
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr ""
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr ""
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr ""
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr ""
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr ""
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr ""
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr ""
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr ""
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr ""
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr ""
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr ""
+
+#: src/prefs_common.c:2430
+#, fuzzy
+msgid "Specifier"
+msgstr "Selectare fiier"
+
+#: src/prefs_common.c:2431
+#, fuzzy
+msgid "Description"
+msgstr "Destinaie"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr ""
+
+#: src/prefs_common.c:2556
+#, fuzzy
+msgid "Set message colors"
+msgstr "Trimitere mesaj"
+
+#: src/prefs_common.c:2564
+#, fuzzy
+msgid "Colors"
+msgstr "nchidere"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr ""
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr ""
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr ""
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr ""
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr ""
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr ""
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr ""
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr ""
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr ""
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Descrierea simbolurilor"
+
+#: src/prefs_common.c:2884
+#, fuzzy
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Data\n"
+"De la\n"
+"Numele complet al expeditorului\n"
+"Primul nume al expeditorului\n"
+"Iniiala expeditorului\n"
+"Subiect\n"
+"La\n"
+"Message-ID\n"
+"Semnul %"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr ""
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Selectare font"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr ""
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+#, fuzzy
+msgid "Default"
+msgstr "tergere"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr ""
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr ""
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr ""
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Antetul nu a fost definit."
+
+#: src/prefs_customheader.c:541
+#, fuzzy
+msgid "Delete header"
+msgstr "tergere director"
+
+#: src/prefs_customheader.c:542
+#, fuzzy
+msgid "Do you really want to delete this header?"
+msgstr "Suntei sigur c dorii s tergei aceast regul ?"
+
+#: src/prefs_display_header.c:175
+#, fuzzy
+msgid "Creating display header setting window...\n"
+msgstr "Creare fereastr antet...\n"
+
+#: src/prefs_display_header.c:198
+#, fuzzy
+msgid "Display header setting"
+msgstr "/Afiare ca te_xt"
+
+#: src/prefs_display_header.c:222
+#, fuzzy
+msgid "Header name"
+msgstr "Antet"
+
+#: src/prefs_display_header.c:254
+#, fuzzy
+msgid "Displayed Headers"
+msgstr "Nume Afiat"
+
+#: src/prefs_display_header.c:312
+#, fuzzy
+msgid "Hidden headers"
+msgstr "Antet"
+
+#: src/prefs_display_header.c:342
+#, fuzzy
+msgid "Show all unspecified headers"
+msgstr "/_Afiare antet"
+
+#: src/prefs_display_header.c:367
+#, fuzzy
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Citire configuraie...\n"
+
+#: src/prefs_display_header.c:405
+#, fuzzy
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Scriere configuraia filtrului...\n"
+
+#: src/prefs_display_header.c:537
+#, fuzzy
+msgid "This header is already in the list."
+msgstr "Directorul '%s' exist deja."
+
+#: src/prefs_filter.c:191
+#, fuzzy
+msgid "Filter setting"
+msgstr "Filtrare"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "La:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Copiere..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "tergere regul"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Suntei sigur c dorii s tergei aceast regul ?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "tergere regul"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Antet"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Antet"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Mesaj"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "conine"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "nu conine"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Jos"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Copiere..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "tergere"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "tergere director"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Observaii"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Trimitere mesaj"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/naintare ca a_taament"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Re_editare"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Executare"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Director"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adres"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Antet"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Antet"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Antet"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Destinatarul nu a fost specificat."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Antetul nu a fost definit."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Destinaia nu a fost definit."
+
+#: src/prefs_filter_edit.c:1872
+#, fuzzy
+msgid "Invalid action exists."
+msgstr "Lun invalid\n"
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Antetul nu a fost definit."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: fiierul nu exist\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Proprietate"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr ""
+
+#: src/prefs_folder_item.c:216
+#, fuzzy
+msgid "Normal"
+msgstr "Mod Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr ""
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Rspuns La:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Marcaj"
+
+#: src/prefs_summary_column.c:69
+#, fuzzy
+msgid "Attachment"
+msgstr "Ataamente"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Subiect"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "De la"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Data"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Numr"
+
+#: src/prefs_summary_column.c:166
+#, fuzzy
+msgid "Creating summary column setting window...\n"
+msgstr "Creare fereastr de editarea conturilor...\n"
+
+#: src/prefs_summary_column.c:174
+#, fuzzy
+msgid "Summary display item setting"
+msgstr "/Re_zumat/Selectare elemente afiate..."
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+
+#: src/prefs_summary_column.c:218
+#, fuzzy
+msgid "Available items"
+msgstr "Adrese Disponibile"
+
+#: src/prefs_summary_column.c:236
+#, fuzzy
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+#, fuzzy
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+#, fuzzy
+msgid "Displayed items"
+msgstr "Definire elemente afiate"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr ""
+
+#: src/prefs_template.c:157
+#, fuzzy
+msgid "Template name"
+msgstr "Numele fiierului"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "nregistrare"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Substituire "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr ""
+
+#: src/prefs_template.c:248
+#, fuzzy
+msgid "Registered templates"
+msgstr "Reguli nregistrate"
+
+#: src/prefs_template.c:268
+#, fuzzy
+msgid "Templates"
+msgstr "/_Utilitare/_Modele"
+
+#: src/prefs_template.c:378
+#, fuzzy
+msgid "Template"
+msgstr "/_Utilitare/_Modele"
+
+#: src/prefs_template.c:447
+#, fuzzy
+msgid "Template format error."
+msgstr "Eroare de formatare a citaiei."
+
+#: src/prefs_template.c:523
+#, fuzzy
+msgid "Delete template"
+msgstr "tergere mesaj"
+
+#: src/prefs_template.c:524
+#, fuzzy
+msgid "Do you really want to delete this template?"
+msgstr "Suntei sigur c dorii s tergei aceast regul ?"
+
+#: src/procmime.c:742
+#, fuzzy
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "Convertirea codului a euat.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "deschiderea fiierului de marcaje este imposibil\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "mesajul %d nu a putut fi recepionat\n"
+
+#: src/procmsg.c:1207
+#, fuzzy, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Trimiterea mesajelor din lista de ateptare a euat.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Linia de comand pentru imprimare este invalid: '%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr ""
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Creare dialog de progres...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "a aprut o eroare la recepionarea datelor.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Scrierea n fiier este imposibil.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+#, fuzzy
+msgid "Oops: Signature not verified"
+msgstr "Fiier semntur"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+#, fuzzy
+msgid "No signature found"
+msgstr "Nu a fost gsit nici un dicionar\n"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+#, fuzzy
+msgid "Good signature"
+msgstr "Semntur"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+#, fuzzy
+msgid "BAD signature"
+msgstr "Semntur"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr ""
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr ""
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr ""
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr ""
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr ""
+
+#: src/rfc2015.c:175
+#, fuzzy, c-format
+msgid "BAD signature from \"%s\""
+msgstr "Semntur"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr ""
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr ""
+
+#: src/rfc2015.c:246
+#, fuzzy, c-format
+msgid "Signature made at %s\n"
+msgstr "Fiier semntur"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr ""
+
+#: src/select-keys.c:102
+#, fuzzy, c-format
+msgid "Please select key for `%s'"
+msgstr "Selectai un fiier."
+
+#: src/select-keys.c:105
+#, fuzzy, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Conectare la %s ..."
+
+#: src/select-keys.c:271
+#, fuzzy
+msgid "Select Keys"
+msgstr "Selectare fiier"
+
+#: src/select-keys.c:298
+#, fuzzy
+msgid "Key ID"
+msgstr "Utilizator"
+
+#: src/select-keys.c:301
+#, fuzzy
+msgid "Val"
+msgstr "Valoare"
+
+#: src/select-keys.c:444
+#, fuzzy
+msgid "Add key"
+msgstr "Adugare"
+
+#: src/select-keys.c:445
+#, fuzzy
+msgid "Enter another user or key ID:"
+msgstr "Utilizator"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Antetul mesajului din lista de ateptare este invalid.\n"
+
+#: src/send_message.c:384
+#, fuzzy
+msgid "Connecting"
+msgstr "Conectare la %s ..."
+
+#: src/send_message.c:388
+#, fuzzy, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Conectare la serverul SMTP: %s ...\n"
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "Trimitere"
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "Autentificare..."
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Trimitere mesaj"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "Trimitere"
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr ""
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+#, fuzzy
+msgid "Sending"
+msgstr "Trimitere"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr ""
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr ""
+
+#: src/send_message.c:477
+#, fuzzy
+msgid "Quitting..."
+msgstr "nchidere conexiune"
+
+#: src/send_message.c:505
+#, fuzzy, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Recepionare mesaj (%d / %d) (%s / %s octei)"
+
+#: src/send_message.c:533
+#, fuzzy
+msgid "Sending message"
+msgstr "Trimitere mesaj"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "A avut loc o eroare la ncercarea de a trimite mesajul."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "A avut loc o eroare la ncercarea de a trimite mesajul."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Setri csu potal"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"n primul rnd trebuie setat locaia cutiei potale.\n"
+"Putei folosi o cutie potal existent\n"
+"n format MH dac avei una.\n"
+"Dac nu suntei sigur, selectai OK."
+
+#: src/sigstatus.c:129
+#, fuzzy
+msgid "Checking signature"
+msgstr "Inserare semntur"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr ""
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "a avut loc o eroare la autorizaie\n"
+
+#: src/sourcewindow.c:63
+#, fuzzy
+msgid "Creating source window...\n"
+msgstr "Creare fereastr jurnal...\n"
+
+#: src/sourcewindow.c:67
+#, fuzzy
+msgid "Source of the message"
+msgstr "Rspunde la mesaj"
+
+#: src/sourcewindow.c:132
+#, fuzzy, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Afiarea antetelor %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr ""
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr ""
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr ""
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr ""
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr ""
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr ""
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr ""
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr ""
+
+#: src/ssl.c:106
+#, fuzzy, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Conexiunea a euat"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr ""
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr ""
+
+#: src/ssl.c:124
+#, fuzzy, c-format
+msgid " Subject: %s\n"
+msgstr "Subiect:"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr ""
+
+#: src/summary_search.c:106
+#, fuzzy
+msgid "Search messages"
+msgstr "Trimitere mesaj"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Setare automat a adreselor urmtoare"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr ""
+
+#: src/summary_search.c:213
+#, fuzzy
+msgid "Select all matched"
+msgstr "/Selectare t_ot"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "S-a atins prima linie din list; continuai de la sfrit ?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "S-a atins sfritul listei; continuai de la nceput ?"
+
+#: src/summaryview.c:341
+#, fuzzy
+msgid "/Repl_y to"
+msgstr "/Rspunde _la toi"
+
+#: src/summaryview.c:342
+#, fuzzy
+msgid "/Repl_y to/_all"
+msgstr "/Rspunde _la toi"
+
+#: src/summaryview.c:343
+#, fuzzy
+msgid "/Repl_y to/_sender"
+msgstr "/Rspunde _la toi"
+
+#: src/summaryview.c:344
+#, fuzzy
+msgid "/Repl_y to/mailing _list"
+msgstr "/Rspunde _la toi"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/M_utare..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Copiere..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Marcare"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Marcare/_Marcare"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Marcare/_Demarcare"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Marcare/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/summaryview.c:360
+#, fuzzy
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/summaryview.c:362
+#, fuzzy
+msgid "/_Mark/Mark all _read"
+msgstr "/_Marcare/Marcare mesaj n_ecitit"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr ""
+
+#: src/summaryview.c:365
+#, fuzzy
+msgid "/Re-_edit"
+msgstr "/Re_editare"
+
+#: src/summaryview.c:367
+#, fuzzy
+msgid "/Add sender to address boo_k"
+msgstr "Adugare agend"
+
+#: src/summaryview.c:373
+#, fuzzy
+msgid "/_View/_Source"
+msgstr "/_Vedere/_La"
+
+#: src/summaryview.c:374
+#, fuzzy
+msgid "/_View/All _header"
+msgstr "Toate antetele"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Im_primare..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nu."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Creare rezumat...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Procesare marcaje"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Au mai rmas nite marcaje. Dorii s fie procesate ?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Scanare director (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+#, fuzzy
+msgid "No more unread messages"
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:922
+#, fuzzy
+msgid "No unread message found. Search from the end?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:931
+#, fuzzy
+msgid "No unread messages."
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+#, fuzzy
+msgid "Search again"
+msgstr "Cutarea a euat"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+#, fuzzy
+msgid "No more new messages"
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:978
+#, fuzzy
+msgid "No new message found. Search from the end?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:987
+#, fuzzy
+msgid "No new messages."
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:1002
+#, fuzzy
+msgid "No new message found. Go to next folder?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+#, fuzzy
+msgid "No more marked messages"
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:1034
+#, fuzzy
+msgid "No marked message found. Search from the end?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+#, fuzzy
+msgid "No marked messages."
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:1059
+#, fuzzy
+msgid "No marked message found. Search from the beginning?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+#, fuzzy
+msgid "No more labeled messages"
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:1084
+#, fuzzy
+msgid "No labeled message found. Search from the end?"
+msgstr ""
+"Nu au fost gsite mesaje necitite.\n"
+"Dorii avansarea la directorul urmtor ?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+#, fuzzy
+msgid "No labeled messages."
+msgstr "Nu exist mesaje necitite"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr ""
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Atragere mesaje dup subiect..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d ters(e)"
+
+#: src/summaryview.c:1466
+#, fuzzy, c-format
+msgid "%s%d moved"
+msgstr "%d mutat(e)"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, fuzzy, c-format
+msgid "%s%d copied"
+msgstr "%d mutat(e)"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " elemente selectate"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d noi, %d necitite, %d n total (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nou(i), %d necitit(e), %d n total"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sortare rezumat..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tDefinire rezumat din datele din mesaj..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Definire rezumat din datele din mesaj..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Scriere cache rezumat (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Fr Dat)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Mesajul %d este marcat\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Mesajul %d este marcat ca citit\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Mesajul %d este marcat ca necitit\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Mesajul %s/%d este marcat pentru tergere\n"
+
+#: src/summaryview.c:2392
+#, fuzzy
+msgid "Delete message(s)"
+msgstr "tergere mesaj"
+
+#: src/summaryview.c:2393
+#, fuzzy
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Suntei sigur c dorii s tergei aceast regul ?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "tergere mesaje duplicate..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Mesajul %s/%d este demarcat\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Mesajul %d este marcat pentru mutare n %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Destinaia este aceeai cu directorul curent."
+
+#: src/summaryview.c:2592
+#, fuzzy, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Mesajul %d este marcat pentru mutare n %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Destinaia este aceeai cu directorul curent."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Selectare toate mesajele..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "A avut loc o eroare la procesarea mesajului."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Construire fire de discuie..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Distrugere fire de discuie..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Distrugere fire de discuie pentru executare..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrare..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrare..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "mesajul %d a fost deja stocat.\n"
+
+#: src/template.c:169
+#, fuzzy, c-format
+msgid "file %s already exists\n"
+msgstr "Directorul '%s' exist deja."
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Creare vedere text...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "un mesaj nu a putut fi recepionat\n"
+
+#: src/textview.c:593
+#, fuzzy
+msgid "To save this part, pop up the context menu with "
+msgstr " Pentru salvare, activai meniul contextual cu\n"
+
+#: src/textview.c:594
+#, fuzzy
+msgid "right click and select `Save as...', "
+msgstr ""
+" click dreapta i selectai 'Salvare ca...', sau apsai\n"
+" tasta 'y'.\n"
+"\n"
+
+#: src/textview.c:595
+#, fuzzy
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+" 'Afiare ca text' sau apsai pe 't'.\n"
+"\n"
+
+#: src/textview.c:597
+#, fuzzy
+msgid "To display this part as a text message, select "
+msgstr " Pentru afiare ca mesaj text, selectai\n"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+" 'Afiare ca text' sau apsai pe 't'.\n"
+"\n"
+
+#: src/textview.c:600
+#, fuzzy
+msgid "To open this part with external program, select "
+msgstr " Pentru deschiderea cu un program extern, selectai 'Deschidere',\n"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr ""
+
+#: src/textview.c:602
+#, fuzzy
+msgid "or double-click, or click the center button, "
+msgstr " apsai dublu-click sau click-mijloc, sau apasai 'l'."
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr ""
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr ""
+
+#: src/textview.c:623
+#, fuzzy
+msgid "To check it, pop up the context menu with\n"
+msgstr " Pentru salvare, activai meniul contextual cu\n"
+
+#: src/textview.c:624
+#, fuzzy
+msgid "right click and select `Check signature'.\n"
+msgstr ""
+" click dreapta i selectai 'Salvare ca...', sau apsai\n"
+" tasta 'y'.\n"
+"\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "scrierea n %s a euat.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Deschiderea fiierului %s este imposibil\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normal)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/tergere _cutie potal"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/tergere cont _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/tergere cont _news"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Mesaj/_Trimitere"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Message/_Semnare"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "nu exist mesaje n cutia potal local.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Director spool"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Citare"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "Selectare ... "
+
+#, fuzzy
+#~ msgid "Condition"
+#~ msgstr "/_Configuraie"
+
+#~ msgid "Keyword"
+#~ msgstr "Cuvnt cheie"
+
+#~ msgid "Destination"
+#~ msgstr "Destinaie"
+
+#~ msgid "Use regex"
+#~ msgstr "Folosire regexp"
+
+#~ msgid "Registered rules"
+#~ msgstr "Reguli nregistrate"
+
+#~ msgid "(none)"
+#~ msgstr "(nimic)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Linia de comand pentru deschiderea unui URL este invalid: '%s'"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/_Fiier/Act_ualizare directoare"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/_Fiier/Act_ualizare directoare"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/_Fiier/Act_ualizare directoare"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/_Fiier/Act_ualizare directoare"
+
+#, fuzzy
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/_Fiier/Act_ualizare directoare"
+
+#~ msgid "Queueing"
+#~ msgstr "Punere pe lista de ateptare"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "A avut loc o eroare la ncercarea de a trimite mesajul.\n"
+#~ "Dorii punerea acestui mesaj n lista de ateptare ?"
+
+#, fuzzy
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Punere n lista de ateptare a mesajelor cu erori la trimitere"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/E_xecutare"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Selectare t_ot"
+
+#, fuzzy
+#~ msgid "/Select t_hread"
+#~ msgstr "/Selectare t_ot"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "grupul nu poate fi setat: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "un mesaj nu a putut fi recepionat\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Mesaj/Recep_ionare pot"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNu exist fiier cache\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tCitire fiier rezumat cache..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Versiunea de cache este diferit. tergere.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Fiierul de marcaje nu a fost gsit.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Versiunea de marcaje este diferit (%d != %d). tergere.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Nu se poate deschide fiierul de marcaje n mod 'append'.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Nu se poate deschide fiierul de marcaje n mod 'write'.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "fiierul lock %s nu poate fi creat\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "director gol\n"
+#~ "\n"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "poziia ferestrei: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Setare widgets..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Mutare mesaj %s%c%d n %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tMarcare mesaje..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d mesaje noui\n"
+
+#, fuzzy
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "tergerea cutiei potale este imposibil\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "recepionare mesaj %d...\n"
+
+#, fuzzy
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "tergere mesaje stocate %d - %d... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "tergerea tuturor mesajelor stocate... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Calculare numr total de mesaje...\n"
+
+#, fuzzy
+#~ msgid "Could not get message file."
+#~ msgstr "Fiierul nu a putut fi citit."
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "A avut loc o eroare la procesarea mesajului."
+
+#, fuzzy
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "A avut loc o eroare la ncercarea de a trimite mesajul."
+
+#~ msgid "Predicate"
+#~ msgstr "Predicat"
+
+#, fuzzy
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Creare fereastr jurnal...\n"
+
+#, fuzzy
+#~ msgid "Actions setting"
+#~ msgstr "Setri cont curent"
+
+#, fuzzy
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Citire configuraie...\n"
+
+#, fuzzy
+#~ msgid "Action command error\n"
+#~ msgstr "eroare de protocol\n"
+
+#, fuzzy
+#~ msgid "Socket error\n"
+#~ msgstr "eroare de protocol\n"
+
+#, fuzzy
+#~ msgid "Account not found.\n"
+#~ msgstr "%s negsit.\n"
+
+#, fuzzy
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Editorul extern nu poate fi executat\n"
+
+#, fuzzy
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "A avut loc o eroare la trimiterea de 'HELO'\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "ncercarea de conectare la serverul SMTP a euat: %s:%d\n"
+
+#, fuzzy
+#~ msgid "SSL connection failed"
+#~ msgstr "Conexiunea a euat"
+
+#, fuzzy
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "A avut loc o eroare la postare\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "A avut loc o eroare la trimiterea de 'HELO'\n"
+
+#, fuzzy
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "A avut loc o eroare la trimiterea de 'HELO'\n"
+
+#, fuzzy
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "A avut loc o eroare la trimiterea de 'HELO'\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Fiier semntur"
+
+#, fuzzy
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Creare fereastr antet...\n"
+
+#, fuzzy
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Citire configuraia filtrului...\n"
+
+#, fuzzy
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Scriere configuraia filtrului...\n"
+
+#, fuzzy
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Creare fereastr jurnal...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "Citire configuraia filtrului...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Scriere configuraia filtrului...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tCutare mesaje nestocate... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d mesaj(e) nestocat(e) gsit(e).\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tSortare mesaje nestocate n ordine numeric... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "set de caractere forat: %s\n"
+
+#, fuzzy
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Afiare numr de mesaje necitite lng numele directorului"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Terminare"
+
+#~ msgid "Done"
+#~ msgstr "Gata"
+
+#, fuzzy
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "/Verificare _mesaje noi"
+
+#, fuzzy
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/R_escanare directoare"
+
+#, fuzzy
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "Directorul '%s' exist deja."
+
+#, fuzzy
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "Deschiderea fiierului %s este imposibil\n"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "salvare mesaj trimis...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "salvarea mesajului este imposibil\n"
+
+#, fuzzy
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Creare dialog de progres...\n"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Creare fereastr jurnal...\n"
+
+#, fuzzy
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "tergere mesaje stocate %d - %d... "
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\ttergere toate articolele stocate... "
+
+#, fuzzy
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Codul extras din fetchmail este Copyright 1997 Eric S. \n"
+#~ "Raymond. Anumite pri sunt de asemenea Copyright Carl Harris,\n"
+#~ "1993 si 1995. Copyright-urile sunt meninute pentru protejarea\n"
+#~ "redistribuiei libere a sursei.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc este Copyright Yasuhiro Tonooka <tonooka@msi.co.jp>,\n"
+#~ "iar libkcc este Copyright takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "Eroare de alocare a memoriei\n"
+
+#, fuzzy
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/_Vedere/Vedere _mesaj"
+
+#, fuzzy
+#~ msgid "%s already exists."
+#~ msgstr "Directorul '%s' exist deja."
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Suntei sigur c dorii tergerea directorului '%s' ?"
+
+#, fuzzy
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "A avut loc o eroare la postare\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Utilitare"
+
+#~ msgid "Outbox"
+#~ msgstr "Outbox"
+
+#, fuzzy
+#~ msgid "Skipping message %d\n"
+#~ msgstr "recepionare mesaj %d...\n"
+
+#~ msgid ""
+#~ "The MD5 support is copyright by RSA Data Security, Inc. See the\n"
+#~ "header comment of the md5.c module for license terms.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Suportul MD5 este Copyright RSA Data Security, Inc. A se vedea\n"
+#~ "comentariile din antetul modulului md5.c pentru termenii de licen.\n"
+#~ "\n"
+
+#~ msgid "Removing deleted account references for all the folders...\n"
+#~ msgstr ""
+#~ "tergere referine despre toate conturile inexistente din toate "
+#~ "directoarele...\n"
+
+#~ msgid "/_Tools/Import M_utt"
+#~ msgstr "/_Utilitare/Importare fiier _Mutt"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Mesaj/_La"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Mesaj/_Cc"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Mesaj/_Bcc"
+
+#~ msgid "/_Message/_Followup to"
+#~ msgstr "/_Mesaj/_Urmare"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Mesaj/_Ataament"
+
+#~ msgid "/_Message/_Request Return Receipt"
+#~ msgstr "/_Message/Ce_rere confirmare de primire"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Utilitare/Arat ri_gla"
+
+#~ msgid "Followup-To:"
+#~ msgstr "Urmare La:"
+
+#~ msgid "Writing bounce header\n"
+#~ msgstr "Scriere header de redirectare\n"
+
+#~ msgid "No account for sending mails available!"
+#~ msgstr "Nu exist nici un cont de trimitere a mesajelor!"
+
+#~ msgid "No account for posting news available!"
+#~ msgstr "Nu exista nici un cont pentru postarea de articole!"
+
+#~ msgid "Writing %s-header\n"
+#~ msgstr "Scrierea antetului %s\n"
+
+#~ msgid "Save Message to "
+#~ msgstr "Salvare mesaj n "
+
+#~ msgid "Others"
+#~ msgstr "Altele"
+
+#~ msgid "/_Processing..."
+#~ msgstr "/_Procesare..."
+
+#~ msgid "/_Scoring..."
+#~ msgstr "/S_coruri..."
+
+#~ msgid "/_Search folder..."
+#~ msgstr "/Cutare _director..."
+
+#~ msgid "/S_coring..."
+#~ msgstr "/S_coruri..."
+
+#~ msgid "The folder `%s' could not be created."
+#~ msgstr "Directorul `%s' nu a putut fi creat."
+
+#~ msgid "can't remove folder `%s'\n"
+#~ msgstr "tergerea directorului '%s' este imposibil\n"
+
+#~ msgid "Pspell could not be started."
+#~ msgstr "Pspell nu a putut fi lansat."
+
+#~ msgid "Pspell error : %s\n"
+#~ msgstr "Eroare pspell: %s\n"
+
+#~ msgid "Pspell could not be configured."
+#~ msgstr "Pspell nu a putut fi configurat."
+
+#~ msgid "Pspell encoding: asked: %s changed to: %s\n"
+#~ msgstr "Codare Pspell cerut: %s, convertit n: %s\n"
+
+#~ msgid ""
+#~ "Pspell encoding error: %s\n"
+#~ "Switching to iso8859-1 (sorry)\n"
+#~ msgstr ""
+#~ "Eroare codare Pspell: %s\n"
+#~ "Trecere la iso8859-1 (scuze)\n"
+
+#~ msgid ""
+#~ "Language : %s\n"
+#~ "Spelling: %s\n"
+#~ "Jargon: %s\n"
+#~ "Module: %s\n"
+#~ msgstr ""
+#~ "Limb : %s\n"
+#~ "Variant : %s\n"
+#~ "Jargon : %s\n"
+#~ "Modul : %s\n"
+
+#~ msgid "Pspell config: added path %s\n"
+#~ msgstr "Pspell config: cale adugat %s\n"
+
+#~ msgid "Pspell config: %s\n"
+#~ msgstr "Pspell config: %s\n"
+
+#~ msgid "Pspell set_path_and_dict error."
+#~ msgstr "Eroare Pspell in set_path_and_dict"
+
+#~ msgid "Pspell path & dict. error %s\n"
+#~ msgstr "Eroare Pspell la path & dict: %s\n"
+
+#~ msgid "Fast Mode"
+#~ msgstr "Mod Rapid"
+
+#~ msgid "Bad Spellers Mode"
+#~ msgstr "Mode Novice"
+
+#~ msgid "Pspell set_sug_mod could not reset path & dict\n"
+#~ msgstr "Pspell set_sug_mod: path & dict nu au putut fi resetate\n"
+
+#~ msgid "Pspell set sug-mode error %s\n"
+#~ msgstr "Eroare Pspell la set_sug_mode: %s\n"
+
+#~ msgid "Spell check all"
+#~ msgstr "Verificare tot"
+
+#~ msgid "Change dictionary"
+#~ msgstr "Schimbare dicionar"
+
+#~ msgid "More..."
+#~ msgstr "Altele..."
+
+#~ msgid "Learn from mistakes"
+#~ msgstr "n筐are din greeli"
+
+#~ msgid "Accept `%s' for this session"
+#~ msgstr "Acceptare `%s' pentru aceast sesiune"
+
+#~ msgid "Add `%s' to personal dictionary"
+#~ msgstr "Adugare `%s' la dicionarul personal"
+
+#~ msgid "(no suggestions)"
+#~ msgstr "(fr sugestii)"
+
+#~ msgid "Others..."
+#~ msgstr "Altele..."
+
+#~ msgid "Checking for dictionaries in %s\n"
+#~ msgstr "Cutare de dicionare n %s\n"
+
+#~ msgid "Found dictionary %s\n"
+#~ msgstr "Dicionar gsit: %s\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Toate antetele"
+
+#~ msgid "Error importing MUTT file."
+#~ msgstr "Erori la importarea fiierului MUTT."
+
+#~ msgid "Please select a file to import."
+#~ msgstr "Selectai un fiier pentru importare."
+
+#~ msgid "Select MUTT File"
+#~ msgstr "Selectai Fiierul MUTT"
+
+#~ msgid "Import MUTT file into Address Book"
+#~ msgstr "Importare fiier MUTT n agend"
+
+#~ msgid "Authorization for %s on %s failed"
+#~ msgstr "Autorizarea pentru %s pe %s a euat"
+
+#~ msgid "Can't connect to POP3 server: %s:%d"
+#~ msgstr "ncercarea de conectare la serverul POP3 a euat: %s:%d"
+
+#~ msgid "/_Message/_Mark/Mark it as _being read"
+#~ msgstr "/_Mesaj/_Marcare/Marcare mesaj _citit"
+
+#~ msgid "/_Message/Show all _header"
+#~ msgstr "/_Mesaj/Afiare an_tete"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/Re_zumat/E_xecutare"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/Re_zumat/Act_ualizare"
+
+#~ msgid "/_Summary/Select a_ll"
+#~ msgstr "/Re_zumat/Selectare t_ot"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/Re_zumat/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/Re_zumat/_Sortare"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/Re_zumat/_Sortare/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/Re_zumat/Afiare _fir de discuii"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/Re_zumat/Afiare fr f_ir de discuii"
+
+#~ msgid "/_View/_Toolbar/_Non-display"
+#~ msgstr "/_Vedere/Bar de _utilitare/_Ne-afiat"
+
+#~ msgid "Current account: %s"
+#~ msgstr "Cont curent: %s"
+
+#~ msgid "Clean trash"
+#~ msgstr "Cur筐are gunoi"
+
+#~ msgid "Sending queued message failed."
+#~ msgstr "Trimiterea mesajelor din lista de ateptare a euat."
+
+#~ msgid "Invalid MIME type\n"
+#~ msgstr "Tip MIME invalid\n"
+
+#~ msgid "deleting article %d...\n"
+#~ msgstr "tergere articol %d...\n"
+
+#~ msgid "Preferences for each account"
+#~ msgstr "Preferine cont"
+
+#~ msgid "Usually used"
+#~ msgstr "Cont curent"
+
+#~ msgid "Receive at getting from all accounts"
+#~ msgstr "Recepionare pentru toate conturile"
+
+#~ msgid "Program path"
+#~ msgstr "Cale"
+
+#~ msgid "each"
+#~ msgstr "la"
+
+#~ msgid "Operator"
+#~ msgstr "Operaie"
+
+#~ msgid ""
+#~ "Emulate the behavior of mouse operation of\n"
+#~ "Emacs-based mailer"
+#~ msgstr ""
+#~ "Emuleaz comportamentul oarecelui din programele\n"
+#~ "de pot bazate pe Emacs"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Browser Web extern (%s va fi nlocuit de URL)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "Imprimare (%s va fi nlocuit de numele fiierului)"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
+
+#~ msgid "SunMonTueWedThuFriSat"
+#~ msgstr "DumLunMarMieJoiVinSm"
+
+#~ msgid "/_Mark/Mark as _important"
+#~ msgstr "/_Marcare/Marcare mesaj i_mportant"
+
+#~ msgid "/_Mark/Make it as _being read"
+#~ msgstr "/_Marcare/Marcare mesaj _citit"
+
+#~ msgid "done."
+#~ msgstr "gata."
+
+#~ msgid "D"
+#~ msgstr "D"
+
+#~ msgid "Current folder is Trash."
+#~ msgstr "Directorul curent este Gunoiul."
+
+#~ msgid "o"
+#~ msgstr "o"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "La %s\n"
+
+#~ msgid "TextView: color allocation failed\n"
+#~ msgstr "TextView: alocarea culorilor a euat\n"
+
+#~ msgid "*** Warning: code conversion failed ***\n"
+#~ msgstr "*** Atenie: convertire euat ***\n"
+
+#~ msgid "%s - Compose message [Edited]"
+#~ msgstr "%s - Compunere mesaj [Editat]"
+
+#~ msgid "/_Add news server"
+#~ msgstr "/_Adugare server news"
+
+#~ msgid "Rescanning all folders..."
+#~ msgstr "Rescanare toate directoarele..."
+
+#~ msgid "deleting folder %s ...\n"
+#~ msgstr "tergere director %s ...\n"
+
+#~ msgid "deleting newsgroup %s ...\n"
+#~ msgstr "tergere newsgroup %s ...\n"
+
+#~ msgid "Input adding news server:"
+#~ msgstr "Introducei numele noului server news:"
+
+#~ msgid "The news server `%s' already exists."
+#~ msgstr "Serverul news '%s' exist deja."
+
+#~ msgid "deleting cache folder of %s ...\n"
+#~ msgstr "tergere director cache pentru %s ...\n"
+
+#~ msgid "Next unread"
+#~ msgstr "Urmtorul necitit"
+
+#~ msgid "Previously selected folder: %s\n"
+#~ msgstr "Director selectat anterior: %s\n"
+
+#~ msgid "New directory"
+#~ msgstr "Director nou"
+
+#~ msgid "The directory not found. Create it?"
+#~ msgstr "Director negsit. Dorii crearea acestuia ?"
+
+#~ msgid "Can't create directory."
+#~ msgstr "Directorul nu a putut fi creat."
+
+#~ msgid "Selected name isn't a directory."
+#~ msgstr "Numele ales nu este un director."
+
+#~ msgid "Writing mail folder list..."
+#~ msgstr "Scriere list de directoare..."
+
+#~ msgid "Writing imap folder list..."
+#~ msgstr "Scriere list de directoare imap..."
+
+#~ msgid "Writing news folder list..."
+#~ msgstr "Scriere list de directoare news..."
+
+#~ msgid "Mail Server (IMAP4)"
+#~ msgstr "Server de pota (IMAP4)"
+
+#~ msgid "NetNews"
+#~ msgstr "NetNews"
+
+#~ msgid "reading folder list %s ..."
+#~ msgstr "citire list de directoare %s ..."
+
+#~ msgid "Broken folder list cache.\n"
+#~ msgstr "List de directoare corupt.\n"
+
+#~ msgid "Select destination directory"
+#~ msgstr "Selectai directorul destinaie"
+
+#~ msgid "can't drop message into %s\n"
+#~ msgstr "scrierea mesajelor n %s este imposibil\n"
+
+#~ msgid "%s exists\n"
+#~ msgstr "%s exist\n"
+
+#~ msgid "can't move tmpmsg to %s\n"
+#~ msgstr "mutarea tmpmsg n %s este imposibil\n"
+
+#~ msgid "IMAP session is not established\n"
+#~ msgstr "sesiunea IMAP nu este stabilit\n"
+
+#~ msgid "news session is not established\n"
+#~ msgstr "sesiunea news nu este stabilit\n"
+
+#~ msgid "Unlinking message %s in trash...\n"
+#~ msgstr "Unlink mesajul %s n gunoi...\n"
+
+#~ msgid "Enable thread view on summary"
+#~ msgstr "Permite sortarea dup fir in rezumat"
+
+#~ msgid "Not yet implemented."
+#~ msgstr "Neimplementat."
+
+#~ msgid "/_Summary/Unsele_ct all"
+#~ msgstr "/Re_zumat/Deselectare _tot"
+
+#~ msgid ""
+#~ "Date\n"
+#~ "from\n"
+#~ "Subject\n"
+#~ "To\n"
+#~ "Message-ID\n"
+#~ "%"
+#~ msgstr ""
+#~ "Data\n"
+#~ "de la\n"
+#~ "Subiect\n"
+#~ "La\n"
+#~ "Message-ID\n"
+#~ "%"
+
+#~ msgid "Printing"
+#~ msgstr "Imprimare"
+
+#~ msgid "/_Mark/Mark _all"
+#~ msgstr "/_Marcare/M_archeaz tot"
+
+#~ msgid "/_Mark/U_nmark all"
+#~ msgstr "/_Marcare/Dema_rcheaz tot"
+
+#~ msgid "/_Mark/M_ove marked"
+#~ msgstr "/_Marcare/M_ut elementele marcate"
+
+#~ msgid "/_Mark/_Delete marked"
+#~ msgstr "/_Marcare/ter_ge elementele marcate"
+
+#~ msgid "/U_nselect all"
+#~ msgstr "/Desele_ctare tot"
+
+#~ msgid "/_Message/Reply with _quotation"
+#~ msgstr "/_Mesaj/Rspunde cu ci_tare"
+
+#~ msgid "/Reply with _quotation"
+#~ msgstr "/_Rspunde cu citare"
+
+#~ msgid "queueing message that failed to send...\n"
+#~ msgstr ""
+#~ "punere n lista de ateptare a mesajelor cu erori de transmisie...\n"
+
+#~ msgid "allocated mainview size: width = %d, height = %d\n"
+#~ msgstr "dimensiunea alocat listei: l筐ime = %d, nlime = %d\n"
+
+#~ msgid "allocated mainwin size: width = %d, height = %d\n"
+#~ msgstr "dimensiunea ferestrei principale: l筐ime = %d, nlime = %d\n"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 00000000..8543ef91
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,6116 @@
+# Russian translation for Sylpheed
+# Copyright (C) 2001-2003 Free Software Foundation, Inc.
+# First version by Aleksey Novodvorsky <aen@logic.ru>, 2001.
+# Updated by Sergey Vlasov <vsu@altlinux.ru>, 2001.
+# Updated by Dmitry S. Sivachenko <dima@Chg.RU>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed 1.0.0beta4\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-05 17:16+0300\n"
+"Last-Translator: Sergey Vlasov <vsu@altlinux.ru>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr " 侑惑卅様"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"靤宋 料 GPGME 侑瀕祖姪崛 Werner Koch <dd9jn@gnu.org>, 2001 馬\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"堊 侑惑卅様 况妄都嗔 嘛和歪力; 溶崚堙 電 卅嗤厦嘖卅倫墮 /斌 "
+"溶追読檀厦彖墮 料 孑模徂冏 良彭厶遡慘亙 鐶歸嘖彭領亙 棉壇鱗鰭 GNU, "
+"椀嫗棉墨彖領亙 Free Software Foundation; 彭厶錨 2 斌 (料 想 孑溶墟杜錨) "
+"堆姪 佻敖療 彭厶錨.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"堊 侑惑卅様 卅嗤厦嘖卅倫都嗔 料津崢, 湟 藁 怠津 佻姪變亙, 力 矼 "
+"齣謇 艨鱇銓蜉; 珍崚 妥 療况隣 覗卅淋品 佻 阯癇鈿逡 齒齡闡鉗 斌 "
+"頏蜃閼鈿齡 粲 關鱚粤跂銕 竇跂. 不訴堙 良彭厶遡慘媽 鐶歸嘖彭領媽 "
+"棉壇鱗廟 GNU, 途棉 範塢堙 孳料墮 津堊棉.\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"妖嘖 榑亙 侑惑卅様亙 掴網隣 佻盲淺墮 墨佗 良彭厶遡慘亙 鐶歸嘖彭領亙 "
+"棉壇鱗鰭 GNU; 途棉 榑惑 療 嗅孺斌腕, -- 料佗柯堙 Free Software "
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "堙良 料嘖厦屠 孺都隣 攸佗單...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "鄙閉杜 妖塰: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"酖墨塹燮 亘料 療墅卅很杜隣揺 嗜和歸良冤 塰燮壅.\n"
+"靉崛盲篇堊, 攸牧亙堙 蛭 佚凖 冨妖療良斗 孺都隣 攸佗單."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "鑚牧捏錨 亘料 凖珍穆敏彖良 孺都隣 攸佗單...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "麩敖僧錨 亘料 凖珍穆敏彖良 孺都隣 攸佗單...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "鯏珍穆敏彖良 孺都隣 攸佗單"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"醢忸 嗜和歸良 怠蔦 侑瀕浜壮慯 嬲惣僧力 佻厮痛.\n"
+"靉妖墮堙 墨模遼 'G' 孺都隣 攸佗喇, 墨塹燮 燐嵶 侑彭厮墮\n"
+"佻 墨輿猟 '靉盲淺墮 徨'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "虱"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "靤塹墨"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "鹽叟賭"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "簣汰徂墮"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "蠣妖良墮"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "珍棉墮"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "良"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "彭卮"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 嘖僧徂墮 孺都燐 攸佗嗹 佻 嬪鰐涸良 "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "阻燮墮"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "珍棉墮 孺都燐 攸佗嗹"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr " 津篇墸不徒慘 範塢堙 嫩遡不 榑 攸佗嗹?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "篩"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+酖"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "閊病冒 佻盲淌良 徳別 嗜和歸良 %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "閊病冒 侑 佻盲淌良 涸嘖 嗜和歸良."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "閊病冒 侑 佻盲淌良 涸嘖 嗜嘖宋力馬 嗜和歸良"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"拌卅領賄 津篇墸錨 療 溶崚 泰墮 忸佻摸杜 亘療 嗜敖僧頻 嗜和歸良,\n"
+"堊 冒 藁 嗜津雙不 %%f, %%F or %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"酖 嫩遡腕 忸佻摸不 墨輿猟. 閊病冒 侑 嗜敖僧鰭 冒料盟.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"酖 嫩遡腕 嗜敖壮 侑話途 通 忸佻摸杜頻 墨輿猟:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 捐鰐倫都嗔: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 宋賭枦力 忸佻摸杜錨: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "從/忸從 津篇墸頻"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " 鑚侑宋不 "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "靤賭彖墮"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"彭追堙 仭卅妖墟 通 嗅田媽歸馬 津篇墸頻\n"
+"(藁 怠津 佻柘堊很杜 徑途塹 '%%h'):\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "麕燮壅 仭卅妖墟 津篇墸頻"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"彭追堙 仭卅妖墟 通 嗅田媽歸馬 津篇墸頻\n"
+"(藁 怠津 佻柘堊很杜 徑途塹 '%%u'):\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "靉蒙斛彖堙蒙嗚品 仭卅妖墟 津篇墸頻"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "簣汰很杜錨 祖凖啻 卜蒜"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "當凖"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "靤浜党僧錨"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "拌賭不 仭佶 祖凖嗄亙 卜蒜"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "鑚妖良墮"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/譱別"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/譱別/醢彖 卜蒜"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/譱別/醢忸 徳別 vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/譱別/醢忸 徳別 JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/譱別/醢忸 單叟賭"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/譱別/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/譱別/靤宋冒"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/譱別/珍棉墮"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/譱別/麩頒僧不"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/譱別/阻燮墮"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/當凖"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/當凖/醢忸 祖凖"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/當凖/醢彖 拝孃仭"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/當凖/醢彖 仭佶"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/當凖/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/當凖/靤宋冒"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/當凖/珍棉墮"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/蚓嘖簒妖淋"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/蚓嘖簒妖淋/虱佻參 徳別 LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/麸卅徊"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/麸卅徊/ 侑惑卅様"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/醢忸 祖凖"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/醢彖 拝孃仭"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/醢彖 仭佶"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/靤宋冒"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/珍棉墮"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "當凖 E-Mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "當凖嗄叢 卜蒜"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "虱:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "珍棉墮"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "鄙編"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "誅葉:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "誅佗:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "麕燮堽:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "珍棉墮 祖凖()"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "篥篇墸不徒慘 嫩遡不 祖凖()?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "酖"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+" 範塢堙 嫩遡不 仭佶 \"%s\" 徨 祖凖啻 療?\n"
+"縒棉 嫩遡不 塹蒙墨 仭佶, 祖凖啻 怠蔦 佚凖妖歸隣 厦追堙蒙嗚媽 仭佶."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "鰐慄 仭佶"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "霑佶 祖凖啻"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "篥篇墸不徒慘 嫩遡不 '%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "醢忸 佻蒙斛彖堙蒙; 療 嫩遡腕 嗜頒僧不 瀕津睦隣 徳別."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "醢忸 佻蒙斛彖堙蒙; 療 嫩遡腕 嗜頒僧不 徳別 祖凖嗄亙 卜蒜."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "黌倉叢 祖凖嗄叢 卜蒜 孑佚枸 侑渡岱惣彖料."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"黌倉叢 祖凖嗄叢 卜蒜 侑渡岱惣彖料,\n"
+"療 嫩遡腕 嗜頒僧不 力忸 瀕津睦隣 徳別."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜,\n"
+"嗜敖僧 侖嘖叢 祖凖嗄叢 卜蒜."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜,\n"
+"柯陀 侑 嗜敖僧鰭 徳別 祖凖嗄亙 卜蒜."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜,\n"
+"牧詫 塹馬, 侑鷲斛枳 柯陀 侑 嗜敖僧鰭 徳別 力從 祖凖嗄亙 卜蒜."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "閊病冒 侑渡岱惣彖良 祖凖嗄亙 卜蒜"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "靤渡岱惣彖良 祖凖嗄亙 卜蒜"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "閊病冒 侑 卅堆堙 祖凖嗄亙 卜蒜亙"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "酖 嫩遡腕 侑淺堊墮 瀕津睦 祖凖嗜"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"黌倉叢 祖凖嗄叢 卜蒜 侑渡岱惣彖料, 療 嫩遡腕 嗜頒僧不 力忸 瀕津睦隣 "
+"徳別"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜, 嗜敖僧 侖嘖叢 祖凖嗄叢 卜蒜."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜, 柯陀 侑 嗜敖僧鰭 力忸 徳別 "
+"祖凖嗄亙 卜蒜"
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 祖凖嗄媽 卜蒜, 牧詫 塹馬, 侑鷲斛枳 柯陀 侑 "
+"嗜敖僧鰭 力忸 徳別 祖凖嗄亙 卜蒜."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "閊病冒 侑渡岱惣彖良 祖凖嗄亙 卜蒜"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "靤渡岱惣彖良 祖凖嗄亙 卜蒜"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "蚓堙卞妬"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "當凖嗄叢 卜蒜"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "誅淋阻"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "當凖 E-Mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "舍孃仭"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "霑佶"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "鹽叟賭 LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "當凖啻 碗覗良攸檀"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "貮淮拇 祖凖啻"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "彭掴楊杜錨"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "靤田孃凖崢杜錨"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "閊病冒"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "麩敖僧錨 亘料 侑田孃凖崢杜頻...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "靉冒旛彖墮 榑 嗜和歸良 嗅田媽殄 卅"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "鑷僧崚忸"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "誨喪隣"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "鯱斛忸"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "舅盲堆"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "麌良"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "徒杜拱"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "誅夘淮砺拱"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "酖"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/簣汰徂墮..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/珍棉墮"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/黐亙嘖彖..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/譱別/鑚侑宋不"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/譱別/鑚侑宋不 佻旄"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/譱別/麩頒僧不 仭佶 淌厠徂墨"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/譱別/麩頒僧不 侑歪鰐嵒墮 侑宋釦"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/譱別/模嵒墮 徳別"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/譱別/嘖宋不 堙睦 冨 徳別"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/譱別/簣汰徂墮 佻槻瓶"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/靤宋冒/鑚冒"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/靤宋冒/鑚冒 塰壮"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/靤宋冒/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/靤宋冒/捍土壮"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/靤宋冒/誅佗厦彖墮"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/靤宋冒/嘖宋不"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/靤宋冒/嘖宋不 冒 檀堊壞"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/靤宋冒/拂徒不 徨"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/靤宋冒/簣佻摸不徒慘"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 料 喇要鰐 料攸"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 料 喇要鰐 徙賭田"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 料 嗅從 料攸"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 料 嗅從 徙賭田"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 料涸模 嘖厦防"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 墨療 嘖厦防"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 侑田拂斈妬 嘖厦謀"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/靤宋冒/簣佻摸不徒慘/霤凖編 嗅田媽歸 嘖厦謀"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 喇要鰐 佚凖 釦厶碗詫"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 喇要鰐 佻嗅 釦厶碗"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 侑田拂斈電 嗅從"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 嗅田媽歸 嗅從"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 嘖厦釦"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/靤宋冒/簣佻摸不徒慘/珍棉墮 掴 墨涼 嘖厦防"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/靤宋冒/鑚届厖壮敏彖墮 疎攸"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/靤宋冒/鑚届厖壮敏彖墮 徨 嗜和歸良"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/靤宋冒/霤凖力 佻 嗅彖 侑 忻歪"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/苗"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/苗/誅葉"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/苗/誅佗"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/苗/麕燮堊 墨佗"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/苗/當凖 通 墸都"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/苗/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/苗/舍孃俎 力從嘖妬 通 墸都"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/苗/貮療碧"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/苗/模崚良"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/蚓嘖簒妖淋/當凖嗄叢 卜蒜"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/蚓嘖簒妖淋/疎模"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/蚓嘖簒妖淋/篥篇墸頻"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/蚓嘖簒妖淋/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/蚓嘖簒妖淋/掣彖墮 徇奴良 凖珍穆碗"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/蚓嘖簒妖淋/靉槻瓶壮 嗜和歸良 (PGP)"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/蚓嘖簒妖淋/鋲厦彖墮 嗜和歸良 (PGP)"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 徳別 療 嗾歸嘖徼都\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "閊病冒 佻盲淌良 涸嘖 堙睦堊\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "酖彭厠拱 届厖壮 妖塰 檀塢厦彖良."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "酖彭厠拱 届厖壮 杼駄藁 墸都 斌 佚凖噎緬."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "譱別 %s 療 料閉杜\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "閊病冒 椀凖津姪良 卅斃賭 徳別 %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "譱別 %s 侖嘖亙."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "酖從斃嵶 侑淺堊墮 %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "麩和歸良: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "閊病冒 侑 佻盲淌良 歪力馬 冨 墨熔藁杜塹 嗜和歸良."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [蠣妖療力]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 靉椎塹徊 嗜和歸良%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "靉椎塹徊 嗜和歸良%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "靉盲涸堙蒙 嗜和歸良 療 嬲惣僧."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "鑚侑宋不"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "斗 嗜和歸良 療 嬲惣僧. 鑚侑宋不 妥 堙踊?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "柯陀 椀凖津姪良 嗤瓶冒 佻盲涸堙姪."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"淌堽叢 攸佗嗹 通 墅卅徊 佻湟 療 椀凖津姪料.\n"
+"靉崛盲篇堊, 忸妥夘堙 電 佚凖 墅卅徊亙."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "靤鷲斛枳 柯陀 侑 墅卅徊 嗜和歸良 料 %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "閊病冒 嗜頒僧杜頻 嗜和歸良 仭佶 墅卅很杜隣."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "酖 料閉杜 北折, 嗜墸都嘖徼摂品 忸岱僧力葉 苗杜塢読冒塹簒 '%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "療 嫩遡腕 冨妖良墮 嘛亙嘖彖 徳別\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"酖 嫩遡腕 侑渡岱惣彖墮 墨追厦徊 榑惑 嗜和歸良\n"
+"冨 %s %s.\n"
+"單 卅徇 佻嗅壮 吐?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "柯陀 攸佗喇 攸馬模徊\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "柯陀 嫩遡杜頻 嘖倉惑 嗜和歸良\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "佻嘖僧徊 嗜和歸良 淌凖椿...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "療從斃嵶 料編 仭佶 淌凖追\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "柯陀 卅斃倒杜頻 淌凖追\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "嗜敖僧 Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "麩敖僧錨 亘料 佻椎塹徊 嗜和歸良...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "賓 MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "鯀斃賭"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "鑚:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "鑚侑宋不 嗜和歸良"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "鑚侑宋不 佻旄"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "靉妖嘖不 淌凖椿 墅卅徂墮 佻旄"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "賭力徂防"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "麩頒僧不 仭佶 淌厠徂墨"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "嘖宋不"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "嘖宋不 徳別"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "模崚良"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "模嵒墮 徳別"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "靉槻瓶"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "簣汰徂墮 佻槻瓶"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "鯏珍穆碗"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "靤宋不 徇奴良 凖珍穆碗詫"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "霤凖力 嘖厦"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "鑚届厖壮敏彖墮 徨 嗜和歸良"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "酖彭厠拱 塢 MIME."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "譱別 療 嗾歸嘖徼都 斌 侖嘖."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "黐亙嘖彖"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "誅追厦徊"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "勒墮"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "虱 徳別"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "酖彭厠叢 墨輿猟 忸斛彖 徇奴療馬 凖珍穆碗: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"療枸品 凖珍穆碗 倒 卅堆堊都.\n"
+"宋賭柯墮 侑話途 侑瀕嫩不徒慘?\n"
+"蘢杜塢読冒塹 拝孃俎 侑話途嗜: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "宋賭枦 侑話途 拝孃俎: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "凖妖領拱 徳別: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "靉椎塹徊 嗜和歸良: 忻歪 冨 侑話途啻 嗅砥杜頻\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "酖 嫩遡腕 攸侖嘖不 徇奴良 凖珍穆碗\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "閊病冒 攸佗喇 徳別\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "閊病冒 湟杜頻 冨 冒料盟\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "閊病冒 佻嘖僧徊 淌凖椿."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "拌碗 徳別"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "鑚冒 嗜和歸良"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "塹 嗜和歸良 冨妖療力. 鑚冒攸墮嗔 療馬?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "鑚冒攸墮嗔"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr " 淌厠徂防"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "靤浜杜不 杼駄藁 '%s'?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "靤浜杜不 杼駄藁"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "鼠杜不"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "鯏珍穆敏彖良 祖凖啻"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "醢忸 墨淋阻"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "鯏珍穆敏彖良 嘛田杜品 墨淋阻堙"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "酖和範追溶 嬲惣壮 祖凖 E-Mail."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "酖和範追溶 嬲惣壮 浜 變挿杜錨."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "鯏珍穆敏彖良 嘛田杜品 墨淋阻堙"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "鑚和卅崛斗賄 浜"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "譱揺棉"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "虱"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "靦砺掴良"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "當凖 E-Mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "靦砺掴良"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "彭卮"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "良"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "蠣妖良墮"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "閘瓶塢墮"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "料淌良"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "鑽力徇拇 嘛田杜頻"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "靉蒙斛彖堙蒙嗚錨 壮夘怠壅"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "靤和姪 徳別詫 療 和料簒崚力."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "譱別 療 况妄都嗔 掴侖嘖浜挈 徳別詫 祖凖嗄亙 卜蒜."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "閊病冒 湟杜頻 冨 徳別."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "蠣妖療良 祖凖嗄亙 卜蒜"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 靤彭夘墮 徳別 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "譱別"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "簣汰很杜錨 力從 祖凖嗄亙 卜蒜"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "酖和範追溶 嬲惣壮 料旌僧錨 拝孃俎."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "蠣妖療良 嘛田杜品 拝孃佚"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "鄙旌僧錨 拝孃俎"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "當凖啻 拝孃佚"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "簣嘖孃隣 祖凖啻"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "蚌佻蒙旁編 卜椀防 嗜 嘖凖緬鼠 通 冨妖療良 嗤瓶冒 祖凖嗜 拝孃俎"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "蠣妖療良 嘛田杜品 拝孃佚"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "簣汰很杜錨 力從 拝孃俎"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "蠣妖良墮 浜 仭佶"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "彭追堙 力從 浜 仭佶:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "醢彖 仭佶"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "彭追堙 浜 力從 仭佶:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "冒攸領拱 徳別 療 届厖壮 JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "拌賭不 徳別 JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "鯏珍穆敏彖良 攸佗喇 JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "簣佻摸不徒慘拇 槎斗杜壅 祖凖啻 E-Mail"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "簣汰很杜錨 力從 攸佗喇 JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "嗤奴力 佻痛明淌良 單叟賭"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "閊病冒 侑 佻痛明淌良 單叟賭"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "鄙嘖厦碧 單叟賭 LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "虱 孳盟"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "靉參"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 靤彭夘墮 單叟賭 "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "眩攸 佻瓶冒"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "誨不賭品 佻瓶冒"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " 鸞厦 "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "靉摸賄 浜 通 佻痛明淌良"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "霑厦蒙 通 佻痛明淌良"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "訴-奏 (單)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "軈睦浜遡慘拱 卅斃賭 凖旁蒙堊堊"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "鑽力徇拇"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "鯀營敏杜隣"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "簣汰很杜錨 力從馬 單叟賭 LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "鄙嘖厦碧 LDAP - 拌碗 汰旛 佻瓶冒"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "簣嘖孃隣 汰旛 佻瓶冒"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"酖 嫩遡腕 佻盲淺墮 嗤瓶亘 汰 佻瓶冒 單叟賭 - 孑堊力徂堙 汰旁 徠孺燐"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "冒攸領拱 徳別 療 届厖壮 vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "拌碗 徳別 vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "鯏珍穆敏彖良 攸佗喇 vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "簣汰很杜錨 力從 攸佗喇 vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "睦佻參"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "冒嵒堙 榾嗤碗塢簒斗媽 仭佶 徳別 mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "蚌範栂叢 仭佶:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "睦佻參敏彖墮 徳別:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " 拌碗... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "拌碗 徳別 通 榾嗤碗堊"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "柯陀 攸佗喇 料嘖厦屠 徳別\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "拌碗 仭佶"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "範佃殄"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "鑚侑宋姪領拇"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "閘賭田"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "誅叮瀕"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "賭力徂防"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "醢彖剞双冒"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "麌要鰐 '%c' 療 溶崚 徃歪不 浜 仭佶."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "霑佶 '%s' 孛 嗾歸嘖徼都."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "酖 嫩遡腕 嗜敖壮 仭佶 '%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/麩敖壮 力徼 仭佶..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/霤凖浜杜彖墮 仭佶..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/珍棉墮 仭佶"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/閘瓶塢墮 墨叮瀕"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/靤彭夘墮 力忸 嗜和歸良"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/霤凖嘖厦不 津凖從 仭佻"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/靉瓶 嗜和歸良..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/素簒敝墮"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/靉槻瓶冒 料 拝孃侖 力從嘖妬..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/珍棉墮 拝孃侖 力從嘖妬"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 仭佻...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "醢忸"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "酖侑淺堊領拇"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "嘖僧徊 瀕届厖礎鰭 仭佶...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "嘖僧徊 瀕届厖礎鰭 仭佶..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "靤腕溶墟 仭佶 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "靤腕溶墟 仭佶 %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "霤凖嘖厦不 津凖從 仭佻"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "篥凖從 仭佻 怠津 佚凖嘖厦杜. 靤歪鰐嵒墮?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "霤凖嘖厦碧 津凖彖 仭佻..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "閊病冒 侑 佚凖嘖厦碧 津凖彖 仭佻."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "霤凖嘖厦碧 徨堵 津凖忤砺 仭佻 ..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "靤彭卷 力忸 嗜和歸良 從 徨堵 仭佶組..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "霑佶 %s 忸岱僧\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "素簒崛脊嗔 嗜和歸良 冨 %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "靤鷲斛枳 柯陀 侑 攸拝孳謀 嗜和歸良 冨 '%s'."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"彭追堙 浜 力從 仭佶:\n"
+"(途棉 忸 範塢堙 嗜敖壮 仭佶 通 很崚領挌 仭佻,\n"
+" 掴汰忤堙 '/' 墨療 浜杜)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "彭追堙 力從 浜 通 '%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "霤凖浜杜彖墮 仭佶"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"單 很崚領拇 仭佶 嗜和歸良 冨 '%s' 怠蔦 嫩遡杜.\n"
+" 津篇墸不徒慘 範塢堙 嫩遡不 仭佶?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "珍棉墮 仭佶"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "閊病冒 侑 嫩遡杜鰭 仭佶 '%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "閘瓶塰 墨叮瀕"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "珍棉墮 徨 嗜和歸良 冨 墨叮瀕?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"珍棉墮 佻湟忸 處彬 '%s' ?\n"
+"(麩和歸良 療 怠蔦 嫩遡杜 追嗚)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "珍棉墮 佻湟忸 處彬"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "珍棉墮 孺都燐 攸佗嗹 IMAP4 '%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "珍棉墮 孺都燐 攸佗嗹 IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "珍棉墮 拝孃侖 力從嘖妬 '%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "珍姪良 拝孃俎 力從嘖妬"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "珍棉墮 孺都燐 攸佗嗹 力從嘖妬 '%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "珍棉墮 孺都燐 攸佗嗹 力從嘖妬"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "靉槻瓶冒 料 拝孃侖 力從嘖妬"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "拌賭不 拝孃俎 力從嘖妬 通 佻槻瓶防."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "鄙編 拝孃俎 佻 杼駄藁:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 靉瓶 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "舍孃仭 力從嘖妬"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "黌壮妬"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "賓"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "鐶力徂墮"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "溶津夘簒斗叢"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "塹蒙墨 湟杜錨"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "療冨彭嘖隣"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "酖 嫩遡腕 佻盲淺墮 嗤瓶亘 拝孃 力從嘖妬."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "捐鰐療力."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d 拝孃 力從嘖妬 (%s 攸拝孛杜)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "舍孃俎 力從嘖妬:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "斗:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 攸馬模徊...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(眦 墅卅徂堙妄)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(眦 堙踊)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 冨和卅崚良...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "閊病冒 攸拝孳防 冨和卅崚良"
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "麩田瀕杜錨 IMAP4 %s 侑賭彖力. 腕嘖僧很杜錨 嗜田瀕杜頻...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "孑堊力很杜錨 嗜田瀕杜頻 IMAP4 %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "酖 嫩遡腕 料涸墮 單僧 TLS.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "療 嫩遡腕 孑堊力徂墮 凸素 嫩遡杜頻: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "療 嫩遡腕 淺嘖不 仭佶 嫩遡杜隣 嗜和歸良\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "療 嫩遡腕 孑堊力徂墮 凸素 嫩遡杜頻: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "療從斃嵶 攸牧捏 仭佶\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "墨厠砺叢 仭佶 %s 療 嗾歸嘖徼都\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "侑鷲斛枳 柯陀 侑 佻盲淌良 LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "閊病冒 侑 嗜敖僧鰭 '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "閊病冒 侑 嗜敖僧鰭 '%s' 徇孕夘 INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "療 嫩租墫 嗜敖壮 佻湟忸 處彬: 柯陀 LIST\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "療 嫩租墫 嗜敖壮 佻湟忸 處彬\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "療 嫩租墫 佚凖浜杜彖墮 佻湟忸 處彬 %s %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "療 嫩租墫 嫩遡不 佻湟忸 處彬\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "療 嫩遡腕 佻盲淺墮 珍領拇 墨臨賭堊\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "柯陀 侑 佻盲淌良 珍領挌 墨臨賭堊.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "柯陀 侑 卅畋碗 珍領挌 墨臨賭堊: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "酖 嫩遡腕 嗜田瀕不慯 單叟賭詫 IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "酖 嫩遡腕 塰燮墮 單僧 嘛凉 IMAP4 c %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "療 嫩遡腕 佻盲淺墮 侑腕墟僧嘖從 浜杜\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "療從斃嵶 忸岱壮 仭佶: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "閊病冒 奏堙淋鋲彬礎鰭 IMAP4.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "閊病冒 宋塹夘攸檀 IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "療 嫩遡腕 掴汰徂墮 %s %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(佚凖珍涸 徳別...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "療 嫩遡腕 掴汰徂墮 嗜和歸良 %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "療 嫩遡腕 嗚椀敏彖墮 %s %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "柯陀 侑 忸佻摸杜鰭 墨輿猟 IMAP: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "柯陀 侑 忸佻摸杜鰭 墨輿猟 IMAP: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "柯陀 侑 忸佻摸杜鰭 墨輿猟 IMAP: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "柯陀 侑渡岱惣彖良 iconv 冨 UTF-7 %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "柯陀 侑渡岱惣彖良 iconv 冨 %s UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "虱佻參"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "冒嵒堙 徳別 mbox 仭佶 料變挿杜頻."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "虱佻參 徳別:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "訌堊模 料變挿杜頻:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "拌碗 浜佻參敏嫖溶馬 徳別"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "冒嵒堙 料旌僧錨 祖凖嗄亙 卜蒜 徳別 通 浜佻參."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "拌賭不 浜杜 佻姪 LDIF 料變挿慥 浜杜 壮夘怠塹."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "譱別 浜佻參敏彖."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "靉崛盲篇堊, 忸妥夘堙 徳別."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "酖和範追溶 嬲惣壮 浜 祖凖嗄亙 卜蒜."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "閊病冒 侑 湟杜鰭 佻姪 LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "譱別 LDIF 孑佚枸 浜佻參敏彖."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "拌碗 徳別 LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "虱 徳別"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr ""
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "靉姪 LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "疽夘怠"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "疽夘怠"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "拌卅墮"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "當凖嗄叢 卜蒜:"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "虱 徳別:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "双瓶妬:"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "虱佻參 徳別 LDIF 祖凖嗄媽 卜蒜"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "鄙攸"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "篩姪"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "蚓届厖礎頻 徳別"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "疽夘怠壅"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "宋賭枦良"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "靉盲淌良 力忸 嗜和歸良"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "鑾苗僧錨"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "鑚妖療料"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "靉盲淌良"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "捐鰐療力 (侑瀕冱 嗜和歸良: %d (%s))"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "捐鰐療力 (療 力忸 嗜和歸良)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "閊病冒 嗜田瀕杜頻"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "酖彭厠拱 仭厦蒙"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "僧冱"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "酖 墸都"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "宋賭枦力 (力忸 嗜和歸良: %d)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "宋賭枦力 (療 力忸 嗜和歸良)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "靤 佻盲淌良 嗜和歸良 從變彬棉 柯陀."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "佻盲淌良 力忸 嗜和歸良 通 孺都力 攸佗喇 %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 靉盲淌良 力忸 嗜和歸良"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "麩田瀕杜錨 單叟賭詫 POP3: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "酖 嫩遡腕 嗜田瀕杜錨 單叟賭詫 POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "疸堙淋鋲彬礎頻..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "靉盲淌良 嗜和歸良 %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "靉盲淌良 墨棉淌嘖彖 力忸 嗜和歸良 (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "靉盲淌良 墨棉淌嘖彖 力忸 嗜和歸良 (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "靉盲淌良 墨棉淌嘖彖 力忸 嗜和歸良 (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "靉盲淌良 卅斃賭 嗜和歸良 (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "珍姪良 嗜和歸良 %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "挌歪"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "靉盲淌良 嗜和歸良 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "靤錨 (侑瀕冱 嗜和歸良: %d (%s))"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "閊病冒 嗜田瀕杜頻"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "靤鷲斛枳 柯陀 侑 和卅堆塰 嗜和歸良."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"靤鷲斛枳 柯陀 侑 和卅堆塰 嗜和歸良:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "酖 腕堊模嗹 妖嘖 料 追嗚."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "閊病冒 攸佗喇 徳別."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "閊病冒 嗜謀堊."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "鹽叟賭 攸牧挂 嗜田瀕杜錨."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "靉湟忸 處彬 攸倫."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"靉湟忸 處彬 攸倫:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "閊病冒 奏堙淋鋲彬礎鰭."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"閊病冒 奏堙淋鋲彬礎鰭:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "凖用 單僧啻 瓶堙北."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "靤錨 嗜和歸良 侑賭彖\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "靉盲淌良 力忸 嗜和歸良 冨 %s %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "彭追堙 仭厦蒙 通 %s 料 %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "從 仭厦妄"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "孀料"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"譱別 '%s' 嗾歸嘖徼都.\n"
+"酖蒙斫 嗜敖壮 仭佶."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread 療 佻陳賭嵒彖都嗔 glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG 孑堊力很杜 療侑宋斌慘, 斌 孑堊力很杜 孑堊凖忝叢 彭厶頻.\n"
+"靉陳賭嵋 OpenPGP 塰明淌料."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "蚌佻蒙斛彖良: %s [鞜鱇辣]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [祖凖] 塰燮墮 亘力 佻椎塹徊 嗜和歸良"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" 塰燮墮 亘力 嗜敖僧頻 嗜和歸良 侑瓶賄追療領挈\n"
+" 徳別鼠"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 佻盲淺墮 力忸 嗜和歸良"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr ""
+" --receive-all 佻盲淺墮 力忸 嗜和歸良 嗜 徨堵 孺都隣 攸佗單"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 塹嗅壮 徨 嗜和歸良 冨 淌凖追"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [仭佶]... 忸彭嘖 嗾様倉力 墨棉淌嘖從 嗜和歸良"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [仭佶]...\n"
+" 忸彭嘖 嗜嘖湾良 嬲惣僧隣 仭佻"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 凖嵒 毀祖防"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 塹岱惣不 榑 椀瓶僧錨 忸編"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 忸彭嘖 瀕届厖礎廟 彭厶鰭 忸編"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "縒墮 凖珍穆敏嫖溶 嗜和歸良. 挌歪不?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "麩和歸良 淌凖追"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr " 淌凖追 途墮 療佻嗅僧隣 嗜和歸良. 挌歪不?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "漬嫻叢 墨佗 Sylpheed 孛 攸侖歸料.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/譱別/霑佶"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/譱別/霑佶/麩敖壮 力徼 仭佶..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/譱別/霑佶/霤凖浜杜彖墮 仭佶..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/譱別/霑佶/珍棉墮 仭佶"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/譱別/靉湟忸 處彬"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/譱別/靉湟忸 處彬/簣汰徂墮 佻湟忸 處彬..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/譱別/靉湟忸 處彬/珍棉墮 佻湟忸 處彬"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/譱別/靉湟忸 處彬/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/譱別/靉湟忸 處彬/靤彭夘墮 力忸 嗜和歸良"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/譱別/靉湟忸 處彬/靤彭夘墮 力忸 嗜和歸良 從 徨堵 仭佶組"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/譱別/靉湟忸 處彬/霤凖嘖厦不 津凖從 仭佻"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/譱別/虱佻參 mbox-徳別..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/譱別/睦佻參 mbox-徳別..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/譱別/閘瓶塢墮 徨 墨叮瀕"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/譱別/麩頒僧不 冒..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/譱別/霤涸墮..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/譱別/鯀堆堊墮 宋塹力洋"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/譱別/挌歪"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/靤宋冒/拂徒不 和嗾崢杜錨"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/靤宋冒/靉瓶 堙釦歸 嗜和歸良..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/靤宋冒/靉瓶 嗜和歸良..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/篥凖從 仭佻"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/鐶盟嘖 侑腕溶墟"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/霑療蒙 瀕嘖簒妖淋"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/霑療蒙 瀕嘖簒妖淋/霽穆惑卅様 堙睦"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/霑療蒙 瀕嘖簒妖淋/霽穆惑卅様"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/霑療蒙 瀕嘖簒妖淋/屠嘖"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/霑療蒙 瀕嘖簒妖淋/酖 佻冒旛彖墮"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/苗/靉冒攸墮 斌 嗚燮墮/黌厦冒 嗜嘖湾良"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/苗/鑚津蒙力 津凖從 仭佻"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/苗/鑚津蒙料 和盟嘖 侑腕溶墟"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/苗/麩參敏徊"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/苗/麩參敏徊/靉 力妖簒"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/苗/麩參敏徊/靉 卅斃賭"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/苗/麩參敏徊/靉 珍堙"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/苗/麩參敏徊/靉 墅卅徂堙明"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/苗/麩參敏徊/靉 佻盲涸堙明"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/苗/麩參敏徊/靉 堙妖"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/苗/麩參敏徊/靉 忸津姪良 致都詫"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/苗/麩參敏徊/靉 塒都謀"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/苗/麩參敏徊/靉 療侑淺堊領挈"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/苗/麩參敏徊/靉 很崚良冤"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/苗/麩參敏徊/眦 嗜參敏徊"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/苗/麩參敏徊/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/苗/麩參敏徊/靉 從斷喪堊良"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/苗/麩參敏徊/靉 嫗掀僧廟"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/苗/麩參敏徊/舍孃佗厦徊 佻 堙妖"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/苗/舍孃佗厦徊 佻 追嗚孑喇冤"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/苗/鯀旌賭燐墮 徨 和嗾崢杜頻"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/苗/黐賭燐墮 徨 和嗾崢杜頻"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/苗/嘖僧徂墮 徂追踊 佻妄..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/苗/霤凖編"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/苗/霤凖編/靤田拂斈電 嗜和歸良"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/苗/霤凖編/麑田媽歸 嗜和歸良"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/苗/霤凖編/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/苗/霤凖編/靤田拂斈電 療侑淺堊領賄 嗜和歸良"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/苗/霤凖編/麑田媽歸 療侑淺堊領賄 嗜和歸良"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/苗/霤凖編/靤田拂斈電 力從 嗜和歸良"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/苗/霤凖編/麑田媽歸 力從 嗜和歸良"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/苗/霤凖編/靤田拂斈電 塒党杜力 嗜和歸良"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/苗/霤凖編/麑田媽歸 塒党杜力 嗜和歸良"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/苗/霤凖編/靤田拂斈電 忸津姪領賄 致都詫 嗜和歸良"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/苗/霤凖編/麑田媽歸 忸津姪領賄 致都詫 嗜和歸良"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/苗/霤凖編/ 漬嫻亙 仭佶..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/苗/誅追厦徊/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/苗/誅追厦徊"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/苗/誅追厦徊/疱塹椀凖津姪良"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/苗/誅追厦徊/7-舵堽拱 ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/苗/誅追厦徊/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/苗/誅追厦徊/双祖力砺厦佚篇冒 (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/苗/誅追厦徊/双祖力砺厦佚篇冒 (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/苗/誅追厦徊/稘淋卅蒙力砺厦佚篇冒 (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/苗/誅追厦徊/眩猛品嗚叢 (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/苗/誅追厦徊/眩猛品嗚叢 (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/苗/誅追厦徊/舍党途冒 (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/苗/誅追厦徊/孀澱冒 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/苗/誅追厦徊/詆夘面扶途冒 (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/苗/誅追厦徊/鰌嗷冒 (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/苗/誅追厦徊/牧蘇林冒 (KOI8-_U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/苗/誅追厦徊/詆夘面扶途冒 _Win (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/苗/誅追厦徊/駮藁嗚叢 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/苗/誅追厦徊/駮藁嗚叢 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/苗/誅追厦徊/駮藁嗚叢 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/苗/誅追厦徊/駮藁嗚叢 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/苗/誅追厦徊/侑歸領叢 防堊篇冒 (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/苗/誅追厦徊/卅追檀藁料 防堊篇冒 (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/苗/誅追厦徊/卅追檀藁料 防堊篇冒 (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/苗/誅追厦徊/詆堊篇冒 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/苗/誅追厦徊/誅凖篇冒 (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/苗/誅追厦徊/誅凖篇冒 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/苗/誅追厦徊/訴嗚叢 (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/苗/誅追厦徊/訴嗚叢 (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/苗/鑚牧捏 力從 亘療"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/苗/靉冒攸墮 瓶範栂拱 堙睦"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/苗/靉冒攸墮 徨 攸馬模徊"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/苗/鐶力徂墮 嗤瓶亘 嗜和歸良"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/麩和歸良"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/麩和歸良/靉盲淺墮"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/麩和歸良/靉盲淺墮/靉盲淺墮 堙釦歸 孺都力 攸佗喇"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/麩和歸良/靉盲淺墮/靉盲淺墮 嗜 徨堵 孺都隣 攸佗單"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/麩和歸良/靉盲淺墮/靤賭彖墮 佻盲淌良 嗜和歸良"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/麩和歸良/靉盲淺墮/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/麩和歸良/鑚侑宋不 嗜和歸良 冨 淌凖追"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/麩和歸良/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/麩和歸良/鄙佗啻墮 力從 嗜和歸良"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/麩和歸良/鑚彭塢墮"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/麩和歸良/鑚彭塢墮..."
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/麩和歸良/鑚彭塢墮.../單"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/麩和歸良/鑚彭塢墮.../鑚侑宋不徒"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/麩和歸良/鑚彭塢墮.../ 嗤瓶亘 卅嗷挂防"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/麩和歸良/霤凖嗅壮"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/麩和歸良/霤凖嗅壮 冒 很崚良"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/麩和歸良/霤凖料侑宋不 妥 冨妖療良"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/麩和歸良/霤凖妖嘖不..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/麩和歸良/誅佗厦彖墮..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/麩和歸良/珍棉墮"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/麩和歸良/鑚妖塢墮"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/麩和歸良/鑚妖塢墮/鑚妖塢墮"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/麩和歸良/鑚妖塢墮/麥冱 塒都釦"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/麩和歸良/鑚妖塢墮/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/麩和歸良/鑚妖塢墮/靉妖塢墮 冒 療侑淺堊領賄"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/麩和歸良/鑚妖塢墮/靉妖塢墮 冒 侑淺堊領賄"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/麩和歸良/鑚妖塢墮/靉妖塢墮 徨 嗜和歸良 冒 侑淺堊領拇"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/麩和歸良/蠣妖良墮"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/蚓嘖簒妖淋/簣汰徂墮 墅卅徂堙妄 祖凖嗄媽 卜蒜"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/蚓嘖簒妖淋/鑚読蒙墟彖墮 徨 嗜和歸良 仭佶"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/蚓嘖簒妖淋/鑚読蒙墟彖墮 忸岱僧隣 嗜和歸良"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/蚓嘖簒妖淋/麩敖壮 侑宋斌 読蒙墟礎鰭"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/蚓嘖簒妖淋/麩敖壮 侑宋斌 読蒙墟礎鰭/疱塹輿塢淌嗚"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/蚓嘖簒妖淋/麩敖壮 侑宋斌 読蒙墟礎鰭/靉 墅卅徂堙明"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/蚓嘖簒妖淋/麩敖壮 侑宋斌 読蒙墟礎鰭/靉 佻盲涸堙明"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/蚓嘖簒妖淋/麩敖壮 侑宋斌 読蒙墟礎鰭/靉 堙妖"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/蚓嘖簒妖淋/珍棉墮 佻徭碗兩殄途 嗜和歸良"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/蚓嘖簒妖淋/捐鰐良墮"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/蚓嘖簒妖淋/鑠力 嶮厠遡"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/鄙嘖厦碧"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/鄙嘖厦碧/鐶殄 料嘖厦碧..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/鄙嘖厦碧/鄙嘖厦碧 読蒙墟..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/鄙嘖厦碧/疎模隣..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/鄙嘖厦碧/篥篇墸頻..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/鄙嘖厦碧/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/鄙嘖厦碧/鄙嘖厦碧 堙釦歸 孺都力 攸佗喇... "
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/鄙嘖厦碧/麩敖壮 力徼 孺都燐 攸佗嗹..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/鄙嘖厦碧/鯏珍穆敏彖良 孺都隣 攸佗單..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/鄙嘖厦碧/霤凖北折不 堙釦殳 孺都燐 攸佗嗹"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/麸卅徊/鰌墨從柘墸"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/麸卅徊/鰌墨從柘墸/疥婆品嗚賄"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/麸卅徊/鰌墨從柘墸/駮藁嗚賄"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/麸卅徊/FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/麸卅徊/FAQ/疥婆品嗚品"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/麸卅徊/FAQ/酖妖男品"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/麸卅徊/FAQ/蚌仭林防"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/麸卅徊/FAQ/耙僧稚旃防"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/麸卅徊/FAQ/蚶遡慫林防"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/麸卅徊/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "麩敖僧錨 婆宋力馬 亘料...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "臾宋力 亘力: 侑和姪輿 致都詫 %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "忸佻摸杜.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "眦 料旌僧頻"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "療"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "蠣妖療良 塢仭 卅敖徒杜頻 亘料 %d 料 %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "疱塹力洋叢 卅堆堊"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr " 卅堆堊都 宋塹力洋詫 凖嵒妖. 靉痛明淺墮嗔 單塢?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "閘瓶塢墮 徨 墨叮瀕"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "珍棉墮 徨 嗜和歸良 冨 徨堵 墨叮瀕?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "簣汰徂墮 佻湟忸 處彬"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"祖訴堙 侖墮 佻湟從葉 處彬.\n"
+"縒棉 怠津 嬲惣僧 嗾歸嘖徼摂品 處彬, 塹 藁\n"
+"怠津 宋塹輿塢淌嗚 侑淺堊."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "靉湟忸 處彬 '%s' 孛 嗾歸嘖徼都."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "靉湟忸 處彬"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"閊病冒 侑 嗜敖僧鰭 佻湟從馬 處彬.\n"
+"輜崚 泰墮, 療墨塹燮 徳別 孛 嗾歸嘖徼脊, 斌 忸 療 浜電堙 侑宋 料 攸佗嗹 "
+" 冒堊模播."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - 霑佶"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - 麩和歸良"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/鑚彭塢墮"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/鑚彭塢墮 徨斗"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/鑚彭塢墮 墅卅徂堙明"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/鑚彭塢墮 嗤瓶亘 卅嗷挂防"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/霤凖嗅壮"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/霤凖嗅壮 冒 很崚良"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/霤凖料侑宋不 妥 冨妖療良"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "靤瀕冱"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "靉盲淺墮 力忸 嗜和歸良"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "靤瀕冱 徨"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "靉盲淺墮 嗜和歸良 嗜 徨堵 孺都隣 攸佗單"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "靉嗅壮 嗜和歸良 冨 淌凖追"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "鄙佗啻墮"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "鄙佗啻墮 力從 嗜和歸良"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "鑚彭塢墮"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "鑚彭塢墮 料 嗜和歸良"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "鑚彭塢墮 徨斗"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "鑚彭塢墮 徨斗"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "霤凖嗅壮"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "霤凖嗅壮 嗜和歸良"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "珍棉墮 嗜和歸良"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "捐鰐良墮"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "捐鰐良墮 塒党杜隣 侑話途"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "麑田媽歸 療侑淺堊領賄 嗜和歸良"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "黐亙嘖彖"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "鐶殄 料嘖厦碧"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "淌堽叢 攸佗嗹"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "鄙嘖厦碧 孺都力 攸佗喇"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+" 卅堆堊都 宋塹力洋詫 凖嵒妖. 徒卜不 佻 變挿釦, 湟和 佻痛明淺墮嗔."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr " 佻痛明淌隣. 徒卜不 佻 變挿釦, 湟和 卅堆堊墮 宋塹力洋."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "挌歪"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "拱塢 冨 侑惑卅様?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "柯陀 攸佗喇 從 徠斗杜隣 徳別\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "靉盲淌良 嗜和歸良 冨 %s %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "閊病冒 湟杜頻 mbox-徳別.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "療彭厠拱 届厖壮 處彬: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "瓶佻吁杜隣 佻湟忸 處彬: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "柯陀 侑 塰燮塢 徠斗杜力馬 徳別 \n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"料閉杜 療攸殄歸領叢 嘖厦冒 From:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "料閉杜 %d 嗜和歸良.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "柯陀 嗜敖僧頻 lock-徳別 %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "瓶佻蒙旁編 'flock' 徑途塹 'file', 途棉 從斃嵶.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "療 嫩遡腕 嗜敖壮 %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "佻湟忸 處彬 攸倫 漬嫻浜 侑話途嗜, 嵒珍良...\n"
+
+#: src/mbox.c:318
+#, fuzzy, c-format
+msgid "can't lock %s\n"
+msgstr "療 嫩遡腕 嗜敖壮 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+#, fuzzy
+msgid "invalid lock type\n"
+msgstr "酖彭厠拱 塢 MIME."
+
+#: src/mbox.c:358
+#, fuzzy, c-format
+msgid "can't unlock %s\n"
+msgstr "療 嫩遡腕 嗜敖壮 %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "療 嫩遡腕 和凖攸墮 佻湟忸 處彬 掴 燐妄.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "睦佻參 嗜和歸良 冨 %s %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "靉瓶 堙釦歸 嗜和歸良"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "蚌冒墮 堙睦:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "淺壅彖墮 凖派嘖"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "鐶卅堽拱 佻瓶"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "靉瓶"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "靉瓶 療 嫩遡嗔"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "黌厦冒 療 料閉杜."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "簣嘖蒜燐塹 料涸模 嗜和歸良; 侑歪鰐嵒墮 墨涼?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "簣嘖蒜燐 墨療 嗜和歸良; 侑歪鰐嵒墮 料涸盟?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "靉瓶 攸墨涙杜"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 嗜和歸良...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "麩頒僧不 冒"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "霤凖佗啻墮"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "霤凖佗啻墮 嗾歸嘖徼摂品 徳別?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "閊病冒 侑 嗜頒僧杜鰭 徳別 '%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "霤涸墮"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"彭追堙 墨輿猟 佚涸塢:\n"
+"('%s' 怠津 攸妖療力 料 浜 徳別)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"酖侑宋斌慘叢 墨輿猟 佚涸塢:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "療 嫩遡腕 嗚椀敏彖墮 嗜和歸良 %s %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "酖 嫩遡腕 塰燮墮 徳別 佻妖塹.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "瓶範栂叢 仭佶 嗜徙祖租 仭佶亙 料變挿杜頻.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "誅佗厦彖良 嗜和歸良 %s%c%d %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "靉嗅田良 力妖 冒堊模播 %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/鑚牧捏"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/鑚牧捏 佻溶毆..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/靉冒攸墮 冒 堙睦"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/麩頒僧不 冒..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/靤彭夘墮 佻槻瓶"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "賓 MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "屠嘖"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "模崚良"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "拌賭不 \"靤彭夘墮 佻槻瓶\" 通 侑彭卷"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "閊病冒 侑 嗜頒僧杜鰭 歪力馬 冨 墨熔藁杜塹 嗜和歸良."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "鑚牧捏 佻溶毆"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"彭追堙 墨輿猟 塰燮塢 徳別:\n"
+"('%s' 怠津 攸妖療力 料 浜 徳別)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "酖彭厠叢 墨輿猟 侑腕溶墟 MIME: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "嗜田瀕杜錨 NNTP %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "靉堙厮力 嗜田瀕杜錨 NNTP %s:%d. 靉俎塰 從嗷堊力很杜頻...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "嘖壮慫 %d 孛 謀枦.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "佻盲淌良 嘖壮愽 %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "柯陀 湟杜頻 嘖壮愽 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "柯陀 佻盲淌良 嗤瓶冒 拝孃 力從嘖妬\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "柯陀 墅卅徊 嘖壮愽.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "柯陀 佻盲淌良 嘖壮愽 %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "療 嫩遡腕 忸岱壮 拝孃侖: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "療彭厠拱 追双惣藁 嘖壮妬: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "力忸 嘖壮妬 療.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "攸拝孳冒 xover %d - %d %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "療 嫩遡腕 攸拝孳不 xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "侑鷲斛枳 柯陀 侑 佻盲淌良 xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "療彭厠叢 嘖厦冒 xover: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "療 嫩遡腕 攸拝孳不 xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "侑鷲斛枳 柯陀 侑 佻盲淌良 xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "閊病冒 嗜田瀕杜頻 單叟賭詫 NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "柯陀 侑塹墨盟: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "柯陀 侑塹墨盟\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "靤鷲斛枳 柯陀 侑 墅卅徊 嘖壮愽\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "靤鷲斛枳 柯陀 侑 佚凖珍淌 墨輿猟.\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "霑厦蒙料 寅惣"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[療 苗杜塢読冒塹卅 佻蒙斛彖堙妄]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s靉崛盲篇堊, 忻田不 仭厦蒙燐 寅惣 通:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"酖彭厠! 靉徭碗不...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr " 嗜和歸良 單叟賭 療 料閉杜 墟殿嫖輿 妖塰 徠斗杜 APOP\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "閊病冒 喇淋阻喇啻 妖塰 徠斗杜 嗜和歸良 單叟賭\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "閊病冒 侑塹墨盟 POP3\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "療彭厠拱 墸都 UIDL: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 珍姪良 孑堊凖忝吐 嗜和歸良 %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: 靤椀孑冒都嗔 嗜和歸良 %d (%d 汰編)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "佻湟忸 處彬 攸倫\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "徠斗 單僧啻 瓶堙北\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "療 嫩遡腕 料涸墮 單僧 TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "柯陀 侑 奏堙淋鋲彬礎鰭\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "墨輿猟 療 佻陳賭嵒彖都嗔\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "柯陀 單僧啻 POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "堙良 墨瞭蒜孀礎鰭...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "鄙閉杜 %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "堙良 墨瞭蒜孀礎鰭 攸彭叨杜.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "鄙嘖厦碧 嗜頒僧杜.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "靤浜杜不"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "鑚牧捏錨 亘料 料嘖厦屠 孺都力 攸佗喇...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "淌堽叢 攸佗嗹 %d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "鄙嘖厦碧 力從 孺都力 攸佗喇"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "鄙嘖厦碧 孺都力 攸佗喇"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "麩敖僧錨 亘料 料嘖厦屠 孺都力 攸佗喇...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "靤錨"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "掃不"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "簣佻摸不徒慘拇"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "虱 孺都力 攸佗喇"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "靉 嬪鰐涸良"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "貮淮叢 瀕届厖礎頻"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "靉摸賄 浜"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "當凖 E-Mail"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "鑷覗良攸檀"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "黐田杜頻 單叟賭組"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "醢從嘖力 (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "酖 (模冒蒙隣)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "塹 單叟賭 墟殿嫖 奏堙淋鋲彬礎鰭"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "鹽叟賭 力從嘖妬"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "鹽叟賭 通 侑錨輿"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "鹽叟賭 SMTP (墅卅徊)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "ID 佻蒙斛彖堙妄"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "霑厦蒙"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "蚌佻蒙斛彖墮 妥斛仭嗄媽 奏堙淋鋲彬礎廟 (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "珍妄墮 嗜和歸良 單叟賭 佻嗅 侑錨輿"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "珍棉墮 淌凖"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "栂妬"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 栂妬: 嫩遡不 療妖通杜力)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "靤瀕浜壮 徨 嗜和歸良 單叟賭"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "鑁卅良淺墮 卅斃賭 侑瀕浜租踊 嗜和歸良"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "紡"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "翩蒙墟彖墮 嗜和歸良 侑 侑錨妖"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "霑佶 通 徃歪處蛭 嗜和歸良"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(酖堝斌慥厦彖領拇 嗜和歸良 怠蔦 嗜頒僧杜 榑亙 仭佶)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "軼塹 奏堙淋鋲彬礎鰭"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "疱塹輿塢淌嗚"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "靤彭厮墮 佻 墨輿猟 '靉盲淺墮 徨'"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "素鰐從"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "簣汰徂墮 攸馬模從 佻姪 Date"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "麩敖宋壮 Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "簣汰徂墮 掴佻摸不徒慘拇 攸馬模徊"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " 鑰凖津棉墮... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "疸堙淋鋲彬礎頻"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "疸堙淋鋲彬礎頻 SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"縒棉 腕堊徂墮 榑 佻妄 侖嘖挈, 怠蔦 瓶佻蒙斛彖墮嗔\n"
+"浜 佻蒙斛彖堙妄 仭厦蒙, 攸珍領拇 通 侑錨輿 佻湟."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "靤彭卷 仭厦妄 淌凖 POP3 佚凖 墅卅徊亙"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "掀歪 墨輿猟"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "疱塹輿塢淌嗚 孑堊料很夫壮 祖凖啻"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "誅佗"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "麕燮堽"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "鐶卅堽拱 祖凖"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "鋲厦彖墮 嗜和歸良 佻 嬪鰐涸良"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "靉槻瓶掀壮 嗜和歸良 佻 嬪鰐涸良"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "蚌佻蒙斛彖墮 ASCII-墨追厦彖良 侑 柯寅彖良"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "蚌佻蒙斛彖墮 塰燮壞 堙睦塹徼 佻槻瓶"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "詭折 佻槻瓶"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "詭折 GnuPG 佻 嬪鰐涸良"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "詭折 通 忸岱僧力馬 祖凖啻 E-mail"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "簟嫻亙 北折"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ID 佻蒙斛彖堙妄 北折:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "酖 瓶佻蒙斛彖墮 SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "蚌佻蒙斛彖墮 SSL 通 嗜田瀕杜頻 POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "蚌佻蒙斛彖墮 墨輿猟 STARTTLS 通 料涸盟 單僧啻 SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "蚌佻蒙斛彖墮 SSL 通 嗜田瀕杜頻 IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "蚌佻蒙斛彖墮 SSL 通 嗜田瀕杜頻 NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "鑚侑宋冒 (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "蚌佻蒙斛彖墮 SSL 通 嗜田瀕杜頻 SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "蚌佻蒙斛彖墮 療駄亘敏媽殄 凖嵒 SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(挧明淺堙 榑 椀檀, 途棉 從變彬狙 侑和姪踊 侑 瓶佻蒙斛彖良 SSL)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "靉參 SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "靉參 POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "靉參 IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "靉參 NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "虱 掴妖料"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "訌堊模 單叟賭 IMAP4"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "麩頒僧冱 墅卅很杜隣 嗜和歸良 "
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "麩頒僧冱 淌厠徂防 "
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "麩頒僧冱 嫩遡杜隣 嗜和歸良 "
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "酖 嬲惣僧 浜 孺都力 攸佗喇."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "酖 嬲惣僧 祖凖."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "酖 嬲惣僧 單叟賭 SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "酖 嬲惣僧 苗杜塢読冒塹 佻蒙斛彖堙妄."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "酖 嬲惣僧 單叟賭 POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "酖 嬲惣僧 單叟賭 IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "酖 嬲惣僧 單叟賭 NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"蚌佻蒙斛彖良 孑堊凖忝吐 ASCII-墨追厦彖良 攸柯寅彖領挌\n"
+"嗜和歸良 療 凖墨妖猟嫖墫. 塹 届厖壮 療 嗜墸都嘖徼都\n"
+"RFC 3156 - MIME Security with OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "鄙嘖厦碧 津篇墸品"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "鄙旌僧錨 妖寮:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "誅輿猟:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"鄙旌僧錨 妖寮:\n"
+" 蚌佻蒙旁編 卅敖徒不徒 / 通 嗜敖僧頻 很崚領挌 妖寮.\n"
+"誅輿猟:\n"
+" 鄙涸蒙隣 喇要鰐:\n"
+" | - 佚凖珍墮 堙模 嗜和歸良 斌 忸岱僧隣 寅素妖淋\n"
+" > - 佚凖珍墮 忻田杜隣 佻蒙斛彖堙姪 堙睦\n"
+" * - 佚凖珍墮 忻田杜隣 堙睦, 療 塹岱爽壮 堙睦 侑 忻歪\n"
+" 誅療淮拱 喇要鰐:\n"
+" | - 攸妖良墮 嗜津雙浜賄 嗜和歸良 斌 忸津姪良 料 忸從 墨輿猟\n"
+" > - 徨堊徂墮 忸從 墨輿猟 妥 攸妖隣 忸津姪領惑 堙睦堊\n"
+" & - 療 嵒珍墮 攸彭叨杜頻 忸佻摸杜頻 墨輿猟\n"
+" 鼠杜 墨輿猟力 嘖厦謀:\n"
+" %f - 浜 徳別 嗜和歸良斗\n"
+" %F - 嗤瓶亘 浜杜 徳別 忸岱僧隣揺 嗜和歸良冤\n"
+" %p - 忸津姪領叢 涸嘖 嗜和歸良\n"
+" %u - 仭卅妖墟, 攸珍彖斗拱 佻蒙斛彖堙姪\n"
+" %h - 仭卅妖墟, 攸珍彖斗拱 佻蒙斛彖堙姪; 療 塹岱爽壮 堙睦 侑 忻歪\n"
+" %s - 忸津姪領拱 堙睦"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " 鼠杜不 "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " 鑰瓶僧錨 喇淋阻喇啻 "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "倉吐瓶墟敏彖領拇 津篇墸頻"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(醢從)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "鄙旌僧錨 妖寮 療 嬲惣僧."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "籃賄塹淺 ':' 療 掴侖嗚租墫 堙睦堙 槎斗杜堊 妖寮."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "鄙旌僧錨 津篇墸頻 通 妖寮 嗅布墨 通瀕力."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "酖 嬲惣僧 墨輿猟料 嘖厦冒."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "鄙旌僧錨 通 妖寮 墨輿猟料 嘖厦冒 嗅布墨 通瀕隣."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"麌淋阻喇淌嗚叢 柯陀 墨輿猟:\n"
+"%s"
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "珍棉墮 津篇墸錨"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr " 津篇墸不徒慘 範塢堙 嫩遡不 榑 津篇墸錨?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "麩敖僧錨 亘料 和殄 料嘖厦屠...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "鐶殄 料嘖厦碧"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "禀塢厦彖良"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "鑚和卅崚良"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "麩和歸良"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "簟嫻賄"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "療枸冪 侑惑卅様"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "蚌佻蒙斛彖墮 徇奴寮 侑惑卅様 通 侑錨輿"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "誅輿猟"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "賚冒蒙隣 嗤嫐"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "靤瀕浜壮 冨 嗤嫐"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "翩蒙墟彖墮 侑 侑錨妖"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "勒墮 嗤嫐"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "靤彭厮墮 侑蛭歪 力忸 嗜和歸良"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "冒崢拇"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "揺燐"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "靤彭厮墮 侑蛭歪 力忸 嗜和歸良 侑 攸侖嗚"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "鐶力徂墮 徨 模冒蒙隣 仭佶 佻嗅 侑錨輿"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "醢從嘖"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"鄙病鰐憖電 淺嗅 嘖壮妬 通 攸拝孳防\n"
+"(療 惑卅良淌力, 途棉 嬲惣僧 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "蚌佻蒙斛彖墮 徇奴寮 侑惑卅様 通 墅卅徊"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "麩頒僧冱 墅卅很杜隣 嗜和歸良 仭佶 \"鑚侑宋姪領拇\""
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "誅追厦徊 墅卅很囘踊 嗜和歸良"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "疱塹輿塢淌嗚 (鯏墨妖猟嫖墫)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7 舵 ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "双祖力砺厦佚篇冒 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "双祖力砺厦佚篇冒 (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "稘淋卅蒙力砺厦佚篇冒 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "眩猛品嗚叢 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "眩猛品嗚叢 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "舍党途冒 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "孀澱冒 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "詆夘面秒 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "鰌嗷冒 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "詆夘面秒 Win (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "牧蘇林冒 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "駮藁嗚叢 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "駮藁嗚叢 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "駮藁嗚叢 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "侑歸領叢 防堊篇冒 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "卅追檀藁料 防堊篇冒 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "卅追檀藁料 防堊篇冒 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "詆堊篇冒 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "誅凖篇冒 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "訴嗚叢 (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "訴嗚叢 (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"靤 忸堆凖 彖夘僧堊 '疱塹輿塢淌嗚' 怠津 瓶佻蒙斛彖料\n"
+"椀塢輿蒙料 墨追厦徊 通 堙釦歸馬 凉挧 嘖卅隣."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "誅追厦彖良 堙睦堊 嗜和歸良"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"冒嵒堙 妖塹 墨追厦彖良 堙睦塹 嗜和歸良, 嗜津雙掃蛭 喇要鰐\n"
+"療 冨 追双惣藁 ASCII (Content-Transfer-Encoding)."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "鯀敖徒不徒 佻槻瓶"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "簣汰很冱 宋塹輿塢淌嗚"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "疱塹輿塢淌嗚 攸侖嗚壮 徇奴良 凖珍穆碗"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "瓶模 孀徇妬 塰壮"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "霤凖力喇墮 嘖厦防 "
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "喇要鰐"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "霤凖力喇墮 檀堊壅"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "霤凖力喇墮 侑 忻歪"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "霤凖力喇墮 佚凖 墅卅徊亙"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "疱塹輿塢淌嗚 忸舵卅墮 孺都燐 攸佗嗹 侑 墸都"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "禀塢厦彖墮 侑 墸都"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "靉 卜椀謀 \"鑚彭塢墮\" 墸党壮 嗤瓶亘 卅嗷挂防"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "耋厖壮 墸都"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "料 檀堊壅"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "耋厖壮 佚凖噎盟斗惑 嗜和歸良"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 鑰瓶僧錨 喇要鰐 "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "夘瀞"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "霤凖從追墮 浜杜 攸馬模徊 ('From:', 'Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "靉冒旛彖墮 淺嗅 療侑淺堊領挌 嗜和歸良 厮掴 浜杜斗 仭佶"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "麩牧掃壮 料旌僧頻 拝孃 力從嘖妬 通瀕療"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "怠没"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "麸瓶亘 嗜和歸良"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "靉冒旛彖墮 佻盲涸堙妄 墨模遼 '鑚', 途棉 墅卅徂堙蒙 - "
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "鯀旌碗挿夫壮 和嗾崢杜頻"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "耋厖壮 珍壅"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "嘖僧徂墮 佻冒旛彖斗拇 佻妄..."
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "鯀斷奴不 卅嗚卅嗚 嗜和歸良"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"鑚和卅崛墮 洋惑和訴塹忸 遡徳徂堽-檀寅忸 喇要鰐\n"
+"冒 ASCII (塹蒙墨 通 冩藁嗚蛭 墨追厦從)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "靉冒旛彖墮 仭療蒙 攸馬模徊 料 和盟嘖慇 侑腕溶墟 嗜和歸良"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "靉冒旛彖墮 嗜牧掃杜隣 攸馬模徊 侑 侑腕溶墟 嗜和歸良"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "鯀嗷塹冦錨 妖崢 嘖厦冒揺"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "佗睦徒妬"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "鑽堊很冱 妖嘖 攸馬模徊"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "靤亘簒塰"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "靉模徂料 嘖卅良遅"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "靆宋料 侑亘簒塰"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "素"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "軈營堊舵厦彖墮 侑瓶賄追療領拇 冨和卅崚良 佻 卅斃賭 亘料"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "疱塹輿塢淌嗚 侑彭厮墮 佻槻瓶"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "靉冒旛彖墮 凖旁蒙堊 侑彭卷 佻槻瓶 堋徒慘詫 亘療"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "麩頒僧冱 仭厦蒙燐 寅惣 仭用塢"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "珍妄墮 淌凖"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "揺燐"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(靤 孑堊力徊 0 仭厦蒙料 寅惣 怠津 頒僧不慯\n"
+" 堙淌良 徨吐 單僧啻)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "組彖塢墮 忻歪 侑 攸侑腕 仭厦妄"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "掀歪不 侑田孃凖崢杜錨 侑 攸侖嗚, 途棉 GnuPG 療 卅堆堊都"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "單把 塰燮彖墮 嗜和歸良 通 侑腕溶墟 侑 忸津姪良 嗤瓶謀"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "鑚牧捏 佚叟賄 療侑淺堊領賄 嗜和歸良 侑 徃歪 仭佶"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "靉妖涸墮 嗜和歸良 冒 侑淺堊領賄 塹蒙墨 佻嗅 塰燮塢 力從 亘療"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "霤凖編 仭佶 \"範佃殄\" 佻嗅 侑錨輿 力忸 嗜和歸良"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "酖妖通杜力 忸佻摸冱 佚凖妖歸良 嫩遡杜錨 嗜和歸良"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(麩和歸良 怠蔦 侑腕塹 佻妖淌隣 掴 忸佻摸杜頻, 途棉\n"
+" 榑 椀檀 療 徊明淌料)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "鑠力 侑錨輿 嗜和歸良"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "靉冒旛彖墮 亘力 侑錨輿 嗜和歸良"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "單把"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "鰐慄 侑 簒淮詫 攸侖嗚 侑錨輿"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "酩墨把"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "酖 塹岱爽壮 嗜和歸良 和 柯陀 侑 佻盲淌良 嗜和歸良"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "阻燮彖墮 亘力 侑錨輿 嗜和歸良 佻嗅 攸彭叨杜頻"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " 嘖僧徂墮 北宋描壞厠拇 墨輿猟... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "療枸錨 墨輿猟 (%s 怠津 攸妖療 料 浜 徳別/URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Web-岱奏敕"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "簣汰很冱 祖凖 嗤瓶亘 祖凖啻塹 佻 鍔亙力葉 歸勿釦"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "靤 忸範津"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "靉辻彭雙津良 侑 忸範津"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "閘怖壮 墨叮瀕 侑 忸範津"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "麸卅柯彖墮 佚凖 淺嘖墨"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "靤田孃凖崢壮 料棉淺 嗜和歸良 淌凖追"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "凖用 嵒珍良 墸都 冨 單塢:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "單釦猟"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "嗜牧掃杜力 料旌僧錨 栂 療津棉"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "佻摸賄 料旌僧錨 栂 療津棉"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "嗜牧掃杜力 料旌僧錨 妖嗔蛋"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "佻摸賄 料旌僧錨 妖嗔蛋"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "侑田佻湟不徒慘拱 届厖壮 珍壅 徠斗杜 通 忸岱僧力 嘖卅隣"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "彭 (馬/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "津輪 妖嗔蛋"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "涸, 24-涸嗜從 侑田嘖宋姪良"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "涸, 12-涸嗜從 侑田嘖宋姪良"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "津輪 馬珍"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "力妖 妖嗔蛋"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "揺燐堊"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM 斌 PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "單釦猟"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "力妖 栂 療津棉"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "侑田佻湟不徒慘拱 届厖壮 珍壅 通 忸岱僧力 嘖卅隣"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "佻嗅田良 鍔 檀寅 馬珍"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "馬 佻摸腕墮"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "浜 斌 嗜牧掃杜錨 徠斗杜力 斛隣"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "姪妖淋 届厖壮"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "鑰瓶僧錨"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "靤浜賭"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "鄙嘖厦碧 致都 嗜和歸良"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "穽都"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "禀堊堊 - 霤叟拱 孀彭輪"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "禀堊堊 - 塹厦 孀彭輪"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "禀堊堊 - 凖塢 孀彭輪"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "靡挂冒 (URI)"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "禀北扶途防 瓶佻蒙斛彖墮 致都 檀堊"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "拌賭不 致都 通 檀堊 孀徇 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "拌賭不 致都 通 檀堊 孀徇 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "拌賭不 致都 通 檀堊 孀徇 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "拌賭不 致都 通 嗷挂亘 (URI)"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "鑰瓶僧錨 喇要鰐"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"篩堊\n"
+"鑚侑宋不徒\n"
+"靉摸賄 浜 墅卅徂堙妄\n"
+"譱揺棉 墅卅徂堙妄\n"
+"蚓秒描儲 墅卅徂堙妄\n"
+"斗\n"
+"誅葉\n"
+"誅佗\n"
+"舍孃俎 力從嘖妬\n"
+"Message-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "縒棉 x 孑堊力很杜, 塹岱爽租 expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"麩津雙浜賄 嗜和歸良\n"
+"麩津雙浜賄 嗜和歸良 嗜 變阻詫 檀堊壅\n"
+"麩津雙浜賄 嗜和歸良 妥 佻槻瓶\n"
+"麩津雙浜賄 嗜和歸良 妥 佻槻瓶 嗜 變阻詫 檀堊壅\n"
+"麌要鰐 '%'"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"麌要鰐 '\\'\n"
+"麌要鰐 '?'\n"
+"麌要鰐 '{'\n"
+"麌要鰐 '}'"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "拌碗 柢鋲堊"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "詭宋描壞厠拇 墨輿猟"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"拌賭不 歪燐 冨 嘖僧珍參隣 料嘖厦屠 通 北宋描壞厠挌 墨輿猟.\n"
+"塹泰 料變挿不 斌 冨妖良墮 墨預瀕礎廟 北宋布 通 墨輿猟 妖寮,\n"
+"料嵳不 榑 北宋布 (斌 墨預瀕礎廟 北宋布), 孑堊力徂 嬲惣壮徒\n"
+"料 燐嵶媽 墨輿猟 妖寮."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "靉 嬪鰐涸良"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "黌倉叢 Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "鄙嘖厦碧 掴佻摸不徒慘挌 攸馬模徊"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "簣佻摸不徒慘拇 攸馬模徊"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "虱 攸馬模徊 療 嬲惣僧."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "珍棉墮 攸馬模從"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "珍棉墮 榑 攸馬模從?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "麩敖僧錨 亘料 料嘖厦碧 攸馬模徊...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "鄙嘖厦碧 塹岱爽杜頻 攸馬模徊"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "鄙旌僧錨 攸馬模徊"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "掀田杜隣 攸馬模徊"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "麕燮壅 攸馬模徊"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "靉冒旛彖墮 徨 療佚凖淺嗅杜隣 攸馬模徊"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "堙良 墨瞭蒜孀礎鰭 塹岱爽杜頻 攸馬模徊...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "双瓶 墨瞭蒜孀礎鰭 塹岱爽杜頻 攸馬模徊...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "塹 攸馬模從 孛 侑瓶孕嘖徼都 嗤瓶謀."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "鄙嘖厦碧 読蒙墟"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "北."
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr " 料涸模"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr " 墨療"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "誅佗厦彖墮"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "珍姪良 侑宋斌"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr " 範塢堙 嫩遡不 侑宋斌?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "靤宋斌 読蒙墟礎鰭"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "縒棉 明堆 冨 嗅田媽殄 孑模徂 忸佻摸囘墫:"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "縒棉 徨 嗅田媽殄 孑模徂 忸佻摸兩墫:"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "捐鰐良墮 嗅田媽殄 津篇墸頻:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "To 斌 Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "貔堆 攸馬模從"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "蠣妖良墮 攸馬模徊..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "徒 嗜和歸良"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "鯏旁蒙堊 墨輿猟"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "斷喪 嗜和歸良"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "嗜津雙不"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "療 嗜津雙不"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "嗜徙祖租 "
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "療 嗜徙祖租 "
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "嗜墸都嘖徼都 regex"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "療 嗜墸都嘖徼都 regex"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "堆蒙枦, 淌"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "妖輪枦, 淌"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "堆蒙枦, 淌"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "妖輪枦, 淌"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "霤凖妖嘖不 "
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "誅佗厦彖墮 "
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "酖 侑瀕浜壮"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "珍棉墮 單叟賭"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "鑚妖塢墮"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "嘖僧徂墮 致都"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "靉妖塢墮 冒 侑淺堊領賄"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "霤凖嗅壮 冒 很崚良"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "霤凖料侑宋不 妥 冨妖療良"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "捐鰐良墮 墨輿猟"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "靤屠卅塢墮 和卅堆塰 侑宋斌"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "仭佶:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "祖凖:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "麸瓶亘 攸馬模徊"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "素鰐徊"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "素鰐從:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "酖 嬲惣僧 浜 侑宋斌."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "酖 嬲惣僧 墨輿猟料 嘖厦冒."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "冒攸力 療掴侖嘖浜賄 孑模徂."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "霑佶 料變挿杜頻 療 嬲惣僧."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "冒攸力 療掴侖嘖浜賄 津篇墸錨."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "酖 嬲惣僧 孑模徂."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "酖 嬲惣僧 津篇墸錨."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "黐亙嘖彖 仭佶"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "鐶殄"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "鐶掵隣"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "酖 塹岱爽壮 [...] 斌 (...) 料涸姪 堙踊 嗜和歸良 嗤瓶謀"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "珍妄墮 [...] 斌 (...) 料涸姪 堙踊 嗜和歸良 侑 墸都"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "靤浜杜冱 很崚領挈 仭佶鼠"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "堊勃 瓶佻蒙斛彖墮 侑 墸都"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "當凖 通 墸都:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "軼塰"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "模崚良"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "斗"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "鑚"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "篩堊"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "醢妖"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "麩敖僧錨 亘料 料嘖厦碧 嘖鰐唾 嗤瓶冒 嗜和歸良...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "鄙嘖厦碧 塹岱爽杜頻 嗤瓶冒 嗜和歸良"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"拌賭不 嘖鰐唾 通 塹岱爽杜頻 嗤瓶謀 嗜和歸良.\n"
+"輜嵶 冨妖良墮 佻厮掴 佻溶毆 卜椀亘 彭卮/良, 堊勃\n"
+"佚凖堊嗚夫僧錨 槎斗杜塹 踊檜."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "簣嘖孃隣 槎斗杜壅"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "鑚和卅崛斗拇 槎斗杜壅"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " 賭燐墮 嘖僧珍參隣 料嘖厦碧 "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "鄙旌僧錨 杼駄藁"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "簣汰徂墮"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr "鼠杜不"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 麌要鰐 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "倉吐瓶墟敏彖領拇 杼駄藁"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "疎模隣"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "疎模"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "酖彭厠拱 届厖壮 杼駄藁."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "珍棉墮 杼駄藁"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "珍棉墮 榑 杼駄藁?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): 閊病冒 侑渡岱惣彖良 墨追厦徊.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "柯陀 塰燮塢 徳別 佻妖塹\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "療 嫩遡腕 佻盲淺墮 嗜和歸良 %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "閊病冒 侑 墅卅徊 嗜和歸良 %d 冨 淌凖追.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "酖侑宋斌慘叢 墨輿猟 佚涸塢: '%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "麩嘖湾良"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "麩敖僧錨 追遡惑從馬 亘料 侑惑凖嗷...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "侑鷲斛枳 柯陀 侑 佻盲淌良 珍領挌.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "閊病冒 攸佗喇 徳別.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: 靉槻瓶 療 侑彭凖料"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "靉槻瓶 療 料閉杜"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "莽厦杼 佻槻瓶"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "韭闊瘻 佻槻瓶"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "酖 北折 通 侑彭卷 佻槻瓶"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "閊病冒 侑彭卷 佻槻瓶"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "鯀變拇 凖旁蒙堊壅 侑彭卷 佻槻瓶妬"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "閊病冒: 酖冨彭嘖隣 嘖壮孑"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "莽厦杼 佻槻瓶 \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "韭闊瘻 佻槻瓶 \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "酖 料閉杜 苗杜塢読冒塹 佻蒙斛彖堙妄 通 榑惑 北折."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " 漬嫻賄 浜 \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "靉槻瓶 嗜敖僧 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "鑚佚涸塹 北折: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "拌賭不 北折 通 '%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "鸞碗 瀕届厖礎鰭 '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "拌碗 北折"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID 北折"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "簣汰徂墮 北折"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "彭追堙 漬嫻亙 苗杜塢読冒塹 北折 斌 佻蒙斛彖堙妄:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "素鰐從 嗜和歸良 淌凖追 瓶佻吁杜.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "麩田瀕杜錨"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "麩田瀕杜錨 單叟賭詫 SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "霤凖珍涸 HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "疸堙淋鋲彬礎頻"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "鑚侑宋冒 嗜和歸良..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "霤凖珍涸 EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "霤凖珍涸 MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "鑚侑宋冒"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "霤凖珍涸 RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "鑚侑宋冒 珍領挌..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "宋賭枦良..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "鑚侑宋冒 嗜和歸良 (%d / %d 汰編)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "鑚侑宋冒 嗜和歸良"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "靤鷲斛枳 柯陀 侑 墅卅徊 嗜和歸良."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"靤鷲斛枳 柯陀 侑 墅卅徊 嗜和歸良:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "嘖僧徊 佻湟從馬 處彬"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"料涸姪 嬲爽不 妖嘖藁組崢杜錨 佻湟從馬 處彬.\n"
+" 溶崚堙 瓶佻蒙斛彖墮 嗾歸嘖徼摂品 處彬 届厖壮 MH,\n"
+"途棉 彖 途墮 堊墨從.\n"
+"縒棉 療 孥賭杜, 塹 侑腕塹 料嵳不 OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "靤彭卷 佻槻瓶"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "疸堙淋鋲彬礎頻 SMTP 療掴嘖孃料\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "療彭厠拱 墸都 SMTP\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "柯陀 單僧啻 SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "麩敖僧錨 亘料 侑腕溶墟 瓶範栂惑 堙睦堊...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "蚌範栂拱 堙睦 嗜和歸良"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "鑚和卅崚良 瓶範栂惑 堙睦堊 %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 蚌範栂拱 堙睦"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 療掴嘖孃杜\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 掴嘖孃杜\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 療掴嘖孃杜\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 掴嘖孃杜\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "軼塹 SSL 療掴嘖孃杜\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "酖冨彭嘖隣 妖塹 SSL *陋蛯諱 頏閾鱇迯*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "閊病冒 侑 嗜敖僧鰭 墨淋屠嘖 SSL\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "閊病冒 嗜田瀕杜頻 SSL (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "麩田瀕杜錨 SSL 瓶佻蒙斛彖良斗 %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "鹽參鋲彬壮 單叟賭:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " 黎貸屠: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 鹽參鋲彬壮 忸珍: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "靉瓶 嗜和歸良"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "靉瓶 佻 明堆葉 冨 佻姪:"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "靉瓶 佻 徨斗 佻妄:"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "屠嘖 嗜和歸良:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "拌卅墮 徨 徃崢杜頻"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "簣嘖蒜燐塹 料涸模 嗤瓶冒; 侑歪鰐嵒墮 墨涼?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "簣嘖蒜燐 墨療 嗤瓶冒; 侑歪鰐嵒墮 料涸盟?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/鑚彭塢墮..."
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/鑚彭塢墮.../單"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/鑚彭塢墮.../鑚侑宋不徒"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/鑚彭塢墮.../ 嗤瓶亘 卅嗷挂防"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/霤凖妖嘖不"
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/誅佗厦彖墮"
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/鑚妖塢墮"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/鑚妖塢墮/鑚妖塢墮"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/鑚妖塢墮/麥冱 塒都釦"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/鑚妖塢墮/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/鑚妖塢墮/靉妖塢墮 冒 療侑淺堊領賄"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/鑚妖塢墮/靉妖塢墮 冒 侑淺堊領賄"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/鑚妖塢墮/靉妖塢墮 徨 嗜和歸良 冒 侑淺堊領拇"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/拂徒杜錨 致都詫"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/蠣妖良墮"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/簣汰徂墮 墅卅徂堙妄 祖凖嗄媽 卜蒜"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/苗/蚌範栂拱 堙睦"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/苗/單 攸馬模徊"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/霤涸墮..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr ""
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr ""
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "醢妖"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 嗤瓶冒...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "鐶卅堆塰 妖塹"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "酖嗚鰐慄 妖塹 腕堊模嗹. 鐶卅堆堊墮 蛭?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "靤腕溶墟 仭佶 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "酖 療侑淺堊領挌 嗜和歸良"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "酖侑淺堊領拇 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 墨涼?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "酖 療侑淺堊領挌 嗜和歸良."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "酖侑淺堊領拇 嗜和歸良 療 料閉杜. 霤凖編 嗅田媽歸 仭佶?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "蚌冒墮 嗄彖"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "酖 力忸 嗜和歸良"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "醢忸 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 墨涼?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "酖 力忸 嗜和歸良."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "醢忸 嗜和歸良 療 料閉杜. 霤凖編 嗅田媽歸 仭佶?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "酖 塒党杜隣 嗜和歸良"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "鑚妖淌領拇 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 墨涼?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "酖 塒党杜隣 嗜和歸良"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "鑚妖淌領拇 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 料涸盟?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "酖 忸津姪領挌 致都詫 嗜和歸良"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "拂徒杜隣 致都詫 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 墨涼?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "酖 忸津姪領挌 致都詫 嗜和歸良."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "拂徒杜隣 致都詫 嗜和歸良 療 料閉杜. 靤歪鰐嵒墮 佻瓶 料涸盟?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "舍孃佗厦徊 嗜和歸良 佻 堙輿..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d 嫩遡杜"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d 佚凖妖歸力"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d 嗚椀敏彖力"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 嗜和歸良 忸岱僧"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 力忸, %d 療侑淺堊領挌, %d 徨吐 (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 力忸, %d 療侑淺堊領挌, %d 徨吐"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "麩參敏徊..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t耋厖敏彖良 嗤瓶冒 嗜和歸良..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "耋厖敏彖良 嗤瓶冒 嗜和歸良..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "双瓶 謀杼 嗤瓶冒 (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(酖 珍壅)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "麩和歸良 %d 佻妖淌力\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "麩和歸良 %d 佻妖淌力 冒 侑淺堊領賄\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "麩和歸良 %d 佻妖淌力 冒 療侑淺堊領賄\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "麩和歸良 %s/%d 佻妖淌力 冒 嫩遡杜力\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "珍姪良 嗜和歸良"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "珍棉墮 嗜和歸良 妥 從斃嵶腕塢 從嗷堊力很杜頻?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "良湟崚良 佻徭碗兩殄飯 嗜和歸良..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr " 嗜和歸良 %s/%d 嗄冱 佻妖塰\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "麩和歸良 %d 佻妖淌力 通 佚凖妖歸良 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "軼嘖 料變挿杜頻 嗜徙祖租 堙釦歸 仭佶亙."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "麩和歸良 %d 佻妖淌力 通 墨佗厦彖良 %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "軼嘖 料變挿杜頻 通 墨佗厦彖良 嗜徙祖租 堙釦歸 仭佶亙."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "拌敏狙墫 徨 嗜和歸良..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "靤鷲斛枳 柯陀 侑 和卅堆塰 嗜和歸良."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "黐凉掀僧錨 和嗾崢杜品..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "鑚妖料 嘛凉掀僧頻 和嗾崢杜品..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "鑚妖料 嘛凉掀僧頻 和嗾崢杜頻 通 瓶佻摸杜頻..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "読蒙墟礎頻..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "翩蒙墟礎頻..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d 嗜和歸良 堝斌慥厦彖力."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "徳別 %s 孛 嗾歸嘖徼都\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "麩敖僧錨 和盟嘖 侑腕溶墟 堙睦堊...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "酖從斃嵶 塹岱惣不 嗜和歸良.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "塹泰 嗜頒僧不 榑 涸嘖, 忸斛徂堙 墨淋屠嘖力 妖寮, "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "歸緬燐 侑宋亙 卜椀墨 踊柯, 忸妥夘堙 '麩頒僧不 冒...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"斌 料嵳不 北宋布 'y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "簗 塹岱爽杜頻 榑惑 很崚良 冒 堙睦堊 忸妥夘堙 "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"'靉冒攸墮 冒 堙睦', 斌 料嵳不 北宋布 't'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "簗 塰燮塢 榑惑 很崚良 徇奴療 侑惑卅様亙 忸妥夘堙 "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "'鑚牧捏' 斌 '鑚牧捏 佻溶毆...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "斌 歸緬良堙 鍔爽潰, 斌 歸緬良堙 嘔田療 卜椀墨 踊柯, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "斌 料嵳不 北宋布 'l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "堊 佻槻瓶 倒 療 泰盟 侑彭凖料.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "塹泰 侑彭夘墮 電, 忸斛徂堙 墨淋屠嘖力 妖寮, 歸緬燐 侑宋亙\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "卜椀墨 踊柯, 忸妥夘堙 '靤彭夘墮 佻槻瓶'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"篥篇墸不徒慘拱 URL (%s) 毀扶租墫 \n"
+"塹岱爽租溶馬 URL (%s).\n"
+"單 卅徇 塰燮墮?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%d "
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1f 紡"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2f 軋"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2f 臑"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "攸佗嗹 %s 療 嫩遡喪.\n"
+
+#~ msgid "JPilot charset"
+#~ msgstr "誅追厦徊 JPilot"
+
+#~ msgid "can't lock %s with fcntl\n"
+#~ msgstr "療 嫩遡腕 攸駄亘敏彖墮 %s 佻溶毆 fcntl\n"
+
+#~ msgid "can't lock %s with flock\n"
+#~ msgstr "療 嫩遡腕 攸駄亘敏彖墮 %s 佻溶毆 flock\n"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 00000000..affc6b63
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,6267 @@
+# translation of Sylpheed to Slovak
+# Copyright (C) 2003 Andrej Kacian
+# This file is distributed under the same license as the Sylpheed package.
+# Andrej Kacian <andrej@kacian.sk>, 2003, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-01-22 17:46+0100\n"
+"Last-Translator: Andrej Kacian <andrej@kacian.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.2\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O programe"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME je chrnen copyrightom 2001 Werner Koch <dd9jn@gnu.org> \n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Tento program je vone 麹riten; Mete ho 麹ri (a)lebo ho upravova tak "
+"ako to popisuje GNU General Public License, licencia vydan organizciou "
+"Free Software Foundation, a to vo verzii 2, alebo, poda v畊ho rozhodnutia, "
+"v akejkovek alej verzii.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Tento program je 麹ren vo viere v jeho uitonos, ale BEZ AKEJKOVEK "
+"ZRUKY. Viac detailov njdete v GNU General Public License.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Kpiu GNU General Public License by ste mali zska spolone s tmto "
+"programom. Ak to tak nie je, nap躪te na adresu Free Software Foundation, "
+"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Na蓁tavam nastavenia pre vetky kont...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Njden nvestie: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"S otvoren okn s rozpsanmi sprvami.\n"
+"Prosm zatvorte vetky tieto okn predtm, ako zanete meni nastavenia knt."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Otvram okno pre nastavenie konta...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Vytvram okno pre nastavenie konta...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "prava knt"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nov sprvy bud kontrolovan v tomto porad. Ak m by konto kontrolovan\n"
+"pri vobe 'Prija vetko', zatrhnite pol辷ko v stpci oznaenom 'G'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Meno"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Prida"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Upravi"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "Zmaza"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Nadol"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Nahor"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr "Nastavi ako vchodzie konto"
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zavrie"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Zmaza konto"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Naozaj chcete zmaza toto konto?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "no"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nie"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Ned sa zska sbor sprvy %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Ned sa zska as sprvy."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Ned sa zska as viacdielnej sprvy"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Zvolen akcia neme by pouit v okne psania sprvy,\n"
+"pretoe obsahuje %%f, %%F alebo %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Prkaz nemohol by vykonan. Nepodarilo sa vytvori potrubie.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Ned sa vytvori podriaden proces pre vykonanie prkazu:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Spusten: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Ukonen: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Vstup/vstup akcie"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Odosla "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Ukoni"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Zadajte parameter nasledujcej akcie:\n"
+"(`%%h' bude nahraden parametrom)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Skryt pou壌vatesk parameter pre akciu"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Zadajte parameter nasledujcej akcie:\n"
+"(`%%h' bude nahraden parametrom)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Pou壌vatesk parameter pre akciu"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Prida adresu do adresra"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresr"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Poznmky"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Vyberte prieinok adresra"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Storno"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Sbor"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Sbor/Nov _Adresr"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Sbor/Nov _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Sbor/Nov _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Sbor/Nov _Server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Sbor/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Sbor/_Upravi"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Sbor/Z_maza"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Sbor/U_loi"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Sbor/_Zavrie"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresa"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresa/Nov _Adresa"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresa/Nov _Skupina"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresa/Nov _Prieinok"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresa/--- "
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresa/_Upravi"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresa/Z_maza"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Nstroje"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Nstroje/Importova sbor _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/Npo_veda"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/Npo_veda/_O programe"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nov _Adresa"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nov _Skupina"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nov _Prieinok"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Upravi"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/Z_maza"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-mailov adresa"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Otvori adresr"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Meno:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Zmaza"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Vyhada"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Komu:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Kpia:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Slep kpia:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Zmaza adresu(y)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Naozaj zmaza adresu(y)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nie"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Naozaj chcete zmaza prieinok A S敞ASNE vetky adresy v %s ?\n"
+"Ak zmaete len prieinok, adresy z neho sa presun do nadradenho prieinku."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Len prieinok"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Prieinok aj adresy"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Naozaj zmaza '%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nov uivate; nepodarilo sa uloi indexov sbor."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nov uivate; nedaj sa uloi sbory adresra."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Konverzia starho adresra prebehla spene."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Konverzia starho adresra prebehla,\n"
+"ned sa uloi indexov sbor novho adresra"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Ned sa konvertova star adresr,\n"
+"ale boli vytvoren przdne sbory novho adresra."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Ned sa konvertova star adresr,\n"
+"nedaj sa ani vytvori sbory novho adresra."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Ned sa konvertova star adresr\n"
+"a nedaj sa ani vytvori sbory novho adresra."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Chyba pri konverzii adresra"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Konverzia adresra"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Chyba v adresri"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Ned sa na蓁ta zoznam adries"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Konverzia starho adresra prebehla, ned sa uloi indexov sbor novho "
+"adresra"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Ned sa konvertova star adresr, ale boli vytvoren przdne sbory novho "
+"adresra."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Ned sa konvertova star adresr, nedaj sa ani vytvori sbory novho "
+"adresra."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Ned sa konvertova star adresr a nedaj sa ani vytvori sbory novho "
+"adresra."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Chyba pri konverzii adresra"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Konverzia adresra"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Ovldanie"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adresr"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Osoba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-mailov adresa"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Skupina"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Prieinok"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Spolon adresa"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Skromn adresa"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Upozornenie"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Varovanie"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Chyba"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Vytvram dialg pre varovania...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Zobrazi tto sprvu nabudce"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Oranov"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "erven"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Ruov"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Bledomodr"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Modr"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zelen"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Hned"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "iadna"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Prida..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Odstrni"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Vlastnosti..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Sbor/U_loi"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/Sp_rva/Odosla _neskr"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/Sp_rva/_Uloi medzi koncepty"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/Sp_rva/Uloi a _pokraova v editcii"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Sbor/_Pripoji sbor"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Sbor/_Vloi sbor"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Sbor/V_loi podpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/p_ravy"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/p_ravy/Z_novu urobi"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/p_ravy/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/p_ravy/_Vystrihn"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/p_ravy/_Koprova"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/p_ravy/_Prilepi"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/p_ravy/Prilepi ako _citciu"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/p_ravy/Vy_bra vetko"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/p_ravy/R_oz麹ren"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/p_ravy/R_oz麹ren/Presun o znak dozadu"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/p_ravy/R_oz麹ren/Presun o znak dopredu"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/p_ravy/R_oz麹ren/Presun o slovo dozadu"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/p_ravy/R_oz麹ren/Presun o slovo dopredu"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/p_ravy/R_oz麹ren/Presun na zaiatok riadku"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/p_ravy/R_oz麹ren/Presun na koniec riadku"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/p_ravy/R_oz麹ren/Presun na predchodz riadok"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/p_ravy/R_oz麹ren/Presun na al麹 riadok"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/p_ravy/R_oz麹ren/Zmaza znak naavo od kurzora"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/p_ravy/R_oz麹ren/Zmaza znak napravo od kurzora"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/p_ravy/R_oz麹ren/Zmaza slovo naavo od kurzora"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/p_ravy/R_oz麹ren/Zmaza slovo napravo od kurzora"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/p_ravy/R_oz麹ren/Zmaza riadok"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/p_ravy/R_oz麹ren/Zmaza text do konca riadku"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/p_ravy/_Zalomi aktulny odstavec"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/p_ravy/Zalomi vetky _dlh riadky"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/p_ravy/_Koprova"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Zobrazi"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Zobrazi/_Komu"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Zobrazi/K_pia"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Zobrazi/_Slep kpia"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Zobrazi/_Odpove komu"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Zobrazi/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Zobrazi/O_dovzda komu"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Zobrazi/P_ravtko"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Zobrazi/Pr_lohy"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Nstroje/_Adresr"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Nstroje/a_blna"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Nstroje/A_kcie"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Nstroje/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/p_ravy/Upravi e_xternm editorom"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Nstroje/A_kcie"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/Sp_rva/_Zaifrova"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: sbor neexistuje\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Ned sa zska as textu\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Chyba v vodzovkch."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Chyba formtu odpovede/preposielania."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Sbor %s neexistuje\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Ned sa zisti d緇ka sboru %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Sbor %s je przdny."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Ned sa 蓁ta %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Sprva: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ned sa zska as viacdielnej sprvy."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr "[Upraven]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Psanie sprvy%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Psanie sprvy%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Nie je uren prjemca."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Odosla"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Predmet je przdny. Odosla napriek tomu?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "ned sa zska zoznam prjemcov."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nie je uren konto pre odosielanie sprv.\n"
+"Pred odosielanm prosm zvote potov konto."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Pri odosielan sprvy na %s nastala chyba."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Sprva sa ned uloi medzi odoslan sprvy."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Nemem njs iadny k禦 asociovan so zvolenm ID k禦a `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "ned sa zmeni md sboru\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Ned sa zmeni kdovanie sprvy z\n"
+"%s na %s.\n"
+"Odosla sprvu aj napriek tomu?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "ned sa zapsa hlavika\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "ned sa odstrni star sprva\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "zaraujem sprvu do fronty...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "nemem njs prieinok Na odoslanie\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "nemem zaradi sprvu do fronty\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "vygenerovan Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Vytvram okno pre psanie sprvy...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME typ"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Vekos"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Od:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Odosla sprvu"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Odosla neskr"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Zaradi sprvu do prieinka Na odoslanie a odosla neskr"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Koncept"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Uloi medzi koncepty"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Vloi"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Vloi obsah sboru"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Pripoji"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Pripoji sbor"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Podpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Vloi podpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Upravi pomocou externho editoru"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Riadkovanie"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Zalomi vetky dlh riadky"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Neplatn MIME typ."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Sbor neexistuje alebo je przdny."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Vlastnosti"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kdov strnka"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Cesta"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Nzov sboru"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Neplatn prkaz pre extern editor: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Extern editor je ete stle aktvny.\n"
+"Ukoni ho nsilne?\n"
+"skupinov ID procesu: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Ukonen skupina procesov s ID: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Doasn sbor: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Psanie: vstup z externho procesu\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Ned sa spusti extern editor\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Ned sa zapisova do sboru\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Ned sa 蓁ta z potrubia\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Sprva sa ned zaradi do fronty."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Vybra sbor"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Zrui sprvu"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Obsah sprvy sa zmenil. Chcete zahodi zmeny?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Zahodi"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "medzi Koncepty"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Chcete poui ablnu `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Poui ablnu"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Nahradi"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Upravi adresu"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Prida kontakt"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Upravi daje o kontakte"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Muste zada e-mailov adresu."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Muste zada nzov a hodnotu."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Upravi daje o kontakte"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Zobrazi meno"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Priezvisko"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Krstn meno"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Prezvka"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-mailov adresa"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Posun nahor"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Posun nadol"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Zmeni"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Vyisti"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Hodnota"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Zkladn daje"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atribty uivatea"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Sbor je v poriadku."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Sbor nem platn formt adresra."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Sbor sa ned 蓁ta."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Upravi adresr"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr "Testova sbor"
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Sbor"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Prida nov adresr"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Muste zada nzov skupiny."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Upravi daje skupiny"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Nzov skupiny"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresy v skupine"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Dostupn adresy"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"E-mailov adresy mte presva z a do skupiny pomocou tla蓁tok so 麹pkami"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Upravi detaily skupiny"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Prida nov skupinu"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Upravi prieinok"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Zadajte nov nzov prieinka:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nov prieinok"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Zadajte nzov novho prieinka:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Sbor nem JPilot formt."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Vyberte sbor JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Upravi zznam JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "alie e-mailov adresy"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Prida nov zznam JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Pripojen k serveru"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Nepodarilo sa pripoji k serveru"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Upravi LDAP server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Nzov po蓁taa"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr "Overi server"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Bza pre vyhadvanie"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Kritri pre vyhadvanie"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Reset "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind heslo"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (v sekundch)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maximum zznamov"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Zkladn"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Roz麹ren"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Prida nov LDAP server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "prava LDAP - Zvote bzu pre vyhadvanie"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Dostupn bzy"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr ""
+"Nemem na蓁ta bzy pre vyhadvanie zo servera - prosm zadajte rune"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Sbor nie je vo formte vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Vyberte sbor vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Upravi vCard zznam"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Prida nov vCard zznam"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportova"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Urite cieov prieinok a sbor mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Zdrojov prieinok:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Exportovan sbor:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "Zvote..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Zvote sbor pre export"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "nepodarilo sa zapsa nastavenie do sboru\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Zvote prieinok"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Prijat"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Odoslan"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Na odoslanie"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Odpadkov k"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Koncepty"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Nov Prieinok"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "Nzov prieinka neme obsahova `%c'."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Prieinok `%s' u existuje."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Ned sa vytvori prieinok `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Vytvori _nov prieinok..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Premenova prieinok..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Zmaza prieinok"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Vyprzdni k"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/P_rija nov sprvy"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/O_bnovi truktru prieinkov"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/Vy_hada v sprvach..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "iadne nepre蓁tan sprvy."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Prih_lsi sa do diskusnej skupiny"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Odstrni _diskusn skupinu"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Vytvram nhad pre prieinok...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nov"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Nepre蓁tan"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Nastavujem informcie o prieinku...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Nastavujem informcie o prieinku..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Prehadvam prieinok %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Prehadvam prieinok %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Obnovi strom prieinkov"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Strom prieinkov bude obnoven. Pokraova?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Obnovujem strom prieinku..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "Obnova stromu prieinku sa nepodarila."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Obnovujem strom vetkch prieinkov..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Kontrolujem nov sprby vo vetkch prieinkoch..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Prieinok %s je zvolen\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Odosielam sprvu..."
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Pri odosielan sprvy na %s nastala chyba."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Zadajte nzov novho prieinku:\n"
+"(Ak chcete vytvori prieinok s al麹mi podzlokami,\n"
+"pridajte na koniec nzvu '/')"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Zadajte nov nzov pre `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Premenova prieinok"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Vetky prieinky a sprvy v `%s' bud odstrnen.\n"
+"Naozaj pokraova?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Odstrni prieinok"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Prieinok '%s' sa ned odstrni."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Vyprzdni k"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Zmaza vetky sprvy v koi?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Naozaj chcete odstrni schrnku '%s' ?\n"
+"(Sprvy NEBUD odstrnen z disku)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Odstrni schrnku"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Naozaj chcete odstrni IMAP4 konto '%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Odstrni IMAP4 konto"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Naozaj chcete odstrni diskusn skupinu '%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Odstrni diskusn skupinu"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Naozaj chcede odstrni news konto '%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Odstrni news konto"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Prihlsi sa do diskusnej skupiny"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Zvote diskusn skupiny, do ktorch sa chcete prihlsi."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Njs skupiny:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Vyhada "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Nzov diskusnej skupiny"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Sprvy"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Typ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Obnovi"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderovan"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "len na 蓁tanie"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "neznma"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Ned sa zska zoznam diskusnch skupn."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Hotovo."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "Prijatch %d diskusnch skupn (pre蓁tanch %s)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Diskusn skupiny:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Predmet:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Vytvram nhad hlaviky...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(nie je znmy odosielate)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(bez predmetu)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Vytvram nhad obrzku...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Ned sa na蓁ta obrzok."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 spojenie k %s sa preruilo. Znovu pripjam...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "vytvram IMAP4 spojenie k %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Ned sa vytvori TLS spojenie.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "ned sa nastavi prznak zmazania: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "ned sa odstrni\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "ned sa nastavi prznak zmazania: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "prieinok sa ned zatvori\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "koreov prieinok %s neexistuje\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "pri prkaze LIST sa vyskytla chyba.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Ned sa vytvori '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Ned sa vytvori '%s' v INBOXe\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "ned sa vytvori schrnka: prkaz LIST zlyhal\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "ned sa vytvori schrnka\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "ned sa premenova schrnka: %s na %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "schrnka sa ned odstrni \n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "oblka sa ned na蓁ta\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "pri zskavan oblky sa vyskytla chyba.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "oblka sa ned pre蓁ta: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ned sa pripoji k serveru IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ned sa vytvori IMAP4 spojenie s: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "ned sa njs oblka\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "prieinok sa ned vytvori: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 autentizcia bola nespen.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "nespen prihlsenie k IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "ned sa napoji %s k %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(posielam sbor...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "ned sa napoji sprva k %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "ned sa koprova %s do %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "chyba pri IMAP prkaze: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "chyba pri IMAP prkaze: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "chyba pri IMAP prkaze: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv neme skonvertova UTF-7 na %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv neme skonvertova %s na UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importova"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Zvote importovan mbox sbor a cieov prieinok."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Importovan sbor:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Cieov prieinok:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Zvote sbor pre import"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Prosm zvote nzov adresra a sboru pre import."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Zvote a premenujte nzvy LDIF pol pre import."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Sbor importovan."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Prozm zvote sbor."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Nebol zadan nzov adresra."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Chyba pri 蓁tan LDIF pol."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Sbor LDIFbol spene importovan."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Zvote sbor LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Nzov sboru"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF pole"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Nzov atribtu"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribt"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Zvote"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adresr :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Nzov sboru :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Zznamy:"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importova sbor LDIF do adresra"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Predchdzajci"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Nasledujca"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "daje o sbore"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atribty"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Dokoni"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Prijmam nov sprvy"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "akajte"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Zruen"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Prijmam"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Hotovo (%d sprv (%s) prijatch)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Hotovo (iadne nov sprvy)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Spojenie zlyhalo"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autentizcia zlyhala"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zamknut"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (v sekundch)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Dokonen (%d novch sprv)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Dokonen (iadne nov sprvy)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Pri prijman poty sa vyskytli chyby."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "prijmam nov sprvy pre konto %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Prijmam nov sprvy"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Pripjam sa k serveru POP3: %s..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Nepodarilo sa pripoji k serveru POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autentizcia..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Prijmam sprvy z %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Zskavam poet novch sprv (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Zskavam poet novch sprv (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Zskavam poet novch sprv (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Zskavam vekos sprv (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Odstraujem sprvu %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Odpjam sa"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Prijmam sprvu (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Prijmam (%d sprv (%s) prijatch)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Spojenie zlyhalo."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Pri spracovvan poty sa vyskytla chyba."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Pri spracovvan poty sa vyskytla chyba:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Na disku u nie je miesto."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Ned sa zapisova do sboru."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Chyba socketu."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Vzdialen hostite ukonil spojenie."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Mailbox je zamknut."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Mailbox je zamknut:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Autentizcia bola nespen."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Autentizcia bola nespen:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+#, fuzzy
+msgid "Session timed out."
+msgstr "as spojenia vypral\n"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Zaleovanie zruen\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Prijmam nov sprvy z %s do %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Zadajte heslo pre %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Zadajte heslo"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Zznam protokolu"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Sbor '%s' u existuje.\n"
+"Prieinok sa ned vytvori."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "glib nepodporuje g_thread.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG nie je naintalovan sprvne, alebo jeho verzia je prli star.\n"
+"Podpora OpenPGP je vypnut."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Pouitie: %s [VOBY]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresa] otvor okno pre psanie novej sprvy"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" otvor okno pre psanie novej sprvy s pripojenmi "
+"uvedenmi\n"
+" sbormi"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive prijme nov sprvy"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all prijme nov sprvy pre vetky kont"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send pole vetky sprvy vo vstupnej fronte"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [prieinok]... zobraz celkov poet sprv"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [prieinok]...\n"
+" zobraz stav jednotlivch prieinkov"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug ladiaci md"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help zobraz tto npovedu a ukon蓁 program"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr ""
+" --version zobraz informcie o verzii a ukon蓁 program"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Mte rozpsan sprvu. Naozaj ukoni?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Sprvy vo fronte"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Vo fronte s neodoslan sprvy. Ukoni program?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "u be壌 in kpia Sylpheedu.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Sbor/P_rieinok"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Sbor/P_rieinok/Vytvori _nov prieinok..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Sbor/P_rieinok/P_remenova prieinok..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Sbor/P_rieinok/O_dstrni prieinok"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Sbor/_Prida schrnku..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Sbor/_Prida schrnku..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Odstrni schrnku"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Sbor/P_rieinok/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/P_rija nov sprvy"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Sbor/P_rieinok/Pri_ja nov sprvy vo vetkch prieinkoch"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/O_bnovi truktru prieinkov"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Sbor/_Importova sbor mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Sbor/_Exportova do sboru mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Sbor/Vyisti odpadkov _k"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Sbor/_Uloi ako..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Sbor/_Tlai..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Sbor/P_racova odpojen"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Sbor/Uk_oni"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_pravy/Zvoli _vlkno"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_pravy/Vy_hada v aktulnej sprve..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_pravy/_Vyhada v sprvach..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Zobrazi/_Ukza alebo skry"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Strom prieinkov"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Zobrazenie sprvy"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Panel nstrojov"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Panel nstrojov/Ikony _a text"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Panel nstrojov/_Ikony"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Panel nstrojov/_Text"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Zobrazi/_Ukza alebo skry/_Panel nstrojov/iad_ne"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Zobrazi/_Ukza alebo skry/Stavov _riadok"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Zobrazi/Samostatn str_om prieinkov"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Zobrazi/Samostatn zobraz_enie sprvy"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Zobrazi/_Triedi"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Zobrazi/_Triedi/poda 蓁_sla"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Zobrazi/_Triedi/poda _vekosti"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Zobrazi/_Triedi/poda _dtumu"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Zobrazi/_Triedi/poda _odosielatea"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Zobrazi/_Triedi/poda _prjemcu"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Zobrazi/_Triedi/poda p_redmetu"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Zobrazi/_Triedi/poda _farebnho oznaenia"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Zobrazi/_Triedi/poda _znaky"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Zobrazi/_Triedi/poda pr_e蓁tania"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Zobrazi/_Triedi/poda pr_loh"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Zobrazi/_Triedi/_Netriedi"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Zobrazi/_Triedi/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Zobrazi/_Triedi/Vzostupne"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Zobrazi/_Triedi/Zostupne"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Zobrazi/_Triedi/Zos_kupi poda predmetu"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Zobrazi/Zobrazi _vlkna"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Zobrazi/_Rozbali vetky vlkna"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Zobrazi/Zba_li vetky vlkna"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Zobrazi/Nastav_i zobrazovan poloky"
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Zobrazi/Pre_js na"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Zobrazi/Pre_js na/_Predol sprvu"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Zobrazi/Pre_js na/_aliu sprvu"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Zobrazi/Pre_js na/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Zobrazi/Pre_js na/P_redol nepre蓁tan sprvu"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Zobrazi/Pre_js na/aliu n_epre蓁tan sprvu"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Zobrazi/Pre_js na/Predol no_v sprvu"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Zobrazi/Pre_js na/ali_u nov sprvu"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Zobrazi/Pre_js na/Predol _oznaen sprvu"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Zobrazi/Pre_js na/aliu o_znaen sprvu"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Zobrazi/Pre_js na/Predol sprvu s nvest_m"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Zobrazi/Pre_js na/a_liu sprvu s nvestm"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Zobrazi/Pre_js na/In prieino_k..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Zobrazi/_Kdovanie/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Zobrazi/_Kdovanie"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Zobrazi/_Kdovanie/_Automatick"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Zobrazi/_Kdovanie/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Zobrazi/_Kdovanie/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Zobrazi/_Kdovanie/Zpadn Eurpa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Zobrazi/_Kdovanie/Zpadn Eurpa (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Zobrazi/_Kdovanie/Stredn Eurpa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Zobrazi/_Kdovanie/_Pobaltie (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Zobrazi/_Kdovanie/Pobaltie (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Zobrazi/_Kdovanie/Grcko (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Zobrazi/_Kdovanie/Turecko (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Zobrazi/_Kdovanie/Cyrilika (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Zobrazi/_Kdovanie/Cyrilika (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Zobrazi/_Kdovanie/Cyrilika (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Zobrazi/_Kdovanie/Cyrilika (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Zobrazi/_Kdovanie/Japonsko (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Zobrazi/_Kdovanie/Japonsko (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Zobrazi/_Kdovanie/Japonsko (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Zobrazi/_Kdovanie/Japonsko (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Zobrazi/_Kdovanie/Zjednoduen 蓁ntina (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Zobrazi/_Kdovanie/Tradin 蓁ntina (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Zobrazi/_Kdovanie/Tradin 蓁ntina (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Zobrazi/_Kdovanie/罷ntina (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Zobrazi/_Kdovanie/Krea (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Zobrazi/_Kdovanie/Krea (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Zobrazi/_Kdovanie/Thajsko (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Zobrazi/_Kdovanie/Thajsko (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Zobrazi/Otvori v _novom okne"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Zobrazi/Zdrojov kd sprv_y"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Zobrazi/Zobrazi vetky _hlaviky"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Zobrazi/_Aktualizova zoznam"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/Sp_rva"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/Sp_rva/_Prija"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/Sp_rva/_Prija/Z _aktulneho konta"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/Sp_rva/_Prija/Zo _vetkch knt"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/Sp_rva/_Prija/_Ukoni prijmanie"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/Sp_rva/_Prija/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/Sp_rva/_Odosla sprvy vo fronte"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/Sp_rva/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/Sp_rva/_Napsa nov sprvu"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/Sp_rva/O_dpoveda"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/Sp_rva/Odpo_veda komu"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/Sp_rva/Odpoved_a komu/_vetkm"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/Sp_rva/Od_poveda komu/_odosielateovi"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/Sp_rva/Od_poveda komu/do _diskusnej skupiny"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/Sp_rva/_Posla alej"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/Sp_rva/Posla ako p_rlohu"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/Sp_rva/Pre_smerova"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/Sp_rva/Pres_un"
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/Sp_rva/_Koprova"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/Sp_rva/Z_maza"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/Sp_rva/O_znai"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/Sp_rva/O_znai/O_znai"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/Sp_rva/O_znai/O_dznai"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/Sp_rva/O_znai/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/Sp_rva/O_znai/Oznai ako _nepre蓁tan"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/Sp_rva/O_znai/Oznai ako _pre蓁tan"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/Sp_rva/O_znai/Oznai _vetky ako pre蓁tan"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/Sp_rva/Znovu _editova"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Nstroje/Prida _odosielatea do adresra"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Nstroje/_Filtrova sprvy"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Nstroje/_Filtrova sprvy"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Nstroje/Vytvori pravidlo fi_ltra"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Nstroje/Vytvori pravidlo fi_ltra/_Automaticky"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Nstroje/Vytvori pravidlo fi_ltra/poda _odosielatea"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Nstroje/Vytvori pravidlo fi_ltra/poda _prjemcu"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Nstroje/Vytvori pravidlo fi_ltra/poda p_redmetu"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Nstroje/Zmaza du_pliktne sprvy"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Nstroje/V_ykona"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Nstroje/Okno _zznamu"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/Nastav_enia"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/Nastav_enia/_Veobecn nastavenia..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/Nastav_enia/Nastavenie _filtru..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/Nastav_enia/_ablna..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/Nastav_enia/_Akcie..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/Nastav_enia/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/Nastav_enia/Nastavenia aktvneho _konta..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/Nastav_enia/Vytvori _nov konto..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/Nastav_enia/_Upravi kont..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/Nastav_enia/_Zmeni aktvne konto"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/Npo_veda/_Manul"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/Npo_veda/_Manul/_Anglicky"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/Npo_veda/_Manul/_Japonsky"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/Npo_veda/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/Npo_veda/_FAQ/_Anglicky"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/Npo_veda/_FAQ/_Japonsky"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/Npo_veda/_FAQ/_panielsky"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/Npo_veda/_FAQ/_Franczky"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/Npo_veda/_FAQ/_Taliansky"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/Npo_veda/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Vytvram hlavn okno...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Hlavn Okno: alokcia farieb %d bola nespen\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "hotovo.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Bez nzvu"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "iadny"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Menm typ oddeovaa okien z %d na %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Odpojen"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Ste odpojen. Pripoji sa?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Vyprzdni k"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Zmaza vetky sprvy v koi?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Prida mailbox"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Zadajte umiestnenie mailboxu.\n"
+"Ak zadte existujci mailbox, bude\n"
+"automaticky prehadan."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Mailbox '%s' u existuje."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Nepodarilo sa vytvori mailbox.\n"
+"Pravdepodobne u niektor sbory existuj, alebo tam nemte prva na "
+"zapisovanie."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Zobrazenie prieinku"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Zobrazenie sprvy"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Odpoveda"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odpoveda odosielateovi i vetkm prjemcom"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/O_dpoveda komu/_odosielateovi"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/O_dpoveda komu/do _diskusnej skupiny"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Posla alej"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Posla alej ako p_rlohu"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Pr_esmerova"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Prija"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Prija nov potu"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Prija vetko"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Prija nov potu pre vetky kont"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Odosla sprvy vo fronte"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Nov sprva"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Napsa nov sprvu"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odpoveda"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odpoveda na sprvu"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odp. vetkm"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odpoveda odosielateovi i vetkm prjemcom"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Posla alej"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Posla sprvu alej"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Zmaza sprvu"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Vykona"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Vykona oznaen proces"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "alia nepre蓁tan sprva"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Nastavenia"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Veobecn nastavenia"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Konto"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Nastavenie konta"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Ste odpojen. Kliknite na ikonu, ak sa chcete pripoji."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Ste pripojen. Kliknite na ikonu, ak sa chcete odpoji."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Ukoni"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Ukoni program"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "nemem zapisova do doasnho sboru\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Prijmam sprvy z %s do %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "nemem pre蓁ta sbor mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "neplatn formt mbox: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "pokoden mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "nemem otvori doasn sbor\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"neukonen From:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "njdench %d sprv.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "nemem vytvori zmkov sbor %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "ak je to mon, miesto 'file' pouite 'flock'.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "nemem vytvori %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "in proces vlastn mailbox, akm...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "nemem uzamkn %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "neplatn typ zmku\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "nemem odomkn %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "nemem skrti mailbox na nulov d緇ku.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exportujem sprvy z %s do %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Njdi v sasnej sprve"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Njdi text:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Zle壌 na vekosti psmen"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Hada dozadu"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Hada"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Hadanie sa nepodarilo"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Hadan reazec sa nenaiel."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Dosiahnut zaiatok sprvy; pokraova z konca?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Dosiahnut koniec sprvy; pokraova od zaiatku?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Hadanie dokonen"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Vytvram zobrazenie sprvy...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Uloi ako"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Prepsa"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Prepsa existujci sbor?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Nemem uloi sbor '%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Tlai"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Zadajte prkazov riadok tlae:\n"
+"('%s' bude nahraden nzvom sboru)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Prkazov riadok tlae je neplatn:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "nemem koprova sprvu %s do %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Nemem oznai sbor so znakami.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "zdrojov prieinok je ten ist ako cieov.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Koprujem sprvu %s%c%d do %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Posledn 蓁slo v prieinku %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Otvori"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/O_tvori 蓁m..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Zobrazi ako text"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Uloi ako..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Overi _podpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Vytvram zobrazenie MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME typ"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Text"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Prlohy"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Zvote \"Overi podpis\" pre overenie"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Nemem uloi as viacdielnej sprvy."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Otvori 蓁m"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Zadajte prkazov riadok pre otvorenie sboru:\n"
+"('%s' bude nahraden nzvom sboru)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Prkazov riadok prehliadaa MIME je neplatn: '%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "nadvzujem NNTP spojenie k %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP spojenie k %s:%d bolo preruen. Obnovujem spojenie...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "lnok %d u je v medzipamti.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "prijmam lnok %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "nemem pre蓁ta lnok %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "nemem zska zoznam diskusnch skupn\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "nemem odosla lnok.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "nemem prija lnok %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "nemem vybra skupinu %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "neplatn rozsah lnkov: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "iadne nov lnky.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "prijmam xover %d - %d v %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "nemem prija xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "pri prijman xover sa vyskytla chyba.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "neplatn xover riadok: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "nemem prija xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "pri prijman xhdr sa vyskytla chyba.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Ned sa pripoji k serveru NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "chyba protokolu: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "chyba protokolu\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Pri odosielan sa vyskytla chyba\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Pri odosielan sprvy nastala chyba."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Heslo"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[iadny user id]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sProsm zadajte heslo pre:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Neplatn heslo! Skste znova...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "V pozdrave nebola njden vyadovan APOP asov znaka\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Chybn asov znaka v pozdrave\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Chyba protokolu POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "neplatn xover riadok: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Odstraujem star sprvu %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Preskakujem sprvu %d (%d bajtov)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "mailbox je zamknut\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "as spojenia vypral\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "nemem vytvori TLS relciu\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "vyskytla sa chyba v autentizcii\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "prkaz nie je podporovan\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "vyskytla sa chyba pri POP3 spojen\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Na蓁tavam nastavenie...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Njden %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Dokonen na蓁tavanie nastavenia.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Nastavenie uloen.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Poui"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Otvram okno nastavenia konta...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Konto%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Nastavenie novho konta"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Nastavenie konta"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Vytvram okno nastavenia konta...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Prija"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Skromie"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Roz麹ren"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Nzov tohto konta"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Nastavi ako vchodzie"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Osobn informcie"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Cel meno"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-mailov adresa"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizcia"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informcie o serveri"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "iadne (loklne)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Tento server vyaduje autentizciu"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "News server"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server pre prijmanie"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP server (odosielanie)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Prihlasovacie meno"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Heslo"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Tento server vyaduje autentizciu"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Vymaza sprvy na serveri po ich prijat"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Vymaza po"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "doch"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dn: zmaza ihne)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Prija vetky sprvy na serveri"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Obmedzenie vekosti sprvy pre prjem"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrova sprvy pri prijat"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Vchodz inbox"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nefiltrovan sprvy bud umiestnen v tomto prieinku)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Metda autentizcie"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatick"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "Pri vobe 'Prija vetko' prija sprvy aj pre toto konto"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Hlavika"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Prida dtum do hlaviky"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generova Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Prida uivateom definovan hlaviky"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Upresni... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autentizcia"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP Autentizcia (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Ak nechte tieto polia przdne, bude pouit to ist\n"
+"prihlasovacie meno a heslo ako pri prijman."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autentizova cez POP3 pred odosielanm"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Vstup prkazu"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Automaticky nastavi nasledujce adresy"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Kpia"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Slep kpia"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Odpoveda komu"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Implicitne zaifrova sprvu"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Implicitne podpsa sprvu"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "ifrova do ASCII-armored tvaru"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Podpsa istm textom"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "K禦 pre podpis"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Poui vchodz k禦 GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Zvoli k禦 poda vaej emailovej adresy"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Zada k禦 rune"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "User alebo key ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Nepou壌va SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Poui SSL pre POP3 spojenie"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Poui prkaz STARTTLS pre nadviazanie SSL spojenia"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Poui SSL pre IMAP4 spojenie"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Poui SSL pre NNTP spojenie"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Odosla (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Poui SSL pre SMTP spojenie"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Pou壌va non-blocking SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Vypnite tto vobu ak mte problmy pri SSL spojeniach)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Uri SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Uri POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Uri IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Uri NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Uri nzov domny"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Prieinok serveru IMAP"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Uloi odoslan sprvy do"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Uloi koncepty do"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Uloi vymazan sprvy do"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Nebol zadan nzov konta."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Nebola zadan e-mailov adresa."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Nebol zadan SMTP server."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Nebol zadan user ID."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Nebol zadan POP3 server."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Nebol zadan IMAP4 server."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Nebol zadan NNTP server."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Nedoporuuje sa pou壌va star spsob ifrovania sprv\n"
+"v ASCII-armored formte. Nevyhovuje toti pecifikcii\n"
+"RFC 3156 - Bezpenos MIME s OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Nastavenie akci"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Nzov menu:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Prkazov riadok:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Nzov v menu:\n"
+" Pouite / v nzve v menu, ak chcete vytvori podmenu.\n"
+"Prkazov riadok:\n"
+" Prv znak:\n"
+" | odole prkazu telo sprvy alebo vber\n"
+" > odole prkazu uivateom zadan text\n"
+" * odole prkazu uivateom zadan skryt text\n"
+" Posledn znak:\n"
+" | nahrad telo sprvy alebo vber vstupom prkazu\n"
+" > vlo壌 vstup prkazu bez zmazania existujceho textu\n"
+" & vykon prkaz asynchrnne\n"
+" Premenn:\n"
+" %f pre nzov sboru sprvy\n"
+" %F zoznam nzvov sborov vybranch sprv\n"
+" %p zvolen as sprvy\n"
+" %u parameter zadan pou壌vateom\n"
+" %h skryt parameter zadan pou壌vateom\n"
+" %s oznaen text"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Nahradi "
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Npoveda syntaxe "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrovan akcie"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nov)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Nebol zadan nzov menu."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Bodkoiarka ':' nie je povolen v nzve menu."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Nzov menu je prli dlh."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Nebol zadan prkazov riadok."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Nzov menu a prkazov riadok s prli dlh."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Prkaz\n"
+"%s\n"
+"m syntaktick chybu."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Zmaza akciu"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Naozaj chcete zmaza tto akciu?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Vytvram okno veobecnch nastaven...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Veobecn nastavenia"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citt"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Zobrazenie"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Sprva"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Ostatn"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Extern program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Poui extern program pre prijmanie loklnej poty"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Prkaz"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Loklny spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Prija loklnu potu zo spoolu"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrova pri prijman loklnej poty"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Automaticky zisova nov potu"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "kadch"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "mint"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Zisti nov potu pri spusten"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Aktualizova vetky miestne prieinky po prijat poty"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Diskusn skupiny"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximlny poet prspevkov na stiahnutie\n"
+"(0 pre neobmedzen poet)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Pre odosielanie poui extern program"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Uloi odoslan sprvy"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Vstupn kdovanie znakov"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatick (doporuen)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Zpadn Eurpa (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Zpadn Eurpa (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Stredn Eurpa (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Pobaltie (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Pobaltie (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grcko (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turecko (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrilika (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrilika (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrilika (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cyrilika (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonsko (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonsko (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonsko (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Zjednoduen 蓁ntina (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradin 蓁ntina (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradin 蓁ntina (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "罷ntina (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Krea (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thajsko (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thajsko (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Po zvolen 'Automatick' bude zvolen optimlne kdovanie\n"
+"pre sasn lokalizciu."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Kdovanie pri prenose"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Zadajte hodnotu Content-Transfer-Encoding, ktor bude pouit,\n"
+"ke bude sprva obsahova in znaky ako ASCII."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Oddeova podpisu"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Vloi automaticky"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automaticky spusti extern editor"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Poet sptnch krokov"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Zalomi sprvy na"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znakoch"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Zalomi citciu"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Zalamova pri psan"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Zalomi pred odoslanm"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automaticky zvoli konto pri odpovedan"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Pri odpovedan citova sprvu"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Tla蓁tko Odpoveda zvol odpove do mailinglistu"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Formt odpovede"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Znaka citcie"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Formt posielania alej"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Popis znakov "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Psmo"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Preloi nzov hlaviky (ako naprklad 'From:', 'Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Zobrazi poet nepre蓁tanch sprv pri nzve prieinka"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Skrti diskusn skupiny dlhie ako"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "psmen"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Zoznam sprv"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Zobrazi prjemcu v stpci 'Od' ak ste odosielate vy"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Rozbali vlkna"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Formt dtumu"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Nastavenie zobrazovanch poloiek v zozname sprv... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Povoli farby v sprve"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Zobrazi viacbajtov abecedu a 蓁sla ako ASCII znaky (len Japonsko)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Zobrazi panel s hlavikami nad sprvou"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Zobrazi vybran hlaviky v sprve"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Medzera medzi riadkami"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(ov)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Odsadi telo sprvy"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Posvanie"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Pol strnky"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Plynul posvanie"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Posun"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Prispsobi vekos priloench obrzkov"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automaticky overova podpisy"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Zobrazi vsledok overenia ako upozornenie"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Uloi heslo doasne v pamti"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Vymaza z pamte za"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "mint "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Nastavte na '0', ak chcete uloi heslo do pamte\n"
+" a do ukonenia)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Zachyti vstup poas zadvania hesla"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Pri spusten zobrazi varovanie v prpade, e sa GnuPG ned poui."
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Otvori sprvu hne pri zvolen v zozname"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Pri vstupe do prieinka otvori prv nepre蓁tan sprvu"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Sprvu oznai ako pre蓁tan len ak je otvoren v samostatnom okne"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Po prijat novej poty sa presun do prieinka prijatch sprv"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Pri presvan alebo mazan sprv toto vykona okamite"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Sprvy bud oznaen a do vykonania,\n"
+" ak je tto monos vypnut)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Okno prijmania"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Zobrazi okno prijmania"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Vdy"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Len pri manulnom prijman"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nikdy"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Nezobrazova upozornenie pri chybe pri prijman"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Po skonen zavrie okno prijmania"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Nastavi klvesov skratky... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Extern prkazy (%s bude nahraden nzvom sboru / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Webov prehliada"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Prida adresu k prjemcom pri dvojkliknut"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Pri ukonen"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potvrdi ukonenie"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Vyprzdni k pri ukonen"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Opta sa pred vyprzdnenm"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Upozorni, ak s sprvy vo fronte"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "asov limit spojen:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "seknd"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "skrten nzov da v tdni"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "nzov da v tdni"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "skrten nzov mesiaca"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "nzov mesiaca"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "uprednostovan dtum a as pre sasn lokalizciu"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "storoie (rok/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "de v mesiaci"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "蓁slo hodiny pri pouit 24-hodinovho asu"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "蓁slo hodiny pri pouit 12-hodinovho asu"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "蓁slo da v roku"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "蓁slo mesiaca"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minty"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM alebo PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekundy"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "poradie da v tdni"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "uprednostovan dtum pre sasn lokalizciu"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "posledn dve 蓁slice roku"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "rok"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "asov zna, jej nzov alebo skratka"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Symbol"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Popis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Prklad"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Nastavi farby sprvy"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Farby"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citovan text - Prv rove"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citovan text - Druh rove"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citovan text - Tretia rove"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI odkaz"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Opakova farby"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Vyberte farbu pre 1. rove citcie"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Vyberte farbu pre 2. rove citcie"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Vyberte farbu pre 3. rove citcie"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Vyberte farbu pre URI odkazy"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Popis symbolov"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Dtum\n"
+"Od\n"
+"Pln meno odosielatea\n"
+"Prv meno odosielatea\n"
+"Inicily odosielatea\n"
+"Predmet\n"
+"Komu\n"
+"Kpia\n"
+"Diskusn skupiny\n"
+"Message-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Ak je x zadan, zobraz expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Telo sprvy\n"
+"Telo citovanej sprvy\n"
+"Telo sprvy bez podpisu\n"
+"Telo citovanej sprvy bez podpisu\n"
+"Znak %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Sptn lomtko\n"
+"Otznik\n"
+"av zloen ztvorka\n"
+"Prav zloen ztvorka"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Voba psma"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Klvesov skratky"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Vyberte sadu klvesovch skratiek.\n"
+"Mete modifikova skratky kadho menu stlaenm\n"
+"poadovanej skratky po ukzan myou na poloku."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "tandardn"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Star麹 Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Nastavenie vlastnch hlaviiek"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Vlastn hlaviky"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Nebol zadan nzov hlaviky."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Zmaza hlaviku"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Naozaj chcete zmaza tto hlaviku?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Vytvram okno nastavenia zobrazovanch hlaviiek...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Zobrazovan hlaviky"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Nzov hlaviky"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Zobrazovan hlaviky"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skryt hlaviky"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Zobrazi vetky neuren hlaviky"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Na蓁tavam nastavenie zobrazovania hlaviiek...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Zapisujem nastavenie zobrazovania hlaviiek...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Tto hlavika u je v zozname."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Nastavenie filtra"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "Prv"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "Posledn"
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Koprova..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Zmaza pravidlo"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Naozaj chcete zmaza toto pravidlo?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Zmaza pravidlo"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Skryt hlaviky"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Hlavika"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Sprva"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "obsahuje"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "neobsahuje"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Posun nadol"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Koprova..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Neprija"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Odstrni prieinok"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Poznmky"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Nastavi farby sprvy"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/Oz_nai/Oznai ako _pre蓁tan"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Posla alej ako p_rlohu"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Pr_esmerova"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Vykona"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Prieinok"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adresr"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Hlavika"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Hlavika"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Hlavika"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Nie je uren prjemca."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Nebol zadan prkazov riadok."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Nebol zadan cie."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Nebol zadan prkazov riadok."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: sbor neexistuje\n"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Vlastnosti prieinka"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Veobecn"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Obyajn"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Nezobrazova [...] alebo (...) na zaiatku nzvu v zozname sprv"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Zmaza [...] alebo (...) na zaiatku nzvu v zozname sprv"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Plat aj pre podprieinky"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "poui aj pri odpovedan"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Odpoveda komu:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Znaka"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Prloha"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Predmet"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Dtum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "罷slo"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Vytvram okno nastavenia zobrazenia poloiek zoznamu sprv...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Zobrazovan hlaviky"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Vyberte poloky ktor sa maj zobrazi v zozname sprv. Mete\n"
+"meni poradie pomocou tla蓁tiek Nahor / Nadol, alebo presvanm\n"
+"poloiek pomocou myi."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Dostupn poloky"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Zobrazen poloky"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Vrti na vchodzie "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Nzov ablny"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrova"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Nahradi "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symboly "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrovan ablny"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "ablny"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "ablna"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Chyba formtu ablny."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Zmaza ablnu"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Naozaj chcete zmaza tto ablnu?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Nepodarilo sa skonvertova kd.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "nemem otvori sbor so znakami\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "ned sa prija sprva %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Nepodarilo sa odosla sprvu %d z fronty.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Prkazov riadok tlae je neplatn: '%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Stav"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Vytvram stavov okno...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "pri prijman dt sa vyskytla chyba.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Do sboru sa ned zapisova.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: Podpis nebol overen"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Nebol njden iadny podpis"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Sprvny podpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "CHYBN podpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nemem njs verejn k禦 pre overenie podpisu"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Chyba pri overovan podpisu"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Rozdielne vsledky pre podpisy"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Chyba: Stav neznmy"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Sprvny podpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "CHYBN podpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Nemem njs user ID pre tento k禦."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Podpsan da %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Odtlaok k禦a: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Prosm zvote k禦 pre '%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Zhroma常ujem informcie pre '%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Zvote k禦e"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Key ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Hodnota"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Prida k禦"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Zadajte alie user alebo key ID:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Hlavika sprvy vo fronte je pokoden.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Pripjanie"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Pripjam sa k serveru SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Posielam HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autentizcia"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Odosielam sprvu..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Posielam EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Posielam MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Posielam"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Posielam RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Posielam DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Odpjam sa..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Odosielam sprvu (%d / %d bajtov)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Odosielam sprvu"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Pri odosielan sprvy nastala chyba."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Pri odosielan sprvy nastala chyba:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Nastavenie mailboxu"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Najskr muste nastavi umiestnenie mailboxu.\n"
+"Mete poui existujci mailbox vo formte MH,\n"
+"ak nejak mte.\n"
+"Ak ste si nie ist, zvote len OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Overujem podpis"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s od \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH nie je dostupn\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "neplatn odozva SMTP\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "vyskytla sa chyba pri SMTP spojen\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Vytvram okno zdroja sprvy...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Zdroj sprvy"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Zobrazujem zdroj %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Zdroj"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 nie je dostupn\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 je dostupn\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 nie je dostupn\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 je dostupn\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Metda SSL nie je dostupn\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Neznma metda SSL *CHYBA PROGRAMU*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Pri vytvran SSL kontextu sa vyskytla chyba\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL spojenie zlyhalo (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL spojenie pri pouit %s zlyhalo\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certifikt serveru:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Predmet: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Vydavate: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Vyhada v sprvach"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Automaticky nastavi nasledujce adresy"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Telo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Zvoli vetky vyhovujce"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Bol dosiahnut zaiatok zoznamu; pokraova od konca?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Bol dosiahnut koniec zoznamu; pokraova od zaiatku?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/O_dpoveda komu"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/O_dpoveda komu/_vetkm"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/O_dpoveda komu/_odosielateovi"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/O_dpoveda komu/do _diskusnej skupiny"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/Pre_sun"
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Koprova..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/Oz_nai"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/Oz_nai/Oz_nai"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/Oz_nai/_Odznai"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/Oz_nai/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/Oz_nai/Oznai ako n_epre蓁tan"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/Oz_nai/Oznai ako _pre蓁tan"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/Oz_nai/Oznai _vetky ako pre蓁tan"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/_Farebn oznaenie"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Znovu upravi"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Prida odosielatea do _adresra"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Zobrazi/_Zdroj"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Zobrazi/Vetky _hlaviky"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Tlai..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Vytvram zoznam sprvy...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Spracova znaky"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Ostali nejak znaky. Spracova?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Prehadvam prieinok (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "iadne nepre蓁tan sprvy"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Neboli njden iadne nepre蓁tan sprvy. Hada od konca?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "iadne nepre蓁tan sprvy."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr ""
+"Neboli njden iadne nepre蓁tan sprvy. Prejs do alieho prieinku?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Hada znova"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "iadne nov sprvy"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Neboli njden iadne nov sprvy. Hada od konca?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "iadne nov sprvy."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Neboli njden iadne nov sprvy. Prejs do alieho prieinku?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "iadne oznaen sprvy"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Neboli njden iadn oznaen sprvy. Hada od konca?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "iadne oznaen sprvy."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Neboli njden iadn oznaen sprvy. Hada od zaiatku?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "iadne zafarben sprvy"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Neboli njden iadne zafarben sprvy. Hada od konca?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "iadne zafarben sprvy."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Neboli njden iadne zafarben sprvy. Hada od zaiatku?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Zoskupujem sprvu poda nzvu..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d zmazanch"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d presunutch"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d skoprovanch"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " poloiek zvolench"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novcvh, %d nepre蓁tanch, %d celkovo (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novcvh, %d nepre蓁tanch, %d celkovo"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Triedim zoznam sprv..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tVytvram zoznam sprv..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Vytvram zoznam sprv..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Zapisujem stav zoznamu do medzipamte (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(bez dtumu)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Sprva %d je oznaen\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Sprva %d je oznaen ako 蓁tan\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Sprva %d je oznaen ako nepre蓁tan\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Sprva %s/%d je uren na zmazanie\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Zmaza sprvy"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Naozaj chcete zmaza sprvy z koa?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Maem dupliktne sprvy..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Sprva %s/%d je odznaen\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Sprva %d je uren k presunutiu do %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Cie je zhodn s aktulnym prieinkom."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Sprva %d je uren ku koprovaniu do %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Cie koprovania je zhodn s aktulnym prieinkom."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Vyberm vetky sprvy."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Pri spracovvan poty sa vyskytla chyba."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Vytvram vlkna..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Odstraujem truktru vlkien..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Odstraujem truktru vlkien pre vykonanie..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrujem..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrujem..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr ""
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "sbor %s u existuje\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Vytvram zobrazenie textu...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Tto sprva sa ned zobrazi.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Pre uloenie tejto asti, vyvolajte kontextov menu "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "pravm tla蓁tkom myi a vyberte 'Uloi ako...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"alebo stlate klvesu 'y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Pre zobrazenie tejto asti v podobe textovej sprvy, vyberte "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"'Zobrazi ako text', alebo stlate klvesu 't'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Pre otvorenie tejto asti externm programom, vyberte "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "'Otvori' alebo 'Otvori 蓁m...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "alebo kliknite dvakrt, alebo kliknite strednm tla蓁tkom myi, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "alebo stlate klvesu 'l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Tento podpis ete nebol overen.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Pre overenie, vyvolajte kontextov menu\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "pravm tla蓁tkom a vyberte 'Overi podpis'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "nepodaril sa zpis do %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Nemem otvori sbor %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (obyajn)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_Odstrni schrnku"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Odstrni konto _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Odstrni _news konto"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/Sp_rva/_Odosla"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/Sp_rva/Po_dpsa"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "v loklnej schrnke nie s iadne sprvy.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spoolovac prieinok"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr "Zvote..."
+
+#~ msgid "Condition"
+#~ msgstr "Podmienka"
+
+#~ msgid "Keyword"
+#~ msgstr "Reazec"
+
+#~ msgid "Destination"
+#~ msgstr "Cie"
+
+#~ msgid "Use regex"
+#~ msgstr "Poui regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrovan pravidl"
+
+#~ msgid "(none)"
+#~ msgstr "(iadna)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Pravidlo nebolo uloen"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "Pravidlo nebolo uloen. Zavrie napriek tomu?"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Prkazov riadok pre otvorenie URI odkazu je neplatn: '%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Data v medzipamti s pokoden\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Vytvor_i pravidlo filtra"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Vytvor_i pravidlo filtra/_Automaticky"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/Vytvor_i pravidlo filtra/poda _odosielatea"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/Vytvor_i pravidlo filtra/poda _prjemcu"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/Vytvor_i pravidlo filtra/poda p_redmetu"
+
+#~ msgid "Queueing"
+#~ msgstr "Zaraujem do fronty"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Pri odosielan sprvy nastala chyba.\n"
+#~ "Chcete sprvu zaradi do prieinka Na odoslanie?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Zaradi do fronty sprvy, ktor sa nepodarilo odosla"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/V_ykona"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Zvo_li vetky"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Zvoli cel _vlkno"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "nemem nastavi skupinu: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "sprva nie je prijat\n"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 00000000..48ea6453
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,6463 @@
+# Slovenian translation of Sylpheed
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Jernej Kovacic <jkovacic@email.si>, 2002.
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2003-01-24 20:39CET\n"
+"Last-Translator: Jernej Kovacic <jkovacic@email.si>\n"
+"Language-Team: Slovenian <translator-team-sl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"Avtorske pravice za GPGME pripadajo Wernerju Kochu <dd9jn@gnu.org> ((C) "
+"Werner Koch, 2001)\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Ta program je prosta programska oprema; lahko ga razirjate in/ali "
+"spreminjate pod pogoji dovoljenja GNU General Public License, ki ga je "
+"objavila Free Software Foundation; bodisi razliica 2 bodisi (po vai "
+"izbiri) katerakoli kasneja razliica.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Ta program se razirja v upanju, da bo koristen, vendar BREZ KAKRNEGAKOLI "
+"JAMSTVA; celo brez vtetega jamstva VREDNOSTI SVOJE CENE ali USTREZNOSTI ZA "
+"DOLOEN NAMEN. Za ve podrobnosti si oglejte GNU General Public License.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Izvod dovoljenja GNU General Public License bi morali dobiti skupaj s tem "
+"programom; e ga niste, piite na Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, ZDA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "V redu"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Berem vse nastavitve za vsak raun...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Najdena oznaka: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Nekatera okna za sestavljanje sporoila so odprta.\n"
+"Pred urejanjem raunov zaprite vsa okna za sestavljanje sporoil."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Odpiram okno za urejanje rauna...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Ustvarjam okno za urejanje rauna...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Urejanje raunov"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nova sporoila bodo iskana v tem vrstnem redu. Oznaite izbirnike\n"
+"v stolpcu `G', da omogoite pobiranje sporoil z ukazom `Poberi vsa'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Ime"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Strenik"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Dodajanje"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Urejanje"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Brisanje "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Dol"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Gor"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Nastavi kot privzet raun "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zapri"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Brisanje rauna"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Ali resnino elite izbrisati ta raun?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Da"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Ne"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Ne morem dobiti datoteke s sporoilom."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Ne morem dobiti dela sporoila."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Ne morem dobiti dela vedelnega sporoila"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Izbranega dejanjani mogoe uporabiti v oknu za sestavljanje,\n"
+"saj vsebuje %%f, %%F ali %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Ukaza ni mogoe prieti. Izdelava cevi je spodletela.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nisem mogel izvesti sistemskega klica fork, da bi izvril naslednji ukaz:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Tee: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Konano: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Vhod/izhod dejanja"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Polji "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Prekini"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Vnesite ukazno vrstico za tiskanje:\n"
+"(`%s' se bo nadomestil z imenom datoteke)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Vnesite ukazno vrstico za tiskanje:\n"
+"(`%s' se bo nadomestil z imenom datoteke)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Dodaj naslov v adresar"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Naslov"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Opombe"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Izberite mapo za adresar"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Preklii"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Datoteka"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Datoteka/Nova _Knjiga"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Datoteka/Nova _v kartica"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Datoteka/Nov _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Datoteka/Nov _strenik"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Datoteka/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Datoteka/_Urejanje"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Datoteka/_Brisanje"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Datoteka/_Shranjevanje"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Datoteka/_Zapri"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Naslov"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Naslov/Nov n_aslov"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Naslov/Nova _skupina"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Naslov/Nova _mapa"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Naslov/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Naslov/_Urejanje"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Naslov/_Brisanje"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Orodja"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Orodja/Uvoz datoteke _LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Pomo"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Pomo/_O programu"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nov n_aslov"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nova _skupina"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Nova _mapa"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Urejanje"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Brisanje"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Elektronski naslov"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Imenik naslovov"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Ime:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Izbrii"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Poi壕i"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Za:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Kp:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Skp:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Brisanje naslova"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Res elite izbrisati naslov(e)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Ne"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Ali res elite izbrisati mapo IN vse naslove v '%s' ? \n"
+"e izbriete samo mapo, se bodo vsi naslovi prestavili v starevsko mapo."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Samo mapa"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Mapa in naslovi"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Res elite izbrisati '%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Nov uporabnik, ne morem shraniti indeksne datoteke."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Nov uporabnik, ne morem shraniti datotek z iminiki naslovov."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Star imenik naslovov je bil uspeno pretvorjen."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Stari imenik naslovov pretvorjen,\n"
+"ne morem shraniti nove indeksne datoteke naslovov"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov,\n"
+"sem pa naredil prazne nove datoteke imenikov naslovov."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov,\n"
+"ne morem narediti novih datotek z imeniki naslovov."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov\n"
+"in ne morem narediti novih datotek z imeniki naslovov"
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Napaka pri pretvorbi imenika naslovov"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Pretvarjam imenik naslovov"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Napaka v imeniku naslovov"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Ne morem prebrati indeksa naslovov"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Star imenik naslovov pretvorjen, ne morem shraniti nove indeksne datoteke "
+"naslovov"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov, sem pa naredil prazno datoteko z "
+"imenikom naslovov."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov, ne morem narediti novih datotek z "
+"imeniki naslovov."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Ne morem pretvoriti imenika naslovov in ne morem narediti novih datotek."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Napaka pri pretvorbi imenika naslovov"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Pretvorba imenika naslovov"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Vmesnik"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Imenik naslovov"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Oseba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Elektronski naslov"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Skupina"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Mapa"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "v-kartica"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "Strenik LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Skupni naslov"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Osebni naslov"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Opomba"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Opozorilo"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Napaka"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Delam pogovorno okno z alarmno plo壕o...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Pokai to sporoilo naslednji"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Oranna"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rdea"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Ronata"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Sinja"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Modra"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zelena"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Rjava"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ni"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Dodaj"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Odstrani"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/_Lastnost..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Datoteka/_Shranjevanje"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Sporoilo/Po_lji pozneje"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Sporoilo/Shrani v mapo _draft"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Sporoilo/Po_lji in nadaljuj z urejanjem"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Datoteka/Pripni d_atoteko"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/Datoteka/Vr_ini datoteko"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/Datoteka/Vrini _podpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Uredi/_Razveljavi"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Uredi/_Obnovi"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Uredi/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Uredi/I_zrei"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/Uredi/_Kopiraj"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Uredi/_Prilepi"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Uredi/Prilepi kot _citat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Uredi/Izberi _vse"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Uredi/_Napredno"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Uredi/_Napredno/Pojdi za znak nazaj"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Uredi/_Napredno/Pojdi za znak naprej"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Uredi/_Napredno/Pojdi za besedo nazaj"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Uredi/_Napredno/Pojdi za besedo naprej"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Uredi/_Napredno/Pojdi na zaetek vrstice"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Uredi/_Napredno/Pojdi na konec vrstice"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Uredi/_Napredno/Pojdi v prejnjo vrstico"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Uredi/_Napredno/Pojdi v naslednjo vrstico"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Uredi/_Napredno/Izbrii prejnji znak"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Uredi/_Napredno/Zbrii naslednji znak"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Uredi/_Napredno/Izbrii prejnjo besedo"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Uredi/_Napredno/Izbrii naslednjo besedo"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Uredi/_Napredno/Izbrii vrstico"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Uredi/_Napredno/Izbrii do konca vrstice"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Uredi/Prelomi trenutni odstavek"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Uredi/_Prelomi vse _dolge vrstice"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/Uredi/_Kopiraj"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Pogled"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Ogled/_Komu"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Ogled/K_p"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Ogled/_SKp"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Ogled/_Odgovor za"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Pogled/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Pogled/_Sledi do"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Pogled/R_avnilo"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Pogled/_Priloga"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Orodja/_Adresar"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Orodja/_Predloga"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Orodja/Deja_nja"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Orodja/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Uredi/Uredi z _zunanjim urejevalnikom"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Orodja/Deja_nja"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Sporoilo/_Enkripcija"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: datoteka ne obstaja\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Ne morem dobiti tekstovnega dela\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Napaka pri oblikovanju znaka za citiranje."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Napaka pri oblikovanju odgovora/posredovanja sporoila."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Datoteka %s ne obstaja\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Ne morem dobiti velikosti datoteke %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Datoteka %s je prazna."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Ne morem prebrati %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Sporoilo: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ne morem dobiti dela vedelnega sporoila."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [V urejanju]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Sestavi sporoilo%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Sestavi sporoilo%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Naslovnik ni doloen."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Polji"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Zadeva sporoila je prazna. Naj kljub temu poljem?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "ne morem dobiti seznama naslovnikov"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Raun za poiljanje pote ni doloen.\n"
+"Prosim, pred poiljanjem izberite potni raun."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Med poiljanjem sporoila %s je prilo do napake."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Ne morem shraniti sporoila v imenik Outbox."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Ne najdem tipke, ki bi bila povezana z identifikatorjem tipke `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "Ne morem spremeniti pravic do dostopa do datoteke\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Ne morem pretvoriti nabora znakov sporoila.\n"
+"Naj ga kljub temu poljem?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "Ne morem zapisati zaglavij\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "ne morem odstraniti starega sporoila\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "prestavljam sporoilo v mapo akajoe...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "ne najdem mape s akajoimi sporoili\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "ne morem preloiti sporoila\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generiran Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Odpiram okno za sestavljanje sporoila...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "Tip MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Velikost"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Poiljatelj:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Polji sporoilo"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Polji kasneje"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Postavi v mapo akajoe in polji kasneje"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Osnutek"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Shrani v imenik Draft"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Vstavi"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Vstavi datoteko"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Pripni"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Pripni datoteko"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Podpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Vstavi podpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Urejevalnik"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Urejanje z zunanjim urejevalnikom"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Prelom vrstic"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Prelomi vse dolge vrstice"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Napaen tip MIME"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Datoteka ne obstaja ali pa je prazna."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Lastnost"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Nabor znakov"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Pot"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Ime datoteke"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Ukazna vrstica za zunanji urejevalnik je neveljavna: '%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Zunanji urejevalnik e vedno deluje.\n"
+"Ali naj ga prisilim k prekinitvi?\n"
+"t. skupine procesov: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "t. prekinjene skupine procesov: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Zaasna datoteka: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Sestavljanje: vhod iz opazovanega procesa\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Ne morem pognati zunanjega urejevalnika\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Ne morem pisati v datoteko\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Branje preko cevi ni uspelo\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Ne morem preloiti poiljanja sporoila."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Izberi datoteko"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Zavrzi sporoilo"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "To sporoilo je bilo spremenjeno. Naj ga zavrem?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Zavri"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "v Draft"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Ali elite uporabiti predlogo `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Uporabi predlogo"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Zamenjaj"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Urejanje naslova"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Dodaj novo osebo"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Uredi podatke o osebi"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Elektronski naslov mora biti podan."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Ime in vrednost morata biti podana."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Urejanje podatkov o osebi"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Prikai ime"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Priimek"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Ime"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Vzdevek"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Elektronski Naslov"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Vzdevek"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Premakni navzgor"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Premakni navzdol"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Spremeni"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Poisti"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Vrednost"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Osnovni podatki"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Uporabniki atributi"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Datoteka se zdi v redu."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Datoteka se ne zdi veljaven imenik naslovov."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Datoteke ni mogoe prebrati."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Uredi adresar"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Preveri Datoteko "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Datoteka"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Dodaj nov imenik naslovov"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Ime skupine mora biti podano."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Urejanje podatkov o skupini"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Ime skupine"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Naslovi v skupini"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Razpololjivi naslovi"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Prestavljate naslove v ali iz skupine s klikanjem na pu壕ice"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Urejanje podatkov o skupini"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Dodaj novo skupino"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Urejanje mape"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Vnesite novo ime mape:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Nova mapa"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Vnesite ime nove mape:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Kae, da datoteka nima oblike JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Izberite datoteko JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Urejanje vnosa JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Dodatni kos(i) elektronskega naslova"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Dodaj nov vnos JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Uspena povezava s strenikom"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Ne morem se povezati s strenikom"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Urejanje strenika LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Ime gostitelja"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Vrata"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Preveri strenik "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Iskanje v zbirki"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Kriteriji iskanja"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Ponastavi "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr " Ime domene Bind"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Geslo za Bind"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "as izteka (sek.)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Najveje t. vnosov"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Osnovno"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Razirjen"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Dodaj nov strenik LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Urejanje LDAP - Izberite bazo iskanja"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Razpololjive baze iskanja"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Ne morem prebrati iskalnih baz s strenika. Prosim, vnesite jih rono"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Datoteka se ne zdi veljaven zapis v-kartice."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Izberite datoteko v-kartice"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Urejanje vnosa v-kartice"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Dodaj nov vnos v-kartice"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Izvozi"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Doloite ciljno mapo in datoteko mbox."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Izvorni imenik:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Izvozi datoteko:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Izberi... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Izberite datoteko za izvoziti"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "neuspeen poskus zapisa konfiguracije v datoteko\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Izberi mapo"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Prejeto"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Poslano"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "akajoe"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Smeti"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Osnutki"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "Nova mapa"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "Znaka '%c' ne more biti v imenu mape."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Mapa '%s' e obstaja."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Ne morem narediti mape '%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Naredi _novo mapo..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/P_reimenuj mapo..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/I_zbrii mapo..."
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Izprazni smetnjak"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Preveri nova sporoila"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Ponovno z_gradi drevo map"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Iskanje sporoil..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Ni neprebranih sporoil."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Vpis na noviarsko skupino..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/_Odstrani skupino novic"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Delam mapo View...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Novo"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Neprebrano"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Nastavljam informacije o mapi...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Nastavljam informacije o mapi..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Preiskujem mapo %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Preiskujem mapo %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Ponovno zgradi drevo map"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Ponovno gradim drevo map..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Ponovno gradim drevo map..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Ponovno gradim vsa drevesa map..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Preverjam nova sporoila v vseh mapah..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Mapa %s je izbrana\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Poiljam sporoilo"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Med poiljanjem sporoila %s je prilo do napake."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Vnesite ime nove mape:\n"
+"(e elite narediti mapo za shranjevanje podmap,\n"
+"dodajte '/' na koncu imena datoteke)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Vnesite novo ime za '%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Preimenuj mapo"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Vse mape in sporoila pod '%s' bodo izbrisana.\n"
+"Ali jih res elite izbrisati?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Izbrii mapo"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Ne morem odstraniti mape '%s'"
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Izprazni smetnjak"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Izbriem vsa sporoila v smetnjaku?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Ali naj res odstranim potni predal '%s' ?\n"
+"(Sporoila se NE bodo izbrisala z diska)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Odstrani potni predal"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Ali naj res izbriem raun IMAP4 '%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Izbrii raun IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Ali naj res izbriem noviarsko skupino '%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Izbrii noviarsko skupino"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Ali naj res izbriem noviarski raun '%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Izbrii noviarski raun"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Naroanje na noviarsko skupino"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Izberite noviarske skupine na katere se elite naroiti."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Iskanje skupin:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Iskanje "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Ime noviarske skupine:"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Sporoila"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tip"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Osvei"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderirano"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "samo za branje"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "neznano"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Ne morem potegniti seznama noviarskih skupin."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Opravljeno."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d sprejetih noviarskih skupin (%s prebranih)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Noviarske skupine:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Zadeva:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Delam gledanje zaglavja...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Brez poiljatelja)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Brez zadeve)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Delam gledanje slike...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Ne morem naloiti slike."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "Povezava IMAP4 do %s%d se je prekinila. Povezujem se znova...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "delam povezavo IMAP4 do %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Ne morem prieti seje TLS.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "ne morem nastaviti izbrisanih zastavic: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "ne morem izbrisati\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "ne morem nastaviti izbrisanih zastavic: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "ne morem izbrati mape: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Datoteka z oznakami ni bila najdena.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "med dobivanjem LIST je prilo do napake.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Ne morem narediti '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "Ne morem narediti '%s' pod mapo Prejeto\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "ne morem narediti potnega predala: LIST ni uspel\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "ne morem narediti potnega predala\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "ne morem preimenovati potnega predala: %s v %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "ne morem izbrisati potnega predala\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "ne morem dobiti ovojnice\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "med dobivanjem ovojnice je prilo do napake.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "ne morem razleniti ovojnice: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ne morem se povezati s strenikom IMAP4: %s%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ne morem vzpostaviti seje IMAP4 z: %s%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "ne morem dobiti imenskega prostora\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "ne morem izbrati mape: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Overovitvena metoda"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "Prijava na IMAP4 ni uspela.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "ne morem pripeti %s na %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(poiljam datoteko...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "ne morem dodati sporoila %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "ne morem kopirati %d na %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "napaka med IMAPovim ukazom: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "napaka med IMAPovim ukazom: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "napaka med IMAPovim ukazom: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv ne more pretvoriti UTF-7 v %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv ne more pretvoriti %s v UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Uvozi"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Doloite ciljno datoteko mbox in ciljno mapo."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Uvaam datoteko:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Ciljni imenik:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Izberite datoteko za uvoz"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Prosim, doloite ime adresarja in datoteko za uvoz."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Izberite in preimenujte ime polj LDIF za uvoz"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Datoteka uvoena."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Prosim, izberite datoteko."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Ime imenika naslovov mora biti podano."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Napaka pri branju polj LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Datoteka LDIF uspeno uvoena."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Izberite datoteko LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Ime datoteke"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "Polje LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Ime atributa"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Izberi"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adresar :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Ime datoteke :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Zapisi :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Uvozi datoteko LDIF v imenik naslovov"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Prejnji"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Naslednji"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Podatki o datoteki"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributi"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Konaj"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Prenaam nova sporoila"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "V pripravljenosti"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Preklicano"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Prenaam"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Opravljeno (%d sporoil (%s) prejetih)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Opravljeno (ni novih sporoil)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Povezava ni uspela"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Overovitev ni uspela"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zaklenjeno"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "as izteka (sek.)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Konano (%d novih sporoil)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Konano (ni novih sporoil)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Med prejemanjem pote je prilo do nekaterih napak."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "sprejemam nova sporoila z rauna %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Prenaam nova sporoila"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Povezujem se s strenikom POP: %s"
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Ne morem se povezati s strenikom POP: %s%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Overovljam..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Sprejemam sporoila iz %s v %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Ugotavljam tevilo novih sporoil (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Ugotavljam tevilo novih sporoil (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Ugotavljam tevilo novih sporoil (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Ugotavljam velikost sporoil (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Briem sporoilo %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Zapu壕am"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Prenaam sporoilo (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Opravljeno (%d sporoil (%s) prejetih)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Povezava ni uspela"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Med obdelavo pote je prilo do napake."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Med obdelavo pote je prilo do napake."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Na disku ni prostora."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Ne morem napisati datoteke."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "napaka v prikljuku."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Potni predal je zaklenjen."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Potni predal je zaklenjen."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Overovitvena metoda"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Overovitvena metoda"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Pripojitev odpovedana\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Pobiram nova sporoila iz %s v %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Vnesite geslo za %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Vnesite geslo"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Dnevnik protokola"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Datoteka `%s' e obstaja.\n"
+"Ne morem narediti imenika."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread ni podprt v glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG ni pravilno name壕en ali pa je razliica prestara.\n"
+"Podpora za OpenPGP je izkljuena."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Uporaba: %s [MONOST]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [naslov] odpri okno za sestavljanje novega sporoila"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach datoteka1 [datoteka2]...\n"
+" odpri okno za sestavljanje s pripetimi\n"
+" podanimi datotekami"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive poberi nova sporoila"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all poberi nova sporoila z vseh raunov"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send polji vsa akajoa sporoila"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status prikai skupno tevilo sporoil"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status prikai skupno tevilo sporoil"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug razhro壕evalni nain"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help prikai to pomo in konaj"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version prikai informacijo o razliici in konaj"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "e vedno sestavljate sporoilo. Ali naj res konam?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "akajoa sporoila"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Nekaj neposlamih sporoil je na akanju. Ali naj konam?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "Sylpheed e tee.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Datoteka/_Mapa"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Datoteka/_Mapa/Naredi _novo mapo..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Datoteka/_Mapa/_Preimenuj mapo..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Datoteka/_Mapa/I_zbrii mapo"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Datoteka/_Dodaj potni predal..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Datoteka/_Dodaj potni predal..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/Odstrani potni pre_dal"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Datoteka/_Mapa"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Preveri nova sporoila"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/Datoteka/_Preveri nova sporoila v vseh imenikih"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/Ponovno z_gradi drevo map"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Datoteka/_Uvozi datoteko mbox..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Datoteka/_Izvozi v datoteko mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Datoteka/Izprazni sme_tnjak"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Datoteka/_Shrani kot..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Datoteka/_Natisni..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/Datoteka/Vr_ini datoteko"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Datoteka/_Konaj"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Uredi/Izberi _nit"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Urejanje/_Iskanje v trenutnem sporoilu..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Urejanje/Iskanje _sporoil"
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Pogled/Pri_kai ali skrij"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Pogled/Pri_kai ali skrij/_Drevo map"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Pogled/Pri_kai ali skrij/_Ogled sporoila"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Pogled/Pri_kai ali skrij/O_rodjarna"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Pogled/Pri_kai ali skrij/O_rodjarna/Ikone in besedi_lo"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Pogled/Pri_kai ali skrij/O_rodjarna/_Ikone"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Pogled/Pri_kai ali skrij/O_rodjarna/_Besedilo"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Pogled/Pri_kai ali skrij/_Orodjarna/_Ni"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Pogled/Pri_kai ali skrij/_Statusna vrstica"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "_Pogled/Posebno drev_o map"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Pogled/Poseben ogled _sporoila"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Pogled/_Razvr壕anje"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Pogled/_Razvr壕anje/po _tevilu"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Pogled/_Razvr壕anje/po _velikosti"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Pogled/_Razvr壕anje/po _datumu"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Pogled/_Razvr壕anje/po _poiljatelju"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Pogled/_Razvr壕anje/po naslovnik_u"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Pogled/_Razvr壕anje/po _zadevi"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Pogled/_Razvr壕anje/po _barvi oznak"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Pogled/_Razvr壕anje/po _oznaki"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Pogled/_Razvr壕anje/po _neprebranih"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Pogled/_Razvr壕anje/po pri_logi"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Pogled/_Razvr壕anje/Ne raz_vrsti"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Pogled/_Razvr壕anje/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Pogled/_Razvr壕anje/N_ara壕ajoe"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Pogled/_Razvr壕anje/Pa_dajoe"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Pogled/_Razvr壕anje/Pri_vlai po zadevi"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Pogled/Ogled _niti"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Pogled/Raziri _vse niti"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Pogled/Skri vse _niti"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Pogled/Nastavi kos za _prikaz..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Pogled/_Pojdi na"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Pogled/_Pojdi na/_Prejnje sporoilo"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Pogled/_Pojdi na/_Naslednje sporoilo"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Pogled/_Pojdi na/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Pogled/_Pojdi na/Pre_jnje neprebrano sporoilo"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Pogled/_Pojdi na/Nas_lednje neprebrano sporoilo"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Pogled/_Pojdi na/Prejnje no_vo sporoilo"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Pogled/_Pojdi na/Nasled_nje novo sporoilo"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Pogled/_Pojdi na/Prejnje _oznaeno sporoilo"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Pogled/_Pojdi na/Naslednje o_znaeno sporoilo"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Pogled/_Pojdi na/Prejnje sporoilo z ozna_ko"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Pogled/_Pojdi na/Naslednje sporoilo z oznako"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Pogled/_Pojdi na/_Druga mapa"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Pogled/Nabor zna_kov/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Pogled/Nabor zna_kov"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Pogled/Nabor zna_kov/_Samodejno"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Pogled/Nabor zna_kov/7 bitni ASCII (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/Videz/Nabor zna_kov/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "_Pogled/Nabor zna_kov/Zahodnoevropski (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "_Pogled/Nabor zna_kov/Zahodnoevropski (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Pogled/Nabor zna_kov/Srednjeevropski (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Pogled/Nabor zna_kov/_Baltski (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Pogled/Nabor zna_kov/Baltski (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Pogled/Nabor zna_kov/Grki (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Pogled/Nabor zna_kov/Turki (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Pogled/Nabor zna_kov/Cirilica (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Pogled/Nabor zna_kov/Cirilica (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Pogled/Nabor zna_kov/Cirilica (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Pogled/Nabor zna_kov/Cirilica (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Pogled/Nabor zna_kov/Japonski (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Pogled/Nabor zna_kov/Japonski (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Pogled/Nabor zna_kov/Japonski (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Pogled/Nabor zna_kov/Japonski (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Pogled/Nabor zna_kov/Poenostavljena kitaj壕ina (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Pogled/Nabor zna_kov/Tradicionalna kitaj壕ina (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Pogled/Nabor zna_kov/Tradicionalna kitaj壕ina (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Pogled/Nabor zna_kov/Kitajski (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Pogled/Nabor zna_kov/Korejski (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Pogled/Kodni nabor/Korejski (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Pogled/Nabor zna_kov/Tajski (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Pogled/Nabor zna_kov/Tajski (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Poglej/Odpri v _novem oknu"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Pogled/I_zvirnik sporoila"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Pogled/Pokai vsa _zaglavja"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Pogled/_Posodobi povzetek"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Sporoilo"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Sporoilo/Znova ur_edi"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "_Sporoilo/Poberi z vseh _raunov"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "_Sporoilo/Poberi z vseh _raunov"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Sporoilo/Odpoved sprejeman_ja"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Sporoilo/Znova ur_edi"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Sporoilo/Polji akajoa sporo_ila"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Sporoilo/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Sporoilo/_Novo sporoilo"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Sporoilo/_Odgovori"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Sporoilo/Odgovor _na"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Sporoilo/Odgovor _na/_vsem"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Sporoilo/Odgovori _na/_poiljatelju"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Sporoilo/Odgovor _na/_dopisni seznam"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/Sporoilo/_Posreduj"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Sporoilo/Posreduj kot prilo_go"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Sporoilo/Pre_usmeri"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Sporoilo/Pres_tavi..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Sporoilo/_Kopiraj..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Sporoilo/Z_brii"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Sporoilo/O_znai"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Sporoilo/O_znai/_Oznai"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Sporoilo/O_znai/O_dznai"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Sporoilo/O_znai/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Sporoilo/O_znai/Oznai kot _neprebrano"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Sporoilo/O_znai/Oznai kot _prebrano"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Sporoilo/O_znai/Oznai _vsa kot prebrana"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Sporoilo/Znova ur_edi"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Orodja/Doda_j poiljatelja v adresar"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Orodja/_Filtriraj sporoila"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Orodja/_Filtriraj sporoila"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Orodja/_Ustvari pravilo za filtriranje"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Orodja/_Ustvari pravilo za filtriranje/S_amodejno"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Orodja/_Ustvari pravilo za filtriranje/po p_oiljatelju"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Orodja/_Ustvari pravilo za filtriranje/po _naslovniku"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Orodja/_Ustvari pravilo za filtriranje/po _zadevi"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Orodja/_Brii podvojena sporoila"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Orodja/_Izvri"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Orodja/_Dnevniko okno"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Prikrojitev"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Prikrojitev/_Splone nastavitve..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Prikrojitev/_Nastavitve _filtra..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Prikrojitev/_Predloga..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Prikrojitev/_Dejanja..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Prikrojitev/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Prikrojitev/_Nastavitve za trenutni _raun..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Prikrojitev/Naredi _nov raun..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Prikrojitev/_Uredi raune..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Prikrojitev/Spremeni _trenutni raun"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Pomo/_Prironik"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Pomo/_Prironik/_Angle壕ina"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Pomo/_Prironik/_Japon壕ina"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja/_Angle壕ina"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja/_Nem壕ina"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja/_pan壕ina"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja/_Franco壕ina"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Pomo/Pogosto _zastavljena vpraanja/_Italijan壕ina"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Pomo/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Ustvarjam glavno okno...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "GlavnoOkno: alokacija barve %d ni uspela\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "opravljeno.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Brez naslova"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "ni"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Spreminjam tip loevanja oken z %d na %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Izprazni smetnjak"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Izbriem vsa sporoila v smetnjaku?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Dodaj potni predal"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Vnesite poloaj potnega predala.\n"
+"e je doloen obstojei potni predal,\n"
+"bo pregledan samodejno."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Potni predal `%s' e obstaja."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Potni predal"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Izdelava potnega predala ni uspela.\n"
+"Morda obstajajo nekatere datoteke ali pa tam nimate dovoljenja za pisanje."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sypheed - ogled mape"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - ogled sporoila"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/O_dgovori"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odgovori vsem"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/Odgovor _za/_poiljatelja"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/Odgovor _za/_dopisni seznam"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/P_osreduj"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Posreduj kot prilo_go"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Pre_usmeri"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Poberi"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Pripoji novo poto"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Poberi vsa"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Pripoji novo poto z vseh raunov"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Polji akajoa sporoila"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Sestavi"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Sestavi novo sporoilo"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odgovori"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odgovori na sporoilo"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odgovori vsem"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odgovori vsem"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Posreduj"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Posreduj sporoilo"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Izbrii sporoilo"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Izvedi"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Izvedi oznaen proces"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Naslednje neprebrano sporoilo"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Nastavitve"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Splone preference"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Raun"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Nastavitev rauna"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Konaj"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Ali naj konam ta program?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "ne morem pisati v zaasno datoteko\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Sprejemam sporoila iz %s v %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "ne morem prebrati datoteke mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "napaen format mbox: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "napano oblikovan mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "ne morem odpreti zaasne datoteke\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"najdeno neubeno polje Od:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "najdenih %d sporoil.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "ne morem narediti datoteke za zaklepanje %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "e je mogoe, uporabi 'flock' namesto 'file'.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "ne morem narediti %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "potni predal si lasti drug proces, akam...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "ne morem zakleniti %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "neveljaven tip zaklepanja\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "ne morem odkleniti %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "ne morem prisekati potnega predala na nilo.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Izvaam sporoila iz %s v %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Poi壕i v trenutnem sporoilu"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Poi壕i besedilo:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Razlikuj velike in male rke"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Iskanje nazaj"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Iskanje"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Iskanje neuspeno"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Iskan niz ni bil najden."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Doseen je zaetek sporoila. Naj nadaljujem s konca?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Doseen je konec sporoila. Naj nadaljujem z zaetka?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Iskanje konano"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Ustvarjam videz sporoila...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Shrani kot"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Povozi"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Naj povozim obstojeo datoteko"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Ne morem odstraniti datoteke `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Tiskanje"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Vnesite ukazno vrstico za tiskanje:\n"
+"(`%s' se bo nadomestil z imenom datoteke)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Ukazna vrstica za tiskanje je neveljavna:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "ne morem prepisati sporoila %s v %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Ne morem odpreti oznaene datoteke.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "Izvorna mapa je identina ciljni.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopiram sporoilo %s%c%d v %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Zadnja tevilka v imeniku %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Odpri"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Odpri _z..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Prikai kot besedilo"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Shrani kot..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/P_reveri podpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Ustvarjam izgled MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "Tip MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Besedilo"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Priloge"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Izberite \"Preveri podpis\" za preverjanje"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Ne morem shraniti dela vedelnega sporoila."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Odpri z"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Vnesite ukazno vrstico za odpiranje datoteke:\n"
+"(`%s' se bo nadomestil z imenom datoteke)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Ukazna vrstica pregledovalnika MIME je neveljavna: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "ustvarjam povezavo NNTP do %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "Povezava NNTP do %s:%d je bila prekinjena. Povezujem se znova...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "lanek %d je e v predpomnilniku.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "sprejemam lanek %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "ne morem prebrati lanka %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "ne morem sprejeti seznama noviarskih skupin\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "ne morem poslati lanka.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "ne morem sprejeti lanka %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "ne morem izbrati skupine %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "neveljavno obmoje lankov: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "ni novih lankov.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "sprejemam xover %d - %d v %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "ne morem prejeti xoverja\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "med prejemanjem xoverja je prilo do napake.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "neveljavna vrstica xover: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "ne morem prejeti xhdr-ja\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "med prejemanjem xhdr-ja je prilo do napake.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Ne morem se povezati s strenikom NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "napaka v protokolu: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "napaka v protokolu\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Med poiljanjem je prilo do napake\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Med obdelavo pote je prilo do napake."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "ifrirna fraza"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[ni uporabnikovega id]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sProsim, vnesite ifrirno frazo za:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Napana ifrirna fraza! Poskusite znova...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "V pozdravu ni bila najdena zahtevana asovna znaka APOP\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Skladenjska napaka asovne znake v pozdravu\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "Napaka v protokolu POP3\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "neveljavna vrstica xover: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: briem poteklo sporoilo %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Izpu壕am sporoilo %d (%d zlogov)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "potni predal je zaklenjen\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "ne morem prieti seje TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "Med preverjanjem istovetnosti je prilo do napake\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Ukaz"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "Med preverjanjem istovetnosti je prilo do napake\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Berem konfiguracijo...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Najden %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Konano branje konfiguracije.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguracija je shranjena.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Uporabi"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Odpiram okno za nastavitve rauna...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Raun%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Nastavitve novega rauna"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Nastavitve rauna"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Ustvarjam okno za nastavitve rauna...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Sprejmi"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Zasebnost"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Napredno"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Ime tega rauna"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Nastavi kot privzeto"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Osebni podatki"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Polno ime"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Potni naslov"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacija"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Podatki o streniku"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Novice (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Noben (lokalen)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ta strenik zahteva overovitev"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Noviarski strenik"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Strenik za sprejemanje"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Strenik SMTP (poiljanje)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Uporabniko ime"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Geslo"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Ta strenik zahteva overovitev"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Ob sprejemu odstrani sporoila s strenika"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Odstrani po"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dneh"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dnevih: odstrani nemudoma)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Naloi vsa sporoila na streniku"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Omejitev doline pri sprejemanju"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtriranje sporoil ob sprejemu"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Privzeta mapa za prejeto poto"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nefiltrirana sporoila bodo shranjena v tej mapi)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Overovitvena metoda"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Samodejno"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Poberi vsa' preveri novo poto na tem raunu"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Zaglavje"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dodaj polje z datumom v zaglavje"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generiran ID sporoila"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Dodaj uporabniko definirano zaglavje"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Uredi... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Overovitev"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "Avtentikacija SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"e pustite te vnose prazne, bosta uporabljena\n"
+"isti uporabnki ID in geslo kot pri sprejemu."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Pred poiljanjem avtenticiraj s POP3"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Ukaz"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Samodejno nastavi sledee naslove"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Kp:"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Skp:"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Odgovor za"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "privzeto zakodiraj sporoio"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Privzeto podpii sporoilo"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Uporabi oklopljen zapis ASCII za enkripcijo"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Uporabi jasen tekstovni podpis"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Klju za podpisovanje"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Uporabi privzet klju GnuPG"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Izberi klju glede na va el. naslov"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Rono doloi klju"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Uporabnik ali ID kljua"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Ne uporabljaj SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Uporabi SSL za povezavo POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Uporabi ukaz STARTTLS za prietek seje SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Uporabi SSL za povezavo IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Uporabi SSL za povezavo NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Polji (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Uporabi SSL za povezavo SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Vnesite vrata SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Vnesite vrata POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Vnesite vrata IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Vnesite vrata NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Vnesite ime domene"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Imenik strenika IMAP"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Postavi poslana sporoila v"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Postavi osnutke sporoil v"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Postavi izbrisana sporoila v"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Ime rauna ni vneeno."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Elektronski naslov ni naveden."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "Strenik SMTP ni naveden."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Uporabnikov ID ni vneen."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "Strenik POP3 ni vneen."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "Strenik IMAP4 ni naveden."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "Strenik NNTP ni naveden."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Uporaba starega naina oklopljen ASCII za\n"
+"enkripcijo ni priporoljiva. Ni zdruljiv z\n"
+"RFC 3156 MIME Security z Open PGP"
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Piem nastavitve dejanj..\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Ime menija:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Ukazna vrstica"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Ime menija:\n"
+" V imenu menija uporabite '/', da naredite podmenije.\n"
+"Ukazna vrstica:\n"
+" Zanite z:\n"
+" | da poljete telo sporoila ali z izbiro ukaza\n"
+" > da poljete ukazu uporabniko doloeno besedilo\n"
+" * da poljete ukazu od uporabnika podano skrito besedilo\n"
+" Konajte z:\n"
+" | da nadomestite telo sporoila ali izbiro z izhodom ukaza\n"
+" & da asinhrono poenete ukaz\n"
+" Uporabite %f za ime datoteke s sporoilom\n"
+" %F za seznam imen datotek izbranih sporoil\n"
+" %p za del izbranega sporoila."
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "Zamenjaj"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Pomo pri skladnji "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrirana dejanja"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Nov)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Ime menija ni nastavljeno."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Dvopije ':' ni dovoljeno v imenu menija."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Ime menija je predolgo."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Ukazna vrstica ni nastavljena."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Ime menija in ukaz sta predolga."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"V ukazu\n"
+"%s\n"
+"je skladenjska napaka."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Izbrii dejanje"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Ali resnino elite izbrisati ta raun?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Ustvarjam okno za splone nastavitve...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Splone nastavitve"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Prikaz"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Sporoila"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Ostalo"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Zunanji program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Uporabi zunanji program za vkljuitev"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Ukaz"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokalni spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Pripoji iz spoola"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtriranje ob pripojitvi"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Samodejno preverjanje nove pote"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "vsak"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minut(e)"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Preveri novo poto ob zagonu"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Posodobi vse lokalne mape po pripojitvi"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Novice"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Najveje tevilo lankov za nalaganje\n"
+"(neomejeno, e podate 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Uporabi zunanji program za poiljanje"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Shrani poslana sporoila v izhodno mapo"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Izhodni nabor znakov"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Samodejno (priporoeno)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7-bitni ASCII (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Zahodnoevropski (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Zahodnoevropski (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Srednjeevropski (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltski (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltski (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grki (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turki (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cirilica (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cirilica (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cirilica (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Cirilica (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonski (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonski (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonski (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Poenostavljena kitaj壕ina (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradicionalna kitaj壕ina (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradicionalna kitaj壕ina (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Kitajski (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korejski (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tajski (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tajski (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"e je izbrano `Samodejno', bo uporabljeno\n"
+"optimalno kodiranje za trenutni locale."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "Prelomi pred poiljanjem"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Loilo podpisa"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Vrini samodejno"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Samodejni zaeni zunanji urejevalnik"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Razveljavi nivo"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Prelom sporoila ob"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znakov"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Prelom citata"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Prelomi ob vnosu"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Prelomi pred poiljanjem"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Samodejno izberi raun za odgovore"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citiraj sporoila ob odgovarjanju"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Gumb Odgovori izvede odgovor na dopisni seznam"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Oblika odgovora"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Znak za citiranje"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Oblika posredovanja"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr "Opis simbolov"
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Pisava"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Prevedi ime zaglavja (kot `From:', `Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Prikai tevilo neprebranih poleg imena mape"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Skrajaj noviarske skupine dalje od"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "Izbrii"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Ogled povzetka"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Prikai naslovnika v stolpcu `Od', e ste poiljatelj vi"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Raziri niti"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Oblika datuma"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "Nastavi del za prikaz povzetka..."
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Omogoi barvanje sporoila"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Prikai vezlono abecedo in tevila kot\n"
+"znake ASCII (samo japon壕ina)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Prikai zaglavje nad ogledom sporoila"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Prikai kratko zaglavje ob ogledu sporoila"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Prostor za vrstico"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "tok(e)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Pusti prostor spredaj"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Drsenje"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Polovica strani"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Nadzor gladkosti"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Korak"
+
+#: src/prefs_common.c:1818
+#, fuzzy
+msgid "Resize attached large images to fit in the window"
+msgstr "Spremeni velikost pripetim slikam"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Samodejno preveri podpise"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Prikai rezultat preverjanja podpisa v novem oknu"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Zaasno shrani prepustno frazo v pomnilnik"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Potee po"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minut(e) "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Nastavitev na '0' bo shranila prepustno frazo\n"
+" za celotno sejo)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Zagrabi vnos med vnaanjem gesla"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Prikai opozorilo ob zagonu, e GnuPG ne deluje"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "Nobena datoteka s sporoilom ni izbrana."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Odpri prvo neprebrano sporoilo ob vstopu v mapo"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Oznai sporoilo kot prebrano samo, ko je odprto v novem oknu"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Ob prejemu novih sporoil pojdi v mapo Prejeto"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "IZvri takoj, ko prestavlja ali brie sporoilo"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Sporoila bodo oznaena do izvritve,\n"
+"e je to izklopljeno)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Dialog za sprejem"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Prikai pogovorno okno za sprejem"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Vedno"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nikoli"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Ob napaki pri sprejemanju ne prikai okna z napako"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Na koncu zapri pogovorno okno za sprejemanje"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Nastavi povezave na tipke... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Zunanji ukazi (%s bo zamenjan z imenom datoteke / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Spletni brskalnik"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Ob dvojnem kliku dodaj naslov na cilj"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Ob izhodu"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potrdi ob izhodu"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Izprazni smetnjak ob izhodu"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Vpraaj pred izpranjenjem"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Opozori, e so akajoa sporoila"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "polno okrajano ime dneva v tednu"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "polno ime dneva v tednu"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "okrajano ime meseca"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "polno ime meseca"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "najustrezneja oblika datuma in asa za trenutni locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "tevilka stoletja (leto/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dan v mesecu kot desetiko tevilo"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "ura kot desetiko tevilo s 24-urnim prikazom"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "ura kot desteiko tevilo z 12-urnim prikazom"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dan v letu kot desetiko tevilo"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "mesec kot desetiko tevilo"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minute kot desetiko tevilo"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM oz. PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekunde kot desetiko tevilo"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "dan v tednu kot desetiko tevilo"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "najustrezneji datum za trenutni locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "zadnji dve tevki leta"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "leto kot desetiko tevilo"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "asovni pas ali ime ali okrajava"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Doloevalec"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Opis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Primer"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Nastavi barve sporoila"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Barve"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citirano besedilo - prvi nivo"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citirano besedilo - drugi nivo"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citirano besedilo - tretji nivo"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "povezava URI"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Obnovi barve za citiranje"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Izberite barvo za citiranje na prvem nivoju"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Izberite barvo za citiranje na drugem nivoju"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Izberite barvo za citiranje na tretjem nivoju"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Izberite barvo za URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Opis simbolov"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Od\n"
+"Poiljateljevo polno ime\n"
+"Poiljateljevo ime\n"
+"Poiljateljeve zaetnice\n"
+"Zadeva\n"
+"Do\n"
+"Kp\n"
+"Noviarske skupine\n"
+"ID sporoila"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "e je x nastavljen, prikai expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Telo sporoila\n"
+"Telo citiranega sporoila\n"
+"Telo sporoila brez podpisa\n"
+"Telo citiranega sporoila brez podpisa\n"
+"Dobesedno %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Dobesedna povratna poevnica\n"
+"Dobesedni vpraaj\n"
+"Dobesedni zaviti oklepaj\n"
+"Dobesedni zaviti zaklepaj"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Izbira pisave"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Povezave na tipke"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Izberite prednastavitev povezav na tipke.\n"
+"Lahko tudi spremenite blinjice do vsakega menija, epritisnete katerokoli "
+"tipko, ko na kos kae mikin kazalec"
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Privzeto"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Stari Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Nastavitev prikrojenega zaglavja"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Prikrojeno zaglavje"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Ime zaglavja ni nastavljeno."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Izbrii zaglavje"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Ali resnino elite izbrisati to zaglavje?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Ustvarjam okno za nastavitev prikaza zaglavja...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Nastavitev prikaza zaglavja"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Ime zaglavja"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Prikai zaglavja"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skrita zaglavja"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Prikai vsa nenastavljena zaglavja"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Berem nastavitve za prikaz zaglavij...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Piem nastavitve za prikaz zaglavij...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "To zaglavje je e na seznamu."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Nastavitev filtra"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Za:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/Prepi_i..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Izbrii pravilo"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Ali res elite izbrisati to pravilo?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Izbrii pravilo"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Skrita zaglavja"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Zaglavje"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Sporoila"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "vsebuje"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "ne vsebuje"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Premakni navzdol"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/Prepi_i..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ne sprejmi"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Izbrii mapo"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Opombe"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Nastavi barve sporoila"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Oznaka/Oznai kot _prebrano"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Posreduj kot prilo_go"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Pre_usmeri"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Izvedi"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Mapa"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Naslov"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Zaglavje"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Zaglavje"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Zaglavje"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Naslovnik ni doloen."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Ukazna vrstica ni nastavljena."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Cilj ni nastavljen."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Ukazna vrstica ni nastavljena."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: datoteka ne obstaja\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Lastnost mape"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Splono"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normalno"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Udejani na podmapah"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "uporabi tudi ob odgovoru"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Odgovor za:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Oznai"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Priloga"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Zadeva"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "tevilo"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Ustvarjam okno za nastavljanje stolpca povzetka...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Nastavitev dela za prikaz povzetka"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Izberite dele za prikaz ob ogledu povzetka. Lahko spremenite\n"
+"vrstni red z gumboma Gor / Dol ali z vleenjem delov."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Razpololjivi deli"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Prikazani kosi"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr "Povrni privzeto"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Ime predloge"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "_Pogledriraj"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Zamenjaj "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Simboli "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrirane predloge"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Predloge"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Predloga"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Napaka pri oblikovanju predloge."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Izbrii predlogo"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Ali res elite izbrisati to predlogo?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Pretvorba kodiranja ni uspela.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "Ne morem odpreti datoteke z oznakami.\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "ne morem prenesti sporoila %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Poiljanje akajoega sporoila %d ni uspelo.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Ukazna vrstica za tiskanje ni veljavna: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Ustvarjam pogovorno okno napredka...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "med popravljanjem podatkov je prilo do napake.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Ne morem pisati v datoteko.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Hopla: Podpis ni overovljen"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Noben podpis ni bil najden"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Dober podpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "SLAB podpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Ni javnega kljua za overovitev podpisa"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Napaka ob overovljanju podpisa"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Razlina rezultata za podpisa"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Napaka: neznan status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Dober podpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "SLAB podpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Ne morem najti uporabnikovega ID za ta klju."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " kot\"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Podpis narejen v %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "PRstni odtis kljua: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Prosim, izberite klju za `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Zbiram informacije za `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Izberite klju"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID kljua"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Vrednost"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Dodaj klju"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Vnesite novega uporabnika ali identifikator kljua:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Zaglavje akajoega sporoila je razbito.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Povezovanje"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Povezujem se s strenikom SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Poiljam HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Overovljam"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "Poiljam sporoilo"
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Poiljam EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Poiljam MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Poiljanje"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Poiljam RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Poiljam DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Zapu壕am..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Poiljam sporoilo (%d / %d zlogov)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Poiljam sporoilo"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Med poiljanjem sporoila je prilo do napake."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Med poiljanjem sporoila je prilo do napake."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Nastavitev potnega predala"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Najprej morate doloiti lego potnega predala.\n"
+"Uporabite lahko obstojei potni predal v obliki MH,\n"
+"e ga imate.\n"
+"e niste prepriani, samo izberite V redu."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Preverjam podpis"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s od \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH ni na razpolago\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "Med preverjanjem istovetnosti je prilo do napake\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Izdelujem izvirniko okno...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Izvirnik sporoila"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Prikazujem izvirnik %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Izvirnik"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 ni na razpolago\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 je na razpolago\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 ni na razpolago\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 je na razpolago\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "Metoda SSL ni na razpolago\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Neznana metoda SSL *PROGRAM BUG*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Napaka pri ustvarjanju konteksta ssl\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "Povezava SSL ni uspela (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "Povezava SSL z uporabo %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Certifikat strenika:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Zadeva: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Izdajatelj: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Iskanje sporoil"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Samodejno nastavi sledee naslove"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Telo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Izberi vse ujemajoe se"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Doseen je zaetek seznama; naj nadaljujem s konca?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Doseen je konec seznama; naj nadaljujem z zaetka?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Odgovor _za"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/Odgovor _za/_vse"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/Odgovor _za/_poiljatelja"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/Odgovor _za/_dopisni seznam"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/Pre_stavi..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/Prepi_i..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Oznaka"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Oznaka/_Oznai"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Oznaka/O_dznai"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Oznaka/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Oznaka/Oznai kot _neprebrano"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Oznaka/Oznai kot _prebrano"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Oznaka/Oznai _vsa kot prebrana"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Barvanje oz_nak"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/_Znova uredi"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Doda_j poiljatelja v adresar"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Pogled/_Izvirnik"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Pogled/Vsa _zaglavja"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Natisni..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Ne."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Delam ogled povzetka...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Oznaka procesa"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Nekaj oznak je ostalo. Naj obdelam?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Preiskujem mapo (%s) ..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Ni ve neprebranih sporoil"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nobeno neprebrano sporoilo ni bilo najdeno. Naj i壕em s konca?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Ni neprebranih sporoil."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr ""
+"Nobeno neprebrano sporoilo ni bilo najdeno. Naj grem v naslednjo mapo?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Ponovno iskanje"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Ni ve neprebranih sporoil"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Nobeno novo sporoilo ni bilo najdeno. Naj i壕em s konca?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Ni novih sporoil."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Nobeno novo sporoilo ni bilo najdeno. Naj grem v naslednjo mapo?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Ni ve oznaenih sporoil"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Nobeno oznaeno sporoilo ni bilo najdeno. Naj i壕em s konca?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Ni oznaenih sporoil."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Nobeno oznaeno sporoilo ni bilo najdeno. Naj i壕em od zaetka?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Ni ve sporoil z oznako"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Nobeno sporoilo z oznako ni bilo najdeno. Naj i壕em s konca?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Ni sporoil z oznako"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nobeno sporoilo z oznako ni bilo najdeno. Naj i壕em od zaetka?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Privlaim sporoila po zadevi..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d izbrisanih"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d prestavljenih"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d presnetih"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " izbranih kosov"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novih, %d neprebranih, skupaj %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novih, %d neprebranih, skupaj %d"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Razvr壕am povzetka..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tNastavljam povzetek iz podatkov sporoila..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Nastavljam povzetek iz podatkov sporoila..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Piem povzetek predpomnilnika (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Brez datuma)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Sporoilo %d je oznaeno\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Sporoilo %d je oznaeno, kot da se bere\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Sporoilo %d je oznaeno kot neprebrano\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Sporoilo %s/%d je nastavljeno za brisanje\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Izbrii sporoilo/a"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Ali res elite izbrisati sporoila iz smetnjaka?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Briem podvojena sporoila..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Sporoilo %s/%d je odoznaeno\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Sporoilo %d je nastavljeno za prestavitev v %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Cilj je enak trenutni mapi."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Sporoilo %d je nastavljeno za prepis v %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "Cilj prepisa je enak trenutni mapi"
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Izbiram vsa sporoila..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Med obdelavo pote je prilo do napake."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Gradim niti..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Raznitujem..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Raznitujem za izvritev..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtriram..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtriram..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "sporoilo %d je e v predpomnilniku.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "Datoteka %s e obstaja\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Ustvarjam ogled besedila...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "sporoilo ne bo sprejeto\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Za shranitev tega dela, odprite kontekstni meni z "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "desnim klikom in izberite `Shrani kot...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ali pritisnite tipko `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Za prikaz tega dela kot sporoilo izberite"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Prikai kot besedilo' ali pritisnite tipko `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Za odprtje tega dela z zunanjimprogramom izberite"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Odpri' ali `Odpri z...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ali dvakrat kliknite ali kliknite srednji gumb "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ali pritisnite tipko `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Ta podpis e ni bil preverjen.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Da ga preverite, odprite meni z\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "desnim klikom in izberite `Preveri podpis'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "pisanje v %s ni uspelo.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Ne morem odpreti datoteke %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normalno)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP overovitev)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/Odstrani potni pre_dal"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Odstrani raun _IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Odstrani _noviarski raun"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Sporoilo/_Polji"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Sporoilo/Podp_ii"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "ni sporoil v lokalnem potnem predalu.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Imenik spool"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Izberi... "
+
+#~ msgid "Condition"
+#~ msgstr "Pogoj"
+
+#~ msgid "Keyword"
+#~ msgstr "Kljuna beseda"
+
+#~ msgid "Destination"
+#~ msgstr "Cilj"
+
+#~ msgid "Use regex"
+#~ msgstr "Uporabi regularni izraz"
+
+#~ msgid "Registered rules"
+#~ msgstr "Registrirana pravila"
+
+#~ msgid "(none)"
+#~ msgstr "(noben)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Ukazna vrstica za odpiranje URI je neveljavna: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Podatki v predpomnilniku so unieni\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Ustvari pravilo za f_iltriranje"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Ustvari pravilo za f_iltriranje/S_amodejno"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/Ustvari pravilo za f_iltriranje/po p_oiljatelju"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/Ustvari pravilo za f_iltriranje/po _naslovniku"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/Ustvari pravilo za f_iltriranje/po _zadevi"
+
+#~ msgid "Queueing"
+#~ msgstr "V vrsto"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Med poiljanjem sporoila je prilo do napake.\n"
+#~ "Naj dodam to sporoilo v mapo akajoe?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Neuspeno poslana sporoila postavi med akajoa"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/Iz_vedi"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Izberi _vse"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Izberi _nit"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "ne morem nastaviti skupine: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "sporoilo ne bo sprejeto\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Sporoilo/_Poberi novo poto"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNi predpomnilnike datoteke\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\tBerem predpomnilnik povzetka..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Razliica predpomnilnika je drugaan. Zavraam jo.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Datoteka z oznakami ni bila najdena.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Oznaka razliice je drugana (%d != %d). Zavraam jo.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Ne morem odpreti datoteke z oznakami v pripenjalnem nainu.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Ne morem odpreti datoteke z oznakami v pisalnem nainu.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "ne morem narediti datoteke za zaklepanje %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "izprazni mapo\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Samo, e je okno aktivno"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Vse prejnje nastavitve za vsako mapose bodo izgubile.\n"
+#~ "Naj nadaljujem?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "poloaj okna: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Nastavljam gradnike..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Prestavljam sporoilo %s%c%d v %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tOznaujem sporoila..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d novih sporoil\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "ne morem izbrati potnega predala %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "pobiram sporoilo %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Briem sporoila iz predpomnilnika %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Briem vsa sporoila iz predpomnilnika... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Ugotavljam tevilo vseh sporoil...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Ne morem dobiti datoteke s sporoilom."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Odpri sporoilo, ko se ob povzetku pritisnejo smernike tipke"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Med obdelavo pote je prilo do napake."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Med poiljanjem akojiih sporoil je prilo do napak."
+
+#~ msgid "No message part selected."
+#~ msgstr "Noben del sporoila ni izbran."
+
+#~ msgid "Predicate"
+#~ msgstr "Predikat"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Izdelujem okno za nastavitev dejanja...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Nastavitev dejanja"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "Berem nastavitve dejanj...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Napaka v ukazu dejanja\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Podvojujem ('fork') 'potomca' in 'vnuka'.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "'Potomec': akam na 'vnuka'\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "'Potomec': 'vnuk' je konal\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Ubijam 'potomevo' skupino %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Spro壕am podatke 'potomcev' %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Posodabljam vmesnik vhoda/izhoda dejanj.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "'Potomec' je vrnil %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Poiljam vhod 'vnuku'.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Vhod v grand child sent\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Prestrezam izhod 'vnuka'.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Napaka v prikljuku\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Raun ni bil najden. Uporabljam trenutni raun...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Raun ni bil najden.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Ne morem pognati zunanjega ukaza: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH neuspena\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Med poiljanjem QUIT je prilo do napake\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Ne morem se povezati s strenikom SMTP: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "Povezava SSL ni uspela"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Napaka med povezovanjem na %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Med poiljanjem HELO je prilo do napake\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Med poiljanjem STARTTLS je prilo do napake\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Med poiljanjem EHLO je prilo do napake\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Datoteka s podpispm"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Ustvarjam okno za nastavljanje prikrojenega zaglavja...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "Berem nastavitve za prikrojeno zaglavje...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Piem nastavitve za prikrojeno zaglavje...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Izdelujem okno za nastavitev filtra...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "Berem nastavitve filtra...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Piem nastavitve filtra...\n"
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 00000000..ae89ae17
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,6709 @@
+# Serbian translation of Sylpheed.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# garret <garret@garrets.tk>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2002-11-29 21:08+0100\n"
+"Last-Translator: garret <garret@garrets.tk>\n"
+"Language-Team: Serbian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.6\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "O"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME je vlasni邸tvo Vernera Ko邸a <dd9jn@gnu.org>, (c) 2001.\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Ovaj program je slobodan software; mo転ete ga redistribuirati i/ili menjati u "
+"okviru pravila GNU General Public Licence kao 邸to je obavljeno od strane "
+"Free Software Foundation-a; verzija 2, ili (po vlastitiom izboru) neka "
+"novija verzija.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Ovaj program se distribuira u nadi da e biti koristan, ali BEZ IKAKVIH "
+"GARANCIJA; ak i bez podrazumievane garancije o PRODUKTIVNOSTI ili NAMENI ZA "
+"ODREENU SVRHU. Pogledajte GNU General Public Licencu za vi邸e detalja.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Uz ovaj program ste trebali dobiti i kopiju GNU General Public Licence; ako "
+"niste, pi邸ite ne Free Software Foundation, Inc., 59 Temple Place - Suite "
+"330, Boston, MA 02111-1307, SAD."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "U redu"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "itanje konfiguracije za svaki nalog...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Pronaena oznaka: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Neki prozori za pisanje pisma su otvoreni.\n"
+"Molim, zatvorite sve prozore pre izmena naloga."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Otvaranje prozora za izmenu naloga...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Stvaranje prozora za izmenu naloga...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Izmeni naloge"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nove poruke biti e proveravane ovim redom. Oznaite pod\n"
+"`G' one naloge sa kojih 転elite skinuti e-po邸tu sa `Primi sve'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Ime"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Dodaj"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Izmeni"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Obri邸i "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Dole"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Gore"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr "Postavi kao uobiajeni nalog "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Zatvori"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Obri邸i nalog"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "貼elite li zaista obrisati ovaj nalog?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Da"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Ne"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "Ne mogu doi do datoteke poruke."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Ne mogu doi do dela poruke."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Ne mogu doi do dela vi邸edelne poruke."
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"ODabrana akcija se ne m転e koristiti u prozoru za pisanje\n"
+"zato 邸to sadr転i %%f, %%F ili %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Naredba se ne mo転e izvr邸iti. Pravljenje cevi nije uspelo.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nemogue grananje da bi se izvr邸ila sledea naredba:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Radi: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Zavr邸eno: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Input/output akcija"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Po邸alji"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Odustani"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Unesite naredbu za 邸tampanje:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Unesite naredbu za 邸tampanje:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Dodaj adresu u adresar"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adresa"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Bele邸ke"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Odaberite direktorijum adresara"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Odustani"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Datoteka"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Datoteka/Nova _knjiga"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Datoteka/Nova _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Datoteka/Novi _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Datoteka/Novi _server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Datoteka/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Datoteka/_Izmeni"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Datoteka/_Obri邸i"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Datoteka/_Sauvaj"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Datoteka/_Zatvori"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adresa"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adresa/Nova _adresa"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adresa/Nova _grupa"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adresa/Novi _direktorijum"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adresa/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adresa/_Izmeni"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adresa/O_bri邸i"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/_Alati"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/_Datoteka/Unesi _LDIF datoteku"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Pomo"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Pomo/_O"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Nova _adresa"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Nova _grupa"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Novi _direktorijum"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Izmeni"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Obri邸i"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "Adresa e-po邸te"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adresar"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Ime:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Obri邸i"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Potra転i"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Za:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Obri邸i adresu/e"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Zaista obrisati adresu/e?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Ne"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"貼elite li obrisati direktorijum i SVE adrese u `%s' ? \n"
+"Ako bri邸ete samo direktorijum, adrese e biti preme邸tene u prethodni "
+"direktorijum."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Samo direktorijum"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Direktorijum i adrese"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Zaista obrisati `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Novi korisnik, ne mogu sauvati index datoteku."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Novi korisnik, ne mogu sauvati datoteke adresara."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Stari adresar uspe邸no prebaen."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Stari adresar ne mo転e biti prebaen,\n"
+"ne mogu sauvati novu index datoteku adresara."
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Ne mogu prebaciti adesar,\n"
+"ali sam kreirao nove prazne datoteke adresara."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Ne mogu prebaciti adresar,\n"
+"ne mogu napraviti nove datoteke adresara."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Ne mogu prebaciti adresar,\n"
+"i ne mogu napraviti nove datoteke adresara."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Gre邸ka pri prebacivanju adresara"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Prebacivanje adresara"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Gre邸ka adresara"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Ne mogu itati index adresara"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "Stari adresar une邸en, ne mogu napraviti index datoteke novih adresa"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "Ne mogu uneti adresar, pravim prazne datoteke novog adresara."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "Ne mogu uneti adresar, ne mogu napraviti nove datoteke adresara."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "Ne mogu uneti adresar i ne mogu napraviti nove datoteke adresara."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Gre邸ka pri unosu adresara"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Unos adresara"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Izgled programa"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adresar"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Osoba"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "Adresa e-po邸te"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupa"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Direktorijum"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Uobiajene adrese"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Line adrese"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Obave邸tenje"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Upozorenje"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Gre邸ka"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Stvaram dijalog za prozor sa upozorenjem...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Prika転i ovu poruku sledei put"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Narand転asta"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Crvena"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Roze"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Nebesko plava"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Plava"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Zelena"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Smea"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ni邸ta"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Dodaj..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Skloni"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/_Svojstva..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/_Datoteka/_Sauvaj"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/_Poruka/Po邸alji _kasnije"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/_Poruka/Snimi u direktorijum _nedovr邸eno"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/_Poruka/Po邸alji _kasnije i nastavi da pi邸e邸"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Datoeka/_Prikai datoteku"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Datoteka/_Unesi datoteku"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Datoteka/Unesi _potpis"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Izmeni/_Undo"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Izmeni/_Redo"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Izmeni/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Izmeni/S_eci"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Izmeni/_Kopiraj"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Izmeni/U_baci"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Izmeni/Ubaci kao _citat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Izmeni/Odaberi _sve"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Izmeni/_Napredno"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Izmeni/_Napredno/Pomeri znak unazad"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Izmeni/_Napredno/Pomeri znak unapred"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Izmeni/_Napredno/Pomeri re unazad"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Izmeni/_Napredno/Pomeri re unapred"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Izmeni/_Napredno/Pomeri na poetak linije"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Izmeni/_Napredno/Pomeri na kraj linije"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Izmeni/_Napredno/Pomeri na prethodnu liniju"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Izmeni/_Napredno/Pomeri na sledeu liniju"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Izmeni/_Napredno/Obri邸i prethodni znak"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Izmeni/_Napredno/Obri邸i sledei znak"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Izmeni/_Napredno/Obri邸i prethodnu re"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Izmeni/_Napredno/Obri邸i sledeu"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Izmeni/_Napredno/Obri邸i liniju"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Izmeni/_Napredno/Obri邸i do kraja linije"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Izmeni/Sa転mi trenutni _paragraf"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Izmeni/Sa転mi sve dugake _linije"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Izmeni/_Kopiraj"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Pregled"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Pregled/_Za"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Pregled/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Pregled/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Pregled/_Odgovori"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Pregled/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Pregled/P_rosledi"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Pregled/Len_jir"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Pregled/_Spajalica"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/_Alat/_Adresar"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/_Alat/_ablon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/_Alat/Akci_je"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/_Alati/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/_Izmeni/Izmeni sa neza_visnim editorom"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/_Alat/Akci_je"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/_Poruka/_Enkriptuj"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: datoteka ne postoji\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Ne mogu dobiti deo teksta\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Gre邸ka u formatu citata."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Gre邸ka u poruci odgovori/prosledi."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Datoteka %s ne postoji\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Ne mogu dobiti veliinu datoteke %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Datoteka %s je prazna."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Ne mogu proitati %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Poruka: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Ne mogu dobiti deo poruke iz vi邸e delova."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Izmenjeno]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Pisanje poruke%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Pisanje poruke%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Primalac nije upisan."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Po邸alji"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Tema je prazna. Ipak poslati?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "ne mogu dobiti listu prilmalaca."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Nalog za slanje po邸te nije definisan.\n"
+"Odaberite nalog pre slanja."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Do邸lo je do gre邸ke prilikom slanja poruke %s -u."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Ne mogu sauvati poruku u direktorijumu poslato."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Ne mogu pronai nijedan klju kome je trenutno dodeljen id kljua `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "ne mogu promeniti atribut datoteke\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Ne mogu promeniti kodni raspored poruke.\n"
+"Da je ipak po邸aljem?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "ne mogu upisati zaglavlje\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "ne mogu skloniti staru poruku\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "odlaganje poruke...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "ne mogu da pronaem direktorijum odlo転eno\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "ne mogu odlo転iti poruku\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "generisan ID-poruke: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Stvaranje prozora za pisanje...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME tip"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Veliina"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Od:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Po邸alji poruku"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Po邸alji kasnije"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Odlo転i u direktotijum odlo転eno i po邸alji kasnije"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Nedovr邸eno"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Sauvaj u direktorijum nedovr邸eno"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Unesi"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Unesi datoteku"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Prikai"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Prikai datoteku"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Potpis"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Unesi potpis"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Editor"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Izmeni sa nezavisnim ediorom"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Sa転imanje"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Sa転mi sve duge linije"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Pogre邸an MIME tip"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Datoteka ne postoji ili je prazna."
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "Svojstva"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodiranje"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Putanja"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Ime datoteke"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Naredba za nezavisni editor je pogre邸na: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Nezavisni editor jo邸 uvek radi.\n"
+"Nasilno prekinuti proces?\n"
+"grupa procesa: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Prekinuta grupa procesa: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Privremena datoteka: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Napi邸i: unos iz procesa praenja\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Ne mogu pokrenuti nezavisni editor\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Ne mogu snimiti u datoteku\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "itanje pipe-a nije uspelo\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Ne mogu odlo転iti poruku."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Odaberite datoteku"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Odbaci poruku"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Ova poruka je promenjena, odbaciti?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Odbaci"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "u Nedovr邸eno"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "貼elite li primeniti 邸ablon `%s'?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Primeni 邸ablon"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Zameni"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Izmeni adresu"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Dodaj novu osobu"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Izmeni detalje osobe"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Adresa e-po邸te mora biti navedena."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Ime i iznos moraju biti navedeni."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Izmeni line podatke"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Prikaz imena"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Prezime"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Ime"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Nadimak"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "Adresa e-po邸te"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Pomeri gore"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Pomeri dole"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Izmeni"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Oisti"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Iznos"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Osnovno"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Atributi korisnika"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Datoteka je u redu"
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Datoteka nije u formatu adresara."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Ne mogu proitati datoteku."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Izmeni adresar"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Proveri datoteku "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Datoteka"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Dodaj Novi adresar"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Ime grupe mora biti navedeno."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Izmeni podatke za grupu"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Ime grupe"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adrese u grupi"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Dostupne adrese"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Pomerite adrese e-po邸te u ili iz grupe sa strelicama"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Izmeni detalje grupe"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Dodaj novu grupu"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Izmeni direktorijum"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Unesite ime novog direktorijuma:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Novi direktorijum"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Unesite ime novog direktorijuma:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Datoteka nije u JPilot formatu."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Odaberite JPilot datoteku"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Izmenite JPilot unos"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Dodatne pojedinosti adrese e-po邸te"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Dodajte novi JPilot unos"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Uspe邸no spojen na server"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Ne mogu se povezati na server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Uredi LDAP server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Hostname"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Proveri server"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Baza pretrage"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Kriterijum pretrage"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Ponovo "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind Lozinka"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Timeout (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Max. Unos"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Osnovno"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Pro邸ireno"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Novi LDAP server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Izmeni LDAP - Izbor baze pretrage"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Dostupne baze pretrage"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Ne mogu proitati Baze Pretrage sa servera - postavite runo"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Datoteka nije vCard formata."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Odaberite vCard datoteku"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Izmeni vCard unose"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Dodaj novi vCard unos"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Izvezi"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Odredite 転eljeni direktorijum i mbox datoteku."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Izvorni dir:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Izvozim datoteku:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Odaberite... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Odaberite datoteku za izvoz"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "neuspeh pri pisanju konfiguracije u datoteku\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Odaberite direktorijum"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Sandue"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Poslato"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Odlo転eno"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Smee"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Nedovr邸eno"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NoviDir"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' ne mo転e biti uvr邸ten u ime direktorijuma."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Direktorijum `%s' ve postoji."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Ne mogu napraviti direktorijum `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Kreiraj _novi direktorijum..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/P_reimenuj direktorijum..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Obri邸i direktorijum"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "Isprazni smee"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/_Proveri ima li novih poruka"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Osv_e転i stablo direktorijuma"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Tra転i poruke..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "Nema neproitanih poruka."
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Prijavi se na _news grupu..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/Skloni news _grupu"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Stvaram pregled za direktorijum...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Novo"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Neproitano"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Postavljam info direktorijuma...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Postavljam info direktorijuma..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Pretra転ujem direktorijume %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Pretra転ujem direktorijum %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "/O_sve転i stablo direktorijuma"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Osve転avam stablo direktorijuma..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "Osve転avam stablo direktorijuma..."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Osve転avam sva stabla direktorijuma..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Proveravanje novih poruka u svim direktorijumima..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Direktorijum %s je odabran\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "aljem poruku"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Do邸lo je do gre邸ke prilikom slanja poruke %s -u."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Unesite ime novog direktorijuma:\n"
+"(ukoliko 転elite napraviti direktorijum za sme邸tanje poddirektorijuma,\n"
+"dodajte `/' na kraj imena)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Unesite novo ime za `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Preimenuj direktorijum"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Svi direktorijum(i) i poruka/e pod `%s' bie obrisane.\n"
+"貼elite li ih zaista obrisati?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Obri邸i direktorijum"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Ne mogu da premestim direktorijum `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Isprazni smee"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Isprazniti sve poruke iz smea?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Zista premestiti direktorijum `%s' ?\n"
+"(Poruke NEE biti obrisane sa diska)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "/_Ukloni sandue"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Zaista obrisati `%s' IMAP4 nalog?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Obri邸i IMAP4 nalog"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Zaista obrisati `%s' news grupu?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Obri邸i news grupu"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Zaista obrisati `%s' news nalog?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Obri邸i news nalog"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Prijavi se na news grupu"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Odaberite grupe za prijavu."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Nai grupe:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Tra転i "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "News grupa:"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Poruke"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tip"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Osve転i"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "moderisano"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "samo itanje"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "nepoznato"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Ne mogu pronai listu news grupa."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Gotovo."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d news grupa primljeno (%s proitano)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "News grupe:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Tema:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Stvaram pregled zaglavlja...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Bez po邸iljaoca)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Bez teme)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Kreiram pregled slika...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Ne mogu prikazati sliku."
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4 veza prema %s:%d je pukla. Povezujem se ponovo...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "ostvarujem IMAP4 vezu prema %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Ne mogu pokrenuti TLS sesiju.\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "ne mogu postaviti obrisane oznake: %d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "ne mogu obrisati\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "ne mogu postaviti obrisane oznake: 1:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "ne mogu odabrati direktorijum: %s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "Oznaena datoteka ne postoji.\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "do邸lo je do gre邸ke prilikom dohvatanja LISTe.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "ne mogu kreirati '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "ne mogu kreirati '%s' ispod INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "ne mogu kreirati sandue: LIST nije uspeo\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "ne mogu kreirati sandue\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "ne mogu promeniti ime sandueta %s u %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "ne mogu obrisati sandue\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "ne mogu dobiti omot\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "do邸lo je do gre邸ke prilikom dobijanja omota.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "ne mogu analizirati omot: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Ne mogu se povezati sa IMAP4 serverom: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Ne mogu se povezati s IMAP4 serverom: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "ne mogu dobiti namespace\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "ne mogu odabrati direktorijum: %s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "Nain provere identieta"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 login nije uspeo.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "ne mogu dodati %s na %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(邸aljem datoteku...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "ne mogu dodati poruku %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "ne mogu kopirati %d u %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "greka prilikom imap naredbe: STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "gre邸ka prilikom imap naredbe: EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "gre邸ka prilikom imap naredbe: EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv ne mo転e prebaciti UTF-7 to %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv ne mo転e prebaciti %s to UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Uvezi"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Odredite 転eljenu mbox datoteku i odredi邸ni direktorijum."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Uvozim datoteku:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Odredi邸ni dir:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Odaberite datoteku za uvoz"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Odredite ime adresara i datoteku za uvoz."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Oznaite i promenite ime LDIF polja za izvoz."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Datoteka uve転ena."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Odaberite datoteku."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Ime adresara mora biti navedeno."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Gre邸ka pri itanju LDIF polja."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF datoteka je uspe転no uve転ena."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Odaberite LDIF datoteku"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Ime datoteke"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF polje"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Ime Atributa"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Atribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Odaberi"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adresar :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Ime datoteke :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Bele邸ke :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Unesi LDIF datoteku u Adresar"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Preth."
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Sled."
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Info datoteke"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Atributi"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Gotovo"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Primam nove poruke"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Standby"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Otkazano"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Primam"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Gotovo (%d poruke/a (%s) primljeno)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Nema neproitanih poruka"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Veza nije ostvarena"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Identifikacija nije uspela"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Zakljuano"
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "Timeout (sek)"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Zavr邸eno (%d novih poruka)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Nema neproitanih poruka"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Do邸lo je do gre邸aka prilikom primanja po邸te."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "primam nove poruke za nalog %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Primam nove poruke"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Povezujem se na POP3 server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Ne mogu se povezati na POP3 server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Prijavljujem se..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Primam poruke sa %s u %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Preuzimam broj novih poruka (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Preuzimam broj novih poruka (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Preuzimam broj novih poruka (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Preuzimam veliinu poruka (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Bri邸em poruke %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Izlazim"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Primam poruke (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Gotovo (%d poruke/a (%s) primljeno)"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "Veza nije ostvarena"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Do邸lo je do gre邸ke pri radu s po邸tom."
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "Do邸lo je do gre邸ke pri radu s po邸tom."
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Nema vi邸e mesta na disku."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Ne mogu pisati u datoteku."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Protokol gre邸ka."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Sandue je zakljuano."
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "Sandue je zakljuano."
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "Nain provere identieta"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "Nain provere identieta"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Incorporation otkazano\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Primam nove poruke od %s u %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Unesite lozinku za %s na %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Unesite lozinku"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Zapis protokola"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Datoteka `%s' ve postoji.\n"
+"Ne mogu napraviti direktorijum."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "glib ne podr転ava g_thread.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG nije pravilno instaliran ili je verzija suvi邸e stara.\n"
+"OpenPGP podr邸ka je onemoguena."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Upotreba: %s [OPCIJA]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adresa] otvara prozor za pisanje"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach datoteka1 [datoteka2]...\n"
+" otvara prozor za pisanje sa navedenim datotekama\n"
+" dodato"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive prima nove poruke"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all primi sve poruke sa svih naloga"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 邸alje sve odlo転ene poruke"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status pokazuje ukupan broj poruka"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status pokazuje ukupan broj poruka"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug debug nain"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help prika転 ovu pomo izai"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version prikazuje verziju i izlazi"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Napisana poruka postoji. Zaista prekinuti?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Odlo転ene poruke"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Neke neposlate poruke su odlo転ene. Izai odmah?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "drugi Sylpheed ve radi.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Datoteka/_Direktorijum"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Datoteka/_Direktorijum/Kreiraj _novi direktorijum..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Datoteka/_Direktorijum/_Preimenuj direktorijum..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Datoteka/_Direktorijum/_Obri邸i direktorijum"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/_Datoteka/Dodaj _sandue..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Datoteka/Dodaj _sandue..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Ukloni sandue"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/_Datoteka/_Direktorijum"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Proveri ima li novih poruka"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Datoteka/_Proveri nove poruke u svim direktorijumima"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/Osv_e転i stablo direktorijuma"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Datoteka/_Unos mbox datoteku..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Datoteka/_Izvoz u mbox datoteku..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/_Datotkea/Isprazni s_mee"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Datoteka/Snimanje _kao..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Datoteka/tampanje..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/_Datoteka/_Unesi datoteku"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Datoteka/I_zlaz"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Izmene/Odaberi _thread"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Izmne/P_retraga u trenutnoj poruci..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Izmene/_Tra転i poruke..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Pregled/Prika転i ili s_kloni"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Drvo direktorijuma"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Pregled poruka"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Traka za alat"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Traka alata/Ikon_e i text"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Traka alata/_Ikone"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Traka alata/_Tekst"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Pregled/Prika転i ili s_kloni/_Traka alata/_Ni邸ta"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Pregled/Prika転i ili s_kloni/Stat_us traka"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Pregled/Odvoji sta_blo direktorijuma"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Pregled/Odvoji pre_gled poruka"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Pregled/_Slo転i"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Pregled/_Slo転i/po _broju"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Pregled/_Slo転i/po _veliini"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Pregled/_Slo転i/po _datumu"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Pregled/_Slo転i/po _po邸iljaocu"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Pregled/_Slo転i/po _veliini"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Pregled/_Slo転i/po _temi"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Pregled/_Slo転i/po oznaci bo_je"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Pregled/_Slo転i/po _oznaci"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Pregled/_Slo転i/po _neproitanom"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Pregled/_Slo転i/po dodat_ku"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Pregled/_Slo転i/Nemoj slo転iti"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Pregled/_Slo転i/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Pregled/_Slo転i/Rastue"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Pregled/_Slo転i/Opadajue"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Pregled/_Slo転i/Privuci po te_mi"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Pregled/Th_read izgled"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Pregled/Pro邸iri kompletan t_hread"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Pregled/Skupi komp_letan thread"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Pregled/Postavi po_jedinosti prikaza..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Pregled/_Idi do"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Pregled/_Idi do/_Prethodne poruke"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Pregled/_Idi do/_Sledee poruke"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Pregled/_Idi do/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Pregled/_Idi do/Prethodne _neproitane poruke"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Pregled/_Idi do/S_ledee neproitane poruke"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Pregled/_Idi do/Prethodne n_ove poruke"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Pregled/_Idi do/Sledee no_ve poruke"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Pregled/_Idi do/Prethodne oz_naene poruke"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Pregled/_Idi do/Sledee o_znaene poruke"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Pregled/_Idi do/Prethodne etiketirane poruke"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Pregled/_Idi do/Sledee etiketirane poruke"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Pregled/_Idi do/Dru_gog direktorijuma..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Pregled/_Znakovni standard/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Pregled/_Znakovni standard"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Pregled/_Znakovni standard/_Auto detekcija"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Pregled/_Znakovni standard/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Pregled/_Znakovni standard/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Pregled/_Znakovni standard/Zapadna Evropa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Pregled/_Znakovni standard/Zapadna Evropa (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Pregled/_Znakovni standard/Srednja Evropa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Pregled/_Znakovni standard/_Baltik (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Pregled/_Znakovni standard/Baltik (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Pregled/_Znakovni standard/Grka (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Pregled/_Znakovni standard/Turska (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Pregled/_Znakovni standard/irilica (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Pregled/_Znakovni standard/irilica (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Pregled/_Znakovni standard/irilica (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Pregled/_Znakovni standard/irilica (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Pregled/_Znakovni standard/Japan (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Pregled/_Znakovni standard/Japan (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Pregled/_Znakovni standard/Japan (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Pregled/_Znakovni standard/Japan (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Pregled/_Znakovni standard/Pojednostavljeni Kineski (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Pregled/_Znakovni standard/Tradicionalni Kineski (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Pregled/_Znakovni standard/Tradicionalni Kineski (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Pregled/_Znakovni standard/Kina (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Pregled/_Znakovni standard/Koreja (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Pregled/_Znakovni standard/Koreja (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Pregled/_Znakovni standard/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Pregled/_Znakovni standard/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Pregled/Otvori u novom _prozoru"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Pregled/Iz_vor poruke"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Pregled/Prika転i kompletno _zaglavlje"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Pregled/_Osve転i rezime"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Poruka"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/_Poruka/I_zmeni/"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Poruka/Prove_ri sa svih naloga"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Poruka/Prove_ri sa svih naloga"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Poruka/Prekini pri_manje"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Poruka/I_zmeni/"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Poruka/Po邸alji _odlo転ene poruke"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Poruka/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Poruka/Sastavi _novu poruku"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Poruka/O_dgovor"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Poruka/O_dgovori"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Poruka/Odgovori/svim_a"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Poruka/Odgovori/po邸il_jaocu"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Poruka/Odgovori/li_sti"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Poruka/_Prosledi"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Poruka/P_rosledi kao spajalicu"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Poruka/Preus_meri"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Poruka/Preme邸tanje..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Poruka/_Kopiranje..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Poruka/Brisanje..."
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Poruka/Oznai"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Poruka/O_znai/_Oznai"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Poruka/O_znai/_Ukloni oznaku"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Poruka/O_znai/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Poruka/O_znai/Oznai kao _neproitano"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Poruka/O_znai/Oznai kao _proitano"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Poruka/O_znai/Oznai sve _proitano"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Poruka/I_zmeni/"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/_Alati/Dodaj po邸iljaoca u adresar"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/_Alati/_Filtriraj poruke"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/_Alati/_Filtriraj poruke"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/_Alati/_Napravi pravilo za filtriranje"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/_Alati/_Napravi pravilo za filtriranje/_Automatski"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/_Alati/_Napravi pravilo za filtriranje/Po _Od"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/_Alati/_Napravi pravilo za filtriranje/Po _Za"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/_Alati/_Napravi pravilo za filtriranje/Po _temi"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/_Alati/_Obri邸i duple poruke"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/_Alati/_Izvr邸i"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/_Alati/Proyor za logove"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Konfiguracija"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Konfiguracija/U_obiajene postavke..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Konfiguracija/Postavke _filtera..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Konfiguracija/_ablon..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Konfiguracija/_Akcije..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Konfiguracija/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Konfiguracija/_Postavke za trenutni nalog..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Konfiguracija/Napravi _nov nalog..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Konfiguracija/_Izmeni naloge..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Konfiguracija/Promeni _trenutni nalog"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Pomo/_Prirunik"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Pomo/_Prirunik/_Engleski"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Pomo/_Prirunik/_Japanski"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Pomo/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Pomo/_FAQ/_Engleski"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Pomo/_FAQ/_Nemaki"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Pomo/_FAQ/_panski"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Pomo/_FAQ/_Francuski"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Pomo/_FAQ/_Italijanski"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Pomo/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Kreiranje glavnih prozora...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Glavni Prozor: prikaz boje %d nije uspeo\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "gotovo.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Neimenovano"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "ni邸ta"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Menjanje vrste podele prozora iz %d u %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "Isprazni smee"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "Isprazniti sve poruke iz smea?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Dodaj sandue"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Unesite lokaciju sandueta.\n"
+"Ako je une邸en postojee sandue, automatski\n"
+"e biti pretra転en."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Sandue`%s' ve postoji."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Sandue"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Kreiranje sandueta nije uspelo.\n"
+"Mo転da neke datoteke ve postoje ili nemate pravo pisanja u direktoriju."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Direktorijumi"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Poruke"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/Od_govor"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "Odgovori svima"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/O_dgovori/_po邸iljaocu"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/O_dgovori/na mailing _listu"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/P_rosledi"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Pro_sledi kao dodatak"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Pre_usmeri"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Primi"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Prima novu po邸tu"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Primi sve"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Prima novu po邸tu sa svih naloga"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "alje odlo転ene poruku/e"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Napi邸i"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Napi邸i novu poruku"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Odgovori"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Odgovari na poruku"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Odgovori na sve"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Odgovori svima"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Prosledi"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Prosleuje poruku"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Obri邸i poruku"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Izvr邸i"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Izvr邸i oznaene procese"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Sledea neproitana poruka"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Svojstva"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Uobiajena svojstva"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Nalog"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Pode邸avanja naloga"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Izlaz"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Izlaz iz ovog programa?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "ne mogu pisati u privremenu datoteku\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Primam poruke sa %s u %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "ne mogu itati mbox datoteku.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "pogre邸an mbox format: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "pokvaren mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "ne mogu otvoriti privremenu datoteku\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"neizbe転an Od pronaen:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d poruka pronaeno.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "ne mogu napraviti zakljuanu datoteku %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "koristi 'flock' umesto 'file' ako je mogue.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "ne mogu napraviti %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "neki drugi proces koristi sandue, ekam...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "ne mogu zakljuati %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "neispravan tip zakljuavanja\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "ne mogu otkljuati %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "ne mogu skratiti sandue na nulu.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Izvozim poruke iz %s u %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Pronai u trenutnoj poruci"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Pronai tekst:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Osjetljiv na velika/mala slova"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Pretraga unazad"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Pretraga"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Polje pretrage"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Zadani uzorak nije pronaen."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Poetak liste dosegnut; nastaviti od kraja?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Kraj liste dosegnut; nastaviti od poetka?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Pretraga zavr邸ena"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Pravljenje pregleda poruka...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Sauvaj kao"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Prepi邸i"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Prepisati postojeu datoteku?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Ne mogu sauvati datoteku `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "tampaj"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Unesite naredbu za 邸tampanje:\n"
+"(`%s' predstavlja datoteku)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Naredba za 邸tampanje je pogre邸na:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "ne mogu kopirati poruku %s u %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Ne mogu otvoriti oznaenu datoteku.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "izvorni direktorijum jednak je destinaciji.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopiram poruke %s%c%d u %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Posednji broj u direktoriju %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_Otvori"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/Otvoranje _sa..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Prika転i kao _tekst"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/S_auvaj kao"
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/Pro_veri potpis"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Pravim MIME pregled...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME tip"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Tekst"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Dodatak"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Odaberite \"Proveri potpis\" da proverite"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Ne mogu sauvati deo vi邸edelne poruke"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Otvori sa"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Unesite naredbu za otvaranje datoteke:\n"
+"(`%s' je sinonim za ime datoteke)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "Naredba MIME nije ispravna: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "uspostavljam NNTP vezu sa %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP veza sa %s:%d je prekinuta. Povezujem se ponovo...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "lanak %d ve je pohranjen.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "primam lanak %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "ne mogu proitati lanak %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "ne mogu primiti listu news grupa\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "ne mogu poslati lanak.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "ne mogu primiti lanak %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "ne mogu odabrati grupu %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "pogre邸an opseg lanaka: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "nema novih lanaka.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "primam xover %d - %d u %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "ne mogu primiti xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "do邸lo je do gre邸ke prilikom primanja xovera.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "pogre邸na xover linija: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "ne mogu dobiti xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "do邸lo je do gre邸ke prilikom primanja xhdra.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Ne mogu uspostaviti vezu sa NNTP serverom: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokol gre邸ka: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokol gre邸ka\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Do邸lo je do gre邸ke prilikom slanja\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "Do邸lo je do gre邸ke pri radu s po邸tom."
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Lozinka"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[nema ID korinika]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sMolim unesite lozinku za:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Pogre邸na lozinka! Poku邸ajte ponovo...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Potrebni APOP timestamp nije pronaen u pozdravu\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Syntax gre邸ka u timestampu kod pozdrava\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "gre邸ka POP3 protokola \n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "pogre邸na xover linija: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Brianje pouka koje su istekle %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Preskakanje poruke %d (%d byte-ova)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "sandue je zakljuano\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "ne mogu pokrenuti TLS sesiju\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "gre邸ka prilikom provere identiteta\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "Naredba"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "gre邸ka prilikom provere identiteta\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "itanje konfiguracije...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Pronaeno %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Zavr邸eno itanje konfiguracije.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfiguracija je spremljena.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Primeni"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Otvaram prozor za svojstva naloga...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Nalog%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Pode邸avanja za novi nalog"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Pode邸avanje naloga"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Stvaranje prozora za pode邸avanje naloga...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Primanje"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privatnost"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Napredno"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Ime ovog naloga"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Postavi kao uobiajeni"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Line informacije"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Puno ime"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "Adresa e-po邸te"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organizacija"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Informacije o serveru"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "News (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Ni邸ta (lokalno)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Ovaj server zahteva proveru identiteta"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "News server"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server za primanje"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP server (slanje)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "ID korisnika"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Lozinka"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "Ovaj server zahteva proveru identiteta"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Ukloni poruke sa servera nakon primanja"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Ukloni posle"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dana"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dana: odmah ukloni)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Preuzmi sve poruke sa servera"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Ogranienje u veliini za primanje"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtriraj poruke pri primanju"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Uobiajeno sandue"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Nefiltrirane poruke biti e stavljene u ovaj direktorijum)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Nain provere identieta"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatski"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "`Primi sve' proverava poruke za ovaj nalog"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Zaglavlje"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Dodaj polje Datum u zaglavlje"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Generi邸i ID poruke"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Dodaj zaglavlje korisnika"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Izmeni... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Provera identiteta"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP identifikacija (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Ako ostavi邸 ove unose prazne, isti\n"
+"koririsniki ID i lozinka e biti kori邸eni."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Proveri identitet sa POP3 pre slanja"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "Naredba"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Automatski postavi sledee adrese"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Odvovori-Na"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Uvek 邸ifruj poruke"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Uvek potpi邸i poruke"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Koristi ASCII-armored format za 邸ifrovanje"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Koristi prazan tekst za potpis"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Klju potpisa"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Koristi uobiajeni GnuPG klju"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Odaberi klju po adresi e-po邸te"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Navedi neki drugi klju"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "ID kljua ili korisnika:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Ne koristi SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Koristi SSL za POP3 veze"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Korsiti STARTTLS naredbu za pokretanje SSL-a"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Koristi SSL za IMAP4 veze"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Koristi SSL za NNTP veze"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Slanje (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Koristi SSL za SMTP veze"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Navedi SMTP port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Navedi POP3 port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Navedi IMAP4 port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Navedi NNTP port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Navedi ime domena"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "Direktorijum IMAP servera"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Stavi poslate poruke u"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Stavi nedovr邸ene poruke u"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Stavi obrisane poruke u"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Ime naloga nije upisano."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "Adresa e-po邸te nije upisana."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP server nije upisan."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "ID korisnika nije upisan."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 server nije upisan."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 server nije upisan."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP server nije upisan."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Ne preporuuje se kori邸enje starog ASCII-armored\n"
+"naina za 邸ifrovanje poruka. On nije saglasan sa\n"
+"RFC 3156 - MIME Sigurnost sa OpenPGP-om."
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "Pisanje konfiguracije za akcije...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Ime menija:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Linija za naredbe:"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Ime menija:\n"
+" Koristi / u imenu menija za pravljenje podmenija.\n"
+"Linija za naredbe:\n"
+" Poinje sa:\n"
+" | da po邸alje telo poruke ili selekciju komandi\n"
+" > da po邸elje tekst korisnika komandi\n"
+" * da po邸alje skriveni tekst korisnika komandi\n"
+" Zavr邸ava se sa:\n"
+" | da zameni telo poruke ili selekcije sa izlazom komande\n"
+" & da pokrene komandu asinhrono\n"
+" Koristiti %f za ima datoteke poruke\n"
+" %F za listu imena datoteka odabranih poruka\n"
+" %p za deo odabrane poruke."
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "Zameni"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr "Sintaksna pomo"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrovane akcije"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Novo)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Ime menija nije pode邸eno."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Dve take ':' nisu dozvoljene u imenu menija."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Ime menija je previ邸e dugako."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Linija za neredbe nije pode邸ena."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Ime menija i naredba su previ邸e dugaki."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Naredba\n"
+"%s\n"
+"ima sintaksnu gre邸ku."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Obri邸i akciju"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "貼elite li zaista obrisati ovu akciju?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Stvaranje prozor za uobiajena pode邸avanja...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Uobiajena pode邸avanja"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Prikaz"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Poruka"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Drugo"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Spoljni program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Koristi spoljni program za prihvatanje"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Naredba"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokalni spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Prihvati sa spoola"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtriraj pri prihvataju"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Auto-provera nove po邸te"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "svakih"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuta"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Proveri po邸tu prilikom starta"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Osve転i sve direktorijume posle prihvatanja"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "News"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maksimalni broj lanaka za preuzimanje\n"
+"(0 je za neogranieno)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Koristi spoljni program za slanje"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Sauvaj poslate poruke u poslato"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Izlazni charset"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatsko (preporueno)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Zapadno-Evropski (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Zapadno-Europski (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Srednje-Evropski (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Blatiki (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Blatiki (ISO'8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grki (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turski (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "irilica (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "irilica (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "irilica (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "irilica (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japanski (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japanski (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japanski (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Pojednostavljeni Kineski (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Tradicionalni Kineski (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Tradicionalni Kineski (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Kineski (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korejski (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Ako je `Automatski' odabrano, optimalni charset\n"
+"za locale e biti kori邸en."
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "Sa転mi pre slanja"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Odvaja potpis"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Ubaci automatski"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Automatski pokreni spolja邸nji editor"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Undo nivo"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Sa転mi poruke na"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "znakova"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Sa転mi citat"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Sa転mi pri unosu"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Sa転mi pre slanja"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Automatski odaberi nalog za odgovore"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citiraj poruku pri odgovaranju"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Taster za odgovor povlai odgovor za listu"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Format odgovora"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Oznaka citata"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Format proseivanja"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Obja邸njenje simbola "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Font"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Prevedi ime zaglavlja (kao 邸to su `Od:' i `Tema:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Prika転i broj neproitanih poruka pored imena direktorijuma"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Skrati news grupe du転e od"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "slova"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Pregled odr転avanja"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Prika転i primaoca na `Od' ukoliko ste Vi autor"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Ra邸iri stablo"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Format datuma"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Postavljanje pojedinosti prikaza... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Omogui poruke u boji"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "Prika転i 2-byte abecedu i brojeve sa 1-byte znakovima"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Prika転i zaglavlje iznad poruke"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Prika転i kratko zaglavlje na pregledu poruka"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Razmak linija"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "pixel(a)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Ostavi prostora na poetku"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Scroll"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Pola stranice"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Miran scroll"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Korak"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Automatski proveri potpis"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Prika転i potpis u popup prozoru"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Smesti lozinku privremeno u memoriju"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Istie posle"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minut(a)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Postavljanje na '0' e smestiti loyinku\n"
+"u toku cele sesije)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Uhvati unos pri upisivanju lozinke"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Prika転i upozorenje na startu ako GnuPG ne radi"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "Nijedna datoteka poruke nije odabrana."
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Otvori prvu neproitanu poruku pri ulasku u direktorijum"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Samo oznai poruke kao proitane pri otvaranju novog prozora"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "Idi u sandue posle primanja po邸te"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Izvr邸i odmah pri preme邸tanju ili brisanju poruka"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Poruke e samo biti oznaene do izvr邸enja\n"
+" ako je ovo iskljueno)"
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "Prika転i dijalog primanja"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Prika転i dijalog primanja"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Uvek"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Nikada"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Ne izbacuj prozor sa porukom o gre邸ci u primanju"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Zatvori dijalog primanja kada se zavr邸i"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Pode邸avanje preica na tastaturi..."
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Spolja邸nje naredbe (%s e biti zamenjeno imenom datoteke / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Web ita"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Dodaj adresu u odredi邸te kada se dva put klikne"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Na izlazu"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Potvrdi izlaz"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Isprazni smee pri izlazu"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Pitaj pre pra転njenja"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Upozori ako ima odlo転enih poruka"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "pojednostavljeno ime dana u nedelji"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "puno ime dana u nedelji"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "skraeno ime meseca"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "puno ime meseca"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "転eljeni datum i vreme za trenutni locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "broj veka (godina/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dan u mesecu kao decimalni broj"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "sat kao decimalni broj koristei 24 satno vreme"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "sat kao decimalni broj koristei 12 satno vreme"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dan u godini kao decimalni broj"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "mesec kao decimalni broj"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minuti kao decimalni broj"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM ili PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekunde kao decimalni broj"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "dan u nedelji kao decimalni broj"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "転eljeni datum za trenutni locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "posljednje dve cifre godine"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "godina kao decimalni broj"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "vremenska zona ili ime ili skraenica"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Specifier"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Opis"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Primer"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Podesi boje poruka"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Boje"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citirani tekst - prvi nivo"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citirani tekst - drugi nivo"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citirani tekst - trei nivo"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI link"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Ciklino menjaj boje citata"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Odaberite boju za citat 1. stepena"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Odaberite boju za citat 2. stepena"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Odaberite boju za citat 3. tepena"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Odaberite boju za URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Obaj邸njenje znakova"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Od\n"
+"Puno ime po邸iljaoca\n"
+"Ime po邸iljaoca\n"
+"Inicijali po邸iljaoca\n"
+"Tema\n"
+"Za\n"
+"Cc\n"
+"News grupe\n"
+"ID poruke"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Ako je x odabrano, prikazuje expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Telo poruke\n"
+"Citirano telo poruke\n"
+"Telo poruke sa potpisom\n"
+"Citirano telo poruke sa potpisom\n"
+"Literal %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Literal backslash\n"
+"Literal znak pitanja\n"
+"Literal poetna zagrada\n"
+"Literal zavr邸na zagrada"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Izbor fonta"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Preice sa tastature"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Odaberite ve na邸esten set preica sa testature.\n"
+"Takoe mo転ete menjati preice svakog menija pritiskom na\n"
+"bilo koji taster kada postavite kursor mi邸a na pojedinu stvar."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Uobiajeno"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Stari Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Pode邸avanje odreenog zaglavlja"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Odreeno zaglavlje"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Ime zaglavlja nije pode邸eno."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Obri邸i zaglavlje"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Zaista 転elite obrisati ovo zaglavlje?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Stvaranje prozora za pode邸avanje zaglavlja...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Prikaz pode邸avanje zaglavlja"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Ime zaglavlja"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Prikazano zaglavlje"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Skriveno zaglavlje"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Prika転i sva nenavedena zaglavlja"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "itanje konfiguraciju za prikaz zaglavlja...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Pisanje konfiguraciju za prikaz zaglavlja...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Ovo zaglavlje je ve na listi."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Pode邸avanje filtera"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "Za:"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/_Kopiranje..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Obri邸i pravilo"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Zaista obrisati pravilo?"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "Obri邸i pravilo"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "Svo zaglavlje"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "Poruka"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "sadr転i"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "ne sadr転i"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "Pomeri dole"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/_Kopiranje..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ne primaj"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "Obri邸i direktorijum"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "Bele邸ke"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "Podesi boje poruka"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/_Oznai/Oznai kao _proitano"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "/Pro_sledi kao dodatak"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/Pre_usmeri"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "Izvr邸i"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "Direktorijum"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "Adresa"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "Zaglavlje"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "Primalac nije upisan."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "Linija za neredbe nije pode邸ena."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "Odredi邸te nije postavljeno."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "Linija za neredbe nije pode邸ena."
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s: datoteka ne postoji\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "Osobine direktorijuma"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Glavno"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normalno"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Primeni na poddirektorijume"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "koristi i prilikom odovora"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Odvovori-Na:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Oznaka"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Dodatak"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Tema"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Od"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Broj"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Stavanje prozoar za pode邸avanje prikaza...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Pode邸avanja pojedinosti prikaza"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Odaberite pojedinosti za prikaz. Mo転ete menjati poredak\n"
+"koristei Gore / Dolje tipke, ili povlaenjem mi邸a."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Dostupne pojedinosti"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Prikazane pojedinosti"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " Vrati na uobiajeno "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Ime 邸ablona"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Unesi"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Zameni "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Simboli "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrovani 邸abloni"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "abloni"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "ablon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Gre邸ka formata 邸ablona."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Bri邸i 邸ablon"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Zaista 転elite obrisati ovaj 邸ablon?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Promena koda nije uspjela.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "ne mogu otvoriti obele転enu datoteku\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "ne mogu dohvatiti poruku %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Slanje odlo転ene poruke %d nije uspelo.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Naredba za 邸tampanje nije dobra: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Stvaranje dijaloga napretka...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "do邸lo je do gre邸ke prilikom dohvatanja podataka.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Ne mogu pisati u datoteku.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Ups: Potpis nije potvren"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Nema potpisa"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Dobar potpis"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "LO potpis"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Nema javnog kljua za potvrdu potpisa"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Gre邸ka pri potvrivanju potpisa"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Razliiti rezultati za potpise"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Gre邸ka: Nepoznat status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Dobar potpis od \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "LO potpis od \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Ne mogu nai ID korisnika za ovaj klju."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Potpis napravljen %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Otisak kljua: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Molim, odaberite klju za `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Primam info za `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Odaberite kljueve"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "ID kljua"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Oznaka"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Dodaj klju"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Upi邸ite drugog korisnika ili ID kljua:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Zaglavlje odlo転ene poruke je lo邸e.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Povezujem se"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Spajam se na SMTP server: %s ..."
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "Provera identiteta"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "aljem poruku"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "aljem MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "aljem"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "aljem RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "aljem DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Zavr邸avnje..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "aljem poruku (%d / %d bajtova)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "aljem poruku"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Do邸lo je do gre邸ke prilikom slanja poruke."
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "Do邸lo je do gre邸ke prilikom slanja poruke."
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Pode邸avanje sandueta"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Prvo, morate odrediti lokaciju sandueta.\n"
+"Mo転ete koristiti postojei u MH fomratu\n"
+"ako imate jedan.\n"
+"Ako niste sigurni, odaberite U redu."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Provera potpisa"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s od \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH nije dostupan\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "gre邸ka prilikom provere identiteta\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Stvaranje prozora za izvor...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Izvorna poruka"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Prikazujem izvor od %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Izvor"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 nije dostupan\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 dostupan\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 nije dostupan\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 dostupan\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL metod nije dostupna\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Nepoznat SSL metod *BUG PROGRAMA*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Gre邸ka pri kreiranju ssl konteksta\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL veza nije uspela (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL veza koristei %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Sertifikat servera:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Tema: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Izdava: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Pretra転i poruke"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "Automatski postavi sledee adrese"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Telo:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Odaberi sve koje odgovaraju"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Poetak liste dosegnut; nastaviti od kraja?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Kraj liste dosegnut; nastaviti od poetka?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/O_dgovori"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/O_dgovori/svim_a"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/O_dgovori/_po邸iljaocu"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/O_dgovori/na mailing _listu"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Preme邸tanje..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopiranje..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Oznai"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Oznai/_Oznai"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/_Oznai/_Ukloni oznaku"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Oznai/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Oznai/Oznai kao _neproitano"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Oznai/Oznai kao _proitano"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Oznai/Oznai sve _proitano"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/Oznaka _boje"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Ponovi i_zmeni"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Dod_aj po邸iljaoca u adresar"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Pregled/Pr_egledaj izvor"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Pregled/Prika転i s_vo zaglavlje"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_tampanje..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Ne."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Stvaranje pregleda odr転avanja...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Izvr邸i oznaku"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Neke oznake su izostavljene. Izvr邸iti ih?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Pregledanje direktorijuma (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Nema neproitanih poruka"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Nema vi邸e neproitanih poruka. Tra転iti od kraja?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Nema neproitanih poruka."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Nema vi邸e neproitanih poruka. Prei u sledei direktorijum?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Pretra転i ponovo"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Nema vi邸e novih poruka"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Nema vi邸e novih poruka. Tra転iti od kraja?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Nema novih poruka."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Nema vi邸e novih poruka. Prei u sledei direktorijum?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Nema vi邸e oznaenih poruka"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Nema vi邸e oznaenih poruka. Nastaviti od kraja?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Nema oznaenih poruka."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Nema oznaenih poruka. Tra転iti od poetka?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Nema vi邸e obele転enih poruka"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Nema vi邸e obele転enih poruka. Tra転iti od kraja?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Nema obele転enih poruka."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Nema vi邸e obele転enih poruka. Krenuti od poetka?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Prihvatanje poruka po temi..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d obrisano"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d preme邸teno"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopirano"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " jedinica odabrano"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d novih, %d neproitanih, %d ukupno (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d novih, %d neproitanih, %d ukupno"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sla転em pregled..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tPostavljanje pregleda od podataka poruke..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Postavljanje pregleda od podataka poruke..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Pi邸enje pohranu pregleda (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Nema Datuma)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Poruka %d je oznaena\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Poruka %d je oznaena kao proitana\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Poruka %d je oznaena kao neproitana\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Poruka %s/%d oznaena je za brisanje\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Obri邸i poruku/e"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "貼elite li zaista obrisati poruku/e iz smea?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Brianje duplih poruka..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Poruka %s/%d je neoznaena\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Poruka %d je oznaena za preme邸tanje u %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Odredi邸te je isto kao i trenutni direktorijum."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Poruka %d je oznaena za kopiranje u %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "ODredi邸te za kopiranje je isto kao i trenutni direktorijum."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Odabiranje svih poruka..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "Do邸lo je do gre邸ke pri radu s po邸tom."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Izgraivanje stabla..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Rasipanje..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Rasipanje za izvr邸enje..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtriranje..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtriranje..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "poruka %d ve je prihvaena.\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "datoteka %s ve postoji\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Stvaranje pregleda teksta...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "poruka nee biti primljena\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Za snimanje ovog dela, otovrite meni konteksta sa "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "desnim klikom i odaberite `Sauvaj kao...', "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ili pritisnite `y卒 tipku.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Za prikaz ovog dela kao tekst, odaberite "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"`Prika転i kao tekst' ili pritisnite `t' tipku.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Za prikaz ovog dela sa spoljnim programom, odaberite "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`Otvori' ili `Otvoranje sa...', "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ili dva puta kliknite, ili kliknite srednju tipku, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "ili pritisnite tipku `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Ovaj potpis jo邸 nije proveren.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Za prvoeru, otvorite kontekst meni sa\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "desnom tipkom i odaberite `Proveri potpis'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "pisanje u %s nije uspelo.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Ne mogu otvoriti datoteku %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (normalni)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/_Ukloni sandue"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/Ukloni _IMAP4 nalog"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/Skloni n_ews nalog"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/_Poruka/_Po邸alji"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/_Poruka/Potp_i邸i"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "nema poruka u lokalnom sanduetu.\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spool direktorijum"
+
+#, fuzzy
+#~ msgid "Action:"
+#~ msgstr "Citat"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " Odaberite... "
+
+#~ msgid "Condition"
+#~ msgstr "Uslov"
+
+#~ msgid "Keyword"
+#~ msgstr "Kljuna re"
+
+#~ msgid "Destination"
+#~ msgstr "Odredi邸te"
+
+#~ msgid "Use regex"
+#~ msgstr "Korsiti regex"
+
+#~ msgid "Registered rules"
+#~ msgstr "Zabele転ena pravila"
+
+#~ msgid "(none)"
+#~ msgstr "(ni邸ta)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "Naredba otvoranja URI nije ispravna: `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "Pohranjeni podaci su o邸teeni\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/Napravi pravilo za f_iter"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/Napravi pravilo za f_iter/_Automatski"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/Napravi pravilo za f_iter/Po _Od"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/Napravi pravilo za f_iter/Po _Za"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/Napravi pravilo za f_iter/Po _Temi"
+
+#~ msgid "Queueing"
+#~ msgstr "Odla転em"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "Do邸lo je do gre邸ke prilikom slanja poruke.\n"
+#~ "Odlo転iti poruku u direktorijum odlo転eno?"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "Odlo転ene poruke koje nisu poslate"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/_Izvr邸i"
+
+#~ msgid "/Select _all"
+#~ msgstr "/Oda_beri sve"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/Odaberi stablo"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "ne mogu postaviti grupu: %s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "poruka nee biti primljena\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/_Poruka/Prover_i novu po邸tu"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\tNema datoteke pohrane\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\titanje pohrane odr転avanja..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "Pohranjena verzije je drugaija. Odbacujem.\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "Oznaena datoteka ne postoji.\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "Oznaena verzija je drugaija (%d != %d). Odbacujem.\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Ne mogu oznaiti datoteku sa dodajuim re転imom.\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Ne mogu otvoriti oznaenu datoteku za upis.\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "ne mogu napraviti zakljuanu datoteku %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "prazan direktorijum\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "Samo ako je prozor aktivan"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "Sva prethodna pode邸avanja za svaki direktorijum e biti izgubljena.\n"
+#~ "貼elite li nastaviti?"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "pozicija prozora: x = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "Postavljanje widgeta..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "Pomeram poruke %s%c%d u %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\tOznavanje poruke..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d novih poruka\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "ne mogu obrisati sandue %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "primam poruku %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "Bri邸em ke邸irane poruke %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "Bri邸em sve ke邸irane poruke... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "Brojim ukupan broj poruka...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Ne mogu doi do datoteke poruke."
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "Otvori poruku kada testeri kursora pritisnuti na sa転etku"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Do邸lo je do gre邸ke pri radu s po邸tom."
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja odlo転enih poruka."
+
+#~ msgid "No message part selected."
+#~ msgstr "Nijedan deo poruke nije odabran."
+
+#~ msgid "Predicate"
+#~ msgstr "Predikat"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "Stvaranje prozora za pode邸avanje akcija...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "Pode邸avanje akcija"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "itanje konfiguraciju za akciju...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "Gre邸ka naredbe za akciju\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "Dete i unue grananja.\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "Dete: ekanje na unue\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "Child: grandchild ended\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "Brisanje child ID grupe %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "Freeing children data %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "Osve転avanje akcija input/output dijaloga.\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "Child je vratio %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "Slanje input grand child.\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "Input grand child poslato.\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "Hvatanje outputa grand child.\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Socket gre邸ka\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "Nalog nije pronaen. Koristim trenutni nalog...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "Nalog nije pronaen.\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Ne mogu izvr邸iti spolja邸nu naredbu: %s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP AUTH nije uspeo\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja QUIT\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Ne mogu se povezati na SMTP server: %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL veza nije uspela"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom povezivanja na %s:%d\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja HELO\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja STARTTLS\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja EHLO\n"
+
+#~ msgid "Signature file"
+#~ msgstr "Datoteka potpisa"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "Stvaranje prozora za pode邸avanje odreenog zaglavlja...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "itanje konfiguraciju odreenog zaglavlja...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "Pisanje konfiguracije odreenog zaglavlja...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "Kreiram prozor za pode邸avanje filtera...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "itanje konfiguraciju filtera...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "Pisanje konfiguracije filtera...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\tTra転enje nepohranjene poruke... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "%d pronaeno nepohranjenih poruka.\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\tSla転em nepohranjene poruke po rednom broju... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "forsirani raspored: %s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "Omogui horizontalnu scroll traku"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "Prika転i neproitane poruke podebljano"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Potraga zavr邸ena"
+
+#~ msgid "Done"
+#~ msgstr "Gotovo"
+
+#, fuzzy
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "Kreiranje nove po邸te"
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/_Datoteka/_Osvje転i stablo direktorijuma"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "move_file(): datoteka %s ve postoji."
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d podi転e obrazac od %s\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d ita dir obrazaca %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "%s:%d na邸ao datoteku %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s nije obina datoteka\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d pi邸e obrazac \"%s\" za %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "Stalni klju potpisa"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "spremam poslanu poruku...\n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "ne mogu spremiti poruku\n"
+
+#, fuzzy
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "Kreiram dijalog napretka...\n"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "Stvaram zapisni prozor...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "Bri邸em pohranjene lanke 1 - %d ..."
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tBri邸em sve pohranjene lanke..."
+
+#~ msgid ""
+#~ "The portions applied from fetchmail is Copyright 1997 by Eric S. "
+#~ "Raymond. Portions of those are also copyrighted by Carl Harris, 1993 and "
+#~ "1995. Copyright retained for the purpose of protecting free "
+#~ "redistribution of source.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dijelovi uzeti iz fetchmail-a vlasni邸tvo su Erica S. Raymonda, (c) 1997. "
+#~ "Dijelovi tih su tako丹er vlasni邸tvo Carla Harrisa, (c) 1993. i 1995. "
+#~ "Autorska prava su zadr転ana zbog za邸tite slobodne distribucije izvornog "
+#~ "koda.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is "
+#~ "copyright by takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kcc je vlasni邸tvo Yasuhiro Tonookae <tonooka@msi.co.jp>, a libkcc je "
+#~ "vlasni邸tvo takeshi@SoftAgency.co.jp.\n"
+#~ "\n"
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "ne mogu locirati memoriju\n"
+
+#, fuzzy
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/_Pregled/_Pregled poruka"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s ve postoji."
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "Uistinu obrisati direktorijum `%s'?"
+
+#, fuzzy
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "Do邸lo je do gre邸ke prilikom slanja\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/_Alat"
+
+#~ msgid "Outbox"
+#~ msgstr "Poslano"
+
+#, fuzzy
+#~ msgid "Skipping message %d\n"
+#~ msgstr "primam poruku %d...\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "Stvaram prozor za zaglavlje...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "Prikazujem zaglavlje od %s ...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - Svo zaglavlje"
+
+#, fuzzy
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/_Pregled/_Pregled poruka"
+
+#, fuzzy
+#~ msgid " Apply "
+#~ msgstr "Primjeni"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "Vanjski pretra転iva (%s predstavlja URI)"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "Idirektorijum (%s predstavlja ime datoteke)"
+
+#~ msgid "Go to %s\n"
+#~ msgstr "Idi u %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "Operator"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/_Poruka/_Za"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/_Poruka/_Cc"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/_Poruka/_Bcc"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/_Poruka/Pri_lo転i"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/_Alat/Prika転i _ravnalo"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/O_svje転i stablo direktorijuma"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/_Uredi/_Pretra転i direktorijum"
+
+#~ msgid "Search folder"
+#~ msgstr "Tra転i direktorijum"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "Sa転mi poglavlje"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "/Dod_aj po邸iljatelja u adresar"
+
+#~ msgid "/_Summary"
+#~ msgstr "/_Odr転avanje"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/_Odr転avanje/I_zvr邸i"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/_Odr転avanje/O_svje転i"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/_Odr転avanje/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/_Odr転avanje/Idi pre_ma"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/_Odr転avanje/Idi pre_ma/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/_Odr転avanje/Pos_lo転i"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/_Odr転avanje/Pos_lo転i/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/_Odr転avanje/_Thread pregled"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/_Odr転avanje/_Unthread pregled"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "News grupa `%s' ve postoji."
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "Unesite ime grupe:"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Proslije丹ena poruka:\n"
+#~ "\n"
+
+#~ msgid "Usually used"
+#~ msgstr "Uglavnom kori邸ten"
+
+#~ msgid "Program path"
+#~ msgstr "Staza programa"
+
+#~ msgid "Quotation format:"
+#~ msgstr "Format citata:"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "Osvje転avam sve direktorijume..."
+
+#~ msgid "Set display item"
+#~ msgstr "Postavi pojedinosti prikaza"
+
+#~ msgid "MIME"
+#~ msgstr "MIME"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 00000000..4c6f1407
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,6100 @@
+# Swedish translation of Sylpheed
+# Copyright (C) 2001 Joakim Andreasson
+# Joakim Andreasson <joakim.andreasson@gmx.net>, 2001
+# Roger Lindmark <roger.lindmark@bredband.net>, 2004
+# Mattias Ostergren <spikboll@gmx.net>, 2004
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-05 14:40+0100\n"
+"Last-Translator: Mattias Ostergren <spikboll@gmx.net>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Om"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME r copyright 2001 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Detta program r fri programvara. Du kan distribuera det och/eller modifiera "
+"det under villkoren i GNU General Public License, publicerad av Free "
+"Software Foundation, antingen version 2 eller (om du s vill) ngon senare "
+"version.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Detta program distribueras i hopp om att det ska vara anvndbart, men UTAN "
+"NGON GARANTI, ven utan underfrstdd garanti vid KP eller LMPLIGHET FR "
+"NGOT SPECIELLT NDAML. Se GNU General Public License fr ytterligare "
+"information.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Du br ha ftt en kopia av GNU General Public License tillsammans med detta "
+"program. Om inte, skriv till Free Software Foundation, Inc., 59 Temple Place "
+"- Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "OK"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Lser all konfiguration fr varje konto...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Fann titel: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Ngra skrivfnster r ppna.\n"
+"Stng alla skrivfnster innan du redigerar kontona."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "ppnar kontoredigeringsfnstret...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Skapar kontoredigeringsfnster...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Redigera konton"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Nya meddelanden kommer att kontrolleras i denna ordning.\n"
+"Markera rutorna i `G'-kolumnen fr att aktivera meddelandehmtning\n"
+"via \"Hmta alla\""
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "Namn"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Server"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Lgg till"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Redigera"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Ta bort "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Ner"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Upp"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " Anvnd som frvalt konto "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Stng"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Ta bort konto"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Vill du verkligen ta bort detta konto?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Ja"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Nej"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Kunde inte lsa meddelandefil %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Kunde inte lsa del av meddelande."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Kan inte lsa del av multipart-meddelande"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Den valda tgrden kan inte anvndas i skrivfnstret\n"
+"eftersom det innehller %%f, %%F eller %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Kommandot kunde inte startas. Misslyckades med att skapa rr.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kunde inte skapa en gren fr att kra fljande kommando:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- Kr: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Avslutad: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "tgrdens in-/utdata"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Skicka "
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "Avbryt"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Skriv in argumentet fr fljande tgrd:\n"
+"(\"%%h\" kommer att ersttas med argumentet)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "tgrdens dolda anvndarargument"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Skriv in argumentet fr fljande tgrd:\n"
+"(\"%%u\" kommer att ersttas med argumentet)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "tgrdens anvndarargument"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Lgg till i adressbok"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adress"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Kommentarer"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Vlj adressboksmapp"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Arkiv"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Arkiv/Ny _bok"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Arkiv/Nytt _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Arkiv/Ny _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Arkiv/Ny _Server"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Arkiv/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Arkiv/_Redigera"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Arkiv/_Ta bort"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Arkiv/_Spara"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Arkiv/St_ng"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/A_dress"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/A_dress/Ny _adress"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/A_dress/Ny _grupp"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/A_dress/Ny _mapp"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/A_dress/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/A_dress/_Redigera"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_A_dress/_Ta bort"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/V_erktyg"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/V_erktyg/Importera _LDIF-fil"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Hjlp"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Hjlp/_Om"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Ny _adress"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Ny _grupp"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Ny _mapp"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/_Redigera"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Ta bort"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-postadress"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adressbok"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "Namn:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Ta bort"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Sl upp"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Till:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Kopia:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Dold kopia:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Ta bort adress(er)"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Vill du verkligen ta bort adress(erna)?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Nej"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"Vill du ta bort mappen \"%s\" OCH alla adresser i den?\n"
+"Tar du bara bort mappen, kommer adresserna att flyttas\n"
+"en mapp uppt i hierarkin."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Endast mapp"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Mapp och adresser"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "Vill du verkligen ta bort \"%s\" ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Ny anvndare, kunde inte spara indexfil."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Ny anvndare, kunde inte spara adressboksfiler."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Den gamla adressboken r konverterad."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Gammal adressbok konverterad,\n"
+"kunde inte spara ny adressindexfil"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Kunde inte konvertera adressbok,\n"
+"men skapade nya tomma adressboksfiler."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Kunde inte konvertera adressbok,\n"
+"kunde inte skapa nya adressboksfiler."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Kunde inte konvertera adressbok,\n"
+"och kunde inte skapa nya adressboksfiler."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Fel vid konvertering av adressbok"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Adressbokskonvertering"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Adressboksfel"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Kunde inte lsa adressindex"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "Gammal adressbok konverterad, kunde inte skapa ny adressindexfil"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Kunde inte konvertera adressbok, men skapade nya tomma adressboksfiler."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "Kunde inte konvertera adressbok, kunde inte skapa nya adressboksfiler."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Kunde inte konvertera adressbok och kunde inte skapa nya adressboksfiler."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Fel vid konvertering av adressbok"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Adressbokskonvertering"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Grnssnitt"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adressbok"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Person"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "E-postadress"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grupp"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Mapp"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP-server"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Vanlig adress"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Privat adress"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Notera"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Varning"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Fel"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Skapar dialog fr meddelandepanel...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Visa detta meddelande nsta gng"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Orange"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Rd"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Rosa"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Himmelsbl"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Bl"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Grn"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Brun"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Ingen"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Lgg till..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Ta bort"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_Egenskaper..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_Arkiv/_Skicka"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_Arkiv/S_kicka senare"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_Arkiv/Spara i _utkast-mappen"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_Arkiv/Spara och _fortstt redigera"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Arkiv/_Bifoga fil"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Arkiv/_Infoga fil"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Arkiv/Infoga si_gnatur"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/_Redigera/_ngra"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/_Redigera/Gr _om"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/_Redigera/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/_Redigera/Klipp _ut"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/_Redigera/_Kopiera"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/_Redigera/Klistra _in"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/_Redigera/Klistra in som _citat"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/_Redigera/Markera _allt"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/_Redigera/A_vancerat"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/_Redigera/A_vancerat/G ett tecken bakt"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/_Redigera/A_vancerat/G ett tecken framt"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/_Redigera/A_vancerat/G ett ord bakt"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/_Redigera/A_vancerat/G ett ord framt"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/_Redigera/A_vancerat/G till brjan av raden"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/_Redigera/A_vancerat/G till slutet av raden"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/_Redigera/A_vancerat/G till fregende rad"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/_Redigera/A_vancerat/G till nsta rad"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/_Redigera/A_vancerat/Radera ett tecken bakt"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/_Redigera/A_vancerat/Radera ett tecken framt"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/_Redigera/A_vancerat/Radera ett ord bakt"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/_Redigera/A_vancerat/Radera ett ord framt"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/_Redigera/A_vancerat/Radera rad"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/_Redigera/A_vancerat/Radera till slutet av raden"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/_Redigera/Bryt rader i _stycke"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/_Redigera/Bryt _lnga rader"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/_Redigera/Automatisk _radbrytning"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Visa"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Visa/_Till"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Visa/_Kopia"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Visa/_Dold kopia"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Visa/_Svara till"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Visa/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Visa/_Flj upp till"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Visa/_Linjal"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Visa/_Bilagor"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/V_erktyg/_Adressbok"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/V_erktyg/_Mall"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/V_erktyg/_tgrder"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/V_erktyg/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/V_erktyg/Redigera med e_xtern redigerare"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/V_erktyg/_Signera"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/V_erktyg/_Kryptera"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: filen finns inte\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Kan inte lsa textdel\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Citationsteckensformatfel."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Formatfel vid meddelandesvar eller -vidarebefordran"
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "Filen %s finns inte\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Kan inte lsa filstorlek p %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "Filen %s r tom."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "kan inte lsa %s"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "Meddelande: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Kan inte lsa delen av multipart-meddelandet."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Redigerat]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - Skriv meddelande%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "Skriv meddelande%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Mottagare r inte angiven."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Skicka"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "mnesraden r tom. Skicka nd?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "kan inte lsa mottagarlista"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"Konto fr att skicka post r inte specificerat.\n"
+"Vlj ett e-postkonto innan du skickar."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "Fel uppstod nr meddelandet skulle skickas till %s."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "Kan inte spara meddelande i k-mappen."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr ""
+"Kunde inte hitta ngon nyckel associerad med nu aktiva nyckel-ID \"%s\"."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "kan inte ndra filrttigheter\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Kan inte konvertera meddelandets teckenkodning frn\n"
+"%s till %s.\n"
+"Skicka nd?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "kan inte skriva brevhuvud\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "kan inte ta bort det gamla meddelandet\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "lgger meddelandet i k...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "kan inte hitta kmapp\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "kan inte lgga meddelandet i k\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "skapat Meddelande-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Skapar skrivfnster...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME-typ"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Storlek"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Frn:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "Skicka meddelande"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Skicka senare"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "Placera i kmapp och skicka senare"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Utkast"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Spara i utkastsmapp"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "Infoga"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Infoga fil"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Bifoga"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Bifoga fil"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "Signatur"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "Infoga signatur"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Redigerare"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Redigera med extern redigerare"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Radbrytning"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Radbryt lnga rader"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Ogiltig MIME-typ"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Filen finns inte eller r tom."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodning"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Skvg"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Filnamn"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Ogiltig kommandorad fr extern redigerare: \"%s\"\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Den externa redigeraren arbetar fortfarande.\n"
+"Framtvinga avslutning av processen?\n"
+"processgrupps-id: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Avslutade processgrupps-id: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Temporr fil: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Skriv: indata frn bevakad process\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Kunde inte kra extern redigerare\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Kunde inte skriva till fil\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Kunde inte lsa frn rr\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Kan inte lgga meddelandet i k."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Vlj fil"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "Kasta meddelande"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Detta meddelande har ndrats. Kasta det?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Kasta"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "till Utkast"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "Vill du anvnda mallen \"%s\" ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "Anvnd mall"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Erstt"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Redigera adress"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Lgg till ny person"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Redigera persondetaljer"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "En e-postadress mste anges."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Namn och Vrde mste anges."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Redigera persondata"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Visat namn"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Efternamn"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Frnamn"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Smeknamn"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-postadress"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Alias"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Flytta upp"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Flytta ner"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "ndra"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Tm"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Vrde"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Grundlggande data"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Anvndarattribut"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Filen verkar vara OK."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Filen verkar inte vara i ett giltigt adressboksformat."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Kunde inte lsa fil."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Redigera adressbok"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Kontrollera fil "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Fil"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Lgg till ny adressbok"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Ett gruppnamn mste anges."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Redigera gruppdata"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Gruppnamn"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Adresser i grupp"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Tillgngliga adresser"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "Flytta e-postadresser till eller frn grupp med pilknapparna"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Redigera gruppdetaljer"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Lgg till ny grupp"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Redigera mapp"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Skriv in det nya namnet p mappen:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Ny mapp"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Skriv in namnet p den nya mappen:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Filen verkar inte vara i JPilot-format."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "Vlj JPilot-fil"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "Redigera JPilot-post"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Ytterligare e-postadressobjekt"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Lgg till ny JPilot-post"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Anslt framgngsrikt till server"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Kunde inte ansluta till server"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "Redigera LDAP-server"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Vrdnamn"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Kontrollera server "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Skbas"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Skkriterier"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " terstll "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "Bind-DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Bind-lsenord"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Vntetid (sek)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Maximalt antal poster"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Grundlggande"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Utkad"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Lgg till ny LDAP-server"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "Redigera LDAP - Vlj skbas"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Tillgnglig(a) skbas(er)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Kunde inte lsa skbas(er) frn server - stll in dem manuellt"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Filen verkar inte vara i giltigt vCard-format."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "Vlj vCard-fil"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "Redigera vCard-post"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Lgg till ny vCard-post"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Exportera"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Vlj mlmapp och mbox-fil."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Ursprungskatalog:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Exporterar fil:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Vlj... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Vlj exportfil"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "misslyckades skriva konfiguration till fil\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Vlj mapp"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Inkorg"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Skickat"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "K"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "Papperskorg"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Utkast"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "NyMapp"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "\"%c\" fr inte finnas i mappnamn."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "Mappen \"%s\" finns redan."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "Kan inte skapa mappen \"%s\"."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/_Ny mapp..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/_Byt namn..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/_Ta bort"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/Tm _papperskorgen"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Ta emot nya _meddelanden"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/_Uppdatera mapptrd"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_Sk meddelanden..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/_Hmta"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/Prenumerera p _diskussionsgrupp"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/T_a bort diskussionsgrupp"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Skapar mappvy...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Nya"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Olsta"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Stller in mappinfo...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Stller in mappinfo..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "Sker igenom mapp %s%c%s..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "Sker igenom mapp %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Uppdatera mapptrd"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Mapptrdet kommer att uppdateras. Fortstt?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Uppdaterar mapptrd..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "Uppdatering av mapptrdet misslyckades."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Uppdaterar alla mapptrd..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Letar efter nya meddelanden i alla mappar..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "Mappen %s r vald\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "Laddar ner meddelanden i %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "Ett fel uppstod vid nedladdning av meddelanden i \"%s\"."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Skriv in namnet p den nya mappen:\n"
+"(om du vill skapa en mapp som skall innehlla undermappar,\n"
+" lgg till \"/\" vid slutet av namnet)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "Skriv in nytt namn p \"%s\":"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Byt namn p mapp"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"Alla mappar och meddelanden under \"%s\" kommer att tas bort.\n"
+"Vill du verkligen ta bort dem?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Ta bort mapp"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "Kan inte ta bort mappen \"%s\"."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "Tm papperskorgen"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "Tm alla meddelanden i papperskorgen?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"Vill du verkligen ta bort brevldan \"%s\" ?\n"
+"(Meddelandena tas INTE bort frn disken)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Ta bort brevlda"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "Vill du verkligen ta bort IMAP4-kontot \"%s\"?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "Ta bort IMAP4-konto"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "Vill du verkligen ta bort diskussionsgrupp \"%s\"?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Ta bort diskussionsgrupp"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "Vill du verkligen ta bort diskussionsgruppskonto \"%s\"?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Ta bort diskussionsgruppskonto"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Prenumerera p diskussionsgrupp"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "Vlj diskussionsgrupp att prenumerera p."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Hitta grupper:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Sk "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Diskussionsgruppsnamn"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Meddelanden"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Typ"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Uppdatera"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "modererad"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "skrivskyddad"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "oknd"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Kan inte hmta grupplista."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Frdig."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d diskussionsgrupper mottagna (%s lsta)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abc繖"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Diskussionsgrupper:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "mne:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Skapar brevhuvudvy...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Inget Frn)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Inget mne)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Skapar bildvy...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Kan inte ppna bilden."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "IMAP4-frbindelse till %s har avbrutits. teruppkopplar...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "skapar IMAP4-frbindelse till %s:%d...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Kan inte starta TLS-session.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "kan inte stta borttaget-flaggor: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "kan inte utplna\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "kan inte stta borttaget-flaggor: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "kan inte stnga mapp\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "rotmapp %s finns inte\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "fel uppstod vid hmtning av LIST.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Kan inte skapa \"%s\"\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "kan inte skapa \"%s\" under INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "kan inte skapa brevlda: LIST misslyckades\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "kan inte skapa brevlda\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "kan inte byta namn p brevlda %s till %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "kan inte ta bort brevlda\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "kan inte hmta kuvert\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "fel uppstod vid hmtning av kuvert.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "kan inte tolka kuvert: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Kan inte ansluta till IMAP4-server: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Kan inte skapa IMAP4-session med: %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "kan inte hmta namnutrymme\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "kan inte vlja mapp: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4-autentisering misslyckades.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4-inloggning misslyckades.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "kan inte lgga till %s till %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(skickar fil...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "kan inte lgga till meddelande till %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "kan inte kopiera %s till %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "fel vid imapkommando: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "fel vid imapkommando: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "fel vid imapkommando: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv kan inte konvertera UTF-7 till %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv kan inte konvertera %s till UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Importera"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Vlj mbox-mlfil och destinationskatalog."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Fil att importera:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Destinationskatalog:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Vlj fil att importera"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Ange adressboksnamn och fil att importera."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Vlj och byt namn p LDIF-fltnamn att importera."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Fil importerad."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Vlj en fil."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Adressboksnamn mste anges."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "Fel vid inlsning av LDIF-flt."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF-fil importerad."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "Vlj LDIF-fil"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Filnamn"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF-flt"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "Attributnamn"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "Attribut"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Vlj"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adressbok:"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Filnamn:"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Register:"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "Importera LDIF-fil till adressboken"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "Fregende"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Nsta"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Filinfo"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "Attribut"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Avsluta"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Hmtar nya meddelanden"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Vnta"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "Avbruten"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Hmtar"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Frdig (%d meddelande(n) (%s) mottagna)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Frdig (inga nya meddelanden)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Frbindelse misslyckades"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Autentisering misslyckades"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Lst"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Slut p vntetid"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Avslutad (%d nya meddelanden)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Avslutad (inga nya meddelanden)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "Fel uppstod vid hmtning av post."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "hmtar nya meddelanden frn kontot %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Hmtar nya meddelanden"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "Ansluter till POP3-server: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Kan inte ansluta till POP3-server: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Autentiserar..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "Hmtar meddelanden frn %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Tar emot meddelandenas antal (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Tar emot meddelandenas antal (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Tar emot meddelandenas antal (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "Tar emot meddelandenas storlek (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "Tar bort meddelande %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "Avslutar"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "Tar emot meddelande (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Hmtar (%d meddelande(n) (%s) mottagna)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Frbindelse misslyckades."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Fel uppstod nr e-posten behandlades."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Fel uppstod nr e-posten behandlades:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Inget diskutrymme kvar."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Kan inte skriva fil."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Fel p uttag (socket)."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Anslutningen stngdes av fjrrvrden."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Brevldan r lst."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Brevldan r lst:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Autentisering misslyckades."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Autentisering misslyckades:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "Sessionens vntetid tog slut."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "Inkorporering avbruten\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "Hmtar nya meddelanden frn %s till %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "Skriv in lsenord fr %s p %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Skriv in lsenord"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protokollogg"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"Filen \"%s\" finns redan.\n"
+"Kan inte skapa mapp."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread stds inte av glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG r inte installerad riktigt eller s r versionen fr gammal.\n"
+"OpenPGP-std avstngt."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Anvndning: %s [FLAGGOR]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adress] ppna skrivfnster"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach fil1 [fil2]...\n"
+" ppna skrivfnster med angivna filer\n"
+" bifogade"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive ta emot nya meddelanden"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all ta emot nya meddelanden frn alla konton"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send skicka alla kade meddelanden"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [mapp]... visar det totala antalet meddelanden"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [mapp]...\n"
+" visa status fr varje mapp"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug felskningslge"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help visa denna hjlp och avsluta"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version skriv ut versionsinformation och avsluta"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Ett skrivet meddelande finns. Avsluta nd?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Meddelanden i k"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Ngra oskickade meddelanden ligger i k. Avsluta nu?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "en annan instans av Sylpheed r redan igng.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Arkiv/_Mapp"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Arkiv/_Mapp/_Ny mapp..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Arkiv/_Mapp/_Byt namn..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Arkiv/_Mapp/_Ta bort"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/_Arkiv/_Brevlda..."
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Arkiv/_Brevlda/_Lgg till..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Arkiv/_Brevlda/_Ta bort"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/_Arkiv/_Brevlda/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Arkiv/_Brevlda/Ta emot nya _meddelanden"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/_Arkiv/_Brevlda/Ta emot nya meddelanden i _alla brevldor"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Arkiv/_Brevlda/_Uppdatera mapptrd"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Arkiv/_Importera mbox-fil..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Arkiv/_Exportera till mbox-fil..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/_Arkiv/Tm alla _papperskorgar"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Arkiv/_Spara som..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Arkiv/Skriv _ut..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Arkiv/Arbeta _offline"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Arkiv/_Avsluta"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/_Redigera/Vlj _trd"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/_Redigera/Sk _i aktuellt meddelande..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/_Redigera/_Sk meddelanden..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Visa/_Visa eller dlj"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Visa/_Visa eller dlj/_Mapptrd"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Visa/_Visa eller dlj/Me_ddelandevy"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Visa/_Visa eller dlj/_Verktygsrad"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Visa/_Visa eller dlj/_Verktygsrad/Ikoner _och text"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Visa/_Visa eller dlj/_Verktygsrad/_Ikoner"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Visa/_Visa eller dlj/_Verktygsrad/_Text"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Visa/_Visa eller dlj/_Verktygsrad/I_ngetdera"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Visa/_Visa eller dlj/_Statusrad"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Visa/Separat ma_pptrd"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Visa/Separat m_eddelandevy"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Visa/_Sortera"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Visa/_Sortera/efter _nummer"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Visa/_Sortera/efter stor_lek"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Visa/_Sortera/efter _datum"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Visa/_Sortera/efter _frn"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Visa/_Sortera/efter _mottagare"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Visa/_Sortera/efter _mne"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Visa/_Sortera/efter f_rgmarkering"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Visa/_Sortera/efter mar_kering"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Visa/_Sortera/efter _olst"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Visa/_Sortera/efter _bilaga"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Visa/_Sortera/_inte alls"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Visa/_Sortera/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Visa/_Sortera/Uppstigande"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Visa/_Sortera/Nedstigande"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Visa/_Sortera/_Attrahera efter rende"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Visa/_Trdvy"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Visa/E_xpandera alla trdar"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Visa/Ko_llapsa alla trdar"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Visa/_Poster i summeringsvyn..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Visa/_G till"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Visa/_G till/_Freg. meddelande"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Visa/_G till/_Nsta meddelande"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Visa/_G till/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Visa/_G till/F_reg. olsta meddelande"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Visa/_G till/N_sta olsta meddelande"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Visa/_G till/Freg. n_ya meddelande"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Visa/_G till/Ns_ta nya meddelande"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Visa/_G till/Freg. _markerade meddelande"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Visa/_G till/Nsta m_arkerade meddelande"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Visa/_G till/_Freg. _frgade meddelande"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Visa/_G till/Nsta f_rgade meddelande"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Visa/_G till/_En annan mapp..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Visa/_Kodning/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Visa/_Kodning"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Visa/_Kodning/_Automatisk igenknning"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Visa/_Kodning/7 bitars ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Visa/_Kodning/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Visa/_Kodning/Vsteuropeisk (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Visa/_Kodning/_Vsteuropeisk (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Visa/_Kodning/Centraleuropeisk (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Visa/_Kodning/_Baltisk (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Visa/_Kodning/Baltisk (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Visa/_Kodning/Grekisk (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Visa/_Kodning/Turkisk (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Visa/_Kodning/Kyrillisk (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Visa/_Kodning/Kyrillisk (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Visa/_Kodning/Kyrillisk (KOI8-_U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Visa/_Kodning/Kyrillisk (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Visa/_Kodning/Japansk (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Visa/_Kodning/Japansk (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Visa/_Kodning/Japansk (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Visa/_Kodning/Japansk (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Visa/_Kodning/Frenklad kinesisk (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Visa/_Kodning/Traditionell kinesisk (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Visa/_Kodning/Traditionell kinesisk (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Visa/_Kodning/Kinesisk (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Visa/_Kodning/Koreansk (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Visa/_Kodning/Koreansk (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Visa/_Kodning/Thai (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Visa/_Kodning/Thai (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Visa/_ppna i nytt fnster"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Visa/_Meddelandekllkod"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Visa/_Hela brevhuvudet"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Visa/_Uppdatera summering"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_Meddelande"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/_Meddelande/Mott_ag"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_Meddelande/Mottag/Hmta frn _detta konto"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_Meddelande/Mottag/Hmta frn alla _konton"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_Meddelande/Mottag/Avbryt hmtnin_g"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/_Meddelande/Mottag/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_Meddelande/Skicka _kade meddelanden"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_Meddelande/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_Meddelande/Skriv _nytt meddelande"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_Meddelande/Sva_ra"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_Meddelande/_Svara till"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_Meddelande/_Svara till/a_lla"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_Meddelande/_Svara till/_avsndaren"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_Meddelande/_Svara till/_e-postlista"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_Meddelande/Vi_darebefordra"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_Meddelande/Vidarebefordra som bil_aga"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_Meddelande/_Omdirigera"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_Meddelande/Fl_ytta..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_Meddelande/_Kopiera"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_Meddelande/_Ta bort"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_Meddelande/_Markera"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_Meddelande/_Markera/_Markera"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_Meddelande/_Markera/_Avmarkera"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_Meddelande/_Markera/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_Meddelande/_Markera/Markera som _olst"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_Meddelande/_Markera/Markera som _lst"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_Meddelande/_Markera/Markera alla som l_sta"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_Meddelande/Redigera _om"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/V_erktyg/Lgg till avsndaren i adressbo_ken"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/V_erktyg/_Filtrera alla meddelanden i mappen"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/V_erktyg/Filtrera _valda meddelanden"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/V_erktyg/_Skapa filterregel"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/V_erktyg/_Skapa filterregel/_Automatiskt"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/V_erktyg/_Skapa filterregel/genom _Frn"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/V_erktyg/_Skapa filterregel/genom _Till"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/V_erktyg/_Skapa filterregel/genom _mne"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/V_erktyg/Ta bort meddelande_dubbletter"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/V_erktyg/Utfr _kade tgrder"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/V_erktyg/_Loggfnster"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Konfiguration"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Konfiguration/_Allmnna instllningar..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Konfiguration/_Filterinstllningar..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Konfiguration/_Mall..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Konfiguration/_tgrder..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Konfiguration/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Konfiguration/_Instllningar fr aktuellt konto..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Konfiguration/Skapa _nytt konto..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Konfiguration/_Redigera konton..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Konfiguration/_ndra aktuellt konto"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/_Hjlp/_Handbok"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/_Hjlp/_Handbok/_Engelsk"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/_Hjlp/_Handbok/_Japansk"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/_Hjlp/_FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/_Hjlp/_FAQ/_Engelsk"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/_Hjlp/_FAQ/_Tysk"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/_Hjlp/_FAQ/_Spansk"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/_Hjlp/_FAQ/_Fransk"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/_Hjlp/_FAQ/_Italiensk"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/_Hjlp/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Skapar huvudfnster...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "Huvudfnster: frgtilldelning %d misslyckades\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "frdigt.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Namnls"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "inget"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Byter fnsterseparationstyp frn %d till %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "Frnkopplad"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "Du r frnkopplad. Vill du ansluta?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "Tm alla papperskorgar"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "Tm alla meddelanden i alla papperskorgar?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Lgg till brevlda"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Skriv in brevldans plats.\n"
+"Om en existerande brevlda specificeras, kommer den\n"
+"att skas igenom automatiskt."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Brevldan \"%s\" finns redan."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Brevlda"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Brevldan kunde inte skapas.\n"
+"Ngra filer finns redan eller s saknar du skrivrttigheter dr."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - Mappvy"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - Meddelandevy"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/Sva_ra"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Svara till _alla"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/Svara till av_sndaren"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/Svara till e-post_lista"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/Vi_darebefordra"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/Vidarebefordra som _bilaga"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/_Omdirigera"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Hmta"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Hmta ny post"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Hmta allt"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Hmta ny post frn alla konton"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Skicka kade meddelanden"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Skriv"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Skriv nytt meddelande"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Svara"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "Svara p meddelandet"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Svara alla"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Svara till alla"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Vidarebefordra"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "Vidarebefordra meddelandet"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "Ta bort meddelandet"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "Utfr kade tgrder"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "Kr markerad process"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Nsta olsta meddelande"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Inst."
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Allmnna instllningar"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Konto"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Kontoinstllningar"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "Du r frnkopplad. Klicka p ikonen fr att ansluta."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "Du r ansluten. Klicka p ikonen fr att koppla frn."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "Avsluta"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Avsluta detta program?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "kan inte skriva till temporr fil\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "Hmtar meddelanden frn %s till %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "kan inte lsa mboxfil.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "felaktigt mboxformat: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "felformad mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "kan inte ppna temporr fil\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"o-esc:at Frn-flt funnet:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d meddelanden funna.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "kan inte skapa lsfil %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "anvnd \"flock\" istllet fr \"file\" om mjligt.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "kan inte skapa %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "brevldan gs av en annan process, vntar...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "kan inte lsa %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "felaktig lstyp\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "kan inte lsa upp %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "kan inte korta av brevlda till noll.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "Exporterar meddelanden frn %s till %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "Sk i aktuellt meddelande"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Sktext:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Skiftlgesknslig"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Sk baklnges"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Sk"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Skning misslyckades"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Skstrngen inte funnen."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "Brjan av meddelandet ntt; fortstta frn slutet?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "Slutet av meddelandet ntt; fortstta frn brjan?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Skning klar"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "Skapar meddelandevy...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Spara som"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "Skriv ver"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "Skriv ver befintlig fil?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Kan inte spara filen \"%s\"."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Skriv ut"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Skriv in utskriftskommando:\n"
+"(\"%s\" kommer att ersttas med filnamnet)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Utskriftskommandot r felaktigt:\n"
+"\"%s\""
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "kan inte kopiera meddelande %s till %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Kan inte ppna markeringsfil.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "ursprungsmappen r identisk med dest.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "Kopierar meddelande %s%c%d till %s...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Sista tal i mapp %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_ppna"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/ppna _med..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/Visa som _text"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Spara som..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_Undersk signatur"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "Skapar MIME-vy...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME-typ"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Text"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Bilagor"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Vlj \"Undersk signatur\" fr att underska"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Kan inte spara delen av multipart-meddelandet."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "ppna med"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Skriv in kommandot fr att ppna filen:\n"
+"(\"%s\" kommer att ersttas med filnamnet)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME-visningskommandot r felaktigt:\"%s\""
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "skapar NNTP-frbindelse till %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "NNTP-frbindelse till %s:%d har avbrutits. teruppkopplar...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "inlgget %d har redan cachats.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "hmtar inlgg %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "kan inte lsa inlgg %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "kan inte hmta diskussionsgruppslistan\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "kan inte posta inlgg.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "kan inte hmta inlgg %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "kan inte vlja grupp %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "felaktigt inlggsomfng: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "inga nya inlgg.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "hmtar xover %d - %d i %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "kan inte hmta xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "fel uppstod vid hmtning av xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "felaktig xover-rad: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "kan inte hmta xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "fel uppstod vid hmtning av xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Kan inte ansluta till NNTP-server: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokollfel: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokollfel\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Fel uppstod vid postning\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Fel uppstod nr kommandot skickades\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Lsenfras"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[inget anvndarid]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sSkriv in lsenfrasen fr:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Fel lsenfras! Frsk igen...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Ndvndig APOP-tidsmarkering inte funnen i hlsning\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Syntaxfel p tidsmarkering i hlsning\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3-protokollfel\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "felaktigt UIDL-svar: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Tar bort utgnget meddelande %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Hoppar ver meddelande %d (%d byte)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "brevldan r lst\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "sessionens vntetid tog slut\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "kan inte starta TLS-session\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "fel uppstod vid autentisering\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "kommando r inte sttt\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "fel uppstod vid POP3-session\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Lser konfiguration...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "Fann %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Har lst frdigt konfiguration.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Konfigurationen r sparad.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Verkstll"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "ppnar fnster fr kontoinstllningar...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Konto%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Instllningar fr nytt konto"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Kontoinstllningar"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Skapar fnster fr kontoinstllningar...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Ta emot"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Integritet"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Avancerat"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Detta kontos namn"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "Anvnd som frvalt konto"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Personlig information"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Fullst. namn"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-postadress"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Organisation"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Serverinformation"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Diskussionsgrupper (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Inget (lokalt)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Denna server krver autentisering"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Diskussionsgruppsserver"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "Server fr mottagning"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Server att skicka med (SMTP)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Anvndar-ID"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Lsenord"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "Anvnd sker autentisering (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "Ta bort meddelanden p server nr de mottagits"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Ta bort efter"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "dagar"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 dagar: ta bort direkt)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Hmta alla meddelanden frn server"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Grns fr mottagningsstorlek"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "Filtrera meddelanden vid mottagning"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "Frvald inkorg"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Ofiltrerade meddelanden kommer att lagras i denna mapp)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Autentiseringsmetod"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Automatisk"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "\"Hmta allt\" hmtar post p detta konto"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Brevhuvud"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Lgg till datumflt i brevhuvud"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "Skapa Meddelande-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Lgg till anvndardefinierat brevhuvud"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "Redigera..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Autentisering"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP-Autentisering (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Om du lmnar dessa poster tomma, kommer samma\n"
+"anvndar-ID och lsenord som vid hmtning att anvndas."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Autentisera med POP3 innan brev skickas"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Kommandoutdata"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Stt automatiskt fljande adresser"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Kopia"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Dold kopia"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Svara till"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Kryptera alla meddelanden"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Signera alla meddelanden"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "Anvnd ASCII-pansar fr kryptering"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Anvnd klartextsignatur"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "Signaturnyckel"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "Anvnd frvald GnuPG-nyckel"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Vlj nyckel genom din e-postadress"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Ange nyckel manuellt"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Anvndar- eller nyckel-ID:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "Anvnd inte SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "Anvnd SSL fr POP3-frbindelse"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "Anvnd STARTTLS-kommando fr att starta SSL-session"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "Anvnd SSL fr IMAP4-frbindelse"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "Anvnd SSL fr NNTP-frbindelse"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Skicka (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "Anvnd SSL fr SMTP-frbindelse"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Anvnd icke-blockerande SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(Sl av detta om du har problem med SSL-frbindelsen)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "Ange SMTP-port"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "Ange POP3-port"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "Ange IMAP4-port"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "Ange NNTP-port"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Ange domnnamn"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP-servermapp"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Lgg skickade meddelanden i"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Lgg utkast i"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Lgg borttagna meddelanden i"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Kontonamn har inte angivits."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "E-postadress har inte angivits."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP-server har inte angivits."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Anvndar-ID har inte angivits."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3-server har inte angivits."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4-server har inte angivits."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP-server har inte angivits."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"Det r inte rekommenderat att anvnda det frldrade\n"
+"ASCII-pansar-lget fr krypterade meddelanden.\n"
+"Det fljer inte RCF 3156 - MIME Security with OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "tgrdskonfiguration"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Menynamn:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Kommandorad:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Menynamn:\n"
+" Anvnd / i menynamn fr att skapa undermenyer.\n"
+"Kommandorad:\n"
+" Brja med:\n"
+" | fr att skicka meddelandetexten eller markering till kommandot\n"
+" > fr att skicka text tillhandahllen av anvndaren till kommandot\n"
+" * fr att skicka dold text tillhandahllen av anvndaren till kommandot\n"
+" Avsluta med:\n"
+" | fr att erstta meddelandetexten eller markering med kommandoutdata\n"
+" > fr att lgga till kommandots utdata utan att erstta gammal text\n"
+" & fr att kra kommandot asynkront\n"
+" Anvnd:\n"
+" %f fr meddelandets filnamn\n"
+" %F fr listan med filnamn av valda meddelanden\n"
+" %p fr den markerade meddelandedelen\n"
+" %u fr ett argument tillhandahllet av anvndaren\n"
+" %h fr ett dolt argument tillhandahllet av anvndaren\n"
+" %s fr markerad text"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr "Erstt"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Syntaxhjlp "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Registrerade tgrder"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Ny)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Menynamn r inte angivet."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "Kolon, \":\" r inte tilltet i menynamnet."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Menynamnet r fr lngt."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Kommandorad saknas."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Menynamn och kommando r fr lnga"
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"Kommandot\n"
+"%s\n"
+"har ett syntaktiskt fel."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Ta bort tgrd"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Vill du verkligen ta bort denna tgrd?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Skapar fnster fr allmnna instllningar...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Allmnna instllningar"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Citat"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Visa"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Meddelande"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "vrigt"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Externt program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Anvnd externt program fr hmtning"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Kommando"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Lokal spole (spool)"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Inkorporera frn spole"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Filtrera vid inkorporering"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Skvg till spole"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Hmta ny post automatiskt"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "med"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "minuters mellanrum"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "Hmta ny post vid uppstart"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Uppdatera alla lokala mappar efter att ny post hmtats"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Diskussionsgrupper"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Maximalt antal inlgg att hmta\n"
+"(obegrnsat om 0 angivits)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Skicka med externt program"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Spara skickade meddelanden i k-mappen"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Utgende kodning"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Automatisk (Rekommenderad)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7 bitars ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Vsteuropeisk (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Vsteuropeisk (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Centraleuropeisk (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltisk (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltisk (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Grekisk (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turkisk (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Kyrillisk (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Kyrillisk (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Kyrillisk (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Kyrillisk (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japansk (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japansk (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japansk (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Frenklad kinesisk (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Traditionell kinesisk (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Traditionell kinesisk (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "Kinesisk (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Koreansk (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Thai (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Thai (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Om \"Automatisk\" r vald, kommer den optimala\n"
+"kodningen fr det nuvarande sprket att anvndas."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Kodning fr verfring"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Ange vilken kodning fr verfring meddelandetexten\n"
+"ska ha nr det innehller icke-ASCII-tecken."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "Signaturseparator"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Infoga automatiskt"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Starta automatiskt extern redigerare"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "ngraniv"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "Radbryt meddelanden vid"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "tecken"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Radbryt citering"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Radbryt vid indata"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Radbryt innan brevet skickas"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Vlj automatiskt konto fr svar"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Citera meddelande vid svar"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Svara-knappen ger svar till e-postlista"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Svarsformat"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Citationstecken"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Vidarebefordringsformat"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Beskrivning av symboler "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Typsnitt"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "verstt brevhuvudsnamn (t.ex. \"Frn:\", \"rende:\")"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Visa antal olsta bredvid mappnamn"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Frkorta diskussionsgrupper lngre n"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "bokstver"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "Summeringsvy"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Visa mottagare i \"Frn\"-kolumnen om du sjlv r avsndaren"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Expandera trdar"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Datumformat"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " Stll in flt att visa i summeringen... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Aktivera frglggning av meddelande"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"Visa multi-byte-alfabet och -siffror som\n"
+"ASCII-tecken (endast Japanska)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Visa brevhuvudspanel ovanfr meddelandevy"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Visa korta brevhuvuden i meddelandevy"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Radavstnd"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "bildpunkter"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Lmna utrymme i brjan av rader"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Rulla"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Halvsida"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Mjuk rullning"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Steg"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "ndra storlek p bifogade stora bilder s att de ryms i fnstret"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "Undersk signaturer automatiskt"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "Visa resultat av signaturunderskning i ett extrafnster"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Lagra lsenfras temporrt i minnet"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Utgr efter"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "minut(er)"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Lsenfrasen kommer att lagras hela sessionen\n"
+"om 0 angivits)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Hll fokus under inskrivning av lsenfas"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Visa varning vid start om GnuPG inte fungerar"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "ppna alltid meddelanden i summering, nr de valts"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "ppna frsta olsta meddelande vid ppning av mapp"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Markera endast meddelande som lst, nr det ppnats i nytt fnster"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "G till inkorgen efter att ny post kommit"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Utfr omedelbart vid flyttning eller borttagande av meddelanden"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Meddelanden kommer endast vara markerade tills du vljer\n"
+" \"Utfr kade meddelanden\" om detta r avstngt)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Mottagningsdialog"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Visa mottagningsdialog"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Alltid"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Bara vid manuell mottagning"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Aldrig"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Visa inte feldialog vid hmtningsfel"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "Stng mottagningsdialog eftert"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr "Stll in tangentbindningar..."
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Externa kommandon (%s kommer att ersttas med filnamn / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Webblsare"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "Lgg till adress till destination vid dubbelklick"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "Vid avslut"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "Bekrfta avslut"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "Tm papperskorg vid avslut"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Frga innan tmning"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Varna om det finns kade meddelanden"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Vntetid fr uttags-I/O (socket I/O):"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "sekunder"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "frkortat veckodagsnamn"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "fullstndigt veckodagsnamn"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "frkortat mnadsnamn"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "fullstndigt mnadsnamn"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "datum och tid gllande lokalt"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "rhundradetal (rtal/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "dagen i mnaden som decimaltal"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "timmen som decimaltal enligt 24-timmarsrkning"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "timmen som decimaltal enligt 12-timmarsrkning"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "dagen p ret som ett decimaltal"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "mnaden som ett decimaltal"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "minuten som ett decimaltal"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "antingen AM eller PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "sekunden som ett decimaltal"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "veckodagen som ett decimaltal"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "datum gllande lokalt"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "de sista tv siffrorna av ett rtal"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "rtalet som ett decimaltal"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "tidszon eller namn eller frkortning"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Symbol"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Beskrivning"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "Exempel"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Stll in meddelandefrger"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Frger"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Citerad text - Frsta nivn"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "Citerad text - Andra nivn"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "Citerad text - Tredje nivn"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI-lnk"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "teranvnd citeringsfrger"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Vlj frg fr citeringsniv 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "Vlj frg fr citeringsniv 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "Vlj frg fr citeringsniv 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "Vlj frg fr URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "Beskrivning av symboler"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Datum\n"
+"Frn\n"
+"Fullstndigt avsndarnamn\n"
+"Avsndarens frnamn\n"
+"Avsndarens initialer\n"
+"rende\n"
+"Till\n"
+"Kopia\n"
+"Diskussionsgrupper\n"
+"Meddelande-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Om x r instlld, visas expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Meddelandetext\n"
+"Citerad meddelandetext\n"
+"Meddelandetext utan signatur\n"
+"Citerad meddelandetext utan signatur\n"
+"Bokstavligt %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Bokstavligt baktsnedstreck\n"
+"Bokstavligt frgetecken\n"
+"Bokstavlig ppnande klammerparentes\n"
+"Bokstavlig avslutande klammerparentes"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Typsnittsval"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Tangentbindningar"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"Vlj frinstllda tangentbindningar.\n"
+"Du kan ocks ndra varje menys genvgar genom\n"
+"att trycka valfri tangent eller tangentkombination\n"
+"nr muspekaren r ver genvgen."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "Standard"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Gamla Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "Egendefinierat brevhuvud"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "Egna brevhuvuden"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Brevhuvudsnamn r inte angivet."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Ta bort brevhuvud"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Vill du verkligen ta bort detta brevhuvud?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Skapar fnster fr brevhuvudinstllning...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Brevhuvudsinstllning"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Brevhuvudsnamn"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Visade brevhuvuden"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Dolda brevhuvuden"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Visa alla ospecificerade brevhuvuden"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Lser konfiguration fr visning av brevhuvuden...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Skriver konfiguration fr visning av brevhuvuden...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Detta brevhuvud finns redan i listan."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filterinstllningar"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "Aktiverad"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "verst"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "Underst"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Kopiera"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Ta bort regel"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "Vill du verkligen ta bort denna regel?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Filterregel"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Om ngot av fljande villkor matchar"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Om alla av fljande villkor matchar"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Utfr fljande tgrder:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "Till eller Kopia"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Ngot brevhuvud"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "Redigera brevhuvud..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Meddelandetext"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Resultat av kommando"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "lder"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "innehller"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "innehller inte"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "r"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "r inte"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "matchar regex"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "matchar inte regex"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "r strre n"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "r mindre n"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "r lngre n"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "r kortare n"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Flytta till"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Kopiera till"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Ta inte emot"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Ta bort frn server"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "Markera"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Frgmarkera"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Markera som lst"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Vidarebefordra som bilaga"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Omdirigera"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Kr kommando"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Stoppa regelutvrdering"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "mapp"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "adress"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "Redigera brevhuvudlista"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Brevhuvuden"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Brevhuvud:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "Regelnamn r inte angivet."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "Kommando r inte angivet."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Ogiltigt villkor existerar."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "Destinationsmapp r inte angiven."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Ogiltig tgrd existerar."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "Villkor saknas."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "tgrd saknas"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "Mappegenskaper"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Allmnt"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "Visa inte [...] eller (...) i brjan av rendet i summering"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Ta bort [...] eller (...) i brjan av rendet vid svar"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Gller ven undermappar"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "anvnd ocks vid svar"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Svara till:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "Markering"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Bilaga"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "rende"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Frn"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Datum"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Nummer"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "Skapar fnster fr summeringskolumnsinstllningar...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "Instllningar fr poster i summeringsvyn"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"Vlj vad som ska visas i summeringsvyn. Du kan ndra ordningen\n"
+"genom att anvnda \"Upp\"- och \"Ner\"-knapparna eller genom att dra "
+"posterna. "
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Tillgngliga poster"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Visade poster"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " terg till standardinstllning "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Mallnamn"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Registrera"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Byt ut "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Symboler "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Registrerade mallar"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Mallar"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Mall"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Mallformatfel"
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "Ta bort mall"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Vill du verkligen ta bort denna mall?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Kodkonvertering misslyckades.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "kan inte ppna markeringsfil\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "kan inte hmta meddelande %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Misslyckades med att skicka kat meddelande %d.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Utskriftskommando r felaktigt: \"%s\"\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Status"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "Skapar frloppsdialog...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "fel uppstod vid inhmtning av data.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Kan inte skriva till fil.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Hoppsan: Signatur ej verifierad"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "Ingen signatur funnen"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "Bra signatur"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "FELAKTIG signatur"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "Ingen publik nyckel att verifiera signaturen med"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "Fel vid verifikation av signatur"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "Olika resultat fr signaturer"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Fel: Oknt status"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "Bra signatur frn \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "FELAKTIG signatur frn \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Kan inte finna anvndar-ID fr denna nyckel."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " alias \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "Signatur skapad %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Nyckelfingeravtryck: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Vlj nyckel fr \"%s\""
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Samlar info fr \"%s\" ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Vlj nycklar"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Nyckel-ID"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Vrde"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Lgg till nyckel"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Skriv in en annan anvndar- eller nyckel-ID"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Brevhuvud i kat meddelande r trasigt.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Upprttar frbindelse"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "Upprttar frbindelse med SMTP-server: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "Skickar HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "Autentiserar"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "Skickar meddelande..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "Skickar EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "Skickar MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Skickar"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "Skickar RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "Skickar DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "Avslutar..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "Skickar meddelande (%d / %d byte)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "Skickar meddelande"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "Fel uppstod nr meddelandet skickades."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"Fel uppstod nr meddelandet skickades:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Brevldeinstllning"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"Frst mste du ange brevldans placering.\n"
+"Du kan anvnda befintlig brevlda i MH-format\n"
+"om du har en.\n"
+"r du inte sker, vlj bara OK."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "Undersker signatur"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s frn \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH ej tillgngligt\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "felaktigt SMTP-svar\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "fel uppstod vid SMTP-session\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Skapar kllkodsfnster...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Meddelandets kllkod"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "Visar kllkoden till %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Kllkod"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 ej tillgngligt\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 tillgngligt\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 ej tillgngligt\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 tillgngligt\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL-metod ej tillgnglig\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Oknd SSL-metod *PROGRAMFEL*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "Fel vid skapande av SSL-kontext\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL-anslutning misslyckades (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL-anslutning med %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Servercertifikat:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " rende: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Utfrdare: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "Sk meddelanden"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "Matcha ngon av fljande"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "Matcha alla av fljande"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Text:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Vlj alla matchande"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Brjan av lista ndd; fortstt frn slutet?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Slutet av lista ndd; fortstt frn brjan?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/Svar_a till"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/_Svara till/_alla"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/_Svara till/av_sndaren"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/_Svara till/e-post_lista"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/_Flytta..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopiera..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/_Markera"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/_Markera/_Markera"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "_Markera/_Avmarkera"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/_Markera/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/_Markera/Markera som _olst"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/_Markera/Markera som _lst"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/_Markera/Markera alla som l_sta"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/F_rgmarkera"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/Redigera _om"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/_Lgg till avsndaren till adressboken"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Visa/_Kllkod"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Visa/_Hela brevhuvudet"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/Skriv _ut"
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "O"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Nr."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "Skapar summeringsvy...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Behandla markering"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Ngra markeringar finns kvar. Behandla dem?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Sker igenom mapp (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Inga fler olsta meddelande"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Inget olst meddelande funnet. Sk frn slutet?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Inga olsta meddelanden."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Inget olst meddelande funnet. G till nsta mapp?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Sk igen"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Inga fler nya meddelanden"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Inget nytt meddelande funnet. Sk frn slutet?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Inga nya meddelanden."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Inget nytt meddelande funnet. G till nsta mapp?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Inga fler markerade meddelanden"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "Inget markerat meddelande funnet. Sk frn slutet?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "Inga markerade meddelanden."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "Inget markerat meddelande funnet. Sk frn brjan?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Inga fler frgade meddelanden"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Inget frgat meddelande funnet. Sk frn slutet?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Inga frgade meddelanden."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Inget frgat meddelande funnet. Sk frn brjan?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Attraherar meddelanden efter rende..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d borttagen"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d flyttad"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopierad"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " objekt valda"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d nya, %d olsta, %d totalt (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d nya, %d olsta, %d totalt"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Sorterar summering..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tSkapar summering frn meddelandedata..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "Skapar summering frn meddelandedata..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "Skriver summeringscache (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Inget datum)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Meddelande %d r markerat\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Meddelande %d r markerat som lst\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Meddelande %d r markerat som olst\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Meddelande %s/%d r valt fr borttagning\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "Ta bort meddelande(n)"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "Vill du verkligen tmma papperkorgen?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "Tar bort meddelandedubbletter..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Meddelande %s/%d r avmarkerat\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Meddelande %d r valt fr att flyttas till %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Destinationen r samma som aktuell mapp."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Meddelandet %d r valt fr att kopieras till %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "Destinationen att kopiera till r samma som aktuell mapp."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Markerar alla meddelanden..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Fel uppstod nr meddelanden behandlades."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Skapar trdar..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Avtrdar..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "Avtrdar fr att utfra kade tgrder..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtrerar..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtrerar..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d meddelande(n) har filtrerats."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "filen %s finns redan\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Skapar textvy...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Detta meddelande kan inte visas.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Fr att spara denna del, ta fram snabbmenyn genom att "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "hgerklicka och vlja \"Spara som...\", "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"eller tryck p \"y\"-tangenten.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Fr att visa denna del som textmeddelande, vlj "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"\"Visa som text\" eller tryck p \"t\"-tangenten.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Fr att ppna denna del med ett externt program, vlj "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "\"ppna\" eller \"ppna med...\", "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "eller dubbelklicka, eller klicka med mittenknappen, "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "eller tryck p \"l\"-tangenten"
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Denna signatur har nnu inte underskts.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Fr att underska den, ppna snabbmenyn genom att\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "hgerklicka och vlja \"Undersk signatur\".\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"Den verkliga URL:en (%s) skiljer sig frn\n"
+"den skenbara URL:en (%s).\n"
+"ppna den nd?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "skrivning till %s misslyckades.\n"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 00000000..4109e60a
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,6103 @@
+# translation of tr.po to
+# Turkish translation of Sylpheed
+# Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+# From 'oh what a po file'
+#
+# Edited by
+# Arman Aksoy (Armish) <armish@linux-sevenler.de>
+# Grkem etin <gorkem@gelecek.com.tr>, 2001-2002.
+# Arman Aksoy <armish@linux-sevenler.org>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: tr\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-03 11:44+0200\n"
+"Last-Translator: Arman Aksoy <armish@linux-sevenler.org>\n"
+"Language-Team: <gnome-turk@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "Hakknda"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr "GPGME telif hakk 2001 Werner Koch <dd9jn@gnu.org>\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"Bu program bir serbest yazlmdr. GNU Genel Kamu Lisans altnda serbeste "
+"da顯tlabilir.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"Bu program kullanclarn yararlanmas iin da顯tlmaktadr fakat baz "
+"konularda gvence verilmemektedir. Detayl bilgi iin GNU General Public "
+"License i inceleyiniz. \n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"Bu programla birlikte bir GNU General Public License kopyas alm olmanz "
+"gerekmektedir. Eer almadysanz ltfen Free Software Foundation, Inc., 59 "
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA adresine konuyla ilgili "
+"yaznz."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Tamam"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "Her hesap iin yaplandrma dosyalar okunuyor...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "Etiket bulundu: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"Baz dzenleme pencereleri a茉k.\n"
+"Ltfen tm dzenleme pencerelerini kapattktan sonra hesaplar dzenleyin."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "Hesap dzenleme penceresi a茉lyor...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "Hesap dzenleme penceresi oluturuluyor...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "Hesaplar dzenle"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"Yeni iletiler bu sra ile kontrol edilirler. `G' stunundaki\n"
+"kutucuklar tklanarak bu hesaplar iin `Hepsini al' seeneini \n"
+"etkin duruma getirilebilir."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "sim"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "Protokol"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "Sunucu"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "Ekle"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "Dzenle"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " Sil "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "Aa顯"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "Yukar"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " ntanml hesap olarak dzenle "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "Kapat"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "Hesab sil"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "Bu hesab silmek istiyor musunuz?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "Evet"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+Hayr"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "%d mesaj dosyas alnamad."
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "Mesaj blm alnamad."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "oklu mesajn paras alnamad"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"Seilen eylem mesaj dzenleme penceresinde kullanlamaz\n"
+"莫nk %%f, %%F veya %%p ieriyor."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Komut balatlamad. Boru yaratmnda hata olutu.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Aa顯daki komutu altrmak iin sre a茉lamad:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- alyor: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- Tamamland: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "Eylemin girdi/茉kts"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr " Gnder"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "ptal"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Bu ilem iin argman giriniz:\n"
+"(`%%h' argman ile deitirilecektir)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "Eylemin gizli kullanc argman"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"Bu ilem iin argman giriniz:\n"
+"(`%%u' argman ile deitirilecektir)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "Eylemin kullanc argman"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "Adres Defterine Ekle"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "Adres"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "Notlar"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "Adres Defteri Dizinini Se"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "ptal"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/_Dosya"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/_Dosya/Yeni _Defter"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/_Dosya/Yeni _vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/_Dosya/Yeni _JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/_Dosya/Yeni _Sunucu"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/_Dosya/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/_Dosya/_Dzenle"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/_Dosya/_Sil"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/_Dosya/_Kaydet"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/_Dosya/K_apat"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/_Adres"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/_Adres/Yeni _Adres"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/_Adres/Yeni _Grup"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/_Adres/Yeni _Dizin"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/_Adres/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/_Adres/D_zenle"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/_Adres/_Sil"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/A_ralar"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/A_ralar/_LDIF dosyasn ekle"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/_Yardm"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/_Yardm/_Hakknda"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/Yeni _Adres"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/Yeni _Grup"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/Yeni _Dizin"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/D_zenle"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/_Sil"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "leti adresi"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "Adres defteri"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "sim:"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "Sil"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Ara"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "Kime:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "Cc:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Bcc:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "Adres(ler)i sil"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "Adres(ler) silinsin mi?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "Hayr"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"`%s' iindeki tm adreslerle birlikte dizini de silmek istediinizden emin "
+"misiniz?\n"
+"Eer sadece dizini silerseniz, iindeki adresler ana dizine tanacaktr."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "Sadece dizin"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "Dizin ve Adresler"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "`%s' silinsin mi?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Yeni kullanc, indeks dosyas kaydedilemedi."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Yeni kullanc, adres defteri dosyalar kaydedilemedi."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "Eski adres defteri baaryla evrildi."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"Eski adres defteri evrildi,\n"
+"yeni adres indeks dosyas kaydedilemedi"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Adres defteri evrilemedi,\n"
+"ancak bo bir adres defteri dosyas oluturuldu."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Adres defteri ve yeni adres defteri \n"
+"dosyas oluturulamad."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Adres defteri ve yeni adres defteri \n"
+"dosyas oluturulamad."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "Adres defteri evrim hatas"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "Adres defteri evrimi"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "Adres Defteri Hatas"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Adres indeksi okunamad"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"Eski adres defteri evrildi, ancak yeni adres indeks dosyas kaydedilemedi"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr ""
+"Adres defteri evrilemedi, ancak yeni ve bo bir adres defteri dosyas "
+"oluturuldu."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr ""
+"Adres defteri evrilemedi ve yeni adres defteri dosyas oluturulamad."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr ""
+"Adres defteri evrilemedi ve yeni adres defteri dosyas oluturulamad."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "Adres Defteri evrim Hatas"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "Adres Defteri evrimi"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "Arayz"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "Adres Defteri"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "Kii"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "leti Adresi"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "Grup"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "Dizin"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP Sunucu"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "Ortak adres"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "Kiisel adres"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "Not"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "Uyar"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "Hata"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "Uyar panel penceresi oluturuluyor...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "Bu iletiyi sonraki a茉lta tekrar gster"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "Turuncu"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "Krmz"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "Pembe"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "Gk mavisi"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "Mavi"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "Yeil"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "Kahverengi"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "Hibiri"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/_Ekle..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/_Sil"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/_zellikler..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/_Dosya/_Gnder"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/_Dosya/_Sonra gnder"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/_Dosya/T_aslak dizinine kaydet"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/_Dosya/_Kaydet ve dzenlemeye devam et"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/_Dosya/_Dosya ekle"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/_Dosya/Dosya _ier"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/_Dosya/_mza ekle"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/D_zenle/_Geri al"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/D_zenle/_Yenile"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/D_zenle/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/D_zenle/_Kes"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/D_zenle/K_opyala"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/D_zenle/_Yaptr"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/D_zenle/_Alnt Yaparak Yaptr"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/D_zenle/_Tmn se"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/D_zenle/G_elimi"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/D_zenle/G_elimi/Bir karakteir geri ta"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/D_zenle/G_elimi/Bir karakteri ileri ta"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/D_zenle/G_elimi/Bir kelimeyi geri ta"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/D_zenle/G_elimi/Bir kelimeyi ileri ta"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/D_zenle/G_elimi/Satrn bana ta"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/D_zenle/G_elimi/Satrn sonuna ta"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/D_zenle/G_elimi/nceki satra ta"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/D_zenle/G_elimi/Sonraki satra ta"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/D_zenle/G_elimi/Bir karakter gerisini sil"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/D_zenle/G_elimi/Bir karakter ilerisini sil"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/D_zenle/G_elimi/Bir kelime sonrasn sil"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/D_zenle/G_elimi/Bir kelime ncesini sil"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/D_zenle/G_elimi/Satr sil"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/D_zenle/G_elimi/Satr sonunu sil"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/D_zenle/_uanki paragraf kaydr"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/D_zenle/Tm _uzun satrlar kaydr"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/D_zenle/Otomatik ka_ydr"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/_Grnm"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/_Grnm/_Alc"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/_Grnm/_Cc"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/_Grnm/_Bcc"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/_Grnm/_Yantla/"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/_Grnm/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/_Grnm/_Kodlama/"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/_Grnm/_Cetvel"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/_Grnm/_Ek"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/A_ralar/_Adres defteri"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/A_ralar/_ablon"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/A_ralar/E_ylemler"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/A_ralar/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/A_ralar/Harici _dzenleyicide a"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/A_ralar/PGP _mza"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/A_ralar/PGP ile _ifrele"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: dosya bulunamad\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "Metin blm alnamad\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "Alnt format hatas."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "Posta cevapla/ilet format hatas"
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "%s dosyas bulunamad\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "%s dosyasnn boyu bulunamad\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "%s dosyas bo."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "%s okunamad."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "leti: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "ok paral mesajn bir ksm alnamad"
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [Dzenlendi]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - leti dzenle (%s)"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "leti dzenle (%s)"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "Alc belirtilmedi."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "Gnder"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "Konuyu bo braktnz. Yine de gndermek istiyor musunuz?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "alc listesi alnamad."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"letinin gnderilecei hesap belirtilmedi.\n"
+"Ltfen gndermeden nce bir e-posta hesab girin."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "leti, %s adresine gnderilirken bir hata olutu."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "leti, giden kutusuna kaydedilemiyor."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Seilen `%s' anahtar kimliiyle bir eletirme yaplamad."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "dosya modu deitirilemedi\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"letinin kod kmesi evrilemedi\n"
+"%s / %s\n"
+"Yine de gnderilsin mi?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "balklar yazlamad\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "eski ileti silinemedi\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "ileti kuyrua gnderiliyor...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "kuyruk dizini bulunamad\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "ileti kuyrua gnderilemedi\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "leti numaras oluturuldu: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "Dzenleme penceresi oluturuluyor...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME tr"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "Boyut"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "Kimden:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "letiyi gnder"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "Sonra gnder"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "letiyi kuyrua aktar ve sonra gnder"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "Taslak"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "Taslak dizinine kaydet"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "汞er"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "Dosya ier"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "Ekle"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "Dosya ekle"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "mza"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "mza ekle"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "Dzenleyici"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "Harici bir dzenleyici kullan"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "Satr kaydr"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "Tm uzun satrlar kaydr"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "Geersiz MIME tr."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "Dosya yok, ya da bo."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "zellikler"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "Kodlama"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "Yol"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "Dosya ad"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "Harici dzenleyici komut satr geersiz: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"Harici dzenleyici hala alyor.\n"
+"Bu sreci sonlandraym m?\n"
+"Programn grup numaras (GID): %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "Grup numaras %d olan sre sonlandrld"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "Geici dosya: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "Dzenle: sre grntsn ier\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Harici dzenleyici altrlamad\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "Dosyaya yazlamad\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Boru okumada hata\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "leti kuyrua gnderilemedi."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "Dosya se"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "letiyi sil"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "Bu ileti deitirildi. Silinsin mi?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "Sil"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "Taslaa Gnder"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "%s ablonunu uygulamak istiyor musunuz?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "ablonu uygula"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "Deitir"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "Adresi Dzenle"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "Yeni Kii Ekle"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "Kii Ayrntlarn Dzenle"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "Bir e-posta adresi girilmelidir."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "Bir isim ve deer girilmelidir."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "Kii Verilerini Dzenle"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "Grntlenecek sim"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "Soyad"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "Ad"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "Lakab"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-posta Adresi"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "Takma isim"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "Yukar"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "Aa顯"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "Dzenle"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "Temizle"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "Deer"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "Temel Veriler"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "Kullanc znitelikleri"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "Dosya sorunsuz grnyor."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "Bu dosya geerli bir adres defteri biimi iermiyor."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Dosya okunamad."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "Adres Defterini Dzenle"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " Dosyay Denetle "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "Dosya"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "Yeni Adres Defteri Ekle"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "Bir Grup Ad verilmelidir."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "Grup Bilgisini Dzenle"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "Grup Ad"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "Gruptaki Adresler"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "Kullanlabilir Adresler"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr ""
+"E-posta adresini yn tularn kullanarak gruba yerletirin veya kaldrn"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "Grup Ayrntlarn Dzenle"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "Yeni Grup Ekle"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "Dizini dzenle"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "Dizinin yeni adni girin:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "Yeni dizin"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "Yeni dizinin adn verin:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "Bu dosya JPilot biiminde deil."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "JPilot Dosyasn Se"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "JPilot Girdisini Dzenle"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "Ek e-posta adres(ler)i"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "Yeni JPilot Girdisi Ekle"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "Sunucuya baaryla balant kuruldu"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Sunucuya balant kurulamad"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "LDAP Sunucusunu Dzenle"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "Makine Ad"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "Port"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " Sunucuyu Kontrol Et "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "Taban Ara"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "Arama Kriteri"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " Sfrla "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "DN'e Balan"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "Parola Belirt"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "Zaman am (sn) "
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "Azami Girdi Says"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "Temel"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "Gelimi"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "Yeni LDAP Sunucusu Ekle"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "LDAP Arama Taban Dzenle "
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "Kullanlabilir Arama Taban(lar)"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "Sunucudan Arama Taban(lar) okunamad - ltfen elle dzenleyin"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "Bu dosya vCard biiminde deil."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "vCard Dosyasn Se"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "vCard Girdisini Dzenle"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "Yeni vCard Girdisi Ekle"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "Aktar"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "Ltfen hedef dizini ve mbox dosyasn belirtin."
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "Kaynak dizini:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "Dosya aktarlyor:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " Se... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "Aktarlacak dosyay sein"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "Yaplandrma dosyasna kayt yaplamad\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "Dizini se"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "Gelen"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "Gnderilen"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "Kuyruk"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "薄p"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "Taslaklar"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "YeniDizin"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' bir dizin ad iinde olamaz."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "`%s' dizini zaten var."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "`%s' dizini oluturulamyor."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/Yeni _dizin yarat..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/D_izinin adn deitir"
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/Dizini _sil"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/薄_p boalt"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/Y_eni iletileri al"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/Dizin aacn _yeniden yarat"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/_letilerda ara..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/_ndir"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/_Haber grubuna ye ol..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/H_aber grubunu sil"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "Dizin grnts oluturuluyor...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "Yeni"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "Okunmam"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "Dizin bilgisi ayarlanyor...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "Dizin bilgisi ayarlanyor..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "%s%c%s dizini taranyor..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "%s dizini taranyor..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "Dizin aacn yeniden tara"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "Dizin aac yeniden oluturulacak. Devam edilsin mi?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "Dizin aac yeniden yaratlyor..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "Dizin aac yeniden oluturulamad."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "Tm dizin aalar yeniden yaratlyor..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "Dizinlerde yeni mesajlar kontrol ediliyor..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "%s dizini seildi\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "letiler %s iine indiriliyor..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "letiler `%s' iine indirilirken hata olutu."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"Yeni dizinin adn verin:\n"
+"(Eer alt dizin ierecek bir dizin oluturmak \n"
+"istiyorsanz, adnn sonuna `/' karakteri getirin)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "`%s' iin yeni bir isim verin:"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "Dizini yeniden adlandr"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"`%s' altndaki tm dizinler ve mesajlar silinecek.\n"
+"Devam etmek istediinizden emin misiniz?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "Dizini sil"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "`%s' dizini silinemiyor."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "薄p boalt"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "薄pteki tm iletiler silinsin mi?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"`%s' posta kutusu kaldrlsn m?\n"
+"(letiler diskten silinmeyecektir)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "Posta kutusunu sil"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "`%s' IMAP4 hesab silinsin mi?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "IMAP4 hesabn sil"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "`%s' haber grubu silinsin mi?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "Haber grubunu sil"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "`%s' haber grubu hesab silinsin mi?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "Haber grubu hesabn sil"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "Haber grubuna ye ol"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "ye olunacak haber gruplarn sein."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "Gruplar bul:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " Ara "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "Haber grubu ad"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "letiler"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "Tr"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "Yenile"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "yneticili"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "saltokunur"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "bilinmiyor"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "Haber grubu listesi alnamad."
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "Tamamland."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d haber grubu alnd (%s okundu)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "Haber gruplar:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "Konu:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "Balk grnm oluturuluyor...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(Kimden satr yok)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(Konu yok)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "Resim grnts oluturuluyor...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Resim yklenemedi."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "%s adresine yaplm IMAP4 balants koptu. Yeniden balanlyor...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "%s:%d adresine IMAP4 balants yaplyor ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "TLS oturumuna balant kurulamad.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "silinen iaretler atanamyor: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "silinemiyor\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "silinen iaretler atanamyor: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "dizin kapatlamad\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "%s kk dizini bulunamad\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "LIST alnrken hata olutu.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "%s oluturulamad\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "%s Gelen altnda oluturulamad\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "posta kutusu yaratlamyor: Liste hatas\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "posta kutusu oluturulamad\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "%s posta kutusunun ad %s olarak deitirilemedi \n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "posta kutusu silinemedi\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "zarf alnamad\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "zarf alnrken bir hata olutu.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "zarf ayrtrlamad: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "IMAP4 sunucuya balant kurulamad: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "IMAP4 oturumuna %s:%d ile balant kurulamad\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "alanadna eriilemedi\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "dizin seilemedi: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 yetkilendirmesi baarsz.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 giriinde hata.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "%s, %s zerine eklenemedi\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(dosya gnderiliyor...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "ileti %s'ye eklenemiyor\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "%s, %s konumuna kopyalanamad\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "imap komutu srasnda hata olutu: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "EXPUNGE komutu srasnda hata olutu\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "imap komutu srasnda hata olutu: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv, UTF-7 yi %s'e eviremedi\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv %s yi UTF-7'ye eviremedi\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "Dardan Aktar"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "Kaynak ve hedef mbox dosyalarn belirtin."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "Dosya aktarlyor:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "Hedef dizini:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "Eklenecek dosyay sein"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "Ltfen adres defteri adn ve aktarlacak dosyas sein."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "Aktarlacak dosyalarn adlarn LDIF alanlarndan seiniz"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "Dosya aktarld."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "Ltfen bir dosya sein."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "Adres defteri ad verilmelidir."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "LDIF alanlar okunurken hata."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "Eski adres defteri baaryla dardan aktarld."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "LDIF Dosyasn Sein"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "Dosya Ad"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF Alan"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "zellik Ad"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "zellik"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "Se"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "Adres Defteri :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "Dosya Ad :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "Kaytlar :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "LDIF dosyasn Adres Defterine aktar"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "nceki"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "Sonraki"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "Dosya Bilgisi"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "zellikler"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "Bitir"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "Yeni iletiler alnyor"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "Bekle"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "ptal edildi"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "Alnyor"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "Tamamland (%d mesaj, (%s) alnd)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "Tamamland (Yeni ileti yok)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "Balantda hata"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "Kimlik denetiminde hata"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "Kilitli"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "Zaman am"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "Tamamland (%d yeni mesaj)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "Tamamland (yeni mesaj yok)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr " letiler alnrken baz hatalar olutu."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "%s hesabndaki yeni iletiler alnyor...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: Yeni iletiler alnyor"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "POP3 sunucusuna balant kuruluyor: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "POP3 sunucuya balant kurulamad: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "Kimlik denetimi yaplyor..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "%s konumundan iletiler alnyor..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "Yeni ileti numaralar alnyor (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "Yeni ileti numaralar alnyor (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "Yeni ileti numaralar alnyor (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "letilerin boyutlar alnyor (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "%d. ileti siliniyor"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "駁klyor"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "letiler alnyor (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "Alnyor (%d mesaj, (%s) alnd)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "Balantda hata olutu."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "letiler ilenirken bir hata olutu."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"E-posta ilenirken hata olutu:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "Yeterli disk alan kalmad."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "Dosyaya yazlamad."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "protokol hatas"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "Balant kar taraftan kesildi."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "Posta kutusu kilitli"
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"Posta kutusu kilitli:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "Yetkilendirmede hata olutu."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"Yetkilendirme baarsz:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "Oturum zaman amna urad."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "ptal edildi\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "%s'den yeni mesajlar %s e alnyor...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "%s@%s iin parola giriniz:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "Parolay girin"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "Protokol gnl顫"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"%s dosyas zaten bulunuyor.\n"
+"Dizin oluturulamad."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread, glib tarafndan desteklenmiyor.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG dzgn kurulmam veya versiyonu ok eski\n"
+"OpenPGP destei kapatld."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Kullanm: %s [SEENEKLER] ...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [adres] dzenleme penceresini aar"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach dosya1 [dosya2]...\n"
+" dzenleme penceresini belirtilen dosyalar\n"
+" postaya eklenmi halde aar"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive yeni mesajlar alr"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all tm hesaplardaki yeni mesajlar alr"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send kuyruktaki postalar gnderir"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [dizin]... toplam mesaj saysn gster"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [dizin]...\n"
+" her dizinin durumunu gster"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug hata ayklama modu"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help bu yardm gsterir ve 茉kar"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version srm bilgisini gsterir ve 茉kar"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "Mesaj gndermeden 茉kmak istediinizden emin misiniz?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "Kuyruktaki iletiler"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Hala gnderilmemi baz iletiler kuyrukta bekliyor. imdi 茉klsn m?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "Baka bir Sylpheed sistemde alyor.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/_Dosya/D_izin"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/_Dosya/Di_zin/Y_eni dizin olutur..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/_Dosya/Di_zin/Di_zini yeniden adlandr..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/_Dosya/Di_zin/Dizini _sil"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/_Dosya/_Posta kutusu"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/_Dosya/_Posta kutusu/Posta kutusu e_kle..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/_Dosya/_Posta Kutusu/_Posta kutusunu kaldr"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/_Dosya/_Posta Kutusu/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/_Dosya/_Posta Kutusu/Yeni mesajlar iin k_ontrol et"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr ""
+"/_Dosya/_Posta Kutusu/_Tm posta kutular iin yeni mesajlar kontrol et"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/_Dosya/_Posta Kutusu/Dizin aacn _yeniden olutur"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/_Dosya/Posta k_utusu dosyasn aktar..."
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/_Dosya/_Posta kutusu dosyasna gnder..."
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/_Dosya/Tm 莓_p boalt"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/_Dosya/_Farkl kaydet..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/_Dosya/_Yazdr..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/_Dosya/evrimd_ al"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/_Dosya/駁_k"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/D_zenle/_Sral se"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/D_zenle/G_ncel iletide bul..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/D_zenle/_letilerde ara..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/_Grnm/Gster veya _gizle"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/_Grnm/Gster veya _gizle/_Dizin aac"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/_Grnm/Gster veya _gizle/_leti grnm"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/_Grnm/Gster veya _gizle/_Ara ubuu"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/_Grnm/Gster veya _gizle/_Ara ubuu/Simge _ve metin"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/_Grnm/Gster veya _gizle/_Ara ubuu/_Simge"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/_Grnm/Gster veya _gizle/_Ara ubuu/_Metin"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/_Grnm/Gster veya _gizle/_Ara ubuu/_Hibiri"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/_Grnm/Gster veya _gizle/_Durum ubuu"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/_Grnm/D_izin aacn ayr"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/_Grnm/Ayr _ileti grnm"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/_Grnm/_Srala"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/_Grnm/Sra_la/_Numaraya gre"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/_Grnm/Sra_la/_Boyuta gre"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/_Grnm/Sra_la/_Tarihe gre"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/_Grnm/Sra_la/_Gnderene gre"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/_Grnm/Sra_la/_Alcya gre"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/_Grnm/Sra_la/_Konuya gre"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/_Grnm/Sra_la/_Renge gre"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/_Grnm/Sra_la/沾_arete gre"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/_Grnm/Sra_la/_Okunmama gre"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/_Grnm/Sra_la/E_klentiye gre"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/_Grnm/Sra_la/_Sralama yapma"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/_Grnm/Sra_la/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/_Grnm/_Srala/Artan srala"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/_Grnm/_Srala/Azalan srala"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/_Grnm/Sra_la/Konuya _gre izle"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/_Grnm/_Konum grnm"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/_Grnm/Tm _balklar genilet"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/_Grnm/Tm _balklar k苜lt"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/_Grnm/_Grnt esini se..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/_Grnm/_Git/"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/_Grnm/_Git/nceki _ileti"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/_Grnm/_Git/Sonraki _ileti"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/_Grnm/_Git/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/_Grnm/_Git/_nceki okunmam ileti"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/_Grnm/_Git/_Sonraki okunmam ileti"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/_Grnm/_Git/_nceki yeni ileti"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/_Grnm/_Git/Sonraki _yeni ileti"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/_Grnm/Gi_t/nceki _iaretli ileti"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/_Grnm/Gi_t/S_onraki iaretli ileti"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/_Grnm/Gi_t/_nceki _etiketli ileti"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/_Grnm/Gi_t/Son_raki etiketli ileti"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/_Grnm/Gi_t/_Baka dizine git..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/_Grnm/_Kodlama/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/_Grnm/_Kodlama"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/_Grnm/_Kodlama/_Otomatik tan"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/_Grnm/_Kodlama/7 bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/_Grnm/_Kodlama/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/_Grnm/_Kodlama/Bat Avrupa (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/_Grnm/_Kodlama/Bat Avrupa (ISO-8859-_15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/_Grnm/_Kodlama/Orta Avrupa (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/_Grnm/_Kodlama/_Baltk (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/_Grnm/_Kodlama/Baltk (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/_Grnm/_Kodlama/Yunanca (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/_Grnm/_Kodlama/Trke (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/_Grnm/_Kodlama/Kiril (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/_Grnm/_Kodlama/Kiril (ISO-8859-_5)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/_Grnm/_Kodlama/Kiril (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/_Grnm/_Kodlama/Kiril (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/_Grnm/_Kodlama/Japonca (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/_Grnm/_Kodlama/Japonca (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/_Grnm/_Kodlama/Japonca (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/_Grnm/_Kodlama/Japonca (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/_Grnm/_Kodlama/Basit ince (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/_Grnm/_Kodlama/Geleneksel ince (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/_Grnm/_Kodlama/Geleneksel ince (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/_Grnm/_Kodlama/ince (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/_Grnm/_Kodlama/Korece (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/_Grnm/_Kodlama/Korece (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/_Grnm/_Kodlama/Tayca (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/_Grnm/_Kodlama/Tayca (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/_Grnm/Yeni _pencerede a"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/_Grnm/_leti kayna顯"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/_Grnm/Tm _balklar grntle"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/_Grnm/_Grnm gncelle"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/_leti"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/_leti/_Al"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/_leti/_Al/Ge_erli hesaptan al"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/_leti/_Al/T_m hesaplardan al"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/_leti/_Al/_ptal Et"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/_leti/_Al/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/_leti/_Kuyruktaki iletileri gnder"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/_leti/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/_leti/Yeni _ileti gnder"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/_leti/Yantl_a"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/_leti/B_akasna yantla"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/_leti/B_akasna yantla/_herkese"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/_leti/B_akasna yantla/_gnderene"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/_leti/B_akasna yantla/eposta l_istesine"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/_leti/Y_nlendir"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/_leti/E_k olarak ynlendir"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/_leti/Y_nlendir"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/_leti/Ta..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/_leti/_Kopyala..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/_leti/_Sil"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/_leti/沾_aretle"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/_leti/沾_aretle/沾_aretle"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/_leti/沾_aretle/沾areti _kaldr"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/_leti/沾_aretle/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/_leti/沾_aretle/O_kunmam olarak iaretle"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/_leti/沾_aretle/Ok_unmu olarak iaretle"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/_leti/沾_aretle/Hepsini _okunmu olarak iaretle"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/_leti/Ye_niden dzenle"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/A_ralar/Gndereni adres defterine ekle"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/A_ralar/_Dizin iindeki tm iletileri filtrele"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/A_ralar/S_eilen tm mesajlar filtrele"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/A_ralar/Filtre _kural olutur"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/A_ralar/Filtre _kural olutur/_Otomatik olutur"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/A_ralar/Filtre _kural olutur/_Gnderene gre olutur"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/A_ralar/Filtre _kural olutur/_Alcya gre olutur"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/A_ralar/Filtre _kural olutur/_Konuya gre olutur"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/A_ralar/_ift iletileri sil"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/A_ralar/_altr"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/A_ralar/_Kayt penceresi"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/_Yaplandrma"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/_Yaplandrma/_Genel tercihler..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/_Yaplandrma/F_iltre ayarlar..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/_Yaplandrma/_ablon..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/_Yaplandrma/_Eylemler..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/_Yaplandrma/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/_Yaplandrma/_Gncel hesap tercihleri..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/_Yaplandrma/Y_eni hesap olutur..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/_Yaplandrma/Hesaplar _dzenle..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/_Yaplandrma/_Gncel hesab deitir"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/Yard_m/_Klavuz"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/Yard_m/_Klavuz/_ngilizce"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/Yard_m/_Klavuz/_Japonca"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/Yard_m/_SSS"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/Yard_m/_SSS/_ngilizce"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/Yard_m/_SSS/_Almanca"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/Yard_m/_SSS/_spanyolca"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/Yard_m/_SSS/_Franszca"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/Yard_m/_SSS/_talyanca"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/Yard_m/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "Yeni pencere oluturuluyor...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "AnaPencere: renk bltrmesi %d srasnda hata olutu\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "bitti.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "Balksz"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "hibiri"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Pencere ayrma tarz %d den %d e evriliyor\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "evrimd"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "evrimdsnz. evrimii olunsun mu?"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "Tm 莓p boalt"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "薄pteki tm iletiler silinsin mi?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "Posta kutusu ekle"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"Posta kutusunun konumunu giriniz.\n"
+"Eer varolan potsa kutusu verilirse, otomatik\n"
+"olarak taranacaktr."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "`%s' posta kutusu zaten var."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Posta kutusu"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Posta kutusu oluturulurken hata olutu.\n"
+"Baz dosyalar bulunuyor olabilir veya yeterli izine sahip olmayabilirsiniz."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylheed - Dizin Grnm"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpeed - leti Grnm"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/_Yantla"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/Her_kese yantla"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/_Gnderene yantla"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/_E-posta listesine yantla"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/_Ynlendir"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/_Ek olarak ynlendir"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Ye_niden ynlendir"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "Al"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "Yeni postalar da顯t"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "Hepsini al"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "Tm hesaplardaki postalar da顯t"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "Kuyruktaki iletileri gnder"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "Dzenle"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "Yeni ileti dzenle"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "Yantla"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "letiyi yantla"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "Hepsine ynt."
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "Herkese yantla"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "Ynlendir"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "letiyi ynlendir"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "letiyi sil"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "altr"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "沾aretli sreleri altr"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "Sonraki okunmam ileti"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "Tercihler"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "Ortak tercihler"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "Hesap"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "Hesap ayarlar"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "evrimdsnz. evrimii olmak iin simgeye tklayn."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "evrimiisiniz. evrimd olmak iin simgeye tklayn."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "駁k"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "Programdan 茉klsn m?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "geici dosyaya yazlamad\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "%s daki mesajlar %s e alnyor...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Posta kutusu dosyas okunamyor.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "geersiz posta kutusu biimi: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "bozuk posta kutusu: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "geici dosya a茉lamad\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"uygun olmayan Kimden:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "%d ileti bulundu.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "kilit dosyas yaratlamad: %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "file yerine flock kullanmay deneyin.\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "%s oluturulamad\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr ""
+"posta kutusu baka bir sre tarafndan kullanld顯 iin bekleniyor...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "%s kilitlenemedi\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "geersiz kilit tr\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "%s a茉lamad\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "posta kutusu sfrlanamyor.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "%s daki mesajlar %s a aktarlyor...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "uanki mesajta bul"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "Metni bul:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "Durum duyarll顯"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "Eskileri arama"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Ara"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "Aramada hata olutu"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "Aranan dizi bulunamad."
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "letinin bana ulald, sonundan balansn m?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "letinin sonuna ulald, bandan balansn m?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "Arama tamamland"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "leti grnts oluturuluyor...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "Farkl kaydet"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "zerine yaz"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "imdiki dosyann zerine yazlsn m?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "`%s' dosyas kaydedilemedi."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "Yazdr"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Yazdrma komutunu giriniz:\n"
+"('%s' dosya adyla deitirilecek)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"Yazdrma komutu hatal:\n"
+"'%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "mesaj %s dan %s a kopyalanamad\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "iaretli dosya a茉lamad.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "kaynak dizini hedef dizinle ayn.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "%s%c%d mesaj %s iine kopyalanyor...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "Dizindeki son numara %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/_A"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/_Birlikte a..."
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/_Metin olarak grntle"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/_Farkl kaydet..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/_mzay denetle"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "MIME grnts oluturuluyor...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME Tr"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "Metin"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "Ekler"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "Kontol etmek iin \"mzay Kontrol Et\"i sen"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "oklu mesajn paras saklanmayor."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "Birlikte a"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"Dosyay amak iin komut satrn a茉n:\n"
+"(%s dosya ismi ile yer deitirecek)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME grntleyici komutu geersiz: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "%s:%d adresine NNTP balants yaplyor...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "%s:%d konumuna yaplan NNTP balants koptu.Yeniden balanlyor...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "%d iletisi zaten nbelleklendi.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "%d. makale alnyor...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "%d. makale okunamad\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "haber grubu listesi alnamyor\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "makale postalanamyor.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "makale alnamyor : %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "grup seilemiyor: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "geersiz makale aral顯: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "yeni makale yok.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "%d - %d haber grubu alnyor (%s)...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "haber gruplar alnamad\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "haber gruplar alnrken hata.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "hatal haber grubu satr %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "X balklar alnamyor\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "x balklar alnrken hata olutu.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "NNTP sunucuya balant yaplamad: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "protokol hatas: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "protokol hatas\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "Postalama srasnda hata\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "Komut gnderilirken hata olutu\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "Parola"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[kullanc ad yok]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%sLtfen Parolanz giriniz:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"Hatal parola! Yeniden deneyin...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "Gerekli olan APOP zaman etiketi grmede bulunamad\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "Zaman etiketi yazm hatas\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 protokol hatas\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "hatal UIDL cevab: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: Eski postalar siliniyor %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: Posta atlanyor %d (%d byte)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "posta kutusu kilitli\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "oturum zaman amna urad\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "TLS oturumu balatlamyor\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "yetkilendirme srasnda hata olutu\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "komut desteklenmiyor\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "POP3 oturumunda hata olutu\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "Yaplandrma dosyas okunuyor...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "%s bulundu\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "Yaplandrma dosyasnn okunmas tamamland.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "Yaplandrma kaydedildi.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Uygula"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "Hesap tercihleri penceresi a茉lyor...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "Hesap%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "Yeni hesap iin tercihler"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "Hesap tercihleri"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "Hesap tercihleri penceresi oluturuluyor...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "Al"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Gizlilik"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Gelimi"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "Bu hesabn ad"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "ntanml kullan"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "Kiisel bilgiler"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "Tam ad"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "E-Posta adresi"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "Kurum"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "Sunucu bilgisi"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "Haber grubu (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "Hibiri (yerel)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "Bu sunucu parola istiyor"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "Haber grubu sunucusu"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "letilerin alnaca顯 sunucu"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "Gnderme iin SMTP sunucu"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "Kullanc ad"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "Parola"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "Gvenli yetkilendirme kullan (APOP)"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "leti alnd顯 zaman sunucudaki kopyasn sil"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "Postay"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "gn sonra sil"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 gn: hemen sil)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "Sunucudaki tm iletileri indir"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "Alnan ileti boyutu snr"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "KB"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "letileri alrken filtrele"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "ntanml gelen kutusu"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(Filtrelenmemi iletiler bu kutuda bekleyecektir)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "Kimlik denetim yntemi"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "Otomatik"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "'Hepsini Al' seenei bu hesaptaki yeni postalar da kontrol etsin"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Balk"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "Tarih bal顯n ekle"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "leti Numaras Olutur"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "Kullanc tanml balk ekle"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " Dzenle... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "Kimlik denetimi"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP Kimlik Denetimi (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"Eer bu girdileri bo brakrsanz, ayn\n"
+"kullanc ad ve parolas kullanlr."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "Gndermeden nce POP3 ile kimlik denetimi yap"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "Komut 茉kts"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "Aa顯daki adresleri otomatik olarak tanmla"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "Cc"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Bcc"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "Yantla"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "letileri ntanml olarak ifrele"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "letileri ntanml olarak imzala"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "ASCII formatnda ifrele"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "Metin formatl imza ekle"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "mza anahtar"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "ntanml GnuPG anahtarn kullan"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "Anahtar e-posta adresine gre se"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "Anahtar elle se"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "Kullanc ya da anahtar numaras:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "SSL kullanma"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "POP3 balants iin SSL kullan"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "SSL oturumuna balamak iin STARTSSL komutunu kullan"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "IMAP4 balants iin SSL kullan"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "NNTP balants iin SSL kullan"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "Gnder (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SMTP balants iin SSL kullan"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "Bloklanmam SSL Kullan"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(SSL balantsnda sorunlar yayorsanz, bu zellii kapatn)"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "SMTP portu belirt"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "POP3 portu belirt"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "IMAP4 portu belirt"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "NNTP portu belirt"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "Alan ad belirt"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP sunucu dizini"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "Gnderilen iletileri nerede sakla"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "Taslak mesajlarn buraya koy"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "Silinen mesajlar buraya koy"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "Hesap ad girilmemi."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "leti adresi girilmemi."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "SMTP sunucu girilmemi."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "Kullanc numaras girilmemi."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "POP3 sunucu girilmemi."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "IMAP4 sunucu girilmemi."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "NNTP sunucu girilmemi."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"ASCII formatndaki ifrelemeyi kullanmanz nerilmez\n"
+"OpenPGP ile RFC 3156 - MIME Gvenlii ile uyumayan eksi\n"
+"bir yntemdir."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "Eylem ayarlar"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "Men ad:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "Komut satr:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"Men Ad:\n"
+" Men adlarnda / kullanarak alt menler yaratabilirsiniz.\n"
+" Komut Satr:\n"
+" Balang 沾aretleri:\n"
+" | seimi veya mesaj gvdesini programa gndermek iin \n"
+" > kullancnn belirttii metinleri programa gndermek iin \n"
+" * kullancnn belirttii gizli metinleri programa gndermek iin\n"
+" Biti 沾aretleri:\n"
+" | seimi veya mesaj gvdesini seilen programn 茉ktsyla deitirmek "
+"iin\n"
+" > eski metinle deitirmeden komut 茉ktsn eklemek iin\n"
+" & komut altrmak iin \n"
+" \n"
+" %f mesaj dosyasnn ad iin\n"
+" %F Seilen mesajlarn dosya adlarnn listesi iin\n"
+" %p seilen mesaj paras iin %u kullanc tarafndan belirlenmi "
+"bir argman iin\n"
+" %h kullanc tarafndan belirlenmi gizli bir argman iin\n"
+" %s seili metin iin"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr " Deitir"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " Yazm Yardm"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "Kaytl eylemler"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(Yeni)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Men ad belirtilmedi."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "':' kolonu men adlarnda kullanlamaz."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "Men ad ok uzun."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "Komut satr belirtilmedi."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "Men ad ve komut satr ok uzun."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"%s\n"
+"komutunda\n"
+"yazm hatas var."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "Eylemi sil"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "Bu hesab silmek istiyor musunuz?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "Genel tercihler penceresi oluturuluyor...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "Genel Tercihler"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "Alnt"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "Grnm"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "leti"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "Dier"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "Harici program"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "Da顯tm iin harici program kullan"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "Komut"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "Yerel spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "Spooldan da顯t"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "Da顯tm filtresi"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Makara konumu"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "Yeni postalar otomatik denetle"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "her"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "dakikada"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "A茉lta yeni e-postalar denetle"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "Da顯tmdan sonra tm yerel dizinleri gncelle"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "Haberler"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"Indirilebilecek azami makale says\n"
+"(0 => limitsiz)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "Gndermek iin harici program kullan"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "Gnderilen iletileri giden kutusuna kaydet"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "Giden ileti kod kmesi"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "Otomatik (nerilen)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "Bat Avrupa (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "Bat Avrupa (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "Orta Avrupa (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltk (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltk (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "Yunanca (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "Trke (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Kiril (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "Kiril (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "Kiril (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "Kiril (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Japonca (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "Japonca (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "Japonca (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "Basitletirilmi ince (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "Geleneksel ince (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "Geleneksel ince (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "ince (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "Korece (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "Tayca (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "Tayca (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"Eer 'Otomatik' seili ise yerelde kullanlan kod\n"
+"kmesi kullanlacaktr."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "Transfer kod kmesi"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"Mesaj gvdesi ASCII karakter iermedii zaman kullanlacak\n"
+"汞erik Transfer Kodlamasn seiniz."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "mza ayrac"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "Otomatik ekle"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "Harici dzenleyici otomatik altr"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "Geri alma seviyesi"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "letileri kaydr: "
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "karakter"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "Alnt Kaydrmas"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "Girdide Kaydr"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Gndermeden nce kaydr"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "Yantlamalarda hesab otomatik se"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "Yantlarken alnt yap"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "Yantla tuu eposta listelerine de yantlasn"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "Yantlama format"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "Alnt iareti"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "Ynlendirme biimi"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " Sembollerin a茉klamas "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "Yaztipi"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "Balk adlarn evir('Kimden','Konu' gibi)"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "Dizin adnn yannda ka tane okunmam posta olduunu gster"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "Belirtilenden daha uzun olan haber gruplarn ksalt"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "posta"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "zet Grnm"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "Eer gnderen kendimsem 'Kimden' satrnda alcy gster"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "Dizileri Genilet"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "Tarih biimi"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " zetin grnt nesnesini belirt"
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "letileri renklendir"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"ok bytel alfabe veya numaralar \n"
+"ASCII karakter olarak gster(Sadece Japonca)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "Postalar gsterirken st ksmda balklar gster"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "Postalar gsterirken ksa balklar gster"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "Satr boluu"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "benek"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "Bata boluk brak"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "Kaydr"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "Yarm sayfa"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "Yumuak kaydr"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "Adm"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "Pencereye uymas iin eklenmi byk resimleri yenden boyutlandr"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "mzalar otomatik denetle"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "mza kontrol sonularn ek pencerede gster"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "Parolay geici olarak hafzada sakla"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "Belirtilen sre sonra geerliliini yitir"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr " dakikada"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(Bu deere '0' atayarak parolann\n"
+"tm oturuum sresince saklanmasn salayabilirsiniz.)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "Parolay girerken girdiyi yakala"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "GnuPG almazsa balangta uyar mesaj gster"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "Mesajlar seildiinde her zaman zet halinda gster"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "Bir dizine girildiinde ilk okunmam iletiyi a"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "Posta sadece yeni pencerede okunduunda okunmu olarak iaretle"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "leti geldiinde gelen kutusuna git"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "Postay silerken ve tarken altr"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(Eer bu zellik kapal ise ilem bitinceye kadar\n"
+"postalar iaretlenecektir.)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "Alma penceresi"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "Alma penceresini gster"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "Her zaman"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "Sadece kullanc kendi ald顯nda"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "Hi bir zaman"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "Alma srasnda bir hata oluursa ek pencerede gsterme"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "沾lemler tamamland顯nda alma penceresini kapat"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " Tu kombinasyonlar..."
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "Harici dzenleyici (%s, dosya ad/URL ile yer deitirecektir)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Tarayc"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "ift tkland顯nda adresi hedefe ekle"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "駁kta"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "駁kta sor"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "駁kta 莓p boalt"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "Boaltmadan nce sor"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "Kuyrukta ileti varsa uyar"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Soket I/O zaman am:"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "saniye"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "ksa hafta ad"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "tam hafta ad"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "ksa ay ad"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "tam ay ad"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "gncel yerel bilgisi iin tercih edilen gn ve saat"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "yzyl numaras (yl/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "say deerinde ayn gn"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "24 saatlik format kullanlarak saat"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "12 saatlik format kullanlarak saat"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "yln gnnn say deeri"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "ay say deerinde"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "dakika"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM veya PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "saniye"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "haftann gn"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "tercih edilen yerek saat"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "yln son iki rakam"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "yl"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "Zaman dilimi veya ad"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "Belirtici"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "Tanm"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "rnek"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "Posta renklerini belirt"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "Renkler"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "Birinci derecen alnt metin"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "kinci dereceden alnt metin"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "槫nc dereceden alnt metin"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URL balants"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "Alnt renklerini dntr"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "Birinci dereceden alnt rengini seiniz"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "kinci dereceden alnt rengini seiniz"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "槫nc dereceden alnt rengini seiniz"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "URL iin renk seiniz"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "sembollerin a茉klamalar"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Tarih\n"
+"Kimden\n"
+"Gnderenin tam ad\n"
+"Gnderenin ba harfleri\n"
+"Konu\n"
+"Kime\n"
+"Cc\n"
+"Habergrubu\n"
+"Mesaj Nosu"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Eer x belirtilmise expr gster"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Mesaj Gvdesi\n"
+"Alnt yaplan mesaj\n"
+"mzasz mesaj gvdesi\n"
+"mzasz alnt yaplan metin\n"
+"Tam %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"Tam backslash\n"
+"Tam soru iareti\n"
+"Tam <\n"
+"Tam >"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "Yaztipi seimi"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "Tu ba顯ntlar"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"nceden belirlenmi tu kombinasyonlarn seiniz\n"
+"Ayrca mende mousunuzun imleci zerindeyken herhangi bir tua\n"
+"basarak nesnelerin ksayollarn deitirebilirsiniz."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "ntanml"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "Eski Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "zel balk ayarlar"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "zel balklar"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "Balk ad belirtilmedi."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "Bal顯 sil"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "Bu bal顯 silmek istiyor musunuz?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "Balk ayarlar grnm penceresi oluturuluyor...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "Grnt bal顯 ayarlar"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Balk ad"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "Grntlenen Balklar"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "Gizli balklar"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "Belirtilmemi tm balklar gster"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "Balk grntleme iin yaplandrma dosyas okunuyor...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "Balk grntleme iin yaplandrma dosyasna yazlyor...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "Bu balk zaten listede."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "Filtre ayarlar"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "Etkin"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "st"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "Alt"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "Kopyala"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "Kural sil"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "B kural silmek istiyor musunuz?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "Filtre kural"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "Aa顯daki herhangi bir kural eleirse"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "Aa顯daki tm koullar eleirse"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "Aa顯daki eylemleri gerekletir:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "Kime veya CC"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "Herhangi bir balk"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "Bal顯 dzenle..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "leti gvdesi"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "Komut sonucu"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "Ya"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "ieriyor"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "iermiyor"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "ise "
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "deil ise"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "regex ile eletir"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "regex ile eletirme"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "bykse"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "k苜kse"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "uzunsa"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "ksaysa"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "Ta"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "Kopyala"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "Alma"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "Sunucudan sil"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "沾aretle"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "Renk ata"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "Okunmu olarak iaretle"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "Ek olarak ynlendir"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Yeniden ynlendir"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "Komut altr"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "Kural dnmn durdur"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "dizin:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "Adres"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "Balk listesini dzenle"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Balklar"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Balk:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "Kural ad belirtilmedi."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "Komut belirtilmedi."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "Geersiz durum bulunuyor."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "Hedef dizin belirtilmedi."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "Geersiz eylem bulunuyor."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "Durum bulunamad."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "Eylem bulunamad."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr " Dizin Ayarlar"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "Genel"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "Normal"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "zette bal顯nda banda [...] veya (...) gsterme"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "Cevaplarken bal顯n bandaki [...] veya (...) iaretlerini sil"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "Alt dizinlere uygula"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "ayrca yantlarken kullan"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "Yantla:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "沾aretle"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "Ek"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "Konu"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "Kimden"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "Tarih"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "Numara"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "zet satr aar penceresi yaratlyor...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "zet grnm nesne ayarlar"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"zet grnmde gsterilecek nesneleri seiniz. Ayrca Yukar/Aa顯\n"
+"tularn kullanarak bu nesneleri sralayabilirsiniz."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "Kullanlabilir eler"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "Grntlenen eler"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " ntanmlya gei yap "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "ablon ad"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "Kaydol"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " Deitir "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " Semboller "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "Kaytl ablonlar"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "ablonlar"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "ablon"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "ablon biim hatas."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "ablonu sil"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "Gerekten bu ablonu silmek istiyor musunuz?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): Kod evriminde hata.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "iaret dosyas a茉lamad\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "%d. ileti alnamad\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "Kuyrutaki ileti (%d) gnderilirken hata olutu.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "Yazdrma komutu geersiz: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "Durum"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "沾lem durum penceresi oluturuluyor...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "veri alnrken bir hata olutu.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "Dosyaya yazlamad.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "Oops: mza dorulanamad"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "mza bulunamad"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "yi imza"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "KT imza"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "mzay kontrol etmek iin genel anahtar bulunamad"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "mza dorulanrken hata"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "mzalar iin farkl sonular"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "Hata: Bilinmeyen durum"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "\"%s\"'ten iyi imza"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "\"%s\" ten hatal imza"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Bu anahtar iin kullanc numaras bulunamad."
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " aka \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "mza atlma tarihi %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "Anahtar sorgusu 茉kts: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "Ltfen '%s' iin bir tu seiniz"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "'%s' iin bilgi toplanyor... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "Anahtarlar Sein"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "Anahtar No"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Deer"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "Anahtar ekle"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "Baka kullanc ya da anahtar numaras ekle"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "Alnt metinindeki balklar hatal.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "Balant kuruluyor"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "SMTP sunucuya balant kuruluyor: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "HELO gnderiliyor..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr " Kimlik denetimi"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "leti gnderiliyor..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "EHLO gnderiliyor... "
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "MAIL FROM gnderiliyor..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "Gnderiliyor"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "RCPT TO gnderiliyor..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "DATA gnderiliyor..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "駁klyor..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "leti gnderiliyor (%d / %d bayt)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "leti gnderiliyor"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "leti gnderilirken hata olutu."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"leti gnderilirken hata olutu:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Posta kutusu ayarlar"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"ncelikle posta kutusunun konumunu belirlemelisiniz.\n"
+"Varolan posta kutunuzu MH formatnda kullanabilirsiniz\n"
+"Eer emin deilseniz OK e basn."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "mza kontrol ediliyor"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s - \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH kullanlamyor\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "kt SMTP cevab\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "SMTP oturumunda hata olutu\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "Kaynak penceresi oluturuluyor...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "leti kayna顯"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "%s iletinin kayna顯 gsteriliyor...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - Kaynak"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 kullanlamyor\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 etkin\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 kullanlamyor\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 etkin\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL yntemi kullanlamyor\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "Bilinmeyen SSL yntemi: Program hatas\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "SSL metni oluturulurken hata\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL balantsnda hata (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "SSL balants %s kullanarak yapld\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "Sunucu sertifikas:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " Konu: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " Veren: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "letilerde ara"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "Aa顯daki herhangi bir kural eleirse"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "Aa顯daki tm koullar eleirse"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "Gvde:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "Eleenlerin tamamn se"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "Listesinin bana gelindi, sondan devam edilsin mi?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "Listenin sonuna gelindi, batan devam edilsin mi?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/_Bakasna yantla"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/_Bakasna yantla/_herkese"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/_Bakasna yantla/_gnderene"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/_Bakasna yantla/posta _listesine"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/T_a..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/_Kopyala..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/沾a_retle"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/沾a_retle/_沾aretle"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/沾a_retle/_沾areti Kaldr"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/沾a_retle/--- "
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/沾a_retle/Okun_mam olarak iaretle"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/沾a_retle/_Okunmu olarak iaretle"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/沾a_retle/H_epsini okunmu olarak iaretle"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/_Renk etiketi"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/_Yeniden dzenle"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/Gndericiyi adres defterine ekle"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/_Grnm/_Kaynak"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/_Grnm/Tm _balklar"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/_Yazdr...."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr ""
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "O"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "Hayr."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "zet oluturuluyor...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Sre iareti"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Baz iaretler braklm. 沾lemeye devam edilsin mi?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "Dizin taranyor (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "Baka okunmam ileti yok"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "Okunmam ileti bulunamad. Sondan aratlsn m?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "Okunmam ileti yok."
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "Okunamam ileti yok. Dier dizine geilsin mi?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "Yeniden ara"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "Baka ileti yok"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "Yeni ileti yok. Sondan itibaren aransn m?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "Yeni ileti yok."
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "Yeni ileti yok. Sonraki dizine geilsin mi?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "Baka iaretlenmi posta yok"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "沾aretlenmi ileti bulunamad. Sondan aratlsn m?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "沾aretlenmi ileti yok."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "沾aretlenmi ileti bulunamad. Batan aratlsn m?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "Baka etiketlenmi ileti yok"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "Baka etiketlenlenmi ileti yok. Sondan aratlsn m?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "Baka etiketlenmi ileti yok."
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "Etkiketlenmi ileti bulunamad. Batan aratlsn m?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "Konularna gre postalar ekiliyor..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d silindi"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d tand"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d kopyaland"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " e seildi"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d yeni, %d okunmam, toplam %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d yeni, %d okunmam, toplam %d"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "zet sralanyor..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\tleti bilgisinden zet atanyor..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "leti bilgisinden zet atanyor..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "zet (%s) nbellee yazlyor..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(Tarih Yok)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "%d. ileti iaretli\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "%d. ileti okunmu olarak iaretli\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "%d ileti okunmam olarak iaretli\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "%s/%d ileti silinecek\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "letileri sil"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "薄pteki iletileri silmek istiyor musunuz?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "ift iletiler siliniyor..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "%s%d iletisinin iareti kaldrld\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "%d iletisi %s e tand\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "Hedef dizin uanki dizinle ayn."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "%d iletisi %s e kopyalanad\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "Kopya iin hedef dizin geerli dizin ile ayn."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "Tm iletiler seiliyor..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "letiler ilenirken hata olutu."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "Konumlar oluturuluyor..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "Konumlar ayrlyor..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "沾lemler iin ayrm yaplyor..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "filtreleniyor..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Filtreleniyor..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d mesaj filtrelenedi."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "%s dosyas zaten var\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "Metin grnm oluturuluyor...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Bu mesaj grntlenemiyor.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "Bu blm kaydetmek iin, stteki pencerede iaretli "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "blgeyi farenin sa tuu ile tklayn ve `Farkl Kaydet'e, "
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"ya da `y' tuuna basn.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "Bu blm bir metin olarak grntlemek iin, `Metin olarak "
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"grntle'yi sein, ya da `t' tuuna tklayn.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "Bu blm harici bir programla amak iin, "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "`A' ya da `Birlikte a...' sein, "
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "ya da ift tklayn, ya da "
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "`I' dmesine basn."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "Bu imza daha kontrol edilmedi.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "Kontrol etmek iin, ierik mensn\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "ile a茉n, sa tklayn ve 'mzay Kontrol Et'i sein.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"Gerek URL (%s)\n"
+"grnenden (%s) farkl.\n"
+"Yine de a茉lsn m?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "yazarken hata olutu: %s\n"
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 00000000..3f4d37cc
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,6129 @@
+# Ukrainian translation for Sylpheed
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# O. Nykyforchyn <nick@pu.if.ua>, 2002, 2004.
+# Some ideas borrowed from Russian translation.
+# So thanks to Aleksey Novodvorsky <aen@logic.ru>,
+# Sergey Vlasov <vsu@mivlgu.murom.ru>,
+# Dmitry S. Sivachenko <dima@Chg.RU>.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sylpheed 1.0.0beta1\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: Sun 31 Oct 2004 23:17:57\n"
+"Last-Translator: O. Nykyforchyn <nick@pu.if,ua>, 2004.\n"
+"Language-Team: Ukrainian <uk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-u\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "靤 侑惑卅葉"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"Copyright 料 GPGME, 2001 料姪嵒墮 Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"穡 侑惑卅輿 廢蒙力厦斟徨青嶮彖力; 溶崚堙 佻柯卆彖塢 /疎 "
+"溶追豆釦彖塢 Ё 料 嬪彖 素遡慘炉 勒駄淮炉 讀壇鱗Η GNU 徂婆冂, "
+"冕詫 從料 椀嫗巳墨彖料 Free Software Foundation; 疎 彭厶Η 2, 疎 (料 想 "
+"厦旃嫩) 怠椿-冕炉 丶變柯 彭厶κ.\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"穡 侑惑卅輿 佻柯卆ぴ慯 料彫だ 嘖壮 鼠 侑蒜歪, 遡 矼 閼鈿 "
+"艨鱇銓況; 料廢墮 妥 療况良 覗卅淋κ 阯癇鈿苡 齡瘤 疎 頏蜆癆鈿齡 粲 "
+"鞳鈿 辣. 簓廢墮嗔 素遡慘 勒駄淮 讀壇鱗 GNU 殤掴 佻漬和秒.\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+" 輿棉 墟浜壮 墨丶 素遡慘炉 勒駄淮炉 讀壇鱗Η GNU 卅斛 脱だ "
+"侑惑卅溶; 冕殤 壇 療 堊, 佗昿墮 Free Software Foundation, Inc., 59 "
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "酖帆"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "不舛溶 墨瞭η孀礎 通 墨嵶惑 攸佗嗾...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "料閉杜 勇塰: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"δ牧不 津冕 廢卜 力徂揺 棉嘖鼠.\n"
+"阻夘編 , 怠椿-盟嗚, 佚叨 陸 凖珍杯彖塢 和巳墨廢 攸佗喇."
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "δ牧夫舛溶 廢卜 凖珍杯彖領 和巳墨從馬 攸佗嗾...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "黌從卆ね 廢卜 凖珍杯彖領 和巳墨從馬 攸佗嗾...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "鯏珍杯ね 和巳墨廢 攸佗喇"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"靉厮掴 佚凖廢卷 力徂 棉嘖ψ. 靉變挿堙 墨模涼 `G'\n"
+"account', 冕 佻佻徇誓墮嗔 淌凖 `鑚夘輿塢 徨'."
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "桐'"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "靤塹墨"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "鹽叟賭"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "簣珍塢"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "鯏珍杯彖塢"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "苗遡不"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "良"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "馬簒"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 嘖僧徂塢 冕 default "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "阻夘塢"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "苗遡不 和巳墨徂 攸佗"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr " 彫篇力 汰崛ぴ 徂珍棉塢 壇 攸佗?"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "疱崚"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+遉攸殤"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "酖 彡遡腕 墟浜壮 徳別 棉嘖 %d"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "酖 彡遡腕 墟浜壮 涸嘖瀕 棉嘖."
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "酖 彡遡腕 墟浜壮 歪燐 涸嘖瀕 棉嘖"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"鐶卅燐 彫 療 溶嵶 忖夫壮 廢卜 嘖從凖領,\n"
+"腕胞蒙防 從料 勇嘖不 %%f, %%F 疎 %%p."
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"誅輿猟 療 攸侖歸力. 酖 彡遡腕 嘖從夘塢 冒料.\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"酖 彡遡腕 敖κ嗄不 \"fork\", 殤 徂墨料塢 墨輿猟:\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 彬藁佞墮嗔: %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 阻ξ淌力: %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "廢/徂廢 彫"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "靉嗅壮"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "霤凖叟壮"
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"彭彫墮 倉杯妖淋 料嘖孃力 彫:\n"
+"(`%%h' 怠津 攸勇療力 倉杯妖淋詫)\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "靤蛭彖良 倉杯妖淋 墨夘嘖孥挿"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"彭彫墮 倉杯妖淋 料嘖孃力 彫:\n"
+"(`%%u' 怠津 攸勇療力 倉杯妖淋詫)\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "痃杯妖淋 墨夘嘖孥挿"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "簣珍塢 祖凖嗾 掴 卜蒜"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "當凖啻"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "醢堊塰"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "鐶卅塢 仭佶 祖凖嗄炉 卜蒜"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "麕喪孥壮"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/譱別"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/譱別/醢彖 卜蒜"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/譱別/醢彖 vCard"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/譱別/醢徂 JPilot"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/譱別/醢徂 單叟賭"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/譱別/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/譱別/鯏珍杯彖塢"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/譱別/苗遡不"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/譱別/妥凖敗"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/譱別/阻夘塢"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/當凖啻"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/當凖啻/醢彖 祖凖啻"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/當凖啻/醢彖 拝孃"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/當凖啻/醢彖 仭佶"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/當凖啻/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/當凖啻/鯏珍杯彖塢"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/當凖啻/苗遡不"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/粁嘖簒妖淋"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/粁嘖簒妖淋/桐佻參孥壮 徳別 LDIF"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/簣佻溶覗"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/簣佻溶覗/靤 侑惑卅葉"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/醢彖 祖凖啻"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/醢彖 拝孃"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/醢彖 仭佶"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/鯏珍杯彖塢"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/苗遡不"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "當凖啻 e-mail"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "當凖嗄 卜蒜"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "桐':"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "苗遡不"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "靉柎"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "誅葉:"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "誅丶:"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "靤蛭彖力:"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "苗遡不 祖凖嗾()"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "筅篇力 徂珍棉塢 祖凖嗾()?"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "遉"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+" 汰崛ぴ 徂珍棉塢 仭佶 徨 祖凖喇 `%s' ? \n"
+"駛殤 徂珍棉塢 圖蒙防 仭佶, 祖凖喇 怠津 佚凖療單力 枠椀明折 仭佶."
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "熙蒙防 仭佶"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "霑佶 堊 祖凖喇"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "筅篇力 徂珍棉塢 `%s' ?"
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "醢徂 墨夘嘖孥挿, 療 彡遡腕 畋賭吐塢 佻冒巖彬."
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "醢徂 墨夘嘖孥挿, 療 彡遡腕 畋賭吐塢 祖凖嗄 卜蒜."
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "黌倉 祖凖嗄 卜蒜 孑丶枸 墨臨賭塹彖力."
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"黌倉 祖凖嗄 卜蒜 墨臨賭塹彖力,\n"
+"療 彡遡腕 畋賭吐塢 力徂 佻冒巖彬 祖凖"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"酖 彡遡腕 墨臨賭壞彖塢 祖凖嗄 卜蒜,\n"
+"遡 嘖從凖力 力徼 (佻厦嵶)."
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"酖 彡遡腕 陸 墨臨賭壞彖塢 祖凖嗄 卜蒜,\n"
+"陸 嘖從夘塢 力廢 徳別 祖凖嗄炉 卜蒜."
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"酖 彡遡腕 陸 墨臨賭壞彖塢 祖凖嗄 卜蒜,\n"
+"陸 嘖從夘塢 力廢 徳別 祖凖嗄炉 卜蒜."
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "靉揺緬 侑 墨臨賭壞彖領 祖凖嗄炉 卜蒜"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "誅臨賭壞彖領 祖凖嗄炉 卜蒜"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "靉揺緬 祖凖嗄κ 卜冨"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "酖 彡遡腕 侑淺堊塢 佻冒巖彬 祖凖"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr ""
+"黌倉 祖凖嗄 卜蒜 墨臨賭塹彖力, 療 彡遡腕 畋賭吐塢 力徂 佻冒巖彬 祖凖"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "酖 彡遡腕 墨臨賭壞彖塢 祖凖嗄 卜蒜, 遡 嘖從凖力 力徼 (佻厦嵶)."
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "酖 彡遡腕 陸 墨臨賭壞彖塢 祖凖嗄 卜蒜, 陸 嘖從夘塢 力徼."
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "酖 彡遡腕 陸 墨臨賭壞彖塢 祖凖嗄 卜蒜, 陸 嘖從夘塢 力徼."
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "靉揺緬 侑 墨臨賭壞彖領 祖凖嗄炉 卜蒜"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "誅臨賭壞彖領 祖凖嗄炉 卜蒜"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "粁堙卞妬"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "當凖嗄 卜蒜"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "鑽和"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "當凖啻 e-mail"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "舍孃"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "霑佶"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "鹽叟賭 LDAP"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "當凖啻 碗覗陸攸脱"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "鑽和瓶堊 祖凖啻"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "靤浜υ冒"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "靉佚凖綴杜倫"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "靉揺緬"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "黌從凖領 彫遡惑 堙厖ξ從馬 佻佚凖綴杜倫...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "靉冒攸塢 壇 佻廢掴楊杜倫 料嘖孃力馬 卅旁"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "鑷僧崚徂"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "賭從良"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "鯱崚徂"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "睫阻不良"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "麌陸"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "徒杜品"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "誅夘淮砺品"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "遉冕品"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/簣珍塢..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/苗遡不"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/盟嘖夫腕圖..."
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/譱別/靉嗅壮"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/譱別/靉嗅壮 丶變枦"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/譱別/妥凖敗 仭价 渭厠徂胞"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/譱別/妥凖敗 凖珍杯彖塢 珍巳"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/譱別/靤匹栂壮 徳別"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/譱別/嘖宋不 徳別"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/譱別/嘖宋不 丶槻瓶"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/鯏珍杯彖塢/Undo"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/鯏珍杯彖塢/Redo"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/鯏珍杯彖塢/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/鯏珍杯彖塢/敏攸塢"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/鯏珍杯彖塢/誅丶跡壮"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/鯏珍杯彖塢/嘖宋不"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/鯏珍杯彖塢/嘖宋不 冕 檀堊壞"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/鯏珍杯彖塢/苗μ不 徨"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/鯏珍杯彖塢/Advanced"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 巳堙簒 料攸"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 巳堙簒 徙賭田"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 嗅從 料攸"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 嗅從 徙賭田"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 佻涸塹 厮痛"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 胞療蜘 厮痛"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 佻佚凖栂κ 厮掴"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/鯏珍杯彖塢/Advanced/鄙 料嘖孃良 厮掴"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 巳堙簒 料攸"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 巳堙簒 徙賭田"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 嗅從 料攸"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 嗅從 徙賭田"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 厮掴"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/鯏珍杯彖塢/Advanced/苗遡不 掴 胞涼 厮痛"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/鯏珍杯彖塢/馬厠孕 佻塹淮品 疎攸"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/鯏珍杯彖塢/馬厠孕 徨 掴彷 厮痛"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/鯏珍杯彖塢/疱塹敘碗堊領"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/蒜妄"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/蒜妄/誅葉"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/蒜妄/誅丶"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/蒜妄/靤蛭彖力"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/蒜妄/從厦堽 祖凖啻"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/蒜妄/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/蒜妄/誅瞭賭杜脱 通 廢槻廢彫"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/蒜妄/讀陸碧"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/蒜妄/北祖杜倫"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/粁嘖簒妖淋/當凖嗄 卜蒜"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/粁嘖簒妖淋/疎模"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/粁嘖簒妖淋/筅"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/粁嘖簒妖淋/---"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/粁嘖簒妖淋/鯏珍杯彖塢 斛徇枸ν 凖珍穆碗詫"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/粁嘖簒妖淋/隍槻瓶 PGP"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/粁嘖簒妖淋/鋲簒彖領 PGP"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 徳別 療 τ燐\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "酖 彡遡腕 墟浜壮 堙睦塹徼 涸嘖瀕\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "靉揺緬 届厖壮 檀壞彖領."
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "靉揺緬 届厖壮 message reply/forward."
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "譱別 %s 療 τ燐\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "酖 彡遡腕 墟浜壮 厦斃σ %s\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "譱別 %s 佻厦嵶κ."
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "酖 彡遡腕 侑淺堊塢 %s."
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "貮嘖: %s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "酖 彡遡腕 墟浜壮 歪燐 涸嘖瀕 棉嘖."
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [鯏珍馬彖良]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 黌從夘塢 棉嘖%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "黌從夘塢 棉嘖%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "酖 徊惣僧 墟浜孥挿."
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "靉嗅壮"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "靉姪 Subject 佻厦嵶. 單 佻嗅壮?"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "療 彡遡腕 墟浜壮 嗤瓶亘 墟浜孥挿ψ."
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"鐶巳墨徂 攸佗 通 廢柘斌僧倫 佻枹 療 徊惣僧.\n"
+"鐶賭υ, 怠椿-盟嗚, 攸佗 佚凖 廢槻卅徊論."
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "卅佗盟嗹 佻揺緬 侑 廢柘斌僧陸 棉嘖 掴 %s ."
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "酖 彡遡腕 畋賭吐塢 棉嘖 outbox."
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "酖 彡遡腕 變訴塢 北折, 廢槻廢栂惑 和卅力葉 δ杜塢豆冒塹簒 `%s'."
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "療 彡遡腕 斃ξ不 侑宋 掴嘖孃 徳別\n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"酖 彡遡腕 墨臨賭壞彖塢 墨蔦彖領 巳堙 蜘惑 棉嘖 \n"
+"%s 料 %s.\n"
+"單 佻嗅壮?"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "療 彡遡腕 攸佗啻塢 攸馬模徊\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "療 彡遡腕 徂珍棉塢 嘖倉品 棉嘖\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "棉嘖 淌卩...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "療 彡遡腕 變訴塢 仭佶 淌卩\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "療 彡遡腕 佻嘖宋不 棉嘖 淌卩\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "播療厦彖良 Message-ID: %s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "δ牧夫舛溶 廢卜 嘖從凖領 棉嘖...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "塢 MIME"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "鯱斃σ"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "δ:"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "靉嗅壮 棉嘖"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "靉嗅壮 丶變枦"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "靉北喪塢 仭佶 淌卩 佻嗅壮 丶變枦"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "碗力徂"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "妥凖敗 仭价 渭厠徂胞"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "嘖宋不"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "嘖宋不 徳別"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "靤匹栂壮"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "靤匹栂壮 徳別"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "隍槻瓶"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "嘖宋不 丶槻瓶"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "鯏珍穆碗"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "鯏珍杯彖塢 斛徇枸ν 凖珍穆碗詫"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "馬參僧倫 厮痛ψ"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "馬厠孕 徨 掴彷 厮痛"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "酖侑宋斌慘品 塢 MIME."
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "譱別 療 τ燐 疎 佻厦嵶κ."
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "盟嘖夫腕圖"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "誅蔦彖領"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "妄"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "桐' 徳別"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "誅輿猟良 厮掴 斛徇枸慙馬 凖珍穆碗 療侑宋斌慘品: `%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"徇枸κ 凖珍穆碗 掴哘 侑礎世.\n"
+"靤浜孑從 和σ彖塢 侑話途?\n"
+"group id 侑話途: %d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "鐶σ彖力 侑話途 group id: %d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "浜涸嗜徂 徳別: %s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "黌從凖領: 忻δ 廢 嗤腕堙勁覗折惑 侑話途\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "酖 彡遡腕 攸侖嘖不 斛徇枸κ 凖珍穆碗\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "酖 彡遡腕 攸佗啻塢 徳別\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "酖 彡遡腕 侑淺堊塢 冒料盲\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "酖 彡遡腕 佻嘖宋不 棉嘖 淌卩."
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "鐶卅塢 徳別"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "δ溶徂塢嗹 廢 棉嘖"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "稘 棉嘖 怠模 斃ξ杜. δ溶徂塢嗹 廢 輪惑?"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "δ溶徂塢嗹"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr " 渭厠徂防"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr " 汰崛ぴ 攸嘖腕孥壮 杼駄藁 `%s' ?"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "喪塹嗾彖塢 杼駄藁"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "鼠ξ不"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "鯏珍杯彖塢 祖凖嗾"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "簣珍塢 力徼 腕和"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "鯏珍杯彖塢 佻漬和秒 侑 腕和"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "當凖啻 e-mail 和'凉墨彖."
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "靉墟β力 料珍塢 ν' 堊 變挿杜倫."
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "鯏珍杯彖塢 腕和瓶圖 珍陸"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "桐' 通 嗤瓶釦"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "靤旌怖"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "桐'"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "靤旌瓶慄"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "當凖啻 e-mail"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "麌力陸"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "馬簒"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "良"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "勇良塢"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "閘瓶塢塢"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "料淌領"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "鑽力徇 珍陸"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "疽夘怠塢 墨夘嘖孥挿"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "珍ぴ慯, 徳別詫 徨 OK."
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "譱別 療 嗚苗舛墮嗔 料 侑苗壮良 届厖壮 祖凖嗄炉 卜蒜."
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "酖 彡遡腕 侑淺堊塢 徳別."
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "鯏珍杯彖塢 祖凖嗄 卜蒜"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 霤凖廢夘塢 徳別 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "譱別"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "簣珍塢 力徼 祖凖嗄 卜蒜"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "靉墟β力 徊惣壮 料旌 拝孃."
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "鯏珍杯彖塢 珍陸 拝孃"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "鄙旌 拝孃"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "當凖喇 拝孃"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "鄙况陸 祖凖喇"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "霤凖勇嘖不 祖凖喇 e-mail 淺 拝孃 卜椀墨 嘖勁緬論"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "鯏珍杯彖塢 佻漬和秒 侑 拝孃"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "簣珍塢 力徼 拝孃"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "鯏珍杯彖塢 仭佶"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "彭彫墮 力徼 料旌 仭佶:"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "醢彖 仭佶"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "彭彫墮 料旌 力從 仭佶:"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "譱別 療 喩嵒 料 届厖壮 JPilot."
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "鐶卅塢 徳別 JPilot"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "鯏珍杯彖塢 攸佗 JPilot"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "簣珍塰廢 侖遼塢 祖凖喇 e-mail"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "簣珍塢 力徂 攸佗 JPilot"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "嗤枸 'つ料領 單叟賭詫"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "酖 彡遡腕 'つ料塢嗹 單叟賭詫"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "鄙盟枹孥僧倫 單叟賭 LDAP"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "桐' 徼斂"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "靉參"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 霤凖廢夘塢 單叟賭"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "眩攸 佻柎釦"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "誨不賭Η 佻柎釦"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " 霤凖攸侖嗚 "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "靉徇 ν' 通 丶痛明淌領"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "霑厦蒙 通 丶痛明淌領"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "訴輿孕 ()"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "軈睦浜遡慘品 厦斃σ 凖旁蒙堊壞"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "鑽力徇"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "鯱无敏杜"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "簣珍塢 力徂 單叟賭 LDAP"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "鄙盟枹孥僧倫 LDAP - 徂側 汰敝 佻柎釦"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "鄙况料() 汰攸() 佻柎釦"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "酖 彡遡腕 侑淺堊塢 汰旁 佻柎釦 單叟賭 - 徨堊力廢墮 很喪力簒淮"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "譱別 療 喩嵒 料 届厖壮 vCard."
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "鐶賭υ 徳別 vCard"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "鯏珍杯彖塢 攸佗 vCard"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "簣珍塢 力徂 攸佗 vCard"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "緞嗤碗壞彖塢"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "冨料湟 仭佶 徳別 mbox 通 攸佗嗾"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "蛭δ料 仭佶:"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "緞嗤碗 徳別:"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " 鐶卅塢... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "鐶賭υ 徳別 通 屠嗤碗壞"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "療 彡遡腕 攸佗啻塢 墨瞭η孀礎 徳別\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "鐶卅塢 仭佶"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "筈栂"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "δτ盟陸"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "賭覗"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "誅柯"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "碗力徂防"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "醢彖霑佶"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "`%c' 療 溶崚 勇嘖不瓶 料旌 仭佶."
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "霑佶 `%s' 忖 τ燐."
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "酖 彡遡腕 嘖從夘塢 仭佶 `%s'."
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/黌從夘塢 力徼 仭佶..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/霤凖瞥杜孥壮 仭佶..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/苗遡不 仭佶"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "麸碗嵶不 墨柯"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/霤凖廢夘塢 攸 力徂揺 棉嘖鼠"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/霤凖怠蔦彖塢 津凖從 仭佻"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/嬲壮 棉嘖..."
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/宋僧堊嵒塢"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/霤凖槻盟塢塢 墨瞭賭杜脱"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/苗遡不 墨瞭賭杜脱"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "黌從凖領 和盟嘖 佚凖婆冂 仭佻...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "醢廢"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "酖侑淺堊陸"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "嘖僧很世溶 ξ届厖礎 仭佶...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "嘖僧很世溶 ξ届厖礎 仭佶..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "霤凖淺壞ね 仭佶 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "霤凖淺壞ね 仭佶 %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "霤凖怠蔦彖塢 津凖從 仭佻"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "篥凖從 仭佻 怠津 佚凖怠掴彖力. 靤歪忖不?"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "霤凖怠掴徼ね 津凖從 仭佻..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "酖 彡遡腕 佚凖怠蔦彖塢 津凖從 仭佻."
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "霤凖怠掴徼ね 徨 津凖彖 仭佻..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "霤凖廢夘塢 攸 力徂揺 棉嘖鼠 徨θ 仭佶組..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "霑佶 %s 和卅力\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "宋僧堊嶮ね 棉嘖 %s ..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "卅佗盟嗹 佻揺緬 侑 攸彖淋爽杜陸 棉嘖ψ `%s'."
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"彭彫墮 料旌 力從 仭佶:\n"
+"(冕殤 汰崛ぴ 嘖從夘塢 仭佶, 冕 勇嘖不 丶槻双防,\n"
+" 掴珍編 `/' 胞涼 料旌)"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "彭彫墮 力徼 料旌 通 `%s':"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "霤凖瞥杜孥壮 仭佶"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"哘 仭佶 棉嘖 `%s' 怠津 徂珍姪力.\n"
+"麸卅彡 汰崛ぴ 徂珍棉塢?"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "苗遡不 仭佶"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "酖 彡遡腕 徂珍棉塢 仭佶 `%s'."
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "麸碗嵶不 墨柯"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "苗遡不 徨 棉嘖 墨柯冒?"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"麸卅彡 徂珍棉塢 嗚夘輪釦 `%s' ?\n"
+"(貮嘖 鈬 徂珍妄脊慯 追嗚)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "苗遡不 嗚夘輪釦"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "麸卅彡 徂珍棉塢 和巳墨徂 攸佗 IMAP4 `%s'?"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "苗遡不 和巳墨徂 攸佗 IMAP4"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "筅篇力 徂珍棉塢 墨瞭賭杜脱 `%s'?"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "苗遡不 墨瞭賭杜脱"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "筅篇力 徂珍棉塢 和巳墨徂 攸佗 墨瞭賭杜脱 `%s'?"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "苗遡不 和巳墨徂 攸佗 墨瞭賭杜脱"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "霤凖槻盟塢塢 墨瞭賭杜脱"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "鐶卅塢 墨瞭賭杜脱 通 佚凖槻盟塢."
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "料編 墨瞭賭杜脱:"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 靉柎 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "鄙旌 墨瞭賭杜脱"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "黌壮堙"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "賓"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "鑽廢嵒塢"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "溶津厦彖料"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "圖蒙防 通 淺堊領"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "療廢掴溶"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "酖 彡遡腕 墟浜壮 嗤瓶亘 墨瞭賭杜脱"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "彬藁僧."
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "%d 墨瞭賭杜脱 墟浜僧 (%s 侑淺堊力)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "誅瞭賭杜脱:"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "斗:"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 攸馬模徊...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(眦 廢槻卅徇彬)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(眦 堙揺)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 斛岱爽杜倫...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "酖 彡遡腕 攸彖淋爽不 斛岱爽杜倫."
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "'つ料領 IMAP4 掴 %s 徭卅淌力. δ力很世溶...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "嘖從凖領 'つ料領 INAP4 掴 %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "酖 彡遡腕 佻涸塢 單哘 TLS.\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "療 彡遡腕 徨堊力徂塢 侑双碗澱 徂珍姪領: %s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "療 彡遡腕 淺嘖不 仭佶 廢 徂珍姪良 棉嘖ψ\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "療 彡遡腕 徨堊力徂塢 侑双碗澱 徂珍姪領: 1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "療 彡遡腕 攸牧不 仭佶\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "墨凖療彖 仭佶 %s 療 τ燐\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "佻揺緬 侑 墟浜僧陸 LIST'.\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "酖 彡遡腕 嘖從夘塢 '%s'\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "酖 彡遡腕 嘖從夘塢 '%s' 徨賭田瀕 INBOX\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "療 彡遡腕 嘖從夘塢 嗚夘輪釦: 療彡挿 LIST\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "療 彡遡腕 嘖從夘塢 嗚夘輪釦\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "療 彡遡腕 佚凖瞥杜孥壮 嗚夘輪釦: %s 料 %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "療 彡遡腕 徂珍棉塢 嗚夘輪釦\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "療 彡遡腕 墟浜壮 墨臨賭\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "墟双斌喪 佻揺緬 侑 墟浜僧陸 墨臨賭堊.\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "療 彡遡腕 厦擘岱壮 墨臨賭: %s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "酖 彡遡腕 'つ料塢嗹 單叟賭詫 IMAP4: %s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "酖 彡遡腕 徨堊力徂塢 單哘 IMAP4 : %s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "療 彡遡腕 墟浜壮 侑腕圖 ν杜\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "療 彡遡腕 墟浜壮 仭佶: %s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "酖彡挿 宋塹夘攸脱 IMAP4.\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "酖彡挿 宋塹夘攸脱 IMAP4.\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "療 彡遡腕 掴珍塢 %s 掴 %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(佻喇盟ね 徳別...)"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "療 彡遡腕 侑匹栂壮 棉嘖 掴 %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "療 彡遡腕 嗚椀跡壮 %s %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "佻揺緬 侑 徂墨料領 墨輿猟 imap: STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "佻揺緬 侑 徂墨料領 墨輿猟 imap: EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "佻揺緬 侑 徂墨料領 墨輿猟 imap: CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv 療 溶崚 墨臨賭壞彖塢 UTF-7 %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv 療 溶崚 墨臨賭壞彖塢 %s UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "桐佻參孥壮"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "冨料湟 脱蒙徂 徳別 mbox 仭佶 侑冨料淌領."
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "桐佻參佞溶 徳別:"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "霑佶 侑冨料淌領:"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "鐶卅塢 ν佻參彖良 徳別"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "冒乢墮, 怠椿-盟嗚, 料旌 祖凖嗄炉 卜蒜 ν佻參彖良 徳別."
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "病賭υ 佻妄 LDIF 通 ν佻參 徊爽υ ν杜 壮夘怠圖."
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "譱別 ν佻參彖力."
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "鐶賭υ, 怠椿-盟嗚, 徳別."
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "靉墟β力 徊惣壮 料旌 祖凖嗄炉 卜蒜."
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "靉揺緬 侑 淺堊領 佻巳 LDIF."
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "嗤枸 ν佻參彖力 徳別 LDIF."
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "鐶賭υ 徳別 LDIF"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "鄙旌 徳別"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "靉姪 LDIF"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "桐' 壮夘怠堊"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "疽夘怠"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "鐶卅塢"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "當凖嗄 卜蒜 :"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "鄙旌 徳別 :"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "双瓶 :"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "桐佻參孥壮 徳別 LDIF 祖凖嗄 卜蒜"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "鄙攸"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "篩巳"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "粁届厖礎ρ 侑 徳別"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "疽夘怠塢"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "阻ξ淺塢"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "鑚夘輿領 力徂 棉嘖ψ"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "閘λ孥僧倫"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "麕喪彖力"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "鑚夘輿領"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "彬藁僧 (%d 棉嘖(ψ) (%s) 墟浜僧)"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "彬藁僧 (療輿 力徂 棉嘖ψ)"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "酖彡挿 'つ料領"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "酖彡挿 宋堙淋鋲λ礎Η"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "疎模墨彖力"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr "訴輿孕"
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "阻ξ淌力 (%d 力徂 棉嘖ψ)"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "阻ξ淌力 (療輿 力徂 棉嘖ψ)"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "靤 墟浜僧陸 佻枹 墟双斌瓶 津冕 佻揺緬."
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "墟浜僧倫 力從 佻枹 通 攸佗嗾 %s...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: 鑚夘輿領 力徂 棉嘖ψ"
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "'つ燐ね腕 單叟賭詫 POP3: %s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "酖 彡遡腕 'つ料塢嗹 單叟賭詫 POP3: %s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "疱堙淋鋲λ礎ρ..."
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "鑚夘葉ね 棉嘖 廢 %s..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "鑚夘葉ね 胞蒙胞嘖 力徂 棉嘖ψ (STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "鑚夘葉ね 胞蒙胞嘖 力徂 棉嘖ψ (LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "鑚夘葉ね 胞蒙胞嘖 力徂 棉嘖ψ (UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "鑚夘葉ね 厦斃σ 棉嘖ψ (LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "苗遡僂溶 棉嘖 %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "蛭歪浜"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "鑚夘葉ね 棉嘖 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "鑚夘葉ね 棉嘖 (%d 棉嘖(ψ) (%s) 墟浜僧)"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "酖彡挿 'つ料領."
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "靤 和厦唾 佻枹 墟双斌喪 佻揺緬."
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"靤 和厦唾 佻枹 墟双斌喪 佻揺緬:\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "酖輿 廢蒙力馬 勇喘 料 追嗚."
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "酖 彡遡腕 佗啻塢 徳別."
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "靉揺緬 嗜謀堊."
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "'つ料領 攸牧不 廢陳遡杜浜 範嘖詫."
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "麕夘輪釦 攸駄亘彖力."
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr ""
+"麕夘輪釦 攸駄亘彖力:\n"
+"%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "酖彡挿 奏堙淋鋲λ礎Η."
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"酖彡挿 奏堙淋鋲λ礎Η:\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "訴輿孕 單哘."
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "北折杜倫 嗚喪彖力\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "鑚夘葉ね 力廢 棉嘖 廢 %s %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "彭彫墮 仭厦蒙 通 %s 料 %s:"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "彭彫墮 仭厦蒙"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "孀料 侑塹墨盲"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"譱別 `%s' 忖 τ燐.\n"
+"酖溶嵬夫 嘖從夘塢 仭佶."
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "g_thread 療 丶辻夘葉ぴ慯 glib.\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG 療 徨堊力很杜 料姪嵶, 疎 料辻 嘖倉 彭厶ρ.\n"
+"δ北折杜 丶辻夘曜 OpenPGP."
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "嵒彖領: %s [關禧]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [address] 廢痛夘塢 廢卜 通 力從馬 棉嘖"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" 廢痛夘塢 廢卜 嘖從凖領 侑匹栂僧倫 徊惣僧蛭\n"
+" 徳別ψ"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 墟浜壮 力廢 棉嘖"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 墟浜壮 力廢 棉嘖 通 徨θ 攸佗哘"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 廢彫嗅壮 徨 廢痛盟津陸 棉嘖"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [folder]... 佻冒攸塢 攸覗蒙燐 胞蒙胞嘖 棉嘖ψ"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr ""
+" --status-full [folder]...\n"
+" 佻冒攸塢 嘖僧 墨嵶炉 仭佶"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 凖嵒 廢通素歪崚領"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 佻冒攸塢 胆 掴廢痛 徂編"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 徂珍塢 ξ届厖礎 侑 彭厶 徂編"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr " 療攸彭叨杜 棉嘖. 麸卅彡 徂編?"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "貮嘖 淌叮"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "篥冕 療廢彫嗅僧 棉嘖 - 淌叮. 品塢 攸卅?"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "忖 攸侖歸力 ξ柯 Sylpheed.\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/譱別/霑佶"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/譱別/霑佶/黌從夘塢 力徼..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/譱別/霑佶/霤凖瞥杜孥壮..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/譱別/霑佶/苗遡不 仭佶"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/譱別/簣珍塢 嗚夘輪釦..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/譱別/簣珍塢 嗚夘輪釦..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/苗遡不 嗚夘輪釦"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/譱別/霑佶/---"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/霤凖廢夘塢 攸 力徂揺 棉嘖鼠"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/譱別/霑佶/霤凖廢夘塢 攸 力徂揺 棉嘖鼠 徨θ 仭佶組"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/霤凖怠蔦彖塢 津凖從 仭佻"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/譱別/桐佻參孥壮 徳別 mbox"
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/譱別/緞嗤碗壞彖塢 徳別 mbox..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/譱別/麸碗嵶不 墨柯"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/譱別/妥凖敗 冕..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/譱別/簟嬲孥壮..."
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/譱別/靤礎跡壮 妥 'つ料領"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/譱別/品塢"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/鯏珍杯彖塢/苗μ不 和馬從凖領"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/鯏珍杯彖塢/嬲壮 佻塹淮詫 棉嘖"
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/鯏珍杯彖塢/靉柎 棉嘖ψ..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/篥凖從 仭佻"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/勇嘖 棉嘖"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 ξ嘖簒妖淋ψ"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 ξ嘖簒妖淋ψ/極藁冒 堙睦"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 ξ嘖簒妖淋ψ/極藁冒"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 ξ嘖簒妖淋ψ/屠嘖"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 ξ嘖簒妖淋ψ/酖輿"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/蒜妄/靉冒攸塢 淺 侑蛭彖塢/霑療蒙 嘖僧"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/蒜妄/鑠凖妖 津凖從 仭佻"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/蒜妄/鑠凖輿 和盟嘖 佚凖婆冂 斃τ壞"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/蒜妄/麩參孥壮"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/蒜妄/麩參孥壮/ 力妖厦"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/蒜妄/麩參孥壮/ 厦斃σ詫"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/蒜妄/麩參孥壮/ 珍塹"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/蒜妄/麩參孥壮/ 廢槻卅徇彬詫"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/蒜妄/麩參孥壮/ 歪賭嶮彖淌"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/蒜妄/麩參孥壮/ 堙溶"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/蒜妄/麩參孥壮/ 徂彫姪領冤 墨蒙碗詫"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/蒜妄/麩參孥壮/ 佻變挿墨"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/蒜妄/麩參孥壮/鑠凖溶 療侑淺堊陸"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/蒜妄/麩參孥壮/ 徊盟津領冤"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/蒜妄/麩參孥壮/酖佻墟β力"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/蒜妄/麩參孥壮/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/蒜妄/麩參孥壮/ 斷腕堊領冤"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/蒜妄/麩參孥壮/ 嗤祖僧倫"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/蒜妄/麩參孥壮/舍孃孥壮 攸 堙溶"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/蒜妄/霤凖婆冂 和馬從凖領"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/蒜妄/鯱敘碗堊塢 徨 和馬從凖領"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/蒜妄/馬厠孕 徨 和馬從凖領"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/蒜妄/嘖僧徂塢 佻妄 通 佻冒旁..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/蒜妄/霤凖編 掴"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/蒜妄/霤凖編 掴/鄙嘖孃力馬 棉嘖"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/蒜妄/霤凖編 掴/靉佚凖栂慙馬 棉嘖"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/蒜妄/霤凖編 掴/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/蒜妄/霤凖編 掴/靉佚凖栂慙馬 療侑淺堊力馬 棉嘖"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/蒜妄/霤凖編 掴/鄙嘖孃力馬 療侑淺堊力馬 棉嘖"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/蒜妄/霤凖編 掴/靉佚凖栂慙馬 力從馬 棉嘖"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/蒜妄/霤凖編 掴/鄙嘖孃力馬 力從馬 棉嘖"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/蒜妄/霤凖編 掴/靉佚凖栂慙馬 佻變挿杜惑 棉嘖"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/蒜妄/霤凖編 掴/鄙嘖孃力馬 佻變挿杜惑 棉嘖"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/蒜妄/霤凖編 掴/靉佚凖栂慙馬 棉嘖, 徂彫姪力馬 墨蒙碗詫"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/蒜妄/霤凖編 掴/鄙嘖孃力馬 棉嘖, 徂彫姪力馬 墨蒙碗詫"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/蒜妄/霤凖編 掴/粁柤 仭佶"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/蒜妄/誅掴彖 堊駄秒/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/蒜妄/誅掴彖 堊駄秒"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/蒜妄/誅掴彖 堊駄秒/_A徭詫壮扶料"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/7bit ascii (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/Unicode (UT_F-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/組δ力ぷ厦佚篇慄 (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/組δ力ぷ厦佚篇慄 (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/組δ力ぷ厦佚篇慄 (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/眩猛κ嗹冒 (ISO-8859-1_3)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/眩猛κ嗹冒 (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/舍澱慄 (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/孀澱慄 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/詆夘棉恥 (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/詆夘棉恥 (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/詆夘棉恥 (KOI8-_U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/詆夘棉恥 (_Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/駮藁嗹冒 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/駮藁嗹冒 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/駮藁嗹冒 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/駮藁嗹冒 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/麸厦歸料 防堊篇慄 (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/卅追脱蔑 防堊篇慄 (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/卅追脱蔑 防堊篇慄 (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/詆堊篇慄 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/誅凖篇慄 (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/誅凖篇慄 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/訴嗹冒 (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/蒜妄/誅掴彖 堊駄秒/訴嗹冒 (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/蒜妄/δ牧不 力從葉 廢卜"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/蒜妄/蛭δ良 堙睦 棉嘖"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/蒜妄/靉冒攸塢 彭嗹 攸馬模從"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/蒜妄/鑪徂塢 嗤瓶亘"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/貮嘖"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/貮嘖/鑚夘輿塢"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/貮嘖/鑚夘輿塢/簗 佻塹淮惑 攸佗嗾"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/貮嘖/鑚夘輿塢/簗 徨θ 攸佗哘"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/貮嘖/鑚夘輿塢/麕喪孥壮 墟浜僧倫"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/貮嘖/鑚夘輿塢/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/貮嘖/δτ盟塢 廢痛盟津陸 棉嘖"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/貮嘖/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/貮嘖/鄙佗啻塢 力徂 棉嘖"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/貮嘖/δ佻廢嘖"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/貮嘖/δ佻廢嘖"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/貮嘖/δ佻廢嘖/徨ν"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/貮嘖/δ佻廢嘖/廢槻卅徇彬"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/貮嘖/δ佻廢嘖/墨瞭賭杜脱"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/貮嘖/霤凖嗅壮"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/貮嘖/霤凖嗅壮 冕 徊盟津領"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/貮嘖/霤凖嗤厮葉彖塢"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/貮嘖/霤凖勇嘖不"
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/貮嘖/誅丶跡壮"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/貮嘖/苗遡不"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/貮嘖/靉變挿冒"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/貮嘖/靉變挿冒/厦舵塢"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/貮嘖/靉變挿冒/倫塢"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/貮嘖/靉變挿冒/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/貮嘖/靉變挿冒/靉變挿不 冕 療侑淺堊良"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/貮嘖/靉變挿冒/靉變挿不 冕 侑淺堊良"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/貮嘖/靉變挿冒/靉變挿不 徨 冕 侑淺堊陸"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/貮嘖/勇良塢"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/粁嘖簒妖淋/簣珍塢 廢槻卅徇彬 掴 祖凖嗄炉 卜蒜"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/粁嘖簒妖淋/网蒙墟孥壮 徨 棉嘖 仭价"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/粁嘖簒妖淋/网蒙墟孥壮 徂彫姪陸 棉嘖"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/粁嘖簒妖淋/黌從夘塢 侑宋斌 豆蒙墟孥僧倫"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/粁嘖簒妖淋/黌從夘塢 侑宋斌 豆蒙墟孥僧倫/疱塹輿塢淮"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/粁嘖簒妖淋/黌從夘塢 侑宋斌 豆蒙墟孥僧倫/ 佻姪 `δ'"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/粁嘖簒妖淋/黌從夘塢 侑宋斌 豆蒙墟孥僧倫/ 佻姪 `誅葉'"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/粁嘖簒妖淋/黌從夘塢 侑宋斌 豆蒙墟孥僧倫/ 佻姪 `斗'"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/粁嘖簒妖淋/苗遡不 佻徭碗跡僧 棉嘖"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/粁嘖簒妖淋/彬藁壮"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/粁嘖簒妖淋/λ力 嶮厠遡"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/誅瞭η孀礎ρ"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/誅瞭η孀礎ρ/麸μ慘 料盟枹孥僧倫..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/誅瞭η孀礎ρ/鄙盟枹孥僧倫 豆蒙墟..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/誅瞭η孀礎ρ/疎模..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/誅瞭η孀礎ρ/筅..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/誅瞭η孀礎ρ/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/誅瞭η孀礎ρ/鄙盟枹孥僧倫 佻塹淮惑 攸佗嗾..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/誅瞭η孀礎ρ/黌從夘塢 力徂 和巳墨徂 攸佗..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/誅瞭η孀礎ρ/鯏珍杯彖塢 和巳墨廢 攸佗喇..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/誅瞭η孀礎ρ/勇良塢 佻塹淮品 攸佗"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/簣廢痛/靉哘体彬"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/簣廢痛/靉哘体彬/疥婆κ嗹防"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/簣廢痛/靉哘体彬/駮藁嗹防"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/簣廢痛/FAQ"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/簣廢痛/FAQ/疥婆κ嗹防"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/簣廢痛/FAQ/遉妖蜘防"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/簣廢痛/FAQ/錦仭林慄品"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/簣廢痛/FAQ/耙僧稚旒防"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/簣廢痛/FAQ/斤遡κ嗹防"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/簣廢痛/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "黌從卆ね 馬模徇 廢卜...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "舅模徇 λ力: 療彡挿 厦斃歸領 墨蒙碗 %d\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "徂墨料力.\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "眦晧惣徂"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "療輿"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "勇料 塢侖 厦敖μ杜倫 廢卜 %d 料 %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "眦 'つ料領"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "'つ料領 療輿. 隍'つ料塢嗹?"
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "麸碗嵶不 墨柯"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "苗遡不 徨 棉嘖 墨柯冒?"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "簣珍塢 嗚夘輪釦"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"彭彫墮 厦旆想孥僧倫 嗚夘輪防.\n"
+"駛殤 從料 忖 τ燐, Ё 怠津 佚凖淺堊力\n"
+"宋塹輿塢淮."
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "麕夘輪冒 `%s' 忖 τ燐."
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "麕夘輪冒"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"酖彡挿 嘖從凖領 嗚夘輪防.\n"
+"輜嵬夫, 津冕 徳別 忖 τ燐脊, 疎 療 輿ぴ\n"
+"侑宋 攸佗嗾 壞."
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - 霑佶"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - 貮嘖"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/δ佻廢嘖"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/δ佻廢嘖 徨ν"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/δ佻廢嘖 廢槻卅徇彬廢"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/δ佻廢嘖 墨瞭賭杜脱"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/霤凖嗅壮 珍巳"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/霤凖嗅壮 珍巳 冕 徊盟津領"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/霤凖嗤厮葉彖塢"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "鑚夘輿塢"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "鑚夘輿塢 力廢 棉嘖"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "鑚夘輿塢 徨"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "鑚夘輿塢 力廢 棉嘖 通 徨θ 攸佗哘"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "δτ盟塢 棉嘖() 淌卩"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "黌從凖領 棉嘖"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "醢徂 棉嘖"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "δ佻廢嘖"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "δ佻廢嘖 料 棉嘖"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "δ佻廢嘖 徨ν"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "δ佻廢嘖 徨ν"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "霤凖嗅壮"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "霤凖嗅壮 棉嘖"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "苗遡不 棉嘖"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "彬藁壮"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "彬藁壮 佻變挿杜品 侑話途"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "鄙嘖孃良 療侑淺堊良 棉嘖"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "鄙盟枹孥僧倫"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "麸μ慘 料盟枹孥僧倫"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "鐶巳墨徂 攸佗"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "鄙盟枹孥僧倫 攸佗嗾"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "'つ料領 療輿. 詭礎陸墮 料 λ藁脱, 殤 丶'つ料塢嗹."
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr " 丶'つ料陸. 詭礎陸墮 料 λ藁脱, 殤 廢'つ料塢嗹."
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "蛭δ"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "品塢 脱ぇ 侑惑卅揺?"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "療溶嵬夫 佗啻塢 塢抑喪徂 徳別\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "鑚夘葉ね 棉嘖 廢 %s %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "療 彡遡腕 侑淺堊塢 徳別 mbox.\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "療侑宋斌慘品 届厖壮 徳別 mbox: %s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "療侑宋斌慘 畋嫩彖良 mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "療溶嵬夫 廢痛夘塢 塢抑喪徂 徳別\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"變訴津力 療攸班歸良 厮掴 From:\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "變訴津力 %d 棉嘖ψ.\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "療 彡遡腕 嘖從夘塢 lock-徳別 %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "冕殤 溶嵬夫, 忖夫訴堙 'flock' 攸勇嘖 'file'\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "療 彡遡腕 嘖從夘塢 %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "嗚夘輪冒 攸蔑冱 ξ柯 侑話途詫, 淌冒ね...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "療 彡遡腕 攸駄亘孥壮 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "療侑宋斌慘品 塢 駄亘孥僧倫\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "療 彡遡腕 厦畋模釦彖塢 %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "療 彡遡腕 和勁攸塢 嗚夘輪釦 掴 燐妄.\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "緞嗤碗壞ね 棉嘖 %s %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "料編 佻塹淮詫 棉嘖"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "料編 堙睦:"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "卅範徼彖塢 凖忍嘖"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "靉柎 料攸"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "靉柎"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "酖彡挿 佻柎釦"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "嬲僧品 厮掴 療 變訴津力"
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "簣嗔芭孕 佻涸塰 棉嘖; 侑歪忖不 胞涼?"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "簣嗔芭孕 胞涼 棉嘖; 侑歪忖不 佻涸塰?"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "靉柎 攸胞涙杜"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 棉嘖...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "妥凖敗 冕"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "霤凖佗啻塢"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "霽啻塢 佻彭卮 τ燐折惑 徳別?"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "酖 彡遡腕 畋賭吐塢 徳別 `%s'."
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "簟嬲"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"彭彫墮 墨輿猟 漬嬲:\n"
+"(`%s' 怠津 攸勇療力 ν杜斗 徳別)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"誅輿猟良 厮掴 漬嬲 療侑苗壮良:\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "療 彡遡腕 墨丶跡壮 %s %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "酖 彡遡腕 廢痛夘塢 徳別 佻變挿亘.\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "仭佶 侑冨料淌領 δ杜塢淮 掴 徂筈栂炉.\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "誅丶世溶 棉嘖 %s%c%d %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "鑽堊領κ 力妖 冒堊模擘 %s = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/δ牧不"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/δ牧不 "
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/靉冒攸塢 冕 堙睦"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/妥凖敗 冕..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/霤凖廢夘塢 丶槻瓶"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 MIME...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "賓 MIME"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "屠嘖"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "北祖杜倫"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "鐶賭υ \"霤凖廢夘塢 丶槻瓶\", 殤 斷和不 壇"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "酖 彡遡腕 畋賭吐塢 歪燐 涸嘖瀕 棉嘖."
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "δ牧不 "
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"彭彫墮 墨輿猟 通 廢痛夘墺 徳別:\n"
+"(`%s' 怠津 攸勇療力 料 箆馬 ν')"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "誅輿猟良 厮掴 佚凖婆冂挿 MIME 療廢厠品: `%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "嘖從卆ね 'つ料領 NNTP 掴 %s:%d ...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "'つ料領 NNTP 掴 %s:%d 怠模 厦擘叟僧. δ力很世溶...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "嘖壮埓 %d 忖 謀柤彖力.\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "墟浜佞溶 嘖壮埓 %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "療 彡遡腕 侑淺堊塢 嘖壮埓 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "療 彡遡腕 墟浜壮 嗤瓶亘 墨瞭賭杜脱\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "療 彡遡腕 佻嗅壮 嘖壮埓.\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "療 彡遡腕 墟浜壮 嘖壮埓 %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "療 彡遡腕 和卅塢 墨瞭賭杜脱: %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "療廢厠品 彫双惣藁 嘖壮妬: %d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "力徂 嘖壮堙 療輿.\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "墟浜佞溶 xover %d - %d %s...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "療 彡遡腕 墟浜壮 xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "墟双斌喪 佻揺緬 侑 墟浜僧陸 xover.\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "療廢厠品 厮掴 xover: %s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "療 彡遡腕 墟浜壮 xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "墟双斌喪 佻揺緬 侑 墟浜僧陸 xhdr.\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "酖 彡遡腕 'つ料塢嗹 單叟賭詫 NNTP: %s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "佻揺緬 侑塹墨盲: %s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "佻揺緬 侑塹墨盲\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "卅佗盟嗹 佻揺緬 侑 廢柘斌僧陸\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "靤 廢柘斌僧陸 墨輿猟 墟双斌喪 佻揺緬\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "霑厦蒙"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[療輿 id 墨夘嘖孥挿]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s瞠椿-盟嗚, 忻田υ 仭厦蒙 通:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"靉覗良 仭厦蒙! 靤和佞溶 變徼...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr " 侑夫υ僧陸 療 變訴津力 和'凉墨從馬 APOP timestamp\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "麌淋阻喇淮 佻揺緬 timestamp 侑夫υ僧陸\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "靉揺緬 侑塹墨盲 POP3\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "療廢厠 廢槻廢椿 UIDL: %s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 斌孺舛溶 攸嘖倉μ品 棉嘖 %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: 靤椀孑冒ね 棉嘖 %d (%d 汰編ψ)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "嗚夘輪釦 攸駄亘彖力\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "堊瞥奏 單哘\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "療 彡遡腕 佻涸塢 單哘 TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "佻揺緬 侑 奏堙淋鋲λ礎Η\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "墨輿猟 療 丶辻夘葉ぴ慯\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "佻揺緬 丶 涸 單哘 POP3\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "不僧倫 墨瞭η孀礎Η...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "料閉杜 %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "阻ξ淌力 淺堊領 墨瞭η孀礎Η.\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "誅瞭η孀礎 畋賭砥杜.\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "喪塹嗾彖塢"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "δ牧不墹 廢卜 椀脱 account'...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "双瓶%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "鄙盟枹孥僧倫 通 力從馬 攸佗嗾"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "鄙盟枹孥僧倫 攸佗嗾"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "黌從凖領 廢卜 椀脱 攸佗嗾...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "鑚夘輿領"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "Privacy"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "Advanced"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "鄙旌 蜘惑 攸佗嗾"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "嘖僧徂塢 冕 default"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "鑽和瓶堊 ξ届厖礎ρ"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "靉徇 ν'"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "靉枹彖 祖凖啻"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "鑷覗陸攸脱"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "粁届厖礎ρ 侑 單叟賭"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "醢徂良 (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "酖輿 (模冒蒙力)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "稘 單叟賭 徂輿覗 奏堙淋鋲λ礎Η"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "鹽叟賭 力徂"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "鹽叟賭 通 墟浜僧倫"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "鹽叟賭 SMTP (廢柘斌僧倫)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "ID 墨夘嘖孥挿"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "霑厦蒙"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "稘 單叟賭 徂輿覗 奏堙淋鋲λ礎Η"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "苗遡冱 棉嘖 料 單叟賭 丶嗅 墟浜僧倫"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "苗遡不 淌凖"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "栂ψ"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 栂ψ - 徂珍妄塢 療覗蔑)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "宋僧堊嵒塢 徨 棉嘖 料 單叟賭"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "鐶妖崚領 厦斃σ 墟浜僧蛭 棉嘖ψ"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr "訛"
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "网蒙墟孥壮 棉嘖 侑 墟浜僧陸"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "筈栂 仭佶 佻 攸溶怡孥僧寮"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(孕 嗚盟珍ね 療廢墜μ慥厦彖陸 棉嘖)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "軼塹 奏堙淋鋲λ礎Η"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "疱塹輿塢淮"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "霤凖廢厮塢 攸 墨輿猟論 `鑚夘輿塢 徨'"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "素鰐從"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "簣珍塢 佻姪 珍塢 攸馬模徊"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "臈療簒彖塢 Message-ID"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "嵒彖塢 攸馬模從, 徂變挿杜品 墨夘嘖孥挿斗"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr " 鯏珍杯彖塢... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "疸堙淋鋲λ礎ρ"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "疸堙淋鋲λ礎ρ SMTP (SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"駛殤 攸棉柯堙 脱 佻妄 佻厦嵶ν, 怠津 忖不 圖 \n"
+"ID 墨夘嘖孥挿 堊 仭厦蒙, 殤 通 墟浜僧倫 佻枹."
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "疸堙淋鋲λ礎ρ POP3 佚凖 廢柘斌僧倫"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "夫δ 墨輿猟"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "疱塹輿塢淮 徨堊力很跡壮 料嘖孃陸 祖凖喇"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "誅丶"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "靤蛭彖力"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "從厦堽 祖凖啻"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "鋲簒彖塢 棉嘖 佻 攸溶怡孥僧寮"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "隍槻瓶孥壮 棉嘖 佻 攸溶怡孥僧寮"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "嵒彖塢 \"ASCII-armored\" 届厖壮 通 柯寅孥僧倫"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "嵒彖塢 丶槻瓶 廢痛夘塢 堙睦塹"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "詭折 丶槻瓶"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "嵒彖塢 北折 GnuPG 佻 攸溶怡孥僧寮"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "鐶卅塢 北折 攸 想論 祖凖嗜 e-mail"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "冨料淺塢 北折 很喪力簒淮"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "誅夘嘖孥挿 疎 δ杜塢豆冒塹 北折:"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "酖 忖夫壮 SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "嵒彖塢 SSL 通 'つ料領 POP3"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "嵒彖塢 墨輿猟 STARTTLS 通 佻涸塰 單哘 SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "嵒彖塢 SSL 通 'つ料領 IMAP4"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr "NNTP"
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "嵒彖塢 SSL 通 'つ料領 NNTP"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "δ喇緬 (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "嵒彖塢 SSL 通 'つ料領 SMTP"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "嵒彖塢 療駄亘媽淺 SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "(浜卜υ 壇, 冕殤 嘖彬舛堙嗹 侑和姪輿揺 侑 'つ料領 SSL )"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "冒攸塢 佻參 SMTP"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "冒攸塢 佻參 POP3"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "冒攸塢 佻參 IMAP4"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "冒攸塢 佻參 NNTP"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "冒攸塢 ν' 掴妖料"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "訌堊模 單叟賭 IMAP"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "妥勁覗塢 廢彫嗅僧 棉嘖 "
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "妥勁覗塢 渭厠徂防 棉嘖ψ "
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "妥勁覗塢 徂珍姪陸 棉嘖 "
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "鄙旌 攸佗嗾 療 徊惣僧."
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "酖 徊惣僧 佻枹徼 祖凖嗾."
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "酖 徊惣僧 單叟賭 SMTP."
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "酖 徊惣僧 ID 墨夘嘖孥挿."
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "酖 徊惣僧 單叟賭 POP3."
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "酖 徊惣僧 單叟賭 IMAP4."
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "酖 徊惣僧 單叟賭 NNTP."
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"酖 凖墨妖猟彖力 忖夫壮 嘖倉品 \"ASCII-armored\"\n"
+"凖嵒 通 柯寅彖良 棉嘖ψ. ξ 療 廢槻廢珍\n"
+"RFC 3156 - MIME Security with OpenPGP."
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "誅瞭η孀孥僧倫 彫"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "鄙旌 妖寮:"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "誅輿猟良 厮掴:"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"鄙旌 妖寮:\n"
+" 嵒彖編 / 料旌 妖寮, 殤 墟浜壮 丶塚杜.\n"
+"誅輿猟良 厮掴:\n"
+" 靉淺料編 :\n"
+" | 殤 佻嗅壮 圖模 棉嘖 疎 徂彫姪領 墨輿猟\n"
+" > 殤 佻嗅壮 墨輿猟 堙睦, 料珍良 墨夘嘖孥挿斗\n"
+" * 殤 佻嗅壮 墨輿猟 侑蛭彖良 堙睦, 料珍良 墨夘嘖孥挿斗\n"
+" 阻ξ渾編:\n"
+" | 殤 攸勇良塢 圖模 棉嘖 淺 徂彫姪領 徂從掴 墨輿猟\n"
+" > 殤 徨堊徂塢 徂廢 墨輿猟 妥 攸勇良 嘖倉惑 堙睦壞\n"
+" & 殤 攸侖嘖不 墨輿猟 喪瀕頒藁力\n"
+" 嵒彖編:\n"
+" %f 通 ν杜 徳別 棉嘖\n"
+" %F 通 嗤瓶釦 ν杜 徳別ψ 和卅良 棉嘖ψ\n"
+" %p 通 和卅力 涸嘖瀕 棉嘖\n"
+" %u 通 倉杯妖淋, 料珍力馬 墨夘嘖孥挿斗\n"
+" %h 通 侑蛭彖力馬 倉杯妖淋, 料珍力馬 墨夘嘖孥挿斗\n"
+" %s 通 堙睦塹從馬 徂彫姪領"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr "鼠ξ不"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr "麌淋阻喇淮 掴廢痛"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "倉鼎嘖厦彖陸 彫"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(醢徂)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "鄙旌 妖寮 療 攸珍力."
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "籃亘卅佶 ':' 攸堆厦療料 料旌 妖寮."
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "鄙辻 掴彷 料旌 妖寮."
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "酖 攸珍力 墨輿猟良 厮掴."
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "鄙辻 掴彷 料旌 妖寮 墨輿猟."
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+" 墨輿猟\n"
+"%s\n"
+"- 喇淋阻喇淮 佻揺緬."
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "苗遡不 彫"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr " 彫篇力 汰崛ぴ 徂珍棉塢 胆 彫?"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "黌從卆ね 廢卜 攸覗蒙良 椀脱...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "素遡慘 料盟枹孥僧倫"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "禀壞彖領"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "δ和卅崚領"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "靉廢掴楊杜倫"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "粁枦"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "徇枸 侑惑卅輿"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "嵒彖塢 斛徇枸 侑惑卅葉 通 侑品詫"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "誅輿猟"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "賚冒蒙良 嗤嫐"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "靤品輿塢 擘 嗤嫐"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "网蒙墟孥壮 侑 侑品詫"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "妄 掴 嗤嫐"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "疱塹輿塢淮 佚凖廢厮塢 力徼 佻枹"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "墨嵶"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "盤斌瀕"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "霤凖廢厮塢 力徼 佻枹 侑 攸侖嗚"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "鑪很跡壮 徨 模冒蒙陸 仭佶 丶嗅 侑品詫"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "醢徂良"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"軈睦浜遡慘 胞蒙胞嘖 嘖壮妬 通 攸彖淋爽杜倫\n"
+"(療和妖崚料, 冕殤 徊惣僧 0)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "嵒彖塢 斛徇枸 侑惑卅葉 通 廢柘斌僧倫"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "妥勁覗塢 廢彫嗅僧 棉嘖 outbox"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "誅掴彖 堊駄秒 通 徂筈栂炉 佻枹"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "疱塹輿塢淮 (凖墨妖猟彖力)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7bit ascii (US-ASCII)"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "組δ力ぷ厦佚篇慄 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "組δ力ぷ厦佚篇慄 (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "穃墟遡慘呂徠椀妬嗹冒 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "眩猛κ嗹冒 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "眩猛κ嗹冒 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "舍澱慄 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "孀澱慄 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "詆夘棉恥 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "詆夘棉恥 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "詆夘棉恥 (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "詆夘棉恥 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "駮藁嗹冒 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "駮藁嗹冒 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "駮藁嗹冒 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "麸厦歸料 防堊篇慄 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "卅追脱蔑 防堊篇慄 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "卅追脱蔑 防堊篇慄 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "詆堊篇慄 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "誅凖篇慄 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "訴嗹冒 (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "訴嗹冒 (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"駛殤 徊明淌力 `疱塹輿塢淮', 怠津 和卅力 椀塢輿蒙療\n"
+"墨蔦彖領 通 彫折炉 locale."
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "誅蔦彖領 佚凖喇緬"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+"冒乢墮 Content-Transfer-Encoding 通 忖夫僧倫,\n"
+"冕殤 圖模 棉嘖 勇嘖不 療-ASCII 喇要鰐."
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "鯱敖μ跡挿 丶槻瓶"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "嘖宋不 宋塹輿塢淮"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "疱塹輿塢淮 攸侖嗚壮 斛徇枸κ 凖珍穆碗"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "鬢彭輪 Undo"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "馬參壮 厮痛 棉嘖ψ 丶嗅"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "喇要鰐ψ"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "馬參壮 檀壞彖領"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "馬厠孕 侑 忻歪"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "馬參壮 佚凖 廢柘斌僧倫"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "疱塹輿塢淮 徂舵卅塢 攸佗 通 廢槻廢津"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "禀壞彖塢 棉嘖 侑 廢槻廢彫"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "詢椀冒 廢槻廢彫 攸侖嗚舛 廢槻廢椿 墨瞭賭杜脱"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "耋厖壮 廢槻廢彫"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "料 檀堊塢"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "耋厖壮 佚凖喇盟領"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 鑰瓶 喇要鰐ψ "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "夘瀞"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "霤凖北祖壮 料旌 佻巳 攸馬模徊 (冕 `From:', `Subject:')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "靉冒旁彖塢 胞蒙胞嘖 療侑淺堊力馬 丶嗅 料旌 仭佶"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "麕碗渾彖塢 料旌 墨瞭賭杜脱, 掴忝 陸"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "巳堙"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "麸瓶亘 佻廢掴楊杜"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "靉冒旁彖塢 墟浜孥挿 墨模涼 `δ', 冕殤 廢槻卅徇彬 - "
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "鯱敘碗堊塢 和馬從凖領"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "耋厖壮 珍塢"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " 靉冒旁彖塢 料嘖孃陸 佻妄... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "簣旌鰐不 厦敍倉怠彖領 棉嘖ψ"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr ""
+"δ和卅崛塢 2-汰編良 遡徳廢 淺嗅\n"
+"歪力汰編良 喇要鰐詫 (通 冩藁嗹墨 溶徂)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "靉冒旁彖塢 仭療蒙 攸馬模徊 料 棉嘖詫"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "靉冒旁彖塢 嗚碗淌陸 攸馬模徊 侑 佚凖婆冂 棉嘖ψ"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "蹙嶢冂墨徂 ξ堙叟遡"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "丶睦徒ψ"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "遡布壮 勇喘 攸馬模徊"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "靤亘簒塰"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "隍徨塹勁遼"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "靆宋料 侑亘簒塰"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "誨亘"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "軈營堊怠彖塢 侑匹栂僧 冒參瀕防 廢槻廢栂 掴 廢卜"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "疱塹輿塢淮 佚凖廢厮塢 丶槻瓶"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "靉冒旁彖塢 凖旁蒙堊 佚凖廢卷 丶槻瓶 嗤棉彖折詫 廢卜"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "浜涸嗜從 畋賭η壮 仭厦蒙 仭'冱"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "酖彫篇良 丶嗅"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "盤斌瀕 "
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(靤瓶從の倫 '0' 畋賭η舛 仭厦蒙 侑墹馬\n"
+" 徨Δ 單哘)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "組椀不 忻δ 侑 忻田杜陸 仭厦明"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "靉佚凖綴壮 侑 攸侖嗚, 冕殤 GnuPG 療 侑礎世"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "宋崢 廢痛夘彖塢 棉嘖 嗤瓶釦 侑 徂彫姪領"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "δ牧夫壮 佚叨品 療侑淺堊良 棉嘖, 徃歪凩 仭佶"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "靉變挿壮 冕 侑淺堊良 圖蒙防 棉嘖, 廢痛夘塢 力從葉 廢卜"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "霤凖範追塢 仭佶 `筈栂', 墟浜宋柯 力徼 佻枹"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "彬藁孥壮 療覗蔑 丶嗅 徂珍姪領 淺 佚凖勇歸領 棉嘖ψ"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr ""
+"(貮嘖 怠津 佻變挿杜 掴 徂墨料領,\n"
+" 冕殤 壇 徂曜燐塢)"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "筅遡惑 墟浜僧倫"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "靉冒旁彖塢 彫遡惑 墟浜僧倫"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "宋崢"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "熙蒙防 侑 簒淮詫 墟浜僧陸"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "遉墨棉"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "酖 徂珍彖塢 彫遡惑 侑 佻揺銘 墟浜僧倫"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "阻夘塢 彫遡惑 墟浜僧倫 丶嗅 攸彭叨杜倫"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " 嘖僧徂塢 覗厮洟 北宋昿... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "徇枸 墨輿猟 (%s 怠津 攸勇療力 料 ν' 徳別 / URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "Web-岱奏敕"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "簣珍塢 祖凖嗾 掴 侑冨料淌領, 墨棉 北礎燐塢 鍔洟"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "靤 徂範彫"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "隍辻彭卍不 侑 徂範彫"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "靤 徂範彫 淺歔塢 墨柯"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "霽堊塢 佚凖 淺歸領冤"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "靉佚凖綴壮, 冕殤 棉嘖 淌叮"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "訴輿孕 嗜謀堊 忻歪/徂從蔦"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr "單釦猟"
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "佻徇 嗚碗淌料 料旌 栂 塢嵶"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "佻徇 料旌 栂 塢嵶"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "嗚碗淌料 料旌 勇嗔恥"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "佻徇 料旌 勇嗔恥"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "汰崛料 珍堊 涸 通 佻塹淮炉 locale"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "力妖 嘖碗湎 (勁/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "津輪 勇嗔恥 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "馬追料 冕 津嗔塰彭 淺嗅 攸 24-馬追領浜 檀禿丗盟塹"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "馬追料 冕 津嗔塰彭 淺嗅 攸 12-馬追領浜 檀禿丗盟塹"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "津輪 厦釦 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "勇嗔蜘 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "盤斌瀕 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM 淺 PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "單釦猟 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "津輪 塢嵶 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "汰崛料 珍堊 通 佻塹淮炉 locale"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "腕堊領 鍔 檀寅 厦釦"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "勁 冕 津嗔塰彭 淺嗅"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "涸嗜彖 斛料 疎 ν' 疎 嗚碗淌領"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "麸澱鋲λ壮碗"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "鑰瓶"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "靤彬盟"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "嘖僧徂塢 墨蒙碗 棉嘖"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "誅蒙碗"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "禀塹彖良 堙睦 - 佚叨品 勁彭輪"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "禀塹彖良 堙睦 - 漬嫻品 勁彭輪"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "禀塹彖良 堙睦 - 墟都κ 勁彭輪"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI link"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "靉徭碗力 徂墨夘嘖壮 墨蒙碗 檀壞彖領"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "鐶卅塢 墨巳 通 檀壞彖領 勁徇 1"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "鐶卅塢 墨巳 通 檀壞彖領 勁徇 2"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "鐶卅塢 墨巳 通 檀壞彖領 勁徇 3"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "鐶卅塢 墨巳 通 URI"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "鑰瓶 喇要鰐ψ"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "冕殤 徨堊力很杜 x, 佻冒旁 expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"熙模 佻廢掴楊杜倫\n"
+"熙模 檀塹彖力馬 佻廢掴楊杜倫\n"
+"熙模 佻廢掴楊杜倫 妥 丶槻瓶\n"
+"熙模 檀塹彖力馬 佻廢掴楊杜倫 妥 丶槻瓶\n"
+"瞠没遡慘 %"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"瞠没遡慘品 backslash\n"
+"瞠没遡慘品 變阻 攸佗堊領\n"
+"瞠没遡慘 廢痛夘彖折 豆杯厠 蔦嵋\n"
+"瞠没遡慘 攸牧夫狙涸 豆杯厠 蔦嵋"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "病σ 柢鋲堊"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "臍厮洟 北宋昿"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"鐶賭υ 佻佚凖栂 變挿杜倫 覗厮淺 北宋.\n"
+" 堊墨 溶崚堙 斃ξ不 墨崚 shortcut 妖寮, 料塢嗄孥柯\n"
+"怠椿-冕() 北宋柎(), 墟浜狙淺 徊惣ψ良 揺昿 料 侖遼圖."
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "靉 攸溶怡孥僧寮"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "黌倉品 Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "盟嗄 料盟枹孥僧倫 攸馬模徊"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "盟嗄 攸馬模徊"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "鄙旌 攸馬模徊 療 攸珍力."
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "苗遡不 攸馬模從"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "麸卅彡 汰崛ぴ 徂珍棉塢 壇 攸馬模從?"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "黌從卆ね 廢卜 料盟枹孥僧倫 攸馬模徊...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "鄙盟枹孥僧倫 廢掴岱爽杜倫 攸馬模徊"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "鄙旌 攸馬模徊"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "靉冒攸陸 攸馬模徊"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "靤蛭彖陸 攸馬模徊"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "靉冒攸塢 徨 療佚凖卅範彖陸 攸馬模徊"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "不舛溶 墨瞭η孀礎 佻冒旁 攸馬模徊ψ...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "霽枦溶 墨瞭η孀礎 佻冒旁 攸馬模徊ψ...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "素鰐從 忖 嗤瓶釦."
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "鄙盟枹孥僧倫 豆蒙墟"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "廢曜療力"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "賭"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "酩"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "誅丶跡壮"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "苗遡不 侑宋斌"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "麸卅彡 汰崛ぴ 徂珍棉塢 壇 侑宋斌?"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "靤宋斌 豆蒙墟孥僧倫"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "駛殤 徂墨料力 怠椿-冕 嬪"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "駛殤 徂墨料力 徨 嬪徂"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "彬藁壮 堊胞 彫:"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "誅葉 疎 誅丶"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "誅崚 攸馬模從"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "鯏珍杯彖塢 攸馬模從..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "熙模 佻廢掴楊杜倫"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "鯏旁蒙堊 墨輿猟"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "篩徇τ墮"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "勇嘖不"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "療 勇嘖不"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "療 "
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "廢槻廢珍 凖杯妄厠詫 徂卅旁"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "療 廢槻廢珍 凖杯妄厠詫 徂卅旁"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "側蒙 陸"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "妖麟 陸"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr "掴忝, 陸"
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "墨厦壑, 陸"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "霤凖療嘖 "
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "誅丶跡壮 "
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "酖 墟浜孥壮"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "苗遡不 單叟賭"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "嘖僧徂塢 佻變挿釦"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "嘖僧徂塢 墨巳"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "靉變挿不 冕 侑淺堊療"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "霤凖嗅壮 珍巳 冕 徊盟津領"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "霤凖嗤厮葉彖塢"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "彬藁壮 墨輿猟"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "靤賓瀕不 和淺嗅杜倫 侑宋斌"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "仭佶:"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "祖凖啻:"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "鯏珍杯彖塢 嗤瓶亘 攸馬模徊ψ"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "素鰐徊"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "素鰐從:"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "酖 徊惣僧 料旌 侑宋斌."
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "酖 攸珍力 墨輿猟."
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "錦燐 療侑苗壮料 嬪彖."
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "霑佶 侑冨料淌領 療 徊惣僧."
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "錦燐 療侑苗壮料 彫."
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "溶彖 療 τ燐."
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "筅 療 τ燐."
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "盟嘖夫腕圖 仭佶"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "素遡慘"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "醢厖遡慘品"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "酖 佻冒旁彖塢 [...] 淺 (...) 料 佻涸塰 堙揺 嗤瓶釦"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "苗遡冱 [...] 淺 (...) 料 佻涸塰 堙揺 侑 廢槻廢彫"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "喪塹嗾彖塢 掴 丶槻双亘"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "忖夫壮 侑 廢槻廢彫"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "從厦堽:"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "靉變挿冒"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "北祖杜倫"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "斗"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "δ"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "篩堊"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "醢妖"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "黌從卆ね 廢卜 料盟枹孥僧倫 徂婆冂 嗤瓶冒 佻廢掴楊杜...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "病σ 佻巳 通 佻冒旁"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"鐶賭υ 佻妄, 冕 怠津 佻冒攸力 侑 廢掴岱爽杜陸 嗤瓶冒. 溶崚堙\n"
+"斃ξ不 佻厮掴 掴佻溶馬 卜椀亘 馬簒 / 良 淺 佚凖墹杯折 佻妄."
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "輜嵬夫 佻妄"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "靉冒攸陸 佻妄"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " 靉彭厠孕瓶 掴 嘖僧珍參良 "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "鄙旌 杼駄藁"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "鯏び墟孥壮"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " 隍柘堊徂塢 "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 麌要鰐 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "倉鼎嘖厦彖陸 杼駄藁"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "疎模良"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "疎模"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "靉揺緬 届厖壮 杼駄藁."
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "苗遡不 杼駄藁"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "麸卅彡 徂珍棉塢 壇 杼駄藁?"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): 霤凖墸碗杜倫 墨彫 療 彡遡腕.\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "療 彡遡腕 廢痛夘塢 徳別 佻變挿亘\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "療 彡遡腕 嘖冉塢 棉嘖 %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "酖 彡遡腕 廢彫嗅壮 棉嘖 %d 淌卩.\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "酖廢厠 墨輿猟 漬嬲: `%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "黌僧"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "黌從卆ね 彫遡惑彭 廢卜 侑惑凖嗾...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "墟双斌喪 佻揺緬 侑 墟浜僧陸 珍良.\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "酖 彡遡腕 佗啻塢 徳別.\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "隍槻瓶 療 佚凖廢凖力"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "隍槻瓶 療 變訴津力"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "臍厠品 丶槻瓶"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "竟艨鉗 丶槻瓶"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "酖輿 侖駄淮惑 北折 通 佚凖廢卷 丶槻瓶"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "靉揺緬 侑 佚凖廢卉 丶槻瓶"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "鬢變 凖旁蒙堊塢 佚凖廢卷 丶槻瓶ψ"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "靉揺緬: 療廢掴揺 嘖僧"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "臍厠品 丶槻瓶 廢 \"%s\""
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "竟艨鉗 丶槻瓶 廢 \"%s\""
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "酖 彡遡腕 變訴塢 ID 墨夘嘖孥挿 通 蜘惑 北折"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " 堊墨 旌僧品 \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "隍槻瓶 嘖從凖良 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "δ舵塹 北折: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "鐶賭υ, 怠椿-盟嗚, 北折 通 `%s'"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "舵卅ね ξ届厖礎 侑 `%s' ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "鐶卅塢 北折"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "仰杜塢豆冒塹 北折"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "Val"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "簣珍塢 北折"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "彭彫墮 ξ柤馬 墨夘嘖孥挿 疎 δ杜塢豆冒塹 北折:"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "素鰐從 棉嘖 淌卩 擘佯彖力.\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "'つ燐ね腕"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "'つ料領 單叟賭詫 SMTP: %s ..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "靉喇盟ね HELO..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "疸堙淋鋲λ礎ρ"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "靉喇盟ね 棉嘖..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "靉喇盟ね EHLO..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "靉喇盟ね MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "靉喇盟ね"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "靉喇盟ね RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "靉喇盟ね DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "蛭歪浜..."
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "靉喇盟ね 棉嘖 (%d / %d 汰編ψ)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "靉喇盟ね 棉嘖"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "靤 廢柘斌僧陸 棉嘖 墟双斌喪 佻揺緬."
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"靤 廢柘斌僧陸 棉嘖 墟双斌喪 佻揺緬:\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "鄙盟枹孥僧倫 嗚夘輪防"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"麸賭柎 徂 佻徂領 徨堊力徂塢 厦旆想孥僧倫 嗚夘輪防.\n"
+" 溶崚堙 忖夫壮 τ燐折 嗚夘輪釦 届厖壮 MH, 冕殤 \n"
+"從料 彖 .\n"
+"駛殤 療 徙砺療陸, 侑腕塹 料塢嗄υ `酖帆'."
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "霤凖廢厮ね 丶槻瓶"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr "%s%s%s 廢 \"%s\""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP AUTH 療掴嘖孃料\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "佻覗料 廢槻櫓椿 SMTP\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "佻揺緬 丶 涸 單哘 SMTP\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "黌從卆ね 廢卜 佚凖婆冂 徂筈栂惑 堙睦壞 棉嘖...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "蛭δ良 堙睦 棉嘖"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "靉冒旁ね 徂筈栂品 堙睦 %s ...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 蛭δ良 堙睦"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23 療掴嘖孃良\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23 掴嘖孃良\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1 療掴嘖孃良\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1 掴嘖孃良\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "軼塹 SSL 療掴嘖孃良\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "酖廢掴揺 妖塹 SSL *竟迚跌 頏閾鱇躑*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "靉揺緬 嘖從凖領 墨淋屠嘖 ssl\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "側 墨淋屠嘖 SSL (%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "'つ料領 SSL 忖夫僧倫 %s\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "鹽參鋲λ壮 單叟賭:\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " 黎'に %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 苗宋: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "嬲壮 佻廢掴楊杜倫"
+
+#: src/summary_search.c:129
+#, fuzzy
+msgid "Match any of the following"
+msgstr "駛殤 徂墨料力 怠椿-冕 嬪"
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "駛殤 徂墨料力 徨 嬪徂"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "屠嘖 佻廢掴楊杜倫:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "鐶卅塢 徨 徃歪崚領"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "簣嗔芭孕 佻涸塰 嗤瓶釦; 侑歪忖不 胞涼?"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "簣嗔芭孕 攸胞涙杜倫 嗤瓶釦; 侑歪忖不 佻涸塰?"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/δ佻廢嘖"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/δ佻廢嘖/徨ν"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/δ佻廢嘖/廢槻卅徇彬廢"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/δ佻廢嘖/墨瞭賭杜脱"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "霤凖勇嘖不"
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/誅丶跡壮"
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/靉變挿不"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/靉變挿不/靉變挿不"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/靉變挿不/倫塢 徂彫姪領"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/靉變挿不/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/靉變挿不/靉變挿不 冕 療侑淺堊療"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/靉變挿不/靉變挿不 冕 侑淺堊療"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/靉變挿不/靉變挿不 徨 冕 侑淺堊療"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/誅蒙碗彖 佻變挿冒"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "勇良塢"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/簣珍塢 廢槻卅徇彬 掴 祖凖嗄炉 卜蒜"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/蒜妄/蛭δ良 堙睦"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/蒜妄/途 攸馬模從"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/簟嬲..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "醢妖"
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 嗤瓶冒...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "鐶厦陀 佻變挿亘"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "遡布斌瓶 津冕 佻變挿防. 鑰卅胆彖塢?"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "霤凖淺壞ね 仭佶 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "皃蒙枦 療輿 療侑淺堊良 棉嘖ψ"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "酖 變訴津力 療侑淺堊良 棉嘖ψ. 嬲壮 胞涼?"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "酖輿 療侑淺堊良 棉嘖ψ"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "酖 變訴津力 療侑淺堊良 棉嘖ψ. 霤凖編 掴 料嘖孃力 仭佶?"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "嬲壮 變徼"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "皃蒙枦 療輿 力徂 棉嘖ψ"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "酖 變訴津力 力徂 棉嘖ψ. 嬲壮 胞涼?"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "酖輿 力徂 棉嘖ψ"
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "酖 變訴津力 力徂 棉嘖ψ. 霤凖編 掴 料嘖孃力 仭佶?"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "皃蒙枦 療輿 佻變挿杜蛭 棉嘖ψ"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "酖 變訴津力 佻變挿杜蛭 棉嘖ψ. 嬲壮 胞涼?"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "酖輿 佻變挿杜蛭 棉嘖ψ."
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "酖 變訴津力 佻變挿杜蛭 棉嘖ψ. 嬲壮 佻涸塰?"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "皃蒙枦 療輿 徂彫姪良 棉嘖ψ"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "酖 變訴津力 徂彫姪良 棉嘖ψ. 嬲壮 胞涼?"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "酖輿 徂彫姪良 棉嘖ψ"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "酖 變訴津力 徂彫姪良 棉嘖ψ. 嬲壮 佻涸塰?"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "舍孃孥僧倫 棉嘖ψ 攸 堙輿揺..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d 徂珍姪力"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d 佚凖勇歸力"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ", "
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d 嗚椀κ彖力"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 攸佗哘 和卅力"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 力徂, %d 療侑淺堊良, %d 攸覗模 (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 力徂, %d 療侑淺堊良, %d 攸覗模"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "麩參佞溶 嗤瓶亘..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t耋厖佞溶 嗤瓶亘 珍良 棉嘖ψ..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "耋厖佞溶 嗤瓶亘 珍良 棉嘖ψ..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "霽枦溶 謀 嗤瓶冒 (%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(眦 珍塢)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "貮嘖 %d 佻變挿杜\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "貮嘖 %d 佻變挿杜 冕 侑淺堊良\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "貮嘖 %d 佻變挿杜 冕 療侑淺堊良\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "貮嘖 %s/%d 侑冨料淌力 掴 徂珍姪領\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "苗遡不 棉嘖()"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "麸卅彡 徂珍棉塢 棉嘖() 墨柯冒?"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "苗遡僂溶 佻徭碗跡僧 棉嘖..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr " 棉嘖 %s/%d 變冱 佻變挿防\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "貮嘖 %d 侑冨料淌力 掴 佚凖勇歸領 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "靤冨料淌領 畋η舛墮嗔 佻塹淮論 仭佶論."
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "貮嘖 %d 侑冨料淌力 掴 墨丶跡僧倫 %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "靤椀藁佞墮嗔 墨丶跡僧倫 仭佶 療 ."
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "鐶敏舛溶 徨 棉嘖..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "靤 和厦唾 佻枹 墟双斌喪 佻揺緬."
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "瞠蔦ね 良塰 和馬從凖領..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "麕喪孥僧倫 良塹 和馬從凖領..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "麕喪孥僧倫 良塹 和馬從凖領 通 徂墨料領..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "豆蒙墟孥僧倫..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "网蒙墟孥僧倫..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "%d 棉嘖ψ 廢墜μ慥厦彖力."
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "徳別 %s 忖 τ燐\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "黌從卆ね 和盟嘖 佚凖婆冂 堙睦壞...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "稘 棉嘖 療溶嵬夫 廢掴岱惣不.\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "和 畋賭吐塢 胆 涸嘖瀕, 徂北扶堙 墨淋屠嘖療 妖寮 "
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "侑宋論 卜椀墨 揺昿 和賭υ `妥凖敗 冕...'"
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"疎 料塢嗄υ 北宋柎 `y'.\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "和 佻冒攸塢 胆 涸嘖瀕 冕 堙睦塹彭 佻廢掴楊杜倫,"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"和賭υ `靉冒攸塢 冕 堙睦', 疎 料塢嗄υ 卜椀釦 `t'.\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "和 廢痛夘塢 胆 涸嘖瀕 掴佻溶馬 斛徇枸慙 "
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "侑惑卅揺, 和賭υ `δ牧不' 淺 `δ牧不 ...',"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "疎 北礎陸墮 鍔洟 淺 單凖栂慙 卜椀墨 揺昿,"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "疎 料塢嗄υ 北宋柎 `l'."
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "隍槻瓶 歸 療 佚凖廢凖力.\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "和 佚凖廢夘塢 箆馬, 徂北扶堙 墨淋屠嘖療 妖寮\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "侑宋論 卜椀墨 和賭υ `霤凖廢夘塢 丶槻瓶'.\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"麸卅忖倫 祖凖啻 (%s) 廢漬變僂墮嗔\n"
+"廢 廢掴岱爽杜炉 (%s).\n"
+"單 廢痛夘塢?"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr "%dB"
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr "%.1fKB"
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr "%.2fMB"
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr "%.2fGB"
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "酖彡挿 攸佗嗾 %s.\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "酖 彡遡腕 廢痛夘塢 徳別 %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (力厖遡慘品)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP auth)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/苗遡不 嗚夘輪釦"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/苗遡不 攸佗 IMAP4"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/苗遡不 和巳墨徂 攸佗 墨瞭賭杜脱"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 00000000..2f8a812a
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,6490 @@
+# Chinese translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Xiangxin Luo <benluo@etang.com>, 2000 for initial GB2312 translation
+# Updated by : Zhangtao <zhangtao@zhangtao.org>, 2002-5-14
+# Updated by : Wang Jian <lark@linux.net.cn>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2002-03-19 14:00+0800\n"
+"Last-Translator: Wang Jian <lark@linux.net.cn>\n"
+"Language-Team: zh_CN <i18n-translation@lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=GB2312\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "購噐"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+"GPGME 井幡侭嗤 (C) 2001Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+"云殻會頁徭喇罷周。低辛參壓徭喇罷周児署窟下議 GNU 巷慌娩幡議訳錘和嶷仟蛍窟賜俐"
+"個万。GPL辛參聞喘井云 2 賜(喇低僉夲)販採昧朔議井云。\n"
+"\n"
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+"云殻會蛍窟議朕議頁万辛嬬斤凪万繁嗤喘徽音戻工販採議毅隠淫凄咨根議癖才癖"
+"栽蒙協喘余議隠屬。萩臥堋GNU宥喘巷慌俯辛屬資誼袁元槻渡◆\n"
+"\n"
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+"低哘乎厮将昧乎罷周匯軟辺欺匯芸GNU宥喘巷慌俯辛。泌惚珊短嗤萩亟佚公Free "
+"Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-"
+"1307, USA."
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "鳩協"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "屎壓響函侭嗤嬖催議塘崔...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "孀欺議炎禰%s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"匯乂廱亟完笥厮嬉蝕。\n"
+"壓園辞嬖催念萩購液侭嗤議廱亟完笥。"
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "屎壓嬉蝕嬖催園辞完笥...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "屎壓幹秀嬖催園辞完笥...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "園辞嬖催"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr "梓孚乎乏會殊臥仟喨周。僉嶄 `G' 双議鹸僉崇壓`畠何俊辺'扮殊臥。"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "兆各"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "亅咏"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "捲暦匂"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "耶紗"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "園辞"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr " 評茅 "
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "鯱"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "鯢"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr " 譜葎潮範嬖催 "
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "購液"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "評茅嬖催"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "艇寔議勣評茅乎嬖催宅"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "頁"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+倦"
+
+#: src/action.c:328
+#, fuzzy, c-format
+msgid "Could not get message file %d"
+msgstr "涙隈資函喨周猟周。"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "音嬬資函喨周何蛍。"
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "涙隈資誼謹何蛍喨周議乎何蛍。"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"僉夲議強恬音嬬壓廱亟完笥聞喘\n"
+"咀葎万淫凄 %%f, %%F or %%p 。"
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"凋綜音嬬蝕兵。幹秀砿祇払移。\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"涙隈峇佩和双翌何凋綜\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 屎壓塰佩%s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 潤崩%s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "強恬議補秘/補竃"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "窟僕"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr "嶮峭"
+
+#: src/action.c:1261
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"補秘嬉咫凋綜佩\n"
+"( `%s '繍瓜紋算葎猟周兆)"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr ""
+
+#: src/action.c:1270
+#, fuzzy, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"補秘嬉咫凋綜佩\n"
+"( `%s '繍瓜紋算葎猟周兆)"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr ""
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "繍仇峽耶紗欺仇峽仮"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "仇峽"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "廣瞥"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "僉夲仇峽仮猟周斜"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr "函"
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/猟周(_F)"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/猟周(_F)/仟秀仇峽仮(_B)"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/猟周(_F)/仟秀 vCard(_v)"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/猟周(_F)/仟秀 JPilot(_J)"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/猟周(_F)/仟秀捲暦匂(_S)"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/猟周(_F)/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/猟周(_F)/園辞(_E)"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/猟周(_F)/評茅(_D)"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/猟周(_F)/隠贋(_S)"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/猟周(_F)/購液(_C)"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "/仇峽(_A)"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/仇峽(_A)/仟秀仇峽(_A)"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/仇峽(_A)/仟秀怏(_G)"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/仇峽(_A)/仟秀猟周斜(_F)"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/仇峽(_A)/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/仇峽(_A)/園辞(_E)"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/仇峽(_A)/評茅(_D)"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/垢醤(_T)"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/垢醤(_T)/擬秘LDIF猟周(_L)"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/逸廁(_H)"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/逸廁(_H)/購噐(_A)"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/仟秀仇峽(_A)"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/仟秀怏(_G)"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/仟秀猟周斜(_F)"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/園辞(_E)"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/評茅(_D)"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "窮徨喨周仇峽"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "仇峽仮"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "侖兆"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "評茅"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "臥孀"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "辺周繁"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "貝僕"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "畜周貝僕"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "評茅仇峽"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "寔議勣評茅仇峽"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "倦"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"艇勣評茅猟周斜才 `%s' 嶄議侭嗤仇峽宅\n"
+"泌惚叙評茅猟周斜仇峽繍瓜卞欺貧匯雫猟周斜嶄。"
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "叙猟周斜"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "猟周斜才仇峽"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "寔議勣評茅 `%s' "
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "仟秀喘薩涙隈隠贋沫哈猟周。"
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "仟秀喘薩涙隈隠贋仇峽仮猟周。"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr "撹孔廬算症議仇峽仮。"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"厮将廬算症議仇峽仮\n"
+"涙隈隠贋仟議仇峽沫哈猟周"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"涙隈廬算仇峽仮\n"
+"幹秀阻腎議仇峽仮猟周。"
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"涙隈廬算仇峽仮\n"
+"涙隈幹秀仟議仇峽仮猟周。"
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr "涙隈廬算仇峽仮拝涙隈幹秀仟議仇峽仮猟周。"
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "仇峽仮廬算危列"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "仇峽仮廬算"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "仇峽仮危列"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "涙隈響函仇峽沫哈"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "厮将廬算症議仇峽仮涙隈隠贋仟議仇峽沫哈猟周"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "涙隈廬算仇峽仮徽幹秀阻腎議仟仇峽仮猟周。"
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "涙隈廬算仇峽仮涙隈幹秀仟議仇峽仮猟周。"
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "涙隈廬算仇峽仮拝涙隈幹秀仟議仇峽仮猟周。"
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "仇峽仮廬算危列"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "仇峽仮廬算"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "順中"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "仇峽仮"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "倖繁"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "窮徨喨周仇峽"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "蛤怏"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "猟周斜"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr "vCard"
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr "JPilot"
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP 捲暦匂"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "巷喘仇峽"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "倖繁仇峽"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "廣吭"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "少御"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "危列"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "屎壓幹秀戻佰中医斤三崇...\n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "和肝珊塋掌弛渡"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "拡弼"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr "碕弼"
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "從弼"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "爺清弼"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "清弼"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "駄弼"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "忤弼"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "短嗤"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/耶紗(_A)..."
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/評茅(_R)"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+#, fuzzy
+msgid "/_Properties..."
+msgstr "/奉來(_P)..."
+
+#: src/compose.c:468
+#, fuzzy
+msgid "/_File/_Send"
+msgstr "/猟周(_F)/隠贋(_S)"
+
+#: src/compose.c:470
+#, fuzzy
+msgid "/_File/Send _later"
+msgstr "/喨周(_M)/參朔窟僕(_l)"
+
+#: src/compose.c:473
+#, fuzzy
+msgid "/_File/Save to _draft folder"
+msgstr "/喨周(_M)/隠贋欺課後斜(_d)"
+
+#: src/compose.c:475
+#, fuzzy
+msgid "/_File/Save and _keep editing"
+msgstr "/喨周(_M)/隠贋旺写偬園辞(_k)"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/猟周(_F)/娚現猟周(_A)"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/猟周(_F)/峨秘猟周(_I)"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/猟周(_F)/峨秘禰兆(_g)"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/園辞(_E)/碍(_U)"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/園辞(_E)/嶷鹸(_R)"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/園辞(_E)/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/園辞(_E)/儒俳(_t)"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/園辞(_E)/鹸崙(_c)"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/園辞(_E)/娚薮(_P)"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/園辞(_E)/恬葎哈喘娚薮(_q)"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/園辞(_E)/畠僉(_a)"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/園辞(_E)/互雫(_d)"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/園辞(_E)/互雫(_d)/鮑麭洞匯倖忖憲"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/園辞(_E)/互雫(_d)/鯒威洞匯倖忖憲"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/園辞(_E)/互雫(_d)/鮑麭洞匯倖汽簡"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/園辞(_E)/互雫(_d)/鯒威洞匯倖汽簡"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/園辞(_E)/互雫(_d)/卞崛佩遍"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/園辞(_E)/互雫(_d)/卞崛佩硫"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/園辞(_E)/互雫(_d)/卞崛貧匯佩"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/園辞(_E)/互雫(_d)/卞崛和匯佩"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/園辞(_E)/互雫(_d)/指評匯倖忖憲"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "園辞(_E)/互雫(_d)/念評匯倖忖憲"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/園辞(_E)/互雫(_d)/指評匯倖汽簡"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "園辞(_E)/互雫(_d)/念評匯倖汽簡"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "園辞(_E)/互雫(_d)/評茅匯佩"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "園辞(_E)/互雫(_d)/評茅崛佩硫"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/園辞(_E)/輝念粁鯛孵佩(_W)"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/園辞(_E)/侭嗤海佩孵佩(_l)"
+
+#: src/compose.c:570
+#, fuzzy
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/園辞(_E)/鹸崙(_c)"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/臥心(_V)"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/臥心(_V)/辺周繁(_T)"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/臥心(_V)/貝僕(_C)"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/臥心(_V)/畜周貝僕(_B)"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/臥心(_V)/指鹸崛(_R)"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/臥心(_V)/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/臥心(_V)/効薮(_F)"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/臥心(_V)/炎樫(_u)"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/臥心(_V)/現周(_A)"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/垢醤(_T)/仇峽仮(_A)"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/垢醤(_T)/庁医(_T)"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/垢醤(_T)/強恬(_n)"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/垢醤(_T)/---"
+
+#: src/compose.c:588
+#, fuzzy
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/園辞(_E)/喘翌何園辞匂園辞(_x)"
+
+#: src/compose.c:592
+#, fuzzy
+msgid "/_Tools/PGP Si_gn"
+msgstr "/垢醤(_T)/強恬(_n)"
+
+#: src/compose.c:593
+#, fuzzy
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/喨周(_M)/紗畜(_E)"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s採勅音贋壓\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "%s採涎┻探塾脹床新\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "哈猟炎芝鯉塀危列。"
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "喨周指鹸/廬窟鯉塀危列。"
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "猟周 %s 音贋壓\n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "涙隈資誼猟周 %s 議寄弌\n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "猟周 %s 頁腎議。"
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "涙隈響函 %s。"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "喨周%s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "涙隈資誼謹何蛍喨周議乎何蛍。"
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [厮園辞]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - 廱亟喨周%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "廱亟喨周%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "短嗤峺協辺周繁。"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "窟僕"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "麼籾頁腎議。珊勣窟僕宅"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "涙隈資誼辺周繁双燕。"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"短嗤峺協窟僕喨周勣喘議嬖催。\n"
+"萩壓窟僕念僉夲匯倖喨周嬖催。"
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "窟僕喨周欺 %s 扮窟伏危列。"
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "涙隈繍乎喨周隠贋欺窟周筺"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "音嬬孀欺才輝念僉嶄議埒革炎紛 `%s' 狒狼議埒革"
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "涙隈個延猟周奉來\n"
+
+#: src/compose.c:2668
+#, fuzzy, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"涙隈廬算喨周議園鷹。\n"
+"挽隼窟僕宅"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "涙隈亟喨周遊\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "涙隈評茅症喨周\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "屎壓電錦喨周...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "涙隈孀欺錦双猟周斜%s\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "涙隈電錦乎喨周\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "伏撹喨周炎紛催%s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "屎壓幹秀廱亟完笥...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME 窃侏"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "寄弌"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "窟周繁"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "羨軸窟僕喨周"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "參朔窟僕"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "慧秘錦双猟周斜壓參朔窟僕"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "課後"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "隠贋欺課後猟周斜"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "峨秘"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "峨秘猟周坪否"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "現周"
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "紗秘現周"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "禰兆"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "峨秘禰兆"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "園辞匂"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "聞喘翌何園辞匂園辞"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "算佩"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "海佩算佩"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "涙丼議MIME窃侏。"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "猟周音贋壓賜葎腎。"
+
+#: src/compose.c:4618
+#, fuzzy
+msgid "Properties"
+msgstr "奉來"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "園鷹"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "揃抄"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "猟周兆"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "翌何園辞匂凋綜佩涙丼`%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"翌何園辞匂挽壓垢恬。\n"
+"膿崙潤崩殻會\n"
+"殻會怏炎紛催%d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "厮潤崩殻會怏炎紛催%d"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "匝扮猟周%s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr "廱亟佐喙猝序殻嶄補秘\n"
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "涙隈峇佩翌何園辞匂\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "涙隈亟秘猟周\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "砿祇響函払移\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "涙隈繍乎喨周電錦。"
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "僉夲猟周"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "卿虹喨周"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "乎喨周厮俐個。卿虹万"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "卿虹"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "慧秘課後"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "艇勣聞喘庁医 `%s' 宅"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "聞喘庁医"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "紋旗"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "園辞仇峽"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "耶紗仟選狼繁"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "園辞選狼繁袁湖渡"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "駅倬補秘窮徨喨周仇峽。"
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "駅倬補秘兆忖才峙。"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "園辞選狼繁佚連"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "塋笑嫦"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "侖箆"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "兆忖"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "蠻各"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "窮徨喨周仇峽"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "艶兆"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "鯢"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "鯱"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "俐個"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "賠茅"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr "峙"
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "児云佚連"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "喘薩奉來"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "猟周頁挫議。"
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "猟周音頁屎鳩議仇峽仮鯉塀。"
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "涙隈響函猟周。"
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "園辞仇峽仮"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr " 殊臥猟周 "
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "猟周"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "耶紗仟仇峽仮"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "駅倬戻工蛤怏兆。"
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "園辞蛤怏佚連"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "蛤怏兆"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "蛤怏嶄議仇峽"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " -> "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " <- "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "辛喘喨周仇峽"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "喘収遊梓泥繍窮徨喨周仇峽卞秘才卞竃蛤怏"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "園辞蛤怏聾准"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "耶紗仟蛤怏"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "園辞猟周斜"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "補秘猟周斜議仟兆忖"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "仟秀猟周斜"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "補秘仟秀猟周斜議兆忖"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "猟周音麒 JPilot 鯉塀。"
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "僉夲 JPilot 猟周"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "園辞 JPilot "
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr " ... "
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "凪万喨周仇峽"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "耶紗仟 JPilot "
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "撹孔銭俊欺捲暦匂"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "涙隈銭俊欺捲暦匂"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "園辞LDAP捲暦匂"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "麼字兆"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "極笥"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr " 殊臥捲暦匂 "
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr "朴沫軟泣"
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr "朴沫訳周"
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr " 嶷仟譜崔 "
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr "鰯協 DN"
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr "鰯協畜鷹"
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr "階扮(昼)"
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr "恷寄酳"
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "児云"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "制婢"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "耶紗仟議LDAP捲暦匂"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "園辞LDAP僉夲朴沫軟泣"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "辛喘議朴沫軟泣"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "涙隈貫捲暦匂響函朴沫軟泣萩返垢譜崔"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "猟周音麒 vCard 鯉塀。"
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "僉夲 vCard 猟周"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "園辞 vCard "
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "耶紗仟 vCard "
+
+#: src/export.c:127
+msgid "Export"
+msgstr "擬竃"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "峺協朕炎猟周斜才喨篶勅。"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "坿朕村"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "擬竃猟周"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr " 僉夲... "
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "僉夲擬竃猟周"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "涙隈亟秘塘崔猟周\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "僉夲猟周斜"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "辺周"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "厮窟僕"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "錦双"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "系周"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "課後"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "仟猟周斜"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "忖憲 `%c' 音嬬淫根壓猟周斜兆忖嶄。"
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "猟周斜 `%s' 厮贋壓。"
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "涙隈幹秀猟周斜 `%s'。"
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/幹秀仟猟周斜(_n)..."
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/嶷凋兆猟周斜(_R)..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/評茅猟周斜(_D)"
+
+#: src/folderview.c:220 src/folderview.c:236
+#, fuzzy
+msgid "/Empty _trash"
+msgstr "賠腎系周"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/殊臥仟喨周(_C)"
+
+#: src/folderview.c:224 src/folderview.c:242
+#, fuzzy
+msgid "/R_ebuild folder tree"
+msgstr "/嶷仟膝宙猟周斜峯(_e)"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/臥孀喨周(_S)..."
+
+#: src/folderview.c:238 src/folderview.c:254
+#, fuzzy
+msgid "/Down_load"
+msgstr "短嗤隆響喨周"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/匡堋仟療怏(_b)..."
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/評茅仟療怏(_R)"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "屎壓幹秀猟周斜篇夕...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "仟秀"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "隆響"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr "#"
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "屎壓譜崔猟周斜佚連...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "屎壓譜崔猟周斜佚連..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "屎壓膝宙猟周斜 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "屎壓膝宙猟周斜 %s ..."
+
+#: src/folderview.c:707
+#, fuzzy
+msgid "Rebuild folder tree"
+msgstr "/嶷仟膝宙猟周斜峯"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr ""
+
+#: src/folderview.c:717
+#, fuzzy
+msgid "Rebuilding folder tree..."
+msgstr "屎壓嶷仟膝宙猟周斜..."
+
+#: src/folderview.c:723
+#, fuzzy
+msgid "Rebuilding of the folder tree failed."
+msgstr "屎壓嶷仟膝宙猟周斜..."
+
+#: src/folderview.c:741
+#, fuzzy
+msgid "Rebuilding all folder trees..."
+msgstr "屎壓嶷仟膝宙猟周斜峯..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "/屎壓殊臥侭嗤猟周斜嶄議仟喨周..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "僉嶄猟周斜 %s\n"
+
+#: src/folderview.c:1687
+#, fuzzy, c-format
+msgid "Downloading messages in %s ..."
+msgstr "屎壓窟僕喨周"
+
+#: src/folderview.c:1723
+#, fuzzy, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "窟僕喨周欺 %s 扮窟伏危列。"
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"補秘仟猟周斜議兆忖\n"
+"(泌惚艇勣幹秀匯倖隠贋徨猟周斜議猟周斜\n"
+"壓兆忖議恷朔耶紗 `/ ')"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "補秘 `%s '議仟兆忖"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "嶷凋兆猟周周"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+" `%s '和議侭嗤猟周斜才喨周繍瓜評茅。\n"
+"艇寔議勣評茅宅"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "評茅猟周斜"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "涙隈評茅猟周斜 `%s '。"
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "賠腎系周"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "賠腎系周篝鏥痛嗤佚周"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"寔議勣評茅喨周 `%s '\n"
+"(喨周音氏貫甘徒評茅)"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "評茅喨"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "寔議勣評茅 IMAP4 嬖催 `%s '"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "評茅 IMAP4 嬖催"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "寔議勣評茅仟療怏 `%s '"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "評茅仟療怏"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "寔欺勣評茅仟療怏嬖催 `%s '"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "評茅仟療怏嬖催"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "匡堋仟療怏"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "僉夲勣匡堋議仟療怏。"
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "臥孀仟療怏"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr " 朴沫 "
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "仟療怏兆"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "喨周方"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "窃侏"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "泡仟"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "酌砿"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "峪響"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "隆岑"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "涙隈函指仟療怏双燕。"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "頼撹。"
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "厮俊辺 %d 倖仟療怏(厮響函 %s)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr "Abcdef"
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "仟療怏"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "炎籾"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "屎壓幹秀炎籾篇夕...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "(短嗤窟周繁)"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "(短嗤麼籾)"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "屎壓幹秀夕駟嗟...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "涙隈紗墮乎夕顱"
+
+#: src/imap.c:455
+#, fuzzy, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr "欺 %s:%d 議 IMAP4 銭俊厮僅蝕。屎壓嶷仟銭俊...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "屎壓幹秀欺 %s:%d 議 IMAP4 銭俊...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "音嬬蝕兵 TLS 氏三。\n"
+
+#: src/imap.c:1327
+#, fuzzy, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "涙隈譜崔評茅炎崗%d\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "涙隈賠茅\n"
+
+#: src/imap.c:1421
+#, fuzzy
+msgid "can't set deleted flags: 1:*\n"
+msgstr "涙隈譜崔評茅炎崗l:%d\n"
+
+#: src/imap.c:1464
+#, fuzzy
+msgid "can't close folder\n"
+msgstr "涙隈僉夲猟周斜%s\n"
+
+#: src/imap.c:1542
+#, fuzzy, c-format
+msgid "root folder %s not exist\n"
+msgstr "短窟岷蠎乃栂勅。\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+#, fuzzy
+msgid "error occurred while getting LIST.\n"
+msgstr "資函喨周双燕扮窟伏危列。\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "涙隈幹秀 `%s '\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "涙隈壓辺周籌亟棺 `%s '\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "涙隈幹秀喨筍LIST 払移\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "涙隈幹秀喨\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "涙隈繍喨 %s 嶷凋兆葎 %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "涙隈評茅喨\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "涙隈資函佚撃\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "資函佚撃扮窟伏危列。\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "涙隈盾裂佚撃%s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "涙隈銭俊欺IMAP4捲暦匂%s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "涙隈銭俊欺IMAP4捲暦匂%s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "涙隈資誼兆忖腎寂\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "涙隈僉夲猟周斜%s\n"
+
+#: src/imap.c:3021
+#, fuzzy
+msgid "IMAP4 authentication failed.\n"
+msgstr "刮屬圭隈"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 鞠村払移。\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "涙隈委 %s 耶紗欺 %s\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "(屎壓窟僕 猟周...)"
+
+#: src/imap.c:3394
+#, fuzzy, c-format
+msgid "can't append message to %s\n"
+msgstr "涙隈弖紗喨周 %s\n"
+
+#: src/imap.c:3426
+#, fuzzy, c-format
+msgid "can't copy %s to %s\n"
+msgstr "涙隈繍 %d 鹸崙欺 %s\n"
+
+#: src/imap.c:3450
+#, fuzzy, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "峇佩IMAP凋綜扮窟伏危列STORE %d:%d %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "峇佩IMAP凋綜扮窟伏危列EXPUNGE\n"
+
+#: src/imap.c:3477
+#, fuzzy
+msgid "error while imap command: CLOSE\n"
+msgstr "峇佩IMAP凋綜扮窟伏危列EXPUNGE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "iconv 涙隈廬算 UTF-7 欺 %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "iconv 涙隈廬算 %s 欺 UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "擬秘"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "峺協朕炎喨篶勅才朕炎猟周斜。"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "擬秘猟周"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "朕炎朕村"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "僉夲擬秘猟周"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "萩峺協勣擬秘議仇峽仮兆才猟周。"
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "僉夲旺嶷凋兆勣擬秘議LDIF忖粁兆。"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "猟周厮擬秘。"
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "萩僉夲匯倖猟周。"
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "駅倬補秘仇峽仮兆。"
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "響函 LDIF 忖粁扮窟伏危列。"
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "撹孔擬秘 LDIF 猟周。"
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "僉夲 LDIF 猟周"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "猟周兆"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr "S"
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF 忖粁"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "奉來兆"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "奉來"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "僉夲"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "仇峽仮"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "猟周兆"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "芝村"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "擬秘 LDIF 猟周欺仇峽仮"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "貧匯倖"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "和匯倖"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "猟周佚連"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "奉來"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "頼撹"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "屎壓資函仟喨周"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "萩吉棋"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr "函"
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "屎壓資函"
+
+#: src/inc.c:531
+#, fuzzy, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "辺欺喨周朔貫捲暦匂貧評茅"
+
+#: src/inc.c:535
+#, fuzzy
+msgid "Done (no new messages)"
+msgstr "短嗤仟喨周"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "銭俊払移"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "刮屬払移"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr ""
+
+#: src/inc.c:559
+#, fuzzy
+msgid "Timeout"
+msgstr "階扮(昼)"
+
+#: src/inc.c:609
+#, fuzzy, c-format
+msgid "Finished (%d new message(s))"
+msgstr "\t%d 倖仟喨周\n"
+
+#: src/inc.c:612
+#, fuzzy
+msgid "Finished (no new messages)"
+msgstr "/殊臥仟喨周(_C)"
+
+#: src/inc.c:621
+#, fuzzy
+msgid "Some errors occurred while getting mail."
+msgstr "資函喨周扮窟伏危列。"
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "屎壓資函嬖催 %s 議仟喨周...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s砕壓資函仟喨周"
+
+#: src/inc.c:679
+#, fuzzy, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "屎壓銭俊POP3捲暦匂%s ..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "涙隈銭俊POP3捲暦匂%s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "屎壓刮屬..."
+
+#: src/inc.c:768
+#, fuzzy, c-format
+msgid "Retrieving messages from %s..."
+msgstr "屎壓貫 %s 資函喨周欺 %s...\n"
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "屎壓資函仟喨周方楚(STAT)..."
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "屎壓資函仟喨周方楚(LAST)..."
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "屎壓資函仟喨周方楚(UIDL)..."
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "屎壓資函仟喨周議寄弌(LIST)..."
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "屎壓評茅喨周 %d"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "屎壓曜竃"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "屎壓資函喨周 (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, fuzzy, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "辺欺喨周朔貫捲暦匂貧評茅"
+
+#: src/inc.c:1075
+#, fuzzy
+msgid "Connection failed."
+msgstr "銭俊払移"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "侃尖喨周扮窟伏危列。"
+
+#: src/inc.c:1086
+#, fuzzy, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr "侃尖喨周扮窟伏危列。"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "短嗤複噫甘徒腎寂。"
+
+#: src/inc.c:1097
+#, fuzzy
+msgid "Can't write file."
+msgstr "涙隈亟秘猟周。\n"
+
+#: src/inc.c:1102
+#, fuzzy
+msgid "Socket error."
+msgstr "Socket危列\n"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr ""
+
+#: src/inc.c:1114
+#, fuzzy
+msgid "Mailbox is locked."
+msgstr "佚簓蕚"
+
+#: src/inc.c:1118
+#, fuzzy, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "佚簓蕚"
+
+#: src/inc.c:1124 src/send_message.c:585
+#, fuzzy
+msgid "Authentication failed."
+msgstr "刮屬圭隈"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, fuzzy, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr "刮屬圭隈"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr ""
+
+#: src/inc.c:1170
+#, fuzzy
+msgid "Incorporation cancelled\n"
+msgstr "栽旺仟喨周"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "屎壓貫 %s 資函仟喨周欺 %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "補秘壓 %2$s 貧議 %1$s 議畜鷹"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "補秘畜鷹"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "亅咏晩崗"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"猟周 `%s '厮贋壓。\n"
+"涙隈幹秀猟周周。"
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "glib 音屶隔 g_thread。\n"
+
+#: src/main.c:246
+#, fuzzy
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"短嗤屎鳩芦廾 GnuPG。\n"
+"厮鋤喘 OpenPGP 屶隔。"
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "喘隈%s [OPTION]...\n"
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [address] 嬉蝕廱亟完笥"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach 猟周1 [猟周2]...\n"
+" 喘峺協議現揮猟周嬉蝕廱亟完笥"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 俊辺仟喨周"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 俊辺侭嗤嬖催議仟喨周"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send 窟僕錦双嶄議喨周"
+
+#: src/main.c:409
+#, fuzzy
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status 塋肖兵悳方"
+
+#: src/main.c:410
+#, fuzzy
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status 塋肖兵悳方"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 距編庁塀"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 塋掌丹鑾旺曜竃"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 補竃井云佚連旺曜竃"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "屎壓廱亟喨周。寔議勣曜竃宅"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "電錦議喨周"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "匯乂隆窟僕議佚周瓜慧秘錦双。嶬斃乏宅"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "総翌匯倖 Sylpheed 屎壓塰佩。\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/猟周(_F)/猟周斜(_F)"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/猟周(_F)/猟周斜(_F)/仟秀猟周斜(_n)..."
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/猟周(_F)/猟周斜(_F)/嶷凋兆猟周斜(_R)..."
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/猟周(_F)/猟周斜(_F)/評茅猟周斜(_D)"
+
+#: src/mainwindow.c:459
+#, fuzzy
+msgid "/_File/_Mailbox"
+msgstr "/猟周(_F)/耶紗喨(_A)..."
+
+#: src/mainwindow.c:460
+#, fuzzy
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/猟周(_F)/耶紗喨(_A)..."
+
+#: src/mainwindow.c:461
+#, fuzzy
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/評茅喨(_m)"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+#, fuzzy
+msgid "/_File/_Mailbox/---"
+msgstr "/猟周(_F)/猟周斜(_F)"
+
+#: src/mainwindow.c:463
+#, fuzzy
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/殊臥仟喨周(_C)"
+
+#: src/mainwindow.c:465
+#, fuzzy
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/猟周(_F)/殊臥侭嗤猟周斜嶄議仟喨周(_C)"
+
+#: src/mainwindow.c:468
+#, fuzzy
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/嶷仟膝宙猟周斜峯(_e)"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/猟周(_F)/擬秘mbox猟周...(_I)"
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/猟周(_F)/擬竃欺 mbox 猟周(_E)..."
+
+#: src/mainwindow.c:474
+#, fuzzy
+msgid "/_File/Empty all _trash"
+msgstr "/猟周(_F)/賠腎系周(_t)"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/猟周(_F)/総贋葎(_S)..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/猟周(_F)/嬉咫(_P)..."
+
+#: src/mainwindow.c:479
+#, fuzzy
+msgid "/_File/_Work offline"
+msgstr "/猟周(_F)/峨秘猟周(_I)"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/猟周(_F)/曜竃(_x)"
+
+#: src/mainwindow.c:487
+#, fuzzy
+msgid "/_Edit/Select _thread"
+msgstr "/園辞(_E)/畠僉(_a)"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/園辞(_E)/壓輝念喨周嶄臥孀(_F)..."
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/園辞(_E)/臥孀喨周(_S)..."
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/猟周斜峯(_F)"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/喨周篇夕(_M)"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/垢醤生(_T)"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/垢醤生(_T)/夕炎才猟忖(_a)"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/垢醤生(_T)/夕炎(_I)"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/垢醤生(_T)/猟忖(_T)"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/垢醤生(_T)/涙(_N)"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/臥心(_V)/塋昌鰔茄(_d)/彜蓑生(_b)"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/臥心(_V)/蛍宣議猟周斜峯完笥(_o)"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/臥心(_V)/蛍宣議喨周篇夕完笥(_e)"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/臥心/電會(_S)"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/臥心(_V)/電會(_S)/梓會催電會(_n)"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/臥心(_V)/電會(_S)/梓寄弌電會(_i)"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/臥心(_V)/電會(_S)/梓晩豚電會(_d)"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/臥心(_V)/電會(_S)/梓窟周繁電會(_f)"
+
+#: src/mainwindow.c:520
+#, fuzzy
+msgid "/_View/_Sort/by _recipient"
+msgstr "/臥心(_V)/電會(_S)/梓寄弌電會(_i)"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/臥心(_V)/電會(_S)/梓麼籾電會(_s)"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/臥心(_V)/電會(_S)/梓冲弼炎廣電會(_c)"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/臥心(_V)/電會(_S)/梓炎芝電會(_m)"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/臥心(_V)/電會(_S)/梓隆響電會(_u)"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/臥心(_V)/電會(_S)/梓現周電會(_t)"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/臥心(_V)/電會(_S)/音勣電會(_o)"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/臥心(_V)/電會(_S)/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/臥心(_V)/電會(_S)/幅會"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/臥心(_V)/電會(_S)/週會"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/臥心(_V)/電會(_S)/梓麼籾鹿嶄(_A)"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/臥心(_V)/梓瀚臥心(_r)"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/臥心(_V)/婢蝕侭嗤瀚(_x)"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/臥心(_V)/辺抹侭嗤瀚(_l)"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/臥心(_V)/譜崔塋章(_i)..."
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/臥心(_V)/廬欺(_G)"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/篇夕(_V)/廬欺(_G)/貧匯倖喨周(_P)"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/篇夕(_V)/廬欺(_G)/和匯倖喨周(_N)"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/臥心(_V)/廬欺(_G)/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/臥心(_V)/廬欺(_G)/貧匯倖隆響喨周(_R)"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/臥心(_V)/廬欺(_G)/和匯倖隆響喨周(_E)"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/篇夕(_V)/廬欺(_G)/貧匯倖仟喨周(_w)"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/篇夕(_V)/廬欺(_G)/和匯倖仟喨周(_x)"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/臥心(_V)/廬欺(_G)/貧匯倖炎芝議喨周(_m)"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/臥心(_V)/廬欺(_G)/和匯倖炎芝議喨周(_a)"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/臥心(_V)/廬欺(_G)/貧匯倖喘冲弼炎廣議喨周(_l)"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/臥心(_V)/廬欺(_G)/和匯倖喘冲弼炎廣議喨周(_b)"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/臥心(_V)/廬欺(_G)/凪万猟周斜(_f)..."
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/臥心(_V)/忖憲鹿(_C)/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/臥心(_V)/忖憲鹿(_C)"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/臥心(_V)/忖憲鹿(_C)/徭強殊霞(_A)"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/7了 ASCII (US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/廉天 (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/廉天 (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/廉天 (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/襖袋議囂 (ISO-8859-13)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/襖袋議囂 (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/錬整囂 (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/輿串凪囂 (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/帽性健囂 (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/帽性健囂 (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+#, fuzzy
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/帽性健囂 (KOI8-_R)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/帽性健囂 (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/晩囂 (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/晩囂 (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/晩囂 (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/晩囂 (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/酒悶嶄猟 (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/訓悶嶄猟 (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/訓悶嶄猟 (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/嶄猟 (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/劾亙囂 (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/劾亙囂 (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/密忽囂 (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/臥心(_V)/忖憲鹿(_C)/密忽囂 (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/臥心(_V)/壓仟完笥嶄嬉蝕(_W)"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/臥心(_V)/喨周坿猟周(_A)"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/臥心(_V)/塋硝嗤喨周遊(_h)"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/臥心(_V)/厚仟姜勣(_U)"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/喨周(_M)"
+
+#: src/mainwindow.c:656
+#, fuzzy
+msgid "/_Message/Recei_ve"
+msgstr "/喨周(_M)/嶷仟園辞(_e)"
+
+#: src/mainwindow.c:657
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/喨周(_M)/俊辺侭嗤嬖催(_a)"
+
+#: src/mainwindow.c:659
+#, fuzzy
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/喨周(_M)/俊辺侭嗤嬖催(_a)"
+
+#: src/mainwindow.c:661
+#, fuzzy
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/喨周(_M)/函俊辺(_g)"
+
+#: src/mainwindow.c:663
+#, fuzzy
+msgid "/_Message/Recei_ve/---"
+msgstr "/喨周(_M)/嶷仟園辞(_e)"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/喨周(_M)/窟僕錦双嶄議喨周(_S)"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/喨周(_M)/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/喨周(_M)/廱亟仟喨周(_n)"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/喨周(_M)/指鹸(_R)"
+
+#: src/mainwindow.c:669
+#, fuzzy
+msgid "/_Message/Repl_y to"
+msgstr "/喨周(_M)/畠何指鹸(_l)"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+#, fuzzy
+msgid "/_Message/Repl_y to/_all"
+msgstr "/喨周(_M)/畠何指鹸(_l)"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+#, fuzzy
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/喨周(_M)/指鹸公窟周繁(_y)"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+#, fuzzy
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/喨周(_M)/畠何指鹸(_l)"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/喨周(_M)/廬窟(_F)"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/喨周(_M)/恬葎現周廬窟(_w)"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/喨周(_M)/嶷仟協了(_t)"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/喨周(_M)/卞強(_o)..."
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/喨周(_M)/鹸崙(_C)..."
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/喨周(_M)/評茅(_D)"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/喨周(_M)/炎芝(_M)"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/喨周(_M)/炎芝(_M)/炎芝(_M)"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/喨周(_M)/炎芝(_M)/函炎芝(_U)"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/喨周(_M)/炎芝(_M)/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/喨周(_M)/炎芝(_M)/炎芝葎隆響(_e)"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/喨周(_M)/炎芝(_M)/炎芝葎厮響(_d)"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/喨周(_M)/炎芝(_M)/畠何炎芝葎厮響(_r)"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/喨周(_M)/嶷仟園辞(_e)"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/垢醤(_T)/繍窟周繁耶紗欺仇峽仮嶄(_k)"
+
+#: src/mainwindow.c:700
+#, fuzzy
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/垢醤(_T)/狛陀喨周(_F)"
+
+#: src/mainwindow.c:702
+#, fuzzy
+msgid "/_Tools/Filter _selected messages"
+msgstr "/垢醤(_T)/狛陀喨周(_F)"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/垢醤(_T)/幹秀狛陀号夸(_C)"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/垢醤(_T)/幹秀狛陀号夸(_C)/徭強(_A)"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/垢醤(_T)/幹秀狛陀号夸(_C)/梓窟周繁(_F)"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/垢醤(_T)/幹秀狛陀号夸(_C)/梓辺周繁(_T)"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/垢醤(_T)/幹秀狛陀号夸(_C)/梓麼籾(_S)"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/垢醤(_T)/評茅嶷鹸議喨周(_p)"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/垢醤(_T)/峇佩(_x)"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/垢醤(_T)/晩崗完笥(_L)"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/塘崔(_C)"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/塘崔(_C)/宥喘遍僉(_C)..."
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/塘崔(_C)/狛陀譜崔(_F)..."
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/塘崔(_C)/庁医(_T)..."
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/塘崔(_C)/強恬(_A)..."
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/塘崔(_C)/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/塘崔(_C)/輝念嬖催遍僉(_P)..."
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/塘崔(_C)/幹秀仟嬖催(_n)..."
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/塘崔(_C)/園辞嬖催(_E)..."
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/塘崔(_C)/個延輝念嬖催(_H)"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/逸廁(_H)/返過(_M)"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/逸廁(_H)/返過(_M)/哂囂(_E)"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/逸廁(_H)/返過(_M)/晩囂(_J)"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/逸廁(_H)/械需諒籾(_F)"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/逸廁(_H)/械需諒籾(_F)/哂囂(_E)"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/逸廁(_H)/械需諒籾(_F)/蟻囂(_G)"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/逸廁(_H)/械需諒籾(_F)/廉萎兩囂(_S)"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/逸廁(_H)/械需諒籾(_F)/隈囂(_F)"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/逸廁(_H)/械需諒籾(_F)/吭寄旋囂(_I)"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/逸廁(_H)/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "屎壓幹秀麼完笥...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "麼完笥嵯崚簪嬋 %d 払移\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "頼撹。\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "涙炎籾"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "涙"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "屎壓委完笥蛍侯圭塀貫 %d 欺 %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr ""
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr ""
+
+#: src/mainwindow.c:1489
+#, fuzzy
+msgid "Empty all trash"
+msgstr "賠腎系周"
+
+#: src/mainwindow.c:1490
+#, fuzzy
+msgid "Empty messages in all trash?"
+msgstr "賠腎系周篝鏥痛嗤佚周"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "耶紗喨"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"補秘喨篶志叩\n"
+"泌惚峺協阻厮贋壓議喨筍万繍瓜徭強膝宙。"
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "喨 `%s '厮将贋壓。"
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "喨"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"幹秀喨周篳О棔\n"
+"匆俯蝶乂猟周厮将贋壓賜宀艇短嗤亟幡沺"
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed猟周斜篇夕"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed喨周篇夕"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/指鹸(_R)"
+
+#: src/mainwindow.c:2073
+#, fuzzy
+msgid "/Reply to _all"
+msgstr "指鹸公侭嗤繁"
+
+#: src/mainwindow.c:2074
+#, fuzzy
+msgid "/Reply to _sender"
+msgstr "/指鹸窟周繁(_y)"
+
+#: src/mainwindow.c:2075
+#, fuzzy
+msgid "/Reply to mailing _list"
+msgstr "/畠何指鹸(_l)"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/廬窟(_F)"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "恬葎現周廬窟(_w)"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/嶷仟園辞(_t)"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "俊辺"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "栽旺仟喨周"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "畠何俊辺"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "栽旺侭嗤嬖催議仟喨周"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "窟僕錦双嶄議喨周"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "廱亟"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "廱亟仟喨周"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "指鹸"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "指鹸乎喨周"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "畠何指鹸"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "指鹸公侭嗤繁"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "廬窟"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "廬窟乎喨周"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "評茅乎喨周"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "峇佩"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "峇佩炎芝議侃尖"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "和匯倖隆響議喨周"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "遍僉"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "宥喘遍僉"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "嬖催"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "嬖催譜崔"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr ""
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr ""
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "曜竃殻會"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "勣曜竃云殻會宅"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "涙隈亟秘匝扮猟周\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "屎壓貫 %s 資函喨周欺 %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "涙隈響函 mbox 猟周。\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "涙丼議 mbox 鯉塀%s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "鯉塀音屎鳩議 mbox%s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "涙隈嬉蝕匝扮猟周\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"孀欺短嗤算鷹議辺周繁\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "孀欺 %d 撃喨周。\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "涙隈幹秀迄猟周 %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "泌惚辛嬬喘 `flock '旗紋 `file '。\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "涙隈幹秀 %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "総匯倖序殻啜嗤乎喨筍吉棋...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "涙隈迄廖 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "涙丼議迄窃侏\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "涙隈盾迄 %s\n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "涙隈繍喨簓廠葎腎。\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "屎壓貫 %s 擬竃佚周欺 %s...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "壓輝念喨周嶄臥孀"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "臥孀猟忖"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "曝蛍寄弌亟"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "鯒伊冕"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "朴沫"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "朴沫払移"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "勣朴沫議忖憲堪短孀欺。"
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "厮臥孀欺喨周蝕遊惨喀疥下茂"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "厮臥孀欺喨周潤硫惨喊遊写偬"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "朴沫潤崩"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "幹秀喨周篇夕...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "総贋葎"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "顕固"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "顕固厮贋壓議猟周"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "涙隈隠贋猟周 `%s '。"
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "嬉咫"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"補秘嬉咫凋綜佩\n"
+"( `%s '繍瓜紋算葎猟周兆)"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"嬉咫凋綜佩涙丼\n"
+" `%s '"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "涙隈鹸崙喨周 %s 欺 %s\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "涙隈嬉蝕炎芝猟周。\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "坿猟周斜嚥朕議猟周斜頁揖匯倖。\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr "屎壓鹸崙喨周 %s%c%d 欺 %s ...\n"
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr "朕村 %s 議恷朔匯倖會催 = %d\n"
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/嬉蝕(_O)"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/喘...嬉蝕(_w)"
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/恬葎猟云塋(_D)"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "/総贋葎(_S)..."
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/殊臥禰兆(_C)"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "屎壓幹秀MIME篇夕...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME窃侏"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "猟云"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "現周"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "僉夲 \"殊臥禰兆\"栖殊臥"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "涙隈隠贋謹何蛍喨周議乎何蛍。"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "嬉蝕喘"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"補秘嬉蝕猟周議凋綜佩\n"
+"( `%s '繍瓜紋算葎猟周兆)"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "MIME賀心匂凋綜佩涙丼 `%s '"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "屎壓幹秀欺 %s:%d 議NNTP銭俊...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr "欺 %s:%d 議NNTP銭俊厮僅蝕。屎壓嶷仟銭俊...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr "猟嫗 %d 厮産贋狛。\n"
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr "屎壓和墮猟嫗 %d...\n"
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "涙隈響函猟嫗 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "涙隈資函仟療怏双燕\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "涙隈窟猟嫗。\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "涙隈資函猟嫗 %d\n"
+
+#: src/news.c:735
+#, fuzzy, c-format
+msgid "can't select group: %s\n"
+msgstr "涙隈僉夲怏 %s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "涙丼議猟嫗袈律%d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "短嗤仟猟嫗。\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr "屎壓資函 %3$s 戦議 xover %1$d - %2$d...\n"
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "涙隈資函 xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "資函 xover 扮窟伏危列。\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "涙丼議 xover 佩%s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "涙隈資函 xhdr\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "資函 xhdr 扮窟伏危列。\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "涙隈銭俊欺NNTP捲暦匂%s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "亅咏危列%s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "亅咏危列\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "窟猟嫗扮窟伏危列\n"
+
+#: src/nntp.c:363
+#, fuzzy
+msgid "Error occurred while sending command\n"
+msgstr "侃尖喨周扮窟伏危列。"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "笥綜堪"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[短嗤喘薩炎紛]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr ""
+"%s萩補秘笥綜堪\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"危列議笥綜堪「慂...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "壓諒昨佚連嶄短嗤窟嶄菻議APOP扮漢\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "壓諒昨佚連嶄扮寂漢囂隈危列\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 亅咏危列\n"
+
+#: src/pop.c:252
+#, fuzzy, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "涙丼議 xover 佩%s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: 屎壓評茅狛豚喨周 %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3彩狛喨周 %d (%d 忖准)\n"
+
+#: src/pop.c:660
+#, fuzzy
+msgid "mailbox is locked\n"
+msgstr "佚簓蕚"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr ""
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "音嬬蝕兵TLS氏三\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "刮屬扮窟伏危列\n"
+
+#: src/pop.c:681
+#, fuzzy
+msgid "command not supported\n"
+msgstr "凋綜"
+
+#: src/pop.c:685
+#, fuzzy
+msgid "error occurred on POP3 session\n"
+msgstr "刮屬扮窟伏危列\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "屎壓響函塘崔猟周...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "窟 %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "響函頼塘崔。\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "隠贋塘崔猟周。\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "哘喘"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "屎壓嬉蝕嬖催遍僉邊或...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "嬖催%d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "仟嬖催議遍僉"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "嬖催遍僉"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "屎壓幹秀嬖催遍僉邊或...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "俊辺"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "咨暴"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr "SSL"
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "互雫"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "嬖催兆各"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "譜崔葎潮範嬖催"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "倖繁彿創"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "畠兆"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "喨周仇峽"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "怏岶"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "捲暦匂彿創"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr "POP3"
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr "IMAP4"
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "仟療怏 (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "涙(云仇)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "乎捲暦匂俶勣刮屬"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "仟療怏捲暦匂"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "俊辺捲暦匂"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "SMTP捲暦匂(窟僕)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "喘薩兆"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "畜鷹"
+
+#: src/prefs_account.c:993
+#, fuzzy
+msgid "Use secure authentication (APOP)"
+msgstr "乎捲暦匂俶勣刮屬"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "辺欺喨周朔貫捲暦匂貧評茅"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "參朔評茅"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "爺"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(0 爺坐⊆管廠)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "和墮捲暦匂貧議侭嗤喨周"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "俊辺寄弌渣"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "壓俊辺喨周扮序佩狛陀"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "潮範辺周"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "(短嗤狛陀議喨周氏隠贋壓乎猟周斜嶄)"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "刮屬圭隈"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "徭強"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr " `畠何俊辺 '扮殊臥乎嬖催議仟喨周"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "喨周遊"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "耶紗晩豚遊囃"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "伏撹喨周炎紛"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "耶紗喘薩協吶議遊"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "園辞... "
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "刮屬"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP刮屬(SMTP AUTH)"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr ""
+"泌惚低音野宸乂遑繍聞喘才俊辺喨周猴議\n"
+"喘薩兆才笥綜。"
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "窟僕念喘POP3刮屬"
+
+#: src/prefs_account.c:1349
+#, fuzzy
+msgid "Command output"
+msgstr "凋綜"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "徭強譜崔參和仇峽"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "貝僕"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "畜周貝僕"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "指鹸崛"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "潮範斤喨周紗畜"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "潮範斤喨周禰兆"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr ""
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "聞喘賠萱議猟云禰兆"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "禰兆畜埒"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "聞喘潮範議GnuPG畜埒"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "梓孚喨周仇峽僉夲畜埒"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "返垢峺協畜埒"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "喘薩賜宀畜埒ID"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "音聞喘SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "聞喘SSL銭俊POP3捲暦匂"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "聞喘STARTTLS凋綜蝕兵SSL氏三"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "聞喘SSL銭俊IMAP4捲暦匂"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr ""
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "聞喘SSL銭俊NNTP捲暦匂"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "窟僕(SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "聞喘SSL銭俊SMTP捲暦匂"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr ""
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr ""
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "峺協SMTP極笥"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "峺協POP3極笥"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "峺協IMAP4極笥"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "峺協NNTP極笥"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "峺協囃兆"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP4 捲暦匂朕村"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "繍厮窟竃議喨周隠贋噐"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "繍喨周課後隠贋噐"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "繍評茅議喨周隠贋噐"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "短嗤補秘嬖催兆各。"
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "短嗤補秘喨周仇峽。"
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "短嗤補秘SMTP捲暦匂。"
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "短嗤補秘喘薩炎紛。"
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "短嗤補秘POP3捲暦匂。"
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "短嗤補秘IMAP4捲暦匂。"
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "短嗤補秘NNTP捲暦匂。"
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+
+#: src/prefs_actions.c:168
+#, fuzzy
+msgid "Actions configuration"
+msgstr "屎壓亟強恬塘崔猟周...\n"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "暇汽兆"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "凋綜佩"
+
+#: src/prefs_actions.c:211
+#, fuzzy
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"暇汽兆\n"
+" 壓暇汽兆嶄聞喘 / 氏伏撹徨暇汽\n"
+"凋綜佩\n"
+" 軟兵喘\n"
+" | 窟僕喨周坪否賜僉夲議坪否欺凋綜\n"
+" > 窟僕喘薩補秘議猟云欺凋綜\n"
+" * 窟僕喘薩補秘議咨茄猟云欺凋綜\n"
+" 潤崩喘\n"
+" | 喘凋綜補竃紋算喨周坪否賜僉夲議坪否\n"
+" & 壓朔岬塰佩凋綜\n"
+" 聞喘 %f 燕幣喨周猟周兆\n"
+" %F 燕幣厮僉夲議喨周猟周双燕\n"
+" %p 燕幣僉夲議何蛍。"
+
+#: src/prefs_actions.c:256
+#, fuzzy
+msgid " Replace "
+msgstr "紋旗"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr " 囂隈逸廁 "
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "厮廣過議強恬"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "(仟秀)"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "短嗤譜崔暇汽兆。"
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "壓暇汽兆嶄音塋俯嗤丹催 ':'。 "
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "暇汽兆湊海。"
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "短嗤譜崔凋綜佩。"
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "暇汽兆才凋綜湊海。"
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"凋綜\n"
+"%s\n"
+"嗤匯倖囂隈危列。"
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "評茅強恬"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "艇寔議勣評茅乎強恬宅"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "屎壓幹秀宥喘遍僉邊或...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "宥喘遍僉"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "哈猟"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "塋"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "喨周"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "凪万"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "翌何殻會"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "聞喘翌何殻會栽旺喨周"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "凋綜"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "云仇喨周学"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "貫喨周学栽旺喨周"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "栽旺喨周扮序佩狛陀"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr ""
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "徭強殊臥仟喨周"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "耽"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "蛍嶝"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "尼強扮殊臥仟喨周"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "栽旺喨周朔厚仟侭嗤議云仇猟周斜"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "仟療"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"和墮猟嫗議恷寄方楚\n"
+"(峺協 0 燕幣涙渣)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "聞喘翌何殻會窟僕"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "繍厮窟竃議喨周隠贋壓窟周"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "窟僕扮聞喘議忖憲鹿"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "徭強 (秀咏聞喘)"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7了 ASCII (US-ASCII) "
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "廉天 (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "廉天 (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "嶄天 (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "襖袋議囂 (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "襖袋議囂 (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "錬整囂 (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "輿串凪囂 (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "帽性健囂 (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "帽性健囂 (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "帽性健囂 (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "帽性健囂 (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "晩囂 (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "晩囂 (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "晩囂 (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "酒悶嶄猟 (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "訓悶嶄猟 (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "訓悶嶄猟 (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "嶄猟 (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "劾亙猟 (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "密猟 (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "密猟 (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"泌惚僉夲 `徭強 '繍聞喘恷癖栽輝念曝囃譜崔\n"
+"議園鷹。"
+
+#: src/prefs_common.c:1185
+#, fuzzy
+msgid "Transfer encoding"
+msgstr "窟僕念孵佩"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr ""
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "禰兆蛍侯憲"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "徭強峨秘"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "徭強尼強翌何園辞匂"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "碍肝方"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "喨周孵佩噐及"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "倖忖憲"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "哈猟孵佩"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "補秘佩孵佩"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "窟僕念孵佩"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "徭強僉夲指鹸喘議嬖催"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "指鹸扮哈喘圻猟"
+
+#: src/prefs_common.c:1369
+#, fuzzy
+msgid "Reply button invokes mailing list reply"
+msgstr "/畠何指鹸(_l)"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "指鹸鯉塀"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "哈猟憲催"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "廬窟鯉塀"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr " 憲催宙峰 "
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "忖悶"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "鍬咎喨周遊兆(泌 `窟周繁 '、 `麼籾 ')"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "壓猟周斜兆都塋称感喪兵議方楚"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "仟療怏抹亟海噐"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "佚周"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "姜勣篇夕"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "泌惚窟周繁頁艇徭失 `窟周繁 '生嶄塋承鎚琶媼繁"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "婢蝕瀚"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "晩豚鯉塀"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr " 譜崔姜勣嶄塋承掴... "
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "尼喘喨周議冲弼燕幣"
+
+#: src/prefs_common.c:1722
+#, fuzzy
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "喘汽忖准忖憲塋硝忖准忖銚才方忖"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "壓喨周篇夕岻貧塋肖兵遊中医"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "壓喨周篇夕岻貧塋昭魘無柘兵遊"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "喨周坪否佩寂鉦"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "倖駛"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "佩遍抹序"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "獄強"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "磯匈獄強"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "峠錆獄強"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "耽肝獄強"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr ""
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "徭強殊臥禰兆"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "壓起竃完笥嶄塋焦兆殊臥潤惚"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "委畜鷹匝扮贋慧壓坪贋嶄"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "岻朔狛豚"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "蛍嶝"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr ""
+"(譜崔 '0' 刈贋畜鷹\n"
+"葎屁倖垢恬)"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "補秘笥綜堪扮俺資補秘(厚芦畠)"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "泌惚 GnuPG 音垢恬壓尼強扮塋松御"
+
+#: src/prefs_common.c:1976
+#, fuzzy
+msgid "Always open messages in summary when selected"
+msgstr "短嗤僉夲喨周猟周。"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "序秘猟周斜扮枠嬉蝕隆響議喨周"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr ""
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "辺欺仟喨周扮廬欺辺周"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "輝卞強賜評茅喨周扮羨軸峇佩"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr "(泌惚乎僉邱惘妝炎芝喨周岷欺頼撹峇佩)"
+
+#: src/prefs_common.c:2009
+#, fuzzy
+msgid "Receive dialog"
+msgstr "塋晶喨婉垰或"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "塋晶喨婉垰或"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "悳頁"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr ""
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "貫音"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "壓辺欺危列扮音起竃危列斤三崇"
+
+#: src/prefs_common.c:2040
+#, fuzzy
+msgid "Close receive dialog when finished"
+msgstr "塋晶喨婉垰或"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr " 譜崔囚徒購選... "
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "翌何凋綜 (%s 繍瓜紋算葎猟周兆賜URI)"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "利匈箝誓匂"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "褒似扮繍仇峽耶紗欺辺周繁嶄"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "曜竃殻會扮"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "曜竃扮序佩鳩範"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "壓曜竃扮賠腎系周"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "壓賠腎念儂諒"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "泌惚錦双嶄嗤喨周祥窟竃少御"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr ""
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "抹亟議佛豚兆"
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "頼屁議佛豚兆"
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "抹亟議埖芸兆"
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "頼屁議埖芸兆"
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "輝念曝囃譜崔遍僉議晩豚才扮寂"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "弊射(定/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "噴序崙燕幣議埖嶄議爺方"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "24弌扮扮嶝議噴序崙弌扮"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "12弌扮扮嶝議噴序崙弌扮"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "噴序崙燕幣議匯定嶄議爺方"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "噴序崙燕幣議埖芸"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "噴序崙燕幣議爺方"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "AM賜PM"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "噴序崙燕幣議昼"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "噴序崙燕幣議佛豚嶄議爺方"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "輝念曝囃譜崔議遍僉晩豚"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "定芸議恷朔曾倖方忖"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "噴序崙議定芸"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "扮曝、兆忖賜抹亟"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "傍苧憲"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "宙峰"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "幣箭"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "譜崔喨周冲弼"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "冲弼"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "哈猟及匯雫"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "哈猟及屈雫"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "哈猟及眉雫"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "URI 全俊"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "儉桟聞喘哈猟冲弼"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "僉夲哈猟雫艶 1 議冲弼"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "僉夲哈猟雫艶 2 議冲弼"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "僉夲哈猟雫艶 3 議冲弼"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "僉夲URI議冲弼"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "憲催議宙峰"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"晩豚\n"
+"窟周繁\n"
+"窟佚繁議畠兆\n"
+"窟佚繁議兆\n"
+"窟佚繁議侖\n"
+"麼籾\n"
+"辺周繁\n"
+"貝僕\n"
+"仟療怏\n"
+"喨周炎紛催"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "泌惚 x 譜崔阻峙夸塋 expr"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"喨周坪否\n"
+"哈喘議喨周坪否\n"
+"短嗤禰兆議喨周坪否\n"
+"短嗤禰兆議哈猟坪否\n"
+"%"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"郡弍\n"
+"諒催\n"
+"恣凄催\n"
+"嘔凄催"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "忖悶僉夲"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "囚徒購選"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"僉夲圓崔議囚購選。\n"
+"艇匆辛參繍報炎慧壓暇汽酩浪梓和販採囚\n"
+"(賜怏栽囚)栖俐個暇汽酔楯囚。"
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "潮範"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "症塀議Sylpheed"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "徭協吶喨周遊譜崔"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "徭協吶喨周遊"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "短嗤譜崔喨周遊兆。"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "評茅喨周遊"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "艇鳩糞詆廠乎喨周遊宅"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "屎壓幹秀喨周遊塋症蕚探調或...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "喨周遊塋症蕚"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "喨周遊兆"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "塋承柘兵遊"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "咨茄議喨周遊"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "塋硝嗤短嗤峺協議喨周遊"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "屎壓響函喨周遊塋湘籌...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "屎壓亟喨周遊塋湘籌...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "乎喨周遊厮将壓双燕嶄。"
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "狛陀譜協"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr ""
+
+#: src/prefs_filter.c:239
+#, fuzzy
+msgid "Top"
+msgstr "辺周繁"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr ""
+
+#: src/prefs_filter.c:289
+#, fuzzy
+msgid "Copy"
+msgstr "/鹸崙(_C)..."
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "評茅号夸"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "艇鳩糞誨評茅乎号夸宅"
+
+#: src/prefs_filter_edit.c:337
+#, fuzzy
+msgid "Filter rule"
+msgstr "評茅号夸"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr ""
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr ""
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr ""
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr ""
+
+#: src/prefs_filter_edit.c:563
+#, fuzzy
+msgid "Any header"
+msgstr "咨茄議喨周遊"
+
+#: src/prefs_filter_edit.c:564
+#, fuzzy
+msgid "Edit header..."
+msgstr "喨周遊"
+
+#: src/prefs_filter_edit.c:567
+#, fuzzy
+msgid "Message body"
+msgstr "喨周"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr ""
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr ""
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "淫根"
+
+#: src/prefs_filter_edit.c:584
+#, fuzzy
+msgid "doesn't contain"
+msgstr "音淫根"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr ""
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr ""
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr ""
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:710
+#, fuzzy
+msgid "Move to"
+msgstr "鯱"
+
+#: src/prefs_filter_edit.c:711
+#, fuzzy
+msgid "Copy to"
+msgstr "/鹸崙(_C)..."
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "音俊辺"
+
+#: src/prefs_filter_edit.c:713
+#, fuzzy
+msgid "Delete from server"
+msgstr "評茅猟周斜"
+
+#: src/prefs_filter_edit.c:716
+#, fuzzy
+msgid "Set mark"
+msgstr "廣瞥"
+
+#: src/prefs_filter_edit.c:717
+#, fuzzy
+msgid "Set color"
+msgstr "譜崔喨周冲弼"
+
+#: src/prefs_filter_edit.c:718
+#, fuzzy
+msgid "Mark as read"
+msgstr "/炎芝(_M)/炎芝葎厮響(_d)"
+
+#: src/prefs_filter_edit.c:723
+#, fuzzy
+msgid "Forward as attachment"
+msgstr "恬葎現周廬窟(_w)"
+
+#: src/prefs_filter_edit.c:724
+#, fuzzy
+msgid "Redirect"
+msgstr "/嶷仟園辞(_t)"
+
+#: src/prefs_filter_edit.c:728
+#, fuzzy
+msgid "Execute command"
+msgstr "峇佩"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr ""
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+#, fuzzy
+msgid "folder:"
+msgstr "猟周斜"
+
+#: src/prefs_filter_edit.c:1104
+#, fuzzy
+msgid "address:"
+msgstr "仇峽"
+
+#: src/prefs_filter_edit.c:1510
+#, fuzzy
+msgid "Edit header list"
+msgstr "喨周遊"
+
+#: src/prefs_filter_edit.c:1535
+#, fuzzy
+msgid "Headers"
+msgstr "喨周遊"
+
+#: src/prefs_filter_edit.c:1546
+#, fuzzy
+msgid "Header:"
+msgstr "喨周遊"
+
+#: src/prefs_filter_edit.c:1663
+#, fuzzy
+msgid "Rule name is not specified."
+msgstr "短嗤峺協辺周繁。"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+#, fuzzy
+msgid "Command is not specified."
+msgstr "短嗤譜崔凋綜佩。"
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+#, fuzzy
+msgid "Destination folder is not specified."
+msgstr "短嗤譜崔朕議。"
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr ""
+
+#: src/prefs_filter_edit.c:1881
+#, fuzzy
+msgid "Condition not exist."
+msgstr "短嗤譜崔凋綜佩。"
+
+#: src/prefs_filter_edit.c:1883
+#, fuzzy
+msgid "Action not exist."
+msgstr "%s採勅音贋壓\n"
+
+#: src/prefs_folder_item.c:115
+#, fuzzy
+msgid "Folder properties"
+msgstr "猟周斜奉來"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "匯違"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "噸宥"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr ""
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr ""
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr ""
+
+#: src/prefs_folder_item.c:352
+#, fuzzy
+msgid "Reply-To:"
+msgstr "指鹸崛"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "炎芝"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "現周"
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "麼籾"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "窟周繁"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "晩豚"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "會催"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr "屎壓幹秀姜勣双譜崔完笥...\n"
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "姜勣塋章酩蕚"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"僉夲勣塋菖旁勣篇夕嶄議酊拭D辛參聞喘 `鯢 '賜 `鯱 '梓泥\n"
+"俐個乏會賜溶強酊拭"
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "辛喘酊"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " -> "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " <- "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "塋章酊"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr " 珊圻葎潮範峙 "
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "庁医兆"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "廣過"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr " 紋算 "
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 憲催 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "厮廣過議庁医"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "庁医"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "庁医"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "庁医鯉塀危列。"
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "評茅庁医"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "艇鳩糞詆廠乎庁医宅"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content()佐鷹廬算払移。\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "涙隈嬉蝕炎芝猟周\n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "涙隈資函喨周 %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "窟僕電錦議喨周 %d 払移。\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "嬉咫凋綜佩涙丼 `%s '\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "彜蓑"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr "屎壓幹秀序業斤三崇...\n"
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "和墮方象扮窟伏危列。\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "涙隈亟秘猟周。\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "兔最兆短嗤刮屬"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "短嗤孀欺禰兆"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "屎鳩議禰兆"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "危列議禰兆"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "短嗤巷埒栖刮屬禰兆"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "刮屬禰兆扮窟伏危列"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "音揖議禰兆潤惚"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "危列採間議彜蓑"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "栖徭 `%s '議屎鳩禰兆"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "栖徭 \"%s\" 議危列禰兆"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "涙隈葎乎畜埒孀欺喘薩炎紛。"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " 匆祥頁 `%s '\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "禰兆幹秀扮寂 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "畜埒峺瞭%s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "萩僉夲 `%s '議畜埒"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "辺鹿 `%s '議佚連...%c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "僉夲畜埒"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "畜埒炎紛"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr "峙"
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "耶紗畜埒"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "補秘総翌議喘薩賜畜埒炎紛"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "電錦議喨周遊鱒撒。\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "屎壓銭俊"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "屎壓銭俊SMTP捲暦匂%s ..."
+
+#: src/send_message.c:450
+#, fuzzy
+msgid "Sending HELO..."
+msgstr "屎壓窟僕 MAIL FROM..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+#, fuzzy
+msgid "Authenticating"
+msgstr "刮屬"
+
+#: src/send_message.c:452 src/send_message.c:457
+#, fuzzy
+msgid "Sending message..."
+msgstr "屎壓窟僕喨周"
+
+#: src/send_message.c:455
+#, fuzzy
+msgid "Sending EHLO..."
+msgstr "屎壓窟僕 MAIL FROM..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "屎壓窟僕 MAIL FROM..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "屎壓窟僕"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "屎壓窟僕 RCPT TO..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "屎壓窟僕 DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "屎壓曜竃"
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "屎壓窟僕喨周 (%d / %d 忖准)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "屎壓窟僕喨周"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "窟僕喨周扮窟伏危列。"
+
+#: src/send_message.c:579
+#, fuzzy, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr "窟僕喨周扮窟伏危列。"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "佚簓蕚"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"遍枠艇駅倬峺協佚箋栂志叩\n"
+"艇辛參聞喘厮嗤議 MH 鯉塀議佚筍\n"
+"邪泌艇鳩糞嗤厮将嗤匯倖。\n"
+"邪泌艇涙隈刃協椎担萩汽似 `鳩協 '。"
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "殊臥禰兆"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "SMTP刮屬音辛喘\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr ""
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+#, fuzzy
+msgid "error occurred on SMTP session\n"
+msgstr "刮屬扮窟伏危列\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "屎壓幹秀圻猟完笥...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "喨周圻猟"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "屎壓塋 %s 議圻猟...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s圻猟"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "SSLv23音辛喘\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "SSLv23辛喘\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "TLSv1音辛喘\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "TLSv1辛喘\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "SSL圭隈音辛喘\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "音岑祇議SSL圭隈 *殻會危列*\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "幹秀SSL貧和猟扮窟伏危列\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL銭俊払移(%s)\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "聞喘 %s 議SSL銭俊\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "捲暦屬慕\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " 炎籾%s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " 禰窟宀%s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "臥孀喨周"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr ""
+
+#: src/summary_search.c:130
+#, fuzzy
+msgid "Match all of the following"
+msgstr "徭強譜崔參和仇峽"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "坪否"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "僉夲侭嗤謄塘議"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "厮欺器双燕議蝕兵纂茂貫恷朔蝕兵宅"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "厮欺器双燕議恷朔纂茂貫遊蝕兵宅"
+
+#: src/summaryview.c:341
+#, fuzzy
+msgid "/Repl_y to"
+msgstr "/畠何指鹸(_l)"
+
+#: src/summaryview.c:342
+#, fuzzy
+msgid "/Repl_y to/_all"
+msgstr "/畠何指鹸(_l)"
+
+#: src/summaryview.c:343
+#, fuzzy
+msgid "/Repl_y to/_sender"
+msgstr "/指鹸窟周繁(_y)"
+
+#: src/summaryview.c:344
+#, fuzzy
+msgid "/Repl_y to/mailing _list"
+msgstr "/畠何指鹸(_l)"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/卞強(_o)..."
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/鹸崙(_C)..."
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/炎芝(_M)"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/炎芝(_M)/炎芝(_M)"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/炎芝(_M)/函炎芝(_U)"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/炎芝(_M)/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/炎芝(_M)/炎芝葎隆響(_e)"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/炎芝(_M)/炎芝葎厮響(_d)"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/炎芝(_M)/畠何炎芝葎厮響(_r)"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/冲弼炎禰(_b)"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/嶷仟園辞(_e)"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "/耶紗窟周繁欺仇峽仮(_k)"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/臥心(_V)/圻猟(_S)"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/臥心(_V)/侭嗤炎籾(_h)"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/嬉咫(_P)..."
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr "M"
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr "U"
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr "No."
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr "屎壓幹秀姜勣篇夕...\n"
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "侃尖炎崗"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "嗤匯乂複噫炎芝。侃尖宅"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "屎壓膝宙猟周斜 (%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "短嗤隆響喨周"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "短窟嵶感喪兵。貫朔中蝕兵臥孀"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "短嗤隆響喨周"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "短窟嵶感喪兵。欺和匯倖猟周斜"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "壅肝臥孀"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "短嗤仟喨周"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "短窟嶄帯兵。貫朔中蝕兵臥孀"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "短嗤仟喨周"
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "短窟嶄帯兵。欺和匯倖猟周斜"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "短嗤炎芝狛議喨周"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "短嗤隆響喨周。貫朔中蝕兵臥孀"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "短嗤炎芝狛議喨周"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "短嗤炎芝狛議喨周。貫念中蝕兵臥孀"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "短嗤孀欺喘冲弼炎廣狛議喨周"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "短嗤孀欺喘冲弼炎廣狛議喨周。貫朔中蝕兵臥孀"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "短嗤喘冲弼炎廣議喨周。"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "短嗤孀欺喘冲弼炎廣狛議喨周。貫念中蝕兵臥孀"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "屎壓梓炎籾拷窃喨周..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "評茅阻 %d 倖喨周"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "卞強阻 %s%d"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ""
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "鹸崙阻 %s%d"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr " 遽姿「"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 倖仟喨周%d 倖隆響喨周慌 %d 倖喨周(%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 倖仟喨周喨周%d 倖隆響喨周慌 %d 倖喨周"
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "屎壓電會姜勣..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t屎壓貫喨周方象嶄譜崔姜勣..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "屎壓貫喨周方象嶄譜崔姜勣..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "屎壓亟姜勣産贋(%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(短嗤晩豚)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "喨周 %d 瓜炎芝\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "喨周 %d 瓜炎芝葎厮響\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "喨周 %d 瓜炎芝葎隆響\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "喨周 %s/%d 譜崔葎勣評茅\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "評茅喨周"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "艇鳩糞勣評茅系周籌亠柘兵宅"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "屎壓評茅嶷鹸喨周..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "喨周 %s/%d 瓜函炎芝\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "喨周 %d 瓜譜崔葎卞欺 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "朕炎嚥輝念猟周斜猴。"
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "喨周 %d 瓜譜崔葎鹸崙欺 %s\n"
+
+#: src/summaryview.c:2607
+#, fuzzy
+msgid "Destination for copy is same as current folder."
+msgstr "勣鹸崙議朕炎才輝念猟周斜猴。"
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "屎壓僉嶄畠何喨周..."
+
+#: src/summaryview.c:2787
+#, fuzzy
+msgid "Error occurred while processing messages."
+msgstr "侃尖喨周扮窟伏危列。"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "屎壓幹秀瀚..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "屎壓函瀚..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "屎壓函瀚參峇佩..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "屎壓狛陀..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "屎壓狛陀..."
+
+#: src/summaryview.c:3282
+#, fuzzy, c-format
+msgid "%d message(s) have been filtered."
+msgstr "喨周 %d 厮産贋。\n"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "猟周 %s 厮将贋壓。\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "屎壓幹秀猟云篇夕...\n"
+
+#: src/textview.c:576
+#, fuzzy
+msgid "This message can't be displayed.\n"
+msgstr "音氏俊辺欺議喨周\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "勣隠贋乎何蛍喘嘔囚汽似參起竃桟廠暇汽"
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "旺僉夲 `総贋葎... '"
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"賜梓和 `y '囚。\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "勣參猟云圭塀塋掌嘆新孱僉夲"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr " `參猟云塋 '賜梓 `t '囚。\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "勣喘翌何殻會嬉蝕乎何蛍僉夲"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr " `嬉蝕 '賜 `嬉蝕喘... '"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "賜褒似、賜汽似嶄囚"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "賜梓和 `l '囚。"
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "乎禰兆珊短嗤瓜殊臥。\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "勣殊臥万嘔囚泣似參起竃桟廠暇汽\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "旺僉夲 `殊臥禰兆 '。\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "亟秘 %s 扮払移。\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "涙隈嬉蝕猟周 %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (噸宥)"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP 刮屬)"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/評茅喨(_m)"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/評茅IMAP4嬖催(_I)"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/評茅仟療怏嬖催(_n)"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/喨周(_M)/窟僕(_S)"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/喨周(_M)/禰兆(_g)"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "云仇喨籌价屍佯兵。\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "喨周学朕村"
+
+#, fuzzy
+#~ msgid "Select..."
+#~ msgstr " 僉夲... "
+
+#~ msgid "Condition"
+#~ msgstr "訳周"
+
+#~ msgid "Keyword"
+#~ msgstr "購囚簡"
+
+#~ msgid "Destination"
+#~ msgstr "朕炎猟周斜"
+
+#~ msgid "Use regex"
+#~ msgstr "聞喘屎夸燕器塀"
+
+#~ msgid "Registered rules"
+#~ msgstr "厮廣過議号夸"
+
+#~ msgid "(none)"
+#~ msgstr "(涙)"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "嬉蝕URL議凋綜佩涙丼 `%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "産贋方象厮鱒撒\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/幹秀狛陀号夸(_i)"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/幹秀狛陀号夸(_i)/徭強(_A)"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/幹秀狛陀号夸(_i)/梓窟周繁(_F)"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/幹秀狛陀号夸(_i)/梓辺周繁(_T)"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/幹秀狛陀号夸(_i)/梓麼籾(_S)"
+
+#~ msgid "Queueing"
+#~ msgstr "屎壓電錦"
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "窟僕喨周扮窟伏危列。\n"
+#~ "頁倦繍乎喨周慧欺錦双猟周斜嶄"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "繍窟僕払移議喨周慧秘錦双"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/峇佩(_x)"
+
+#~ msgid "/Select _all"
+#~ msgstr "/畠僉(_a)"
+
+#, fuzzy
+#~ msgid "/Select t_hread"
+#~ msgstr "/畠僉(_a)"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "涙隈譜崔怏%s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "音氏俊辺欺議喨周\n"
+
+#, fuzzy
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/喨周(_M)/俊辺仟喨周(_i)"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "\t短嗤産贋猟周\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "\t屎壓響函姜勣産贋..."
+
+#~ msgid "Cache version is different. Discarding it.\n"
+#~ msgstr "産贋井云音揖。卿渠万。\n"
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "短窟岷蠎乃栂勅。\n"
+
+#~ msgid "Mark version is different (%d != %d). Discarding it.\n"
+#~ msgstr "炎芝井云音揖(%d != %d)。卿渠万。\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "音嬬喘耶紗庁塀嬉蝕炎芝猟周。\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "音嬬喘亟庁塀嬉蝕炎芝猟周。\n"
+
+#, fuzzy
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "涙隈幹秀迄猟周 %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "腎猟周斜\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "叙輝嗤試強完笥扮"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "繍氏卿払耽匯倖猟周斜圻栖議侭嗤譜崔。\n"
+#~ "写偬"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "完笥了崔x = %dy = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "譜崔 widgets..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "屎壓卞強喨周 %s%c%d 欺 %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "\t屎壓炎芝喨周..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "\t%d 倖仟喨周\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "涙隈僉夲喨 %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "屎壓資函喨周 %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "屎壓評茅産贋議喨周 %u - %u ... "
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "屎壓評茅侭嗤産贋議喨周... "
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "屎壓柴麻喨周方楚...\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "涙隈資函喨周猟周。"
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "壓姜勣貧梓圭鮗繍嬉蝕喨周"
+
+#, fuzzy
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "侃尖喨周扮窟伏危列。"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "窟僕錦双嶄議喨周扮窟伏危列。"
+
+#~ msgid "No message part selected."
+#~ msgstr "短嗤僉夲喨周何蛍。"
+
+#~ msgid "Predicate"
+#~ msgstr "僚簡"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "屎壓幹秀強恬譜崔完笥...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "強恬譜崔"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "屎壓響函強恬塘崔猟周...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "強恬凋綜危列\n"
+
+#~ msgid "Forking child and grandchild.\n"
+#~ msgstr "屎壓 fork 徨序殻才柾徨。\n"
+
+#~ msgid "Child: Waiting for grandchild\n"
+#~ msgstr "徨序殻砕壓吉棋柾徨\n"
+
+#~ msgid "Child: grandchild ended\n"
+#~ msgstr "徨序殻宰钁喀疂\n"
+
+#~ msgid "Killing child group id %d\n"
+#~ msgstr "屎壓姫棒徨序殻怏炎紛 %d\n"
+
+#~ msgid "Freeing children data %p\n"
+#~ msgstr "屎壓仏慧徨序殻方象 %p\n"
+
+#~ msgid "Updating actions input/output dialog.\n"
+#~ msgstr "屎壓厚仟補秘/補竃斤三崇議強恬。\n"
+
+#~ msgid "Child returned %c\n"
+#~ msgstr "徨序殻卦指 %c\n"
+
+#~ msgid "Sending input to grand child.\n"
+#~ msgstr "屎壓委補秘僕欺柾徨序殻。\n"
+
+#~ msgid "Input to grand child sent.\n"
+#~ msgstr "厮将委補秘僕欺柾徨序殻。\n"
+
+#~ msgid "Catching grand child's output.\n"
+#~ msgstr "屎壓資函柾徨序殻議補竃。\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Socket危列\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "短嗤孀欺嬖催。聞喘輝念嬖催...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "短嗤孀欺嬖催。\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "涙隈峇佩翌何凋綜%s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP刮屬払移\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "窟僕 QUIT 扮窟伏危列\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "涙隈銭俊SMTP捲暦匂%s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL 銭俊払移"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "銭俊欺 %s:%d 扮窟伏危列\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "窟僕 HELO 扮窟伏危列\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "窟僕 STARTTLS 扮窟伏危列\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "窟伏 EHLO 扮窟伏危列\n"
+
+#~ msgid "Signature file"
+#~ msgstr "禰兆猟周"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "屎壓幹秀徭協吶炎籾譜崔完笥...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "屎壓響函徭協吶喨周遊塘崔...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "屎壓亟徭協吶喨周遊塘崔...\n"
+
+#~ msgid "Creating filter setting window...\n"
+#~ msgstr "屎壓幹秀狛陀譜崔完笥...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "屎壓響函狛陀塘崔...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "屎壓亟狛陀塘崔...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "\t屎壓朴沫隆産贋議喨周... "
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "窟 %d 倖隆産贋議喨周。\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "\t屎壓功象方忖乏會電會隆産贋議喨周... "
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "膿崙忖憲鹿%s\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "塋俯邦峠獄強訳"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "喘間悶忖塋称感禅柘兵"
+
+#~ msgid "Done"
+#~ msgstr "頼撹"
diff --git a/po/zh_TW.Big5.po b/po/zh_TW.Big5.po
new file mode 100644
index 00000000..de78ed4f
--- /dev/null
+++ b/po/zh_TW.Big5.po
@@ -0,0 +1,6717 @@
+# Chinese translation of Sylpheed.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Xiangxin Luo <benluo@etang.com>, 2000 for initial GB2312 translation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sylpheed\n"
+"Report-Msgid-Bugs-To: hiro-y@kcn.ne.jp\n"
+"POT-Creation-Date: 2004-12-22 16:41+0900\n"
+"PO-Revision-Date: 2004-12-04 08:24+0800\n"
+"Last-Translator: Frank J. J. Weng <franklin@goodhorse.idv.tw>\n"
+"Language-Team: zh-l10n <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=big5\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/about.c:89
+msgid "About"
+msgstr "猪"
+
+#: src/about.c:207
+msgid ""
+"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n"
+"\n"
+msgstr ""
+
+#: src/about.c:211
+msgid ""
+"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 the Free "
+"Software Foundation; either version 2, or (at your option) any later "
+"version.\n"
+"\n"
+msgstr ""
+
+#: src/about.c:217
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+msgstr ""
+
+#: src/about.c:223
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place - Suite 330, Boston, MA 02111-1307, USA."
+msgstr ""
+
+#: src/about.c:230 src/addressadd.c:239 src/alertpanel.c:285
+#: src/compose.c:4664 src/editaddress.c:198 src/editaddress.c:670
+#: src/editbook.c:220 src/editgroup.c:366 src/editjpilot.c:344
+#: src/editldap.c:243 src/editldap_basedn.c:212 src/editvcard.c:239
+#: src/export.c:187 src/foldersel.c:206 src/grouplistdialog.c:244
+#: src/import.c:192 src/inputdialog.c:204 src/main.c:445 src/main.c:453
+#: src/mainwindow.c:2617 src/messageview.c:619 src/mimeview.c:801
+#: src/passphrase.c:130 src/prefs.c:468 src/prefs_actions.c:162
+#: src/prefs_common.c:2484 src/prefs_common.c:2625 src/prefs_common.c:2917
+#: src/prefs_common.c:3047 src/prefs_customheader.c:157
+#: src/prefs_display_header.c:191 src/prefs_filter_edit.c:330
+#: src/prefs_filter_edit.c:1561 src/prefs_summary_column.c:309
+#: src/prefs_template.c:262 src/sigstatus.c:134 src/summaryview.c:2716
+msgid "OK"
+msgstr "Tw"
+
+#: src/account.c:121
+msgid "Reading all config for each account...\n"
+msgstr "的勁咳b弦些]wい...\n"
+
+#: src/account.c:136
+#, c-format
+msgid "Found label: %s\n"
+msgstr "т貅佚: %s\n"
+
+#: src/account.c:340
+msgid ""
+"Some composing windows are open.\n"
+"Please close all the composing windows before editing the accounts."
+msgstr ""
+"zタb雫glンA\n"
+"出猪閏勁骸脅gい唆lンAi羆b弦]wC"
+
+#: src/account.c:346
+msgid "Opening account edit window...\n"
+msgstr "}衛b弦s粋鋸機い...\n"
+
+#: src/account.c:595
+msgid "Creating account edit window...\n"
+msgstr "横ネb弦s粋鋸機い...\n"
+
+#: src/account.c:600
+msgid "Edit accounts"
+msgstr "s粋b弦]w"
+
+#: src/account.c:618
+msgid ""
+"New messages will be checked in this order. Check the boxes\n"
+"on the `G' column to enable message retrieval by `Get all'."
+msgstr ""
+"惜dslン姫N|矛咾U迂唆凶如CziHつ随 G 剃譴お困莇堯A\n"
+"哦MwO_bu魁惜dv畢n惜d袴b弦唆lンC"
+
+#: src/account.c:638 src/addressadd.c:183 src/addressbook.c:488
+#: src/compose.c:3707 src/editaddress.c:194 src/editaddress.c:932
+#: src/editaddress.c:980 src/editbook.c:190 src/editgroup.c:254
+#: src/editjpilot.c:295 src/editldap.c:298 src/editvcard.c:210
+#: src/mimeview.c:150 src/prefs_filter.c:215 src/prefs_folder_item.c:175
+#: src/select-keys.c:299
+msgid "Name"
+msgstr "W細"
+
+#: src/account.c:639 src/prefs_account.c:828
+msgid "Protocol"
+msgstr "qT鶇w"
+
+#: src/account.c:640
+msgid "Server"
+msgstr "A捷"
+
+#: src/account.c:669 src/addressbook.c:627 src/editaddress.c:880
+#: src/editaddress.c:1013 src/prefs_actions.c:250 src/prefs_customheader.c:234
+#: src/prefs_display_header.c:272 src/prefs_display_header.c:327
+#: src/prefs_filter.c:277 src/prefs_filter_edit.c:1555
+msgid "Add"
+msgstr "sW"
+
+#: src/account.c:675 src/prefs_filter.c:283
+msgid "Edit"
+msgstr "s粋"
+
+#: src/account.c:681 src/prefs_customheader.c:241 src/prefs_filter.c:295
+#: src/prefs_filter_edit.c:1558
+msgid " Delete "
+msgstr "R娃"
+
+#: src/account.c:687 src/prefs_actions.c:313 src/prefs_customheader.c:289
+#: src/prefs_display_header.c:291 src/prefs_filter.c:253
+#: src/prefs_summary_column.c:285
+msgid "Down"
+msgstr "VU"
+
+#: src/account.c:693 src/prefs_actions.c:307 src/prefs_customheader.c:283
+#: src/prefs_display_header.c:285 src/prefs_filter.c:247
+#: src/prefs_summary_column.c:281
+msgid "Up"
+msgstr "VW"
+
+#: src/account.c:707
+msgid " Set as default account "
+msgstr "]姐w]b弦"
+
+#: src/account.c:713 src/action.c:1118 src/addressbook.c:2395
+#: src/addressbook.c:2399 src/addressbook.c:2436 src/addressbook.c:2542
+#: src/addressbook.c:2548 src/inc.c:641 src/message_search.c:135
+#: src/prefs_filter.c:184 src/summary_search.c:223
+msgid "Close"
+msgstr "猪階"
+
+#: src/account.c:757
+msgid "Delete account"
+msgstr "R娃b弦"
+
+#: src/account.c:758
+msgid "Do you really want to delete this account?"
+msgstr "zTwnR娃o啀b弦芹H"
+
+#: src/account.c:759 src/addressbook.c:839 src/addressbook.c:1666
+#: src/compose.c:2420 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:709 src/folderview.c:1917 src/folderview.c:1966
+#: src/folderview.c:1999 src/folderview.c:2035 src/folderview.c:2157
+#: src/folderview.c:2193 src/mainwindow.c:1477 src/mainwindow.c:1491
+#: src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "Yes"
+msgstr "O"
+
+#: src/account.c:759 src/compose.c:2672 src/compose.c:4842
+#: src/folderview.c:1917 src/folderview.c:1999 src/folderview.c:2035
+#: src/folderview.c:2157 src/folderview.c:2193
+msgid "+No"
+msgstr "+ぃn"
+
+#: src/action.c:328
+#, c-format
+msgid "Could not get message file %d"
+msgstr "Lk的Hン隻 %dC"
+
+#: src/action.c:359
+msgid "Could not get message part."
+msgstr "LkoHン困混e"
+
+#: src/action.c:376
+msgid "Can't get part of multipart message"
+msgstr "Lkoo哽Hン昏[隻C"
+
+#: src/action.c:469
+#, c-format
+msgid ""
+"The selected action cannot be used in the compose window\n"
+"because it contains %%f, %%F or %%p."
+msgstr ""
+"随昆OLkノ鷦脅gHンC\n"
+"]哀Ε]t %%f, %%F, %%pC"
+
+#: src/action.c:718
+#, c-format
+msgid ""
+"Command could not be started. Pipe creation failed.\n"
+"%s"
+msgstr ""
+"Lk衛以OA剤uLk悒漾G\n"
+"%s"
+
+#: src/action.c:804
+#, c-format
+msgid ""
+"Could not fork to execute the following command:\n"
+"%s\n"
+"%s"
+msgstr ""
+"Lk横ネl羌{唹罐~魁OG\n"
+"%s\n"
+"%s"
+
+#: src/action.c:1022
+#, c-format
+msgid "--- Running: %s\n"
+msgstr "--- 印罠OいG %s\n"
+
+#: src/action.c:1026
+#, c-format
+msgid "--- Ended: %s\n"
+msgstr "--- 飢OG %s\n"
+
+#: src/action.c:1060
+msgid "Action's input/output"
+msgstr "印罠Oぇ翠J/翠X"
+
+#: src/action.c:1106
+msgid " Send "
+msgstr "eX"
+
+#: src/action.c:1117
+msgid "Abort"
+msgstr ""
+
+#: src/action.c:1261
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%h' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"出翠JUC以@紺兌董G\n"
+"]'%%h' |Qm勧宛唹兌董^\n"
+" %s"
+
+#: src/action.c:1266
+msgid "Action's hidden user argument"
+msgstr "魯葎務]w藻唾ぇRO委柴"
+
+#: src/action.c:1270
+#, c-format
+msgid ""
+"Enter the argument for the following action:\n"
+"(`%%u' will be replaced with the argument)\n"
+" %s"
+msgstr ""
+"出翠JUC以@紺兌董G\n"
+"]'%%u' |Qm勧宛唹兌董^\n"
+" %s"
+
+#: src/action.c:1275
+msgid "Action's user argument"
+msgstr "魯葎務]wぇRO委柴"
+
+#: src/addressadd.c:163
+msgid "Add Address to Book"
+msgstr "N讌}[J讌}誰"
+
+#: src/addressadd.c:193 src/compose.c:4239 src/editaddress.c:195
+#: src/select-keys.c:300
+msgid "Address"
+msgstr "讌}"
+
+#: src/addressadd.c:203 src/addressbook.c:490 src/editaddress.c:196
+#: src/editaddress.c:785 src/editaddress.c:850 src/editgroup.c:256
+msgid "Remarks"
+msgstr "各漁"
+
+#: src/addressadd.c:225
+msgid "Select Address Book Folder"
+msgstr "随詳讌}誰瑚踏"
+
+#: src/addressadd.c:240 src/addressbook.c:1660 src/compose.c:4665
+#: src/compose.c:5362 src/compose.c:5398 src/editaddress.c:199
+#: src/editaddress.c:671 src/editbook.c:221 src/editgroup.c:367
+#: src/editjpilot.c:345 src/editldap.c:244 src/editldap_basedn.c:213
+#: src/editvcard.c:240 src/export.c:188 src/foldersel.c:207
+#: src/grouplistdialog.c:245 src/import.c:193 src/importldif.c:762
+#: src/inputdialog.c:205 src/main.c:445 src/main.c:453 src/mainwindow.c:2617
+#: src/messageview.c:619 src/mimeview.c:801 src/passphrase.c:134
+#: src/prefs.c:469 src/prefs_actions.c:163 src/prefs_common.c:2485
+#: src/prefs_common.c:3048 src/prefs_customheader.c:158
+#: src/prefs_display_header.c:192 src/prefs_filter_edit.c:331
+#: src/prefs_filter_edit.c:1562 src/prefs_summary_column.c:310
+#: src/prefs_template.c:263 src/progressdialog.c:77 src/select-keys.c:323
+#: src/summaryview.c:587 src/summaryview.c:2716
+msgid "Cancel"
+msgstr ""
+
+#: src/addressbook.c:334 src/compose.c:467 src/mainwindow.c:453
+#: src/messageview.c:130
+msgid "/_File"
+msgstr "/隻(_F)"
+
+#: src/addressbook.c:335
+msgid "/_File/New _Book"
+msgstr "/隻(_F)/sW讌}誰(_B)"
+
+#: src/addressbook.c:336
+msgid "/_File/New _vCard"
+msgstr "/隻(_F)/sWvCard(_v)"
+
+#: src/addressbook.c:338
+msgid "/_File/New _JPilot"
+msgstr "/隻(_F)/sWJ-Pilot(_J)"
+
+#: src/addressbook.c:341
+msgid "/_File/New _Server"
+msgstr "/隻(_F)/sWA捷(_S)"
+
+#: src/addressbook.c:343 src/addressbook.c:346 src/compose.c:472
+#: src/compose.c:477 src/compose.c:481 src/mainwindow.c:470
+#: src/mainwindow.c:473 src/mainwindow.c:475 src/mainwindow.c:478
+#: src/mainwindow.c:480 src/messageview.c:133
+msgid "/_File/---"
+msgstr "/隻(_F)/---"
+
+#: src/addressbook.c:344
+msgid "/_File/_Edit"
+msgstr "/隻(_F)/s粋(_E)"
+
+#: src/addressbook.c:345
+msgid "/_File/_Delete"
+msgstr "/隻(_F)/R娃(_D)"
+
+#: src/addressbook.c:347
+msgid "/_File/_Save"
+msgstr "/隻(_F)/xs(_S)"
+
+#: src/addressbook.c:348 src/compose.c:482 src/messageview.c:134
+msgid "/_File/_Close"
+msgstr "/隻(_F)/猪階(_C)"
+
+#: src/addressbook.c:349
+msgid "/_Address"
+msgstr "讌}"
+
+#: src/addressbook.c:350
+msgid "/_Address/New _Address"
+msgstr "/讌}(_A)/sW讌}(_A)"
+
+#: src/addressbook.c:351
+msgid "/_Address/New _Group"
+msgstr "/讌}(_A)/sWs箇(_G)"
+
+#: src/addressbook.c:352
+msgid "/_Address/New _Folder"
+msgstr "/讌}(_A)/sW瑚踏(_F)"
+
+#: src/addressbook.c:353
+msgid "/_Address/---"
+msgstr "/讌}(_A)/---"
+
+#: src/addressbook.c:354
+msgid "/_Address/_Edit"
+msgstr "/讌}(_A)/s粋(_E)"
+
+#: src/addressbook.c:355
+msgid "/_Address/_Delete"
+msgstr "/讌}(_A)/R娃(_D)"
+
+#: src/addressbook.c:356 src/compose.c:583 src/mainwindow.c:695
+#: src/messageview.c:250
+msgid "/_Tools"
+msgstr "/u(_T)"
+
+#: src/addressbook.c:357
+msgid "/_Tools/Import _LDIF file"
+msgstr "/u(_T)/琴J LDIF 隻(_L)"
+
+#: src/addressbook.c:358 src/compose.c:596 src/mainwindow.c:740
+#: src/messageview.c:268
+msgid "/_Help"
+msgstr "/察(_H)"
+
+#: src/addressbook.c:359 src/compose.c:597 src/mainwindow.c:751
+#: src/messageview.c:269
+msgid "/_Help/_About"
+msgstr "/察(_H)/猪(_A)"
+
+#: src/addressbook.c:378 src/addressbook.c:388
+msgid "/New _Address"
+msgstr "/sW讌}(_A)"
+
+#: src/addressbook.c:379 src/addressbook.c:389
+msgid "/New _Group"
+msgstr "/sWs箇(_G)"
+
+#: src/addressbook.c:380 src/addressbook.c:390
+msgid "/New _Folder"
+msgstr "/sW瑚踏(_F)"
+
+#: src/addressbook.c:381 src/addressbook.c:391 src/compose.c:461
+#: src/folderview.c:219 src/folderview.c:221 src/folderview.c:225
+#: src/folderview.c:235 src/folderview.c:237 src/folderview.c:239
+#: src/folderview.c:243 src/folderview.c:253 src/folderview.c:255
+#: src/folderview.c:258 src/summaryview.c:346 src/summaryview.c:350
+#: src/summaryview.c:354 src/summaryview.c:364 src/summaryview.c:366
+#: src/summaryview.c:369 src/summaryview.c:375
+msgid "/---"
+msgstr "/---"
+
+#: src/addressbook.c:382 src/addressbook.c:392 src/compose.c:484
+#: src/mainwindow.c:484 src/messageview.c:136
+msgid "/_Edit"
+msgstr "/s粋(_E)"
+
+#: src/addressbook.c:383 src/addressbook.c:393 src/summaryview.c:353
+msgid "/_Delete"
+msgstr "/R娃(_D)"
+
+#: src/addressbook.c:489
+msgid "E-Mail address"
+msgstr "E-Mail讌}"
+
+#: src/addressbook.c:493 src/compose.c:4240 src/prefs_common.c:2166
+msgid "Address book"
+msgstr "讌}誰"
+
+#: src/addressbook.c:592 src/prefs_filter_edit.c:353
+msgid "Name:"
+msgstr "mWG"
+
+#: src/addressbook.c:624 src/addressbook.c:1660 src/addressbook.c:1666
+#: src/editaddress.c:874 src/editaddress.c:1007 src/mainwindow.c:2207
+#: src/prefs_actions.c:263 src/prefs_display_header.c:278
+#: src/prefs_display_header.c:334 src/prefs_template.c:228
+msgid "Delete"
+msgstr "R娃"
+
+#: src/addressbook.c:630
+msgid "Lookup"
+msgstr "Mт"
+
+#: src/addressbook.c:642 src/headerview.c:54 src/prefs_folder_item.c:313
+#: src/prefs_template.c:172 src/summary_search.c:175
+msgid "To:"
+msgstr "ΜンH"
+
+#: src/addressbook.c:646 src/prefs_folder_item.c:330 src/prefs_template.c:174
+msgid "Cc:"
+msgstr "案セ"
+
+#: src/addressbook.c:650 src/prefs_folder_item.c:341
+msgid "Bcc:"
+msgstr "Kン案セ"
+
+#: src/addressbook.c:837
+msgid "Delete address(es)"
+msgstr "R娃讌}雀"
+
+#: src/addressbook.c:838
+msgid "Really delete the address(es)?"
+msgstr "zTwnR娃o葱雀芹H"
+
+#: src/addressbook.c:839 src/addressbook.c:1666 src/compose.c:2420
+#: src/folderview.c:709 src/folderview.c:1966 src/mainwindow.c:1477
+#: src/mainwindow.c:1491 src/message_search.c:199 src/prefs_actions.c:561
+#: src/prefs_customheader.c:543 src/prefs_filter.c:733
+#: src/prefs_template.c:525 src/summary_search.c:329 src/summaryview.c:587
+#: src/summaryview.c:924 src/summaryview.c:948 src/summaryview.c:980
+#: src/summaryview.c:1004 src/summaryview.c:1036 src/summaryview.c:1061
+#: src/summaryview.c:1086 src/summaryview.c:1111 src/summaryview.c:2394
+#: src/textview.c:1665
+msgid "No"
+msgstr "ぃn"
+
+#: src/addressbook.c:1657
+#, c-format
+msgid ""
+"Do you want to delete the folder AND all addresses in `%s' ? \n"
+"If deleting the folder only, addresses will be moved into parent folder."
+msgstr ""
+"zTwnR娃u%sv瑚踏┘Hの弧羽勁蟹墾讌}芹H\n"
+"pGz随詳uR娃瑚踏─A弧迂墾讌}雀N仮譴W@h瑚踏┐ぁC"
+
+#: src/addressbook.c:1660
+msgid "Folder only"
+msgstr "uR娃瑚踏"
+
+#: src/addressbook.c:1660
+msgid "Folder and Addresses"
+msgstr "魁R娃"
+
+#: src/addressbook.c:1665
+#, c-format
+msgid "Really delete `%s' ?"
+msgstr "zTwnR娃 `%s' ? "
+
+#: src/addressbook.c:2345 src/addressbook.c:2478
+msgid "New user, could not save index file."
+msgstr "Lkxs舛淦筆廖C"
+
+#: src/addressbook.c:2349 src/addressbook.c:2482
+msgid "New user, could not save address book files."
+msgstr "Lkxs讌}誰隻廖C"
+
+#: src/addressbook.c:2359 src/addressbook.c:2492
+msgid "Old address book converted successfully."
+msgstr ""
+"退勧詑讌}誰网:孔─C\n"
+"ziH}l魯侶s墾讌}誰C"
+
+#: src/addressbook.c:2364
+msgid ""
+"Old address book converted,\n"
+"could not save new address index file"
+msgstr ""
+"詑讌}誰网,w退勧A\n"
+"Lkxss痕舛淦鼻C"
+
+#: src/addressbook.c:2377
+msgid ""
+"Could not convert address book,\n"
+"but created empty new address book files."
+msgstr ""
+"Lk退勧讌}誰网 A\n"
+"w横ネ的嵯s讌}誰C"
+
+#: src/addressbook.c:2383
+msgid ""
+"Could not convert address book,\n"
+"could not create new address book files."
+msgstr ""
+"Lk退勧讌}誰网 A\n"
+"ョLk横ネs墾讌}誰C"
+
+#: src/addressbook.c:2388
+msgid ""
+"Could not convert address book\n"
+"and could not create new address book files."
+msgstr ""
+"Lk退勧讌}誰网 A\n"
+"ョLk横ネs墾讌}誰C"
+
+#: src/addressbook.c:2395
+msgid "Addressbook conversion error"
+msgstr "退勧讌}誰网`謬oネ杉~"
+
+#: src/addressbook.c:2399
+msgid "Addressbook conversion"
+msgstr "讌}誰网‖犂"
+
+#: src/addressbook.c:2434
+msgid "Addressbook Error"
+msgstr "讌}誰oネ杉~"
+
+#: src/addressbook.c:2435 src/addressbook.c:2535
+msgid "Could not read address index"
+msgstr "Lk的讌}誰舛"
+
+#: src/addressbook.c:2497
+msgid "Old address book converted, could not save new address index file"
+msgstr "詑讌}誰网,w退勧ALkxss痕舛淦鼻C"
+
+#: src/addressbook.c:2511
+msgid ""
+"Could not convert address book, but created empty new address book files."
+msgstr "Lk退勧讌}誰网 Aw横ネ的嵯s讌}誰C"
+
+#: src/addressbook.c:2517
+msgid ""
+"Could not convert address book, could not create new address book files."
+msgstr "Lk退勧讌}誰网 AョLk横ネs墾讌}誰C"
+
+#: src/addressbook.c:2523
+msgid ""
+"Could not convert address book and could not create new address book files."
+msgstr "Lk退勧讌}誰网 AョLk横ネs墾讌}誰C"
+
+#: src/addressbook.c:2541
+msgid "Addressbook Conversion Error"
+msgstr "退勧讌}誰网`謬oネ杉~"
+
+#: src/addressbook.c:2547
+msgid "Addressbook Conversion"
+msgstr "讌}誰网‖犂"
+
+#: src/addressbook.c:3046 src/prefs_common.c:866
+msgid "Interface"
+msgstr "ざ"
+
+#: src/addressbook.c:3062 src/importldif.c:505
+msgid "Address Book"
+msgstr "讌}誰"
+
+#: src/addressbook.c:3078
+msgid "Person"
+msgstr "HW"
+
+#: src/addressbook.c:3094
+msgid "EMail Address"
+msgstr "qllンHc"
+
+#: src/addressbook.c:3110
+msgid "Group"
+msgstr "s箇"
+
+#: src/addressbook.c:3126 src/folderview.c:282 src/prefs_account.c:1812
+msgid "Folder"
+msgstr "瑚踏"
+
+#: src/addressbook.c:3142
+msgid "vCard"
+msgstr ""
+
+#: src/addressbook.c:3158 src/addressbook.c:3174
+msgid "JPilot"
+msgstr ""
+
+#: src/addressbook.c:3190
+msgid "LDAP Server"
+msgstr "LDAP A捷"
+
+#: src/addrindex.c:94 src/addrindex.c:98 src/addrindex.c:105
+msgid "Common address"
+msgstr "@ノ讌}雀"
+
+#: src/addrindex.c:95 src/addrindex.c:99 src/addrindex.c:106
+msgid "Personal address"
+msgstr "pH讌}雀"
+
+#: src/alertpanel.c:124 src/compose.c:4842 src/main.c:443
+msgid "Notice"
+msgstr "`N"
+
+#: src/alertpanel.c:137 src/main.c:245 src/textview.c:1665
+msgid "Warning"
+msgstr "諜i"
+
+#: src/alertpanel.c:150 src/compose.c:2672 src/inc.c:556
+msgid "Error"
+msgstr "杉~"
+
+#: src/alertpanel.c:195
+msgid "Creating alert panel dialog...\n"
+msgstr "横ネ諜i刻顧悗... \n"
+
+#: src/alertpanel.c:269
+msgid "Show this message next time"
+msgstr "UΩA苅数и"
+
+#: src/colorlabel.c:46
+msgid "Orange"
+msgstr "常"
+
+#: src/colorlabel.c:47
+msgid "Red"
+msgstr ""
+
+#: src/colorlabel.c:48
+msgid "Pink"
+msgstr "錆"
+
+#: src/colorlabel.c:49
+msgid "Sky blue"
+msgstr "ぱ妥"
+
+#: src/colorlabel.c:50
+msgid "Blue"
+msgstr "妥"
+
+#: src/colorlabel.c:51
+msgid "Green"
+msgstr "搾"
+
+#: src/colorlabel.c:52
+msgid "Brown"
+msgstr "環"
+
+#: src/colorlabel.c:284 src/prefs_folder_item.c:290 src/summaryview.c:3563
+msgid "None"
+msgstr "L"
+
+#: src/compose.c:459
+msgid "/_Add..."
+msgstr "/sW...(_A)"
+
+#: src/compose.c:460
+msgid "/_Remove"
+msgstr "/R娃(_R)"
+
+#: src/compose.c:462 src/folderview.c:227 src/folderview.c:245
+#: src/folderview.c:260
+msgid "/_Properties..."
+msgstr "/ずe...(_P)"
+
+#: src/compose.c:468
+msgid "/_File/_Send"
+msgstr "/隻(_F)/暁e(_S)"
+
+#: src/compose.c:470
+msgid "/_File/Send _later"
+msgstr "/Hン(_M)/欸|暁e(_l)"
+
+#: src/compose.c:473
+msgid "/_File/Save to _draft folder"
+msgstr "/Hン(_M)/xs椚鷭Z瑚踏(_d)"
+
+#: src/compose.c:475
+msgid "/_File/Save and _keep editing"
+msgstr "/Hン(_M)/xs団~挺s粋(_k)"
+
+#: src/compose.c:478
+msgid "/_File/_Attach file"
+msgstr "/隻(_F)/[隻(_A)"
+
+#: src/compose.c:479
+msgid "/_File/_Insert file"
+msgstr "/隻(_F)/粥J隻(_I)"
+
+#: src/compose.c:480
+msgid "/_File/Insert si_gnature"
+msgstr "/隻(_F)/粥J単W(_g)"
+
+#: src/compose.c:485
+msgid "/_Edit/_Undo"
+msgstr "/s粋(_E)/_(_U)"
+
+#: src/compose.c:486
+msgid "/_Edit/_Redo"
+msgstr "/s粋(_E)/銃e@唹払@(_R)"
+
+#: src/compose.c:487 src/compose.c:565 src/mainwindow.c:488
+#: src/messageview.c:139
+msgid "/_Edit/---"
+msgstr "/s粋(_E)/---"
+
+#: src/compose.c:488
+msgid "/_Edit/Cu_t"
+msgstr "/s粋(_E)/暗U(_t)"
+
+#: src/compose.c:489 src/mainwindow.c:485 src/messageview.c:137
+msgid "/_Edit/_Copy"
+msgstr "/s粋(_E)/銃s(_C)"
+
+#: src/compose.c:490
+msgid "/_Edit/_Paste"
+msgstr "/s粋(_E)/KW(_P)"
+
+#: src/compose.c:491
+msgid "/_Edit/Paste as _quotation"
+msgstr "/s粋(_E)/Kiま┘(_q)"
+
+#: src/compose.c:493 src/mainwindow.c:486 src/messageview.c:138
+msgid "/_Edit/Select _all"
+msgstr "/s粋(_E)/随(_a)"
+
+#: src/compose.c:494
+msgid "/_Edit/A_dvanced"
+msgstr "/s粋(_E)/i競(_d)"
+
+#: src/compose.c:495
+msgid "/_Edit/A_dvanced/Move a character backward"
+msgstr "/s粋(_E)/i競(_d)/甓召@rじ"
+
+#: src/compose.c:500
+msgid "/_Edit/A_dvanced/Move a character forward"
+msgstr "/s粋(_E)/i競(_d)/e仮@rじ"
+
+#: src/compose.c:505
+msgid "/_Edit/A_dvanced/Move a word backward"
+msgstr "/s粋(_E)/i競(_d)/甓召@r"
+
+#: src/compose.c:510
+msgid "/_Edit/A_dvanced/Move a word forward"
+msgstr "/s粋(_E)/i競(_d)/e仮@r"
+
+#: src/compose.c:515
+msgid "/_Edit/A_dvanced/Move to beginning of line"
+msgstr "/s粋(_E)/i競(_d)/仮讀羔}Y"
+
+#: src/compose.c:520
+msgid "/_Edit/A_dvanced/Move to end of line"
+msgstr "/s粋(_E)/i競(_d)/仮讀罕"
+
+#: src/compose.c:525
+msgid "/_Edit/A_dvanced/Move to previous line"
+msgstr "/s粋(_E)/i競(_d)/仮讖e@"
+
+#: src/compose.c:530
+msgid "/_Edit/A_dvanced/Move to next line"
+msgstr "/s粋(_E)/i競(_d)/仮譴U@"
+
+#: src/compose.c:535
+msgid "/_Edit/A_dvanced/Delete a character backward"
+msgstr "/s粋(_E)/i競(_d)/巷瓰R娃@rじ"
+
+#: src/compose.c:540
+msgid "/_Edit/A_dvanced/Delete a character forward"
+msgstr "/s粋(_E)/i競(_d)/巷eR娃@rじ"
+
+#: src/compose.c:545
+msgid "/_Edit/A_dvanced/Delete a word backward"
+msgstr "/s粋(_E)/i競(_d)/巷瓰R娃@r"
+
+#: src/compose.c:550
+msgid "/_Edit/A_dvanced/Delete a word forward"
+msgstr "/s粋(_E)/i競(_d)/巷eR娃@r"
+
+#: src/compose.c:555
+msgid "/_Edit/A_dvanced/Delete line"
+msgstr "/s粋(_E)/i競(_d)/R娃@"
+
+#: src/compose.c:560
+msgid "/_Edit/A_dvanced/Delete to end of line"
+msgstr "/s粋(_E)/i競(_d)/q翫斜B_R娃椄罕"
+
+#: src/compose.c:566
+msgid "/_Edit/_Wrap current paragraph"
+msgstr "/s粋(_E)/Nヘeq絹ч(_W)"
+
+#: src/compose.c:568
+msgid "/_Edit/Wrap all long _lines"
+msgstr "/s粋(_E)/N勁街L墾罕薤(_l)"
+
+#: src/compose.c:570
+msgid "/_Edit/Aut_o wrapping"
+msgstr "/s粋(_E)/朧粉(_o)"
+
+#: src/compose.c:571 src/mainwindow.c:493 src/messageview.c:143
+#: src/summaryview.c:370
+msgid "/_View"
+msgstr "/塔ボ(_V)"
+
+#: src/compose.c:572
+msgid "/_View/_To"
+msgstr "/塔ボ(_V)/ΜンH(_T)"
+
+#: src/compose.c:573
+msgid "/_View/_Cc"
+msgstr "/塔ボ(_V)/案セ(_C)"
+
+#: src/compose.c:574
+msgid "/_View/_Bcc"
+msgstr "/塔ボ(_V)/Kン案セ(_s)"
+
+#: src/compose.c:575
+msgid "/_View/_Reply to"
+msgstr "/塔ボ(_V)/^対(_R)"
+
+#: src/compose.c:576 src/compose.c:578 src/compose.c:580 src/mainwindow.c:511
+#: src/mainwindow.c:514 src/mainwindow.c:540 src/mainwindow.c:564
+#: src/mainwindow.c:648 src/mainwindow.c:652 src/messageview.c:227
+msgid "/_View/---"
+msgstr "/塔ボ(_V)/---"
+
+#: src/compose.c:577
+msgid "/_View/_Followup to"
+msgstr "/塔ボ(_V)/^棲ゅ街(_F)"
+
+#: src/compose.c:579
+msgid "/_View/R_uler"
+msgstr "/塔ボ(_V)/へW(_u)"
+
+#: src/compose.c:581
+msgid "/_View/_Attachment"
+msgstr "/塔ボ(_V)/[(_A)"
+
+#: src/compose.c:584 src/mainwindow.c:696 src/messageview.c:251
+msgid "/_Tools/_Address book"
+msgstr "/u(_T)/讌}誰(_A)"
+
+#: src/compose.c:585
+msgid "/_Tools/_Template"
+msgstr "/u(_T)/MノHン舎O(_T)"
+
+#: src/compose.c:586 src/mainwindow.c:714 src/messageview.c:266
+msgid "/_Tools/Actio_ns"
+msgstr "/u(_T)/印罐~魁O(_n)"
+
+#: src/compose.c:587 src/compose.c:591 src/mainwindow.c:699
+#: src/mainwindow.c:713 src/mainwindow.c:715 src/mainwindow.c:718
+#: src/mainwindow.c:720 src/messageview.c:254 src/messageview.c:265
+msgid "/_Tools/---"
+msgstr "/u(_T)"
+
+#: src/compose.c:588
+msgid "/_Tools/Edit with e_xternal editor"
+msgstr "/u(_T)/魯率筌L砂s粋捷(_x)"
+
+#: src/compose.c:592
+msgid "/_Tools/PGP Si_gn"
+msgstr "/u(_T)/PGP 単街(_g)"
+
+#: src/compose.c:593
+msgid "/_Tools/PGP _Encrypt"
+msgstr "/u(_T)/PGP [K(_E)"
+
+#: src/compose.c:790
+#, c-format
+msgid "%s: file not exist\n"
+msgstr "%s: 隻廚sb\n"
+
+#: src/compose.c:875 src/compose.c:920 src/procmsg.c:1301
+msgid "Can't get text part\n"
+msgstr "SΤゅr\n"
+
+#: src/compose.c:1263
+msgid "Quote mark format error."
+msgstr "ま┘网/~C"
+
+#: src/compose.c:1275
+msgid "Message reply/forward format error."
+msgstr "^対/退HHン网/~C"
+
+#: src/compose.c:1564
+#, c-format
+msgid "File %s doesn't exist\n"
+msgstr "隻 %s ぃsb \n"
+
+#: src/compose.c:1568
+#, c-format
+msgid "Can't get file size of %s\n"
+msgstr "Lko隻 %s 困jp \n"
+
+#: src/compose.c:1572
+#, c-format
+msgid "File %s is empty."
+msgstr "隻 %s O的此C"
+
+#: src/compose.c:1576
+#, c-format
+msgid "Can't read %s."
+msgstr "Lk的 %sC"
+
+#: src/compose.c:1609
+#, c-format
+msgid "Message: %s"
+msgstr "HンG%s"
+
+#: src/compose.c:1680 src/mimeview.c:481
+msgid "Can't get the part of multipart message."
+msgstr "Lkoo唔[隻C"
+
+#: src/compose.c:2296
+msgid " [Edited]"
+msgstr " [w廡]"
+
+#: src/compose.c:2298
+#, c-format
+msgid "%s - Compose message%s"
+msgstr "%s - slン%s"
+
+#: src/compose.c:2301
+#, c-format
+msgid "Compose message%s"
+msgstr "slン%s"
+
+#: src/compose.c:2410
+msgid "Recipient is not specified."
+msgstr "SΤwΜンHC"
+
+#: src/compose.c:2418 src/compose.c:4167 src/mainwindow.c:2137
+#: src/prefs_account.c:697 src/prefs_common.c:852
+msgid "Send"
+msgstr "eX"
+
+#: src/compose.c:2419
+msgid "Subject is empty. Send it anyway?"
+msgstr "SΤ斜DCTwneXH"
+
+#: src/compose.c:2470
+msgid "can't get recipient list."
+msgstr "LkoΜンH陸ンsDs箇W恰C"
+
+#: src/compose.c:2490
+msgid ""
+"Account for sending mail is not specified.\n"
+"Please select a mail account before sending."
+msgstr ""
+"z随ノ艮b弦谷D@唸qllンb弦Ai爼Oノ哘bsDs箇Wo蹐絣好葎此C\n"
+"noelン出随詳qllンb弦C"
+
+#: src/compose.c:2504 src/send_message.c:261
+#, c-format
+msgid "Error occurred while posting the message to %s ."
+msgstr "V %s oXゅ街疋X{杉~C"
+
+#: src/compose.c:2527
+msgid "Can't save the message to outbox."
+msgstr "LkNHンe椡HンЖいC"
+
+#: src/compose.c:2563
+#, c-format
+msgid "Could not find any key associated with currently selected key id `%s'."
+msgstr "Lkт讒勦w key id '%s'"
+
+#: src/compose.c:2621 src/compose.c:2835 src/compose.c:2884 src/compose.c:3003
+#: src/utils.c:2165
+msgid "can't change file mode\n"
+msgstr "Lkэ怒隻廱A \n"
+
+#: src/compose.c:2668
+#, c-format
+msgid ""
+"Can't convert the character encoding of the message from\n"
+"%s to %s.\n"
+"Send it anyway?"
+msgstr ""
+"Lk退勧NHン砂sX]wパ %s 退勧 %sC\n"
+"ご詑n暁e芹H"
+
+#: src/compose.c:2708
+msgid "can't write headers\n"
+msgstr "LkgJ斜Y\n"
+
+#: src/compose.c:2963
+msgid "can't remove the old message\n"
+msgstr "LkR娃讀蟹座束HンC\n"
+
+#: src/compose.c:2981
+msgid "queueing message...\n"
+msgstr "ei屡s瑚踏┐...\n"
+
+#: src/compose.c:3063
+msgid "can't find queue folder\n"
+msgstr "тぃ貅筈s瑚踏─C\n"
+
+#: src/compose.c:3070
+msgid "can't queue the message\n"
+msgstr "Lk餠i屡s瑚踏─C\n"
+
+#: src/compose.c:3608
+#, c-format
+msgid "generated Message-ID: %s\n"
+msgstr "横ネHン砂s弦G%s\n"
+
+#: src/compose.c:3702
+msgid "Creating compose window...\n"
+msgstr "横ネslン...\n"
+
+#: src/compose.c:3705 src/compose.c:4636
+msgid "MIME type"
+msgstr "MIME A"
+
+#: src/compose.c:3706 src/mimeview.c:149 src/prefs_filter_edit.c:569
+#: src/prefs_summary_column.c:73 src/select-keys.c:297 src/summaryview.c:386
+msgid "Size"
+msgstr "jp"
+
+#: src/compose.c:3757 src/headerview.c:53 src/summary_search.c:168
+msgid "From:"
+msgstr "哘曄G"
+
+#: src/compose.c:4168
+msgid "Send message"
+msgstr "eXHン"
+
+#: src/compose.c:4174
+msgid "Send later"
+msgstr "欸|AeX"
+
+#: src/compose.c:4175
+msgid "Put into queue folder and send later"
+msgstr "飄豈HンЖい欸|AeX"
+
+#: src/compose.c:4182
+msgid "Draft"
+msgstr "鷭Z"
+
+#: src/compose.c:4183
+msgid "Save to draft folder"
+msgstr "xs椚鷭Z瑚踏"
+
+#: src/compose.c:4192 src/compose.c:5398
+msgid "Insert"
+msgstr "粥J"
+
+#: src/compose.c:4193
+msgid "Insert file"
+msgstr "粥J隻"
+
+#: src/compose.c:4200
+msgid "Attach"
+msgstr "["
+
+#: src/compose.c:4201
+msgid "Attach file"
+msgstr "[隻"
+
+#: src/compose.c:4210 src/prefs_account.c:1330 src/prefs_common.c:1265
+msgid "Signature"
+msgstr "単W"
+
+#: src/compose.c:4211
+msgid "Insert signature"
+msgstr "粥J単W"
+
+#: src/compose.c:4219 src/prefs_common.c:1287 src/prefs_common.c:2145
+msgid "Editor"
+msgstr "s粋捷"
+
+#: src/compose.c:4220
+msgid "Edit with external editor"
+msgstr "魯率筌L砂s粋捷"
+
+#: src/compose.c:4228
+msgid "Linewrap"
+msgstr "ち確"
+
+#: src/compose.c:4229
+msgid "Wrap all long lines"
+msgstr "ち確勁街L困絋r"
+
+#: src/compose.c:4532
+msgid "Invalid MIME type."
+msgstr "ぃXk MIME A"
+
+#: src/compose.c:4550
+msgid "File doesn't exist or is empty."
+msgstr "隻廚sb, 寮筆廳O的"
+
+#: src/compose.c:4618
+msgid "Properties"
+msgstr "ずe"
+
+#: src/compose.c:4638
+msgid "Encoding"
+msgstr "sX"
+
+#: src/compose.c:4661 src/prefs_folder_item.c:188
+msgid "Path"
+msgstr "侯|"
+
+#: src/compose.c:4662
+msgid "File name"
+msgstr "隻W"
+
+#: src/compose.c:4813
+#, c-format
+msgid "External editor command line is invalid: `%s'\n"
+msgstr "~ノs粋捷懇ROO杉~此G`%s'\n"
+
+#: src/compose.c:4839
+#, c-format
+msgid ""
+"The external editor is still working.\n"
+"Force terminating the process?\n"
+"process group id: %d"
+msgstr ""
+"~ノs粋捷ごMbu@いC\n"
+"nj飢袴羌{芹H\n"
+"羌{左s箇NXOG%d"
+
+#: src/compose.c:4852
+#, c-format
+msgid "Terminated process group id: %d"
+msgstr "飢s箇NX %d 墾羌{"
+
+#: src/compose.c:4853
+#, c-format
+msgid "Temporary file: %s"
+msgstr "屡s隻廖G%s"
+
+#: src/compose.c:4877
+msgid "Compose: input from monitoring process\n"
+msgstr ""
+
+#: src/compose.c:4910
+msgid "Couldn't exec external editor\n"
+msgstr "Lk印罐~魁s粋捷C\n"
+
+#: src/compose.c:4914
+msgid "Couldn't write to file\n"
+msgstr "LkgJ隻廖C\n"
+
+#: src/compose.c:4916
+msgid "Pipe read failed\n"
+msgstr "Pipe 的ア英C\n"
+
+#: src/compose.c:5210 src/compose.c:5218 src/compose.c:5224
+msgid "Can't queue the message."
+msgstr "Lk餠i屡s瑚踏─C"
+
+#: src/compose.c:5314 src/compose.c:5328
+msgid "Select file"
+msgstr "随詳隻"
+
+#: src/compose.c:5360
+msgid "Discard message"
+msgstr "餘鵯Hン"
+
+#: src/compose.c:5361
+msgid "This message has been modified. discard it?"
+msgstr "HンwQ廡鏐LCn餘鵐Χ棔H"
+
+#: src/compose.c:5362
+msgid "Discard"
+msgstr "餘"
+
+#: src/compose.c:5362
+msgid "to Draft"
+msgstr "颪J鷭Z瑚踏"
+
+#: src/compose.c:5395
+#, c-format
+msgid "Do you want to apply the template `%s' ?"
+msgstr "zTwnMノ '%s' o哽Hン舎O芹H"
+
+#: src/compose.c:5397
+msgid "Apply template"
+msgstr "MノHン舎O"
+
+#: src/compose.c:5398
+msgid "Replace"
+msgstr "m勧"
+
+#: src/editaddress.c:176
+msgid "Edit address"
+msgstr "s粋讌}雀"
+
+#: src/editaddress.c:318
+msgid "Add New Person"
+msgstr "sWH讌}雀"
+
+#: src/editaddress.c:319
+msgid "Edit Person Details"
+msgstr "s粋H股禾瑚"
+
+#: src/editaddress.c:460
+msgid "An E-Mail address must be supplied."
+msgstr "ゼ翠JqllンHcC"
+
+#: src/editaddress.c:579
+msgid "A Name and Value must be supplied."
+msgstr "ゼ翠JW細P"
+
+#: src/editaddress.c:637
+msgid "Edit Person Data"
+msgstr "s粋H瑚"
+
+#: src/editaddress.c:734
+msgid "Display Name"
+msgstr "塔ボW細"
+
+#: src/editaddress.c:740 src/editaddress.c:744
+msgid "Last Name"
+msgstr "m"
+
+#: src/editaddress.c:741 src/editaddress.c:743
+msgid "First Name"
+msgstr "W"
+
+#: src/editaddress.c:746
+msgid "Nick Name"
+msgstr "縞細"
+
+#: src/editaddress.c:783 src/editaddress.c:832 src/editaddress.c:1041
+#: src/editgroup.c:255
+msgid "E-Mail Address"
+msgstr "E-Mail讌}"
+
+#: src/editaddress.c:784 src/editaddress.c:841
+msgid "Alias"
+msgstr "OW"
+
+#: src/editaddress.c:868
+msgid "Move Up"
+msgstr "VW仮"
+
+#: src/editaddress.c:871
+msgid "Move Down"
+msgstr "VU仮"
+
+#: src/editaddress.c:877 src/editaddress.c:1010 src/importldif.c:633
+msgid "Modify"
+msgstr "怒"
+
+#: src/editaddress.c:883 src/editaddress.c:1016 src/message_search.c:134
+#: src/summary_search.c:222
+msgid "Clear"
+msgstr "M娃"
+
+#: src/editaddress.c:933 src/editaddress.c:989 src/prefs_customheader.c:205
+msgid "Value"
+msgstr ""
+
+#: src/editaddress.c:1040
+msgid "Basic Data"
+msgstr "芋セ瑚"
+
+#: src/editaddress.c:1042
+msgid "User Attributes"
+msgstr "H紬"
+
+#: src/editbook.c:114
+msgid "File appears to be Ok."
+msgstr "隻彜胡L~C"
+
+#: src/editbook.c:117
+msgid "File does not appear to be a valid address book format."
+msgstr "o喟筆廢G谷DXk网,Е讌}誰C"
+
+#: src/editbook.c:120 src/editjpilot.c:192 src/editvcard.c:99
+msgid "Could not read file."
+msgstr "Lk的隻廖C"
+
+#: src/editbook.c:168 src/editbook.c:278
+msgid "Edit Addressbook"
+msgstr "s粋讌}雀"
+
+#: src/editbook.c:197 src/editjpilot.c:302 src/editvcard.c:217
+msgid " Check File "
+msgstr "惜d隻(_C)"
+
+#: src/editbook.c:202 src/editjpilot.c:307 src/editvcard.c:222
+#: src/prefs_account.c:1341
+msgid "File"
+msgstr "/隻(_F)"
+
+#: src/editbook.c:297
+msgid "Add New Addressbook"
+msgstr "sW讌}誰"
+
+#: src/editgroup.c:105
+msgid "A Group Name must be supplied."
+msgstr "ゼws箇W細"
+
+#: src/editgroup.c:261
+msgid "Edit Group Data"
+msgstr "s粋s箇瑚"
+
+#: src/editgroup.c:289
+msgid "Group Name"
+msgstr "s箇W細"
+
+#: src/editgroup.c:308
+msgid "Addresses in Group"
+msgstr "s箇ずぇ讌}"
+
+#: src/editgroup.c:310
+msgid " -> "
+msgstr " @ "
+
+#: src/editgroup.c:337
+msgid " <- "
+msgstr " * "
+
+#: src/editgroup.c:339
+msgid "Available Addresses"
+msgstr "i魯里Чqllンa}"
+
+#: src/editgroup.c:403
+msgid "Move E-Mail Addresses to or from Group with arrow buttons"
+msgstr "出魯僚bY斜Nqllンa}[J硫尚8啗s箇"
+
+#: src/editgroup.c:453
+msgid "Edit Group Details"
+msgstr "s粋s箇股禾瑚"
+
+#: src/editgroup.c:456
+msgid "Add New Group"
+msgstr "sWs箇"
+
+#: src/editgroup.c:506
+msgid "Edit folder"
+msgstr "s粋瑚踏"
+
+#: src/editgroup.c:506
+msgid "Input the new name of folder:"
+msgstr "出翠Js左螫踏└W細G"
+
+#: src/editgroup.c:509 src/foldersel.c:208 src/foldersel.c:412
+#: src/folderview.c:1773 src/folderview.c:1779
+msgid "New folder"
+msgstr "s瑚踏"
+
+#: src/editgroup.c:510 src/foldersel.c:413 src/folderview.c:1780
+msgid "Input the name of new folder:"
+msgstr "出翠Js瑚踏┴墾W細G"
+
+#: src/editjpilot.c:189
+msgid "File does not appear to be JPilot format."
+msgstr "隻廚O JPilot 网 C"
+
+#: src/editjpilot.c:225
+msgid "Select JPilot File"
+msgstr "随詳 JPilot 隻"
+
+#: src/editjpilot.c:273 src/editjpilot.c:400
+msgid "Edit JPilot Entry"
+msgstr "s粋 JPilot 瑚"
+
+#: src/editjpilot.c:314 src/editldap.c:340 src/editvcard.c:229
+#: src/importldif.c:525 src/prefs_account.c:1840
+msgid " ... "
+msgstr "..."
+
+#: src/editjpilot.c:319
+msgid "Additional e-Mail address item(s)"
+msgstr "B~差qllンa}"
+
+#: src/editjpilot.c:407
+msgid "Add New JPilot Entry"
+msgstr "sW JPilot 瑚"
+
+#: src/editldap.c:164
+msgid "Connected successfully to server"
+msgstr "wsu讀A捷"
+
+#: src/editldap.c:167 src/editldap_basedn.c:290
+msgid "Could not connect to server"
+msgstr "Lksu讀A捷"
+
+#: src/editldap.c:215 src/editldap.c:534
+msgid "Edit LDAP Server"
+msgstr "s粋 LDAP A捷"
+
+#: src/editldap.c:307 src/editldap_basedn.c:161
+msgid "Hostname"
+msgstr "穣捷W細"
+
+#: src/editldap.c:316 src/editldap_basedn.c:171
+msgid "Port"
+msgstr "s欝稲"
+
+#: src/editldap.c:328
+msgid " Check Server "
+msgstr "惜dA捷(_C)"
+
+#: src/editldap.c:333 src/editldap_basedn.c:181
+msgid "Search Base"
+msgstr ""
+
+#: src/editldap.c:390
+msgid "Search Criteria"
+msgstr ""
+
+#: src/editldap.c:397
+msgid " Reset "
+msgstr "](_R)"
+
+#: src/editldap.c:402
+msgid "Bind DN"
+msgstr ""
+
+#: src/editldap.c:411
+msgid "Bind Password"
+msgstr ""
+
+#: src/editldap.c:420
+msgid "Timeout (secs)"
+msgstr ""
+
+#: src/editldap.c:434
+msgid "Maximum Entries"
+msgstr ""
+
+#: src/editldap.c:461 src/prefs_account.c:693
+msgid "Basic"
+msgstr "芋セ]w"
+
+#: src/editldap.c:462
+msgid "Extended"
+msgstr "畿]w"
+
+#: src/editldap.c:546
+msgid "Add New LDAP Server"
+msgstr "sW LDAP A捷"
+
+#: src/editldap_basedn.c:141
+msgid "Edit LDAP - Select Search Base"
+msgstr "s粋 LDAP 瑚 - 随詳jM芋I"
+
+#: src/editldap_basedn.c:202
+msgid "Available Search Base(s)"
+msgstr "iノ嵯jM芋I"
+
+#: src/editldap_basedn.c:286
+msgid "Could not read Search Base(s) from server - please set manually"
+msgstr "LkqA捷的jM芋IA出zも以]w"
+
+#: src/editvcard.c:96
+msgid "File does not appear to be vCard format."
+msgstr "隻廨谷D vCard 网"
+
+#: src/editvcard.c:132
+msgid "Select vCard File"
+msgstr "随詳 vCard 隻"
+
+#: src/editvcard.c:188 src/editvcard.c:291
+msgid "Edit vCard Entry"
+msgstr "s粋 vCard 瑚"
+
+#: src/editvcard.c:296
+msgid "Add New vCard Entry"
+msgstr "sW vCard 瑚"
+
+#: src/export.c:127
+msgid "Export"
+msgstr "琴XHン"
+
+#: src/export.c:146
+msgid "Specify target folder and mbox file."
+msgstr "出wzn琴X啗螫踏┴昆HンAHの琴X隻WC"
+
+#: src/export.c:156
+msgid "Source dir:"
+msgstr "啖集螫踏─G"
+
+#: src/export.c:161
+msgid "Exporting file:"
+msgstr "琴X隻WG"
+
+#: src/export.c:174 src/export.c:180 src/import.c:179 src/import.c:185
+#: src/prefs_account.c:1077
+msgid " Select... "
+msgstr "随詳..."
+
+#: src/export.c:219
+msgid "Select exporting file"
+msgstr "随詳琴X隻廖G"
+
+#: src/filter.c:827 src/prefs.c:139 src/prefs.c:167 src/prefs.c:212
+#: src/prefs_account.c:557 src/prefs_account.c:571
+#: src/prefs_customheader.c:384 src/prefs_customheader.c:430
+#: src/prefs_display_header.c:411 src/prefs_display_header.c:436
+msgid "failed to write configuration to file\n"
+msgstr "gJ箇A]w疋英C\n"
+
+#: src/foldersel.c:160
+msgid "Select folder"
+msgstr "随詳瑚踏"
+
+#: src/foldersel.c:244 src/folderview.c:944 src/prefs_folder_item.c:217
+msgid "Inbox"
+msgstr "ΜンЖ"
+
+#: src/foldersel.c:247 src/folderview.c:951 src/prefs_folder_item.c:218
+msgid "Sent"
+msgstr "HンЖ"
+
+#: src/foldersel.c:250 src/folderview.c:958 src/prefs_folder_item.c:220
+msgid "Queue"
+msgstr "屡s瑚踏"
+
+#: src/foldersel.c:253 src/folderview.c:965 src/prefs_folder_item.c:221
+msgid "Trash"
+msgstr "R娃唆lン"
+
+#: src/foldersel.c:256 src/folderview.c:974 src/prefs_folder_item.c:219
+msgid "Drafts"
+msgstr "鷭Z"
+
+#: src/foldersel.c:414 src/folderview.c:1777 src/folderview.c:1781
+msgid "NewFolder"
+msgstr "s瑚踏"
+
+#: src/foldersel.c:422 src/folderview.c:1789 src/folderview.c:1843
+#, c-format
+msgid "`%c' can't be included in folder name."
+msgstr "瑚踏└W細いぃ棲tΤ `%c' o哘rじC"
+
+#: src/foldersel.c:432 src/folderview.c:1799 src/folderview.c:1850
+#, c-format
+msgid "The folder `%s' already exists."
+msgstr "瑚踏 `%s' wsbC"
+
+#: src/foldersel.c:440 src/folderview.c:1806
+#, c-format
+msgid "Can't create the folder `%s'."
+msgstr "LkR娃瑚踏 `%s'C"
+
+#: src/folderview.c:216 src/folderview.c:232
+msgid "/Create _new folder..."
+msgstr "/横ネs左螫踏 (_n)"
+
+#: src/folderview.c:217 src/folderview.c:233
+msgid "/_Rename folder..."
+msgstr "/sRW瑚踏(_R)..."
+
+#: src/folderview.c:218 src/folderview.c:234
+msgid "/_Delete folder"
+msgstr "/R娃瑚踏(_D)"
+
+#: src/folderview.c:220 src/folderview.c:236
+msgid "/Empty _trash"
+msgstr "/M擢R娃唆lン(_t)"
+
+#: src/folderview.c:222 src/folderview.c:240 src/folderview.c:256
+msgid "/_Check for new messages"
+msgstr "/惜dslン(_C)"
+
+#: src/folderview.c:224 src/folderview.c:242
+msgid "/R_ebuild folder tree"
+msgstr "/惴螫踏┻穏c(_e)"
+
+#: src/folderview.c:226 src/folderview.c:244 src/folderview.c:259
+msgid "/_Search messages..."
+msgstr "/MтHン (_S)"
+
+#: src/folderview.c:238 src/folderview.c:254
+msgid "/Down_load"
+msgstr "/U厚 (_l)"
+
+#: src/folderview.c:250
+msgid "/Su_bscribe to newsgroup..."
+msgstr "/wqsDs箇 (_b)"
+
+#: src/folderview.c:252
+msgid "/_Remove newsgroup"
+msgstr "/仮娃sDs箇(_R)"
+
+#: src/folderview.c:279
+msgid "Creating folder view...\n"
+msgstr "横ネ瑚踏...\n"
+
+#: src/folderview.c:283
+msgid "New"
+msgstr "s"
+
+#: src/folderview.c:284 src/prefs_summary_column.c:68
+msgid "Unread"
+msgstr "ゼ的"
+
+#: src/folderview.c:285
+msgid "#"
+msgstr ""
+
+#: src/folderview.c:441
+msgid "Setting folder info...\n"
+msgstr "]w瑚踏...\n"
+
+#: src/folderview.c:442
+msgid "Setting folder info..."
+msgstr "]w瑚踏..."
+
+#: src/folderview.c:661 src/mainwindow.c:3167 src/setup.c:81
+#, c-format
+msgid "Scanning folder %s%c%s ..."
+msgstr "噂y瑚踏 %s%c%s ..."
+
+#: src/folderview.c:665 src/mainwindow.c:3172 src/setup.c:86
+#, c-format
+msgid "Scanning folder %s ..."
+msgstr "噂y瑚踏 %s ..."
+
+#: src/folderview.c:707
+msgid "Rebuild folder tree"
+msgstr "惴螫踏┻穏c"
+
+#: src/folderview.c:708
+msgid "The folder tree will be rebuilt. Continue?"
+msgstr "掲各惴螫踏─CTwn~挺H"
+
+#: src/folderview.c:717
+msgid "Rebuilding folder tree..."
+msgstr "惴螫踏┻穏cい..."
+
+#: src/folderview.c:723
+msgid "Rebuilding of the folder tree failed."
+msgstr "惴螫踏┻穏cア英C"
+
+#: src/folderview.c:741
+msgid "Rebuilding all folder trees..."
+msgstr "悸勁蓋螫踏┻穏cい..."
+
+#: src/folderview.c:818
+msgid "Checking for new messages in all folders..."
+msgstr "惜dC啗螫踏┐お嵯slン..."
+
+#: src/folderview.c:1592
+#, c-format
+msgid "Folder %s is selected\n"
+msgstr "w随 %s 瑚踏\n"
+
+#: src/folderview.c:1687
+#, c-format
+msgid "Downloading messages in %s ..."
+msgstr "q %s U厚Hンい..."
+
+#: src/folderview.c:1723
+#, c-format
+msgid "Error occurred while downloading messages in `%s'."
+msgstr "q %s U厚Hン疋X{杉~C"
+
+#: src/folderview.c:1774
+msgid ""
+"Input the name of new folder:\n"
+"(if you want to create a folder to store subfolders,\n"
+" append `/' at the end of the name)"
+msgstr ""
+"出翠Js瑚踏└W細G\n"
+"]YO瑚踏┐UnΤl瑚踏─A\n"
+"@出b瑚踏└W細昆甅吋[W `/'^"
+
+#: src/folderview.c:1834
+#, c-format
+msgid "Input new name for `%s':"
+msgstr "出翠J `%s' 嵯sW細G"
+
+#: src/folderview.c:1835
+msgid "Rename folder"
+msgstr "sRW瑚踏"
+
+#: src/folderview.c:1914
+#, c-format
+msgid ""
+"All folder(s) and message(s) under `%s' will be deleted.\n"
+"Do you really want to delete?"
+msgstr ""
+"勁界b `%s' 瑚踏┐U迂昆HンPl瑚踏┳1N|QR娃C\n"
+"zTwnR娃ウ芹H"
+
+#: src/folderview.c:1916
+msgid "Delete folder"
+msgstr "R娃瑚踏"
+
+#: src/folderview.c:1932
+#, c-format
+msgid "Can't remove the folder `%s'."
+msgstr "LkR娃瑚踏 `%s'C"
+
+#: src/folderview.c:1965
+msgid "Empty trash"
+msgstr "M擢R娃唆lン"
+
+#: src/folderview.c:1965
+msgid "Empty all messages in trash?"
+msgstr "zTwnM娃勁崖QR娃唆lンH"
+
+#: src/folderview.c:1996
+#, c-format
+msgid ""
+"Really remove the mailbox `%s' ?\n"
+"(The messages are NOT deleted from the disk)"
+msgstr ""
+"TwnR娃Hc %sH\n"
+"`NGHcい唆lンNぃ|qw歳いQR娃C"
+
+#: src/folderview.c:1998
+msgid "Remove mailbox"
+msgstr "/R娃Hc"
+
+#: src/folderview.c:2033
+#, c-format
+msgid "Really delete IMAP4 account `%s'?"
+msgstr "zTwnR娃 %s o IMAP4 b弦H"
+
+#: src/folderview.c:2034
+msgid "Delete IMAP4 account"
+msgstr "R娃 IMAP4 b弦"
+
+#: src/folderview.c:2155
+#, c-format
+msgid "Really delete newsgroup `%s'?"
+msgstr "zTwnR娃sDs箇 `%s' 芹H"
+
+#: src/folderview.c:2156
+msgid "Delete newsgroup"
+msgstr "R娃sDs箇"
+
+#: src/folderview.c:2191
+#, c-format
+msgid "Really delete news account `%s'?"
+msgstr "zTwnR娃sDs箇b弦 `%s' 芹H"
+
+#: src/folderview.c:2192
+msgid "Delete news account"
+msgstr "R娃b弦"
+
+#: src/grouplistdialog.c:176
+msgid "Subscribe to newsgroup"
+msgstr "wqsDs箇"
+
+#: src/grouplistdialog.c:192
+msgid "Select newsgroups to subscribe."
+msgstr "出随詳nwq嵯sDs箇"
+
+#: src/grouplistdialog.c:198
+msgid "Find groups:"
+msgstr "MтsDs箇G"
+
+#: src/grouplistdialog.c:206
+msgid " Search "
+msgstr "Mт"
+
+#: src/grouplistdialog.c:218
+msgid "Newsgroup name"
+msgstr "sDs箇W細G"
+
+#: src/grouplistdialog.c:219
+msgid "Messages"
+msgstr "Hン"
+
+#: src/grouplistdialog.c:220 src/prefs_folder_item.c:201
+msgid "Type"
+msgstr "MIME A"
+
+#: src/grouplistdialog.c:246
+msgid "Refresh"
+msgstr "蠏s"
+
+#: src/grouplistdialog.c:350
+msgid "moderated"
+msgstr "剤z"
+
+#: src/grouplistdialog.c:352
+msgid "readonly"
+msgstr "胃的"
+
+#: src/grouplistdialog.c:354
+msgid "unknown"
+msgstr "ゼ妾"
+
+#: src/grouplistdialog.c:401
+msgid "Can't retrieve newsgroup list."
+msgstr "LkoΜンH陸ンsDs箇W恰C"
+
+#: src/grouplistdialog.c:444 src/summaryview.c:702
+msgid "Done."
+msgstr "ЧΘ"
+
+#: src/grouplistdialog.c:480
+#, c-format
+msgid "%d newsgroups received (%s read)"
+msgstr "w欝Μ %d 啖sDs箇 (%s w的)"
+
+#: src/gtkutils.c:58 src/gtkutils.c:74
+msgid "Abcdef"
+msgstr ""
+
+#: src/headerview.c:55
+msgid "Newsgroups:"
+msgstr "sDs箇G"
+
+#: src/headerview.c:56 src/prefs_template.c:176 src/summary_search.c:182
+msgid "Subject:"
+msgstr "斜DG"
+
+#: src/headerview.c:86
+msgid "Creating header view...\n"
+msgstr "横ネ斜Y鋸機...\n"
+
+#: src/headerview.c:182 src/summaryview.c:1874
+msgid "(No From)"
+msgstr "]SΤ啖宗^"
+
+#: src/headerview.c:203 src/summaryview.c:1897
+msgid "(No Subject)"
+msgstr "]SΤ斜D^"
+
+#: src/imageview.c:62
+msgid "Creating image view...\n"
+msgstr "横ネ肱抗叉機...\n"
+
+#: src/imageview.c:115 src/imageview.c:179
+msgid "Can't load the image."
+msgstr "Lk厚J肱抗C"
+
+#: src/imap.c:455
+#, c-format
+msgid "IMAP4 connection to %s has been disconnected. Reconnecting...\n"
+msgstr " %s IMAP4 suQい_FCssuい...\n"
+
+#: src/imap.c:535
+#, c-format
+msgid "creating IMAP4 connection to %s:%d ...\n"
+msgstr "タb横ネ IMAP4 su %s:%d ...\n"
+
+#: src/imap.c:583
+msgid "Can't start TLS session.\n"
+msgstr "Lk}衛 TLS su\n"
+
+#: src/imap.c:1327
+#, c-format
+msgid "can't set deleted flags: %s\n"
+msgstr "Lk]wR娃査X斜G%s\n"
+
+#: src/imap.c:1335 src/imap.c:1427
+msgid "can't expunge\n"
+msgstr "LkR娃\n"
+
+#: src/imap.c:1421
+msgid "can't set deleted flags: 1:*\n"
+msgstr "Lk]wR娃査X斜G1:*\n"
+
+#: src/imap.c:1464
+msgid "can't close folder\n"
+msgstr "Lk随詳瑚踏\n"
+
+#: src/imap.c:1542
+#, c-format
+msgid "root folder %s not exist\n"
+msgstr "攜螫踏 %s ぃsbC\n"
+
+#: src/imap.c:1720 src/imap.c:1728
+msgid "error occurred while getting LIST.\n"
+msgstr "o LIST 謬oネ杉~C\n"
+
+#: src/imap.c:1842
+#, c-format
+msgid "Can't create '%s'\n"
+msgstr "Lk横ネ %s\n"
+
+#: src/imap.c:1847
+#, c-format
+msgid "Can't create '%s' under INBOX\n"
+msgstr "LkbΜンЖU横ネ %s\n"
+
+#: src/imap.c:1908
+msgid "can't create mailbox: LIST failed\n"
+msgstr "Lk横ネHcGLIST ア英\n"
+
+#: src/imap.c:1928
+msgid "can't create mailbox\n"
+msgstr "Lk横ネHc\n"
+
+#: src/imap.c:1997
+#, c-format
+msgid "can't rename mailbox: %s to %s\n"
+msgstr "Hc %s Lk鵙W %s\n"
+
+#: src/imap.c:2059
+msgid "can't delete mailbox\n"
+msgstr "LkR娃Hc\n"
+
+#: src/imap.c:2098
+msgid "can't get envelope\n"
+msgstr "LkoH福C\n"
+
+#: src/imap.c:2106
+msgid "error occurred while getting envelope.\n"
+msgstr "oH噴謬oネ杉~C\n"
+
+#: src/imap.c:2127
+#, c-format
+msgid "can't parse envelope: %s\n"
+msgstr "Lk狐RH福G%s\n"
+
+#: src/imap.c:2250
+#, c-format
+msgid "Can't connect to IMAP4 server: %s:%d\n"
+msgstr "Lksu IMAP4 A捷G%s:%d\n"
+
+#: src/imap.c:2257
+#, c-format
+msgid "Can't establish IMAP4 session with: %s:%d\n"
+msgstr "Lk横ネ IMAP4 suG%s:%d\n"
+
+#: src/imap.c:2332
+msgid "can't get namespace\n"
+msgstr "LkoH福C\n"
+
+#: src/imap.c:2850
+#, c-format
+msgid "can't select folder: %s\n"
+msgstr "Lk随詳瑚踏─G%s\n"
+
+#: src/imap.c:3021
+msgid "IMAP4 authentication failed.\n"
+msgstr "IMAP4 {智ア英\n"
+
+#: src/imap.c:3038
+msgid "IMAP4 login failed.\n"
+msgstr "IMAP4 nJア英C\n"
+
+#: src/imap.c:3359
+#, c-format
+msgid "can't append %s to %s\n"
+msgstr "LkNHンq %s h仮 %sC\n"
+
+#: src/imap.c:3366
+msgid "(sending file...)"
+msgstr "]eX隻 ...^"
+
+#: src/imap.c:3394
+#, c-format
+msgid "can't append message to %s\n"
+msgstr "Lk[TЖ %s\n"
+
+#: src/imap.c:3426
+#, c-format
+msgid "can't copy %s to %s\n"
+msgstr "LkNHン %s 仮 %s\n"
+
+#: src/imap.c:3450
+#, c-format
+msgid "error while imap command: STORE %s %s\n"
+msgstr "imap oネ杉~ARO亜G STORE %s %s\n"
+
+#: src/imap.c:3464
+msgid "error while imap command: EXPUNGE\n"
+msgstr "imap oネ杉~ARO亜G EXPUNGE\n"
+
+#: src/imap.c:3477
+msgid "error while imap command: CLOSE\n"
+msgstr "imap oネ杉~ARO亜G CLOSE\n"
+
+#: src/imap.c:3721
+#, c-format
+msgid "iconv cannot convert UTF-7 to %s\n"
+msgstr "LkN UTF-7 退勧 %s\n"
+
+#: src/imap.c:3770
+#, c-format
+msgid "iconv cannot convert %s to UTF-7\n"
+msgstr "Lk退勧 %s UTF-7\n"
+
+#: src/import.c:132
+msgid "Import"
+msgstr "琴J"
+
+#: src/import.c:151
+msgid "Specify target mbox file and destination folder."
+msgstr "出wヘ斜HcP瑚踏─C"
+
+#: src/import.c:161
+msgid "Importing file:"
+msgstr "琴J隻廖G"
+
+#: src/import.c:166
+msgid "Destination dir:"
+msgstr "ヘ斜ヘ雀G"
+
+#: src/import.c:224
+msgid "Select importing file"
+msgstr "随詳琴J隻"
+
+#: src/importldif.c:118
+msgid "Please specify address book name and file to import."
+msgstr "出wn琴J墾讌}誰W細P隻"
+
+#: src/importldif.c:121
+msgid "Select and rename LDIF field names to import."
+msgstr "出随詳n琴J LDIF 剃讀W細巽錵W"
+
+#: src/importldif.c:124
+msgid "File imported."
+msgstr "隻廚w琴J"
+
+#: src/importldif.c:312
+msgid "Please select a file."
+msgstr "出随詳隻廖G"
+
+#: src/importldif.c:318
+msgid "Address book name must be supplied."
+msgstr "ゼw讌}誰W細"
+
+#: src/importldif.c:333
+msgid "Error reading LDIF fields."
+msgstr "琴J LDIF 剃貎~"
+
+#: src/importldif.c:356
+msgid "LDIF file imported successfully."
+msgstr "LDIF 隻弑廚JЧΘC"
+
+#: src/importldif.c:441
+msgid "Select LDIF File"
+msgstr "随詳 LDIF 隻"
+
+#: src/importldif.c:516
+msgid "File Name"
+msgstr "隻W"
+
+#: src/importldif.c:557
+msgid "S"
+msgstr ""
+
+#: src/importldif.c:558 src/importldif.c:607
+msgid "LDIF Field"
+msgstr "LDIF 剃"
+
+#: src/importldif.c:559
+msgid "Attribute Name"
+msgstr "紬弗W"
+
+#: src/importldif.c:617
+msgid "Attribute"
+msgstr "紬"
+
+#: src/importldif.c:626 src/select-keys.c:322
+msgid "Select"
+msgstr "随詳"
+
+#: src/importldif.c:679
+msgid "Address Book :"
+msgstr "讌}誰G"
+
+#: src/importldif.c:689
+msgid "File Name :"
+msgstr "隻WG"
+
+#: src/importldif.c:699
+msgid "Records :"
+msgstr "雀G"
+
+#: src/importldif.c:727
+msgid "Import LDIF file into Address Book"
+msgstr "N LDIF 隻琴J讌}誰"
+
+#: src/importldif.c:760
+msgid "Prev"
+msgstr "e@"
+
+#: src/importldif.c:761 src/mainwindow.c:2225
+msgid "Next"
+msgstr "U@"
+
+#: src/importldif.c:790
+msgid "File Info"
+msgstr "隻弩螳T"
+
+#: src/importldif.c:791
+msgid "Attributes"
+msgstr "紬"
+
+#: src/importldif.c:792
+msgid "Finish"
+msgstr "ЧΘ"
+
+#: src/inc.c:337
+msgid "Retrieving new messages"
+msgstr "oslンい"
+
+#: src/inc.c:384
+msgid "Standby"
+msgstr "汽欒Bzい"
+
+#: src/inc.c:511 src/inc.c:562
+msgid "Cancelled"
+msgstr ""
+
+#: src/inc.c:522
+msgid "Retrieving"
+msgstr "的い"
+
+#: src/inc.c:531
+#, c-format
+msgid "Done (%d message(s) (%s) received)"
+msgstr "ЧΘ ]w欝Μ %d 紛lン (%s)^"
+
+#: src/inc.c:535
+msgid "Done (no new messages)"
+msgstr "ЧΘ]Lslン^"
+
+#: src/inc.c:541
+msgid "Connection failed"
+msgstr "suア英C"
+
+#: src/inc.c:545
+msgid "Auth failed"
+msgstr "{智ア英"
+
+#: src/inc.c:549
+msgid "Locked"
+msgstr "w題w"
+
+#: src/inc.c:559
+msgid "Timeout"
+msgstr ""
+
+#: src/inc.c:609
+#, c-format
+msgid "Finished (%d new message(s))"
+msgstr "ЧΘ]%d 雰slン^"
+
+#: src/inc.c:612
+msgid "Finished (no new messages)"
+msgstr "ЧΘ]Lslン^"
+
+#: src/inc.c:621
+msgid "Some errors occurred while getting mail."
+msgstr "olン謬oネ杉~C"
+
+#: src/inc.c:657
+#, c-format
+msgid "getting new messages of account %s...\n"
+msgstr "o %s 嵯slンい, 出y...\n"
+
+#: src/inc.c:660
+#, c-format
+msgid "%s: Retrieving new messages"
+msgstr "%s: oslンい, 出y..."
+
+#: src/inc.c:679
+#, c-format
+msgid "Connecting to POP3 server: %s..."
+msgstr "su POP3 A捷 %s い..."
+
+#: src/inc.c:688
+#, c-format
+msgid "Can't connect to POP3 server: %s:%d\n"
+msgstr "Lksu POP3 A捷G%s:%d\n"
+
+#: src/inc.c:767 src/send_message.c:460
+msgid "Authenticating..."
+msgstr "{智"
+
+#: src/inc.c:768
+#, c-format
+msgid "Retrieving messages from %s..."
+msgstr "q %s いolンい..."
+
+#: src/inc.c:773
+msgid "Getting the number of new messages (STAT)..."
+msgstr "oslン瑳洞qい"
+
+#: src/inc.c:777
+msgid "Getting the number of new messages (LAST)..."
+msgstr "oslン瑳洞qい"
+
+#: src/inc.c:781
+msgid "Getting the number of new messages (UIDL)..."
+msgstr "oslン瑳洞qい"
+
+#: src/inc.c:785
+msgid "Getting the size of messages (LIST)..."
+msgstr "oslン瑳洞qい"
+
+#: src/inc.c:795
+#, c-format
+msgid "Deleting message %d"
+msgstr "R娃可 %d 弦lン"
+
+#: src/inc.c:802 src/send_message.c:478
+msgid "Quitting"
+msgstr "託}"
+
+#: src/inc.c:827
+#, c-format
+msgid "Retrieving message (%d / %d) (%s / %s)"
+msgstr "oslン (%d / %d) (%s / %s)"
+
+#: src/inc.c:848
+#, c-format
+msgid "Retrieving (%d message(s) (%s) received)"
+msgstr "oslン (@ %d 雰slン, %s w欝Μ^"
+
+#: src/inc.c:1075
+msgid "Connection failed."
+msgstr "suア英C"
+
+#: src/inc.c:1081
+msgid "Error occurred while processing mail."
+msgstr "Bzlン謬oネ杉~C"
+
+#: src/inc.c:1086
+#, c-format
+msgid ""
+"Error occurred while processing mail:\n"
+"%s"
+msgstr ""
+"Bzlン謬oネ杉~G\n"
+"%s"
+
+#: src/inc.c:1092
+msgid "No disk space left."
+msgstr "栽歳填,w此C"
+
+#: src/inc.c:1097
+msgid "Can't write file."
+msgstr "LkgJ隻廖C"
+
+#: src/inc.c:1102
+msgid "Socket error."
+msgstr "Socket Τ杉~"
+
+#: src/inc.c:1108 src/send_message.c:600
+msgid "Connection closed by the remote host."
+msgstr "桟際D穣猪階suC"
+
+#: src/inc.c:1114
+msgid "Mailbox is locked."
+msgstr "HcwQ題wAi爻e@ΩъゼЧΘC"
+
+#: src/inc.c:1118
+#, c-format
+msgid ""
+"Mailbox is locked:\n"
+"%s"
+msgstr "HcwQ題wG%s"
+
+#: src/inc.c:1124 src/send_message.c:585
+msgid "Authentication failed."
+msgstr "{智ア英"
+
+#: src/inc.c:1129 src/send_message.c:588
+#, c-format
+msgid ""
+"Authentication failed:\n"
+"%s"
+msgstr ""
+"{智ア英G\n"
+"%s"
+
+#: src/inc.c:1134 src/send_message.c:604
+msgid "Session timed out."
+msgstr "@~O"
+
+#: src/inc.c:1170
+msgid "Incorporation cancelled\n"
+msgstr "以@w\n"
+
+#: src/inc.c:1253
+#, c-format
+msgid "Getting new messages from %s into %s...\n"
+msgstr "q %s いolン颪J %s...\n"
+
+#: src/inputdialog.c:153
+#, c-format
+msgid "Input password for %s on %s:"
+msgstr "出翠J %s b %s W艮KXG"
+
+#: src/inputdialog.c:155
+msgid "Input password"
+msgstr "翠JKX"
+
+#: src/logwindow.c:60
+msgid "Protocol log"
+msgstr "qT鶇w雀"
+
+#: src/main.c:126 src/main.c:135 src/mh.c:792
+#, c-format
+msgid ""
+"File `%s' already exists.\n"
+"Can't create folder."
+msgstr ""
+"隻 `%s' wsbC\n"
+"Lk横ネ瑚踏─C"
+
+#: src/main.c:180
+msgid "g_thread is not supported by glib.\n"
+msgstr "glib ぃや刊 g_threadC\n"
+
+#: src/main.c:246
+msgid ""
+"GnuPG is not installed properly, or its version is too old.\n"
+"OpenPGP support disabled."
+msgstr ""
+"GnuPG 奪痔w庫nA葎セL詑C\n"
+"猪階 OpenPGP や刊教ヘC"
+
+#: src/main.c:399
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr ""
+
+#: src/main.c:402
+msgid " --compose [address] open composition window"
+msgstr " --compose [address] 襲偽}衛雫glン鋸機"
+
+#: src/main.c:403
+msgid ""
+" --attach file1 [file2]...\n"
+" open composition window with specified files\n"
+" attached"
+msgstr ""
+" --attach file1 [file2]...\n"
+" }衛雫glン鋸機A単Nw裟筆廬[Wh"
+
+#: src/main.c:406
+msgid " --receive receive new messages"
+msgstr " --receive 襲輝畿slン"
+
+#: src/main.c:407
+msgid " --receive-all receive new messages of all accounts"
+msgstr " --receive-all 襲輝畿勁咳b弦嵯slン"
+
+#: src/main.c:408
+msgid " --send send all queued messages"
+msgstr " --send eX勁骸筈s瑚踏┐お昆Hン"
+
+#: src/main.c:409
+msgid " --status [folder]... show the total number of messages"
+msgstr " --status [folder]... 塔ボ瑚踏┐坐`@ΤhぶHン"
+
+#: src/main.c:410
+msgid ""
+" --status-full [folder]...\n"
+" show the status of each folder"
+msgstr " --status-full [folder]... 塔ボC啗螫踏┐う界hぶHン"
+
+#: src/main.c:412
+msgid " --debug debug mode"
+msgstr " --debug 娃杉社Α"
+
+#: src/main.c:413
+msgid " --help display this help and exit"
+msgstr " --help 塔ボセ察誕}"
+
+#: src/main.c:414
+msgid " --version output version information and exit"
+msgstr " --version 塔ボセ瑚T"
+
+#: src/main.c:444
+msgid "Composing message exists. Really quit?"
+msgstr "ΤHンタbs粋CTwn託}芹H"
+
+#: src/main.c:451
+msgid "Queued messages"
+msgstr "ΤゼeXHン"
+
+#: src/main.c:452
+msgid "Some unsent messages are queued. Exit now?"
+msgstr "Τ寧Hンタb屡s瑚踏┐ぉ|ゼeXCTwn託}芹H"
+
+#: src/main.c:526
+msgid "another Sylpheed is already running.\n"
+msgstr "wgΤ Sylpheed {Αタb印罎ぁC\n"
+
+#: src/mainwindow.c:454
+msgid "/_File/_Folder"
+msgstr "/隻(_F)/瑚踏┷涓z(_F)"
+
+#: src/mainwindow.c:455
+msgid "/_File/_Folder/Create _new folder..."
+msgstr "/隻(_F)/瑚踏┷涓z(_F)/sW瑚踏(_n)"
+
+#: src/mainwindow.c:457
+msgid "/_File/_Folder/_Rename folder..."
+msgstr "/隻(_F)/瑚踏┷涓z(_F)/sRW瑚踏(_R)"
+
+#: src/mainwindow.c:458
+msgid "/_File/_Folder/_Delete folder"
+msgstr "/隻(_F)/瑚踏┷涓z(_F)/R娃瑚踏(_D)"
+
+#: src/mainwindow.c:459
+msgid "/_File/_Mailbox"
+msgstr "/隻(_F)/Hc(_M)"
+
+#: src/mainwindow.c:460
+msgid "/_File/_Mailbox/Add _mailbox..."
+msgstr "/隻(_F)/Hc(_M)/sWHc(_m)..."
+
+#: src/mainwindow.c:461
+msgid "/_File/_Mailbox/_Remove mailbox"
+msgstr "/隻(_F)/Hc(_M)/R娃Hc (_R)"
+
+#: src/mainwindow.c:462 src/mainwindow.c:467
+msgid "/_File/_Mailbox/---"
+msgstr "/隻(_F)/Hc(_M)/---"
+
+#: src/mainwindow.c:463
+msgid "/_File/_Mailbox/_Check for new messages"
+msgstr "/隻(_F)/Hc(_M)/惜dslン(_C)"
+
+#: src/mainwindow.c:465
+msgid "/_File/_Mailbox/Check for new messages in _all mailboxes"
+msgstr "/隻(_F)/Hc(_M)/惜d勁開Hcい嵯slン(_a)"
+
+#: src/mainwindow.c:468
+msgid "/_File/_Mailbox/R_ebuild folder tree"
+msgstr "/隻(_F)/Hc(_M)/惴螫踏┻穏c(_e)"
+
+#: src/mainwindow.c:471
+msgid "/_File/_Import mbox file..."
+msgstr "/隻(_F)/琴Jlン(_I)"
+
+#: src/mainwindow.c:472
+msgid "/_File/_Export to mbox file..."
+msgstr "/隻(_F)/琴X瑚踏(_E)"
+
+#: src/mainwindow.c:474
+msgid "/_File/Empty all _trash"
+msgstr "/隻(_F)/M擢R娃唆lン(_t)"
+
+#: src/mainwindow.c:476 src/messageview.c:131
+msgid "/_File/_Save as..."
+msgstr "/隻(_F)/tss隻(_S)..."
+
+#: src/mainwindow.c:477 src/messageview.c:132
+msgid "/_File/_Print..."
+msgstr "/隻(_F)/CL...(_P)"
+
+#: src/mainwindow.c:479
+msgid "/_File/_Work offline"
+msgstr "/隻(_F)/託uu@(_W)"
+
+#: src/mainwindow.c:482
+msgid "/_File/E_xit"
+msgstr "/隻(_F)/託}(_X)"
+
+#: src/mainwindow.c:487
+msgid "/_Edit/Select _thread"
+msgstr "/s粋(_E)/随螟C(_t)"
+
+#: src/mainwindow.c:489 src/messageview.c:140
+msgid "/_Edit/_Find in current message..."
+msgstr "/s粋(_E)/bヘeHンいMт(_F)"
+
+#: src/mainwindow.c:491
+msgid "/_Edit/_Search messages..."
+msgstr "/s粋(_E)/MтHン(_S)"
+
+#: src/mainwindow.c:494
+msgid "/_View/Show or hi_de"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)"
+
+#: src/mainwindow.c:495
+msgid "/_View/Show or hi_de/_Folder tree"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/瑚踏└C(_F)"
+
+#: src/mainwindow.c:497
+msgid "/_View/Show or hi_de/_Message view"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/Hンw蹄(_M)"
+
+#: src/mainwindow.c:499
+msgid "/_View/Show or hi_de/_Toolbar"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/u礒C(_T)"
+
+#: src/mainwindow.c:501
+msgid "/_View/Show or hi_de/_Toolbar/Icon _and text"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/u礒C(_T)/肱舎Pゅr(_a)"
+
+#: src/mainwindow.c:503
+msgid "/_View/Show or hi_de/_Toolbar/_Icon"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/u礒C(_T)/肱舎(_I)"
+
+#: src/mainwindow.c:505
+msgid "/_View/Show or hi_de/_Toolbar/_Text"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/u礒C(_T)/ゅr(_T)"
+
+#: src/mainwindow.c:507
+msgid "/_View/Show or hi_de/_Toolbar/_None"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/u礒C(_T)/ぃ塔ボ(_N)"
+
+#: src/mainwindow.c:509
+msgid "/_View/Show or hi_de/Status _bar"
+msgstr "/塔ボ(_V)/塔ボ料唾(_d)/AC(_b)"
+
+#: src/mainwindow.c:512
+msgid "/_View/Separate f_older tree"
+msgstr "/塔ボ(_V)/N瑚踏└C蹐逝(_o)"
+
+#: src/mainwindow.c:513
+msgid "/_View/Separate m_essage view"
+msgstr "/塔ボ(_V)/NHンw蹄だ託(_e)"
+
+#: src/mainwindow.c:515
+msgid "/_View/_Sort"
+msgstr "/塔ボ(_V)/影(_S)"
+
+#: src/mainwindow.c:516
+msgid "/_View/_Sort/by _number"
+msgstr "/塔ボ(_V)/影(_S)/ノs弦影(_n)"
+
+#: src/mainwindow.c:517
+msgid "/_View/_Sort/by s_ize"
+msgstr "/塔ボ(_V)/影(_S)/ノjp影(_i)"
+
+#: src/mainwindow.c:518
+msgid "/_View/_Sort/by _date"
+msgstr "/塔ボ(_V)/影(_S)/ノら漢影(_d)"
+
+#: src/mainwindow.c:519
+msgid "/_View/_Sort/by _from"
+msgstr "/塔ボ(_V)/影(_S)/ノ啖襲踏(_f)"
+
+#: src/mainwindow.c:520
+msgid "/_View/_Sort/by _recipient"
+msgstr "/塔ボ(_V)/影(_S)/ノΜンH影(_i)"
+
+#: src/mainwindow.c:521
+msgid "/_View/_Sort/by _subject"
+msgstr "/塔ボ(_V)/影(_S)/ノ斜D影(_s)"
+
+#: src/mainwindow.c:522
+msgid "/_View/_Sort/by _color label"
+msgstr "/塔ボ(_V)/影(_S)/ノ斜OC皹踏(_c)"
+
+#: src/mainwindow.c:524
+msgid "/_View/_Sort/by _mark"
+msgstr "/塔ボ(_V)/影(_S)/ノ斜O影(_m)"
+
+#: src/mainwindow.c:525
+msgid "/_View/_Sort/by _unread"
+msgstr "/塔ボ(_V)/影(_S)/未w的離偲影(_u)"
+
+#: src/mainwindow.c:526
+msgid "/_View/_Sort/by a_ttachment"
+msgstr "/塔ボ(_V)/影(_S)/ノ[隻影(_t)"
+
+#: src/mainwindow.c:528
+msgid "/_View/_Sort/D_on't sort"
+msgstr "/塔ボ(_V)/影(_S)/ぃ影(_o)"
+
+#: src/mainwindow.c:529 src/mainwindow.c:532
+msgid "/_View/_Sort/---"
+msgstr "/塔ボ(_V)/影(_S)/---"
+
+#: src/mainwindow.c:530
+msgid "/_View/_Sort/Ascending"
+msgstr "/塔ボ(_V)/影(_S)/纂W影"
+
+#: src/mainwindow.c:531
+msgid "/_View/_Sort/Descending"
+msgstr "/塔ボ(_V)/影(_S)/纂喜影"
+
+#: src/mainwindow.c:533
+msgid "/_View/_Sort/_Attract by subject"
+msgstr "/塔ボ(_V)/影(_S)/ノHン螟C影(_A)"
+
+#: src/mainwindow.c:535
+msgid "/_View/Th_read view"
+msgstr "/塔ボ(_V)/NHン螟C塔ボ(_r)"
+
+#: src/mainwindow.c:536
+msgid "/_View/E_xpand all threads"
+msgstr "/塔ボ(_V)/i}勁開Hン螟C(_x)"
+
+#: src/mainwindow.c:537
+msgid "/_View/Co_llapse all threads"
+msgstr "/塔ボ(_V)/狐娃勁開Hン螟C(_l)"
+
+#: src/mainwindow.c:538
+msgid "/_View/Set display _item..."
+msgstr "/塔ボ(_V)/]w塔ボ唆汽...(_i)"
+
+#: src/mainwindow.c:541
+msgid "/_View/_Go to"
+msgstr "/塔ボ(_V)/e(_G)"
+
+#: src/mainwindow.c:542
+msgid "/_View/_Go to/_Prev message"
+msgstr "/塔ボ(_V)/e...(_G)/e@鮒Hン(_P)"
+
+#: src/mainwindow.c:543
+msgid "/_View/_Go to/_Next message"
+msgstr "/塔ボ(_V)/e...(_G)/U@鮒Hン(_N)"
+
+#: src/mainwindow.c:544 src/mainwindow.c:549 src/mainwindow.c:552
+#: src/mainwindow.c:557 src/mainwindow.c:562
+msgid "/_View/_Go to/---"
+msgstr "/塔ボ(_V)/e...(_G)/---"
+
+#: src/mainwindow.c:545
+msgid "/_View/_Go to/P_rev unread message"
+msgstr "/塔ボ(_V)/e...(_G)/e@淵偲Hン(_r)"
+
+#: src/mainwindow.c:547
+msgid "/_View/_Go to/N_ext unread message"
+msgstr "/塔ボ(_V)/e...(_G)/U@淵偲Hン(_e)"
+
+#: src/mainwindow.c:550
+msgid "/_View/_Go to/Prev ne_w message"
+msgstr "/塔ボ(_V)/e...(_G)/e@雰sHン(_w)"
+
+#: src/mainwindow.c:551
+msgid "/_View/_Go to/Ne_xt new message"
+msgstr "/塔ボ(_V)/e...(_G)/U@雰sHン(_x)"
+
+#: src/mainwindow.c:553
+msgid "/_View/_Go to/Prev _marked message"
+msgstr "/塔ボ(_V)/e...(_G)/e@覆w斜OHン(_m)"
+
+#: src/mainwindow.c:555
+msgid "/_View/_Go to/Next m_arked message"
+msgstr "/塔ボ(_V)/e...(_G)/U@覆w斜OHン(_a)"
+
+#: src/mainwindow.c:558
+msgid "/_View/_Go to/Prev _labeled message"
+msgstr "/塔ボ(_V)/e...(_G)/e@覆w斜OC發ЙHン(_l)"
+
+#: src/mainwindow.c:560
+msgid "/_View/_Go to/Next la_beled message"
+msgstr "/塔ボ(_V)/e...(_G)/U@覆w斜OC發ЙHン(_b)"
+
+#: src/mainwindow.c:563
+msgid "/_View/_Go to/Other _folder..."
+msgstr "/塔ボ(_V)/e...(_G)/讎筌L瑚踏(_f)"
+
+#: src/mainwindow.c:567 src/mainwindow.c:574 src/messageview.c:146
+msgid "/_View/_Code set/---"
+msgstr "/塔ボ(_V)/r彊(_C)/---"
+
+#: src/mainwindow.c:571 src/messageview.c:150
+msgid "/_View/_Code set"
+msgstr "/塔ボ(_V)/r彊(_C)"
+
+#: src/mainwindow.c:572 src/messageview.c:151
+msgid "/_View/_Code set/_Auto detect"
+msgstr "/塔ボ(_V)/r彊(_C)/朧憤惨(_A)"
+
+#: src/mainwindow.c:575 src/messageview.c:154
+msgid "/_View/_Code set/7bit ascii (US-ASC_II)"
+msgstr "/塔ボ(_V)/r彊(_C)/7譴 ASCII r彊(US-ASC_II)"
+
+#: src/mainwindow.c:579 src/messageview.c:158
+msgid "/_View/_Code set/Unicode (_UTF-8)"
+msgstr "/塔ボ(_V)/r彊(_C)/Unicode (_UTF-8)"
+
+#: src/mainwindow.c:583 src/messageview.c:162
+msgid "/_View/_Code set/Western European (ISO-8859-_1)"
+msgstr "/塔ボ(_V)/r彊(_C)/莠攣yt (ISO-8859-_1)"
+
+#: src/mainwindow.c:585 src/messageview.c:164
+msgid "/_View/_Code set/Western European (ISO-8859-15)"
+msgstr "/塔ボ(_V)/r彊(_C)/莠攣yt (ISO-8859-15)"
+
+#: src/mainwindow.c:589 src/messageview.c:168
+msgid "/_View/_Code set/Central European (ISO-8859-_2)"
+msgstr "/塔ボ(_V)/r彊(_C)/い借yt (ISO-8859-_2)"
+
+#: src/mainwindow.c:592 src/messageview.c:171
+msgid "/_View/_Code set/_Baltic (ISO-8859-13)"
+msgstr "/塔ボ(_V)/r彊(_C)/_i湛混yt (ISO-8859-13)(_B)"
+
+#: src/mainwindow.c:594 src/messageview.c:173
+msgid "/_View/_Code set/Baltic (ISO-8859-_4)"
+msgstr "/塔ボ(_V)/r彊(_C)/i湛混yt (ISO-8859-_4)"
+
+#: src/mainwindow.c:597 src/messageview.c:176
+msgid "/_View/_Code set/Greek (ISO-8859-_7)"
+msgstr "/塔ボ(_V)/r彊(_C)/特昌y (ISO-8859-_7)"
+
+#: src/mainwindow.c:600 src/messageview.c:179
+msgid "/_View/_Code set/Turkish (ISO-8859-_9)"
+msgstr "/塔ボ(_V)/r彊(_C)/gφ篁y (ISO-8859-_9)"
+
+#: src/mainwindow.c:603 src/messageview.c:182
+msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)"
+msgstr "/塔ボ(_V)/r彊(_C)/患圓匯y (ISO-8859-_5)"
+
+#: src/mainwindow.c:605 src/messageview.c:184
+msgid "/_View/_Code set/Cyrillic (KOI8-_R)"
+msgstr "/塔ボ(_V)/r彊(_C)/患圓匯y (KOI8-_R)"
+
+#: src/mainwindow.c:607 src/messageview.c:186
+msgid "/_View/_Code set/Cyrillic (KOI8-U)"
+msgstr "/塔ボ(_V)/r彊(_C)/患圓匯y (KOI8-U)"
+
+#: src/mainwindow.c:609 src/messageview.c:188
+msgid "/_View/_Code set/Cyrillic (Windows-1251)"
+msgstr "/塔ボ(_V)/r彊(_C)/患圓匯y (Windows-1251)"
+
+#: src/mainwindow.c:613 src/messageview.c:192
+msgid "/_View/_Code set/Japanese (ISO-2022-_JP)"
+msgstr "/塔ボ(_V)/r彊(_C)/らゅ (ISO-2022-_JP)"
+
+#: src/mainwindow.c:616 src/messageview.c:195
+msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)"
+msgstr "/塔ボ(_V)/r彊(_C)/らゅ (ISO-2022-JP-2)"
+
+#: src/mainwindow.c:619 src/messageview.c:198
+msgid "/_View/_Code set/Japanese (_EUC-JP)"
+msgstr "/塔ボ(_V)/r彊(_C)/らゅ (_EUC-JP)"
+
+#: src/mainwindow.c:621 src/messageview.c:200
+msgid "/_View/_Code set/Japanese (_Shift__JIS)"
+msgstr "/塔ボ(_V)/r彊(_C)/らゅ (_Shift__JIS)"
+
+#: src/mainwindow.c:625 src/messageview.c:204
+msgid "/_View/_Code set/Simplified Chinese (_GB2312)"
+msgstr "/塔ボ(_V)/r彊(_C)/族悼いゅ (_GB2312)"
+
+#: src/mainwindow.c:627 src/messageview.c:206
+msgid "/_View/_Code set/Traditional Chinese (_Big5)"
+msgstr "/塔ボ(_V)/r彊(_C)/c悼いゅ (_Big5)"
+
+#: src/mainwindow.c:629 src/messageview.c:208
+msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)"
+msgstr "/塔ボ(_V)/r彊(_C)/c悼いゅ (EUC-_TW)"
+
+#: src/mainwindow.c:631 src/messageview.c:210
+msgid "/_View/_Code set/Chinese (ISO-2022-_CN)"
+msgstr "/塔ボ(_V)/r彊(_C)/いゅ (ISO-2022-_CN)"
+
+#: src/mainwindow.c:634 src/messageview.c:213
+msgid "/_View/_Code set/Korean (EUC-_KR)"
+msgstr "/塔ボ(_V)/r彊(_C)/霜ゅ (EUC-_KR)"
+
+#: src/mainwindow.c:636 src/messageview.c:215
+msgid "/_View/_Code set/Korean (ISO-2022-KR)"
+msgstr "/塔ボ(_V)/r彊(_C)/霜ゅ (ISO-2022-KR)"
+
+#: src/mainwindow.c:639 src/messageview.c:218
+msgid "/_View/_Code set/Thai (TIS-620)"
+msgstr "/塔ボ(_V)/r彊(_C)/ゅ (TIS-620)"
+
+#: src/mainwindow.c:641 src/messageview.c:220
+msgid "/_View/_Code set/Thai (Windows-874)"
+msgstr "/塔ボ(_V)/r彊(_C)/ゅ (Windows-874)"
+
+#: src/mainwindow.c:649 src/summaryview.c:371
+msgid "/_View/Open in new _window"
+msgstr "/塔ボ(_V)/bs鋸機}衛(_w)"
+
+#: src/mainwindow.c:650 src/messageview.c:228
+msgid "/_View/Mess_age source"
+msgstr "/塔ボ(_V)/[櫟Hン讒lX(_a)"
+
+#: src/mainwindow.c:651 src/messageview.c:229
+msgid "/_View/Show all _header"
+msgstr "/塔ボ(_V)/塔ボ勁蟹瑳仞Y(_h)"
+
+#: src/mainwindow.c:653
+msgid "/_View/_Update summary"
+msgstr "/塔ボ(_V)/鷏sHンC(_U)"
+
+#: src/mainwindow.c:655 src/messageview.c:231
+msgid "/_Message"
+msgstr "/Hン(_M)"
+
+#: src/mainwindow.c:656
+msgid "/_Message/Recei_ve"
+msgstr "/Hン(_M)/欝Μ(_v)"
+
+#: src/mainwindow.c:657
+msgid "/_Message/Recei_ve/Get from _current account"
+msgstr "/Hン(_M)/欝Μ(_v)/qヘeb弦い欝Μslン(_c)"
+
+#: src/mainwindow.c:659
+msgid "/_Message/Recei_ve/Get from _all accounts"
+msgstr "/Hン(_M)/欝Μ(_v)/q勁咳b弦い欝Μslン(_a)"
+
+#: src/mainwindow.c:661
+msgid "/_Message/Recei_ve/Cancel receivin_g"
+msgstr "/Hン(_M)/欝Μ(_v)/欝Μ(_g)"
+
+#: src/mainwindow.c:663
+msgid "/_Message/Recei_ve/---"
+msgstr "/Hン(_M)/欝Μ(_v)/---"
+
+#: src/mainwindow.c:664
+msgid "/_Message/_Send queued messages"
+msgstr "/Hン(_M)/N屡s瑚踏┐お昆HンeX(_S)"
+
+#: src/mainwindow.c:665 src/mainwindow.c:667 src/mainwindow.c:674
+#: src/mainwindow.c:679 src/mainwindow.c:683 src/mainwindow.c:692
+#: src/messageview.c:234 src/messageview.c:242 src/messageview.c:247
+msgid "/_Message/---"
+msgstr "/Hン(_M)/---"
+
+#: src/mainwindow.c:666 src/messageview.c:232
+msgid "/_Message/Compose _new message"
+msgstr "/Hン(_M)/雫glン(_n)"
+
+#: src/mainwindow.c:668 src/messageview.c:235
+msgid "/_Message/_Reply"
+msgstr "/Hン(_M)/襲畿^対(_R)"
+
+#: src/mainwindow.c:669
+msgid "/_Message/Repl_y to"
+msgstr "/Hン(_M)/^対宜(_y)"
+
+#: src/mainwindow.c:670 src/messageview.c:236
+msgid "/_Message/Repl_y to/_all"
+msgstr "/Hン(_M)/^対宜(_y)/勁界ンH(_a)"
+
+#: src/mainwindow.c:671 src/messageview.c:238
+msgid "/_Message/Repl_y to/_sender"
+msgstr "/Hン(_M)/^対宜(_y)/讌@(_s)"
+
+#: src/mainwindow.c:672 src/messageview.c:240
+msgid "/_Message/Repl_y to/mailing _list"
+msgstr "/Hン(_M)/^対宜(_y)/Mailing List(_l)"
+
+#: src/mainwindow.c:675 src/messageview.c:243
+msgid "/_Message/_Forward"
+msgstr "/Hン(_M)/退H(_F)"
+
+#: src/mainwindow.c:676 src/messageview.c:244
+msgid "/_Message/For_ward as attachment"
+msgstr "/Hン(_M)/NHン訣Θ[隻退H(_w)"
+
+#: src/mainwindow.c:678 src/messageview.c:246
+msgid "/_Message/Redirec_t"
+msgstr "/Hン(_M)/Hン症V(_t)"
+
+#: src/mainwindow.c:680
+msgid "/_Message/M_ove..."
+msgstr "/Hン(_M)/仮以...(_o)"
+
+#: src/mainwindow.c:681
+msgid "/_Message/_Copy..."
+msgstr "/Hン(_M)/銃s...(_C)"
+
+#: src/mainwindow.c:682
+msgid "/_Message/_Delete"
+msgstr "/Hン(_M)/R娃(_D)"
+
+#: src/mainwindow.c:684
+msgid "/_Message/_Mark"
+msgstr "/Hン(_M)/斜O(_M)"
+
+#: src/mainwindow.c:685
+msgid "/_Message/_Mark/_Mark"
+msgstr "/Hン(_M)/斜O(_M)/斜O(_M)"
+
+#: src/mainwindow.c:686
+msgid "/_Message/_Mark/_Unmark"
+msgstr "/Hン(_M)/斜O(_M)/h娃斜O(_U)"
+
+#: src/mainwindow.c:687
+msgid "/_Message/_Mark/---"
+msgstr "/Hン(_M)/斜O(_M)/---"
+
+#: src/mainwindow.c:688
+msgid "/_Message/_Mark/Mark as unr_ead"
+msgstr "/Hン(_M)/斜O(_M)/斜OΘゼ的(_e)"
+
+#: src/mainwindow.c:689
+msgid "/_Message/_Mark/Mark as rea_d"
+msgstr "/Hン(_M)/斜O(_M)/斜OΘw的(_d)"
+
+#: src/mainwindow.c:691
+msgid "/_Message/_Mark/Mark all _read"
+msgstr "/Hン(_M)/斜O(_M)/斜O勁開HンΘw的(_d)"
+
+#: src/mainwindow.c:693 src/messageview.c:248
+msgid "/_Message/Re-_edit"
+msgstr "/Hン(_M)/ss粋(_e)"
+
+#: src/mainwindow.c:697 src/messageview.c:252
+msgid "/_Tools/Add sender to address boo_k"
+msgstr "/u(_T)/NHHH[J讌}誰(_k)"
+
+#: src/mainwindow.c:700
+msgid "/_Tools/_Filter all messages in folder"
+msgstr "/u(_T)/Lo瑚踏┐ぉ勁開Hン(_F)"
+
+#: src/mainwindow.c:702
+msgid "/_Tools/Filter _selected messages"
+msgstr "/u(_T)/Lo随詳昆Hン(_F)"
+
+#: src/mainwindow.c:704 src/messageview.c:255
+msgid "/_Tools/_Create filter rule"
+msgstr "/u(_T)/横ネHンLoWh(_C)"
+
+#: src/mainwindow.c:705 src/messageview.c:257
+msgid "/_Tools/_Create filter rule/_Automatically"
+msgstr "/u(_T)/横ネHンLoWh(_C)/朧焚ネ"
+
+#: src/mainwindow.c:707 src/messageview.c:259
+msgid "/_Tools/_Create filter rule/by _From"
+msgstr "/u(_T)/横ネHンLoWh(_C)/岬啖(_F)"
+
+#: src/mainwindow.c:709 src/messageview.c:261
+msgid "/_Tools/_Create filter rule/by _To"
+msgstr "/u(_T)/横ネHンLoWh(_C)/巳HH(_T)"
+
+#: src/mainwindow.c:711 src/messageview.c:263
+msgid "/_Tools/_Create filter rule/by _Subject"
+msgstr "/u(_T)/横ネHンLoWh(_C)/娘价D(_S)"
+
+#: src/mainwindow.c:716
+msgid "/_Tools/Delete du_plicated messages"
+msgstr "/u(_T)/R娃対昆Hン(_p)"
+
+#: src/mainwindow.c:719
+msgid "/_Tools/E_xecute"
+msgstr "/u(_T)/印(_x)"
+
+#: src/mainwindow.c:721
+msgid "/_Tools/_Log window"
+msgstr "/u(_T)/雀鋸機(_L)"
+
+#: src/mainwindow.c:723
+msgid "/_Configuration"
+msgstr "/]w(_C)"
+
+#: src/mainwindow.c:724
+msgid "/_Configuration/_Common preferences..."
+msgstr "/]w(_C)/@覲]w...(_C)"
+
+#: src/mainwindow.c:726
+msgid "/_Configuration/_Filter setting..."
+msgstr "/]w(_C)/HンLo]w...(_F)"
+
+#: src/mainwindow.c:728
+msgid "/_Configuration/_Template..."
+msgstr "/]w(_C)/Hン舎O]w...(_T)"
+
+#: src/mainwindow.c:729
+msgid "/_Configuration/_Actions..."
+msgstr "/]w(_C)/~魁O]w...(_A)"
+
+#: src/mainwindow.c:730
+msgid "/_Configuration/---"
+msgstr "/]w(_C)/---"
+
+#: src/mainwindow.c:731
+msgid "/_Configuration/_Preferences for current account..."
+msgstr "/]w(_C)/ヘeb弦]w(_P)"
+
+#: src/mainwindow.c:733
+msgid "/_Configuration/Create _new account..."
+msgstr "/]w(_C)/sWb弦...(_n)"
+
+#: src/mainwindow.c:735
+msgid "/_Configuration/_Edit accounts..."
+msgstr "/]w(_C)/s粋b弦...(_E)"
+
+#: src/mainwindow.c:737
+msgid "/_Configuration/C_hange current account"
+msgstr "/]w(_C)/э怒{Τb弦(_h)"
+
+#: src/mainwindow.c:741
+msgid "/_Help/_Manual"
+msgstr "/察(_H)/察ゅン(_M)"
+
+#: src/mainwindow.c:742
+msgid "/_Help/_Manual/_English"
+msgstr "/察(_H)/察ゅン(_M)/^ゅ(_E)"
+
+#: src/mainwindow.c:743
+msgid "/_Help/_Manual/_Japanese"
+msgstr "/察(_H)/察ゅン(_M)/らゅ(_J)"
+
+#: src/mainwindow.c:744
+msgid "/_Help/_FAQ"
+msgstr "/察(_H)/`維維D狐紀(_F)"
+
+#: src/mainwindow.c:745
+msgid "/_Help/_FAQ/_English"
+msgstr "/察(_H)/`維維D狐紀(_F)/^ゅ(_E)"
+
+#: src/mainwindow.c:746
+msgid "/_Help/_FAQ/_German"
+msgstr "/察(_H)/`維維D狐紀(_F)/wゅ(_F)"
+
+#: src/mainwindow.c:747
+msgid "/_Help/_FAQ/_Spanish"
+msgstr "/察(_H)/`維維D狐紀(_F)/莚Zゅ(_S)"
+
+#: src/mainwindow.c:748
+msgid "/_Help/_FAQ/_French"
+msgstr "/察(_H)/`維維D狐紀(_F)/kゅ(_F)"
+
+#: src/mainwindow.c:749
+msgid "/_Help/_FAQ/_Italian"
+msgstr "/察(_H)/`維維D狐紀(_F)/qjQゅ(_E)"
+
+#: src/mainwindow.c:750
+msgid "/_Help/---"
+msgstr "/察(_H)/---"
+
+#: src/mainwindow.c:788
+msgid "Creating main window...\n"
+msgstr "横ネD鋸機...\n"
+
+#: src/mainwindow.c:949
+#, c-format
+msgid "MainWindow: color allocation %d failed\n"
+msgstr "D鋸機GC %d tmア英C\n"
+
+#: src/mainwindow.c:1024 src/summaryview.c:1364 src/summaryview.c:1673
+#: src/summaryview.c:1781 src/summaryview.c:1827 src/summaryview.c:2447
+#: src/summaryview.c:3073 src/summaryview.c:3137 src/summaryview.c:3162
+#: src/summaryview.c:3275
+msgid "done.\n"
+msgstr "ЧΘC\n"
+
+#: src/mainwindow.c:1140 src/mainwindow.c:1181 src/mainwindow.c:1209
+msgid "Untitled"
+msgstr "L斜D"
+
+#: src/mainwindow.c:1210
+msgid "none"
+msgstr "L"
+
+#: src/mainwindow.c:1260
+#, c-format
+msgid "Changing window separation type from %d to %d\n"
+msgstr "Changing window separation type from %d to %d\n"
+
+#: src/mainwindow.c:1475
+msgid "Offline"
+msgstr "託u"
+
+#: src/mainwindow.c:1476
+msgid "You are offline. Go online?"
+msgstr "zヘeタ託uいCnsu芹H"
+
+#: src/mainwindow.c:1489
+msgid "Empty all trash"
+msgstr "M擢R娃唆lン"
+
+#: src/mainwindow.c:1490
+msgid "Empty messages in all trash?"
+msgstr "zTwnM娃勁崖QR娃唆lンH"
+
+#: src/mainwindow.c:1517
+msgid "Add mailbox"
+msgstr "sWHc"
+
+#: src/mainwindow.c:1518
+msgid ""
+"Input the location of mailbox.\n"
+"If the existing mailbox is specified, it will be\n"
+"scanned automatically."
+msgstr ""
+"出翠JHc墾讌}C\n"
+"箪乖`Nぃn翠Jwsb昆HcW細C\n"
+"t歌N|朧払POO_HcwsbC"
+
+#: src/mainwindow.c:1524
+#, c-format
+msgid "The mailbox `%s' already exists."
+msgstr "Hc %s wsbC"
+
+#: src/mainwindow.c:1529 src/setup.c:57
+msgid "Mailbox"
+msgstr "Hc"
+
+#: src/mainwindow.c:1535 src/setup.c:63
+msgid ""
+"Creation of the mailbox failed.\n"
+"Maybe some files already exist, or you don't have the permission to write "
+"there."
+msgstr ""
+"Lk横ネHcヘ雀C\n"
+"i爼O]愛P舎W細裟筆廚wgsbA葎蓑OASΤviH}sヘ雀C"
+
+#: src/mainwindow.c:1898
+msgid "Sylpheed - Folder View"
+msgstr "Sylpheed - 瑚踏└C"
+
+#: src/mainwindow.c:1919 src/messageview.c:337
+msgid "Sylpheed - Message View"
+msgstr "Sylpheed - HンC"
+
+#: src/mainwindow.c:2072 src/summaryview.c:340
+msgid "/_Reply"
+msgstr "/襲畿^対(_R)"
+
+#: src/mainwindow.c:2073
+msgid "/Reply to _all"
+msgstr "/魁^対(_a)"
+
+#: src/mainwindow.c:2074
+msgid "/Reply to _sender"
+msgstr "/^対宜讌@(_s)"
+
+#: src/mainwindow.c:2075
+msgid "/Reply to mailing _list"
+msgstr "/^対 Mailing list(_l)"
+
+#: src/mainwindow.c:2080 src/summaryview.c:347
+msgid "/_Forward"
+msgstr "/退H(_F)"
+
+#: src/mainwindow.c:2081 src/summaryview.c:348
+msgid "/For_ward as attachment"
+msgstr "/NHン訣Θ[隻退H(_w)"
+
+#: src/mainwindow.c:2082 src/summaryview.c:349
+msgid "/Redirec_t"
+msgstr "/Hン症V(_t)"
+
+#: src/mainwindow.c:2120
+msgid "Get"
+msgstr "惜dlン"
+
+#: src/mainwindow.c:2121
+msgid "Incorporate new mail"
+msgstr "惜dヘeb弦嵯slン"
+
+#: src/mainwindow.c:2126
+msgid "Get all"
+msgstr "魁惜d"
+
+#: src/mainwindow.c:2127
+msgid "Incorporate new mail of all accounts"
+msgstr "惜d勁咳b弦嵯slン"
+
+#: src/mainwindow.c:2138
+msgid "Send queued message(s)"
+msgstr "N屡s瑚踏┐お昆HンeX"
+
+#: src/mainwindow.c:2148 src/prefs_account.c:699 src/prefs_common.c:854
+#: src/prefs_folder_item.c:142
+msgid "Compose"
+msgstr "雫glン"
+
+#: src/mainwindow.c:2149
+msgid "Compose new message"
+msgstr "s粋slン"
+
+#: src/mainwindow.c:2157 src/prefs_common.c:1357
+msgid "Reply"
+msgstr "^対"
+
+#: src/mainwindow.c:2158 src/mainwindow.c:2172
+msgid "Reply to the message"
+msgstr "^対Hン"
+
+#: src/mainwindow.c:2177
+msgid "Reply all"
+msgstr "魁^対"
+
+#: src/mainwindow.c:2178
+msgid "Reply to all"
+msgstr "魁^対"
+
+#: src/mainwindow.c:2186 src/prefs_filter_edit.c:722
+msgid "Forward"
+msgstr "退H"
+
+#: src/mainwindow.c:2187 src/mainwindow.c:2201
+msgid "Forward the message"
+msgstr "退HHン"
+
+#: src/mainwindow.c:2208
+msgid "Delete the message"
+msgstr "R娃Hン"
+
+#: src/mainwindow.c:2216
+msgid "Execute"
+msgstr "印"
+
+#: src/mainwindow.c:2217
+msgid "Execute marked process"
+msgstr "印羲舒O墾羌{"
+
+#: src/mainwindow.c:2226
+msgid "Next unread message"
+msgstr "U@淵偲lン"
+
+#: src/mainwindow.c:2237
+msgid "Prefs"
+msgstr "]w"
+
+#: src/mainwindow.c:2238
+msgid "Common preferences"
+msgstr "@覲]w"
+
+#: src/mainwindow.c:2245 src/prefs_folder_item.c:263
+#: src/prefs_folder_item.c:274 src/progressdialog.c:52
+msgid "Account"
+msgstr "b弦"
+
+#: src/mainwindow.c:2246
+msgid "Account setting"
+msgstr "b弦]w"
+
+#: src/mainwindow.c:2422
+msgid "You are offline. Click the icon to go online."
+msgstr "zヘeタ託uいCUs豐_suC"
+
+#: src/mainwindow.c:2433
+msgid "You are online. Click the icon to go offline."
+msgstr "zヘeタsuいCUs託uu@C"
+
+#: src/mainwindow.c:2616
+msgid "Exit"
+msgstr "託}"
+
+#: src/mainwindow.c:2616
+msgid "Exit this program?"
+msgstr "zTwn託}芹H"
+
+#: src/mbox.c:50 src/mbox.c:196
+msgid "can't write to temporary file\n"
+msgstr "LkgJ屡s隻C\n"
+
+#: src/mbox.c:69
+#, c-format
+msgid "Getting messages from %s into %s...\n"
+msgstr "q %s いolン颪J %s...\n"
+
+#: src/mbox.c:79
+msgid "can't read mbox file.\n"
+msgstr "Lk的 mbox 隻廖C\n"
+
+#: src/mbox.c:86
+#, c-format
+msgid "invalid mbox format: %s\n"
+msgstr "ぃXk mbox 网 G%s\n"
+
+#: src/mbox.c:93
+#, c-format
+msgid "malformed mbox: %s\n"
+msgstr "la mbox: %s\n"
+
+#: src/mbox.c:110
+msgid "can't open temporary file\n"
+msgstr "Lk}衛屡s隻C\n"
+
+#: src/mbox.c:161
+#, c-format
+msgid ""
+"unescaped From found:\n"
+"%s"
+msgstr ""
+"ぃЧ障 From 网 G\n"
+"%s"
+
+#: src/mbox.c:253
+#, c-format
+msgid "%d messages found.\n"
+msgstr "@Τ %d 鮒HンC\n"
+
+#: src/mbox.c:270
+#, c-format
+msgid "can't create lock file %s\n"
+msgstr "Lk}衛隻 %s\n"
+
+#: src/mbox.c:271
+msgid "use 'flock' instead of 'file' if possible.\n"
+msgstr "pGiHA出魯 flock 汗N隻廖C\n"
+
+#: src/mbox.c:283
+#, c-format
+msgid "can't create %s\n"
+msgstr "Lk横ネ %s\n"
+
+#: src/mbox.c:289
+msgid "mailbox is owned by another process, waiting...\n"
+msgstr "HcタQ筌L墾羌{的い, 出y...\n"
+
+#: src/mbox.c:318
+#, c-format
+msgid "can't lock %s\n"
+msgstr "Lk題 %s\n"
+
+#: src/mbox.c:325 src/mbox.c:372
+msgid "invalid lock type\n"
+msgstr "ぃXk lock AC\n"
+
+#: src/mbox.c:358
+#, c-format
+msgid "can't unlock %s\n"
+msgstr "%s Lkゴ} \n"
+
+#: src/mbox.c:389
+msgid "can't truncate mailbox to zero.\n"
+msgstr "LkM娃HcC\n"
+
+#: src/mbox.c:410
+#, c-format
+msgid "Exporting messages from %s into %s...\n"
+msgstr "NHンパ %s 琴X %s い...\n"
+
+#: src/message_search.c:88
+msgid "Find in current message"
+msgstr "bヘeHンいMт"
+
+#: src/message_search.c:106
+msgid "Find text:"
+msgstr "MтゅrG"
+
+#: src/message_search.c:121 src/summary_search.c:201
+msgid "Case sensitive"
+msgstr "囲だjpg"
+
+#: src/message_search.c:127 src/summary_search.c:207
+msgid "Backward search"
+msgstr "孔^Mт"
+
+#: src/message_search.c:133 src/summary_search.c:221
+msgid "Search"
+msgstr "Mт"
+
+#: src/message_search.c:183 src/summary_search.c:317
+msgid "Search failed"
+msgstr "jMア英"
+
+#: src/message_search.c:184 src/summary_search.c:318
+msgid "Search string not found."
+msgstr "тぃ豸哘r蝓C"
+
+#: src/message_search.c:192
+msgid "Beginning of message reached; continue from end?"
+msgstr "jMw豎産檗CnqЮ際~挺jM芹H"
+
+#: src/message_search.c:195
+msgid "End of message reached; continue from beginning?"
+msgstr "jMw讌精檗Cnq鎧際~挺jM芹H"
+
+#: src/message_search.c:198 src/summary_search.c:328
+msgid "Search finished"
+msgstr "jM飢"
+
+#: src/messageview.c:281
+msgid "Creating message view...\n"
+msgstr "横ネHン鋸機...\n"
+
+#: src/messageview.c:612 src/mimeview.c:794 src/summaryview.c:2709
+msgid "Save as"
+msgstr "tss隻"
+
+#: src/messageview.c:617 src/mimeview.c:799 src/summaryview.c:2714
+msgid "Overwrite"
+msgstr "対g"
+
+#: src/messageview.c:618 src/mimeview.c:800 src/summaryview.c:2715
+msgid "Overwrite existing file?"
+msgstr "znNwsb裟筆弑棔H"
+
+#: src/messageview.c:625 src/summaryview.c:2722
+#, c-format
+msgid "Can't save the file `%s'."
+msgstr "Lkxs隻 `%s'C"
+
+#: src/messageview.c:666 src/prefs_common.c:2134 src/summaryview.c:2739
+msgid "Print"
+msgstr "CL"
+
+#: src/messageview.c:667 src/summaryview.c:2740
+#, c-format
+msgid ""
+"Enter the print command line:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"出翠JCLOG\n"
+"] `%s' N|Qm勧粟髭W^"
+
+#: src/messageview.c:673 src/summaryview.c:2746
+#, c-format
+msgid ""
+"Print command line is invalid:\n"
+"`%s'"
+msgstr ""
+"翠J墾CLOΤ~G\n"
+"`%s'"
+
+#: src/mh.c:380
+#, c-format
+msgid "can't copy message %s to %s\n"
+msgstr "LkNHンq %s h仮 %sC\n"
+
+#: src/mh.c:452 src/mh.c:573
+msgid "Can't open mark file.\n"
+msgstr "Lk}衛斜O裟筆廖C\n"
+
+#: src/mh.c:459 src/mh.c:579
+msgid "the src folder is identical to the dest.\n"
+msgstr "啖住Pヘ左螫踏━昿PC\n"
+
+#: src/mh.c:582
+#, c-format
+msgid "Copying message %s%c%d to %s ...\n"
+msgstr ""
+
+#: src/mh.c:749
+#, c-format
+msgid "Last number in dir %s = %d\n"
+msgstr ""
+
+#: src/mimeview.c:114
+msgid "/_Open"
+msgstr "/}衛(_O)"
+
+#: src/mimeview.c:115
+msgid "/Open _with..."
+msgstr "/ノO叉{Α}衛(_w)"
+
+#: src/mimeview.c:116
+msgid "/_Display as text"
+msgstr "/H造絋re{(_D)"
+
+#: src/mimeview.c:117
+msgid "/_Save as..."
+msgstr "tss隻...(_S)"
+
+#: src/mimeview.c:120
+msgid "/_Check signature"
+msgstr "/惜d柴戝嘘(_C)"
+
+#: src/mimeview.c:145
+msgid "Creating MIME view...\n"
+msgstr "横ネ MIME 鋸機...\n"
+
+#: src/mimeview.c:148
+msgid "MIME Type"
+msgstr "MIME A"
+
+#: src/mimeview.c:158 src/prefs_common.c:1548
+msgid "Text"
+msgstr "ゅr"
+
+#: src/mimeview.c:196
+msgid "Attachments"
+msgstr "[隻"
+
+#: src/mimeview.c:268
+msgid "Select \"Check signature\" to check"
+msgstr "出随詳u惜d柴戝嘘后v喟訪d"
+
+#: src/mimeview.c:754 src/mimeview.c:807 src/mimeview.c:825 src/mimeview.c:848
+msgid "Can't save the part of multipart message."
+msgstr "Lkxso唔[隻C"
+
+#: src/mimeview.c:858
+msgid "Open with"
+msgstr "HO叉{Α}衛"
+
+#: src/mimeview.c:859
+#, c-format
+msgid ""
+"Enter the command line to open file:\n"
+"(`%s' will be replaced with file name)"
+msgstr ""
+"出翠J}衛OG\n"
+"] `%s' N|Qm勧粟髭W^"
+
+#: src/mimeview.c:914
+#, c-format
+msgid "MIME viewer command line is invalid: `%s'"
+msgstr "}衛 MIME A懇ROO杉~此G`%s'"
+
+#: src/news.c:208
+#, c-format
+msgid "creating NNTP connection to %s:%d ...\n"
+msgstr "横ネsDqT鶇wsu %s:%d , 出y...\n"
+
+#: src/news.c:278
+#, c-format
+msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n"
+msgstr " %s:%d 嵯sDqT鶇wsuQい_FCssuい...\n"
+
+#: src/news.c:362
+#, c-format
+msgid "article %d has been already cached.\n"
+msgstr ""
+
+#: src/news.c:382
+#, c-format
+msgid "getting article %d...\n"
+msgstr ""
+
+#: src/news.c:386
+#, c-format
+msgid "can't read article %d\n"
+msgstr "Lk的ゅ街 %d\n"
+
+#: src/news.c:540
+msgid "can't retrieve newsgroup list\n"
+msgstr "LkosDs箇C\n"
+
+#: src/news.c:653
+msgid "can't post article.\n"
+msgstr "Lko蹐絣\n"
+
+#: src/news.c:679
+#, c-format
+msgid "can't retrieve article %d\n"
+msgstr "Lkoゅ街 %d\n"
+
+#: src/news.c:735
+#, c-format
+msgid "can't select group: %s\n"
+msgstr "Lk随詳sDs箇G%s\n"
+
+#: src/news.c:770
+#, c-format
+msgid "invalid article range: %d - %d\n"
+msgstr "杉~困絣構d樺G%d - %d\n"
+
+#: src/news.c:783
+msgid "no new articles.\n"
+msgstr "SΤsゅ街C\n"
+
+#: src/news.c:793
+#, c-format
+msgid "getting xover %d - %d in %s...\n"
+msgstr ""
+
+#: src/news.c:797
+msgid "can't get xover\n"
+msgstr "Lko xover\n"
+
+#: src/news.c:807
+msgid "error occurred while getting xover.\n"
+msgstr "o xover 謬oネ杉~C\n"
+
+#: src/news.c:817
+#, c-format
+msgid "invalid xover line: %s\n"
+msgstr "xover ずe杉~G%s\n"
+
+#: src/news.c:836 src/news.c:868
+msgid "can't get xhdr\n"
+msgstr "Lko xover\n"
+
+#: src/news.c:848 src/news.c:880
+msgid "error occurred while getting xhdr.\n"
+msgstr "o xover 謬oネ杉~C\n"
+
+#: src/nntp.c:68
+#, c-format
+msgid "Can't connect to NNTP server: %s:%d\n"
+msgstr "Lksu豬sDA捷G%s:%d\n"
+
+#: src/nntp.c:164 src/nntp.c:227
+#, c-format
+msgid "protocol error: %s\n"
+msgstr "qT鶇wΤ杉~G%s\n"
+
+#: src/nntp.c:187 src/nntp.c:233
+msgid "protocol error\n"
+msgstr "qT鶇wΤ杉~\n"
+
+#: src/nntp.c:283
+msgid "Error occurred while posting\n"
+msgstr "o蹐絣庚謬oネ杉~\n"
+
+#: src/nntp.c:363
+msgid "Error occurred while sending command\n"
+msgstr "eXRO謬oネ杉~C\n"
+
+#: src/passphrase.c:85
+msgid "Passphrase"
+msgstr "KXy"
+
+#: src/passphrase.c:256
+msgid "[no user id]"
+msgstr "[тぃ讎魯葎]"
+
+#: src/passphrase.c:260
+#, c-format
+msgid ""
+"%sPlease enter the passphrase for:\n"
+"\n"
+" %.*s \n"
+"(%.*s)\n"
+msgstr "%s出翠J %.*s (%.*s) 艮KXy:\n"
+
+#: src/passphrase.c:264
+msgid ""
+"Bad passphrase! Try again...\n"
+"\n"
+msgstr ""
+"L暢艮KXy! 出A胡@Ω...\n"
+"\n"
+
+#: src/pop.c:147
+msgid "Required APOP timestamp not found in greeting\n"
+msgstr "bqTいтぃ APOP timestampC\n"
+
+#: src/pop.c:154
+msgid "Timestamp syntax error in greeting\n"
+msgstr "qTい timestamp yk杉~\n"
+
+#: src/pop.c:180 src/pop.c:207
+msgid "POP3 protocol error\n"
+msgstr "POP3 鶇wΤ杉~\n"
+
+#: src/pop.c:252
+#, c-format
+msgid "invalid UIDL response: %s\n"
+msgstr "UIDL ^棲杉~G%s\n"
+
+#: src/pop.c:621
+#, c-format
+msgid "POP3: Deleting expired message %d\n"
+msgstr "POP3: R娃L漢昆Hン %d\n"
+
+#: src/pop.c:629
+#, c-format
+msgid "POP3: Skipping message %d (%d bytes)\n"
+msgstr "POP3: 欧Llン %d (%d bytes)\n"
+
+#: src/pop.c:660
+msgid "mailbox is locked\n"
+msgstr "HcwQ題wAi爻e@ΩъゼЧΘC\n"
+
+#: src/pop.c:663
+msgid "session timeout\n"
+msgstr "@~O\n"
+
+#: src/pop.c:669 src/smtp.c:510
+msgid "can't start TLS session\n"
+msgstr "Lk衛以 TLS\n"
+
+#: src/pop.c:676 src/smtp.c:445
+msgid "error occurred on authentication\n"
+msgstr "{智謬oネ杉~\n"
+
+#: src/pop.c:681
+msgid "command not supported\n"
+msgstr "ROゼや刊\n"
+
+#: src/pop.c:685
+msgid "error occurred on POP3 session\n"
+msgstr "魯 POP3 qT鶇w謬oネ杉~\n"
+
+#: src/prefs.c:54
+msgid "Reading configuration...\n"
+msgstr "的箇A]wい...\n"
+
+#: src/prefs.c:74 src/prefs.c:182
+#, c-format
+msgid "Found %s\n"
+msgstr "т %s\n"
+
+#: src/prefs.c:88
+msgid "Finished reading configuration.\n"
+msgstr "箇A]w的ЧΘC\n"
+
+#: src/prefs.c:215
+msgid "Configuration is saved.\n"
+msgstr "箇A]wwxsC\n"
+
+#: src/prefs.c:470
+msgid "Apply"
+msgstr "Mノ"
+
+#: src/prefs_account.c:602
+msgid "Opening account preferences window...\n"
+msgstr "}衛b弦]w叉機...\n"
+
+#: src/prefs_account.c:628
+#, c-format
+msgid "Account%d"
+msgstr "b弦 %d"
+
+#: src/prefs_account.c:647
+msgid "Preferences for new account"
+msgstr "sb弦]w"
+
+#: src/prefs_account.c:652
+msgid "Account preferences"
+msgstr "b弦]w"
+
+#: src/prefs_account.c:675
+msgid "Creating account preferences window...\n"
+msgstr "横ネb弦]w叉機...\n"
+
+#: src/prefs_account.c:695 src/prefs_common.c:850
+msgid "Receive"
+msgstr "欝Μ]w"
+
+#: src/prefs_account.c:702 src/prefs_common.c:863
+msgid "Privacy"
+msgstr "pH瑚"
+
+#: src/prefs_account.c:706
+msgid "SSL"
+msgstr ""
+
+#: src/prefs_account.c:709
+msgid "Advanced"
+msgstr "i競]w"
+
+#: src/prefs_account.c:759
+msgid "Name of this account"
+msgstr "o啀b弦墾W細"
+
+#: src/prefs_account.c:768
+msgid "Set as default"
+msgstr "]姐w]b弦"
+
+#: src/prefs_account.c:772
+msgid "Personal information"
+msgstr "咾H瑚T"
+
+#: src/prefs_account.c:781
+msgid "Full name"
+msgstr "W"
+
+#: src/prefs_account.c:787
+msgid "Mail address"
+msgstr "qllンa}"
+
+#: src/prefs_account.c:793
+msgid "Organization"
+msgstr "A鞍そq/箇卒"
+
+#: src/prefs_account.c:817
+msgid "Server information"
+msgstr "A捷瑚T"
+
+#: src/prefs_account.c:838 src/prefs_account.c:985 src/prefs_account.c:1586
+msgid "POP3"
+msgstr ""
+
+#: src/prefs_account.c:840 src/prefs_account.c:1096 src/prefs_account.c:1603
+#: src/prefs_account.c:1788
+msgid "IMAP4"
+msgstr ""
+
+#: src/prefs_account.c:842
+msgid "News (NNTP)"
+msgstr "sD (NNTP)"
+
+#: src/prefs_account.c:844
+msgid "None (local)"
+msgstr "L (local)"
+
+#: src/prefs_account.c:857
+msgid "This server requires authentication"
+msgstr "o哘A捷旨n{智"
+
+#: src/prefs_account.c:896
+msgid "News server"
+msgstr "sDA捷"
+
+#: src/prefs_account.c:902
+msgid "Server for receiving"
+msgstr "欝ΜlンA捷"
+
+#: src/prefs_account.c:908
+msgid "SMTP server (send)"
+msgstr "oelンA捷 (SMTP)"
+
+#: src/prefs_account.c:915 src/prefs_account.c:1252
+msgid "User ID"
+msgstr "b弦"
+
+#: src/prefs_account.c:921 src/prefs_account.c:1261
+msgid "Password"
+msgstr "KX"
+
+#: src/prefs_account.c:993
+msgid "Use secure authentication (APOP)"
+msgstr "魯陸w{智]APOP^"
+
+#: src/prefs_account.c:996
+msgid "Remove messages on server when received"
+msgstr "欝Μlン匹@岷qA捷W仮娃C"
+
+#: src/prefs_account.c:1007
+msgid "Remove after"
+msgstr "bXぱ瓰R娃G"
+
+#: src/prefs_account.c:1016
+msgid "days"
+msgstr "ぱ"
+
+#: src/prefs_account.c:1033
+msgid "(0 days: remove immediately)"
+msgstr "(] 0 h哀澁YR娃)"
+
+#: src/prefs_account.c:1040
+msgid "Download all messages on server"
+msgstr "欝ΜA捷W勁蟹唆lンC"
+
+#: src/prefs_account.c:1046
+msgid "Receive size limit"
+msgstr "欝Μlンjp"
+
+#: src/prefs_account.c:1053 src/prefs_filter_edit.c:622
+msgid "KB"
+msgstr ""
+
+#: src/prefs_account.c:1060
+msgid "Filter messages on receiving"
+msgstr "欝ΜHン俵i羚Lo"
+
+#: src/prefs_account.c:1068
+msgid "Default inbox"
+msgstr "w]墾ンЖ"
+
+#: src/prefs_account.c:1091
+msgid "(Unfiltered messages will be stored in this folder)"
+msgstr "]ゼgLo昆HンN|Qe豎o啗螫踏┐W^"
+
+#: src/prefs_account.c:1107 src/prefs_account.c:1223
+msgid "Authentication method"
+msgstr "{智よk"
+
+#: src/prefs_account.c:1117 src/prefs_account.c:1233 src/prefs_common.c:1195
+msgid "Automatic"
+msgstr "朧"
+
+#: src/prefs_account.c:1125
+msgid "`Get all' checks for new messages on this account"
+msgstr "u魁惜dv廟訪do啀b弦嵯slン"
+
+#: src/prefs_account.c:1173 src/prefs_customheader.c:188
+msgid "Header"
+msgstr "Hン斜Y]w"
+
+#: src/prefs_account.c:1180
+msgid "Add Date header field"
+msgstr "[Jら漢"
+
+#: src/prefs_account.c:1181
+msgid "Generate Message-ID"
+msgstr "横ネlン恥OX"
+
+#: src/prefs_account.c:1188
+msgid "Add user-defined header"
+msgstr "[J魯葎密wq瑳仞Y"
+
+#: src/prefs_account.c:1190 src/prefs_common.c:1712 src/prefs_common.c:1737
+msgid " Edit... "
+msgstr "s粋..."
+
+#: src/prefs_account.c:1200
+msgid "Authentication"
+msgstr "{智"
+
+#: src/prefs_account.c:1208
+msgid "SMTP Authentication (SMTP AUTH)"
+msgstr "SMTP {智"
+
+#: src/prefs_account.c:1283
+msgid ""
+"If you leave these entries empty, the same\n"
+"user ID and password as receiving will be used."
+msgstr "YO皇罟泥奸AN魯留畿肘艮b弦PKXC"
+
+#: src/prefs_account.c:1293
+msgid "Authenticate with POP3 before sending"
+msgstr "eHe圧 POP3 {智"
+
+#: src/prefs_account.c:1349
+msgid "Command output"
+msgstr "RO翠X"
+
+#: src/prefs_account.c:1360 src/prefs_folder_item.c:305
+msgid "Automatically set the following addresses"
+msgstr "b枌剃譴W朧淵[JUCqllンHcG"
+
+#: src/prefs_account.c:1369
+msgid "Cc"
+msgstr "銃セ"
+
+#: src/prefs_account.c:1382
+msgid "Bcc"
+msgstr "Kン銃セ"
+
+#: src/prefs_account.c:1395
+msgid "Reply-To"
+msgstr "^Ha}"
+
+#: src/prefs_account.c:1447
+msgid "Encrypt message by default"
+msgstr "Hン朧淵[K"
+
+#: src/prefs_account.c:1449
+msgid "Sign message by default"
+msgstr "Hン朧憤擬豆戝嘘"
+
+#: src/prefs_account.c:1451
+msgid "Use ASCII-armored format for encryption"
+msgstr "魯 ASCII-armored 网^汽[K"
+
+#: src/prefs_account.c:1453
+msgid "Use clear text signature"
+msgstr "魯立X単W"
+
+#: src/prefs_account.c:1457
+msgid "Sign key"
+msgstr "単街_依"
+
+#: src/prefs_account.c:1465
+msgid "Use default GnuPG key"
+msgstr "魯旅w] GnuPG key"
+
+#: src/prefs_account.c:1474
+msgid "Select key by your email address"
+msgstr "攵擂A差qllンa}随詳 key"
+
+#: src/prefs_account.c:1483
+msgid "Specify key manually"
+msgstr "も以w key"
+
+#: src/prefs_account.c:1499
+msgid "User or key ID:"
+msgstr "魯葎魅N弦 key 挫僥OXG"
+
+#: src/prefs_account.c:1594 src/prefs_account.c:1611 src/prefs_account.c:1627
+#: src/prefs_account.c:1645
+msgid "Don't use SSL"
+msgstr "ぃ魯 SSL"
+
+#: src/prefs_account.c:1597
+msgid "Use SSL for POP3 connection"
+msgstr "POP3 su膝魯 SSL"
+
+#: src/prefs_account.c:1600 src/prefs_account.c:1617 src/prefs_account.c:1651
+msgid "Use STARTTLS command to start SSL session"
+msgstr "ノ STARTTLS RO啀勸 SSL"
+
+#: src/prefs_account.c:1614
+msgid "Use SSL for IMAP4 connection"
+msgstr "IMAP4 su膝魯 SSL"
+
+#: src/prefs_account.c:1620
+msgid "NNTP"
+msgstr ""
+
+#: src/prefs_account.c:1635
+msgid "Use SSL for NNTP connection"
+msgstr "NNTP su膝魯 SSL"
+
+#: src/prefs_account.c:1637
+msgid "Send (SMTP)"
+msgstr "eH]w (SMTP)"
+
+#: src/prefs_account.c:1648
+msgid "Use SSL for SMTP connection"
+msgstr "SMTP su膝魯 SSL"
+
+#: src/prefs_account.c:1659
+msgid "Use non-blocking SSL"
+msgstr "魯 non-blocking SSL"
+
+#: src/prefs_account.c:1671
+msgid "(Turn this off if you have problems in SSL connection)"
+msgstr "]Yz魯 SSL su謬oネ維DA出猪階洪鏘機^"
+
+#: src/prefs_account.c:1758
+msgid "Specify SMTP port"
+msgstr "w SMTP s欝稲"
+
+#: src/prefs_account.c:1764
+msgid "Specify POP3 port"
+msgstr "w POP3 s欝稲"
+
+#: src/prefs_account.c:1770
+msgid "Specify IMAP4 port"
+msgstr "w IMAP4 s欝稲"
+
+#: src/prefs_account.c:1776
+msgid "Specify NNTP port"
+msgstr "w NNTP s欝稲"
+
+#: src/prefs_account.c:1781
+msgid "Specify domain name"
+msgstr "w柵一"
+
+#: src/prefs_account.c:1799
+msgid "IMAP server directory"
+msgstr "IMAP A捷ヘ雀"
+
+#: src/prefs_account.c:1853
+msgid "Put sent messages in"
+msgstr "NweXぇHンs"
+
+#: src/prefs_account.c:1855
+msgid "Put draft messages in"
+msgstr "NHン鷭Zs"
+
+#: src/prefs_account.c:1857
+msgid "Put deleted messages in"
+msgstr "NR娃Hンs"
+
+#: src/prefs_account.c:1917
+msgid "Account name is not entered."
+msgstr "ゼ翠Jb弦W細C"
+
+#: src/prefs_account.c:1921
+msgid "Mail address is not entered."
+msgstr "ゼ翠JqllンHcC"
+
+#: src/prefs_account.c:1926
+msgid "SMTP server is not entered."
+msgstr "ゼ翠JoelンA捷C"
+
+#: src/prefs_account.c:1931
+msgid "User ID is not entered."
+msgstr "ゼ翠J魯葎民b弦C"
+
+#: src/prefs_account.c:1936
+msgid "POP3 server is not entered."
+msgstr "ゼ翠J欝ΜlンA捷C"
+
+#: src/prefs_account.c:1941
+msgid "IMAP4 server is not entered."
+msgstr "ゼ翠J欝ΜlンA捷C"
+
+#: src/prefs_account.c:1946
+msgid "NNTP server is not entered."
+msgstr "ゼ翠JsDA捷C"
+
+#: src/prefs_account.c:2025
+msgid ""
+"It's not recommended to use the old style ASCII-armored\n"
+"mode for encrypted messages. It doesn't comply with the\n"
+"RFC 3156 - MIME Security with OpenPGP."
+msgstr ""
+"`NGぃ慊咳z魯梁側! ASCII-armored 社Α咼[KC]\n"
+"ウP RFC 3156 - MIME Security with OpenPGP ぃ朞eC"
+
+#: src/prefs_actions.c:168
+msgid "Actions configuration"
+msgstr "~魁O]w"
+
+#: src/prefs_actions.c:190
+msgid "Menu name:"
+msgstr "ROヘ雀W細G"
+
+#: src/prefs_actions.c:199
+msgid "Command line:"
+msgstr "印罠OG"
+
+#: src/prefs_actions.c:211
+msgid ""
+"Menu name:\n"
+" Use / in menu name to make submenus.\n"
+"Command line:\n"
+" Begin with:\n"
+" | to send message body or selection to command\n"
+" > to send user provided text to command\n"
+" * to send user provided hidden text to command\n"
+" End with:\n"
+" | to replace message body or selection with command output\n"
+" > to insert command's output without replacing old text\n"
+" & to run command asynchronously\n"
+" Use:\n"
+" %f for message file name\n"
+" %F for the list of the file names of selected messages\n"
+" %p for the selected message part\n"
+" %u for a user provided argument\n"
+" %h for a user provided hidden argument\n"
+" %s for the text selection"
+msgstr ""
+"ヘ雀W細G\n"
+"ノ / 唔蹈椶lヘ雀C\n"
+"印罠OG\n"
+"ノ | }Y蹈椡NHンD悼凌鐓棹困絋re晃唏ROC\n"
+"ノ > }Y蹈椡N魯葎夢僮困絋re晃唏ROC\n"
+"ノ * }Y蹈椡N魯葎夢僮坐唾ゅre晃唏ROC\n"
+"ノ | 飢Ю蹈椡NHンD悼凌鐓棹困絋rm勧Θ袴RO鎖薀XゅrC\n"
+"ノ & 飢Ю蹈椄bI敢印羝唏RO(SΤ翠X)C\n"
+"ノ %f 唔蹈棠Hン裟髭WC\n"
+"ノ %F 唔蹈椥區鍜昆Hン隻WC蹇C\n"
+"ノ %p 唔蹈椥區鍜昆Hン魁ずeCノ %u 唔蹈棣魯葎夢僂О兌董C\n"
+"ノ %h 唔蹈棣魯葎夢僂Я唾委柴C\n"
+"ノ %s 唔蹈椶絋r随詳C"
+
+#: src/prefs_actions.c:256
+msgid " Replace "
+msgstr "m勧"
+
+#: src/prefs_actions.c:269
+msgid " Syntax help "
+msgstr "yk察"
+
+#: src/prefs_actions.c:288
+msgid "Registered actions"
+msgstr "w[JぇOヘ雀"
+
+#: src/prefs_actions.c:418 src/prefs_template.c:307
+msgid "(New)"
+msgstr "]s^"
+
+#: src/prefs_actions.c:464
+msgid "Menu name is not set."
+msgstr "Oヘ雀W細ゼ]w"
+
+#: src/prefs_actions.c:469
+msgid "Colon ':' is not allowed in the menu name."
+msgstr "_弦 ':' ぃ爛X{bヘ雀W細ずC"
+
+#: src/prefs_actions.c:479
+msgid "Menu name is too long."
+msgstr "ヘ雀W細びC"
+
+#: src/prefs_actions.c:488
+msgid "Command line not set."
+msgstr "ゼ]w印罠O"
+
+#: src/prefs_actions.c:493
+msgid "Menu name and command are too long."
+msgstr "ヘ雀W細P印罠OLC"
+
+#: src/prefs_actions.c:498
+#, c-format
+msgid ""
+"The command\n"
+"%s\n"
+"has a syntax error."
+msgstr ""
+"o哽O\n"
+"%s\n"
+"沙yk杉~C"
+
+#: src/prefs_actions.c:559
+msgid "Delete action"
+msgstr "R娃O"
+
+#: src/prefs_actions.c:560
+msgid "Do you really want to delete this action?"
+msgstr "zTwnR娃o哽O芹H"
+
+#: src/prefs_common.c:830
+msgid "Creating common preferences window...\n"
+msgstr "横ネ@覲]w鋸機...\n"
+
+#: src/prefs_common.c:834
+msgid "Common Preferences"
+msgstr "@覲]w"
+
+#: src/prefs_common.c:856
+msgid "Quote"
+msgstr "ま┘"
+
+#: src/prefs_common.c:858
+msgid "Display"
+msgstr "塔ボ"
+
+#: src/prefs_common.c:860
+msgid "Message"
+msgstr "Hン"
+
+#: src/prefs_common.c:868 src/select-keys.c:324
+msgid "Other"
+msgstr "筌L"
+
+#: src/prefs_common.c:909 src/prefs_common.c:1075
+msgid "External program"
+msgstr "~魁{Α"
+
+#: src/prefs_common.c:918
+msgid "Use external program for incorporation"
+msgstr "ノ筌L~魁{Α哘H"
+
+#: src/prefs_common.c:925 src/prefs_common.c:1090
+msgid "Command"
+msgstr "ROC"
+
+#: src/prefs_common.c:939
+msgid "Local spool"
+msgstr "セa spool"
+
+#: src/prefs_common.c:950
+msgid "Incorporate from spool"
+msgstr "q spool oHン"
+
+#: src/prefs_common.c:952
+msgid "Filter on incorporation"
+msgstr "ΜH氷Lo"
+
+#: src/prefs_common.c:960
+msgid "Spool path"
+msgstr "Spool 侯|"
+
+#: src/prefs_common.c:978
+msgid "Auto-check new mail"
+msgstr "朧弊訪dslン"
+
+#: src/prefs_common.c:980
+msgid "every"
+msgstr "C"
+
+#: src/prefs_common.c:992
+msgid "minute(s)"
+msgstr "だ珍"
+
+#: src/prefs_common.c:1001
+msgid "Check new mail on startup"
+msgstr "}衛廟訪dslン"
+
+#: src/prefs_common.c:1003
+msgid "Update all local folders after incorporation"
+msgstr "ΜH瓰鷏s勁蓋螫踏"
+
+#: src/prefs_common.c:1005
+msgid "News"
+msgstr "sD"
+
+#: src/prefs_common.c:1013
+msgid ""
+"Maximum number of articles to download\n"
+"(unlimited if 0 is specified)"
+msgstr ""
+"@ΩU厚ゅ街柴qW\n"
+"(] 0 hぃ郤洞q)"
+
+#: src/prefs_common.c:1083
+msgid "Use external program for sending"
+msgstr "ノ筌L~魁{Α唹eH"
+
+#: src/prefs_common.c:1109
+msgid "Save sent messages to outbox"
+msgstr "NweXぇHンs豈HンЖ"
+
+#: src/prefs_common.c:1115
+msgid "Outgoing codeset"
+msgstr "翠Xr彊"
+
+#: src/prefs_common.c:1130
+msgid "Automatic (Recommended)"
+msgstr "朧平鐓棔]雲陀魯痢^"
+
+#: src/prefs_common.c:1131
+msgid "7bit ascii (US-ASCII)"
+msgstr "7譴 ASCII r彊"
+
+#: src/prefs_common.c:1133
+msgid "Unicode (UTF-8)"
+msgstr ""
+
+#: src/prefs_common.c:1135
+msgid "Western European (ISO-8859-1)"
+msgstr "莠攣yt (ISO-8859-1)"
+
+#: src/prefs_common.c:1136
+msgid "Western European (ISO-8859-15)"
+msgstr "莠攣yt (ISO-8859-15)"
+
+#: src/prefs_common.c:1137
+msgid "Central European (ISO-8859-2)"
+msgstr "い借yt (ISO-8859-2)"
+
+#: src/prefs_common.c:1138
+msgid "Baltic (ISO-8859-13)"
+msgstr "i湛混yt (ISO-8859-13)"
+
+#: src/prefs_common.c:1139
+msgid "Baltic (ISO-8859-4)"
+msgstr "i湛混yt (ISO-8859-4)"
+
+#: src/prefs_common.c:1140
+msgid "Greek (ISO-8859-7)"
+msgstr "特昌y (ISO-8859-7)"
+
+#: src/prefs_common.c:1141
+msgid "Turkish (ISO-8859-9)"
+msgstr "gφ篁y (ISO-8859-9)"
+
+#: src/prefs_common.c:1143
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "患圓匯y (ISO-8859-5)"
+
+#: src/prefs_common.c:1145
+msgid "Cyrillic (KOI8-R)"
+msgstr "患圓匯y (KOI8-R)"
+
+#: src/prefs_common.c:1147
+msgid "Cyrillic (Windows-1251)"
+msgstr "患圓匯y (Windows-1251)"
+
+#: src/prefs_common.c:1148
+msgid "Cyrillic (KOI8-U)"
+msgstr "患圓匯y (KOI8-U)"
+
+#: src/prefs_common.c:1150
+msgid "Japanese (ISO-2022-JP)"
+msgstr "らゅ (ISO-2022-JP)"
+
+#: src/prefs_common.c:1152
+msgid "Japanese (EUC-JP)"
+msgstr "らゅ (EUC-JP)"
+
+#: src/prefs_common.c:1153
+msgid "Japanese (Shift_JIS)"
+msgstr "らゅ (Shift_JIS)"
+
+#: src/prefs_common.c:1155
+msgid "Simplified Chinese (GB2312)"
+msgstr "族悼いゅ (GB2312)"
+
+#: src/prefs_common.c:1156
+msgid "Traditional Chinese (Big5)"
+msgstr "c悼いゅ (Big5)"
+
+#: src/prefs_common.c:1158
+msgid "Traditional Chinese (EUC-TW)"
+msgstr "c悼いゅ (EUC-TW)"
+
+#: src/prefs_common.c:1159
+msgid "Chinese (ISO-2022-CN)"
+msgstr "いゅ (ISO-2022-CN)"
+
+#: src/prefs_common.c:1161
+msgid "Korean (EUC-KR)"
+msgstr "霜ゅ (EUC-KR)"
+
+#: src/prefs_common.c:1162
+msgid "Thai (TIS-620)"
+msgstr "ゅ (TIS-620)"
+
+#: src/prefs_common.c:1163
+msgid "Thai (Windows-874)"
+msgstr "ゅ (Windows-874)"
+
+#: src/prefs_common.c:1173
+msgid ""
+"If `Automatic' is selected, the optimal encoding\n"
+"for the current locale will be used."
+msgstr ""
+"YO随ノu朧平鐓棔vAt歌N愛朧分葦zP_魯粒\n"
+"Xノ沙yt]wC"
+
+#: src/prefs_common.c:1185
+msgid "Transfer encoding"
+msgstr "暁eぇsX"
+
+#: src/prefs_common.c:1208
+msgid ""
+"Specify Content-Transfer-Encoding used when\n"
+"message body contains non-ASCII characters."
+msgstr "出w訣lンD悼ずe]tD ASCII rじ鼻A魯劉斎sX啅念eずeC"
+
+#: src/prefs_common.c:1276
+msgid "Signature separator"
+msgstr "単Wだj嘉弦"
+
+#: src/prefs_common.c:1285
+msgid "Insert automatically"
+msgstr "朧淵[J単W"
+
+#: src/prefs_common.c:1295
+msgid "Automatically launch the external editor"
+msgstr "朧仏Is~魁s粋捷"
+
+#: src/prefs_common.c:1305
+msgid "Undo level"
+msgstr "_讙雀"
+
+#: src/prefs_common.c:1325
+msgid "Wrap messages at"
+msgstr "C羈巳h"
+
+#: src/prefs_common.c:1337
+msgid "characters"
+msgstr "哘rじ"
+
+#: src/prefs_common.c:1347
+msgid "Wrap quotation"
+msgstr "ч罧錨礇棆展"
+
+#: src/prefs_common.c:1353
+msgid "Wrap on input"
+msgstr "ち確翠JL困絋r"
+
+#: src/prefs_common.c:1355
+msgid "Wrap before sending"
+msgstr "Heぇe朧払薤"
+
+#: src/prefs_common.c:1365
+msgid "Automatically select account for replies"
+msgstr "^H髭b枌剃譴W朧淵[JUCqllンHcG"
+
+#: src/prefs_common.c:1367
+msgid "Quote message when replying"
+msgstr "^H匹泪劉譴"
+
+#: src/prefs_common.c:1369
+msgid "Reply button invokes mailing list reply"
+msgstr "的 Mailing List Hン弼Uu^対vs蹈椄^対宜 Mailing list"
+
+#: src/prefs_common.c:1415
+msgid "Reply format"
+msgstr "^対网"
+
+#: src/prefs_common.c:1430 src/prefs_common.c:1469
+msgid "Quotation mark"
+msgstr "ま┘嘉弦"
+
+#: src/prefs_common.c:1454
+msgid "Forward format"
+msgstr "退H网"
+
+#: src/prefs_common.c:1498
+msgid " Description of symbols "
+msgstr "S躄展好N蹣嵯Nq"
+
+#: src/prefs_common.c:1539
+msgid "Font"
+msgstr "r"
+
+#: src/prefs_common.c:1571
+msgid "Translate header name (such as `From:', `Subject:')"
+msgstr "N斜YW細遜超X"
+
+#: src/prefs_common.c:1574
+msgid "Display unread number next to folder name"
+msgstr "YΤゼ的HンAN塔ボb瑚踏└W細甅"
+
+#: src/prefs_common.c:1583
+msgid "Abbreviate newsgroups longer than"
+msgstr "sDs箇Yg廚j"
+
+#: src/prefs_common.c:1598
+msgid "letters"
+msgstr "哘rダ"
+
+#: src/prefs_common.c:1604
+msgid "Summary View"
+msgstr "HンC"
+
+#: src/prefs_common.c:1613
+msgid "Display recipient on `From' column if sender is yourself"
+msgstr "YoHHOA曚vANbHンC蹣恨啖修づ礇椄HH"
+
+#: src/prefs_common.c:1615
+msgid "Expand threads"
+msgstr "朧噴i}Hン螟C"
+
+#: src/prefs_common.c:1623 src/prefs_common.c:2415 src/prefs_common.c:2453
+msgid "Date format"
+msgstr "ら漢网"
+
+#: src/prefs_common.c:1644
+msgid " Set display item of summary... "
+msgstr "]wHンC躾鏘..."
+
+#: src/prefs_common.c:1707
+msgid "Enable coloration of message"
+msgstr "Hンい困洶セPWs飢塔ボ怒"
+
+#: src/prefs_common.c:1722
+msgid ""
+"Display multi-byte alphabet and numeric as\n"
+"ASCII character (Japanese only)"
+msgstr "N劉^ゅP柴rHb率單礇 (uAノらゅ)"
+
+#: src/prefs_common.c:1728
+msgid "Display header pane above message view"
+msgstr "b塔ボHン剃Wよ[J斜Y瑚T"
+
+#: src/prefs_common.c:1735
+msgid "Display short headers on message view"
+msgstr "bHンw蹄い塔ボHン斜Y"
+
+#: src/prefs_common.c:1757
+msgid "Line space"
+msgstr "羔ゞZ"
+
+#: src/prefs_common.c:1771 src/prefs_common.c:1811
+msgid "pixel(s)"
+msgstr "抗 (pixels)"
+
+#: src/prefs_common.c:1776
+msgid "Leave space on head"
+msgstr "C羈湊e迂鼎@"
+
+#: src/prefs_common.c:1778
+msgid "Scroll"
+msgstr "渦b"
+
+#: src/prefs_common.c:1785
+msgid "Half page"
+msgstr "@Ωb"
+
+#: src/prefs_common.c:1791
+msgid "Smooth scroll"
+msgstr "キ憩渦以"
+
+#: src/prefs_common.c:1797
+msgid "Step"
+msgstr "CΩ渦以"
+
+#: src/prefs_common.c:1818
+msgid "Resize attached large images to fit in the window"
+msgstr "春障[v抗jp"
+
+#: src/prefs_common.c:1863
+msgid "Automatically check signatures"
+msgstr "朧弊訪d柴戝嘘"
+
+#: src/prefs_common.c:1866
+msgid "Show signature check result in a popup window"
+msgstr "N柴戝嘘浩訪d飢G塔ボbt@鋸機"
+
+#: src/prefs_common.c:1869
+msgid "Store passphrase in memory temporarily"
+msgstr "NKXy屡髭sbO笑悼い"
+
+#: src/prefs_common.c:1884
+msgid "Expired after"
+msgstr "漢G"
+
+#: src/prefs_common.c:1897
+msgid "minute(s) "
+msgstr "だ珍"
+
+#: src/prefs_common.c:1910
+msgid ""
+"(Setting to '0' will store the passphrase\n"
+" for the whole session)"
+msgstr "]Y]w '0' h蹈棣SΤ漢^"
+
+#: src/prefs_common.c:1920
+msgid "Grab input while entering a passphrase"
+msgstr "翠J passphrase 彦讎翠J"
+
+#: src/prefs_common.c:1925
+msgid "Display warning on startup if GnuPG doesn't work"
+msgstr "Y GnuPG LkB@Ahb衛以謬oX諜i"
+
+#: src/prefs_common.c:1976
+msgid "Always open messages in summary when selected"
+msgstr "bHンC躾鐓棠Hン俵}衛HンC"
+
+#: src/prefs_common.c:1980
+msgid "Open first unread message when entering a folder"
+msgstr "iJ瑚踏┏肘襲妓豌弔@淵偲HンW"
+
+#: src/prefs_common.c:1984
+msgid "Only mark message as read when opened in new window"
+msgstr "ub}衛sHン票丱棯哀偲"
+
+#: src/prefs_common.c:1988
+msgid "Go to inbox after receiving new mail"
+msgstr "欝ΜЧslン瓷襲偽iJΜンЖい"
+
+#: src/prefs_common.c:1996
+msgid "Execute immediately when moving or deleting messages"
+msgstr "仮以律R娃Hン疋澁Y印"
+
+#: src/prefs_common.c:2003
+msgid ""
+"(Messages will be marked until execution\n"
+" if this is turned off)"
+msgstr "]Y洪鏘誼階Ahゲ況Uu印罅v~|印羃尚仏律R娃^"
+
+#: src/prefs_common.c:2009
+msgid "Receive dialog"
+msgstr "欝Μi弭鏝棆"
+
+#: src/prefs_common.c:2019
+msgid "Show receive dialog"
+msgstr "塔ボ欝ΜHン唆i弭鏝棆"
+
+#: src/prefs_common.c:2029
+msgid "Always"
+msgstr "@濺礇"
+
+#: src/prefs_common.c:2030
+msgid "Only on manual receiving"
+msgstr "ubも以Μlン錨礇"
+
+#: src/prefs_common.c:2032
+msgid "Never"
+msgstr "ぃ塔ボ"
+
+#: src/prefs_common.c:2037
+msgid "Don't popup error dialog on receive error"
+msgstr "欝Μ杉~匹n}衛杉~鋸機C"
+
+#: src/prefs_common.c:2040
+msgid "Close receive dialog when finished"
+msgstr "ЧΘ秒階欝ΜHン唆i弭鏝棆"
+
+#: src/prefs_common.c:2046
+msgid " Set key bindings... "
+msgstr "]w呪槍"
+
+#: src/prefs_common.c:2102
+#, c-format
+msgid "External commands (%s will be replaced with file name / URI)"
+msgstr "~魁O]%s N|Qm勧Θ隻W URI^"
+
+#: src/prefs_common.c:2111
+msgid "Web browser"
+msgstr "s蹄捷"
+
+#: src/prefs_common.c:2175
+msgid "Add address to destination when double-clicked"
+msgstr "b讌}誰いAiQノ濁聖襲輝N袴qllン[JΜHHい"
+
+#: src/prefs_common.c:2177
+msgid "On exit"
+msgstr "託}]w"
+
+#: src/prefs_common.c:2185
+msgid "Confirm on exit"
+msgstr "託}表T{"
+
+#: src/prefs_common.c:2192
+msgid "Empty trash on exit"
+msgstr "託}媛M擢R娃唆lン"
+
+#: src/prefs_common.c:2194
+msgid "Ask before emptying"
+msgstr "M娃表T{"
+
+#: src/prefs_common.c:2198
+msgid "Warn if there are queued messages"
+msgstr "託}畢YΤ|ゼeXぇHンYoX諜i"
+
+#: src/prefs_common.c:2204
+msgid "Socket I/O timeout:"
+msgstr "Socket I/O 汽櫪俵 G"
+
+#: src/prefs_common.c:2217
+msgid "second(s)"
+msgstr ""
+
+#: src/prefs_common.c:2391
+msgid "the full abbreviated weekday name"
+msgstr "g@BgGB..."
+
+#: src/prefs_common.c:2392
+msgid "the full weekday name"
+msgstr "P漢@BP漢GB..."
+
+#: src/prefs_common.c:2393
+msgid "the abbreviated month name"
+msgstr "1るB2るB..."
+
+#: src/prefs_common.c:2394
+msgid "the full month name"
+msgstr "@るBGるB..."
+
+#: src/prefs_common.c:2395
+msgid "the preferred date and time for the current locale"
+msgstr "Ч障墾茲犬藉岨P俵 ]セa俵 ^"
+
+#: src/prefs_common.c:2396
+msgid "the century number (year/100)"
+msgstr "@ (~/100)"
+
+#: src/prefs_common.c:2397
+msgid "the day of the month as a decimal number"
+msgstr "さぱOX弦 (H柴r蹈)"
+
+#: src/prefs_common.c:2398
+msgid "the hour as a decimal number using a 24-hour clock"
+msgstr "{bXI珍 (ぼ|膝遏AH柴r蹈)"
+
+#: src/prefs_common.c:2399
+msgid "the hour as a decimal number using a 12-hour clock"
+msgstr "{bXI珍 (QG膝遏AH柴r蹈)"
+
+#: src/prefs_common.c:2400
+msgid "the day of the year as a decimal number"
+msgstr "さぱOさ~魂調Xぱ (H柴r蹈)"
+
+#: src/prefs_common.c:2401
+msgid "the month as a decimal number"
+msgstr "{bOXる (H柴r蹈)"
+
+#: src/prefs_common.c:2402
+msgid "the minute as a decimal number"
+msgstr "{bOXだ (H柴r蹈)"
+
+#: src/prefs_common.c:2403
+msgid "either AM or PM"
+msgstr "Wと里Uと"
+
+#: src/prefs_common.c:2404
+msgid "the second as a decimal number"
+msgstr "{bOX (H柴r蹈)"
+
+#: src/prefs_common.c:2405
+msgid "the day of the week as a decimal number"
+msgstr "{bO@g魂調Xぱ (H柴r蹈)"
+
+#: src/prefs_common.c:2406
+msgid "the preferred date for the current locale"
+msgstr "Ч障墾茲犬藉 (セa俵)"
+
+#: src/prefs_common.c:2407
+msgid "the last two digits of a year"
+msgstr "茲研~昆瓱皃貅豆r"
+
+#: src/prefs_common.c:2408
+msgid "the year as a decimal number"
+msgstr "茲研~ (H柴r蹈)"
+
+#: src/prefs_common.c:2409
+msgid "the time zone or name or abbreviation"
+msgstr "桧"
+
+#: src/prefs_common.c:2430
+msgid "Specifier"
+msgstr "S躄展"
+
+#: src/prefs_common.c:2431
+msgid "Description"
+msgstr "yz"
+
+#: src/prefs_common.c:2470
+msgid "Example"
+msgstr "d"
+
+#: src/prefs_common.c:2556
+msgid "Set message colors"
+msgstr "]wC"
+
+#: src/prefs_common.c:2564
+msgid "Colors"
+msgstr "C"
+
+#: src/prefs_common.c:2598
+msgid "Quoted Text - First Level"
+msgstr "ま┘ずe - 可@h"
+
+#: src/prefs_common.c:2604
+msgid "Quoted Text - Second Level"
+msgstr "ま┘ずe - 可Gh"
+
+#: src/prefs_common.c:2610
+msgid "Quoted Text - Third Level"
+msgstr "ま┘ずe - 可Th"
+
+#: src/prefs_common.c:2616
+msgid "URI link"
+msgstr "Ws飢"
+
+#: src/prefs_common.c:2623
+msgid "Recycle quote colors"
+msgstr "ThHWま┘h銃魯掠w挫C"
+
+#: src/prefs_common.c:2682
+msgid "Pick color for quotation level 1"
+msgstr "随詳可@hま┘挫C"
+
+#: src/prefs_common.c:2685
+msgid "Pick color for quotation level 2"
+msgstr "随詳可Ghま┘挫C"
+
+#: src/prefs_common.c:2688
+msgid "Pick color for quotation level 3"
+msgstr "随詳可Thま┘挫C"
+
+#: src/prefs_common.c:2691
+msgid "Pick color for URI"
+msgstr "随詳Ws飢挫C"
+
+#: src/prefs_common.c:2828
+msgid "Description of symbols"
+msgstr "S躄展好N蹣嵯Nq"
+
+#: src/prefs_common.c:2884
+msgid ""
+"Date\n"
+"From\n"
+"Full Name of Sender\n"
+"First Name of Sender\n"
+"Initial of Sender\n"
+"Subject\n"
+"To\n"
+"Cc\n"
+"Newsgroups\n"
+"Message-ID"
+msgstr ""
+"ら漢\n"
+"啖\n"
+"oHHW\n"
+"oHH墾W\n"
+"oHHYg\n"
+"DD\n"
+"ΜHH\n"
+"銃セ\n"
+"sDs箇\n"
+"Hン恥OX"
+
+#: src/prefs_common.c:2897
+msgid "If x is set, displays expr"
+msgstr "Y x w]wh塔ボ`W蹈椄"
+
+#: src/prefs_common.c:2901
+msgid ""
+"Message body\n"
+"Quoted message body\n"
+"Message body without signature\n"
+"Quoted message body without signature\n"
+"Literal %"
+msgstr ""
+"Hンずe\n"
+"ま┘\n"
+"Hンずe]ぃt単W^\n"
+"ま┘]ぃt単W^\n"
+"% 嘉弦"
+
+#: src/prefs_common.c:2909
+msgid ""
+"Literal backslash\n"
+"Literal question mark\n"
+"Literal opening curly brace\n"
+"Literal closing curly brace"
+msgstr ""
+"は益u\n"
+"維弦\n"
+"オjA\n"
+"kjA"
+
+#: src/prefs_common.c:2946
+msgid "Font selection"
+msgstr "随詳r"
+
+#: src/prefs_common.c:3011
+msgid "Key bindings"
+msgstr "呪槍]w"
+
+#: src/prefs_common.c:3025
+msgid ""
+"Select the preset of key bindings.\n"
+"You can also modify each menu's shortcuts by pressing\n"
+"any key(s) when placing the mouse pointer on the item."
+msgstr ""
+"出随詳n魯葎瑳槍C\n"
+"z]iH鵲鍜C咼愎瑳槍Azu旨nN憩巷斜LhA\n"
+"谷Uヴ鸛筵YiC"
+
+#: src/prefs_common.c:3037 src/prefs_common.c:3307
+msgid "Default"
+msgstr "w]"
+
+#: src/prefs_common.c:3040 src/prefs_common.c:3313
+msgid "Old Sylpheed"
+msgstr "詑]w"
+
+#: src/prefs_customheader.c:163
+msgid "Custom header setting"
+msgstr "魯葎巳曰w斜Y"
+
+#: src/prefs_customheader.c:261
+msgid "Custom headers"
+msgstr "斜Y"
+
+#: src/prefs_customheader.c:483 src/prefs_display_header.c:527
+msgid "Header name is not set."
+msgstr "斜Yゼ]w"
+
+#: src/prefs_customheader.c:541
+msgid "Delete header"
+msgstr "R娃瑚踏"
+
+#: src/prefs_customheader.c:542
+msgid "Do you really want to delete this header?"
+msgstr "zTwnR娃o教Wh芹H"
+
+#: src/prefs_display_header.c:175
+msgid "Creating display header setting window...\n"
+msgstr "横ネ斜Y鋸機...\n"
+
+#: src/prefs_display_header.c:198
+msgid "Display header setting"
+msgstr "塔ボ斜Y]w"
+
+#: src/prefs_display_header.c:222
+msgid "Header name"
+msgstr "Hン斜Y]w"
+
+#: src/prefs_display_header.c:254
+msgid "Displayed Headers"
+msgstr "w塔ボ斜Y"
+
+#: src/prefs_display_header.c:312
+msgid "Hidden headers"
+msgstr "ゼw斜Y"
+
+#: src/prefs_display_header.c:342
+msgid "Show all unspecified headers"
+msgstr "塔ボ勁灰自w瑳仞Y"
+
+#: src/prefs_display_header.c:367
+msgid "Reading configuration for displaying headers...\n"
+msgstr "的斜Y塔ボ些]wい...\n"
+
+#: src/prefs_display_header.c:405
+msgid "Writing configuration for displaying headers...\n"
+msgstr "gJLoHン些]wい...\n"
+
+#: src/prefs_display_header.c:537
+msgid "This header is already in the list."
+msgstr "o喙仞YwsbC"
+
+#: src/prefs_filter.c:191
+msgid "Filter setting"
+msgstr "HンLo]w"
+
+#: src/prefs_filter.c:214
+msgid "Enabled"
+msgstr "w}衛"
+
+#: src/prefs_filter.c:239
+msgid "Top"
+msgstr "豎産"
+
+#: src/prefs_filter.c:261
+msgid "Bottom"
+msgstr "讒該"
+
+#: src/prefs_filter.c:289
+msgid "Copy"
+msgstr "銃s"
+
+#: src/prefs_filter.c:731
+msgid "Delete rule"
+msgstr "R娃Wh"
+
+#: src/prefs_filter.c:732
+msgid "Do you really want to delete this rule?"
+msgstr "zTwnR娃o教Wh芹H"
+
+#: src/prefs_filter_edit.c:337
+msgid "Filter rule"
+msgstr "HンLoWh"
+
+#: src/prefs_filter_edit.c:371
+msgid "If any of the following condition matches"
+msgstr "UCヴ@汚ン嘉X"
+
+#: src/prefs_filter_edit.c:373
+msgid "If all of the following conditions match"
+msgstr "UC勁咳ンА嘉X"
+
+#: src/prefs_filter_edit.c:394
+msgid "Perform the following actions:"
+msgstr "印罎UC以@G"
+
+#: src/prefs_filter_edit.c:562
+msgid "To or Cc"
+msgstr "To Cc"
+
+#: src/prefs_filter_edit.c:563
+msgid "Any header"
+msgstr "ヴ@喙仞Y"
+
+#: src/prefs_filter_edit.c:564
+msgid "Edit header..."
+msgstr "s粋Hン斜Y..."
+
+#: src/prefs_filter_edit.c:567
+msgid "Message body"
+msgstr "Hンずe"
+
+#: src/prefs_filter_edit.c:568
+msgid "Result of command"
+msgstr "印羌鴎G"
+
+#: src/prefs_filter_edit.c:570
+msgid "Age"
+msgstr "筆"
+
+#: src/prefs_filter_edit.c:582
+msgid "contains"
+msgstr "]t"
+
+#: src/prefs_filter_edit.c:584
+msgid "doesn't contain"
+msgstr "ぃ]t"
+
+#: src/prefs_filter_edit.c:586
+msgid "is"
+msgstr "O"
+
+#: src/prefs_filter_edit.c:588
+msgid "is not"
+msgstr "ぃO"
+
+#: src/prefs_filter_edit.c:590
+msgid "match to regex"
+msgstr "嘉X`W蹈椄"
+
+#: src/prefs_filter_edit.c:592
+msgid "doesn't match to regex"
+msgstr "ぃ嘉X`W蹈椄"
+
+#: src/prefs_filter_edit.c:600
+msgid "is larger than"
+msgstr "j"
+
+#: src/prefs_filter_edit.c:601
+msgid "is smaller than"
+msgstr "p"
+
+#: src/prefs_filter_edit.c:608
+msgid "is longer than"
+msgstr ""
+
+#: src/prefs_filter_edit.c:609
+msgid "is shorter than"
+msgstr "u"
+
+#: src/prefs_filter_edit.c:710
+msgid "Move to"
+msgstr "仮以"
+
+#: src/prefs_filter_edit.c:711
+msgid "Copy to"
+msgstr "銃s"
+
+#: src/prefs_filter_edit.c:712
+msgid "Don't receive"
+msgstr "攀官畿巷Hン"
+
+#: src/prefs_filter_edit.c:713
+msgid "Delete from server"
+msgstr "昿A捷WR娃"
+
+#: src/prefs_filter_edit.c:716
+msgid "Set mark"
+msgstr "]w斜O"
+
+#: src/prefs_filter_edit.c:717
+msgid "Set color"
+msgstr "]wC"
+
+#: src/prefs_filter_edit.c:718
+msgid "Mark as read"
+msgstr "斜OΘw的"
+
+#: src/prefs_filter_edit.c:723
+msgid "Forward as attachment"
+msgstr "NHン訣Θ[隻退H"
+
+#: src/prefs_filter_edit.c:724
+msgid "Redirect"
+msgstr "Hン症V"
+
+#: src/prefs_filter_edit.c:728
+msgid "Execute command"
+msgstr "印罘RO"
+
+#: src/prefs_filter_edit.c:731
+msgid "Stop rule evaluation"
+msgstr "葦ゎ惜dWh"
+
+#: src/prefs_filter_edit.c:737 src/prefs_filter_edit.c:1064
+msgid "folder:"
+msgstr "瑚踏─G"
+
+#: src/prefs_filter_edit.c:1104
+msgid "address:"
+msgstr "讌}G"
+
+#: src/prefs_filter_edit.c:1510
+msgid "Edit header list"
+msgstr "s粋Hン斜YM恰"
+
+#: src/prefs_filter_edit.c:1535
+msgid "Headers"
+msgstr "Hン斜Y"
+
+#: src/prefs_filter_edit.c:1546
+msgid "Header:"
+msgstr "Hン斜YG"
+
+#: src/prefs_filter_edit.c:1663
+msgid "Rule name is not specified."
+msgstr "SΤwWhW細"
+
+#: src/prefs_filter_edit.c:1752 src/prefs_filter_edit.c:1833
+#: src/prefs_filter_edit.c:1841
+msgid "Command is not specified."
+msgstr "ゼ]w印罠O"
+
+#: src/prefs_filter_edit.c:1788
+msgid "Invalid condition exists."
+msgstr "ΤぃXk艮ン"
+
+#: src/prefs_filter_edit.c:1810 src/prefs_filter_edit.c:1818
+msgid "Destination folder is not specified."
+msgstr "ヘ左螫踏┘竺]w"
+
+#: src/prefs_filter_edit.c:1872
+msgid "Invalid action exists."
+msgstr "ΤぃXk紺罠O"
+
+#: src/prefs_filter_edit.c:1881
+msgid "Condition not exist."
+msgstr "ゼ]w汚ン"
+
+#: src/prefs_filter_edit.c:1883
+msgid "Action not exist."
+msgstr "w昆Oぃsb"
+
+#: src/prefs_folder_item.c:115
+msgid "Folder properties"
+msgstr "瑚踏紬"
+
+#: src/prefs_folder_item.c:141
+msgid "General"
+msgstr "@"
+
+#: src/prefs_folder_item.c:216
+msgid "Normal"
+msgstr "タ`"
+
+#: src/prefs_folder_item.c:229
+msgid "Don't display [...] or (...) at the beginning of subject in summary"
+msgstr "bHンC蹐いn塔ボHン斜De迂困がA弦 [] 里pA弦 ()"
+
+#: src/prefs_folder_item.c:231
+msgid "Delete [...] or (...) at the beginning of subject on reply"
+msgstr "^対彦R娃Hン斜De迂困がA弦 [] 里pA弦 ()"
+
+#: src/prefs_folder_item.c:303
+msgid "Apply to subfolders"
+msgstr "棲ノ譴l瑚踏"
+
+#: src/prefs_folder_item.c:328
+msgid "use also on reply"
+msgstr "^対Hン匹]魯"
+
+#: src/prefs_folder_item.c:352
+msgid "Reply-To:"
+msgstr "^H讌}G"
+
+#: src/prefs_summary_column.c:67
+msgid "Mark"
+msgstr "斜O"
+
+#: src/prefs_summary_column.c:69
+msgid "Attachment"
+msgstr "["
+
+#: src/prefs_summary_column.c:70 src/summaryview.c:383
+msgid "Subject"
+msgstr "DD"
+
+#: src/prefs_summary_column.c:71 src/summaryview.c:384
+msgid "From"
+msgstr "啖(From)"
+
+#: src/prefs_summary_column.c:72 src/summaryview.c:385
+msgid "Date"
+msgstr "ら漢"
+
+#: src/prefs_summary_column.c:74
+msgid "Number"
+msgstr "s弦"
+
+#: src/prefs_summary_column.c:166
+msgid "Creating summary column setting window...\n"
+msgstr ""
+
+#: src/prefs_summary_column.c:174
+msgid "Summary display item setting"
+msgstr "HンC躑汽愕]w"
+
+#: src/prefs_summary_column.c:191
+msgid ""
+"Select items to be displayed on the summary view. You can modify\n"
+"the order by using the Up / Down button, or dragging the items."
+msgstr ""
+"随詳唆汽愀|X{bHンC蹐ぁC\n"
+"ziHノVW↑VU哥鵲鏘凶如A葎襲汽侶胴讀桶o膿鏘機C"
+
+#: src/prefs_summary_column.c:218
+msgid "Available items"
+msgstr "i魯里Ф汽"
+
+#: src/prefs_summary_column.c:236
+msgid " -> "
+msgstr " @ "
+
+#: src/prefs_summary_column.c:240
+msgid " <- "
+msgstr " * "
+
+#: src/prefs_summary_column.c:261
+msgid "Displayed items"
+msgstr "w塔ボ教ヘ"
+
+#: src/prefs_summary_column.c:302
+msgid " Revert to default "
+msgstr "匝豺w]"
+
+#: src/prefs_template.c:157
+msgid "Template name"
+msgstr "Hン舎OW細"
+
+#: src/prefs_template.c:215
+msgid "Register"
+msgstr "[J"
+
+#: src/prefs_template.c:221
+msgid " Substitute "
+msgstr "汗勧"
+
+#: src/prefs_template.c:234
+msgid " Symbols "
+msgstr " 嘉弦 "
+
+#: src/prefs_template.c:248
+msgid "Registered templates"
+msgstr "w雀ぇHン舎O嘉弦"
+
+#: src/prefs_template.c:268
+msgid "Templates"
+msgstr "Hン舎O]w"
+
+#: src/prefs_template.c:378
+msgid "Template"
+msgstr "Hン舎O"
+
+#: src/prefs_template.c:447
+msgid "Template format error."
+msgstr "Hン舎O网/~C"
+
+#: src/prefs_template.c:523
+msgid "Delete template"
+msgstr "R娃Hン舎O"
+
+#: src/prefs_template.c:524
+msgid "Do you really want to delete this template?"
+msgstr "zTwnR娃o哽Hン舎O芹H"
+
+#: src/procmime.c:742
+msgid "procmime_get_text_content(): Code conversion failed.\n"
+msgstr "procmime_get_text_content(): 退Xア英C\n"
+
+#: src/procmsg.c:515
+msgid "can't open mark file\n"
+msgstr "Lk}衛斜ボ裟筆 \n"
+
+#: src/procmsg.c:910
+#, c-format
+msgid "can't fetch message %d\n"
+msgstr "LkъHン %d\n"
+
+#: src/procmsg.c:1207
+#, c-format
+msgid "Sending queued message %d failed.\n"
+msgstr "屡s瑚踏┐お昆Hン]s弦G%d^Heア英C\n"
+
+#: src/procmsg.c:1334
+#, c-format
+msgid "Print command line is invalid: `%s'\n"
+msgstr "CLRO杉~G`%s'\n"
+
+#: src/progressdialog.c:53
+msgid "Status"
+msgstr "A"
+
+#: src/progressdialog.c:55
+msgid "Creating progress dialog...\n"
+msgstr ""
+
+#: src/recv.c:114
+msgid "error occurred while retrieving data.\n"
+msgstr "ъ瑚闘謬oネ杉~C\n"
+
+#: src/recv.c:156 src/recv.c:198 src/recv.c:214
+msgid "Can't write to file.\n"
+msgstr "LkgJ隻廖C\n"
+
+#: src/rfc2015.c:131 src/rfc2015.c:166 src/sigstatus.c:219
+msgid "Oops: Signature not verified"
+msgstr "諜iG単街ゼQ惜d"
+
+#: src/rfc2015.c:134 src/rfc2015.c:169 src/sigstatus.c:222
+msgid "No signature found"
+msgstr "ゼo{単街"
+
+#: src/rfc2015.c:137 src/sigstatus.c:225 src/textview.c:510
+msgid "Good signature"
+msgstr "単街惜dタT"
+
+#: src/rfc2015.c:140 src/sigstatus.c:228 src/textview.c:512
+msgid "BAD signature"
+msgstr "単街惜d杉~"
+
+#: src/rfc2015.c:143 src/rfc2015.c:178 src/sigstatus.c:231
+msgid "No public key to verify the signature"
+msgstr "SΤそ}_依兩訪d単街"
+
+#: src/rfc2015.c:146 src/rfc2015.c:181 src/sigstatus.c:234
+msgid "Error verifying the signature"
+msgstr "惜d単街謬oネ杉~"
+
+#: src/rfc2015.c:149 src/rfc2015.c:184
+msgid "Different results for signatures"
+msgstr "単街惜d飢G杉~"
+
+#: src/rfc2015.c:152 src/rfc2015.c:187
+msgid "Error: Unknown status"
+msgstr "杉~Gぃ昏A"
+
+#: src/rfc2015.c:172
+#, c-format
+msgid "Good signature from \"%s\""
+msgstr "哘 %s 挫嘘浩訪dタT"
+
+#: src/rfc2015.c:175
+#, c-format
+msgid "BAD signature from \"%s\""
+msgstr "哘 \"%s\" 挫嘘浩訪d杉~"
+
+#: src/rfc2015.c:207
+msgid "Cannot find user ID for this key."
+msgstr "Lkbo key いт讎魯葎魅N弦"
+
+#: src/rfc2015.c:218
+#, c-format
+msgid " aka \"%s\"\n"
+msgstr " S細 \"%s\"\n"
+
+#: src/rfc2015.c:246
+#, c-format
+msgid "Signature made at %s\n"
+msgstr "横ネ単街 %s\n"
+
+#: src/rfc2015.c:255
+#, c-format
+msgid "Key fingerprint: %s\n"
+msgstr "_依 fingerprint: %s\n"
+
+#: src/select-keys.c:102
+#, c-format
+msgid "Please select key for `%s'"
+msgstr "出随詳 %s 再_依"
+
+#: src/select-keys.c:105
+#, c-format
+msgid "Collecting info for `%s' ... %c"
+msgstr "Μ彊 %s 左螳Tい ... %c"
+
+#: src/select-keys.c:271
+msgid "Select Keys"
+msgstr "随詳_依"
+
+#: src/select-keys.c:298
+msgid "Key ID"
+msgstr "_依恥OX"
+
+#: src/select-keys.c:301
+msgid "Val"
+msgstr ""
+
+#: src/select-keys.c:444
+msgid "Add key"
+msgstr "sW_依"
+
+#: src/select-keys.c:445
+msgid "Enter another user or key ID:"
+msgstr "出翠J筌L恨魯葎密瞭_依恥OX"
+
+#: src/send_message.c:177
+msgid "Queued message header is broken.\n"
+msgstr "屡s瑚踏┐お昆Hン斜Y杉~C\n"
+
+#: src/send_message.c:384
+msgid "Connecting"
+msgstr "suい"
+
+#: src/send_message.c:388
+#, c-format
+msgid "Connecting to SMTP server: %s ..."
+msgstr "su SMTP A捷 %s..."
+
+#: src/send_message.c:450
+msgid "Sending HELO..."
+msgstr "eX HELO 斜Y..."
+
+#: src/send_message.c:451 src/send_message.c:456 src/send_message.c:461
+msgid "Authenticating"
+msgstr "{智"
+
+#: src/send_message.c:452 src/send_message.c:457
+msgid "Sending message..."
+msgstr "eXHンい..."
+
+#: src/send_message.c:455
+msgid "Sending EHLO..."
+msgstr "eX EHLO 斜Y..."
+
+#: src/send_message.c:464
+msgid "Sending MAIL FROM..."
+msgstr "eX MAIL FROM 斜Y..."
+
+#: src/send_message.c:465 src/send_message.c:469 src/send_message.c:474
+msgid "Sending"
+msgstr "eHい"
+
+#: src/send_message.c:468
+msgid "Sending RCPT TO..."
+msgstr "eX RCPT TO 斜Y..."
+
+#: src/send_message.c:473
+msgid "Sending DATA..."
+msgstr "eXHン瑚 DATA..."
+
+#: src/send_message.c:477
+msgid "Quitting..."
+msgstr "託}"
+
+#: src/send_message.c:505
+#, c-format
+msgid "Sending message (%d / %d bytes)"
+msgstr "eXslン (%d / %d bytes)"
+
+#: src/send_message.c:533
+msgid "Sending message"
+msgstr "eXHン"
+
+#: src/send_message.c:576 src/send_message.c:596
+msgid "Error occurred while sending the message."
+msgstr "eH謬oネ杉~C"
+
+#: src/send_message.c:579
+#, c-format
+msgid ""
+"Error occurred while sending the message:\n"
+"%s"
+msgstr ""
+"eH謬oネ杉~G\n"
+"%s"
+
+#: src/setup.c:43
+msgid "Mailbox setting"
+msgstr "Hc]w"
+
+#: src/setup.c:44
+msgid ""
+"First, you have to set the location of mailbox.\n"
+"You can use existing mailbox in MH format\n"
+"if you have the one.\n"
+"If you're not sure, just select OK."
+msgstr ""
+"坤Azゲ況随詳zs飩Hン墾豸mC\n"
+"pGzwgΤF@ MH 网!昆HcAziH\n"
+"襲季魯痢C\n"
+"pGzぃTwΤSΤA出襲徽UuTwvC"
+
+#: src/sigstatus.c:129
+msgid "Checking signature"
+msgstr "惜d柴戝嘘"
+
+#: src/sigstatus.c:196
+#, c-format
+msgid "%s%s%s from \"%s\""
+msgstr ""
+
+#: src/smtp.c:151
+msgid "SMTP AUTH not available\n"
+msgstr "ぃや刊 SMTP {智\n"
+
+#: src/smtp.c:416 src/smtp.c:465
+msgid "bad SMTP response\n"
+msgstr "SMTP ^対杉~\n"
+
+#: src/smtp.c:436 src/smtp.c:454 src/smtp.c:550
+msgid "error occurred on SMTP session\n"
+msgstr "SMTP {智謬oネ杉~\n"
+
+#: src/sourcewindow.c:63
+msgid "Creating source window...\n"
+msgstr "横ネ啖週機い...\n"
+
+#: src/sourcewindow.c:67
+msgid "Source of the message"
+msgstr "Hン讒lX"
+
+#: src/sourcewindow.c:132
+#, c-format
+msgid "Displaying the source of %s ...\n"
+msgstr "塔ボ %s 啖修...\n"
+
+#: src/sourcewindow.c:134
+#, c-format
+msgid "%s - Source"
+msgstr "%s - 讒lX"
+
+#: src/ssl.c:44
+msgid "SSLv23 not available\n"
+msgstr "ぃや刊 SSLv23\n"
+
+#: src/ssl.c:46
+msgid "SSLv23 available\n"
+msgstr "や刊 SSLv23\n"
+
+#: src/ssl.c:51
+msgid "TLSv1 not available\n"
+msgstr "ぃや刊 TLSv1\n"
+
+#: src/ssl.c:53
+msgid "TLSv1 available\n"
+msgstr "や刊 TLSv1\n"
+
+#: src/ssl.c:81 src/ssl.c:88
+msgid "SSL method not available\n"
+msgstr "ぃや刊 SSL\n"
+
+#: src/ssl.c:94
+msgid "Unknown SSL method *PROGRAM BUG*\n"
+msgstr "ゼ妾 SSL 賞@杉~\n"
+
+#: src/ssl.c:100
+msgid "Error creating ssl context\n"
+msgstr "SSL 暁翠oネ杉~\n"
+
+#: src/ssl.c:106
+#, c-format
+msgid "SSL connect failed (%s)\n"
+msgstr "SSL suア英 (%s)C\n"
+
+#: src/ssl.c:113
+#, c-format
+msgid "SSL connection using %s\n"
+msgstr "魯 %s i SSL su\n"
+
+#: src/ssl.c:121
+msgid "Server certificate:\n"
+msgstr "A捷{智G\n"
+
+#: src/ssl.c:124
+#, c-format
+msgid " Subject: %s\n"
+msgstr " DΞ: %s\n"
+
+#: src/ssl.c:129
+#, c-format
+msgid " Issuer: %s\n"
+msgstr " oHH: %s\n"
+
+#: src/summary_search.c:106
+msgid "Search messages"
+msgstr "MтHン(_S)"
+
+#: src/summary_search.c:129
+msgid "Match any of the following"
+msgstr "UCヴ@汚ン嘉X"
+
+#: src/summary_search.c:130
+msgid "Match all of the following"
+msgstr "UC勁咳ンА嘉X"
+
+#: src/summary_search.c:189
+msgid "Body:"
+msgstr "セゅ:"
+
+#: src/summary_search.c:213
+msgid "Select all matched"
+msgstr "朧平鐓椥勁皆筥讓唆lン"
+
+#: src/summary_search.c:324
+msgid "Beginning of list reached; continue from end?"
+msgstr "jMw豎産檗Cnq飢Ю~挺jM芹H"
+
+#: src/summary_search.c:326
+msgid "End of list reached; continue from beginning?"
+msgstr "jMw豕翁澄Cnq}Y~挺jM芹H"
+
+#: src/summaryview.c:341
+msgid "/Repl_y to"
+msgstr "/^対宜(_y)"
+
+#: src/summaryview.c:342
+msgid "/Repl_y to/_all"
+msgstr "/^対宜(_y)/勁界ンH(_a)"
+
+#: src/summaryview.c:343
+msgid "/Repl_y to/_sender"
+msgstr "/^対宜(_y)/讌@(_s)"
+
+#: src/summaryview.c:344
+msgid "/Repl_y to/mailing _list"
+msgstr "/^対宜(_y)/Mailing list(_l)"
+
+#: src/summaryview.c:351
+msgid "/M_ove..."
+msgstr "/仮以...(_o)"
+
+#: src/summaryview.c:352
+msgid "/_Copy..."
+msgstr "/銃s...(_C)"
+
+#: src/summaryview.c:355
+msgid "/_Mark"
+msgstr "/斜O(_M)"
+
+#: src/summaryview.c:356
+msgid "/_Mark/_Mark"
+msgstr "/斜O(_M)/斜O(_M)"
+
+#: src/summaryview.c:357
+msgid "/_Mark/_Unmark"
+msgstr "/斜O(_M)/h娃斜O(_U)"
+
+#: src/summaryview.c:358
+msgid "/_Mark/---"
+msgstr "/斜O(_M)/---"
+
+#: src/summaryview.c:359
+msgid "/_Mark/Mark as unr_ead"
+msgstr "/斜O(_M)/斜OΘゼ的(_e)"
+
+#: src/summaryview.c:360
+msgid "/_Mark/Mark as rea_d"
+msgstr "/斜O(_M)/斜OΘw的(_d)"
+
+#: src/summaryview.c:362
+msgid "/_Mark/Mark all _read"
+msgstr "/斜O(_M)/斜O勁開HンΘw的(_r)"
+
+#: src/summaryview.c:363
+msgid "/Color la_bel"
+msgstr "/HC皸擬舒O(_b)"
+
+#: src/summaryview.c:365
+msgid "/Re-_edit"
+msgstr "/ss粋(_e)"
+
+#: src/summaryview.c:367
+msgid "/Add sender to address boo_k"
+msgstr "NHHH[J讌}誰(_k)"
+
+#: src/summaryview.c:373
+msgid "/_View/_Source"
+msgstr "/塔ボ(_V)/[櫟Hン讒lX(_s)"
+
+#: src/summaryview.c:374
+msgid "/_View/All _header"
+msgstr "/塔ボ(_V)/塔ボ勁蟹瑳仞Y(_h)"
+
+#: src/summaryview.c:376
+msgid "/_Print..."
+msgstr "/CL...(_P)"
+
+#: src/summaryview.c:380
+msgid "M"
+msgstr ""
+
+#: src/summaryview.c:381
+msgid "U"
+msgstr ""
+
+#: src/summaryview.c:387
+msgid "No."
+msgstr ""
+
+#: src/summaryview.c:409
+msgid "Creating summary view...\n"
+msgstr ""
+
+#: src/summaryview.c:585
+msgid "Process mark"
+msgstr "Hン斜O"
+
+#: src/summaryview.c:586
+msgid "Some marks are left. Process it?"
+msgstr "Y寧HンwQ斜OCn~挺芹H"
+
+#: src/summaryview.c:632
+#, c-format
+msgid "Scanning folder (%s)..."
+msgstr "噂y瑚踏(%s)..."
+
+#: src/summaryview.c:921 src/summaryview.c:945
+msgid "No more unread messages"
+msgstr "SΤ筌Lゼ的Hン"
+
+#: src/summaryview.c:922
+msgid "No unread message found. Search from the end?"
+msgstr "SΤт譽偲HンCnqЮ魁~挺jM芹H"
+
+#: src/summaryview.c:931
+msgid "No unread messages."
+msgstr "SΤゼ的Hン"
+
+#: src/summaryview.c:946
+msgid "No unread message found. Go to next folder?"
+msgstr "SΤゼ的HンCn譴U@啗螫踏╋棔H"
+
+#: src/summaryview.c:948 src/summaryview.c:1004
+msgid "Search again"
+msgstr "AΩjM"
+
+#: src/summaryview.c:977 src/summaryview.c:1001
+msgid "No more new messages"
+msgstr "SΤ筌LsHン"
+
+#: src/summaryview.c:978
+msgid "No new message found. Search from the end?"
+msgstr "SΤт豬sHンCnqЮ魁~挺jM芹H"
+
+#: src/summaryview.c:987
+msgid "No new messages."
+msgstr "SΤsHン"
+
+#: src/summaryview.c:1002
+msgid "No new message found. Go to next folder?"
+msgstr "SΤsHンCn譴U@啗螫踏╋棔H"
+
+#: src/summaryview.c:1033 src/summaryview.c:1058
+msgid "No more marked messages"
+msgstr "SΤ筌Lw斜OHン"
+
+#: src/summaryview.c:1034
+msgid "No marked message found. Search from the end?"
+msgstr "SΤт譴w斜OHンCnqЮ魁~挺jM芹H"
+
+#: src/summaryview.c:1043 src/summaryview.c:1068
+msgid "No marked messages."
+msgstr "SΤw斜OHン"
+
+#: src/summaryview.c:1059
+msgid "No marked message found. Search from the beginning?"
+msgstr "SΤт譴w斜OHンCnq}Y~挺jM芹H"
+
+#: src/summaryview.c:1083 src/summaryview.c:1108
+msgid "No more labeled messages"
+msgstr "SΤw斜OC發ЙHン"
+
+#: src/summaryview.c:1084
+msgid "No labeled message found. Search from the end?"
+msgstr "SΤт譴w斜OC發ЙHンCnqЮ魁~挺jM芹H"
+
+#: src/summaryview.c:1093 src/summaryview.c:1118
+msgid "No labeled messages."
+msgstr "SΤw斜OC發ЙHン"
+
+#: src/summaryview.c:1109
+msgid "No labeled message found. Search from the beginning?"
+msgstr "SΤт譴w斜OC發ЙHンCnq}Y~挺jM芹H"
+
+#: src/summaryview.c:1318 src/summaryview.c:1320
+msgid "Attracting messages by subject..."
+msgstr "i}Hンい..."
+
+#: src/summaryview.c:1462
+#, c-format
+msgid "%d deleted"
+msgstr "%d wR娃"
+
+#: src/summaryview.c:1466
+#, c-format
+msgid "%s%d moved"
+msgstr "%s%d w仮以"
+
+#: src/summaryview.c:1467 src/summaryview.c:1474
+msgid ", "
+msgstr ""
+
+#: src/summaryview.c:1472
+#, c-format
+msgid "%s%d copied"
+msgstr "%s%d w銃s"
+
+#: src/summaryview.c:1489
+msgid " item(s) selected"
+msgstr "覆w随詳"
+
+#: src/summaryview.c:1499
+#, c-format
+msgid "%d new, %d unread, %d total (%s)"
+msgstr "%d 淵偲A%d 覆w的A@ %d (%s)"
+
+#: src/summaryview.c:1505
+#, c-format
+msgid "%d new, %d unread, %d total"
+msgstr "%d 淵偲A%d 覆w的A@ %d "
+
+#: src/summaryview.c:1655 src/summaryview.c:1656
+msgid "Sorting summary..."
+msgstr "Hン影任..."
+
+#: src/summaryview.c:1725
+msgid "\tSetting summary from message data..."
+msgstr "\t横ネHンC蹐..."
+
+#: src/summaryview.c:1727
+msgid "Setting summary from message data..."
+msgstr "横ネHンC蹐..."
+
+#: src/summaryview.c:1814
+#, c-format
+msgid "Writing summary cache (%s)..."
+msgstr "gJе(%s)..."
+
+#: src/summaryview.c:1871
+msgid "(No Date)"
+msgstr "(SΤら漢)"
+
+#: src/summaryview.c:2225
+#, c-format
+msgid "Message %d is marked\n"
+msgstr "Hン %d w斜O\n"
+
+#: src/summaryview.c:2260
+#, c-format
+msgid "Message %d is marked as being read\n"
+msgstr "Hン %d w斜OΘw的\n"
+
+#: src/summaryview.c:2325
+#, c-format
+msgid "Message %d is marked as unread\n"
+msgstr "Hン %d w斜OΘゼ的\n"
+
+#: src/summaryview.c:2372
+#, c-format
+msgid "Message %s/%d is set to delete\n"
+msgstr "Hン %s/%d w斜OR娃\n"
+
+#: src/summaryview.c:2392
+msgid "Delete message(s)"
+msgstr "R娃Hン"
+
+#: src/summaryview.c:2393
+msgid "Do you really want to delete message(s) from the trash?"
+msgstr "zTwnqR娃唆lン瑚踏┐ぇR娃o鮒Hン芹H"
+
+#: src/summaryview.c:2434 src/summaryview.c:2436
+msgid "Deleting duplicated messages..."
+msgstr "R娃対昆Hン..."
+
+#: src/summaryview.c:2485
+#, c-format
+msgid "Message %s/%d is unmarked\n"
+msgstr "Hン %s/%d w娃斜O\n"
+
+#: src/summaryview.c:2527
+#, c-format
+msgid "Message %d is set to move to %s\n"
+msgstr "Hン %d w]w仮以 %s\n"
+
+#: src/summaryview.c:2542
+msgid "Destination is same as current folder."
+msgstr "ヘ斜瑚踏┿P啖集螫踏━昿P"
+
+#: src/summaryview.c:2592
+#, c-format
+msgid "Message %d is set to copy to %s\n"
+msgstr "Hン %d w]w銃s %s\n"
+
+#: src/summaryview.c:2607
+msgid "Destination for copy is same as current folder."
+msgstr "HンLk銃s讀P@啗螫踏┐"
+
+#: src/summaryview.c:2656
+msgid "Selecting all messages..."
+msgstr "随詳勁蟹昆Hン..."
+
+#: src/summaryview.c:2787
+msgid "Error occurred while processing messages."
+msgstr "Bzlン謬oネ杉~C"
+
+#: src/summaryview.c:3032 src/summaryview.c:3033
+msgid "Building threads..."
+msgstr "横ネHン螟Cい..."
+
+#: src/summaryview.c:3113 src/summaryview.c:3114
+msgid "Unthreading..."
+msgstr "狐娃Hン螟Cい..."
+
+#: src/summaryview.c:3151
+msgid "Unthreading for execution..."
+msgstr "狐娃Hン螟Cい..."
+
+#: src/summaryview.c:3241
+msgid "filtering..."
+msgstr "Loい..."
+
+#: src/summaryview.c:3242
+msgid "Filtering..."
+msgstr "Loい..."
+
+#: src/summaryview.c:3282
+#, c-format
+msgid "%d message(s) have been filtered."
+msgstr "wLo %d 鮒Hン"
+
+#: src/template.c:169
+#, c-format
+msgid "file %s already exists\n"
+msgstr "隻 %s wsbC\n"
+
+#: src/textview.c:193
+msgid "Creating text view...\n"
+msgstr "横ネゅr鋸機...\n"
+
+#: src/textview.c:576
+msgid "This message can't be displayed.\n"
+msgstr "Lk塔ボlンC\n"
+
+#: src/textview.c:593
+msgid "To save this part, pop up the context menu with "
+msgstr "nxso喟筆廖A出憩巷k槍脱bヘ雀い"
+
+#: src/textview.c:594
+msgid "right click and select `Save as...', "
+msgstr "随詳ytss隻z...A葎蓑OU `y' 槍C"
+
+#: src/textview.c:595
+msgid ""
+"or press `y' key.\n"
+"\n"
+msgstr ""
+"葎蓑OU `y' 槍C\n"
+"\n"
+
+#: src/textview.c:597
+msgid "To display this part as a text message, select "
+msgstr "nHゅr社Α[欒o喟筆廖A出随詳"
+
+#: src/textview.c:598
+msgid ""
+"`Display as text', or press `t' key.\n"
+"\n"
+msgstr ""
+"yH造絋re{zA葎蓑OU `t' 槍C\n"
+"\n"
+
+#: src/textview.c:600
+msgid "To open this part with external program, select "
+msgstr "nH筌L{Α}衛o喟筆廖A出随詳"
+
+#: src/textview.c:601
+msgid "`Open' or `Open with...', "
+msgstr "y}衛z痢yHO叉{Α}衛zA"
+
+#: src/textview.c:602
+msgid "or double-click, or click the center button, "
+msgstr "]iH濁聖袴隻廖A略O憩巷い槍A"
+
+#: src/textview.c:603
+msgid "or press `l' key."
+msgstr "略O `l' 槍C"
+
+#: src/textview.c:622
+msgid "This signature has not been checked yet.\n"
+msgstr "o喙豆戝嘘工|ゼgL惜d\n"
+
+#: src/textview.c:623
+msgid "To check it, pop up the context menu with\n"
+msgstr "n惜d柴戝嘘后A出U憩巷k槍脱bヘ雀い\n"
+
+#: src/textview.c:624
+msgid "right click and select `Check signature'.\n"
+msgstr "随詳u惜d柴戝嘘后vC\n"
+
+#: src/textview.c:1661
+#, c-format
+msgid ""
+"The real URL (%s) is different from\n"
+"the apparent URL (%s).\n"
+"Open it anyway?"
+msgstr ""
+"濠孜 URL (%s) P塔ボ URL (%s) ぃPC\n"
+"Twn}衛芹H"
+
+#: src/utils.c:181
+#, c-format
+msgid "%dB"
+msgstr ""
+
+#: src/utils.c:183
+#, c-format
+msgid "%.1fKB"
+msgstr ""
+
+#: src/utils.c:185
+#, c-format
+msgid "%.2fMB"
+msgstr ""
+
+#: src/utils.c:187
+#, c-format
+msgid "%.2fGB"
+msgstr ""
+
+#: src/utils.c:2172 src/utils.c:2264
+#, c-format
+msgid "writing to %s failed.\n"
+msgstr "gJ %s 紺払@ア英C\n"
+
+#~ msgid "Can't open file %s\n"
+#~ msgstr "Lk}衛隻 %s\n"
+
+#~ msgid "POP3 (normal)"
+#~ msgstr "POP3 (@襦^"
+
+#~ msgid "POP3 (APOP auth)"
+#~ msgstr "POP3 (APOP {智^"
+
+#~ msgid "/Remove _mailbox"
+#~ msgstr "/R娃Hc (_m)"
+
+#~ msgid "/Remove _IMAP4 account"
+#~ msgstr "/R娃 IMAP4 A捷 (_I)"
+
+#~ msgid "/Remove _news account"
+#~ msgstr "/仮娃sDs箇b弦(_n)"
+
+#~ msgid "/_Message/_Send"
+#~ msgstr "/Hン(_M)/eX(_S)"
+
+#~ msgid "/_Message/Si_gn"
+#~ msgstr "/Hン(_M)/柴戝嘘(_g)"
+
+#~ msgid "no messages in local mailbox.\n"
+#~ msgstr "HcいSΤlンC\n"
+
+#~ msgid "Spool directory"
+#~ msgstr "Spool ヘ雀"
+
+#~ msgid "Action:"
+#~ msgstr "O"
+
+#~ msgid "Select..."
+#~ msgstr "随詳..."
+
+#~ msgid "Condition"
+#~ msgstr "p"
+
+#~ msgid "Keyword"
+#~ msgstr "猪槍r"
+
+#~ msgid "Destination"
+#~ msgstr "飄..."
+
+#~ msgid "Use regex"
+#~ msgstr "魯離審Wy┘蹈棹k"
+
+#~ msgid "Registered rules"
+#~ msgstr "w雀ぇLoWh"
+
+#~ msgid "(none)"
+#~ msgstr "(L)"
+
+#~ msgid "Entry not saved"
+#~ msgstr "Whゼxs"
+
+#~ msgid "The entry was not saved. Close anyway?"
+#~ msgstr "o汚Wh|ゼxsCTwn猪階芹H"
+
+#~ msgid "Open URI command line is invalid: `%s'"
+#~ msgstr "}衛 URL 懇RO杉~G`%s'"
+
+#~ msgid "Cache data is corrupted\n"
+#~ msgstr "е瑚瞳l郡\n"
+
+#~ msgid "/Create f_ilter rule"
+#~ msgstr "/横ネHンLoWh(_i)"
+
+#~ msgid "/Create f_ilter rule/_Automatically"
+#~ msgstr "/横ネHンLoWh(_i)/朧焚ネ(_A)"
+
+#~ msgid "/Create f_ilter rule/by _From"
+#~ msgstr "/横ネHンLoWh(_i)/岬啖(_F)"
+
+#~ msgid "/Create f_ilter rule/by _To"
+#~ msgstr "/横ネHンLoWh(_i)/巳HH(_T)"
+
+#~ msgid "/Create f_ilter rule/by _Subject"
+#~ msgstr "/横ネHンLoWh(_i)/娘价D(_S)"
+
+#~ msgid "Queueing"
+#~ msgstr "ei屡s瑚踏..."
+
+#~ msgid ""
+#~ "Error occurred while sending the message.\n"
+#~ "Put this message into queue folder?"
+#~ msgstr ""
+#~ "eH謬oネ杉~C\n"
+#~ "nрHン餠i屡s瑚踏┐ざ棔H"
+
+#~ msgid "Queue messages that fail to send"
+#~ msgstr "NHeア英昆Hンe貅筈s瑚踏"
+
+#~ msgid "/E_xecute"
+#~ msgstr "/印(_x)"
+
+#~ msgid "/Select _all"
+#~ msgstr "/随(_a)"
+
+#~ msgid "/Select t_hread"
+#~ msgstr "/随螟C(_h)"
+
+#~ msgid "can't set group: %s\n"
+#~ msgstr "Lk]wsDs箇G%s\n"
+
+#~ msgid "a message won't be received\n"
+#~ msgstr "ΤHンゼΜ譟C\n"
+
+#~ msgid "/_Message/Recei_ve/Get new ma_il"
+#~ msgstr "/Hン(_M)/欝Μslン(_i)"
+
+#~ msgid "\tNo cache file\n"
+#~ msgstr "SΤе隻廖C\n"
+
+#~ msgid "\tReading summary cache..."
+#~ msgstr "的HンеC..."
+
+#~ msgid "Mark file not found.\n"
+#~ msgstr "тぃ貅舒O裟筆廖C\n"
+
+#~ msgid "Can't open mark file with append mode.\n"
+#~ msgstr "Lk廡鐚舒O裟筆廖C\n"
+
+#~ msgid "Can't open mark file with write mode.\n"
+#~ msgstr "Lk}衛斜O裟筆廖C\n"
+
+#~ msgid "can't create root folder %s\n"
+#~ msgstr "Lk横ネ攜螫踏 %s\n"
+
+#~ msgid ""
+#~ "empty folder\n"
+#~ "\n"
+#~ msgstr ""
+#~ "的左螫踏\n"
+#~ "\n"
+
+#~ msgid "Only if a window is active"
+#~ msgstr "ube敢塔ボ"
+
+#~ msgid ""
+#~ "All previous settings for each folders will be lost.\n"
+#~ "Continue?"
+#~ msgstr ""
+#~ "勁貝譽左螫踏┳]w械|アC\n"
+#~ "Twn~挺H"
+
+#~ msgid "window position: x = %d, y = %d\n"
+#~ msgstr "鋸機豸mGx = %d, y = %d\n"
+
+#~ msgid "Setting widgets..."
+#~ msgstr "]w鋸機..."
+
+#~ msgid "Moving message %s%c%d to %s ...\n"
+#~ msgstr "仮以Hン %s%c%d %s ...\n"
+
+#~ msgid "\tMarking the messages..."
+#~ msgstr "NHン[W斜Oい..."
+
+#~ msgid "\t%d new message(s)\n"
+#~ msgstr "%d 雰slンC\n"
+
+#~ msgid "can't select mailbox %s\n"
+#~ msgstr "Lk随詳Hc %s\n"
+
+#~ msgid "getting message %d...\n"
+#~ msgstr "的Hン %d...\n"
+
+#~ msgid "Deleting cached messages %u - %u ... "
+#~ msgstr "\tR娃еlン %u - %u..."
+
+#~ msgid "Deleting all cached messages... "
+#~ msgstr "\tR娃勁皆屹lン..."
+
+#~ msgid "Counting total number of messages...\n"
+#~ msgstr "oslン瑳洞qい\n"
+
+#~ msgid "Could not get message file."
+#~ msgstr "Lk的Hン隻廖C"
+
+#~ msgid "Open message when cursor keys are pressed on summary"
+#~ msgstr "憩巷I随HンC蹐お昆Hン肘襲偽}衛Hン"
+
+#~ msgid ""
+#~ "Error occurred while sending mail:\n"
+#~ "%s"
+#~ msgstr "Bzlン謬oネ杉~C"
+
+#~ msgid "Some errors occurred while sending queued messages."
+#~ msgstr "eX屡sHン謬oネ杉~C"
+
+#~ msgid "No message part selected."
+#~ msgstr "ゼ随ヴ鵯HンずeC"
+
+#~ msgid "Predicate"
+#~ msgstr "]t/ぃ]t"
+
+#~ msgid "Creating actions setting window...\n"
+#~ msgstr "横ネ~魁O]w鋸機...\n"
+
+#~ msgid "Actions setting"
+#~ msgstr "~魁O]w"
+
+#~ msgid "Reading actions configurations...\n"
+#~ msgstr "的~魁O]wい...\n"
+
+#~ msgid "Action command error\n"
+#~ msgstr "印罎ЙOΤ杉~\n"
+
+#~ msgid "Socket error\n"
+#~ msgstr "Socket Τ杉~\n"
+
+#~ msgid "Account not found. Using current account...\n"
+#~ msgstr "тぃ豈b弦ANэノ{Τb弦...\n"
+
+#~ msgid "Account not found.\n"
+#~ msgstr "тぃ豈b弦C\n"
+
+#~ msgid "Can't execute external command: %s\n"
+#~ msgstr "Lk印罐~魁OG%s\n"
+
+#~ msgid "SMTP AUTH failed\n"
+#~ msgstr "SMTP {智ア英\n"
+
+#~ msgid "Error occurred while sending QUIT\n"
+#~ msgstr "eX QUIT TМ謬oネ杉~\n"
+
+#~ msgid "Can't connect to SMTP server: %s:%d\n"
+#~ msgstr "Lksu SMTP A捷 %s:%d\n"
+
+#~ msgid "SSL connection failed"
+#~ msgstr "SSL suア英C"
+
+#~ msgid "Error occurred while connecting to %s:%d\n"
+#~ msgstr "su %s:%d 謬oネ杉~\n"
+
+#~ msgid "Error occurred while sending HELO\n"
+#~ msgstr "eX HELO TМ謬oネ杉~\n"
+
+#~ msgid "Error occurred while sending STARTTLS\n"
+#~ msgstr "eX STARTTLS RO謬oネ杉~\n"
+
+#~ msgid "Error occurred while sending EHLO\n"
+#~ msgstr "eX EHLO TМ謬oネ杉~\n"
+
+#~ msgid "Signature file"
+#~ msgstr "単W隻"
+
+#~ msgid "Creating custom header setting window...\n"
+#~ msgstr "横ネ斜Y鋸機...\n"
+
+#~ msgid "Reading custom header configuration...\n"
+#~ msgstr "的LoHン些]wい...\n"
+
+#~ msgid "Writing custom header configuration...\n"
+#~ msgstr "gJLoHン些]wい...\n"
+
+#~ msgid "Reading filter configuration...\n"
+#~ msgstr "的LoHン些]wい...\n"
+
+#~ msgid "Writing filter configuration...\n"
+#~ msgstr "gJLoHン些]wい...\n"
+
+#~ msgid "\tSearching uncached messages... "
+#~ msgstr "Mтぃbеず昆Hン..."
+
+#~ msgid "%d uncached message(s) found.\n"
+#~ msgstr "т %d 福C\n"
+
+#~ msgid "\tSorting uncached messages in numerical order... "
+#~ msgstr "Hs弦影任..."
+
+#~ msgid "forced charset: %s\n"
+#~ msgstr "j遖魯 %s sXC\n"
+
+#~ msgid "Enable horizontal scroll bar"
+#~ msgstr "塔ボ凜渦b"
+
+#~ msgid "Display unread messages with bold font"
+#~ msgstr "魯硫陛薤r塔ボゼ的Hン"
+
+#~ msgid "Done"
+#~ msgstr "ЧΘ"
+
+#~ msgid "Checking all folders for new messages..."
+#~ msgstr "/惜dslン(_C)"
+
+#~ msgid "/_File/_Rescan folder tree"
+#~ msgstr "/隻(_F)/噂y瑚踏(_U)"
+
+#~ msgid "move_file(): file %s already exists."
+#~ msgstr "瑚踏 `%s' wsbC"
+
+#~ msgid "%s:%d loading template from %s\n"
+#~ msgstr "%s:%d q %s 的Hン舎O\n"
+
+#~ msgid "%s:%d reading templates dir %s\n"
+#~ msgstr "%s:%d 的Hン舎Oヘ雀 %s\n"
+
+#~ msgid "%s:%d found file %s\n"
+#~ msgstr "Lk}衛隻 %s\n"
+
+#~ msgid "%s:%d %s is not an ordinary file\n"
+#~ msgstr "%s:%d %s ぃO讒l隻\n"
+
+#~ msgid "%s:%d writing template \"%s\" to %s\n"
+#~ msgstr "%s:%d gJHン舎O %s %s\n"
+
+#~ msgid "Default Sign Key"
+#~ msgstr "w]瑳豆戝嘘"
+
+#~ msgid "saving sent message...\n"
+#~ msgstr "Hン各i罎, 出y... \n"
+
+#~ msgid "can't save message\n"
+#~ msgstr "LkxsHン各\n"
+
+#~ msgid "Creating actions dialog\n"
+#~ msgstr "横ネO刻顧悗... \n"
+
+#~ msgid "Close window"
+#~ msgstr "猪階鋸機"
+
+#~ msgid "Creating log window...\n"
+#~ msgstr "横ネ雀鋸機...\n"
+
+#~ msgid "Deleting cached articles 1 - %d ... "
+#~ msgstr "\tR娃еゅ街 1 - %d..."
+
+#~ msgid "\tDeleting all cached articles... "
+#~ msgstr "\tR娃勁皆屹い困絣..."
+
+#~ msgid "can't allocate memory\n"
+#~ msgstr "LktmO笑悼 \n"
+
+#~ msgid "/_View/Toggle summary _view"
+#~ msgstr "/塔ボ(_V)/ち勧HンC軼礇(_v)"
+
+#~ msgid "%s already exists."
+#~ msgstr "%s wsbC"
+
+#~ msgid "Really delete folder `%s'?"
+#~ msgstr "zTwnR娃 %s 瑚踏─H"
+
+#~ msgid "Error occurred while %s\n"
+#~ msgstr "o蹐絣庚謬oネ杉~\n"
+
+#~ msgid "/_Tool"
+#~ msgstr "/u(_T)"
+
+#~ msgid "Outbox"
+#~ msgstr "HンЖ"
+
+#~ msgid "Skipping message %d\n"
+#~ msgstr "R娃lン %d...\n"
+
+#~ msgid "Creating header window...\n"
+#~ msgstr "横ネ斜Y鋸機...\n"
+
+#~ msgid "Displaying the header of %s ...\n"
+#~ msgstr "iボ %s 瑳仞Y...\n"
+
+#~ msgid "%s - All header"
+#~ msgstr "%s - 勁蟹瑳仞Y"
+
+#~ msgid "/_View/U_nthread view"
+#~ msgstr "/塔ボ(_V)/狐}Hン螟C塔ボ(_n)"
+
+#~ msgid " Apply "
+#~ msgstr "Mノ"
+
+#~ msgid "External Web browser (%s will be replaced with URI)"
+#~ msgstr "w]座s蹄捷O]%s N|Qm勧Θ URL^"
+
+#~ msgid "Printing (%s will be replaced with file name)"
+#~ msgstr "CLO]%s N|Qm勧Θ隻W^"
+
+#~ msgid "Go to %s\n"
+#~ msgstr " %s\n"
+
+#~ msgid "Operator"
+#~ msgstr "B財じ"
+
+#~ msgid "/_Message/_To"
+#~ msgstr "/Hン(_M)/ΜンH(_To)"
+
+#~ msgid "/_Message/_Cc"
+#~ msgstr "/Hン(_M)/案セ(_Cc)"
+
+#~ msgid "/_Message/_Bcc"
+#~ msgstr "/Hン(_M)/Kン案セ(_Bcc)"
+
+#~ msgid "/_Message/_Attach"
+#~ msgstr "/Hン(_M)/[隻(_A)"
+
+#~ msgid "/_Tool/Show _ruler"
+#~ msgstr "/u(_T)/塔ボへW(_r)"
+
+#~ msgid "/_Update folder tree"
+#~ msgstr "/鷏s瑚踏(_U)"
+
+#~ msgid "/_Edit/_Search folder"
+#~ msgstr "/s粋(_E)/b瑚踏┐ごMт(_S)"
+
+#~ msgid "Search folder"
+#~ msgstr "jM瑚踏"
+
+#~ msgid "Wrap current paragraph"
+#~ msgstr "Nヘe根q絹ч"
+
+#~ msgid "/_Message/Add sender to address boo_k"
+#~ msgstr "NHHH[J讌}誰(_k)"
+
+#~ msgid "/_Summary"
+#~ msgstr "/HンC(_S)"
+
+#~ msgid "/_Summary/E_xecute"
+#~ msgstr "/HンC(_S)/印(_x)"
+
+#~ msgid "/_Summary/_Update"
+#~ msgstr "/HンC(_S)/鷏s(_U)"
+
+#~ msgid "/_Summary/---"
+#~ msgstr "/HンC(_S)/---"
+
+#~ msgid "/_Summary/Go _to"
+#~ msgstr "/HンC(_S)/e...(_t)"
+
+#~ msgid "/_Summary/Go _to/---"
+#~ msgstr "/HンC(_S)/e...(_t)/---"
+
+#~ msgid "/_Summary/_Sort"
+#~ msgstr "/HンC(_S)/影(_S)"
+
+#~ msgid "/_Summary/_Sort/---"
+#~ msgstr "/HンC(_S)/影(_S)/---"
+
+#~ msgid "/_Summary/_Thread view"
+#~ msgstr "/HンC(_S)/螳_P@螟C昆Hン(_T)"
+
+#~ msgid "/_Summary/Unt_hread view"
+#~ msgstr "/HンC(_S)/狐}P@螟C昆Hン(_h)"
+
+#~ msgid "The newsgroup `%s' already exists."
+#~ msgstr "sDs箇 `%s' wsbC"
+
+#~ msgid "Input subscribing newsgroup:"
+#~ msgstr "出翠Jnwq嵯sDs箇W細G"
+
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "Begin forwarded message:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "退HずeG\n"
+
+#~ msgid "Usually used"
+#~ msgstr "w]b弦"
+
+#~ msgid "Program path"
+#~ msgstr "{Α侯|"
+
+#~ msgid "Quotation format:"
+#~ msgstr "まノ譴絎紐湊e吋[WG"
+
+#~ msgid "Updating all folders..."
+#~ msgstr "鷏s勁蟹左螫踏..."
+
+#~ msgid "Set display item"
+#~ msgstr "HンC軼礇楹]w"
+
+#~ msgid "Preferences for each account"
+#~ msgstr "C啀b弦些潸n]w"
+
+#~ msgid "each"
+#~ msgstr "C"
+
+#~ msgid "/View so_urce"
+#~ msgstr "/塔ボHン讒lX(_u)"
+
+#~ msgid "/Show all _header"
+#~ msgstr "/塔ボ勁蟹瑳仞Y(_h)"
+
+#~ msgid "Current folder is Trash."
+#~ msgstr "z{bbwR娃Hン瑚踏┐ぁC"
+
+#~ msgid "Reading addressbook file..."
+#~ msgstr "的讌}誰隻廚, 出y..."
+
+#~ msgid "%s doesn't exist.\n"
+#~ msgstr "%s ぃsbC\n"
+
+#~ msgid "Exporting addressbook to file..."
+#~ msgstr "N讌}誰翠X楡筆廚, 出y..."
+
+#~ msgid "failed to write addressbook data.\n"
+#~ msgstr "讌}誰瑚銅gJア英C\n"
+
+#~ msgid "The name already exists."
+#~ msgstr "o哘Wrwgsb"
+
+#~ msgid "New group"
+#~ msgstr "ss箇"
+
+#~ msgid "Input the name of new group:"
+#~ msgstr "出翠Js左s箇W細G"
+
+#~ msgid "Input the new name of group:"
+#~ msgstr "出翠Js左s箇W細G"
+
+#~ msgid "The address <%s> has already been registered."
+#~ msgstr "讌} `%s' wsbC"
+
+#~ msgid "/_Message/Show all _header"
+#~ msgstr "/Hン(_M)/塔ボ勁蟹昆Hン斜Y(_h)"
+
+#~ msgid "Sending queued message failed."
+#~ msgstr "屡sHンHeア英C"
+
+#~ msgid "Current account: %s"
+#~ msgstr "ヘeb弦G%s"
+
+#~ msgid "Authentication for %s on %s failed"
+#~ msgstr "%s b %s W沙{智ア英"
+
+#~ msgid ""
+#~ "Emulate the behavior of mouse operation of\n"
+#~ "Emacs-based mailer"
+#~ msgstr "社誓 Emacs-based mailer 嵯胴罨"
+
+#~ msgid "Authorizing..."
+#~ msgstr "餌vい"
+
+#~ msgid "done."
+#~ msgstr "ЧΘC"
+
+#~ msgid "can't get the next uid of folder: %s\n"
+#~ msgstr "Lk随詳瑚踏─G%s\n"
+
+#~ msgid "/Remove _news server"
+#~ msgstr "/仮娃sDA捷(_n)"
+
+#~ msgid "Delete IMAP4 server"
+#~ msgstr "R娃 IMAP4 A捷"
+
+#~ msgid "Really delete news server `%s'?"
+#~ msgstr "zTwnR娃sDA捷 `%s' 芹H"
+
+#~ msgid "/_View/_Toolbar/_Non-display"
+#~ msgstr "/塔ボ(_V)/u礒C(_T)/ぃ塔ボ(_N)"
+
+#~ msgid "/_Message/_Mark/Mark it as _being read"
+#~ msgstr "/Hン(_M)/斜O(_M)/斜OΘw的(_b)"
+
+#~ msgid "deleting article %d...\n"
+#~ msgstr "R娃ゅ街s弦 %d...\n"
+
+#~ msgid "/_Mark/Make it as _being read"
+#~ msgstr "/斜O(_M)/斜OΘw的(_M)"
+
+#~ msgid "Show other headers"
+#~ msgstr "/塔ボ勁蟹瑳仞Y(_h)"
+
+#~ msgid "Receive at getting from all accounts"
+#~ msgstr "@Ω欝Μ勁咳b弦唆lン"
+
+#~ msgid "Enable smooth scrolling on the message view"
+#~ msgstr "統HンC蹐け俺b憩以鵐橋"
+
+#~ msgid "/_Summary/Select a_ll"
+#~ msgstr "/HンC(_S)/随(_l)"
+
+#~ msgid "Clean trash"
+#~ msgstr "M娃wR娃Hン"
+
+#~ msgid "/_Mark/Mark as _important"
+#~ msgstr "/斜O(_M)/斜O悪n(_i)"
+
+#~ msgid "TextView: color allocation failed\n"
+#~ msgstr "TextView: C皸tmア英\n"
+
+#~ msgid "*** Warning: code conversion failed ***\n"
+#~ msgstr "*** 諜iG退Xア英 ***\n"
+
+#~ msgid "Invalid MIME type\n"
+#~ msgstr "ぃXk MIME A\n"
+
+#~ msgid "%s - Compose message [Edited]"
+#~ msgstr "%s - slン [w怒]"
+
+#~ msgid "Previously selected folder: %s\n"
+#~ msgstr "e@喊鐓棹左螫踏─G%s\n"
+
+#~ msgid "New directory"
+#~ msgstr "sヘ雀"
+
+#~ msgid "The directory not found. Create it?"
+#~ msgstr "o咼愎ぃsbCn横ネ芹H"
+
+#~ msgid "Can't create directory."
+#~ msgstr "Lk横ネヘ雀C"
+
+#~ msgid "Selected name isn't a directory."
+#~ msgstr "随詳左螫踏┬辰O@咼愎C"
+
+#~ msgid "Writing mail folder list..."
+#~ msgstr "gJlン瑚踏└C..."
+
+#~ msgid "Writing imap folder list..."
+#~ msgstr "gJimap瑚踏└C..."
+
+#~ msgid "Writing news folder list..."
+#~ msgstr "gJsD瑚踏└C..."
+
+#~ msgid "Mail Server (IMAP4)"
+#~ msgstr "lンA捷 (IMAP4)"
+
+#~ msgid "NetNews"
+#~ msgstr "sD"
+
+#~ msgid "reading folder list %s ..."
+#~ msgstr "的瑚踏└C %s ..."
+
+#~ msgid "Broken folder list cache.\n"
+#~ msgstr "瑚踏└C蹐wlaC\n"
+
+#~ msgid "deleting folder %s ...\n"
+#~ msgstr "R娃瑚踏 %s い, 出y...\n"
+
+#~ msgid "deleting newsgroup %s ...\n"
+#~ msgstr "R娃sDs箇 %s い, 出y...\n"
+
+#~ msgid "Input adding news server:"
+#~ msgstr "出翠Js嵯sDA捷G"
+
+#~ msgid "The news server `%s' already exists."
+#~ msgstr "sDA捷 `%s' wsbC"
+
+#~ msgid "deleting cache folder of %s ...\n"
+#~ msgstr "R娃е瑚踏 %s ...\n"
+
+#~ msgid "IMAP login command is invalid.\n"
+#~ msgstr "IMAP nJRO杉~C\n"
+
+#~ msgid "Select destination directory"
+#~ msgstr "随詳ヘ斜ヘ雀"
+
+#~ msgid "can't drop message into %s\n"
+#~ msgstr "LkNHン飄 %sC\n"
+
+#~ msgid "%s exists\n"
+#~ msgstr "%s wsb\n"
+
+#~ msgid "Next unread"
+#~ msgstr "U@"
+
+#~ msgid "IMAP session is not established\n"
+#~ msgstr "IMAP su|ゼ悒\n"
+
+#~ msgid "news session is not established\n"
+#~ msgstr "sDsu|ゼ悒漾C\n"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 00000000..f930389a
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,212 @@
+bin_PROGRAMS = sylpheed
+
+sylpheed_SOURCES = \
+ intl.h \
+ defs.h \
+ version.h \
+ main.c main.h \
+ mainwindow.c mainwindow.h \
+ folderview.c folderview.h \
+ summaryview.c summaryview.h \
+ messageview.c messageview.h \
+ headerview.c headerview.h \
+ textview.c textview.h \
+ imageview.c imageview.h \
+ mimeview.c mimeview.h \
+ summary_search.c summary_search.h \
+ message_search.c message_search.h \
+ colorlabel.c colorlabel.h \
+ folder.c folder.h \
+ procmsg.c procmsg.h \
+ procheader.c procheader.h \
+ filter.c filter.h \
+ action.c action.h \
+ compose.c compose.h \
+ gtkshruler.c gtkshruler.h \
+ gtksctree.c gtksctree.h \
+ menu.c menu.h \
+ stock_pixmap.c stock_pixmap.h \
+ prefs.c prefs.h \
+ prefs_common.c prefs_common.h \
+ prefs_filter.c prefs_filter.h \
+ prefs_filter_edit.c prefs_filter_edit.h \
+ prefs_account.c prefs_account.h \
+ prefs_folder_item.c prefs_folder_item.h \
+ prefs_display_header.c prefs_display_header.h \
+ prefs_customheader.c prefs_customheader.h \
+ prefs_summary_column.c prefs_summary_column.h \
+ prefs_template.c prefs_template.h \
+ prefs_actions.c prefs_actions.h \
+ account.c account.h \
+ displayheader.c displayheader.h \
+ customheader.c customheader.h \
+ template.c template.h \
+ addressbook.c addressbook.h \
+ addr_compl.c addr_compl.h \
+ addressitem.h \
+ addritem.c addritem.h \
+ addrcache.c addrcache.h \
+ addrbook.c addrbook.h \
+ addrindex.c addrindex.h \
+ mgutils.c mgutils.h \
+ vcard.c vcard.h \
+ ldif.c ldif.h \
+ importldif.c importldif.h \
+ jpilot.c jpilot.h \
+ syldap.c syldap.h \
+ editbook.c editbook.h \
+ editgroup.c editgroup.h \
+ editaddress.c editaddress.h \
+ editvcard.c editvcard.h \
+ editjpilot.c editjpilot.h \
+ editldap.c editldap.h \
+ editldap_basedn.c editldap_basedn.h \
+ addressadd.c addressadd.h \
+ filesel.c filesel.h \
+ foldersel.c foldersel.h \
+ statusbar.c statusbar.h \
+ logwindow.c logwindow.h \
+ sourcewindow.c sourcewindow.h \
+ manage_window.c manage_window.h \
+ undo.c undo.h \
+ alertpanel.c alertpanel.h \
+ inputdialog.c inputdialog.h \
+ progressdialog.c progressdialog.h \
+ grouplistdialog.c grouplistdialog.h \
+ about.c about.h \
+ setup.c setup.h \
+ utils.c utils.h \
+ gtkutils.c gtkutils.h \
+ codeconv.c codeconv.h \
+ unmime.c unmime.h \
+ base64.c base64.h \
+ quoted-printable.c quoted-printable.h \
+ uuencode.c uuencode.h \
+ md5.c md5.h \
+ socket.c socket.h \
+ ssl.c ssl.h \
+ session.c session.h \
+ smtp.c smtp.h \
+ pop.c pop.h \
+ mh.c mh.h \
+ mbox.c mbox.h \
+ send_message.c send_message.h \
+ recv.c recv.h \
+ inc.c inc.h \
+ import.c import.h \
+ export.c export.h \
+ nntp.c nntp.h \
+ news.c news.h \
+ imap.c imap.h \
+ xml.c xml.h \
+ html.c html.h \
+ procmime.c procmime.h \
+ rfc2015.c rfc2015.h \
+ passphrase.c passphrase.h \
+ select-keys.c select-keys.h \
+ sigstatus.c sigstatus.h \
+ simple-gettext.c \
+ manual.c manual.h \
+ stringtable.c stringtable.h \
+ quote_fmt_lex.l quote_fmt_lex.h \
+ quote_fmt_parse.y quote_fmt.h \
+ sylpheed-marshal.c sylpheed-marshal.h
+
+BUILT_SOURCES = \
+ quote_fmt_lex.c \
+ quote_fmt_parse.c \
+ quote_fmt_parse.h \
+ sylpheed-marshal.c \
+ sylpheed-marshal.h
+
+EXTRA_DIST = \
+ quote_fmt_parse.h \
+ sylpheed-marshal.list \
+ version.h.in \
+ pixmaps/clip.xpm \
+ pixmaps/deleted.xpm \
+ pixmaps/dir-close.xpm \
+ pixmaps/dir-open.xpm \
+ pixmaps/dir-noselect.xpm \
+ pixmaps/forwarded.xpm \
+ pixmaps/group.xpm \
+ pixmaps/inbox.xpm \
+ pixmaps/mark.xpm \
+ pixmaps/checkbox_on.xpm \
+ pixmaps/checkbox_off.xpm \
+ pixmaps/new.xpm \
+ pixmaps/offline.xpm \
+ pixmaps/online.xpm \
+ pixmaps/outbox.xpm \
+ pixmaps/replied.xpm \
+ pixmaps/trash.xpm \
+ pixmaps/unread.xpm \
+ pixmaps/linewrap.xpm \
+ pixmaps/continue.xpm \
+ pixmaps/complete.xpm \
+ pixmaps/error.xpm \
+ pixmaps/stock_dialog_error_48.xpm \
+ pixmaps/stock_dialog_info_48.xpm \
+ pixmaps/stock_dialog_question_48.xpm \
+ pixmaps/stock_dialog_warning_48.xpm \
+ pixmaps/stock_mail.xpm \
+ pixmaps/stock_mail_attach.xpm \
+ pixmaps/stock_mail_receive.xpm \
+ pixmaps/stock_mail_receive_all.xpm \
+ pixmaps/stock_mail_send.xpm \
+ pixmaps/stock_mail_send_queue.xpm \
+ pixmaps/stock_mail_compose.xpm \
+ pixmaps/stock_mail_reply.xpm \
+ pixmaps/stock_mail_reply_to_all.xpm \
+ pixmaps/stock_mail_forward.xpm \
+ pixmaps/stock_preferences.xpm \
+ pixmaps/stock_properties.xpm \
+ pixmaps/stock_search.xpm \
+ pixmaps/stock_close.xpm \
+ pixmaps/stock_exec.xpm \
+ pixmaps/stock_trash.xpm \
+ pixmaps/stock_up_arrow.xpm \
+ pixmaps/stock_down_arrow.xpm \
+ pixmaps/stock_paste.xpm \
+ pixmaps/stock_add_16.xpm \
+ pixmaps/stock_remove_16.xpm \
+ pixmaps/tb_address_book.xpm \
+ pixmaps/sylpheed-logo.xpm \
+ pixmaps/address.xpm \
+ pixmaps/book.xpm \
+ pixmaps/category.xpm \
+ pixmaps/interface.xpm \
+ pixmaps/jpilot.xpm \
+ pixmaps/ldap.xpm \
+ pixmaps/vcard.xpm \
+ pixmaps/mail.xpm
+
+INCLUDES = \
+ -DG_LOG_DOMAIN=\"Sylpheed\" \
+ -I$(top_srcdir)/intl \
+ $(GTK_CFLAGS) \
+ $(GDK_PIXBUF_CFLAGS) \
+ $(GPGME_CFLAGS) \
+ -I$(includedir)
+
+sylpheed_LDADD = \
+ $(INTLLIBS) \
+ $(GTK_LIBS) \
+ $(GPGME_LIBS) \
+ $(LDAP_LIBS) \
+ $(LIBICONV)
+
+AM_CPPFLAGS = \
+ -DLOCALEDIR=\""$(localedir)"\" \
+ -DMANUALDIR=\""$(manualdir)"\" \
+ -DFAQDIR=\""$(faqdir)"\" \
+ -DTARGET_ALIAS=\""$(target_triplet)"\" \
+ -DSYSCONFDIR=\""$(sysconfdir)"\"
+
+AM_YFLAGS = -d
+
+sylpheed-marshal.h: sylpheed-marshal.list
+ $(GLIB_GENMARSHAL) $< --header --prefix=sylpheed_marshal > $@
+
+sylpheed-marshal.c: sylpheed-marshal.list
+ $(GLIB_GENMARSHAL) $< --body --prefix=sylpheed_marshal > $@
diff --git a/src/about.c b/src/about.c
new file mode 100644
index 00000000..47758d5d
--- /dev/null
+++ b/src/about.c
@@ -0,0 +1,251 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkhseparator.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkbutton.h>
+#if HAVE_SYS_UTSNAME_H
+# include <sys/utsname.h>
+#endif
+
+#include "intl.h"
+#include "about.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "prefs_common.h"
+#include "utils.h"
+#include "version.h"
+
+static GtkWidget *window;
+
+static void about_create(void);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event);
+static void about_uri_clicked(GtkButton *button, gpointer data);
+
+void about_show(void)
+{
+ if (!window)
+ about_create();
+ else {
+ gtk_widget_hide(window);
+ gtk_widget_show(window);
+ }
+}
+
+static void about_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *pixmap;
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *button;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+ GtkWidget *confirm_area;
+ GtkWidget *ok_button;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ GtkStyle *style;
+ GdkColormap *cmap;
+ GdkColor uri_color[2] = {{0, 0, 0, 0xffff}, {0, 0xffff, 0, 0}};
+ gboolean success[2];
+
+#if HAVE_SYS_UTSNAME_H
+ struct utsname utsbuf;
+#endif
+ gchar buf[1024];
+ gint i;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("About"));
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_widget_set_size_request(window, 518, 358);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ pixmap = stock_pixmap_widget(window, STOCK_PIXMAP_SYLPHEED_LOGO);
+ gtk_box_pack_start(GTK_BOX(vbox), pixmap, FALSE, FALSE, 0);
+
+ label = gtk_label_new("version "VERSION);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+#if HAVE_SYS_UTSNAME_H
+ uname(&utsbuf);
+ g_snprintf(buf, sizeof(buf),
+ "GTK+ version %d.%d.%d\n"
+ "Operating System: %s %s (%s)",
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ utsbuf.sysname, utsbuf.release, utsbuf.machine);
+#else
+ g_snprintf(buf, sizeof(buf),
+ "GTK+ version %d.%d.%d\n"
+ "Operating System: Windoze",
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+#endif
+
+ label = gtk_label_new(buf);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+ g_snprintf(buf, sizeof(buf),
+ "Compiled-in features:%s",
+#if HAVE_GDK_IMLIB
+ " gdk_imlib"
+#endif
+#if HAVE_GDK_PIXBUF
+ " gdk-pixbuf"
+#endif
+#if USE_THREADS
+ " gthread"
+#endif
+#if INET6
+ " IPv6"
+#endif
+#if HAVE_ICONV
+ " iconv"
+#endif
+#if HAVE_LIBCOMPFACE
+ " compface"
+#endif
+#if USE_GPGME
+ " GnuPG"
+#endif
+#if USE_SSL
+ " OpenSSL"
+#endif
+#if USE_LDAP
+ " LDAP"
+#endif
+#if USE_JPILOT
+ " JPilot"
+#endif
+ "");
+
+ label = gtk_label_new(buf);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+ label = gtk_label_new
+ ("Copyright (C) 1999-2004 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>");
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ button = gtk_button_new_with_label(" "HOMEPAGE_URI" ");
+ gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 0);
+ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(about_uri_clicked), NULL);
+ buf[0] = ' ';
+ for (i = 1; i <= strlen(HOMEPAGE_URI); i++) buf[i] = '_';
+ strcpy(buf + i, " ");
+ gtk_label_set_pattern(GTK_LABEL(GTK_BIN(button)->child), buf);
+ cmap = gdk_window_get_colormap(window->window);
+ gdk_colormap_alloc_colors(cmap, uri_color, 2, FALSE, TRUE, success);
+ if (success[0] == TRUE && success[1] == TRUE) {
+ gtk_widget_ensure_style(GTK_BIN(button)->child);
+ style = gtk_style_copy
+ (gtk_widget_get_style(GTK_BIN(button)->child));
+ style->fg[GTK_STATE_NORMAL] = uri_color[0];
+ style->fg[GTK_STATE_ACTIVE] = uri_color[1];
+ style->fg[GTK_STATE_PRELIGHT] = uri_color[0];
+ gtk_widget_set_style(GTK_BIN(button)->child, style);
+ } else
+ g_warning("about_create(): color allocation failed.\n");
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+
+ text = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
+
+#if USE_GPGME
+ gtk_text_buffer_insert(buffer, &iter,
+ _("GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n\n"), -1);
+#endif /* USE_GPGME */
+
+ gtk_text_buffer_insert(buffer, &iter,
+ _("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 "
+ "the Free Software Foundation; either version 2, or (at your option) "
+ "any later version.\n\n"), -1);
+
+ gtk_text_buffer_insert(buffer, &iter,
+ _("This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. "
+ "See the GNU General Public License for more details.\n\n"), -1);
+
+ gtk_text_buffer_insert(buffer, &iter,
+ _("You should have received a copy of the GNU General Public License "
+ "along with this program; if not, write to the Free Software "
+ "Foundation, Inc., 59 Temple Place - Suite 330, Boston, "
+ "MA 02111-1307, USA."), -1);
+
+ gtkut_button_set_create(&confirm_area, &ok_button, _("OK"),
+ NULL, NULL, NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_button);
+ g_signal_connect_closure
+ (G_OBJECT(ok_button), "clicked",
+ g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide_on_delete),
+ window, NULL), FALSE);
+
+ gtk_widget_show_all(window);
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(window);
+ return FALSE;
+}
+
+static void about_uri_clicked(GtkButton *button, gpointer data)
+{
+ open_uri(HOMEPAGE_URI, prefs_common.uri_cmd);
+}
diff --git a/src/about.h b/src/about.h
new file mode 100644
index 00000000..55496fc7
--- /dev/null
+++ b/src/about.h
@@ -0,0 +1,25 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ABOUT_H__
+#define __ABOUT_H__
+
+void about_show(void);
+
+#endif /* __ABOUT_H__ */
diff --git a/src/account.c b/src/account.c
new file mode 100644
index 00000000..49069651
--- /dev/null
+++ b/src/account.c
@@ -0,0 +1,990 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "folder.h"
+#include "account.h"
+#include "prefs.h"
+#include "prefs_account.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "compose.h"
+#include "manage_window.h"
+#include "stock_pixmap.h"
+#include "statusbar.h"
+#include "inc.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "alertpanel.h"
+
+typedef enum
+{
+ COL_DEFAULT = 0,
+ COL_GETALL = 1,
+ COL_NAME = 2,
+ COL_PROTOCOL = 3,
+ COL_SERVER = 4
+} EditAccountColumnPos;
+
+# define N_EDIT_ACCOUNT_COLS 5
+
+#define PREFSBUFSIZE 1024
+
+PrefsAccount *cur_account;
+
+static GList *account_list = NULL;
+
+static struct EditAccount {
+ GtkWidget *window;
+ GtkWidget *clist;
+ GtkWidget *close_btn;
+} edit_account;
+
+static GdkPixmap *markxpm;
+static GdkBitmap *markxpmmask;
+static GdkPixmap *checkboxonxpm;
+static GdkPixmap *checkboxonxpmmask;
+static GdkPixmap *checkboxoffxpm;
+static GdkPixmap *checkboxoffxpmmask;
+
+static void account_edit_create (void);
+
+static void account_edit_prefs (void);
+static void account_delete (void);
+
+static void account_up (void);
+static void account_down (void);
+
+static void account_set_default (void);
+
+static void account_edit_close (void);
+static gint account_delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static void account_selected (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event,
+ gpointer data);
+static void account_row_moved (GtkCList *clist,
+ gint source_row,
+ gint dest_row);
+static gboolean account_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+static gint account_clist_set_row (PrefsAccount *ac_prefs,
+ gint row);
+static void account_clist_set (void);
+
+static void account_list_set (void);
+
+void account_read_config_all(void)
+{
+ GSList *ac_label_list = NULL, *cur;
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ PrefsAccount *ac_prefs;
+
+ debug_print(_("Reading all config for each account...\n"));
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ if (!strncmp(buf, "[Account: ", 10)) {
+ strretchomp(buf);
+ memmove(buf, buf + 1, strlen(buf));
+ buf[strlen(buf) - 1] = '\0';
+ debug_print(_("Found label: %s\n"), buf);
+ ac_label_list = g_slist_append(ac_label_list,
+ g_strdup(buf));
+ }
+ }
+ fclose(fp);
+
+ /* read config data from file */
+ cur_account = NULL;
+ for (cur = ac_label_list; cur != NULL; cur = cur->next) {
+ ac_prefs = prefs_account_new();
+ prefs_account_read_config(ac_prefs, (gchar *)cur->data);
+ account_list = g_list_append(account_list, ac_prefs);
+ if (ac_prefs->is_default)
+ cur_account = ac_prefs;
+ }
+ /* if default is not set, assume first account as default */
+ if (!cur_account && account_list) {
+ ac_prefs = (PrefsAccount *)account_list->data;
+ account_set_as_default(ac_prefs);
+ cur_account = ac_prefs;
+ }
+
+ account_set_menu();
+ main_window_reflect_prefs_all();
+
+ while (ac_label_list) {
+ g_free(ac_label_list->data);
+ ac_label_list = g_slist_remove(ac_label_list,
+ ac_label_list->data);
+ }
+}
+
+void account_write_config_all(void)
+{
+ prefs_account_write_config_all(account_list);
+}
+
+PrefsAccount *account_find_from_smtp_server(const gchar *address,
+ const gchar *smtp_server)
+{
+ GList *cur;
+ PrefsAccount *ac;
+
+ g_return_val_if_fail(address != NULL, NULL);
+ g_return_val_if_fail(smtp_server != NULL, NULL);
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ac = (PrefsAccount *)cur->data;
+ if (!strcmp2(address, ac->address) &&
+ !strcmp2(smtp_server, ac->smtp_server))
+ return ac;
+ }
+
+ return NULL;
+}
+
+/*
+ * account_find_from_address:
+ * @address: Email address string.
+ *
+ * Find a mail (not news) account with the specified email address.
+ *
+ * Return value: The found account, or NULL if not found.
+ */
+PrefsAccount *account_find_from_address(const gchar *address)
+{
+ GList *cur;
+ PrefsAccount *ac;
+
+ g_return_val_if_fail(address != NULL, NULL);
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ac = (PrefsAccount *)cur->data;
+ if (ac->protocol != A_NNTP && ac->address &&
+ strcasestr(address, ac->address) != NULL)
+ return ac;
+ }
+
+ return NULL;
+}
+
+PrefsAccount *account_find_from_id(gint id)
+{
+ GList *cur;
+ PrefsAccount *ac;
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ac = (PrefsAccount *)cur->data;
+ if (id == ac->account_id)
+ return ac;
+ }
+
+ return NULL;
+}
+
+PrefsAccount *account_find_from_item(FolderItem *item)
+{
+ PrefsAccount *ac;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ ac = item->account;
+ if (!ac) {
+ FolderItem *cur_item = item->parent;
+ while (cur_item != NULL) {
+ if (cur_item->account && cur_item->ac_apply_sub) {
+ ac = cur_item->account;
+ break;
+ }
+ cur_item = cur_item->parent;
+ }
+ }
+ if (!ac)
+ ac = item->folder->account;
+
+ return ac;
+}
+
+PrefsAccount *account_find_from_message_file(const gchar *file)
+{
+ static HeaderEntry hentry[] = {{"From:", NULL, FALSE},
+ {"X-Sylpheed-Account-Id:", NULL, FALSE},
+ {"AID:", NULL, FALSE}};
+
+ enum
+ {
+ H_FROM = 0,
+ H_X_SYLPHEED_ACCOUNT_ID = 1,
+ H_AID = 2
+ };
+
+ PrefsAccount *ac = NULL;
+ FILE *fp;
+ gchar *str;
+ gchar buf[BUFFSIZE];
+ gint hnum;
+
+ g_return_val_if_fail(file != NULL, NULL);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+
+ while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry))
+ != -1) {
+ str = buf + strlen(hentry[hnum].name);
+ if (hnum == H_FROM)
+ ac = account_find_from_address(str);
+ else if (hnum == H_X_SYLPHEED_ACCOUNT_ID || hnum == H_AID) {
+ PrefsAccount *tmp_ac;
+
+ tmp_ac = account_find_from_id(atoi(str));
+ if (tmp_ac) {
+ ac = tmp_ac;
+ break;
+ }
+ }
+ }
+
+ fclose(fp);
+ return ac;
+}
+
+PrefsAccount *account_find_from_msginfo(MsgInfo *msginfo)
+{
+ gchar *file;
+ PrefsAccount *ac;
+
+ file = procmsg_get_message_file(msginfo);
+ ac = account_find_from_message_file(file);
+ g_free(file);
+
+ if (!ac && msginfo->folder)
+ ac = account_find_from_item(msginfo->folder);
+
+ return ac;
+}
+
+void account_set_menu(void)
+{
+ main_window_set_account_menu(account_list);
+}
+
+void account_foreach(AccountFunc func, gpointer user_data)
+{
+ GList *cur;
+
+ for (cur = account_list; cur != NULL; cur = cur->next)
+ if (func((PrefsAccount *)cur->data, user_data) != 0)
+ return;
+}
+
+GList *account_get_list(void)
+{
+ return account_list;
+}
+
+void account_edit_open(void)
+{
+ inc_lock();
+
+ if (compose_get_compose_list()) {
+ alertpanel_notice(_("Some composing windows are open.\n"
+ "Please close all the composing windows before editing the accounts."));
+ inc_unlock();
+ return;
+ }
+
+ debug_print(_("Opening account edit window...\n"));
+
+ if (!edit_account.window)
+ account_edit_create();
+
+ account_clist_set();
+
+ manage_window_set_transient(GTK_WINDOW(edit_account.window));
+ gtk_widget_grab_focus(edit_account.close_btn);
+ gtk_widget_show(edit_account.window);
+
+ manage_window_focus_in(edit_account.window, NULL, NULL);
+}
+
+void account_add(void)
+{
+ PrefsAccount *ac_prefs;
+
+ ac_prefs = prefs_account_open(NULL);
+
+ if (!ac_prefs) return;
+
+ account_list = g_list_append(account_list, ac_prefs);
+
+ if (ac_prefs->is_default)
+ account_set_as_default(ac_prefs);
+
+ account_clist_set();
+
+ if (ac_prefs->protocol == A_IMAP4 || ac_prefs->protocol == A_NNTP) {
+ Folder *folder;
+
+ if (ac_prefs->protocol == A_IMAP4) {
+ folder = folder_new(F_IMAP, ac_prefs->account_name,
+ ac_prefs->recv_server);
+ } else {
+ folder = folder_new(F_NEWS, ac_prefs->account_name,
+ ac_prefs->nntp_server);
+ }
+
+ folder->account = ac_prefs;
+ ac_prefs->folder = REMOTE_FOLDER(folder);
+ folder_add(folder);
+ if (ac_prefs->protocol == A_IMAP4) {
+ if (main_window_toggle_online_if_offline
+ (main_window_get())) {
+ folder->klass->create_tree(folder);
+ statusbar_pop_all();
+ }
+ }
+ folderview_set_all();
+ }
+}
+
+void account_open(PrefsAccount *ac_prefs)
+{
+ gboolean prev_default;
+ gchar *ac_name;
+
+ g_return_if_fail(ac_prefs != NULL);
+
+ prev_default = ac_prefs->is_default;
+ Xstrdup_a(ac_name, ac_prefs->account_name ? ac_prefs->account_name : "",
+ return);
+
+ prefs_account_open(ac_prefs);
+
+ if (!prev_default && ac_prefs->is_default)
+ account_set_as_default(ac_prefs);
+
+ if (ac_prefs->folder && strcmp2(ac_name, ac_prefs->account_name) != 0) {
+ folder_set_name(FOLDER(ac_prefs->folder),
+ ac_prefs->account_name);
+ folderview_set_all();
+ }
+
+ account_write_config_all();
+ account_set_menu();
+ main_window_reflect_prefs_all();
+}
+
+void account_set_as_default(PrefsAccount *ac_prefs)
+{
+ PrefsAccount *ap;
+ GList *cur;
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ap = (PrefsAccount *)cur->data;
+ if (ap->is_default)
+ ap->is_default = FALSE;
+ }
+
+ ac_prefs->is_default = TRUE;
+}
+
+PrefsAccount *account_get_default(void)
+{
+ PrefsAccount *ap;
+ GList *cur;
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ap = (PrefsAccount *)cur->data;
+ if (ap->is_default)
+ return ap;
+ }
+
+ return NULL;
+}
+
+void account_set_missing_folder(void)
+{
+ PrefsAccount *ap;
+ GList *cur;
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ap = (PrefsAccount *)cur->data;
+ if ((ap->protocol == A_IMAP4 || ap->protocol == A_NNTP) &&
+ !ap->folder) {
+ Folder *folder;
+
+ if (ap->protocol == A_IMAP4) {
+ folder = folder_new(F_IMAP, ap->account_name,
+ ap->recv_server);
+ } else {
+ folder = folder_new(F_NEWS, ap->account_name,
+ ap->nntp_server);
+ }
+
+ folder->account = ap;
+ ap->folder = REMOTE_FOLDER(folder);
+ folder_add(folder);
+ if (ap->protocol == A_IMAP4) {
+ if (main_window_toggle_online_if_offline
+ (main_window_get())) {
+ folder->klass->create_tree(folder);
+ statusbar_pop_all();
+ }
+ }
+ }
+ }
+}
+
+FolderItem *account_get_special_folder(PrefsAccount *ac_prefs,
+ SpecialFolderItemType type)
+{
+ FolderItem *item = NULL;
+
+ g_return_val_if_fail(ac_prefs != NULL, NULL);
+
+ switch (type) {
+ case F_INBOX:
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->inbox;
+ if (!item)
+ item = folder_get_default_inbox();
+ break;
+ case F_OUTBOX:
+ if (ac_prefs->set_sent_folder && ac_prefs->sent_folder) {
+ item = folder_find_item_from_identifier
+ (ac_prefs->sent_folder);
+ }
+ if (!item) {
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->outbox;
+ if (!item)
+ item = folder_get_default_outbox();
+ }
+ break;
+ case F_DRAFT:
+ if (ac_prefs->set_draft_folder && ac_prefs->draft_folder) {
+ item = folder_find_item_from_identifier
+ (ac_prefs->draft_folder);
+ }
+ if (!item) {
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->draft;
+ if (!item)
+ item = folder_get_default_draft();
+ }
+ break;
+ case F_QUEUE:
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->queue;
+ if (!item)
+ item = folder_get_default_queue();
+ break;
+ case F_TRASH:
+ if (ac_prefs->set_trash_folder && ac_prefs->trash_folder) {
+ item = folder_find_item_from_identifier
+ (ac_prefs->trash_folder);
+ }
+ if (!item) {
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->trash;
+ if (!item)
+ item = folder_get_default_trash();
+ }
+ break;
+ default:
+ break;
+ }
+
+ return item;
+}
+
+void account_destroy(PrefsAccount *ac_prefs)
+{
+ g_return_if_fail(ac_prefs != NULL);
+
+ folder_unref_account_all(ac_prefs);
+
+ prefs_account_free(ac_prefs);
+ account_list = g_list_remove(account_list, ac_prefs);
+
+ if (cur_account == ac_prefs) cur_account = NULL;
+ if (!cur_account && account_list) {
+ cur_account = account_get_default();
+ if (!cur_account) {
+ ac_prefs = (PrefsAccount *)account_list->data;
+ account_set_as_default(ac_prefs);
+ cur_account = ac_prefs;
+ }
+ }
+}
+
+
+static void account_edit_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *clist;
+ gchar *titles[N_EDIT_ACCOUNT_COLS];
+ gint i;
+
+ GtkWidget *vbox2;
+ GtkWidget *add_btn;
+ GtkWidget *edit_btn;
+ GtkWidget *del_btn;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ GtkWidget *default_btn;
+
+ GtkWidget *hbbox;
+ GtkWidget *close_btn;
+
+ debug_print(_("Creating account edit window...\n"));
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request (window, 500, 320);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_title (GTK_WINDOW (window), _("Edit accounts"));
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ g_signal_connect (G_OBJECT (window), "delete_event",
+ G_CALLBACK (account_delete_event), NULL);
+ g_signal_connect (G_OBJECT (window), "key_press_event",
+ G_CALLBACK (account_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT (window);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new (FALSE, 10);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new
+ (_("New messages will be checked in this order. Check the boxes\n"
+ "on the `G' column to enable message retrieval by `Get all'."));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
+
+ scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwin);
+ gtk_box_pack_start (GTK_BOX (hbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ titles[COL_DEFAULT] = "D";
+ titles[COL_GETALL] = "G";
+ titles[COL_NAME] = _("Name");
+ titles[COL_PROTOCOL] = _("Protocol");
+ titles[COL_SERVER] = _("Server");
+
+ clist = gtk_clist_new_with_titles (N_EDIT_ACCOUNT_COLS, titles);
+ gtk_widget_show (clist);
+ gtk_container_add (GTK_CONTAINER (scrolledwin), clist);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_DEFAULT , 10);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_GETALL , 11);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME , 100);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_PROTOCOL, 100);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_SERVER , 100);
+ gtk_clist_set_column_justification (GTK_CLIST(clist), COL_DEFAULT,
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification (GTK_CLIST(clist), COL_GETALL,
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE);
+
+ for (i = 0; i < N_EDIT_ACCOUNT_COLS; i++)
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button,
+ GTK_CAN_FOCUS);
+
+ g_signal_connect (G_OBJECT (clist), "select_row",
+ G_CALLBACK (account_selected), NULL);
+ g_signal_connect_after (G_OBJECT (clist), "row_move",
+ G_CALLBACK (account_row_moved), NULL);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
+
+ add_btn = gtk_button_new_with_label (_("Add"));
+ gtk_widget_show (add_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), add_btn, FALSE, FALSE, 4);
+ g_signal_connect (G_OBJECT(add_btn), "clicked",
+ G_CALLBACK (account_add), NULL);
+
+ edit_btn = gtk_button_new_with_label (_("Edit"));
+ gtk_widget_show (edit_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), edit_btn, FALSE, FALSE, 4);
+ g_signal_connect (G_OBJECT(edit_btn), "clicked",
+ G_CALLBACK (account_edit_prefs), NULL);
+
+ del_btn = gtk_button_new_with_label (_(" Delete "));
+ gtk_widget_show (del_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), del_btn, FALSE, FALSE, 4);
+ g_signal_connect (G_OBJECT(del_btn), "clicked",
+ G_CALLBACK (account_delete), NULL);
+
+ down_btn = gtk_button_new_with_label (_("Down"));
+ gtk_widget_show (down_btn);
+ gtk_box_pack_end (GTK_BOX (vbox2), down_btn, FALSE, FALSE, 4);
+ g_signal_connect (G_OBJECT(down_btn), "clicked",
+ G_CALLBACK (account_down), NULL);
+
+ up_btn = gtk_button_new_with_label (_("Up"));
+ gtk_widget_show (up_btn);
+ gtk_box_pack_end (GTK_BOX (vbox2), up_btn, FALSE, FALSE, 4);
+ g_signal_connect (G_OBJECT(up_btn), "clicked",
+ G_CALLBACK (account_up), NULL);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+ vbox2 = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
+
+ default_btn = gtk_button_new_with_label (_(" Set as default account "));
+ gtk_widget_show (default_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), default_btn, TRUE, FALSE, 0);
+ g_signal_connect (G_OBJECT(default_btn), "clicked",
+ G_CALLBACK (account_set_default), NULL);
+
+ gtkut_button_set_create(&hbbox, &close_btn, _("Close"),
+ NULL, NULL, NULL, NULL);
+ gtk_widget_show(hbbox);
+ gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default (close_btn);
+
+ g_signal_connect (G_OBJECT (close_btn), "clicked",
+ G_CALLBACK (account_edit_close), NULL);
+
+ stock_pixmap_gdk(clist, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
+ stock_pixmap_gdk(clist, STOCK_PIXMAP_CHECKBOX_ON,
+ &checkboxonxpm, &checkboxonxpmmask);
+ stock_pixmap_gdk(clist, STOCK_PIXMAP_CHECKBOX_OFF,
+ &checkboxoffxpm, &checkboxoffxpmmask);
+
+ edit_account.window = window;
+ edit_account.clist = clist;
+ edit_account.close_btn = close_btn;
+}
+
+static void account_edit_prefs(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ PrefsAccount *ac_prefs;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ac_prefs = gtk_clist_get_row_data(clist, row);
+ account_open(ac_prefs);
+
+ account_clist_set();
+}
+
+static void account_delete(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ PrefsAccount *ac_prefs;
+ gint row;
+
+ if (!clist->selection) return;
+
+ if (alertpanel(_("Delete account"),
+ _("Do you really want to delete this account?"),
+ _("Yes"), _("+No"), NULL) != G_ALERTDEFAULT)
+ return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ac_prefs = gtk_clist_get_row_data(clist, row);
+ if (ac_prefs->folder) {
+ FolderItem *item;
+
+ item = main_window_get()->summaryview->folder_item;
+ if (item && item->folder == FOLDER(ac_prefs->folder))
+ summary_clear_all(main_window_get()->summaryview);
+ folder_destroy(FOLDER(ac_prefs->folder));
+ folderview_set_all();
+ }
+ account_destroy(ac_prefs);
+ account_clist_set();
+}
+
+static void account_up(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void account_down(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+static void account_set_default(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+ PrefsAccount *ac_prefs;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ac_prefs = gtk_clist_get_row_data(clist, row);
+ account_set_as_default(ac_prefs);
+ account_clist_set();
+
+ cur_account = ac_prefs;
+ account_set_menu();
+ main_window_reflect_prefs_all();
+}
+
+static void account_edit_close(void)
+{
+ account_list_set();
+ account_write_config_all();
+
+ if (!cur_account && account_list) {
+ PrefsAccount *ac_prefs = (PrefsAccount *)account_list->data;
+ account_set_as_default(ac_prefs);
+ cur_account = ac_prefs;
+ }
+
+ account_set_menu();
+ main_window_reflect_prefs_all();
+
+ gtk_widget_hide(edit_account.window);
+
+ inc_unlock();
+}
+
+static gint account_delete_event(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ account_edit_close();
+ return TRUE;
+}
+
+static void account_selected(GtkCList *clist, gint row, gint column,
+ GdkEvent *event, gpointer data)
+{
+ if (event && event->type == GDK_2BUTTON_PRESS) {
+ account_edit_prefs();
+ return;
+ }
+
+ if (column == COL_GETALL) {
+ PrefsAccount *ac;
+
+ ac = gtk_clist_get_row_data(clist, row);
+ if (ac->protocol == A_POP3 || ac->protocol == A_IMAP4 ||
+ ac->protocol == A_NNTP) {
+ ac->recv_at_getall ^= TRUE;
+ account_clist_set_row(ac, row);
+ }
+ }
+}
+
+static void account_row_moved(GtkCList *clist, gint source_row, gint dest_row)
+{
+ account_list_set();
+ if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL)
+ gtk_clist_moveto(clist, dest_row, -1, 0.5, 0.0);
+}
+
+static gboolean account_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ account_edit_close();
+ return FALSE;
+}
+
+/* set one CList row or add new row */
+static gint account_clist_set_row(PrefsAccount *ac_prefs, gint row)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gchar *text[N_EDIT_ACCOUNT_COLS];
+ gboolean has_getallbox;
+ gboolean getall;
+
+ text[COL_DEFAULT] = "";
+ text[COL_GETALL] = "";
+ text[COL_NAME] = ac_prefs->account_name;
+#if USE_SSL
+ text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ?
+ (ac_prefs->ssl_pop == SSL_TUNNEL ?
+ "POP3 (SSL)" :
+ ac_prefs->ssl_pop == SSL_STARTTLS ?
+ "POP3 (TLS)" : "POP3") :
+ ac_prefs->protocol == A_IMAP4 ?
+ (ac_prefs->ssl_imap == SSL_TUNNEL ?
+ "IMAP4 (SSL)" :
+ ac_prefs->ssl_imap == SSL_STARTTLS ?
+ "IMAP4 (TLS)" : "IMAP4") :
+ ac_prefs->protocol == A_NNTP ?
+ (ac_prefs->ssl_nntp == SSL_TUNNEL ?
+ "NNTP (SSL)" : "NNTP") :
+ "";
+#else
+ text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? "POP3" :
+ ac_prefs->protocol == A_IMAP4 ? "IMAP4" :
+ ac_prefs->protocol == A_NNTP ? "NNTP" : "";
+#endif
+ text[COL_SERVER] = ac_prefs->protocol == A_NNTP
+ ? ac_prefs->nntp_server : ac_prefs->recv_server;
+
+ if (row < 0)
+ row = gtk_clist_append(clist, text);
+ else {
+ gtk_clist_set_text(clist, row, COL_DEFAULT, text[COL_DEFAULT]);
+ gtk_clist_set_text(clist, row, COL_GETALL, text[COL_GETALL]);
+ gtk_clist_set_text(clist, row, COL_NAME, text[COL_NAME]);
+ gtk_clist_set_text(clist, row, COL_PROTOCOL, text[COL_PROTOCOL]);
+ gtk_clist_set_text(clist, row, COL_SERVER, text[COL_SERVER]);
+ }
+
+ has_getallbox = (ac_prefs->protocol == A_POP3 ||
+ ac_prefs->protocol == A_IMAP4 ||
+ ac_prefs->protocol == A_NNTP);
+ getall = has_getallbox && ac_prefs->recv_at_getall;
+
+ if (ac_prefs->is_default)
+ gtk_clist_set_pixmap(clist, row, COL_DEFAULT,
+ markxpm, markxpmmask);
+ if (getall)
+ gtk_clist_set_pixmap(clist, row, COL_GETALL,
+ checkboxonxpm, checkboxonxpmmask);
+ else if (has_getallbox)
+ gtk_clist_set_pixmap(clist, row, COL_GETALL,
+ checkboxoffxpm, checkboxoffxpmmask);
+
+ gtk_clist_set_row_data(clist, row, ac_prefs);
+
+ return row;
+}
+
+/* set CList from account list */
+static void account_clist_set(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ GList *cur;
+ gint row = -1, prev_row = -1;
+
+ if (clist->selection)
+ prev_row = GPOINTER_TO_INT(clist->selection->data);
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ row = account_clist_set_row((PrefsAccount *)cur->data, -1);
+ if ((PrefsAccount *)cur->data == cur_account) {
+ gtk_clist_select_row(clist, row, -1);
+ gtkut_clist_set_focus_row(clist, row);
+ }
+ }
+
+ if (prev_row >= 0) {
+ row = prev_row;
+ gtk_clist_select_row(clist, row, -1);
+ gtkut_clist_set_focus_row(clist, row);
+ }
+
+ if (row >= 0 &&
+ gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
+ gtk_clist_moveto(clist, row, -1, 0.5, 0);
+
+ gtk_clist_thaw(clist);
+}
+
+/* set account list from CList */
+static void account_list_set(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+ PrefsAccount *ac_prefs;
+
+ while (account_list)
+ account_list = g_list_remove(account_list, account_list->data);
+
+ for (row = 0; (ac_prefs = gtk_clist_get_row_data(clist, row)) != NULL;
+ row++)
+ account_list = g_list_append(account_list, ac_prefs);
+}
diff --git a/src/account.h b/src/account.h
new file mode 100644
index 00000000..2ec2a384
--- /dev/null
+++ b/src/account.h
@@ -0,0 +1,64 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ACCOUNT_H__
+#define __ACCOUNT_H__
+
+#include <glib.h>
+
+#include "prefs.h"
+#include "prefs_account.h"
+#include "folder.h"
+#include "procmsg.h"
+
+typedef gint (*AccountFunc) (PrefsAccount *ac_prefs,
+ gpointer user_data);
+
+extern PrefsAccount *cur_account;
+
+void account_read_config_all (void);
+void account_write_config_all (void);
+
+PrefsAccount *account_find_from_smtp_server (const gchar *address,
+ const gchar *smtp_server);
+PrefsAccount *account_find_from_address (const gchar *address);
+PrefsAccount *account_find_from_id (gint id);
+PrefsAccount *account_find_from_item (FolderItem *item);
+PrefsAccount *account_find_from_message_file (const gchar *file);
+PrefsAccount *account_find_from_msginfo (MsgInfo *msginfo);
+
+void account_set_menu (void);
+
+void account_foreach (AccountFunc func,
+ gpointer user_data);
+GList *account_get_list (void);
+
+void account_edit_open (void);
+void account_add (void);
+void account_open (PrefsAccount *ac_prefs);
+void account_set_as_default (PrefsAccount *ac_prefs);
+PrefsAccount *account_get_default (void);
+
+void account_set_missing_folder(void);
+FolderItem *account_get_special_folder(PrefsAccount *ac_prefs,
+ SpecialFolderItemType type);
+
+void account_destroy (PrefsAccount *ac_prefs);
+
+#endif /* __ACCOUNT_H__ */
diff --git a/src/action.c b/src/action.c
new file mode 100644
index 00000000..4c97f73a
--- /dev/null
+++ b/src/action.c
@@ -0,0 +1,1269 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#ifdef GDK_WINDOWING_X11
+# include <gdk/gdkx.h>
+#endif /* GDK_WINDOWING_X11 */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "intl.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "mainwindow.h"
+#include "prefs_common.h"
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "action.h"
+#include "compose.h"
+#include "procmsg.h"
+#include "textview.h"
+
+typedef struct _Children Children;
+typedef struct _ChildInfo ChildInfo;
+typedef struct _UserStringDialog UserStringDialog;
+
+struct _Children
+{
+ GtkWidget *dialog;
+ GtkWidget *text;
+ GtkWidget *input_entry;
+ GtkWidget *input_hbox;
+ GtkWidget *abort_btn;
+ GtkWidget *close_btn;
+ GtkWidget *scrolledwin;
+
+ gchar *action;
+ ActionType action_type;
+ GSList *list;
+ gint nb;
+ gint open_in;
+ gboolean output;
+
+ GtkWidget *msg_text;
+
+ gboolean is_selection;
+};
+
+struct _ChildInfo
+{
+ Children *children;
+ gchar *cmd;
+ pid_t pid;
+ gint chld_in;
+ gint chld_out;
+ gint chld_err;
+ gint chld_status;
+ gint tag_in;
+ gint tag_out;
+ gint tag_err;
+ gint tag_status;
+ gint new_out;
+
+ GString *output;
+};
+
+static void action_update_menu (GtkItemFactory *ifactory,
+ gchar *branch_path,
+ gpointer callback,
+ gpointer data);
+static void compose_actions_execute_cb (Compose *compose,
+ guint action_nb,
+ GtkWidget *widget);
+static void mainwin_actions_execute_cb (MainWindow *mainwin,
+ guint action_nb,
+ GtkWidget *widget);
+static void msgview_actions_execute_cb (MessageView *msgview,
+ guint action_nb,
+ GtkWidget *widget);
+static void message_actions_execute (MessageView *msgview,
+ guint action_nb,
+ GSList *msg_list);
+
+static gboolean execute_actions (gchar *action,
+ GSList *msg_list,
+ GtkWidget *text,
+ gint body_pos,
+ MimeInfo *partinfo);
+
+static gchar *parse_action_cmd (gchar *action,
+ MsgInfo *msginfo,
+ GSList *msg_list,
+ MimeInfo *partinfo,
+ const gchar *user_str,
+ const gchar *user_hidden_str,
+ const gchar *sel_str);
+static gboolean parse_append_filename (GString *cmd,
+ MsgInfo *msginfo);
+
+static gboolean parse_append_msgpart (GString *cmd,
+ MsgInfo *msginfo,
+ MimeInfo *partinfo);
+
+static ChildInfo *fork_child (gchar *cmd,
+ const gchar *msg_str,
+ Children *children);
+
+static gint wait_for_children (Children *children);
+
+static void free_children (Children *children);
+
+static void childinfo_close_pipes (ChildInfo *child_info);
+
+static void create_io_dialog (Children *children);
+static void update_io_dialog (Children *children);
+
+static void hide_io_dialog_cb (GtkWidget *widget,
+ gpointer data);
+static gint io_dialog_key_pressed_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+static void catch_output (gpointer data,
+ gint source,
+ GdkInputCondition cond);
+static void catch_input (gpointer data,
+ gint source,
+ GdkInputCondition cond);
+static void catch_status (gpointer data,
+ gint source,
+ GdkInputCondition cond);
+
+static gchar *get_user_string (const gchar *action,
+ ActionType type);
+
+
+ActionType action_get_type(const gchar *action_str)
+{
+ const gchar *p;
+ ActionType action_type = ACTION_NONE;
+
+ g_return_val_if_fail(action_str, ACTION_ERROR);
+ g_return_val_if_fail(*action_str, ACTION_ERROR);
+
+ p = action_str;
+
+ if (p[0] == '|') {
+ action_type |= ACTION_PIPE_IN;
+ p++;
+ } else if (p[0] == '>') {
+ action_type |= ACTION_USER_IN;
+ p++;
+ } else if (p[0] == '*') {
+ action_type |= ACTION_USER_HIDDEN_IN;
+ p++;
+ }
+
+ if (p[0] == '\0')
+ return ACTION_ERROR;
+
+ while (*p && action_type != ACTION_ERROR) {
+ if (p[0] == '%') {
+ switch (p[1]) {
+ case 'f':
+ action_type |= ACTION_SINGLE;
+ break;
+ case 'F':
+ action_type |= ACTION_MULTIPLE;
+ break;
+ case 'p':
+ action_type |= ACTION_SINGLE;
+ break;
+ case 's':
+ action_type |= ACTION_SELECTION_STR;
+ break;
+ case 'u':
+ action_type |= ACTION_USER_STR;
+ break;
+ case 'h':
+ action_type |= ACTION_USER_HIDDEN_STR;
+ break;
+ default:
+ action_type = ACTION_ERROR;
+ break;
+ }
+ } else if (p[0] == '|') {
+ if (p[1] == '\0')
+ action_type |= ACTION_PIPE_OUT;
+ } else if (p[0] == '>') {
+ if (p[1] == '\0')
+ action_type |= ACTION_INSERT;
+ } else if (p[0] == '&') {
+ if (p[1] == '\0')
+ action_type |= ACTION_ASYNC;
+ }
+ p++;
+ }
+
+ return action_type;
+}
+
+static gchar *parse_action_cmd(gchar *action, MsgInfo *msginfo,
+ GSList *msg_list, MimeInfo *partinfo,
+ const gchar *user_str,
+ const gchar *user_hidden_str,
+ const gchar *sel_str)
+{
+ GString *cmd;
+ gchar *p;
+ GSList *cur;
+
+ p = action;
+
+ if (p[0] == '|' || p[0] == '>' || p[0] == '*')
+ p++;
+
+ cmd = g_string_sized_new(strlen(action));
+
+ while (p[0] &&
+ !((p[0] == '|' || p[0] == '>' || p[0] == '&') && !p[1])) {
+ if (p[0] == '%' && p[1]) {
+ switch (p[1]) {
+ case 'f':
+ if (!parse_append_filename(cmd, msginfo)) {
+ g_string_free(cmd, TRUE);
+ return NULL;
+ }
+ p++;
+ break;
+ case 'F':
+ for (cur = msg_list; cur != NULL;
+ cur = cur->next) {
+ MsgInfo *msg = (MsgInfo *)cur->data;
+
+ if (!parse_append_filename(cmd, msg)) {
+ g_string_free(cmd, TRUE);
+ return NULL;
+ }
+ if (cur->next)
+ g_string_append_c(cmd, ' ');
+ }
+ p++;
+ break;
+ case 'p':
+ if (!parse_append_msgpart(cmd, msginfo,
+ partinfo)) {
+ g_string_free(cmd, TRUE);
+ return NULL;
+ }
+ p++;
+ break;
+ case 's':
+ if (sel_str)
+ g_string_append(cmd, sel_str);
+ p++;
+ break;
+ case 'u':
+ if (user_str)
+ g_string_append(cmd, user_str);
+ p++;
+ break;
+ case 'h':
+ if (user_hidden_str)
+ g_string_append(cmd, user_hidden_str);
+ p++;
+ break;
+ default:
+ g_string_append_c(cmd, p[0]);
+ g_string_append_c(cmd, p[1]);
+ p++;
+ }
+ } else {
+ g_string_append_c(cmd, p[0]);
+ }
+ p++;
+ }
+ if (cmd->len == 0) {
+ g_string_free(cmd, TRUE);
+ return NULL;
+ }
+
+ p = cmd->str;
+ g_string_free(cmd, FALSE);
+ return p;
+}
+
+static gboolean parse_append_filename(GString *cmd, MsgInfo *msginfo)
+{
+ gchar *filename;
+ gchar *p, *q;
+ gchar escape_ch[] = "\\ ";
+
+ g_return_val_if_fail(msginfo, FALSE);
+
+ filename = procmsg_get_message_file(msginfo);
+
+ if (!filename) {
+ alertpanel_error(_("Could not get message file %d"),
+ msginfo->msgnum);
+ return FALSE;
+ }
+
+ p = filename;
+ while ((q = strpbrk(p, "$\"`'\\ \t*?[]&|;<>()!#~")) != NULL) {
+ escape_ch[1] = *q;
+ *q = '\0';
+ g_string_append(cmd, p);
+ g_string_append(cmd, escape_ch);
+ p = q + 1;
+ }
+ g_string_append(cmd, p);
+
+ g_free(filename);
+
+ return TRUE;
+}
+
+static gboolean parse_append_msgpart(GString *cmd, MsgInfo *msginfo,
+ MimeInfo *partinfo)
+{
+ gboolean single_part = FALSE;
+ gchar *filename;
+ gchar *part_filename;
+ gint ret;
+
+ if (!partinfo) {
+ partinfo = procmime_scan_message(msginfo);
+ if (!partinfo) {
+ alertpanel_error(_("Could not get message part."));
+ return FALSE;
+ }
+
+ single_part = TRUE;
+ }
+
+ filename = procmsg_get_message_file_path(msginfo);
+ part_filename = procmime_get_tmp_file_name(partinfo);
+
+ ret = procmime_get_part(part_filename, filename, partinfo);
+
+ if (single_part)
+ procmime_mimeinfo_free_all(partinfo);
+ g_free(filename);
+
+ if (ret < 0) {
+ alertpanel_error(_("Can't get part of multipart message"));
+ g_free(part_filename);
+ return FALSE;
+ }
+
+ g_string_append(cmd, part_filename);
+
+ g_free(part_filename);
+
+ return TRUE;
+}
+
+void action_update_mainwin_menu(GtkItemFactory *ifactory, MainWindow *mainwin)
+{
+ action_update_menu(ifactory, "/Tools/Actions",
+ mainwin_actions_execute_cb, mainwin);
+}
+
+void action_update_msgview_menu(GtkItemFactory *ifactory, MessageView *msgview)
+{
+ action_update_menu(ifactory, "/Tools/Actions",
+ msgview_actions_execute_cb, msgview);
+}
+
+void action_update_compose_menu(GtkItemFactory *ifactory, Compose *compose)
+{
+ action_update_menu(ifactory, "/Tools/Actions",
+ compose_actions_execute_cb, compose);
+}
+
+static void action_update_menu(GtkItemFactory *ifactory, gchar *branch_path,
+ gpointer callback, gpointer data)
+{
+ GtkWidget *menuitem;
+ gchar *menu_path;
+ GSList *cur;
+ gchar *action, *action_p;
+ GList *amenu;
+ GtkItemFactoryEntry ifentry = {NULL, NULL, NULL, 0, "<Branch>"};
+
+ ifentry.path = branch_path;
+ menuitem = gtk_item_factory_get_widget(ifactory, branch_path);
+ g_return_if_fail(menuitem != NULL);
+
+ amenu = GTK_MENU_SHELL(menuitem)->children;
+ while (amenu != NULL) {
+ GList *alist = amenu->next;
+ gtk_widget_destroy(GTK_WIDGET(amenu->data));
+ amenu = alist;
+ }
+
+ ifentry.accelerator = NULL;
+ ifentry.callback_action = 0;
+ ifentry.callback = callback;
+ ifentry.item_type = NULL;
+
+ for (cur = prefs_common.actions_list; cur; cur = cur->next) {
+ action = g_strdup((gchar *)cur->data);
+ action_p = strstr(action, ": ");
+ if (action_p && action_p[2] &&
+ action_get_type(&action_p[2]) != ACTION_ERROR) {
+ action_p[0] = '\0';
+ menu_path = g_strdup_printf("%s/%s", branch_path,
+ action);
+ ifentry.path = menu_path;
+ gtk_item_factory_create_item(ifactory, &ifentry, data,
+ 1);
+ g_free(menu_path);
+ }
+ g_free(action);
+ ifentry.callback_action++;
+ }
+}
+
+static void compose_actions_execute_cb(Compose *compose, guint action_nb,
+ GtkWidget *widget)
+{
+ gchar *buf, *action;
+ ActionType action_type;
+
+ g_return_if_fail(action_nb < g_slist_length(prefs_common.actions_list));
+
+ buf = (gchar *)g_slist_nth_data(prefs_common.actions_list, action_nb);
+ g_return_if_fail(buf != NULL);
+ action = strstr(buf, ": ");
+ g_return_if_fail(action != NULL);
+
+ /* Point to the beginning of the command-line */
+ action += 2;
+
+ action_type = action_get_type(action);
+ if (action_type & (ACTION_SINGLE | ACTION_MULTIPLE)) {
+ alertpanel_warning
+ (_("The selected action cannot be used in the compose window\n"
+ "because it contains %%f, %%F or %%p."));
+ return;
+ }
+
+ execute_actions(action, NULL, compose->text, 0, NULL);
+}
+
+static void mainwin_actions_execute_cb(MainWindow *mainwin, guint action_nb,
+ GtkWidget *widget)
+{
+ GSList *msg_list;
+
+ msg_list = summary_get_selected_msg_list(mainwin->summaryview);
+ message_actions_execute(mainwin->messageview, action_nb, msg_list);
+ g_slist_free(msg_list);
+}
+
+static void msgview_actions_execute_cb(MessageView *msgview, guint action_nb,
+ GtkWidget *widget)
+{
+ GSList *msg_list = NULL;
+
+ if (msgview->msginfo)
+ msg_list = g_slist_append(msg_list, msgview->msginfo);
+ message_actions_execute(msgview, action_nb, msg_list);
+ g_slist_free(msg_list);
+}
+
+static void message_actions_execute(MessageView *msgview, guint action_nb,
+ GSList *msg_list)
+{
+ TextView *textview;
+ MimeInfo *partinfo;
+ gchar *buf;
+ gchar *action;
+ GtkWidget *text = NULL;
+ guint body_pos = 0;
+
+ g_return_if_fail(action_nb < g_slist_length(prefs_common.actions_list));
+
+ buf = (gchar *)g_slist_nth_data(prefs_common.actions_list, action_nb);
+
+ g_return_if_fail(buf);
+ g_return_if_fail((action = strstr(buf, ": ")));
+
+ /* Point to the beginning of the command-line */
+ action += 2;
+
+ textview = messageview_get_current_textview(msgview);
+ if (textview) {
+ text = textview->text;
+ body_pos = textview->body_pos;
+ }
+ partinfo = messageview_get_selected_mime_part(msgview);
+
+ execute_actions(action, msg_list, text, body_pos, partinfo);
+}
+
+static gboolean execute_actions(gchar *action, GSList *msg_list,
+ GtkWidget *text, gint body_pos,
+ MimeInfo *partinfo)
+{
+ GSList *children_list = NULL;
+ gint is_ok = TRUE;
+ gint msg_list_len;
+ Children *children;
+ ChildInfo *child_info;
+ ActionType action_type;
+ MsgInfo *msginfo;
+ gchar *cmd;
+ gchar *sel_str = NULL;
+ gchar *msg_str = NULL;
+ gchar *user_str = NULL;
+ gchar *user_hidden_str = NULL;
+ GtkTextIter start_iter, end_iter;
+ gboolean is_selection = FALSE;
+
+ g_return_val_if_fail(action && *action, FALSE);
+
+ action_type = action_get_type(action);
+
+ if (action_type == ACTION_ERROR)
+ return FALSE; /* ERR: syntax error */
+
+ if (action_type & (ACTION_SINGLE | ACTION_MULTIPLE) && !msg_list)
+ return FALSE; /* ERR: file command without selection */
+
+ msg_list_len = g_slist_length(msg_list);
+
+ if (action_type & (ACTION_PIPE_OUT | ACTION_PIPE_IN | ACTION_INSERT)) {
+ if (msg_list_len > 1)
+ return FALSE; /* ERR: pipe + multiple selection */
+ if (!text)
+ return FALSE; /* ERR: pipe and no displayed text */
+ }
+
+ if (action_type & ACTION_SELECTION_STR) {
+ if (!text)
+ return FALSE; /* ERR: selection string but no text */
+ }
+
+ if (text) {
+ GtkTextBuffer *textbuf;
+
+ textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ is_selection = gtk_text_buffer_get_selection_bounds
+ (textbuf, &start_iter, &end_iter);
+ if (!is_selection) {
+ gtk_text_buffer_get_start_iter(textbuf, &start_iter);
+ gtk_text_buffer_get_end_iter(textbuf, &end_iter);
+ }
+ msg_str = gtk_text_buffer_get_text
+ (textbuf, &start_iter, &end_iter, FALSE);
+ if (is_selection)
+ sel_str = g_strdup(msg_str);
+ }
+
+ if (action_type & ACTION_USER_STR) {
+ if (!(user_str = get_user_string(action, ACTION_USER_STR))) {
+ g_free(msg_str);
+ g_free(sel_str);
+ return FALSE;
+ }
+ }
+
+ if (action_type & ACTION_USER_HIDDEN_STR) {
+ if (!(user_hidden_str =
+ get_user_string(action, ACTION_USER_HIDDEN_STR))) {
+ g_free(msg_str);
+ g_free(sel_str);
+ g_free(user_str);
+ return FALSE;
+ }
+ }
+
+ if (text && (action_type & ACTION_PIPE_OUT)) {
+ GtkTextBuffer *textbuf;
+ textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ gtk_text_buffer_delete(textbuf, &start_iter, &end_iter);
+ }
+
+ children = g_new0(Children, 1);
+
+ children->action = g_strdup(action);
+ children->action_type = action_type;
+ children->msg_text = text;
+ children->is_selection = is_selection;
+
+ if ((action_type & (ACTION_USER_IN | ACTION_USER_HIDDEN_IN)) &&
+ ((action_type & ACTION_SINGLE) == 0 || msg_list_len == 1))
+ children->open_in = 1;
+
+ if (action_type & ACTION_SINGLE) {
+ GSList *cur;
+
+ for (cur = msg_list; cur && is_ok == TRUE; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ if (!msginfo) {
+ is_ok = FALSE; /* ERR: msginfo missing */
+ break;
+ }
+ cmd = parse_action_cmd(action, msginfo, msg_list,
+ partinfo, user_str,
+ user_hidden_str, sel_str);
+ if (!cmd) {
+ debug_print("Action command error\n");
+ is_ok = FALSE; /* ERR: incorrect command */
+ break;
+ }
+ if ((child_info = fork_child(cmd, msg_str, children))) {
+ children_list = g_slist_append(children_list,
+ child_info);
+ }
+ g_free(cmd);
+ }
+ } else {
+ cmd = parse_action_cmd(action, NULL, msg_list, partinfo,
+ user_str, user_hidden_str, sel_str);
+ if (cmd) {
+ if ((child_info = fork_child(cmd, msg_str, children))) {
+ children_list = g_slist_append(children_list,
+ child_info);
+ }
+ g_free(cmd);
+ } else
+ is_ok = FALSE; /* ERR: incorrect command */
+ }
+
+ g_free(msg_str);
+ g_free(sel_str);
+ g_free(user_str);
+ g_free(user_hidden_str);
+
+ if (!children_list) {
+ /* If not waiting for children, return */
+ free_children(children);
+ } else {
+ GSList *cur;
+
+ children->list = children_list;
+ children->nb = g_slist_length(children_list);
+
+ for (cur = children_list; cur; cur = cur->next) {
+ child_info = (ChildInfo *) cur->data;
+ child_info->tag_status =
+ gdk_input_add(child_info->chld_status,
+ GDK_INPUT_READ,
+ catch_status, child_info);
+ }
+
+ create_io_dialog(children);
+ }
+
+ return is_ok;
+}
+
+static ChildInfo *fork_child(gchar *cmd, const gchar *msg_str,
+ Children *children)
+{
+ gint chld_in[2], chld_out[2], chld_err[2], chld_status[2];
+ gchar *cmdline[4];
+ pid_t pid, gch_pid;
+ ChildInfo *child_info;
+ gint sync;
+
+ sync = !(children->action_type & ACTION_ASYNC);
+
+ chld_in[0] = chld_in[1] = chld_out[0] = chld_out[1] = chld_err[0]
+ = chld_err[1] = chld_status[0] = chld_status[1] = -1;
+
+ if (sync) {
+ if (pipe(chld_status) || pipe(chld_in) || pipe(chld_out) ||
+ pipe(chld_err)) {
+ alertpanel_error(_("Command could not be started. "
+ "Pipe creation failed.\n%s"),
+ g_strerror(errno));
+ /* Closing fd = -1 fails silently */
+ close(chld_in[0]);
+ close(chld_in[1]);
+ close(chld_out[0]);
+ close(chld_out[1]);
+ close(chld_err[0]);
+ close(chld_err[1]);
+ close(chld_status[0]);
+ close(chld_status[1]);
+ return NULL; /* Pipe error */
+ }
+ }
+
+ debug_print("Forking child and grandchild.\n");
+ debug_print("Executing: /bin/sh -c %s\n", cmd);
+
+ pid = fork();
+ if (pid == 0) { /* Child */
+ if (setpgid(0, 0))
+ perror("setpgid");
+
+#ifdef GDK_WINDOWING_X11
+ close(ConnectionNumber(gdk_display));
+#endif /* GDK_WINDOWING_X11 */
+
+ gch_pid = fork();
+
+ if (gch_pid == 0) {
+ if (setpgid(0, getppid()))
+ perror("setpgid");
+
+ if (sync) {
+ if (children->action_type &
+ (ACTION_PIPE_IN |
+ ACTION_USER_IN |
+ ACTION_USER_HIDDEN_IN)) {
+ close(fileno(stdin));
+ dup (chld_in[0]);
+ }
+ close(chld_in[0]);
+ close(chld_in[1]);
+
+ close(fileno(stdout));
+ dup (chld_out[1]);
+ close(chld_out[0]);
+ close(chld_out[1]);
+
+ close(fileno(stderr));
+ dup (chld_err[1]);
+ close(chld_err[0]);
+ close(chld_err[1]);
+ }
+
+ cmdline[0] = "sh";
+ cmdline[1] = "-c";
+ cmdline[2] = cmd;
+ cmdline[3] = NULL;
+ execvp("/bin/sh", cmdline);
+
+ perror("execvp");
+ _exit(1);
+ } else if (gch_pid < (pid_t) 0) { /* Fork error */
+ if (sync)
+ write(chld_status[1], "1\n", 2);
+ perror("fork");
+ _exit(1);
+ } else { /* Child */
+ if (sync) {
+ close(chld_in[0]);
+ close(chld_in[1]);
+ close(chld_out[0]);
+ close(chld_out[1]);
+ close(chld_err[0]);
+ close(chld_err[1]);
+ close(chld_status[0]);
+
+ debug_print("Child: Waiting for grandchild\n");
+ waitpid(gch_pid, NULL, 0);
+ debug_print("Child: grandchild ended\n");
+ write(chld_status[1], "0\n", 2);
+ close(chld_status[1]);
+ }
+ _exit(0);
+ }
+ } else if (pid < 0) { /* Fork error */
+ alertpanel_error(_("Could not fork to execute the following "
+ "command:\n%s\n%s"),
+ cmd, g_strerror(errno));
+ return NULL;
+ }
+
+ /* Parent */
+
+ if (!sync) {
+ waitpid(pid, NULL, 0);
+ return NULL;
+ }
+
+ close(chld_in[0]);
+ if (!(children->action_type &
+ (ACTION_PIPE_IN | ACTION_USER_IN | ACTION_USER_HIDDEN_IN)))
+ close(chld_in[1]);
+ close(chld_out[1]);
+ close(chld_err[1]);
+ close(chld_status[1]);
+
+ child_info = g_new0(ChildInfo, 1);
+
+ child_info->children = children;
+
+ child_info->pid = pid;
+ child_info->cmd = g_strdup(cmd);
+ child_info->new_out = FALSE;
+ child_info->output = g_string_new(NULL);
+ child_info->chld_in =
+ (children->action_type &
+ (ACTION_PIPE_IN | ACTION_USER_IN | ACTION_USER_HIDDEN_IN))
+ ? chld_in [1] : -1;
+ child_info->chld_out = chld_out[0];
+ child_info->chld_err = chld_err[0];
+ child_info->chld_status = chld_status[0];
+ child_info->tag_in = -1;
+ child_info->tag_out = gdk_input_add(chld_out[0], GDK_INPUT_READ,
+ catch_output, child_info);
+ child_info->tag_err = gdk_input_add(chld_err[0], GDK_INPUT_READ,
+ catch_output, child_info);
+
+ if (!(children->action_type &
+ (ACTION_PIPE_IN | ACTION_PIPE_OUT | ACTION_INSERT)))
+ return child_info;
+
+ if ((children->action_type & ACTION_PIPE_IN) && msg_str) {
+ write(chld_in[1], msg_str, strlen(msg_str));
+ if (!(children->action_type &
+ (ACTION_USER_IN | ACTION_USER_HIDDEN_IN)))
+ close(chld_in[1]);
+ child_info->chld_in = -1; /* No more input */
+ }
+
+ return child_info;
+}
+
+static void kill_children_cb(GtkWidget *widget, gpointer data)
+{
+ GSList *cur;
+ Children *children = (Children *) data;
+ ChildInfo *child_info;
+
+ for (cur = children->list; cur; cur = cur->next) {
+ child_info = (ChildInfo *)(cur->data);
+ debug_print("Killing child group id %d\n", child_info->pid);
+ if (child_info->pid && kill(-child_info->pid, SIGTERM) < 0)
+ perror("kill");
+ }
+}
+
+static gint wait_for_children(Children *children)
+{
+ gboolean new_output;
+ ChildInfo *child_info;
+ GSList *cur;
+ gint nb = children->nb;
+
+ children->nb = 0;
+
+ cur = children->list;
+ new_output = FALSE;
+ while (cur) {
+ child_info = (ChildInfo *)cur->data;
+ if (child_info->pid)
+ children->nb++;
+ new_output |= child_info->new_out;
+ cur = cur->next;
+ }
+
+ children->output |= new_output;
+
+ if (new_output || (children->dialog && (nb != children->nb)))
+ update_io_dialog(children);
+
+ if (children->nb)
+ return FALSE;
+
+ if (!children->dialog) {
+ free_children(children);
+ } else if (!children->output) {
+ gtk_widget_destroy(children->dialog);
+ }
+
+ return FALSE;
+}
+
+static void send_input(GtkWidget *w, gpointer data)
+{
+ Children *children = (Children *) data;
+ ChildInfo *child_info = (ChildInfo *) children->list->data;
+
+ child_info->tag_in = gdk_input_add(child_info->chld_in,
+ GDK_INPUT_WRITE,
+ catch_input, children);
+ gtk_widget_set_sensitive(children->input_hbox, FALSE);
+}
+
+static gint delete_io_dialog_cb(GtkWidget *w, GdkEvent *e, gpointer data)
+{
+ hide_io_dialog_cb(w, data);
+ return TRUE;
+}
+
+static void hide_io_dialog_cb(GtkWidget *w, gpointer data)
+{
+
+ Children *children = (Children *)data;
+
+ if (!children->nb) {
+ g_signal_handlers_disconnect_matched
+ (G_OBJECT(children->dialog),
+ (GSignalMatchType)G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, children);
+ gtk_widget_destroy(children->dialog);
+ free_children(children);
+ }
+}
+
+static gint io_dialog_key_pressed_cb(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ hide_io_dialog_cb(widget, data);
+ return TRUE;
+}
+
+static void childinfo_close_pipes(ChildInfo *child_info)
+{
+ /* stdout and stderr pipes are guaranteed to be removed by
+ * their handler, but in case where we receive child exit notification
+ * before grand-child's pipes closing signals, we check them and close
+ * them if necessary
+ */
+ if (child_info->tag_in > 0)
+ gdk_input_remove(child_info->tag_in);
+ if (child_info->tag_out > 0)
+ gdk_input_remove(child_info->tag_out);
+ if (child_info->tag_err > 0)
+ gdk_input_remove(child_info->tag_err);
+
+ if (child_info->chld_in >= 0)
+ close(child_info->chld_in);
+ if (child_info->chld_out >= 0)
+ close(child_info->chld_out);
+ if (child_info->chld_err >= 0)
+ close(child_info->chld_err);
+
+ close(child_info->chld_status);
+}
+
+static void free_children(Children *children)
+{
+ ChildInfo *child_info;
+
+ debug_print("Freeing children data %p\n", children);
+
+ g_free(children->action);
+ while (children->list != NULL) {
+ child_info = (ChildInfo *)children->list->data;
+ g_free(child_info->cmd);
+ g_string_free(child_info->output, TRUE);
+ children->list = g_slist_remove(children->list, child_info);
+ g_free(child_info);
+ }
+ g_free(children);
+}
+
+static void update_io_dialog(Children *children)
+{
+ GSList *cur;
+
+ debug_print("Updating actions input/output dialog.\n");
+
+ if (!children->nb) {
+ gtk_widget_set_sensitive(children->abort_btn, FALSE);
+ gtk_widget_set_sensitive(children->close_btn, TRUE);
+ if (children->input_hbox)
+ gtk_widget_set_sensitive(children->input_hbox, FALSE);
+ gtk_widget_grab_focus(children->close_btn);
+ g_signal_connect(G_OBJECT(children->dialog),
+ "key_press_event",
+ G_CALLBACK(io_dialog_key_pressed_cb),
+ children);
+ }
+
+ if (children->output) {
+ GtkWidget *text = children->text;
+ GtkTextBuffer *textbuf;
+ GtkTextIter iter, start_iter, end_iter;
+ gchar *caption;
+ ChildInfo *child_info;
+
+ gtk_widget_show(children->scrolledwin);
+ textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ gtk_text_buffer_get_start_iter(textbuf, &start_iter);
+ gtk_text_buffer_get_end_iter(textbuf, &end_iter);
+ iter = start_iter;
+
+ for (cur = children->list; cur; cur = cur->next) {
+ child_info = (ChildInfo *)cur->data;
+ if (child_info->pid)
+ caption = g_strdup_printf
+ (_("--- Running: %s\n"),
+ child_info->cmd);
+ else
+ caption = g_strdup_printf
+ (_("--- Ended: %s\n"),
+ child_info->cmd);
+
+ gtk_text_buffer_insert(textbuf, &iter, caption, -1);
+ gtk_text_buffer_insert(textbuf, &iter,
+ child_info->output->str, -1);
+ g_free(caption);
+ child_info->new_out = FALSE;
+ }
+ }
+}
+
+static void create_io_dialog(Children *children)
+{
+ GtkWidget *dialog;
+ GtkWidget *vbox;
+ GtkWidget *entry = NULL;
+ GtkWidget *input_hbox = NULL;
+ GtkWidget *send_button;
+ GtkWidget *label;
+ GtkWidget *text;
+ GtkWidget *scrolledwin;
+ GtkWidget *hbox;
+ GtkWidget *abort_button;
+ GtkWidget *close_button;
+
+ debug_print("Creating action IO dialog\n");
+
+ dialog = gtk_dialog_new();
+ gtk_container_set_border_width
+ (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Action's input/output"));
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+ manage_window_set_transient(GTK_WINDOW(dialog));
+ g_signal_connect(G_OBJECT(dialog), "delete_event",
+ G_CALLBACK(delete_io_dialog_cb), children);
+ g_signal_connect(G_OBJECT(dialog), "destroy",
+ G_CALLBACK(hide_io_dialog_cb),
+ children);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
+ gtk_widget_show(vbox);
+
+ label = gtk_label_new(children->action);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_widget_set_size_request(scrolledwin, 480, 200);
+ gtk_widget_hide(scrolledwin);
+
+ text = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+ gtk_widget_show(text);
+
+ if (children->open_in) {
+ input_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(input_hbox);
+
+ entry = gtk_entry_new();
+ gtk_widget_set_size_request(entry, 320, -1);
+ g_signal_connect(G_OBJECT(entry), "activate",
+ G_CALLBACK(send_input), children);
+ gtk_box_pack_start(GTK_BOX(input_hbox), entry, TRUE, TRUE, 0);
+ if (children->action_type & ACTION_USER_HIDDEN_IN)
+ gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
+ gtk_widget_show(entry);
+
+ send_button = gtk_button_new_with_label(_(" Send "));
+ g_signal_connect(G_OBJECT(send_button), "clicked",
+ G_CALLBACK(send_input), children);
+ gtk_box_pack_start(GTK_BOX(input_hbox), send_button, FALSE,
+ FALSE, 0);
+ gtk_widget_show(send_button);
+
+ gtk_box_pack_start(GTK_BOX(vbox), input_hbox, FALSE, FALSE, 0);
+ gtk_widget_grab_focus(entry);
+ }
+
+ gtkut_button_set_create(&hbox, &abort_button, _("Abort"),
+ &close_button, _("Close"), NULL, NULL);
+ g_signal_connect(G_OBJECT(abort_button), "clicked",
+ G_CALLBACK(kill_children_cb), children);
+ g_signal_connect(G_OBJECT(close_button), "clicked",
+ G_CALLBACK(hide_io_dialog_cb), children);
+ gtk_widget_show(hbox);
+
+ if (children->nb)
+ gtk_widget_set_sensitive(close_button, FALSE);
+
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), hbox);
+
+ children->dialog = dialog;
+ children->scrolledwin = scrolledwin;
+ children->text = text;
+ children->input_hbox = children->open_in ? input_hbox : NULL;
+ children->input_entry = children->open_in ? entry : NULL;
+ children->abort_btn = abort_button;
+ children->close_btn = close_button;
+
+ gtk_widget_show(dialog);
+}
+
+static void catch_status(gpointer data, gint source, GdkInputCondition cond)
+{
+ ChildInfo *child_info = (ChildInfo *)data;
+ gchar buf;
+ gint c;
+
+ gdk_input_remove(child_info->tag_status);
+
+ c = read(source, &buf, 1);
+ debug_print("Child returned %c\n", buf);
+
+ waitpid(-child_info->pid, NULL, 0);
+ childinfo_close_pipes(child_info);
+ child_info->pid = 0;
+
+ wait_for_children(child_info->children);
+}
+
+static void catch_input(gpointer data, gint source, GdkInputCondition cond)
+{
+ Children *children = (Children *)data;
+ ChildInfo *child_info = (ChildInfo *)children->list->data;
+ gchar *input;
+ gint c, count, len;
+
+ debug_print("Sending input to grand child.\n");
+ if (!(cond && GDK_INPUT_WRITE))
+ return;
+
+ gdk_input_remove(child_info->tag_in);
+ child_info->tag_in = -1;
+
+ input = gtk_editable_get_chars(GTK_EDITABLE(children->input_entry),
+ 0, -1);
+ len = strlen(input);
+ count = 0;
+
+ do {
+ c = write(child_info->chld_in, input + count, len - count);
+ if (c >= 0)
+ count += c;
+ } while (c >= 0 && count < len);
+
+ if (c >= 0)
+ write(child_info->chld_in, "\n", 2);
+
+ g_free(input);
+
+ gtk_entry_set_text(GTK_ENTRY(children->input_entry), "");
+ gtk_widget_set_sensitive(children->input_hbox, TRUE);
+ close(child_info->chld_in);
+ child_info->chld_in = -1;
+ debug_print("Input to grand child sent.\n");
+}
+
+static void catch_output(gpointer data, gint source, GdkInputCondition cond)
+{
+ ChildInfo *child_info = (ChildInfo *)data;
+ gint c, i;
+ gchar buf[BUFFSIZE];
+
+ debug_print("Catching grand child's output.\n");
+ if (child_info->children->action_type &
+ (ACTION_PIPE_OUT | ACTION_INSERT)
+ && source == child_info->chld_out) {
+ GtkTextView *text =
+ GTK_TEXT_VIEW(child_info->children->msg_text);
+ GtkTextBuffer *textbuf = gtk_text_view_get_buffer(text);
+ GtkTextIter iter1, iter2;
+ GtkTextMark *mark;
+
+ mark = gtk_text_buffer_get_insert(textbuf);
+ gtk_text_buffer_get_iter_at_mark(textbuf, &iter1, mark);
+ gtk_text_buffer_get_iter_at_mark(textbuf, &iter2, mark);
+
+ while (TRUE) {
+ c = read(source, buf, sizeof(buf) - 1);
+ if (c == 0)
+ break;
+ gtk_text_buffer_insert(textbuf, &iter2, buf, c);
+ }
+
+ if (child_info->children->is_selection) {
+ gtk_text_buffer_place_cursor(textbuf, &iter1);
+ gtk_text_buffer_move_mark_by_name
+ (textbuf, "selection_bound", &iter2);
+ }
+ } else {
+ c = read(source, buf, sizeof(buf) - 1);
+ for (i = 0; i < c; i++)
+ g_string_append_c(child_info->output, buf[i]);
+ if (c > 0)
+ child_info->new_out = TRUE;
+ }
+ if (c == 0) {
+ if (source == child_info->chld_out) {
+ gdk_input_remove(child_info->tag_out);
+ child_info->tag_out = -1;
+ close(child_info->chld_out);
+ child_info->chld_out = -1;
+ } else {
+ gdk_input_remove(child_info->tag_err);
+ child_info->tag_err = -1;
+ close(child_info->chld_err);
+ child_info->chld_err = -1;
+ }
+ }
+
+ wait_for_children(child_info->children);
+}
+
+static gchar *get_user_string(const gchar *action, ActionType type)
+{
+ gchar *message;
+ gchar *user_str = NULL;
+
+ switch (type) {
+ case ACTION_USER_HIDDEN_STR:
+ message = g_strdup_printf
+ (_("Enter the argument for the following action:\n"
+ "(`%%h' will be replaced with the argument)\n"
+ " %s"),
+ action);
+ user_str = input_dialog_with_invisible
+ (_("Action's hidden user argument"), message, NULL);
+ break;
+ case ACTION_USER_STR:
+ message = g_strdup_printf
+ (_("Enter the argument for the following action:\n"
+ "(`%%u' will be replaced with the argument)\n"
+ " %s"),
+ action);
+ user_str = input_dialog
+ (_("Action's user argument"), message, NULL);
+ break;
+ default:
+ g_warning("Unsupported action type %d", type);
+ }
+
+ return user_str;
+}
diff --git a/src/action.h b/src/action.h
new file mode 100644
index 00000000..373073da
--- /dev/null
+++ b/src/action.h
@@ -0,0 +1,56 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ACTION_H__
+#define __ACTION_H__
+
+#include <glib.h>
+#include <gtk/gtkitemfactory.h>
+
+#include "mainwindow.h"
+#include "messageview.h"
+#include "compose.h"
+
+typedef enum
+{
+ ACTION_NONE = 1 << 0,
+ ACTION_PIPE_IN = 1 << 1,
+ ACTION_PIPE_OUT = 1 << 2,
+ ACTION_SINGLE = 1 << 3,
+ ACTION_MULTIPLE = 1 << 4,
+ ACTION_ASYNC = 1 << 5,
+ ACTION_USER_IN = 1 << 6,
+ ACTION_USER_HIDDEN_IN = 1 << 7,
+ ACTION_INSERT = 1 << 8,
+ ACTION_USER_STR = 1 << 9,
+ ACTION_USER_HIDDEN_STR = 1 << 10,
+ ACTION_SELECTION_STR = 1 << 11,
+ ACTION_ERROR = 1 << 30
+} ActionType;
+
+ActionType action_get_type (const gchar *action_str);
+
+void action_update_mainwin_menu (GtkItemFactory *ifactory,
+ MainWindow *mainwin);
+void action_update_msgview_menu (GtkItemFactory *ifactory,
+ MessageView *msgview);
+void action_update_compose_menu (GtkItemFactory *ifactory,
+ Compose *compose);
+
+#endif /* __ACTION_H__ */
diff --git a/src/addr_compl.c b/src/addr_compl.c
new file mode 100644
index 00000000..848147e7
--- /dev/null
+++ b/src/addr_compl.c
@@ -0,0 +1,954 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ *
+ * Copyright (C) 2000-2004 by Alfons Hoogervorst & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include "intl.h"
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtkscrolledwindow.h>
+
+#include <string.h>
+#include <ctype.h>
+#if (HAVE_WCTYPE_H && HAVE_WCHAR_H)
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+#include "xml.h"
+#include "addr_compl.h"
+#include "utils.h"
+#include "addressbook.h"
+#include "main.h"
+
+/* How it works:
+ *
+ * The address book is read into memory. We set up an address list
+ * containing all address book entries. Next we make the completion
+ * list, which contains all the completable strings, and store a
+ * reference to the address entry it belongs to.
+ * After calling the g_completion_complete(), we get a reference
+ * to a valid email address.
+ *
+ * Completion is very simplified. We never complete on another prefix,
+ * i.e. we neglect the next smallest possible prefix for the current
+ * completion cache. This is simply done so we might break up the
+ * addresses a little more (e.g. break up alfons@proteus.demon.nl into
+ * something like alfons, proteus, demon, nl; and then completing on
+ * any of those words).
+ */
+
+/* address_entry - structure which refers to the original address entry in the
+ * address book
+ */
+typedef struct
+{
+ gchar *name;
+ gchar *address;
+} address_entry;
+
+/* completion_entry - structure used to complete addresses, with a reference
+ * the the real address information.
+ */
+typedef struct
+{
+ gchar *string; /* string to complete */
+ address_entry *ref; /* address the string belongs to */
+} completion_entry;
+
+/*******************************************************************************/
+
+static gint g_ref_count; /* list ref count */
+static GList *g_completion_list; /* list of strings to be checked */
+static GList *g_address_list; /* address storage */
+static GCompletion *g_completion; /* completion object */
+
+/* To allow for continuing completion we have to keep track of the state
+ * using the following variables. No need to create a context object. */
+
+static gint g_completion_count; /* nr of addresses incl. the prefix */
+static gint g_completion_next; /* next prev address */
+static GSList *g_completion_addresses; /* unique addresses found in the
+ completion cache. */
+static gchar *g_completion_prefix; /* last prefix. (this is cached here
+ * because the prefix passed to g_completion
+ * is g_strdown()'ed */
+
+/*******************************************************************************/
+
+/* completion_func() - used by GTK to find the string data to be used for
+ * completion
+ */
+static gchar *completion_func(gpointer data)
+{
+ g_return_val_if_fail(data != NULL, NULL);
+
+ return ((completion_entry *)data)->string;
+}
+
+static void init_all(void)
+{
+ g_completion = g_completion_new(completion_func);
+ g_return_if_fail(g_completion != NULL);
+}
+
+static void free_all(void)
+{
+ GList *walk;
+
+ walk = g_list_first(g_completion_list);
+ for (; walk != NULL; walk = g_list_next(walk)) {
+ completion_entry *ce = (completion_entry *) walk->data;
+ g_free(ce->string);
+ g_free(walk->data);
+ }
+ g_list_free(g_completion_list);
+ g_completion_list = NULL;
+
+ walk = g_address_list;
+ for (; walk != NULL; walk = g_list_next(walk)) {
+ address_entry *ae = (address_entry *) walk->data;
+ g_free(ae->name);
+ g_free(ae->address);
+ g_free(walk->data);
+ }
+ g_list_free(g_address_list);
+ g_address_list = NULL;
+
+ g_completion_free(g_completion);
+ g_completion = NULL;
+}
+
+/* add_address() - adds address to the completion list. this function looks
+ * complicated, but it's only allocation checks.
+ */
+static gint add_address(const gchar *name, const gchar *address)
+{
+ address_entry *ae;
+ completion_entry *ce1;
+ completion_entry *ce2;
+
+ if (!name || !address) return -1;
+
+ ae = g_new0(address_entry, 1);
+ ce1 = g_new0(completion_entry, 1),
+ ce2 = g_new0(completion_entry, 1);
+
+ g_return_val_if_fail(ae != NULL, -1);
+ g_return_val_if_fail(ce1 != NULL && ce2 != NULL, -1);
+
+ ae->name = g_strdup(name);
+ ae->address = g_strdup(address);
+
+ /* GCompletion list is case sensitive */
+ ce1->string = g_utf8_strdown(name, -1);
+ ce2->string = g_utf8_strdown(address, -1);
+
+ ce1->ref = ce2->ref = ae;
+
+ g_completion_list = g_list_append(g_completion_list, ce1);
+ g_completion_list = g_list_append(g_completion_list, ce2);
+ g_address_list = g_list_append(g_address_list, ae);
+
+ return 0;
+}
+
+/* read_address_book()
+ */
+static void read_address_book(void) {
+ addressbook_load_completion( add_address );
+}
+
+/* start_address_completion() - returns the number of addresses
+ * that should be matched for completion.
+ */
+gint start_address_completion(void)
+{
+ clear_completion_cache();
+ if (!g_ref_count) {
+ init_all();
+ /* open the address book */
+ read_address_book();
+ /* merge the completion entry list into g_completion */
+ if (g_completion_list)
+ g_completion_add_items(g_completion, g_completion_list);
+ }
+ g_ref_count++;
+ debug_print("start_address_completion ref count %d\n", g_ref_count);
+
+ return g_list_length(g_completion_list);
+}
+
+/* get_address_from_edit() - returns a possible address (or a part)
+ * from an entry box. To make life easier, we only look at the last valid address
+ * component; address completion only works at the last string component in
+ * the entry box.
+ */
+gchar *get_address_from_edit(GtkEntry *entry, gint *start_pos)
+{
+ const gchar *edit_text, *p;
+ gint cur_pos;
+ gboolean in_quote = FALSE;
+ gboolean in_bracket = FALSE;
+ gchar *str;
+
+ edit_text = gtk_entry_get_text(entry);
+ if (edit_text == NULL) return NULL;
+
+ cur_pos = gtk_editable_get_position(GTK_EDITABLE(entry));
+
+ /* scan for a separator. doesn't matter if walk points at null byte. */
+ for (p = g_utf8_offset_to_pointer(edit_text, cur_pos);
+ p > edit_text;
+ p = g_utf8_prev_char(p)) {
+ if (*p == '"')
+ in_quote ^= TRUE;
+ else if (!in_quote) {
+ if (!in_bracket && *p == ',')
+ break;
+ else if (*p == '>')
+ in_bracket = TRUE;
+ else if (*p == '<')
+ in_bracket = FALSE;
+ }
+ }
+
+ /* have something valid */
+ if (g_utf8_strlen(p, -1) == 0)
+ return NULL;
+
+#define IS_VALID_CHAR(x) \
+ (isalnum(x) || (x) == '"' || (x) == '<' || ((guchar)(x) > 0x7f))
+
+ /* now scan back until we hit a valid character */
+ for (; *p && !IS_VALID_CHAR(*p); p = g_utf8_next_char(p))
+ ;
+
+#undef IS_VALID_CHAR
+
+ if (g_utf8_strlen(p, -1) == 0)
+ return NULL;
+
+ if (start_pos) *start_pos = g_utf8_pointer_to_offset(edit_text, p);
+
+ str = g_strdup(p);
+
+ return str;
+}
+
+/* replace_address_in_edit() - replaces an incompleted address with a completed one.
+ */
+void replace_address_in_edit(GtkEntry *entry, const gchar *newtext,
+ gint start_pos)
+{
+ if (!newtext) return;
+
+ gtk_editable_delete_text(GTK_EDITABLE(entry), start_pos, -1);
+ gtk_editable_insert_text(GTK_EDITABLE(entry), newtext, strlen(newtext),
+ &start_pos);
+ gtk_editable_set_position(GTK_EDITABLE(entry), -1);
+}
+
+/* complete_address() - tries to complete an addres, and returns the
+ * number of addresses found. use get_complete_address() to get one.
+ * returns zero if no match was found, otherwise the number of addresses,
+ * with the original prefix at index 0.
+ */
+guint complete_address(const gchar *str)
+{
+ GList *result;
+ gchar *d;
+ guint count, cpl;
+ completion_entry *ce;
+
+ g_return_val_if_fail(str != NULL, 0);
+
+ clear_completion_cache();
+ g_completion_prefix = g_strdup(str);
+
+ /* g_completion is case sensitive */
+ d = g_utf8_strdown(str, -1);
+ result = g_completion_complete(g_completion, d, NULL);
+
+ count = g_list_length(result);
+ if (count) {
+ /* create list with unique addresses */
+ for (cpl = 0, result = g_list_first(result);
+ result != NULL;
+ result = g_list_next(result)) {
+ ce = (completion_entry *)(result->data);
+ if (NULL == g_slist_find(g_completion_addresses,
+ ce->ref)) {
+ cpl++;
+ g_completion_addresses =
+ g_slist_append(g_completion_addresses,
+ ce->ref);
+ }
+ }
+ count = cpl + 1; /* index 0 is the original prefix */
+ g_completion_next = 1; /* we start at the first completed one */
+ } else {
+ g_free(g_completion_prefix);
+ g_completion_prefix = NULL;
+ }
+
+ g_completion_count = count;
+
+ g_free(d);
+
+ return count;
+}
+
+/* get_complete_address() - returns a complete address. the returned
+ * string should be freed
+ */
+gchar *get_complete_address(gint index)
+{
+ const address_entry *p;
+ gchar *address = NULL;
+
+ if (index < g_completion_count) {
+ if (index == 0)
+ address = g_strdup(g_completion_prefix);
+ else {
+ /* get something from the unique addresses */
+ p = (address_entry *)g_slist_nth_data
+ (g_completion_addresses, index - 1);
+ if (p != NULL) {
+ if (!p->name || p->name[0] == '\0')
+ address = g_strdup_printf(p->address);
+ else if (p->name[0] != '"' &&
+ strpbrk(p->name, ",.[]<>") != NULL)
+ address = g_strdup_printf
+ ("\"%s\" <%s>", p->name, p->address);
+ else
+ address = g_strdup_printf
+ ("%s <%s>", p->name, p->address);
+ }
+ }
+ }
+
+ return address;
+}
+
+gchar *get_next_complete_address(void)
+{
+ if (is_completion_pending()) {
+ gchar *res;
+
+ res = get_complete_address(g_completion_next);
+ g_completion_next += 1;
+ if (g_completion_next >= g_completion_count)
+ g_completion_next = 0;
+
+ return res;
+ } else
+ return NULL;
+}
+
+gchar *get_prev_complete_address(void)
+{
+ if (is_completion_pending()) {
+ int n = g_completion_next - 2;
+
+ /* real previous */
+ n = (n + (g_completion_count * 5)) % g_completion_count;
+
+ /* real next */
+ g_completion_next = n + 1;
+ if (g_completion_next >= g_completion_count)
+ g_completion_next = 0;
+ return get_complete_address(n);
+ } else
+ return NULL;
+}
+
+guint get_completion_count(void)
+{
+ if (is_completion_pending())
+ return g_completion_count;
+ else
+ return 0;
+}
+
+/* should clear up anything after complete_address() */
+void clear_completion_cache(void)
+{
+ if (is_completion_pending()) {
+ if (g_completion_prefix)
+ g_free(g_completion_prefix);
+
+ if (g_completion_addresses) {
+ g_slist_free(g_completion_addresses);
+ g_completion_addresses = NULL;
+ }
+
+ g_completion_count = g_completion_next = 0;
+ }
+}
+
+gboolean is_completion_pending(void)
+{
+ /* check if completion pending, i.e. we might satisfy a request for the next
+ * or previous address */
+ return g_completion_count;
+}
+
+/* invalidate_address_completion() - should be called if address book
+ * changed;
+ */
+gint invalidate_address_completion(void)
+{
+ if (g_ref_count) {
+ /* simply the same as start_address_completion() */
+ debug_print("Invalidation request for address completion\n");
+ free_all();
+ init_all();
+ read_address_book();
+ if (g_completion_list)
+ g_completion_add_items(g_completion, g_completion_list);
+ clear_completion_cache();
+ }
+
+ return g_list_length(g_completion_list);
+}
+
+gint end_address_completion(void)
+{
+ clear_completion_cache();
+
+ if (0 == --g_ref_count)
+ free_all();
+
+ debug_print("end_address_completion ref count %d\n", g_ref_count);
+
+ return g_ref_count;
+}
+
+
+/* address completion entry ui. the ui (completion list was inspired by galeon's
+ * auto completion list). remaining things powered by sylpheed's completion engine.
+ */
+
+#define ENTRY_DATA_TAB_HOOK "tab_hook" /* used to lookup entry */
+#define WINDOW_DATA_COMPL_ENTRY "compl_entry" /* used to store entry for compl. window */
+#define WINDOW_DATA_COMPL_CLIST "compl_clist" /* used to store clist for compl. window */
+
+static void address_completion_mainwindow_set_focus (GtkWindow *window,
+ GtkWidget *widget,
+ gpointer data);
+static gboolean address_completion_entry_key_pressed (GtkEntry *entry,
+ GdkEventKey *ev,
+ gpointer data);
+static gboolean address_completion_complete_address_in_entry
+ (GtkEntry *entry,
+ gboolean next);
+static void address_completion_create_completion_window (GtkEntry *entry);
+
+static void completion_window_select_row(GtkCList *clist,
+ gint row,
+ gint col,
+ GdkEvent *event,
+ GtkWidget **completion_window);
+static gboolean completion_window_button_press
+ (GtkWidget *widget,
+ GdkEventButton *event,
+ GtkWidget **completion_window);
+static gboolean completion_window_key_press
+ (GtkWidget *widget,
+ GdkEventKey *event,
+ GtkWidget **completion_window);
+
+
+static void completion_window_advance_to_row(GtkCList *clist, gint row)
+{
+ g_return_if_fail(row < g_completion_count);
+ gtk_clist_select_row(clist, row, 0);
+}
+
+static void completion_window_advance_selection(GtkCList *clist, gboolean forward)
+{
+ int row;
+
+ g_return_if_fail(clist != NULL);
+ g_return_if_fail(clist->selection != NULL);
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ row = forward ? (row + 1) % g_completion_count :
+ (row - 1) < 0 ? g_completion_count - 1 : row - 1;
+
+ gtk_clist_freeze(clist);
+ completion_window_advance_to_row(clist, row);
+ gtk_clist_thaw(clist);
+}
+
+#if 0
+/* completion_window_accept_selection() - accepts the current selection in the
+ * clist, and destroys the window */
+static void completion_window_accept_selection(GtkWidget **window,
+ GtkCList *clist,
+ GtkEntry *entry)
+{
+ gchar *address = NULL, *text = NULL;
+ gint cursor_pos, row;
+
+ g_return_if_fail(window != NULL);
+ g_return_if_fail(*window != NULL);
+ g_return_if_fail(clist != NULL);
+ g_return_if_fail(entry != NULL);
+ g_return_if_fail(clist->selection != NULL);
+
+ /* FIXME: I believe it's acceptable to access the selection member directly */
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ /* we just need the cursor position */
+ address = get_address_from_edit(entry, &cursor_pos);
+ g_free(address);
+ gtk_clist_get_text(clist, row, 0, &text);
+ replace_address_in_edit(entry, text, cursor_pos);
+
+ clear_completion_cache();
+ gtk_widget_destroy(*window);
+ *window = NULL;
+}
+#endif
+
+/* completion_window_apply_selection() - apply the current selection in the
+ * clist */
+static void completion_window_apply_selection(GtkCList *clist, GtkEntry *entry)
+{
+ gchar *address = NULL, *text = NULL;
+ gint cursor_pos, row;
+
+ g_return_if_fail(clist != NULL);
+ g_return_if_fail(entry != NULL);
+ g_return_if_fail(clist->selection != NULL);
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ address = get_address_from_edit(entry, &cursor_pos);
+ g_free(address);
+ gtk_clist_get_text(clist, row, 0, &text);
+ replace_address_in_edit(entry, text, cursor_pos);
+}
+
+/* should be called when creating the main window containing address
+ * completion entries */
+void address_completion_start(GtkWidget *mainwindow)
+{
+ start_address_completion();
+
+ /* register focus change hook */
+ g_signal_connect(G_OBJECT(mainwindow), "set_focus",
+ G_CALLBACK(address_completion_mainwindow_set_focus),
+ mainwindow);
+}
+
+/* Need unique data to make unregistering signal handler possible for the auto
+ * completed entry */
+#define COMPLETION_UNIQUE_DATA (GINT_TO_POINTER(0xfeefaa))
+
+void address_completion_register_entry(GtkEntry *entry)
+{
+ g_return_if_fail(entry != NULL);
+ g_return_if_fail(GTK_IS_ENTRY(entry));
+
+ /* add hooked property */
+ g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry);
+
+ /* add keypress event */
+ g_signal_connect_closure
+ (G_OBJECT(entry), "key_press_event",
+ g_cclosure_new
+ (G_CALLBACK(address_completion_entry_key_pressed),
+ COMPLETION_UNIQUE_DATA, NULL),
+ FALSE);
+}
+
+void address_completion_unregister_entry(GtkEntry *entry)
+{
+ GObject *entry_obj;
+
+ g_return_if_fail(entry != NULL);
+ g_return_if_fail(GTK_IS_ENTRY(entry));
+
+ entry_obj = g_object_get_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK);
+ g_return_if_fail(entry_obj);
+ g_return_if_fail(entry_obj == G_OBJECT(entry));
+
+ /* has the hooked property? */
+ g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL);
+
+ /* remove the hook */
+ g_signal_handlers_disconnect_by_func
+ (G_OBJECT(entry),
+ G_CALLBACK(address_completion_entry_key_pressed),
+ COMPLETION_UNIQUE_DATA);
+}
+
+/* should be called when main window with address completion entries
+ * terminates.
+ * NOTE: this function assumes that it is called upon destruction of
+ * the window */
+void address_completion_end(GtkWidget *mainwindow)
+{
+ /* if address_completion_end() is really called on closing the window,
+ * we don't need to unregister the set_focus_cb */
+ end_address_completion();
+}
+
+/* if focus changes to another entry, then clear completion cache */
+static void address_completion_mainwindow_set_focus(GtkWindow *window,
+ GtkWidget *widget,
+ gpointer data)
+{
+ if (widget && GTK_IS_ENTRY(widget) &&
+ g_object_get_data(G_OBJECT(widget), ENTRY_DATA_TAB_HOOK))
+ clear_completion_cache();
+}
+
+/* watch for tabs in one of the address entries. if no tab then clear the
+ * completion cache */
+static gboolean address_completion_entry_key_pressed(GtkEntry *entry,
+ GdkEventKey *ev,
+ gpointer data)
+{
+ if (ev->keyval == GDK_Tab) {
+ if (address_completion_complete_address_in_entry(entry, TRUE)) {
+ address_completion_create_completion_window(entry);
+ /* route a void character to the default handler */
+ /* this is a dirty hack; we're actually changing a key
+ * reported by the system. */
+ ev->keyval = GDK_AudibleBell_Enable;
+ ev->state &= ~GDK_SHIFT_MASK;
+ //gtk_signal_emit_stop_by_name(G_OBJECT(entry),
+ // "key_press_event");
+ return TRUE; //
+ } else {
+ /* old behaviour */
+ }
+ } else if (ev->keyval == GDK_Shift_L
+ || ev->keyval == GDK_Shift_R
+ || ev->keyval == GDK_Control_L
+ || ev->keyval == GDK_Control_R
+ || ev->keyval == GDK_Caps_Lock
+ || ev->keyval == GDK_Shift_Lock
+ || ev->keyval == GDK_Meta_L
+ || ev->keyval == GDK_Meta_R
+ || ev->keyval == GDK_Alt_L
+ || ev->keyval == GDK_Alt_R) {
+ /* these buttons should not clear the cache... */
+ } else
+ clear_completion_cache();
+
+ return FALSE;
+}
+
+/* initialize the completion cache and put first completed string
+ * in entry. this function used to do back cycling but this is not
+ * currently used. since the address completion behaviour has been
+ * changed regularly, we keep the feature in case someone changes
+ * his / her mind again. :) */
+static gboolean address_completion_complete_address_in_entry(GtkEntry *entry,
+ gboolean next)
+{
+ gint ncount, cursor_pos;
+ gchar *address, *new = NULL;
+ gboolean completed = FALSE;
+
+ g_return_val_if_fail(entry != NULL, FALSE);
+
+ if (!GTK_WIDGET_HAS_FOCUS(entry)) return FALSE;
+
+ /* get an address component from the cursor */
+ address = get_address_from_edit(entry, &cursor_pos);
+ if (!address) return FALSE;
+
+ /* still something in the cache */
+ if (is_completion_pending()) {
+ new = next ? get_next_complete_address() :
+ get_prev_complete_address();
+ } else {
+ if (0 < (ncount = complete_address(address)))
+ new = get_next_complete_address();
+ }
+
+ if (new) {
+ /* prevent "change" signal */
+ /* replace_address_in_edit(entry, new, cursor_pos); */
+ g_free(new);
+ completed = TRUE;
+ }
+
+ g_free(address);
+
+ return completed;
+}
+
+static void address_completion_create_completion_window(GtkEntry *entry_)
+{
+ static GtkWidget *completion_window;
+ gint x, y, height, width, depth;
+ GtkWidget *scroll, *clist;
+ GtkRequisition r;
+ guint count = 0;
+ GtkWidget *entry = GTK_WIDGET(entry_);
+
+ if (completion_window) {
+ gtk_widget_destroy(completion_window);
+ completion_window = NULL;
+ }
+
+ scroll = gtk_scrolled_window_new(NULL, NULL);
+ clist = gtk_clist_new(1);
+ gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE);
+
+ completion_window = gtk_window_new(GTK_WINDOW_POPUP);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_container_add(GTK_CONTAINER(completion_window), scroll);
+ gtk_container_add(GTK_CONTAINER(scroll), clist);
+
+ /* set the unique data so we can always get back the entry and
+ * clist window to which this completion window has been attached */
+ g_object_set_data(G_OBJECT(completion_window),
+ WINDOW_DATA_COMPL_ENTRY, entry_);
+ g_object_set_data(G_OBJECT(completion_window),
+ WINDOW_DATA_COMPL_CLIST, clist);
+
+ g_signal_connect(G_OBJECT(clist), "select_row",
+ G_CALLBACK(completion_window_select_row),
+ &completion_window);
+
+ for (count = 0; count < get_completion_count(); count++) {
+ gchar *text[] = {NULL, NULL};
+
+ text[0] = get_complete_address(count);
+ gtk_clist_append(GTK_CLIST(clist), text);
+ g_free(text[0]);
+ }
+
+ gdk_window_get_geometry(entry->window, &x, &y, &width, &height, &depth);
+ gdk_window_get_deskrelative_origin (entry->window, &x, &y);
+ y += height;
+ gtk_window_move(GTK_WINDOW(completion_window), x, y);
+
+ gtk_widget_size_request(clist, &r);
+ gtk_widget_set_size_request(completion_window, width, r.height);
+ gtk_widget_show_all(completion_window);
+ gtk_widget_size_request(clist, &r);
+
+ if ((y + r.height) > gdk_screen_height()) {
+ gtk_window_set_policy(GTK_WINDOW(completion_window),
+ TRUE, FALSE, FALSE);
+ gtk_widget_set_size_request(completion_window, width,
+ gdk_screen_height () - y);
+ }
+
+ g_signal_connect(G_OBJECT(completion_window),
+ "button-press-event",
+ G_CALLBACK(completion_window_button_press),
+ &completion_window);
+ g_signal_connect(G_OBJECT(completion_window),
+ "key-press-event",
+ G_CALLBACK(completion_window_key_press),
+ &completion_window);
+ gdk_pointer_grab(completion_window->window, TRUE,
+ GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, GDK_CURRENT_TIME);
+ gtk_grab_add(completion_window);
+
+ /* this gets rid of the irritating focus rectangle that doesn't
+ * follow the selection */
+ GTK_WIDGET_UNSET_FLAGS(clist, GTK_CAN_FOCUS);
+ gtk_clist_select_row(GTK_CLIST(clist), 1, 0);
+}
+
+
+/* row selection sends completed address to entry.
+ * note: event is NULL if selected by anything else than a mouse button. */
+static void completion_window_select_row(GtkCList *clist, gint row, gint col,
+ GdkEvent *event,
+ GtkWidget **completion_window)
+{
+ GtkEntry *entry;
+
+ g_return_if_fail(completion_window != NULL);
+ g_return_if_fail(*completion_window != NULL);
+
+ entry = GTK_ENTRY(g_object_get_data(G_OBJECT(*completion_window),
+ WINDOW_DATA_COMPL_ENTRY));
+ g_return_if_fail(entry != NULL);
+
+ completion_window_apply_selection(clist, entry);
+
+ if (!event || event->type != GDK_BUTTON_RELEASE)
+ return;
+
+ clear_completion_cache();
+ gtk_widget_destroy(*completion_window);
+ *completion_window = NULL;
+}
+
+/* completion_window_button_press() - check is mouse click is anywhere
+ * else (not in the completion window). in that case the completion
+ * window is destroyed, and the original prefix is restored */
+static gboolean completion_window_button_press(GtkWidget *widget,
+ GdkEventButton *event,
+ GtkWidget **completion_window)
+{
+ GtkWidget *event_widget, *entry;
+ gchar *prefix;
+ gint cursor_pos;
+ gboolean restore = TRUE;
+
+ g_return_val_if_fail(completion_window != NULL, FALSE);
+ g_return_val_if_fail(*completion_window != NULL, FALSE);
+
+ entry = GTK_WIDGET(g_object_get_data(G_OBJECT(*completion_window),
+ WINDOW_DATA_COMPL_ENTRY));
+ g_return_val_if_fail(entry != NULL, FALSE);
+
+ event_widget = gtk_get_event_widget((GdkEvent *)event);
+ if (event_widget != widget) {
+ while (event_widget) {
+ if (event_widget == widget)
+ return FALSE;
+ else if (event_widget == entry) {
+ restore = FALSE;
+ break;
+ }
+ event_widget = event_widget->parent;
+ }
+ }
+
+ if (restore) {
+ prefix = get_complete_address(0);
+ g_free(get_address_from_edit(GTK_ENTRY(entry), &cursor_pos));
+ replace_address_in_edit(GTK_ENTRY(entry), prefix, cursor_pos);
+ g_free(prefix);
+ }
+
+ clear_completion_cache();
+ gtk_widget_destroy(*completion_window);
+ *completion_window = NULL;
+
+ return TRUE;
+}
+
+static gboolean completion_window_key_press(GtkWidget *widget,
+ GdkEventKey *event,
+ GtkWidget **completion_window)
+{
+ GdkEventKey tmp_event;
+ GtkWidget *entry;
+ gchar *prefix;
+ gint cursor_pos;
+ GtkWidget *clist;
+
+ g_return_val_if_fail(completion_window != NULL, FALSE);
+ g_return_val_if_fail(*completion_window != NULL, FALSE);
+
+ entry = GTK_WIDGET(g_object_get_data(G_OBJECT(*completion_window),
+ WINDOW_DATA_COMPL_ENTRY));
+ clist = GTK_WIDGET(g_object_get_data(G_OBJECT(*completion_window),
+ WINDOW_DATA_COMPL_CLIST));
+ g_return_val_if_fail(entry != NULL, FALSE);
+
+ /* allow keyboard navigation in the alternatives clist */
+ if (event->keyval == GDK_Up || event->keyval == GDK_Down ||
+ event->keyval == GDK_Page_Up || event->keyval == GDK_Page_Down) {
+ completion_window_advance_selection
+ (GTK_CLIST(clist),
+ event->keyval == GDK_Down ||
+ event->keyval == GDK_Page_Down ? TRUE : FALSE);
+ return FALSE;
+ }
+
+ /* also make tab / shift tab go to next previous completion entry. we're
+ * changing the key value */
+ if (event->keyval == GDK_Tab || event->keyval == GDK_ISO_Left_Tab) {
+ event->keyval = (event->state & GDK_SHIFT_MASK)
+ ? GDK_Up : GDK_Down;
+ /* need to reset shift state if going up */
+ if (event->state & GDK_SHIFT_MASK)
+ event->state &= ~GDK_SHIFT_MASK;
+ completion_window_advance_selection(GTK_CLIST(clist),
+ event->keyval == GDK_Down ? TRUE : FALSE);
+ return FALSE;
+ }
+
+ /* look for presses that accept the selection */
+ if (event->keyval == GDK_Return || event->keyval == GDK_space) {
+ clear_completion_cache();
+ gtk_widget_destroy(*completion_window);
+ *completion_window = NULL;
+ return FALSE;
+ }
+
+ /* key state keys should never be handled */
+ if (event->keyval == GDK_Shift_L
+ || event->keyval == GDK_Shift_R
+ || event->keyval == GDK_Control_L
+ || event->keyval == GDK_Control_R
+ || event->keyval == GDK_Caps_Lock
+ || event->keyval == GDK_Shift_Lock
+ || event->keyval == GDK_Meta_L
+ || event->keyval == GDK_Meta_R
+ || event->keyval == GDK_Alt_L
+ || event->keyval == GDK_Alt_R) {
+ return FALSE;
+ }
+
+ /* other key, let's restore the prefix (orignal text) */
+ prefix = get_complete_address(0);
+ g_free(get_address_from_edit(GTK_ENTRY(entry), &cursor_pos));
+ replace_address_in_edit(GTK_ENTRY(entry), prefix, cursor_pos);
+ g_free(prefix);
+ clear_completion_cache();
+
+ /* make sure anything we typed comes in the edit box */
+ tmp_event.type = event->type;
+ tmp_event.window = entry->window;
+ tmp_event.send_event = TRUE;
+ tmp_event.time = event->time;
+ tmp_event.state = event->state;
+ tmp_event.keyval = event->keyval;
+ tmp_event.length = event->length;
+ tmp_event.string = event->string;
+ gtk_widget_event(entry, (GdkEvent *)&tmp_event);
+
+ /* and close the completion window */
+ gtk_widget_destroy(*completion_window);
+ *completion_window = NULL;
+
+ return TRUE;
+}
diff --git a/src/addr_compl.h b/src/addr_compl.h
new file mode 100644
index 00000000..7eca78ae
--- /dev/null
+++ b/src/addr_compl.h
@@ -0,0 +1,54 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ *
+ * Copyright (C) 2000-2004 by Alfons Hoogervorst & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ADDR_COMPL_H__
+#define __ADDR_COMPL_H__
+
+gint start_address_completion (void);
+gint invalidate_address_completion (void);
+
+guint complete_address (const gchar *str);
+
+gchar *get_address_from_edit (GtkEntry *entry,
+ gint *start_pos);
+void replace_address_in_edit (GtkEntry *entry,
+ const gchar *newtext,
+ gint start_pos);
+
+gchar *get_complete_address (gint index);
+
+gchar *get_next_complete_address (void);
+gchar *get_prev_complete_address (void);
+guint get_completion_count (void);
+
+gboolean is_completion_pending (void);
+
+void clear_completion_cache (void);
+
+gint end_address_completion (void);
+
+/* ui functions */
+
+void address_completion_start (GtkWidget *mainwindow);
+void address_completion_register_entry (GtkEntry *entry);
+void address_completion_unregister_entry (GtkEntry *entry);
+void address_completion_end (GtkWidget *mainwindow);
+
+#endif /* __ADDR_COMPL_H__ */
diff --git a/src/addrbook.c b/src/addrbook.c
new file mode 100644
index 00000000..32c0e777
--- /dev/null
+++ b/src/addrbook.c
@@ -0,0 +1,2010 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General functions for accessing external address book files.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <math.h>
+#include <setjmp.h>
+
+#include "xml.h"
+#include "mgutils.h"
+#include "addritem.h"
+#include "addrcache.h"
+#include "addrbook.h"
+
+#ifndef DEV_STANDALONE
+#include "prefs.h"
+#include "codeconv.h"
+#endif
+
+#define ADDRBOOK_MAX_SEARCH_COUNT 1000
+#define ADDRBOOK_PREFIX "addrbook-"
+#define ADDRBOOK_SUFFIX ".xml"
+#define FILE_NUMDIGITS 6
+
+#define ID_TIME_OFFSET 998000000
+/*
+* Create new address book.
+*/
+AddressBookFile *addrbook_create_book() {
+ AddressBookFile *book;
+
+ book = g_new0( AddressBookFile, 1 );
+ book->name = NULL;
+ book->path = NULL;
+ book->fileName = NULL;
+ book->retVal = MGU_SUCCESS;
+ book->addressCache = addrcache_create();
+
+ book->tempList = NULL;
+ book->readFlag = FALSE;
+ book->dirtyFlag = FALSE;
+ book->modifyFlag = TRUE;
+ book->accessFlag = FALSE;
+ book->tempHash = NULL;
+ return book;
+}
+
+/*
+* Specify name to be used.
+*/
+void addrbook_set_name( AddressBookFile *book, const gchar *value ) {
+ g_return_if_fail( book != NULL );
+ book->name = mgu_replace_string( book->name, value );
+}
+void addrbook_set_path( AddressBookFile *book, const gchar *value ) {
+ g_return_if_fail( book != NULL );
+ book->path = mgu_replace_string( book->path, value );
+ book->dirtyFlag = TRUE;
+}
+void addrbook_set_file( AddressBookFile *book, const gchar *value ) {
+ g_return_if_fail( book != NULL );
+ book->fileName = mgu_replace_string( book->fileName, value );
+ book->dirtyFlag = TRUE;
+}
+void addrbook_set_accessed( AddressBookFile *book, const gboolean value ) {
+ g_return_if_fail( book != NULL );
+ book->accessFlag = value;
+}
+gboolean addrbook_get_modified( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, FALSE );
+ return book->modifyFlag;
+}
+gboolean addrbook_get_accessed( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, FALSE );
+ return book->accessFlag;
+}
+gboolean addrbook_get_read_flag( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, FALSE );
+ return book->readFlag;
+}
+gint addrbook_get_status( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, -1 );
+ return book->retVal;
+}
+ItemFolder *addrbook_get_root_folder( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, NULL );
+ return addrcache_get_root_folder( book->addressCache );
+}
+GList *addrbook_get_list_folder( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, NULL );
+ return addrcache_get_list_folder( book->addressCache );
+}
+GList *addrbook_get_list_person( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, NULL );
+ return addrcache_get_list_person( book->addressCache );
+}
+gchar *addrbook_get_name( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, NULL );
+ return book->name;
+}
+
+/*
+* Empty address book.
+*/
+void addrbook_empty_book( AddressBookFile *book ) {
+ g_return_if_fail( book != NULL );
+
+ /* Free up folders and hash table */
+ addrcache_clear( book->addressCache );
+
+ g_list_free( book->tempList );
+ book->tempList = NULL;
+
+ /* Reset to initial state */
+ book->retVal = MGU_SUCCESS;
+ book->tempHash = NULL;
+ book->readFlag = FALSE;
+ book->dirtyFlag = FALSE;
+ book->modifyFlag = FALSE;
+ book->accessFlag = FALSE;
+}
+
+/*
+* Free address book.
+*/
+void addrbook_free_book( AddressBookFile *book ) {
+ g_return_if_fail( book != NULL );
+
+ g_free( book->name );
+ g_free( book->path );
+ g_free( book->fileName );
+ book->name = NULL;
+ book->path = NULL;
+ book->fileName = NULL;
+
+ /* Free up folders and hash table */
+ addrcache_free( book->addressCache );
+ book->addressCache = NULL;
+
+ g_list_free( book->tempList );
+ book->tempList = NULL;
+
+ book->retVal = MGU_SUCCESS;
+ book->tempHash = NULL;
+ book->readFlag = FALSE;
+ book->dirtyFlag = FALSE;
+ book->modifyFlag = FALSE;
+ book->accessFlag = FALSE;
+
+ g_free( book );
+}
+
+/*
+* Print list of items.
+*/
+void addrbook_print_item_list( GList *list, FILE *stream ) {
+ GList *node = list;
+
+ while( node ) {
+ AddrItemObject *obj = node->data;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ addritem_print_item_person( ( ItemPerson * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ addritem_print_item_group( ( ItemGroup * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_FOLDER ) {
+ addritem_print_item_folder( ( ItemFolder * ) obj, stream );
+ }
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\t---\n" );
+}
+
+/*
+* Print address book.
+*/
+void addrbook_print_book( AddressBookFile *book, FILE *stream ) {
+ g_return_if_fail( book != NULL );
+
+ fprintf( stream, "AddressBook:\n" );
+ fprintf( stream, "\tname : '%s'\n", book->name );
+ fprintf( stream, "\tpath : '%s'\n", book->path );
+ fprintf( stream, "\tfile : '%s'\n", book->fileName );
+ fprintf( stream, "\tstatus: %d : '%s'\n", book->retVal, mgu_error2string( book->retVal ) );
+ addrcache_print( book->addressCache, stream );
+}
+
+/*
+* Dump entire address book traversing folders.
+*/
+void addrbook_dump_book( AddressBookFile *book, FILE *stream ) {
+ ItemFolder *folder;
+
+ g_return_if_fail( book != NULL );
+
+ addrbook_print_book( book, stream );
+ folder = book->addressCache->rootFolder;
+ addritem_print_item_folder( folder, stream );
+}
+
+/*
+* Remove group from address book.
+* param: group Group to remove.
+* return: Group, or NULL if not found. Note that object should still be freed.
+*/
+ItemGroup *addrbook_remove_group( AddressBookFile *book, ItemGroup *group ) {
+ ItemGroup *item;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ item = addrcache_remove_group( book->addressCache, group );
+ if( item ) book->dirtyFlag = TRUE;
+ return item;
+}
+
+/*
+* Remove specified person from address book.
+* param: person Person to remove.
+* return: Person, or NULL if not found. Note that object should still be freed.
+*/
+ItemPerson *addrbook_remove_person( AddressBookFile *book, ItemPerson *person ) {
+ ItemPerson *item;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ item = addrcache_remove_person( book->addressCache, person );
+ if( item ) book->dirtyFlag = TRUE;
+ return item;
+}
+
+/*
+* Remove email address in address book for specified person.
+* param: person Person.
+* email EMail to remove.
+* return: EMail object, or NULL if not found. Note that object should still be freed.
+*/
+ItemEMail *addrbook_person_remove_email( AddressBookFile *book, ItemPerson *person, ItemEMail *email ) {
+ ItemEMail *item;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ item = addrcache_person_remove_email( book->addressCache, person, email );
+ if( item ); book->dirtyFlag = TRUE;
+ return item;
+}
+
+/* **********************************************************************
+* Read/Write XML data file...
+* ===========================
+* Notes:
+* 1) The address book is structured as follows:
+*
+* address-book
+* person
+* address-list
+* address
+* attribute-list
+* attribute
+* group
+* member-list
+* member
+* folder
+* item-list
+* item
+*
+* 2) This sequence of elements was chosen so that the most important
+* elements (person and their email addresses) appear first.
+*
+* 3) Groups then appear. When groups are loaded, person's email
+* addresses have already been loaded and can be found.
+*
+* 4) Finally folders are loaded. Any forward and backward references
+* to folders, groups and persons in the folders are resolved after
+* loading.
+*
+* ***********************************************************************
+*/
+
+/* Element tag names */
+#define AB_ELTAG_ADDRESS "address"
+#define AB_ELTAG_ATTRIBUTE "attribute"
+#define AB_ELTAG_ATTRIBUTE_LIST "attribute-list"
+#define AB_ELTAG_ADDRESS_LIST "address-list"
+#define AB_ELTAG_MEMBER "member"
+#define AB_ELTAG_MEMBER_LIST "member-list"
+#define AB_ELTAG_ITEM "item"
+#define AB_ELTAG_ITEM_LIST "item-list"
+#define AB_ELTAG_ADDRESS_BOOK "address-book"
+#define AB_ELTAG_PERSON "person"
+#define AB_ELTAG_GROUP "group"
+#define AB_ELTAG_FOLDER "folder"
+
+/* Attribute tag names */
+#define AB_ATTAG_TYPE "type"
+#define AB_ATTAG_UID "uid"
+#define AB_ATTAG_NAME "name"
+#define AB_ATTAG_REMARKS "remarks"
+#define AB_ATTAG_FIRST_NAME "first-name"
+#define AB_ATTAG_LAST_NAME "last-name"
+#define AB_ATTAG_NICK_NAME "nick-name"
+#define AB_ATTAG_COMMON_NAME "cn"
+#define AB_ATTAG_ALIAS "alias"
+#define AB_ATTAG_EMAIL "email"
+#define AB_ATTAG_EID "eid"
+#define AB_ATTAG_PID "pid"
+
+/* Attribute values */
+#define AB_ATTAG_VAL_PERSON "person"
+#define AB_ATTAG_VAL_GROUP "group"
+#define AB_ATTAG_VAL_FOLDER "folder"
+
+/*
+* Parse address item for person.
+*/
+static void addrbook_parse_address( AddressBookFile *book, XMLFile *file, ItemPerson *person ) {
+ GList *attr;
+ gchar *name, *value;
+ ItemEMail *email = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( ! email ) email = addritem_create_item_email();
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ ADDRITEM_ID(email) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_ALIAS ) == 0 ) {
+ ADDRITEM_NAME(email) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_EMAIL ) == 0 ) {
+ email->address = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_REMARKS ) == 0 ) {
+ email->remarks = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ if( email ) {
+ if( person ) {
+ addrcache_person_add_email( book->addressCache, person, email );
+ }
+ else {
+ addritem_free_item_email( email );
+ email = NULL;
+ }
+ }
+}
+
+/*
+* Parse email address list.
+*/
+static void addrbook_parse_addr_list( AddressBookFile *book, XMLFile *file, ItemPerson *person ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_ADDRESS ) ) {
+ attr = xml_get_current_tag_attr(file);
+ addrbook_parse_address( book, file, person );
+ addrbook_parse_addr_list( book, file, person );
+ }
+ }
+}
+
+/*
+* Parse attibute for person.
+*/
+static void addrbook_parse_attribute( XMLFile *file, ItemPerson *person ) {
+ GList *attr;
+ gchar *name, *value;
+ gchar *element;
+ UserAttribute *uAttr = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( ! uAttr ) uAttr = addritem_create_attribute();
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ addritem_attrib_set_id( uAttr, value );
+ }
+ else if( strcmp( name, AB_ATTAG_NAME ) == 0 ) {
+ addritem_attrib_set_name( uAttr, value );
+ }
+ attr = g_list_next( attr );
+ }
+
+ element = xml_get_element( file );
+ addritem_attrib_set_value( uAttr, element );
+
+ if( uAttr ) {
+ if( person ) {
+ addritem_person_add_attribute( person, uAttr );
+ }
+ else {
+ addritem_free_attribute( uAttr );
+ uAttr = NULL;
+ }
+ }
+}
+
+/*
+* Parse attribute list.
+*/
+static void addrbook_parse_attr_list( AddressBookFile *book, XMLFile *file, ItemPerson *person ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_ATTRIBUTE ) ) {
+ attr = xml_get_current_tag_attr(file);
+ addrbook_parse_attribute( file, person );
+ addrbook_parse_attr_list( book, file, person );
+ }
+ }
+}
+
+/*
+* Parse person.
+*/
+static void addrbook_parse_person( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+ gchar *name, *value;
+ ItemPerson *person = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( ! person ) person = addritem_create_item_person();
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ ADDRITEM_ID(person) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_FIRST_NAME ) == 0 ) {
+ person->firstName = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_LAST_NAME ) == 0 ) {
+ person->lastName = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_NICK_NAME ) == 0 ) {
+ person->nickName = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_COMMON_NAME ) == 0 ) {
+ ADDRITEM_NAME(person) = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ADDRESS_LIST ) ) {
+ addrbook_parse_addr_list( book, file, person );
+ if( person ) {
+ addrcache_hash_add_person( book->addressCache, person );
+ }
+ }
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ATTRIBUTE_LIST ) ) {
+ addrbook_parse_attr_list( book, file, person );
+ }
+}
+
+/*
+* Parse group member.
+*/
+static void addrbook_parse_member( AddressBookFile *book, XMLFile *file, ItemGroup *group ) {
+ GList *attr;
+ gchar *name, *value;
+ gchar *pid = NULL, *eid = NULL;
+ ItemEMail *email = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, AB_ATTAG_PID ) == 0 ) {
+ pid = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_EID ) == 0 ) {
+ eid = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ email = addrcache_get_email( book->addressCache, pid, eid );
+ if( email ) {
+ if( group ) {
+ addrcache_group_add_email( book->addressCache, group, email );
+ }
+ else {
+ addritem_free_item_email( email );
+ email = NULL;
+ }
+ }
+}
+
+/*
+* Parse group member list.
+*/
+static void addrbook_parse_member_list( AddressBookFile *book, XMLFile *file, ItemGroup *group ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_MEMBER ) ) {
+ attr = xml_get_current_tag_attr(file);
+ addrbook_parse_member( book, file, group );
+ addrbook_parse_member_list( book, file, group );
+ }
+ else {
+ attr = xml_get_current_tag_attr( file );
+ }
+ }
+}
+
+/*
+* Parse group.
+*/
+static void addrbook_parse_group( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+ gchar *name, *value;
+ ItemGroup *group = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( ! group ) group = addritem_create_item_group();
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ ADDRITEM_ID(group) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_NAME ) == 0 ) {
+ ADDRITEM_NAME(group) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_REMARKS ) == 0 ) {
+ group->remarks = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_MEMBER_LIST ) ) {
+ if( group ) {
+ addrcache_hash_add_group( book->addressCache, group );
+ }
+ addrbook_parse_member_list( book, file, group );
+ }
+}
+
+/*
+* Parse folder item.
+*/
+static void addrbook_parse_folder_item( AddressBookFile *book, XMLFile *file, ItemFolder *folder ) {
+ GList *attr;
+ gchar *name, *value;
+ gchar *uid = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ uid = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ if( folder ) {
+ if( uid ) {
+ folder->listItems = g_list_append( folder->listItems, uid );
+ }
+ }
+}
+
+/*
+* Parse folder item list.
+*/
+static void addrbook_parse_folder_list( AddressBookFile *book, XMLFile *file, ItemFolder *folder ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_ITEM ) ) {
+ attr = xml_get_current_tag_attr(file);
+ addrbook_parse_folder_item( book, file, folder );
+ addrbook_parse_folder_list( book, file, folder );
+ }
+ else {
+ attr = xml_get_current_tag_attr( file );
+ }
+ }
+}
+
+/*
+* Parse folder.
+*/
+static void addrbook_parse_folder( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+ gchar *name, *value;
+ ItemFolder *folder = NULL;
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( ! folder ) {
+ folder = addritem_create_item_folder();
+ }
+ if( strcmp( name, AB_ATTAG_UID ) == 0 ) {
+ ADDRITEM_ID(folder) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_NAME ) == 0 ) {
+ ADDRITEM_NAME(folder) = g_strdup( value );
+ }
+ else if( strcmp( name, AB_ATTAG_REMARKS ) == 0 ) {
+ folder->remarks = g_strdup( value );
+ }
+ attr = g_list_next( attr );
+ }
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ITEM_LIST ) ) {
+ if( folder ) {
+ if( addrcache_hash_add_folder( book->addressCache, folder ) ) {
+ book->tempList = g_list_append( book->tempList, folder );
+ ADDRITEM_PARENT(folder) = NULL; /* We will resolve folder later */
+ }
+ }
+ addrbook_parse_folder_list( book, file, folder );
+ }
+}
+
+/*
+* Parse address book.
+* Return: TRUE if data read successfully, FALSE if error reading data.
+*/
+static gboolean addrbook_read_tree( AddressBookFile *book, XMLFile *file ) {
+ gboolean retVal;
+ GList *attr;
+ gchar *name, *value;
+
+ book->retVal = MGU_BAD_FORMAT;
+ if( xml_get_dtd( file ) ) {
+ return FALSE;
+ }
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if( ! xml_compare_tag( file, AB_ELTAG_ADDRESS_BOOK ) ) {
+ return FALSE;
+ }
+
+ attr = xml_get_current_tag_attr(file);
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, AB_ATTAG_NAME ) == 0 ) {
+ addrbook_set_name( book, value );
+ }
+ attr = g_list_next( attr );
+ }
+
+ retVal = TRUE;
+ for (;;) {
+ if (! file->level ) break;
+ /* Get next item tag (person, group or folder) */
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_PERSON ) ) {
+ addrbook_parse_person( book, file );
+ }
+ else if( xml_compare_tag( file, AB_ELTAG_GROUP ) ) {
+ addrbook_parse_group( book, file );
+ }
+ else if( xml_compare_tag( file, AB_ELTAG_FOLDER ) ) {
+ addrbook_parse_folder( book, file );
+ }
+ }
+ if( retVal ) book->retVal = MGU_SUCCESS;
+ return retVal;
+}
+
+/*
+* Resolve folder items visitor function.
+*/
+static void addrbook_res_items_vis( gpointer key, gpointer value, gpointer data ) {
+ AddressBookFile *book = data;
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ ItemFolder *rootFolder = book->addressCache->rootFolder;
+ if( obj->parent == NULL ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ rootFolder->listPerson = g_list_append( rootFolder->listPerson, obj );
+ ADDRITEM_PARENT(obj) = ADDRITEM_OBJECT(rootFolder);
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ rootFolder->listGroup = g_list_append( rootFolder->listGroup, obj );
+ ADDRITEM_PARENT(obj) = ADDRITEM_OBJECT(rootFolder);
+ }
+ }
+}
+
+/*
+* Resolve folder items. Lists of UID's are replaced with pointers to data items.
+*/
+static void addrbook_resolve_folder_items( AddressBookFile *book ) {
+ GList *nodeFolder = NULL;
+ GList *listRemove = NULL;
+ GList *node = NULL;
+ ItemFolder *rootFolder = book->addressCache->rootFolder;
+ nodeFolder = book->tempList;
+ while( nodeFolder ) {
+ ItemFolder *folder = nodeFolder->data;
+ listRemove = NULL;
+ node = folder->listItems;
+ while( node ) {
+ gchar *uid = node->data;
+ AddrItemObject *aio = addrcache_get_object( book->addressCache, uid );
+ if( aio ) {
+ if( aio->type == ITEMTYPE_FOLDER ) {
+ ItemFolder *item = ( ItemFolder * ) aio;
+ folder->listFolder = g_list_append( folder->listFolder, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ addrcache_hash_add_folder( book->addressCache, folder );
+ }
+ else if( aio->type == ITEMTYPE_PERSON ) {
+ ItemPerson *item = ( ItemPerson * ) aio;
+ folder->listPerson = g_list_append( folder->listPerson, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ }
+ else if( aio->type == ITEMTYPE_GROUP ) {
+ ItemGroup *item = ( ItemGroup * ) aio;
+ folder->listGroup = g_list_append( folder->listGroup, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ }
+ /* Replace data with pointer to item */
+ g_free( uid );
+ node->data = aio;
+ }
+ else {
+ /* Not found, append to remove list. */
+ listRemove = g_list_append( listRemove, uid );
+ }
+ node = g_list_next( node );
+ }
+ rootFolder->listFolder = g_list_append( rootFolder->listFolder, folder );
+
+ /* Process remove list */
+ node = listRemove;
+ while( node ) {
+ gchar *uid = node->data;
+ folder->listItems = g_list_remove( folder->listItems, uid );
+ g_free( uid );
+ node = g_list_next( node );
+ }
+ g_list_free( listRemove );
+ nodeFolder = g_list_next( nodeFolder );
+ }
+
+ /* Remove folders with parents. */
+ listRemove = NULL;
+ node = rootFolder->listFolder;
+ while( node ) {
+ ItemFolder *folder = ( ItemFolder * ) node->data;
+ if( ADDRITEM_PARENT(folder) ) {
+ /* Remove folders with parents */
+ listRemove = g_list_append( listRemove, folder );
+ }
+ else {
+ /* Add to root folder */
+ ADDRITEM_PARENT(folder) = ADDRITEM_OBJECT(book->addressCache->rootFolder);
+ }
+ node = g_list_next( node );
+ }
+
+ /* Process remove list */
+ node = listRemove;
+ while( node ) {
+ rootFolder->listFolder = g_list_remove( rootFolder->listFolder, node->data );
+ node = g_list_next( node );
+ }
+ g_list_free( listRemove );
+
+ /* Move all unparented persons and groups into root folder */
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_res_items_vis, book );
+
+ /* Free up some more */
+ nodeFolder = book->tempList;
+ while( nodeFolder ) {
+ ItemFolder *folder = nodeFolder->data;
+ g_list_free( folder->listItems );
+ folder->listItems = NULL;
+ nodeFolder = g_list_next( nodeFolder );
+ }
+ g_list_free( book->tempList );
+ book->tempList = NULL;
+
+}
+
+/*
+* Read address book file.
+*/
+gint addrbook_read_data( AddressBookFile *book ) {
+ XMLFile *file = NULL;
+ gchar *fileSpec = NULL;
+
+ g_return_val_if_fail( book != NULL, -1 );
+
+ fileSpec = g_strconcat( book->path, G_DIR_SEPARATOR_S, book->fileName, NULL );
+ book->retVal = MGU_OPEN_FILE;
+ book->accessFlag = FALSE;
+ book->modifyFlag = FALSE;
+ file = xml_open_file( fileSpec );
+ g_free( fileSpec );
+ if( file ) {
+ book->tempList = NULL;
+
+ /* Trap for parsing errors. */
+ if( setjmp( book->jumper ) ) {
+ xml_close_file( file );
+ return book->retVal;
+ }
+ addrbook_read_tree( book, file );
+ xml_close_file( file );
+
+ /* Resolve folder items */
+ addrbook_resolve_folder_items( book );
+ book->tempList = NULL;
+ book->readFlag = TRUE;
+ book->dirtyFlag = FALSE;
+ }
+ return book->retVal;
+}
+
+static void addrbook_write_elem_s( FILE *fp, gint lvl, gchar *name ) {
+ gint i;
+ for( i = 0; i < lvl; i++ ) fputs( " ", fp );
+ fputs( "<", fp );
+ fputs( name, fp );
+}
+
+static void addrbook_write_elem_e( FILE *fp, gint lvl, gchar *name ) {
+ gint i;
+ for( i = 0; i < lvl; i++ ) fputs( " ", fp );
+ fputs( "</", fp );
+ fputs( name, fp );
+ fputs( ">\n", fp );
+}
+
+static void addrbook_write_attr( FILE *fp, gchar *name, gchar *value ) {
+ fputs( " ", fp );
+ fputs( name, fp );
+ fputs( "=\"", fp );
+ xml_file_put_escape_str( fp, value );
+ fputs( "\"", fp );
+}
+
+/*
+* Write file hash table visitor function.
+*/
+static void addrbook_write_item_person_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ FILE *fp = ( FILE * ) data;
+ GList *node;
+
+ if( ! obj ) return;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ ItemPerson *person = ( ItemPerson * ) value;
+ if( person ) {
+ addrbook_write_elem_s( fp, 1, AB_ELTAG_PERSON );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(person) );
+ addrbook_write_attr( fp, AB_ATTAG_FIRST_NAME, person->firstName );
+ addrbook_write_attr( fp, AB_ATTAG_LAST_NAME, person->lastName );
+ addrbook_write_attr( fp, AB_ATTAG_NICK_NAME, person->nickName );
+ addrbook_write_attr( fp, AB_ATTAG_COMMON_NAME, ADDRITEM_NAME(person) );
+ fputs( " >\n", fp);
+
+ /* Output email addresses */
+ addrbook_write_elem_s( fp, 2, AB_ELTAG_ADDRESS_LIST );
+ fputs( ">\n", fp );
+ node = person->listEMail;
+ while ( node ) {
+ ItemEMail *email = node->data;
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_ADDRESS );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(email) );
+ addrbook_write_attr( fp, AB_ATTAG_ALIAS, ADDRITEM_NAME(email) );
+ addrbook_write_attr( fp, AB_ATTAG_EMAIL, email->address );
+ addrbook_write_attr( fp, AB_ATTAG_REMARKS, email->remarks );
+ fputs( " />\n", fp);
+ node = g_list_next( node );
+ }
+ addrbook_write_elem_e( fp, 2, AB_ELTAG_ADDRESS_LIST );
+
+ /* Output user attributes */
+ addrbook_write_elem_s( fp, 2, AB_ELTAG_ATTRIBUTE_LIST );
+ fputs( ">\n", fp );
+ node = person->listAttrib;
+ while ( node ) {
+ UserAttribute *attrib = node->data;
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_ATTRIBUTE );
+ addrbook_write_attr( fp, AB_ATTAG_UID, attrib->uid );
+ addrbook_write_attr( fp, AB_ATTAG_NAME, attrib->name );
+ fputs( " >", fp);
+ xml_file_put_escape_str( fp, attrib->value );
+ addrbook_write_elem_e( fp, 0, AB_ELTAG_ATTRIBUTE );
+ node = g_list_next( node );
+ }
+ addrbook_write_elem_e( fp, 2, AB_ELTAG_ATTRIBUTE_LIST );
+ addrbook_write_elem_e( fp, 1, AB_ELTAG_PERSON );
+ }
+ }
+}
+
+/*
+* Write file hash table visitor function.
+*/
+static void addrbook_write_item_group_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ FILE *fp = ( FILE * ) data;
+ GList *node;
+
+ if( ! obj ) return;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ ItemGroup *group = ( ItemGroup * ) value;
+ if( group ) {
+ addrbook_write_elem_s( fp, 1, AB_ELTAG_GROUP );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(group) );
+ addrbook_write_attr( fp, AB_ATTAG_NAME, ADDRITEM_NAME(group) );
+ addrbook_write_attr( fp, AB_ATTAG_REMARKS, group->remarks );
+ fputs( " >\n", fp );
+
+ /* Output email address links */
+ addrbook_write_elem_s( fp, 2, AB_ELTAG_MEMBER_LIST );
+ fputs( ">\n", fp );
+ node = group->listEMail;
+ while ( node ) {
+ ItemEMail *email = node->data;
+ ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_MEMBER );
+ addrbook_write_attr( fp, AB_ATTAG_PID, ADDRITEM_ID(person) );
+ addrbook_write_attr( fp, AB_ATTAG_EID, ADDRITEM_ID(email) );
+ fputs( " />\n", fp );
+ node = g_list_next( node );
+ }
+ addrbook_write_elem_e( fp, 2, AB_ELTAG_MEMBER_LIST );
+ addrbook_write_elem_e( fp, 1, AB_ELTAG_GROUP );
+ }
+ }
+}
+
+/*
+* Write file hash table visitor function.
+*/
+static void addrbook_write_item_folder_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ FILE *fp = ( FILE * ) data;
+ GList *node;
+
+ if( ! obj ) return;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_FOLDER ) {
+ ItemFolder *folder = ( ItemFolder * ) value;
+ if( folder ) {
+ addrbook_write_elem_s( fp, 1, AB_ELTAG_FOLDER );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(folder) );
+ addrbook_write_attr( fp, AB_ATTAG_NAME, ADDRITEM_NAME(folder) );
+ addrbook_write_attr( fp, AB_ATTAG_REMARKS, folder->remarks );
+ fputs( " >\n", fp );
+ addrbook_write_elem_s( fp, 2, AB_ELTAG_ITEM_LIST );
+ fputs( ">\n", fp );
+
+ /* Output persons */
+ node = folder->listPerson;
+ while ( node ) {
+ ItemPerson *item = node->data;
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_ITEM );
+ addrbook_write_attr( fp, AB_ATTAG_TYPE, AB_ATTAG_VAL_PERSON );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(item ) );
+ fputs( " />\n", fp );
+ node = g_list_next( node );
+ }
+
+ /* Output groups */
+ node = folder->listGroup;
+ while ( node ) {
+ ItemGroup *item = node->data;
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_ITEM );
+ addrbook_write_attr( fp, AB_ATTAG_TYPE, AB_ATTAG_VAL_GROUP );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(item ) );
+ fputs( " />\n", fp );
+ node = g_list_next( node );
+ }
+
+ /* Output folders */
+ node = folder->listFolder;
+ while ( node ) {
+ ItemFolder *item = node->data;
+ addrbook_write_elem_s( fp, 3, AB_ELTAG_ITEM );
+ addrbook_write_attr( fp, AB_ATTAG_TYPE, AB_ATTAG_VAL_FOLDER );
+ addrbook_write_attr( fp, AB_ATTAG_UID, ADDRITEM_ID(item ) );
+ fputs( " />\n", fp );
+ node = g_list_next( node );
+ }
+ addrbook_write_elem_e( fp, 2, AB_ELTAG_ITEM_LIST );
+ addrbook_write_elem_e( fp, 1, AB_ELTAG_FOLDER );
+ }
+ }
+}
+
+/*
+* Output address book data to specified file.
+* return: Status code.
+*/
+gint addrbook_write_to( AddressBookFile *book, gchar *newFile ) {
+ FILE *fp;
+ gchar *fileSpec;
+#ifndef DEV_STANDALONE
+ PrefFile *pfile;
+#endif
+
+ g_return_val_if_fail( book != NULL, -1 );
+ g_return_val_if_fail( newFile != NULL, -1 );
+
+ fileSpec = g_strconcat( book->path, G_DIR_SEPARATOR_S, newFile, NULL );
+
+ book->retVal = MGU_OPEN_FILE;
+#ifdef DEV_STANDALONE
+ fp = fopen( fileSpec, "wb" );
+ g_free( fileSpec );
+ if( fp ) {
+ fputs( "<?xml version=\"1.0\" ?>\n", fp );
+#else
+ pfile = prefs_file_open( fileSpec );
+ g_free( fileSpec );
+ if( pfile ) {
+ fp = pfile->fp;
+ fprintf( fp, "<?xml version=\"1.0\" encoding=\"%s\" ?>\n",
+ conv_get_internal_charset_str() );
+#endif
+ addrbook_write_elem_s( fp, 0, AB_ELTAG_ADDRESS_BOOK );
+ addrbook_write_attr( fp, AB_ATTAG_NAME, book->name );
+ fputs( " >\n", fp );
+
+ /* Output all persons */
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_write_item_person_vis, fp );
+
+ /* Output all groups */
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_write_item_group_vis, fp );
+
+ /* Output all folders */
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_write_item_folder_vis, fp );
+
+ addrbook_write_elem_e( fp, 0, AB_ELTAG_ADDRESS_BOOK );
+ book->retVal = MGU_SUCCESS;
+#ifdef DEV_STANDALONE
+ fclose( fp );
+#else
+ if( prefs_file_close( pfile ) < 0 ) {
+ book->retVal = MGU_ERROR_WRITE;
+ }
+#endif
+ }
+
+ fileSpec = NULL;
+ return book->retVal;
+}
+
+/*
+* Output address book data to original file.
+* return: Status code.
+*/
+gint addrbook_save_data( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, -1 );
+
+ book->retVal = MGU_NO_FILE;
+ if( book->fileName == NULL || *book->fileName == '\0' ) return book->retVal;
+ if( book->path == NULL || *book->path == '\0' ) return book->retVal;
+
+ addrbook_write_to( book, book->fileName );
+ if( book->retVal == MGU_SUCCESS ) {
+ book->dirtyFlag = FALSE;
+ }
+ return book->retVal;
+}
+
+/* **********************************************************************
+* Address book edit interface functions...
+* ***********************************************************************
+*/
+
+/*
+* Move person's email item.
+* param: book Address book.
+* person Person.
+* itemMove Item to move.
+* itemTarget Target item before which to move item.
+*/
+ItemEMail *addrbook_move_email_before( AddressBookFile *book, ItemPerson *person,
+ ItemEMail *itemMove, ItemEMail *itemTarget )
+{
+ ItemEMail *email = NULL;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ email = addritem_move_email_before( person, itemMove, itemTarget );
+ if( email ) {
+ book->dirtyFlag = TRUE;
+ }
+ return email;
+}
+
+/*
+* Move person's email item.
+* param: book Address book.
+* person Person.
+* itemMove Item to move.
+* itemTarget Target item after which to move item.
+*/
+ItemEMail *addrbook_move_email_after( AddressBookFile *book, ItemPerson *person,
+ ItemEMail *itemMove, ItemEMail *itemTarget )
+{
+ ItemEMail *email = NULL;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ email = addritem_move_email_after( person, itemMove, itemTarget );
+ if( email ) {
+ book->dirtyFlag = TRUE;
+ }
+ return email;
+}
+
+/*
+* Hash table visitor function.
+*/
+static gboolean addrbook_free_simple_hash_vis( gpointer *key, gpointer *value, gpointer *data ) {
+ g_free( key );
+ key = NULL;
+ value = NULL;
+ return TRUE;
+}
+
+/*
+* Update address book email list for specified person.
+* Enter: book Address book.
+* person Person to update.
+* listEMail New list of email addresses.
+* Note: The existing email addresses are replaced with the new addresses. Any references
+* to old addresses in the groups are re-linked to the new addresses. All old addresses
+* linked to the person are removed.
+*/
+void addrbook_update_address_list( AddressBookFile *book, ItemPerson *person, GList *listEMail ) {
+ GList *node;
+ GList *oldData;
+ GList *listGroup;
+
+ g_return_if_fail( book != NULL );
+ g_return_if_fail( person != NULL );
+
+ /* Remember old list */
+ oldData = person->listEMail;
+
+ /* Attach new address list to person. */
+ node = listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ if( ADDRITEM_ID(email) == NULL ) {
+ /* Allocate an ID */
+ addrcache_id_email( book->addressCache, email );
+ }
+ ADDRITEM_PARENT(email) = ADDRITEM_OBJECT(person);
+ node = g_list_next( node );
+ }
+ person->listEMail = listEMail;
+
+ /* Get groups where person's email is listed */
+ listGroup = addrcache_get_group_for_person( book->addressCache, person );
+ if( listGroup ) {
+ GHashTable *hashEMail;
+ GList *nodeGrp;
+
+ /* Load hash table with new address entries */
+ hashEMail = g_hash_table_new( g_str_hash, g_str_equal );
+ node = listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ gchar *addr = g_strdup( email->address );
+ g_strdown( addr );
+ if( ! g_hash_table_lookup( hashEMail, addr ) ) {
+ g_hash_table_insert( hashEMail, addr, email );
+ }
+ node = g_list_next( node );
+ }
+
+ /* Re-parent new addresses to existing groups, where email address match. */
+ nodeGrp = listGroup;
+ while( nodeGrp ) {
+ ItemGroup *group = ( ItemGroup * ) nodeGrp->data;
+ GList *groupEMail = group->listEMail;
+ GList *nodeGrpEM;
+ GList *listRemove = NULL;
+
+ /* Process each email item linked to group */
+ nodeGrpEM = groupEMail;
+ while( nodeGrpEM ) {
+ ItemEMail *emailGrp = ( ItemEMail * ) nodeGrpEM->data;
+ if( ADDRITEM_PARENT(emailGrp) == ADDRITEM_OBJECT(person) ) {
+ /* Found an email address for this person */
+ ItemEMail *emailNew = NULL;
+ gchar *addr = g_strdup( emailGrp->address );
+ g_strdown( addr );
+ emailNew = ( ItemEMail * ) g_hash_table_lookup( hashEMail, addr );
+ g_free( addr );
+ if( emailNew ) {
+ /* Point to this entry */
+ nodeGrpEM->data = emailNew;
+ }
+ else {
+ /* Mark for removal */
+ listRemove = g_list_append( listRemove, emailGrp );
+ }
+ }
+ /* Move on to next email link */
+ nodeGrpEM = g_list_next( nodeGrpEM );
+ }
+
+ /* Process all removed links in current group */
+ nodeGrpEM = listRemove;
+ while( nodeGrpEM ) {
+ ItemEMail *emailGrp = nodeGrpEM->data;
+ groupEMail = g_list_remove( groupEMail, emailGrp );
+ nodeGrpEM = g_list_next( nodeGrpEM );
+ }
+
+ /* Move on to next group */
+ nodeGrp = g_list_next( nodeGrp );
+
+ }
+
+ /* Clear hash table */
+ g_hash_table_foreach_remove( hashEMail, ( GHRFunc ) addrbook_free_simple_hash_vis, NULL );
+ g_hash_table_destroy( hashEMail );
+ hashEMail = NULL;
+ g_list_free( listGroup );
+ listGroup = NULL;
+ }
+
+ /* Free up old data */
+ addritem_free_list_email( oldData );
+ oldData = NULL;
+ book->dirtyFlag = TRUE;
+
+}
+
+/*
+* Add person and address data to address book.
+* Enter: book Address book.
+* folder Folder where to add person, or NULL for root folder.
+* listEMail New list of email addresses.
+* Return: Person added.
+* Note: A new person is created with specified list of email addresses. All objects inserted
+* into address book.
+*/
+ItemPerson *addrbook_add_address_list( AddressBookFile *book, ItemFolder *folder, GList *listEMail ) {
+ ItemPerson *person;
+ ItemFolder *f = folder;
+ GList *node;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ if( ! f ) f = book->addressCache->rootFolder;
+ person = addritem_create_item_person();
+ addrcache_id_person( book->addressCache, person );
+ addrcache_folder_add_person( book->addressCache, f, person );
+
+ node = listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ if( ADDRITEM_ID(email) == NULL ) {
+ addrcache_id_email( book->addressCache, email );
+ }
+ addrcache_person_add_email( book->addressCache, person, email );
+ node = g_list_next( node );
+ }
+ book->dirtyFlag = TRUE;
+ return person;
+}
+
+#if 0
+/*
+* Load hash table visitor function.
+*/
+static void addrbook_load_hash_table_email_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_EMAIL ) {
+ GHashTable *table = ( GHashTable * ) data;
+ gchar *newKey = g_strdup( key );
+ ItemEMail *email = ( ItemEMail * ) obj;
+ if( ! g_hash_table_lookup( table, newKey ) ) {
+ g_hash_table_insert( table, newKey, email );
+ }
+ }
+}
+
+/*
+* Load hash table with links to email addresses.
+*/
+static void addrbook_load_hash_table_email( AddressBookFile *book, GHashTable *table ) {
+ g_return_if_fail( book != NULL );
+ g_return_if_fail( table != NULL );
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_load_hash_table_email_vis, table );
+}
+#endif
+
+/*
+* Build available email list visitor function.
+*/
+static void addrbook_build_avail_email_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ AddressBookFile *book = data;
+ ItemPerson *person = ( ItemPerson * ) obj;
+ GList *node = person->listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ /* gchar *newKey = g_strdup( ADDRITEM_ID(email) ); */
+
+ if( ! g_hash_table_lookup( book->tempHash, ADDRITEM_ID(email) ) ) {
+ book->tempList = g_list_append( book->tempList, email );
+ }
+ node = g_list_next( node );
+ }
+ }
+}
+
+/*
+* Return link list of available email items (which have not already been linked to
+* groups). Note that the list contains references to items and should be g_free()
+* when done. Do *NOT* attempt to used the addrbook_free_xxx() functions... this will
+* destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrbook_get_available_email_list( AddressBookFile *book, ItemGroup *group ) {
+ GList *list = NULL;
+ GHashTable *table;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ /* Load hash table with group email entries */
+ table = g_hash_table_new( g_str_hash, g_str_equal );
+ if( group ) {
+ list = group->listEMail;
+ while( list ) {
+ ItemEMail *email = list->data;
+ g_hash_table_insert( table, ADDRITEM_ID(email), email );
+ list = g_list_next( list );
+ }
+ }
+
+ /* Build list of available email addresses which exclude those already in groups */
+ book->tempList = NULL;
+ book->tempHash = table;
+ g_hash_table_foreach( book->addressCache->itemHash, addrbook_build_avail_email_vis, book );
+ list = book->tempList;
+ book->tempList = NULL;
+ book->tempHash = NULL;
+
+ /* Clear hash table */
+ g_hash_table_destroy( table );
+ table = NULL;
+
+ return list;
+}
+
+/*
+* Update address book email list for specified group.
+* Enter: book Address book.
+* group group to update.
+* listEMail New list of email addresses. This should *NOT* be g_free() when done.
+* Note: The existing email addresses are replaced with the new addresses. Any references
+* to old addresses in the groups are re-linked to the new addresses. All old addresses
+* linked to the person are removed.
+*/
+void addrbook_update_group_list( AddressBookFile *book, ItemGroup *group, GList *listEMail ) {
+ GList *oldData;
+
+ g_return_if_fail( book != NULL );
+ g_return_if_fail( group != NULL );
+
+ /* Remember old list */
+ oldData = group->listEMail;
+ group->listEMail = listEMail;
+ mgu_clear_list( oldData );
+ oldData = NULL;
+ book->dirtyFlag = TRUE;
+}
+
+/*
+* Add group and email list to address book.
+* Enter: book Address book.
+* folder Parent folder, or NULL for root folder.
+* listEMail New list of email addresses. This should *NOT* be g_free() when done.
+* Return: Group object.
+* Note: The existing email addresses are replaced with the new addresses. Any references
+* to old addresses in the groups are re-linked to the new addresses. All old addresses
+* linked to the person are removed.
+*/
+ItemGroup *addrbook_add_group_list( AddressBookFile *book, ItemFolder *folder, GList *listEMail ) {
+ ItemGroup *group = NULL;
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ if( ! f ) f = book->addressCache->rootFolder;
+ group = addritem_create_item_group();
+ addrcache_id_group( book->addressCache, group );
+ addrcache_folder_add_group( book->addressCache, f, group );
+ group->listEMail = listEMail;
+ book->dirtyFlag = TRUE;
+ return group;
+}
+
+/*
+* Add new folder to address book.
+* Enter: book Address book.
+* parent Parent folder.
+* Return: Folder that was added. This should *NOT* be g_free() when done.
+*/
+ItemFolder *addrbook_add_new_folder( AddressBookFile *book, ItemFolder *parent ) {
+ ItemFolder *folder = NULL;
+ ItemFolder *p = parent;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ if( ! p ) p = book->addressCache->rootFolder;
+ folder = addritem_create_item_folder();
+ addrcache_id_folder( book->addressCache, folder );
+ if( addrcache_hash_add_folder( book->addressCache, folder ) ) {
+ p->listFolder = g_list_append( p->listFolder, folder );
+ ADDRITEM_PARENT(folder) = ADDRITEM_OBJECT(p);
+ book->dirtyFlag = TRUE;
+ }
+ else {
+ addritem_free_item_folder( folder );
+ folder = NULL;
+ }
+ return folder;
+}
+
+/*
+* Update address book attribute list for specified person.
+* Enter: book Address book.
+* person Person to update.
+* listAttrib New list of attributes.
+* Note: The existing email addresses are replaced with the new addresses. All old attributes
+* linked to the person are removed.
+*/
+void addrbook_update_attrib_list( AddressBookFile *book, ItemPerson *person, GList *listAttrib ) {
+ GList *node;
+ GList *oldData;
+
+ g_return_if_fail( book != NULL );
+ g_return_if_fail( person != NULL );
+
+ /* Remember old list */
+ oldData = person->listAttrib;
+
+ /* Attach new address list to person. */
+ node = listAttrib;
+ while( node ) {
+ UserAttribute *attrib = node->data;
+ if( attrib->uid == NULL ) {
+ /* Allocate an ID */
+ addrcache_id_attribute( book->addressCache, attrib );
+ }
+ node = g_list_next( node );
+ }
+ person->listAttrib = listAttrib;
+
+ /* Free up old data */
+ addritem_free_list_attribute( oldData );
+ oldData = NULL;
+ book->dirtyFlag = TRUE;
+
+}
+
+/*
+* Add attribute data for person to address book.
+* Enter: book Address book.
+* person New person object.
+* listAttrib New list of attributes.
+* Note: Only attributes are inserted into address book.
+*/
+void addrbook_add_attrib_list( AddressBookFile *book, ItemPerson *person, GList *listAttrib ) {
+ GList *node;
+
+ g_return_if_fail( book != NULL );
+ g_return_if_fail( person != NULL );
+
+ node = listAttrib;
+ while( node ) {
+ UserAttribute *attrib = node->data;
+ if( attrib->uid == NULL ) {
+ addrcache_id_attribute( book->addressCache, attrib );
+ }
+ addritem_person_add_attribute( person, attrib );
+ node = g_list_next( node );
+ }
+ book->dirtyFlag = TRUE;
+}
+
+/*
+* Return address book file for specified object.
+* Enter: aio Book item object.
+* Return: Address book, or NULL if not found.
+*/
+AddressBookFile *addrbook_item_get_bookfile( AddrItemObject *aio ) {
+ AddressBookFile *book = NULL;
+
+ if( aio ) {
+ ItemFolder *parent = NULL;
+ ItemFolder *root = NULL;
+ if( aio->type == ITEMTYPE_EMAIL ) {
+ ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(aio);
+ if( person ) {
+ parent = ( ItemFolder * ) ADDRITEM_PARENT(person);
+ }
+ }
+ else {
+ parent = ( ItemFolder * ) ADDRITEM_PARENT(aio);
+ }
+ if( parent ) {
+ root = addrcache_find_root_folder( parent );
+ }
+ if( root ) {
+ book = ( AddressBookFile * ) ADDRITEM_PARENT(root);
+ }
+ }
+ return book;
+}
+
+/*
+* Remove folder from address book. Children are re-parented to parent folder.
+* param: folder Folder to remove.
+* return: Folder, or NULL if not found. Note that object should still be freed.
+*/
+ItemFolder *addrbook_remove_folder( AddressBookFile *book, ItemFolder *folder ) {
+ ItemFolder *f;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ f = addrcache_remove_folder( book->addressCache, folder );
+ if( f ) book->dirtyFlag = TRUE;
+ return f;
+}
+
+/*
+* Remove folder from address book. Children are deleted.
+* param: folder Folder to remove.
+* return: Folder, or NULL if not found. Note that object should still be freed.
+*/
+ItemFolder *addrbook_remove_folder_delete( AddressBookFile *book, ItemFolder *folder ) {
+ ItemFolder *f;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ f = addrcache_remove_folder_delete( book->addressCache, folder );
+ if( f ) book->dirtyFlag = TRUE;
+ return f;
+}
+
+#define WORK_BUFLEN 1024
+#define ADDRBOOK_DIGITS "0123456789"
+
+/*
+* Return list of existing address book files.
+* Enter: book Address book file.
+* Return: File list.
+*/
+GList *addrbook_get_bookfile_list( AddressBookFile *book ) {
+ gchar *adbookdir;
+ DIR *dp;
+ struct dirent *entry;
+ struct stat statbuf;
+ gchar buf[ WORK_BUFLEN ];
+ gchar numbuf[ WORK_BUFLEN ];
+ gint len, lenpre, lensuf, lennum;
+ long int val, maxval;
+ GList *fileList = NULL;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ if( book->path == NULL || *book->path == '\0' ) {
+ book->retVal = MGU_NO_PATH;
+ return NULL;
+ }
+
+ strcpy( buf, book->path );
+ len = strlen( buf );
+ if( len > 0 ) {
+ if( buf[ len-1 ] != G_DIR_SEPARATOR ) {
+ buf[ len ] = G_DIR_SEPARATOR;
+ buf[ ++len ] = '\0';
+ }
+ }
+
+ adbookdir = g_strdup( buf );
+ strcat( buf, ADDRBOOK_PREFIX );
+
+ if( ( dp = opendir( adbookdir ) ) == NULL ) {
+ book->retVal = MGU_OPEN_DIRECTORY;
+ g_free( adbookdir );
+ return NULL;
+ }
+
+ lenpre = strlen( ADDRBOOK_PREFIX );
+ lensuf = strlen( ADDRBOOK_SUFFIX );
+ lennum = FILE_NUMDIGITS + lenpre;
+ maxval = -1;
+
+ while( ( entry = readdir( dp ) ) != NULL ) {
+ gchar *endptr = NULL;
+ gint i;
+ gboolean flg;
+
+ strcpy( buf, adbookdir );
+ strcat( buf, entry->d_name );
+ stat( buf, &statbuf );
+ if( S_IFREG & statbuf.st_mode ) {
+ if( strncmp( entry->d_name, ADDRBOOK_PREFIX, lenpre ) == 0 ) {
+ if( strncmp( (entry->d_name) + lennum, ADDRBOOK_SUFFIX, lensuf ) == 0 ) {
+ strncpy( numbuf, (entry->d_name) + lenpre, FILE_NUMDIGITS );
+ numbuf[ FILE_NUMDIGITS ] = '\0';
+ flg = TRUE;
+ for( i = 0; i < FILE_NUMDIGITS; i++ ) {
+ if( ! strchr( ADDRBOOK_DIGITS, numbuf[i] ) ) {
+ flg = FALSE;
+ break;
+ }
+ }
+ if( flg ) {
+ /* Get value */
+ val = strtol( numbuf, &endptr, 10 );
+ if( endptr && val > -1 ) {
+ if( val > maxval ) maxval = val;
+ fileList = g_list_append( fileList, g_strdup( entry->d_name ) );
+ }
+ }
+ }
+ }
+ }
+ }
+ closedir( dp );
+ g_free( adbookdir );
+
+ book->maxValue = maxval;
+ book->retVal = MGU_SUCCESS;
+ return fileList;
+}
+
+/*
+* Return file name for specified file number.
+* Enter: fileNum File number.
+* Return: File name, or NULL if file number too large. Should be g_free() when done.
+*/
+gchar *addrbook_gen_new_file_name( gint fileNum ) {
+ gchar fmt[ 30 ];
+ gchar buf[ WORK_BUFLEN ];
+ gint n = fileNum;
+ long int nmax;
+
+ if( n < 1 ) n = 1;
+ nmax = -1 + (long int) pow( 10, FILE_NUMDIGITS );
+ if( fileNum > nmax ) return NULL;
+ sprintf( fmt, "%%s%%0%dd%%s", FILE_NUMDIGITS );
+ sprintf( buf, fmt, ADDRBOOK_PREFIX, n, ADDRBOOK_SUFFIX );
+ return g_strdup( buf );
+}
+
+/* **********************************************************************
+* Address book test functions...
+* ***********************************************************************
+*/
+
+#if 0
+static void addrbook_show_attribs( GList *attr ) {
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ printf( "\tn/v = %s : %s\n", name, value );
+ attr = g_list_next( attr );
+ }
+ printf( "\t---\n" );
+}
+#endif
+
+/*
+* Test email address list.
+*/
+static void addrbook_chkparse_addr_list( AddressBookFile *book, XMLFile *file ){
+ guint prev_level;
+ GList *attr;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ if( xml_compare_tag( file, AB_ELTAG_ADDRESS ) ) {
+ addrbook_chkparse_addr_list( book, file );
+ }
+ }
+}
+
+/*
+* Test user attributes for person.
+*/
+static void addrbook_chkparse_attribute( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+ gchar *element;
+
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ element = xml_get_element( file );
+ /* printf( "\t\tattrib value : %s\n", element ); */
+}
+
+/*
+* Test attribute list.
+*/
+static void addrbook_chkparse_attr_list( AddressBookFile *book, XMLFile *file ){
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_ATTRIBUTE ) ) {
+ addrbook_chkparse_attribute( book, file );
+ addrbook_chkparse_attr_list( book, file );
+ }
+ }
+}
+
+/*
+* Test person.
+*/
+static void addrbook_chkparse_person( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ADDRESS_LIST ) ) {
+ addrbook_chkparse_addr_list( book, file );
+ }
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ATTRIBUTE_LIST ) ) {
+ addrbook_chkparse_attr_list( book, file );
+ }
+}
+
+/*
+* Test group member list.
+*/
+static void addrbook_chkparse_member_list( AddressBookFile *book, XMLFile *file ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_MEMBER ) ) {
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ addrbook_chkparse_member_list( book, file );
+ }
+ else {
+ attr = xml_get_current_tag_attr( file );
+ /* addrbook_show_attribs( attr ); */
+ }
+ }
+}
+
+/*
+* Test group.
+*/
+static void addrbook_chkparse_group( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_MEMBER_LIST ) ) {
+ addrbook_chkparse_member_list( book, file );
+ }
+}
+
+/*
+* Test folder item list.
+*/
+static void addrbook_chkparse_folder_list( AddressBookFile *book, XMLFile *file ){
+ GList *attr;
+ guint prev_level;
+
+ for (;;) {
+ prev_level = file->level;
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ if (file->level < prev_level) return;
+ if( xml_compare_tag( file, AB_ELTAG_ITEM ) ) {
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ addrbook_chkparse_folder_list( book, file );
+ }
+ else {
+ attr = xml_get_current_tag_attr( file );
+ /* addrbook_show_attribs( attr ); */
+ }
+ }
+}
+
+/*
+* Test folder.
+*/
+static void addrbook_chkparse_folder( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+ if( xml_parse_next_tag( file ) ) { /* Consume closing tag */
+ longjmp( book->jumper, 1 );
+ }
+ if( xml_compare_tag( file, AB_ELTAG_ITEM_LIST ) ) {
+ addrbook_chkparse_folder_list( book, file );
+ }
+}
+
+/*
+* Test address book.
+*/
+static gboolean addrbook_chkread_tree( AddressBookFile *book, XMLFile *file ) {
+ GList *attr;
+ gboolean retVal;
+
+ if( xml_get_dtd( file ) ) {
+ return FALSE;
+ }
+ if( xml_parse_next_tag( file ) ) {
+ return FALSE;
+ }
+
+ if( ! xml_compare_tag( file, AB_ELTAG_ADDRESS_BOOK ) ) {
+ return FALSE;
+ }
+
+ attr = xml_get_current_tag_attr(file);
+ /* addrbook_show_attribs( attr ); */
+
+ retVal = TRUE;
+ for (;;) {
+ if (! file->level ) break;
+ /* Get item tag */
+ if( xml_parse_next_tag( file ) ) {
+ longjmp( book->jumper, 1 );
+ }
+ /* Get next tag (person, group or folder) */
+ if( xml_compare_tag( file, AB_ELTAG_PERSON ) ) {
+ addrbook_chkparse_person( book, file );
+ }
+ else if( xml_compare_tag( file, AB_ELTAG_GROUP ) ) {
+ addrbook_chkparse_group( book, file );
+ }
+ else if( xml_compare_tag( file, AB_ELTAG_FOLDER ) ) {
+ addrbook_chkparse_folder( book, file );
+ }
+ }
+ return retVal;
+}
+
+/*
+* Test address book file by parsing contents.
+* Enter: book Address book file to check.
+* fileName File name to check.
+* Return: MGU_SUCCESS if file appears to be valid format.
+*/
+gint addrbook_test_read_file( AddressBookFile *book, gchar *fileName ) {
+ XMLFile *file = NULL;
+ gchar *fileSpec = NULL;
+
+ g_return_val_if_fail( book != NULL, -1 );
+
+ fileSpec = g_strconcat( book->path, G_DIR_SEPARATOR_S, fileName, NULL );
+ book->retVal = MGU_OPEN_FILE;
+ file = xml_open_file( fileSpec );
+ g_free( fileSpec );
+ if( file ) {
+ book->retVal = MGU_BAD_FORMAT;
+ if( setjmp( book->jumper ) ) {
+ /* printf( "Caught Ya!!!\n" ); */
+ xml_close_file( file );
+ return book->retVal;
+ }
+ if( addrbook_chkread_tree( book, file ) ) {
+ book->retVal = MGU_SUCCESS;
+ }
+ xml_close_file( file );
+ }
+ return book->retVal;
+}
+
+/*
+* Return link list of all persons in address book. Note that the list contains
+* references to items. Do *NOT* attempt to use the addrbook_free_xxx() functions...
+* this will destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrbook_get_all_persons( AddressBookFile *book ) {
+ g_return_val_if_fail( book != NULL, NULL );
+ return addrcache_get_all_persons( book->addressCache );
+}
+
+/*
+* Add person and address data to address book.
+* Enter: book Address book.
+* folder Folder where to add person, or NULL for root folder.
+* name Common name.
+* address EMail address.
+* remarks Remarks.
+* Return: Person added. Do not *NOT* to use the addrbook_free_xxx() functions...
+* this will destroy the address book data.
+*/
+ItemPerson *addrbook_add_contact( AddressBookFile *book, ItemFolder *folder, const gchar *name,
+ const gchar *address, const gchar *remarks )
+{
+ ItemPerson *person = NULL;
+
+ g_return_val_if_fail( book != NULL, NULL );
+
+ person = addrcache_add_contact( book->addressCache, folder, name, address, remarks );
+ if( person ) book->dirtyFlag = TRUE;
+ return person;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/addrbook.h b/src/addrbook.h
new file mode 100644
index 00000000..1902be5d
--- /dev/null
+++ b/src/addrbook.h
@@ -0,0 +1,114 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions necessary to access external address book files.
+ */
+
+#ifndef __ADDRBOOK_H__
+#define __ADDRBOOK_H__
+
+#include <stdio.h>
+#include <glib.h>
+#include <setjmp.h>
+
+#include "addritem.h"
+#include "addrcache.h"
+
+/* Address book file */
+typedef struct _AddressBookFile AddressBookFile;
+
+struct _AddressBookFile {
+ gchar *name;
+ gchar *path;
+ gchar *fileName;
+ AddressCache *addressCache;
+ gint retVal;
+ gint maxValue;
+ GList *tempList;
+ GHashTable *tempHash;
+ gboolean readFlag;
+ gboolean dirtyFlag;
+ gboolean modifyFlag;
+ gboolean accessFlag;
+ jmp_buf jumper;
+};
+
+/* Function prototypes */
+
+AddressBookFile *addrbook_create_book ( void );
+void addrbook_empty_book ( AddressBookFile *book );
+void addrbook_free_book ( AddressBookFile *book );
+void addrbook_print_book ( AddressBookFile *book, FILE *stream );
+void addrbook_dump_hash ( AddressBookFile *book, FILE *stream );
+void addrbook_dump_book ( AddressBookFile *book, FILE *stream );
+void addrbook_set_name ( AddressBookFile *book, const gchar *value );
+void addrbook_set_path ( AddressBookFile *book, const gchar *value );
+void addrbook_set_file ( AddressBookFile *book, const gchar *value );
+void addrbook_set_accessed ( AddressBookFile *book, const gboolean value );
+gboolean addrbook_get_modified ( AddressBookFile *book );
+gboolean addrbook_get_accessed ( AddressBookFile *book );
+gboolean addrbook_get_read_flag ( AddressBookFile *book );
+gint addrbook_get_status ( AddressBookFile *book );
+ItemFolder *addrbook_get_root_folder ( AddressBookFile *book );
+GList *addrbook_get_list_folder ( AddressBookFile *book );
+GList *addrbook_get_list_person ( AddressBookFile *book );
+gchar *addrbook_get_name ( AddressBookFile *book );
+
+ItemPerson *addrbook_remove_person ( AddressBookFile *book, ItemPerson *person );
+ItemGroup *addrbook_remove_group ( AddressBookFile *book, ItemGroup *group );
+ItemEMail *addrbook_person_remove_email ( AddressBookFile *book, ItemPerson *person,
+ ItemEMail *email );
+
+gint addrbook_read_data ( AddressBookFile *book );
+gint addrbook_save_data ( AddressBookFile *book );
+
+ItemEMail *addrbook_move_email_before ( AddressBookFile *book, ItemPerson *person,
+ ItemEMail *itemMove, ItemEMail *itemTarget );
+ItemEMail *addrbook_move_email_after ( AddressBookFile *book, ItemPerson *person,
+ ItemEMail *itemMove, ItemEMail *itemTarget );
+
+void addrbook_update_address_list ( AddressBookFile *book, ItemPerson *person,
+ GList *listEMail );
+ItemPerson *addrbook_add_address_list ( AddressBookFile *book, ItemFolder *folder,
+ GList *listEMail );
+GList *addrbook_get_available_email_list( AddressBookFile *book, ItemGroup *group );
+void addrbook_update_group_list ( AddressBookFile *book, ItemGroup *group,
+ GList *listEMail );
+ItemGroup *addrbook_add_group_list ( AddressBookFile *book, ItemFolder *folder,
+ GList *listEMail );
+ItemFolder *addrbook_add_new_folder ( AddressBookFile *book, ItemFolder *parent );
+
+void addrbook_update_attrib_list ( AddressBookFile *book, ItemPerson *person, GList *listAttrib );
+void addrbook_add_attrib_list ( AddressBookFile *book, ItemPerson *person, GList *listAttrib );
+
+ItemFolder *addrbook_remove_folder ( AddressBookFile *book, ItemFolder *folder );
+ItemFolder *addrbook_remove_folder_delete( AddressBookFile *book, ItemFolder *folder );
+
+GList *addrbook_get_bookfile_list ( AddressBookFile *book );
+gchar *addrbook_gen_new_file_name ( gint fileNum );
+gint addrbook_test_read_file ( AddressBookFile *book, gchar *fileName );
+
+GList *addrbook_get_all_persons ( AddressBookFile *book );
+
+ItemPerson *addrbook_add_contact ( AddressBookFile *book, ItemFolder *folder,
+ const gchar *name, const gchar *address,
+ const gchar *remarks );
+
+#endif /* __ADDRBOOK_H__ */
diff --git a/src/addrcache.c b/src/addrcache.c
new file mode 100644
index 00000000..6a491256
--- /dev/null
+++ b/src/addrcache.c
@@ -0,0 +1,1232 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Functions to maintain address cache.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+
+/* #include "mgutils.h" */
+#include "addritem.h"
+#include "addrcache.h"
+
+#define ID_TIME_OFFSET 998000000
+#define ADDRCACHE_MAX_SEARCH_COUNT 1000
+
+/*
+* Create new address cache.
+*/
+AddressCache *addrcache_create() {
+ AddressCache *cache;
+ gint t;
+
+ cache = g_new0( AddressCache, 1 );
+ cache->itemHash = g_hash_table_new( g_str_hash, g_str_equal );
+
+ cache->dataRead = FALSE;
+ cache->modified = FALSE;
+ cache->modifyTime = 0;
+
+ /* Generate the next ID using system time */
+ cache->nextID = 1;
+ t = time( NULL );
+ if( t > 0 ) {
+ cache->nextID = t - ID_TIME_OFFSET;
+ }
+
+ cache->tempList = NULL;
+ cache->rootFolder = addritem_create_item_folder();
+ cache->rootFolder->isRoot = TRUE;
+ ADDRITEM_PARENT(cache->rootFolder) = NULL;
+ return cache;
+}
+
+/*
+* Properties.
+*/
+ItemFolder *addrcache_get_root_folder( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return cache->rootFolder;
+}
+GList *addrcache_get_list_folder( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return cache->rootFolder->listFolder;
+}
+GList *addrcache_get_list_person( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return cache->rootFolder->listPerson;
+}
+
+/*
+* Generate next ID.
+*/
+void addrcache_next_id( AddressCache *cache ) {
+ g_return_if_fail( cache != NULL );
+ cache->nextID++;
+}
+
+/*
+* Refresh internal variables. This can be used force a reload.
+*/
+void addrcache_refresh( AddressCache *cache ) {
+ cache->dataRead = FALSE;
+ cache->modified = TRUE;
+ cache->modifyTime = 0;
+}
+
+/*
+* Free hash table visitor function.
+*/
+static gint addrcache_free_item_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ addritem_free_item_person( ( ItemPerson * ) obj );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ addritem_free_item_group( ( ItemGroup * ) obj );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_FOLDER ) {
+ addritem_free_item_folder( ( ItemFolder * ) obj );
+ }
+ key = NULL;
+ value = NULL;
+ return 0;
+}
+
+/*
+* Free hash table of address cache items.
+*/
+static void addrcache_free_item_hash( GHashTable *table ) {
+ g_return_if_fail( table != NULL );
+ g_hash_table_freeze( table );
+ g_hash_table_foreach_remove( table, addrcache_free_item_vis, NULL );
+ g_hash_table_thaw( table );
+ g_hash_table_destroy( table );
+}
+
+/*
+* Free up folders and groups.
+*/
+static void addrcache_free_all_folders( ItemFolder *parent ) {
+ GList *node = parent->listFolder;
+ while( node ) {
+ ItemFolder *folder = node->data;
+ addrcache_free_all_folders( folder );
+ node = g_list_next( node );
+ }
+ g_list_free( parent->listPerson );
+ g_list_free( parent->listGroup );
+ g_list_free( parent->listFolder );
+ parent->listPerson = NULL;
+ parent->listGroup = NULL;
+ parent->listFolder = NULL;
+}
+
+/*
+* Clear the address cache.
+*/
+void addrcache_clear( AddressCache *cache ) {
+ g_return_if_fail( cache != NULL );
+
+ /* Free up folders and hash table */
+ addrcache_free_all_folders( cache->rootFolder );
+ addrcache_free_item_hash( cache->itemHash );
+ cache->itemHash = NULL;
+ ADDRITEM_PARENT(cache->rootFolder) = NULL;
+ addritem_free_item_folder( cache->rootFolder );
+ cache->rootFolder = NULL;
+ g_list_free( cache->tempList );
+ cache->tempList = NULL;
+
+ /* Reset to initial state */
+ cache->itemHash = g_hash_table_new( g_str_hash, g_str_equal );
+ cache->rootFolder = addritem_create_item_folder();
+ cache->rootFolder->isRoot = TRUE;
+ ADDRITEM_PARENT(cache->rootFolder) = NULL;
+
+ addrcache_refresh( cache );
+
+}
+
+/*
+* Free address cache.
+*/
+void addrcache_free( AddressCache *cache ) {
+ g_return_if_fail( cache != NULL );
+
+ addrcache_free_all_folders( cache->rootFolder );
+ addrcache_free_item_hash( cache->itemHash );
+ cache->itemHash = NULL;
+ ADDRITEM_PARENT(cache->rootFolder) = NULL;
+ addritem_free_item_folder( cache->rootFolder );
+ cache->rootFolder = NULL;
+ g_list_free( cache->tempList );
+ cache->tempList = NULL;
+ g_free( cache );
+}
+
+/*
+* Check whether file has changed by comparing with cache.
+* return: TRUE if file has changed.
+*/
+gboolean addrcache_check_file( AddressCache *cache, gchar *path ) {
+ gboolean retVal;
+ struct stat filestat;
+ retVal = TRUE;
+ if( path ) {
+ if( 0 == lstat( path, &filestat ) ) {
+ if( filestat.st_mtime == cache->modifyTime ) retVal = FALSE;
+ }
+ }
+ return retVal;
+}
+
+/*
+* Save file time to cache.
+* return: TRUE if time marked.
+*/
+gboolean addrcache_mark_file( AddressCache *cache, gchar *path ) {
+ gboolean retVal = FALSE;
+ struct stat filestat;
+ if( path ) {
+ if( 0 == lstat( path, &filestat ) ) {
+ cache->modifyTime = filestat.st_mtime;
+ retVal = TRUE;
+ }
+ }
+ return retVal;
+}
+
+/*
+* Print list of items.
+*/
+void addrcache_print_item_list( GList *list, FILE *stream ) {
+ GList *node = list;
+ while( node ) {
+ AddrItemObject *obj = node->data;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ addritem_print_item_person( ( ItemPerson * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ addritem_print_item_group( ( ItemGroup * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_FOLDER ) {
+ addritem_print_item_folder( ( ItemFolder * ) obj, stream );
+ }
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\t---\n" );
+}
+
+/*
+* Print item hash table visitor function.
+*/
+static void addrcache_print_item_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ FILE *stream = ( FILE * ) data;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ addritem_print_item_person( ( ItemPerson * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ addritem_print_item_group( ( ItemGroup * ) obj, stream );
+ }
+ else if( ADDRITEM_TYPE(obj) == ITEMTYPE_FOLDER ) {
+ addritem_print_item_folder( ( ItemFolder * ) obj, stream );
+ }
+}
+
+/*
+* Dump entire address cache hash table contents.
+*/
+void addrcache_print( AddressCache *cache, FILE *stream ) {
+ g_return_if_fail( cache != NULL );
+ fprintf( stream, "AddressCache:\n" );
+ fprintf( stream, "next id : %d\n", cache->nextID );
+ fprintf( stream, "mod time : %ld\n", cache->modifyTime );
+ fprintf( stream, "modified : %s\n", cache->modified ? "yes" : "no" );
+ fprintf( stream, "data read: %s\n", cache->dataRead ? "yes" : "no" );
+}
+
+/*
+* Dump entire address cache hash table contents.
+*/
+void addrcache_dump_hash( AddressCache *cache, FILE *stream ) {
+ g_return_if_fail( cache != NULL );
+ addrcache_print( cache, stream );
+ g_hash_table_foreach( cache->itemHash, addrcache_print_item_vis, stream );
+}
+
+/*
+ * Allocate ID for person.
+ */
+void addrcache_id_person( AddressCache *cache, ItemPerson *person ) {
+ g_return_if_fail( cache != NULL );
+ g_return_if_fail( person != NULL );
+ if( ADDRITEM_ID(person) ) return;
+ addrcache_next_id( cache );
+ ADDRITEM_ID(person) = g_strdup_printf( "%d", cache->nextID );
+}
+
+/*
+ * Allocate ID for group.
+ */
+void addrcache_id_group( AddressCache *cache, ItemGroup *group ) {
+ g_return_if_fail( cache != NULL );
+ g_return_if_fail( group != NULL );
+ if( ADDRITEM_ID(group) ) return;
+ addrcache_next_id( cache );
+ ADDRITEM_ID(group) = g_strdup_printf( "%d", cache->nextID );
+}
+
+/*
+ * Allocate ID for folder.
+ */
+void addrcache_id_folder( AddressCache *cache, ItemFolder *folder ) {
+ g_return_if_fail( cache != NULL );
+ g_return_if_fail( folder != NULL );
+ if( ADDRITEM_ID(folder) ) return;
+ addrcache_next_id( cache );
+ ADDRITEM_ID(folder) = g_strdup_printf( "%d", cache->nextID );
+}
+
+/*
+ * Allocate ID for email address.
+ */
+void addrcache_id_email( AddressCache *cache, ItemEMail *email ) {
+ g_return_if_fail( cache != NULL );
+ g_return_if_fail( email != NULL );
+ if( ADDRITEM_ID(email) ) return;
+ addrcache_next_id( cache );
+ ADDRITEM_ID(email) = g_strdup_printf( "%d", cache->nextID );
+}
+
+/*
+ * Allocate ID for user attribute.
+ */
+void addrcache_id_attribute( AddressCache *cache, UserAttribute *attrib ) {
+ g_return_if_fail( cache != NULL );
+ g_return_if_fail( attrib != NULL );
+ if( attrib->uid ) return;
+ addrcache_next_id( cache );
+ attrib->uid = g_strdup_printf( "%d", cache->nextID );
+}
+
+/*
+* Add person to hash table.
+* return: TRUE if item added.
+*/
+gboolean addrcache_hash_add_person( AddressCache *cache, ItemPerson *person ) {
+ if( g_hash_table_lookup( cache->itemHash, ADDRITEM_ID(person) ) ) {
+ return FALSE;
+ }
+ g_hash_table_insert( cache->itemHash, ADDRITEM_ID(person), person );
+ return TRUE;
+}
+
+/*
+* Add group to hash table.
+* return: TRUE if item added.
+*/
+gboolean addrcache_hash_add_group( AddressCache *cache, ItemGroup *group ) {
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( group != NULL, FALSE );
+
+ if( g_hash_table_lookup( cache->itemHash, ADDRITEM_ID(group) ) ) {
+ return FALSE;
+ }
+ g_hash_table_insert( cache->itemHash, ADDRITEM_ID(group), group );
+ return TRUE;
+}
+
+/*
+* Add folder to hash table.
+* return: TRUE if item added.
+*/
+gboolean addrcache_hash_add_folder( AddressCache *cache, ItemFolder *folder ) {
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( folder != NULL, FALSE );
+
+ if( g_hash_table_lookup( cache->itemHash, ADDRITEM_ID(folder) ) ) {
+ return FALSE;
+ }
+ g_hash_table_insert( cache->itemHash, ADDRITEM_ID(folder), folder );
+ return TRUE;
+}
+
+/*
+* Add person to specified folder in cache.
+*/
+gboolean addrcache_folder_add_person( AddressCache *cache, ItemFolder *folder, ItemPerson *item ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ retVal = addrcache_hash_add_person( cache, item );
+ if( retVal ) {
+ addritem_folder_add_person( folder, item );
+ }
+ return retVal;
+}
+
+/*
+* Add folder to specified folder in cache.
+*/
+gboolean addrcache_folder_add_folder( AddressCache *cache, ItemFolder *folder, ItemFolder *item ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ retVal = addrcache_hash_add_folder( cache, item );
+ if( retVal ) {
+ addritem_folder_add_folder( folder, item );
+ }
+ return TRUE;
+}
+
+/*
+* Add folder to specified folder in cache.
+*/
+gboolean addrcache_folder_add_group( AddressCache *cache, ItemFolder *folder, ItemGroup *item ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ retVal = addrcache_hash_add_group( cache, item );
+ if( retVal ) {
+ addritem_folder_add_group( folder, item );
+ }
+ return retVal;
+}
+
+/*
+* Add person to address cache.
+* return: TRUE if item added.
+*/
+gboolean addrcache_add_person( AddressCache *cache, ItemPerson *person ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( person != NULL, FALSE );
+
+ retVal = addrcache_hash_add_person( cache, person );
+ if( retVal ) {
+ addritem_folder_add_person( cache->rootFolder, person );
+ }
+ return retVal;
+}
+
+/*
+* Add EMail address to person.
+* return: TRUE if item added.
+*/
+gboolean addrcache_person_add_email( AddressCache *cache, ItemPerson *person, ItemEMail *email ) {
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( person != NULL, FALSE );
+ g_return_val_if_fail( email != NULL, FALSE );
+
+ addritem_person_add_email( person, email );
+ return TRUE;
+}
+
+/*
+* Add group to address cache.
+* return: TRUE if item added.
+*/
+gboolean addrcache_add_group( AddressCache *cache, ItemGroup *group ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( group != NULL, FALSE );
+
+ retVal = addrcache_hash_add_group( cache, group );
+ if( retVal ) {
+ addritem_folder_add_group( cache->rootFolder, group );
+ }
+ return retVal;
+}
+
+/*
+* Add EMail address to person.
+* return: TRUE if item added.
+*/
+gboolean addrcache_group_add_email( AddressCache *cache, ItemGroup *group, ItemEMail *email ) {
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( group != NULL, FALSE );
+ g_return_val_if_fail( email != NULL, FALSE );
+
+ addritem_group_add_email( group, email );
+ return TRUE;
+}
+
+/*
+* Add folder to address cache.
+* return: TRUE if item added.
+*/
+gboolean addrcache_add_folder( AddressCache *cache, ItemFolder *folder ) {
+ gboolean retVal = FALSE;
+
+ g_return_val_if_fail( cache != NULL, FALSE );
+ g_return_val_if_fail( folder != NULL, FALSE );
+
+ retVal = addrcache_hash_add_folder( cache, folder );
+ if( retVal ) {
+ addritem_folder_add_folder( cache->rootFolder, folder );
+ }
+ return retVal;
+}
+
+/*
+* Return pointer to object (either person or group) for specified ID.
+* param: uid Object ID.
+* return: Object, or NULL if not found.
+*/
+AddrItemObject *addrcache_get_object( AddressCache *cache, const gchar *uid ) {
+ AddrItemObject *obj = NULL;
+ gchar *uidH;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ /* Check for matching UID */
+ uidH = ADDRITEM_ID(obj);
+ if( uidH ) {
+ if( strcmp( uidH, uid ) == 0 ) return obj;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Return pointer for specified object ID.
+* param: uid Object ID.
+* return: Person object, or NULL if not found.
+*/
+ItemPerson *addrcache_get_person( AddressCache *cache, const gchar *uid ) {
+ ItemPerson *person = NULL;
+ AddrItemObject *obj = addrcache_get_object( cache, uid );
+
+ if( obj ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ person = ( ItemPerson * ) obj;
+ }
+ }
+ return person;
+}
+
+/*
+* Return pointer for specified object ID.
+* param: uid group ID.
+* return: Group object, or NULL if not found.
+*/
+ItemGroup *addrcache_get_group( AddressCache *cache, const gchar *uid ) {
+ ItemGroup *group = NULL;
+ AddrItemObject *obj = addrcache_get_object( cache, uid );
+
+ if( obj ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ group = ( ItemGroup * ) obj;
+ }
+ }
+ return group;
+}
+
+/*
+* Find email address in address cache.
+* param: uid Object ID for person.
+* eid EMail ID.
+* return: email object for specified object ID and email ID, or NULL if not found.
+*/
+ItemEMail *addrcache_get_email( AddressCache *cache, const gchar *uid, const gchar *eid ) {
+ AddrItemObject *objP;
+
+ if( eid == NULL || *eid == '\0' ) return NULL;
+
+ objP = addrcache_get_object( cache, uid );
+ if( objP ) {
+ if( ADDRITEM_TYPE(objP) == ITEMTYPE_PERSON ) {
+ /* Sequential search through email addresses */
+ ItemPerson *person = ( ItemPerson * ) objP;
+ GList *nodeMail = person->listEMail;
+ while( nodeMail ) {
+ AddrItemObject *objE = nodeMail->data;
+ gchar *ide = ADDRITEM_ID(objE);
+ if( ide ) {
+ if( strcmp( ide, eid ) == 0 ) {
+ return ( ItemEMail * ) objE;
+ }
+ }
+ nodeMail = g_list_next( nodeMail );
+ }
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove attribute from person.
+* param: uid Object ID for person.
+* aid Attribute ID.
+* return: UserAttribute object, or NULL if not found. Note that object should still be freed.
+*/
+UserAttribute *addrcache_person_remove_attrib_id( AddressCache *cache, const gchar *uid, const gchar *aid ) {
+ UserAttribute *attrib = NULL;
+ ItemPerson *person;
+
+ if( aid == NULL || *aid == '\0' ) return NULL;
+
+ person = addrcache_get_person( cache, uid );
+ if( person ) {
+ attrib = addritem_person_remove_attrib_id( person, aid );
+ }
+ return attrib;
+}
+
+/*
+* Remove attribute from person.
+* param: person Person.
+* attrib Attribute to remove.
+* return: UserAttribute object. Note that object should still be freed.
+*/
+UserAttribute *addrcache_person_remove_attribute( AddressCache *cache, ItemPerson *person, UserAttribute *attrib ) {
+ UserAttribute *found = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( person && attrib ) {
+ found = addritem_person_remove_attribute( person, attrib );
+ }
+ return found;
+}
+
+/*
+* Remove group from address cache for specified ID.
+* param: uid Object ID.
+* return: Group, or NULL if not found. Note that object should still be freed.
+*/
+ItemGroup *addrcache_remove_group_id( AddressCache *cache, const gchar *uid ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ ItemGroup *group = ( ItemGroup * ) obj;
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(group);
+ if( ! parent ) parent = cache->rootFolder;
+ /* Remove group from parent's list and hash table */
+ parent->listGroup = g_list_remove( parent->listGroup, group );
+ g_hash_table_remove( cache->itemHash, uid );
+ return ( ItemGroup * ) obj;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove group from address cache.
+* param: group Group to remove.
+* return: Group, or NULL if not found. Note that object should still be freed.
+*/
+ItemGroup *addrcache_remove_group( AddressCache *cache, ItemGroup *group ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( group ) {
+ gchar *uid = ADDRITEM_ID(group);
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(group);
+ if( ! parent ) parent = cache->rootFolder;
+
+ /* Remove group from parent's list and hash table */
+ parent->listGroup = g_list_remove( parent->listGroup, obj );
+ g_hash_table_remove( cache->itemHash, uid );
+ return group;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove person's email address from all groups in folder.
+*/
+static void addrcache_foldergrp_rem_person( ItemFolder *folder, ItemPerson *person ) {
+ GList *nodeGrp = folder->listGroup;
+
+ while( nodeGrp ) {
+ ItemGroup *group = nodeGrp->data;
+ if( group ) {
+ /* Remove each email address that belongs to the person from the list */
+ GList *node = person->listEMail;
+ while( node ) {
+ group->listEMail = g_list_remove( group->listEMail, node->data );
+ node = g_list_next( node );
+ }
+ }
+ nodeGrp = g_list_next( nodeGrp );
+ }
+}
+
+/*
+* Remove person from address cache for specified ID. Note that person still retains
+* their EMail addresses. Also, links to these email addresses will be severed from
+* the group.
+* param: uid Object ID.
+* return: Person, or NULL if not found. Note that object should still be freed.
+*/
+ItemPerson *addrcache_remove_person_id( AddressCache *cache, const gchar *uid ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ /* Remove person's email addresses from all groups where */
+ /* referenced and from hash table. */
+ ItemPerson *person = ( ItemPerson * ) obj;
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(person);
+ if( ! parent ) parent = cache->rootFolder;
+ /* Remove emails from groups, remove from parent's list */
+ /* and hash table */
+ addrcache_foldergrp_rem_person( parent, person );
+ parent->listPerson = g_list_remove( parent->listPerson, person );
+ g_hash_table_remove( cache->itemHash, uid );
+ return person;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove specified person from address cache.
+* param: person Person to remove.
+* return: Person, or NULL if not found. Note that object should still be freed.
+*/
+ItemPerson *addrcache_remove_person( AddressCache *cache, ItemPerson *person ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( person ) {
+ gchar *uid = ADDRITEM_ID(person);
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ /* Remove person's email addresses from all groups where */
+ /* referenced and from hash table. */
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(person);
+ if( ! parent ) parent = cache->rootFolder;
+ addrcache_foldergrp_rem_person( parent, person );
+ parent->listPerson = g_list_remove( parent->listPerson, person );
+ g_hash_table_remove( cache->itemHash, uid );
+ return person;
+ }
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove email from group item hash table visitor function.
+*/
+static void addrcache_allgrp_rem_email_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+ ItemEMail *email = ( ItemEMail * ) data;
+
+ if( !email ) return;
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ ItemGroup *group = ( ItemGroup * ) value;
+ if( group ) {
+ /* Remove each email address that belongs to the person from the list */
+ group->listEMail = g_list_remove( group->listEMail, email );
+ }
+ }
+}
+
+/*
+* Remove email address in address cache for specified ID.
+* param: uid Object ID for person.
+* eid EMail ID.
+* return: EMail object, or NULL if not found. Note that object should still be freed.
+*/
+ItemEMail *addrcache_person_remove_email_id( AddressCache *cache, const gchar *uid, const gchar *eid ) {
+ ItemEMail *email = NULL;
+ ItemPerson *person;
+
+ if( eid == NULL || *eid == '\0' ) return NULL;
+
+ person = addrcache_get_person( cache, uid );
+ if( person ) {
+ email = addritem_person_remove_email_id( person, eid );
+ if( email ) {
+ /* Remove email from all groups. */
+ g_hash_table_foreach( cache->itemHash, addrcache_allgrp_rem_email_vis, email );
+
+ /* Remove email from person's address list */
+ if( person->listEMail ) {
+ person->listEMail = g_list_remove( person->listEMail, email );
+ }
+ /* Unlink reference to person. */
+ ADDRITEM_PARENT(email) = NULL;
+ }
+ }
+ return email;
+}
+
+/*
+* Remove email address in address cache for specified person.
+* param: person Person.
+* email EMail to remove.
+* return: EMail object, or NULL if not found. Note that object should still be freed.
+*/
+ItemEMail *addrcache_person_remove_email( AddressCache *cache, ItemPerson *person, ItemEMail *email ) {
+ ItemEMail *found = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( person && email ) {
+ found = addritem_person_remove_email( person, email );
+ if( found ) {
+ /* Remove email from all groups. */
+ g_hash_table_foreach( cache->itemHash, addrcache_allgrp_rem_email_vis, email );
+
+ /* Remove email from person's address list */
+ if( person->listEMail ) {
+ person->listEMail = g_list_remove( person->listEMail, email );
+ }
+ /* Unlink reference to person. */
+ ADDRITEM_PARENT(email) = NULL;
+ }
+ }
+ return found;
+}
+
+/*
+* Return link list of address items for root level folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to use the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_folder_get_address_list( AddressCache *cache, ItemFolder *folder ) {
+ GList *list = NULL;
+ GList *node = NULL;
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( ! f ) f = cache->rootFolder;
+ node = f->listPerson;
+ while( node ) {
+ list = g_list_append( list, node->data );
+ node = g_list_next( node );
+ }
+ node = f->listGroup;
+ while( node ) {
+ list = g_list_append( list, node->data );
+ node = g_list_next( node );
+ }
+ return list;
+}
+
+/*
+* Return link list of persons for specified folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to use the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_folder_get_person_list( AddressCache *cache, ItemFolder *folder ) {
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( ! f ) f = cache->rootFolder;
+ return addritem_folder_get_person_list( f );
+}
+
+/*
+* Return link list of group items for specified folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to use the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_folder_get_group_list( AddressCache *cache, ItemFolder *folder ) {
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( ! f ) f = cache->rootFolder;
+ return addritem_folder_get_group_list( f );
+}
+
+/*
+* Return link list of folder items for specified folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to used the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_folder_get_folder_list( AddressCache *cache, ItemFolder *folder ) {
+ GList *node = NULL;
+ GList *list = NULL;
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( ! f ) f = cache->rootFolder;
+ node = f->listFolder;
+ while( node ) {
+ list = g_list_append( list, node->data );
+ node = g_list_next( node );
+ }
+ return list;
+}
+
+/*
+* Return link list of address items for root level folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to used the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_address_list( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return addrcache_folder_get_address_list( cache, cache->rootFolder );
+}
+
+/*
+* Return link list of persons for root level folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to used the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_person_list( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return addritem_folder_get_person_list( cache->rootFolder );
+}
+
+/*
+* Return link list of group items in root level folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to used the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_group_list( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return cache->rootFolder->listGroup;
+}
+
+/*
+* Return link list of folder items in root level folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to used the
+* addrcache_free_xxx() functions... this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_folder_list( AddressCache *cache ) {
+ g_return_val_if_fail( cache != NULL, NULL );
+ return cache->rootFolder->listFolder;
+}
+
+/*
+* Group visitor function.
+*/
+static void addrcache_get_grp_person_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ AddressCache *cache = data;
+ ItemGroup *group = ( ItemGroup * ) obj;
+ ItemPerson *person = ( ItemPerson * ) cache->tempList->data;
+ GList *node = group->listEMail;
+ while( node ) {
+ ItemEMail *email = ( ItemEMail * ) node->data;
+ if( ADDRITEM_PARENT(email) == ADDRITEM_OBJECT(person) ) {
+ if( ! g_list_find( cache->tempList, group ) ) {
+ cache->tempList = g_list_append( cache->tempList, group );
+ }
+ }
+ node = g_list_next( node );
+ }
+ }
+}
+
+/*
+* Return link list of groups which contain a reference to specified person's email
+* address.
+*/
+GList *addrcache_get_group_for_person( AddressCache *cache, ItemPerson *person ) {
+ GList *list = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ cache->tempList = NULL;
+ cache->tempList = g_list_append( cache->tempList, person );
+ g_hash_table_foreach( cache->itemHash, addrcache_get_grp_person_vis, cache );
+ cache->tempList = g_list_remove( cache->tempList, person );
+ list = cache->tempList;
+ cache->tempList = NULL;
+ return list;
+}
+
+/*
+* Find root folder for specified folder.
+* Enter: folder Folder to search.
+* Return: root folder, or NULL if not found.
+*/
+ItemFolder *addrcache_find_root_folder( ItemFolder *folder ) {
+ ItemFolder *item = folder;
+ gint count = 0;
+
+ while( item ) {
+ if( item->isRoot ) break;
+ if( ++count > ADDRCACHE_MAX_SEARCH_COUNT ) {
+ item = NULL;
+ break;
+ }
+ item = ( ItemFolder * ) ADDRITEM_PARENT(folder);
+ }
+ return item;
+}
+
+/*
+* Get all person visitor function.
+*/
+static void addrcache_get_all_persons_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_PERSON ) {
+ AddressCache *cache = data;
+ cache->tempList = g_list_append( cache->tempList, obj );
+ }
+}
+
+/*
+* Return link list of all persons in address cache. Note that the list contains
+* references to items. Do *NOT* attempt to use the addrcache_free_xxx() functions...
+* this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_all_persons( AddressCache *cache ) {
+ GList *list = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ cache->tempList = NULL;
+ g_hash_table_foreach( cache->itemHash, addrcache_get_all_persons_vis, cache );
+ list = cache->tempList;
+ cache->tempList = NULL;
+ return list;
+}
+
+/*
+* Get all groups visitor function.
+*/
+static void addrcache_get_all_groups_vis( gpointer key, gpointer value, gpointer data ) {
+ AddrItemObject *obj = ( AddrItemObject * ) value;
+
+ if( ADDRITEM_TYPE(obj) == ITEMTYPE_GROUP ) {
+ AddressCache *cache = data;
+ cache->tempList = g_list_append( cache->tempList, obj );
+ }
+}
+
+/*
+* Return link list of all groups in address cache. Note that the list contains
+* references to items. Do *NOT* attempt to use the addrcache_free_xxx() functions...
+* this will destroy the address cache data!
+* Return: List of items, or NULL if none.
+*/
+GList *addrcache_get_all_groups( AddressCache *cache ) {
+ GList *list = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ cache->tempList = NULL;
+ g_hash_table_foreach( cache->itemHash, addrcache_get_all_groups_vis, cache );
+ list = cache->tempList;
+ cache->tempList = NULL;
+ return list;
+}
+
+/*
+* Remove folder from cache. Children are re-parented to parent folder.
+* param: folder Folder to remove.
+* return: Folder, or NULL if not found. Note that object should still be freed.
+*/
+ItemFolder *addrcache_remove_folder( AddressCache *cache, ItemFolder *folder ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( folder ) {
+ gchar *uid = ADDRITEM_ID(folder);
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(folder);
+ GList *node;
+ AddrItemObject *aio;
+ if( ! parent ) parent = cache->rootFolder;
+
+ /* Re-parent children in folder */
+ node = folder->listFolder;
+ while( node ) {
+ aio = ( AddrItemObject * ) node->data;
+ parent->listFolder = g_list_append( parent->listFolder, aio );
+ aio->parent = ADDRITEM_OBJECT(parent);
+ node = g_list_next( node );
+ }
+ node = folder->listPerson;
+ while( node ) {
+ aio = ( AddrItemObject * ) node->data;
+ parent->listPerson = g_list_append( parent->listPerson, aio );
+ aio->parent = ADDRITEM_OBJECT(parent);
+ node = g_list_next( node );
+ }
+ node = folder->listGroup;
+ while( node ) {
+ aio = ( AddrItemObject * ) node->data;
+ parent->listGroup = g_list_append( parent->listGroup, aio );
+ aio->parent = ADDRITEM_OBJECT(parent);
+ node = g_list_next( node );
+ }
+
+ /* Remove folder from parent's list and hash table */
+ parent->listFolder = g_list_remove( parent->listFolder, folder );
+ ADDRITEM_PARENT(folder) = NULL;
+ g_hash_table_remove( cache->itemHash, uid );
+ return folder;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove folder from cache. Children are deleted.
+* param: folder Folder to remove.
+* return: Folder, or NULL if not found. Note that object should still be freed.
+*/
+ItemFolder *addrcache_remove_folder_delete( AddressCache *cache, ItemFolder *folder ) {
+ AddrItemObject *obj = NULL;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( folder ) {
+ gchar *uid = ADDRITEM_ID(folder);
+ if( uid == NULL || *uid == '\0' ) return NULL;
+ obj = ( AddrItemObject * ) g_hash_table_lookup( cache->itemHash, uid );
+ if( obj ) {
+ ItemFolder *parent = ( ItemFolder * ) ADDRITEM_PARENT(folder);
+ if( ! parent ) parent = cache->rootFolder;
+
+ /* Remove groups */
+ while( folder->listGroup ) {
+ ItemGroup *item = ( ItemGroup * ) folder->listGroup->data;
+ item = addrcache_remove_group( cache, item );
+ if( item ) {
+ addritem_free_item_group( item );
+ item = NULL;
+ }
+ }
+
+ while( folder->listPerson ) {
+ ItemPerson *item = ( ItemPerson * ) folder->listPerson->data;
+ item = addrcache_remove_person( cache, item );
+ if( item ) {
+ addritem_free_item_person( item );
+ item = NULL;
+ }
+ }
+
+ /* Recursive deletion of folder */
+ while( folder->listFolder ) {
+ ItemFolder *item = ( ItemFolder * ) folder->listFolder->data;
+ item = addrcache_remove_folder_delete( cache, item );
+ if( item ) {
+ addritem_free_item_folder( item );
+ item = NULL;
+ }
+ }
+
+ /* Remove folder from parent's list and hash table */
+ parent->listFolder = g_list_remove( parent->listFolder, folder );
+ ADDRITEM_PARENT(folder) = NULL;
+ g_hash_table_remove( cache->itemHash, uid );
+ return folder;
+ }
+ }
+ return NULL;
+}
+
+/*
+* Add person and address data to cache.
+* Enter: cache Cache.
+* folder Folder where to add person, or NULL for root folder.
+* name Common name.
+* address EMail address.
+* remarks Remarks.
+* Return: Person added. Do not *NOT* to use the addrbook_free_xxx() functions...
+* this will destroy the address book data.
+*/
+ItemPerson *addrcache_add_contact( AddressCache *cache, ItemFolder *folder, const gchar *name,
+ const gchar *address, const gchar *remarks )
+{
+ ItemPerson *person = NULL;
+ ItemEMail *email = NULL;
+ ItemFolder *f = folder;
+
+ g_return_val_if_fail( cache != NULL, NULL );
+
+ if( ! f ) f = cache->rootFolder;
+
+ /* Create person object */
+ person = addritem_create_item_person();
+ addritem_person_set_common_name( person, name );
+ addrcache_id_person( cache, person );
+ addrcache_folder_add_person( cache, f, person );
+
+ /* Create email object */
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, address );
+ addritem_email_set_remarks( email, remarks );
+ addrcache_id_email( cache, email );
+ addritem_person_add_email( person, email );
+
+ return person;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/addrcache.h b/src/addrcache.h
new file mode 100644
index 00000000..46a0264f
--- /dev/null
+++ b/src/addrcache.h
@@ -0,0 +1,123 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions for address cache.
+ */
+
+#ifndef __ADDRCACHE_H__
+#define __ADDRCACHE_H__
+
+#include <time.h>
+#include <stdio.h>
+#include <glib.h>
+#include "addritem.h"
+
+/* Address cache */
+typedef struct _AddressCache AddressCache;
+
+struct _AddressCache {
+ gint nextID;
+ gboolean dataRead;
+ gboolean modified;
+ time_t modifyTime;
+ GHashTable *itemHash;
+ GList *tempList;
+ ItemFolder *rootFolder;
+};
+
+/* Function prototypes */
+AddressCache *addrcache_create();
+ItemFolder *addrcache_get_root_folder ( AddressCache *cache );
+GList *addrcache_get_list_folder ( AddressCache *cache );
+GList *addrcache_get_list_person ( AddressCache *cache );
+
+void addrcache_refresh ( AddressCache *cache );
+/* void addrcache_empty ( AddressCache *cache ); */
+void addrcache_clear ( AddressCache *cache );
+void addrcache_free ( AddressCache *cache );
+gboolean addrcache_check_file ( AddressCache *cache, gchar *path );
+gboolean addrcache_mark_file ( AddressCache *cache, gchar *path );
+
+void addrcache_print_item_list ( GList *list, FILE *stream );
+void addrcache_print ( AddressCache *cache, FILE *stream );
+void addrcache_dump_hash ( AddressCache *cache, FILE *stream );
+
+void addrcache_id_person ( AddressCache *cache, ItemPerson *person );
+void addrcache_id_group ( AddressCache *cache, ItemGroup *group );
+void addrcache_id_folder ( AddressCache *cache, ItemFolder *folder );
+void addrcache_id_email ( AddressCache *cache, ItemEMail *email );
+void addrcache_id_attribute ( AddressCache *cache, UserAttribute *attrib );
+
+gboolean addrcache_hash_add_person ( AddressCache *cache, ItemPerson *person );
+gboolean addrcache_hash_add_group ( AddressCache *cache, ItemGroup *group );
+gboolean addrcache_hash_add_folder ( AddressCache *cache, ItemFolder *folder );
+
+gboolean addrcache_folder_add_person ( AddressCache *cache, ItemFolder *folder, ItemPerson *item );
+gboolean addrcache_folder_add_folder ( AddressCache *cache, ItemFolder *folder, ItemFolder *item );
+gboolean addrcache_folder_add_group ( AddressCache *cache, ItemFolder *folder, ItemGroup *item );
+
+gboolean addrcache_add_person ( AddressCache *cache, ItemPerson *person );
+gboolean addrcache_add_group ( AddressCache *cache, ItemGroup *group );
+gboolean addrcache_person_add_email ( AddressCache *cache, ItemPerson *person, ItemEMail *email );
+gboolean addrcache_group_add_email ( AddressCache *cache, ItemGroup *group, ItemEMail *email );
+gboolean addrcache_add_folder ( AddressCache *cache, ItemFolder *folder );
+
+AddrItemObject *addrcache_get_object ( AddressCache *cache, const gchar *uid );
+ItemPerson *addrcache_get_person ( AddressCache *cache, const gchar *uid );
+ItemGroup *addrcache_get_group ( AddressCache *cache, const gchar *uid );
+ItemEMail *addrcache_get_email ( AddressCache *cache, const gchar *uid, const gchar *eid );
+
+UserAttribute *addrcache_person_remove_attrib_id ( AddressCache *cache, const gchar *uid,
+ const gchar *aid );
+UserAttribute *addrcache_person_remove_attribute ( AddressCache *cache, ItemPerson *person,
+ UserAttribute *attrib );
+
+ItemGroup *addrcache_remove_group_id ( AddressCache *cache, const gchar *uid );
+ItemGroup *addrcache_remove_group ( AddressCache *cache, ItemGroup *group );
+
+ItemPerson *addrcache_remove_person_id ( AddressCache *cache, const gchar *uid );
+ItemPerson *addrcache_remove_person ( AddressCache *cache, ItemPerson *person );
+ItemEMail *addrcache_person_remove_email_id ( AddressCache *cache, const gchar *uid, const gchar *eid );
+ItemEMail *addrcache_person_remove_email ( AddressCache *cache, ItemPerson *person, ItemEMail *email );
+
+GList *addrcache_folder_get_address_list ( AddressCache *cache, ItemFolder *folder );
+GList *addrcache_folder_get_person_list ( AddressCache *cache, ItemFolder *folder );
+GList *addrcache_folder_get_group_list ( AddressCache *cache, ItemFolder *folder );
+GList *addrcache_folder_get_folder_list ( AddressCache *cache, ItemFolder *folder );
+
+GList *addrcache_get_address_list ( AddressCache *cache );
+GList *addrcache_get_person_list ( AddressCache *cache );
+GList *addrcache_get_group_list ( AddressCache *cache );
+GList *addrcache_get_folder_list ( AddressCache *cache );
+
+GList *addrcache_get_group_for_person ( AddressCache *cache, ItemPerson *person );
+
+ItemFolder *addrcache_find_root_folder ( ItemFolder *folder );
+GList *addrcache_get_all_persons ( AddressCache *cache );
+GList *addrcache_get_all_groups ( AddressCache *cache );
+
+ItemFolder *addrcache_remove_folder ( AddressCache *cache, ItemFolder *folder );
+ItemFolder *addrcache_remove_folder_delete ( AddressCache *cache, ItemFolder *folder );
+
+ItemPerson *addrcache_add_contact ( AddressCache *cache, ItemFolder *folder,
+ const gchar *name, const gchar *address,
+ const gchar *remarks );
+
+#endif /* __ADDRCACHE_H__ */
diff --git a/src/addressadd.c b/src/addressadd.c
new file mode 100644
index 00000000..dd553fce
--- /dev/null
+++ b/src/addressadd.c
@@ -0,0 +1,401 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Add address to address book dialog.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "prefs_common.h"
+#include "addressadd.h"
+#include "addritem.h"
+#include "addrbook.h"
+#include "addrindex.h"
+#include "manage_window.h"
+
+typedef struct {
+ AddressBookFile *book;
+ ItemFolder *folder;
+} FolderInfo;
+
+static struct _AddressAdd_dlg {
+ GtkWidget *window;
+ GtkWidget *label_name;
+ GtkWidget *label_address;
+ GtkWidget *label_remarks;
+ GtkWidget *tree_folder;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+ FolderInfo *fiSelected;
+} addressadd_dlg;
+
+static GdkPixmap *folderXpm;
+static GdkBitmap *folderXpmMask;
+static GdkPixmap *bookXpm;
+static GdkBitmap *bookXpmMask;
+
+static gboolean addressadd_cancelled;
+
+static FolderInfo *addressadd_create_folderinfo( AddressBookFile *abf, ItemFolder *folder )
+{
+ FolderInfo *fi = g_new0( FolderInfo, 1 );
+ fi->book = abf;
+ fi->folder = folder;
+ return fi;
+}
+
+static void addressadd_free_folderinfo( FolderInfo *fi ) {
+ fi->book = NULL;
+ fi->folder = NULL;
+ g_free( fi );
+}
+
+/*
+* Edit functions.
+*/
+static void addressadd_status_show( gchar *msg ) {
+ if( addressadd_dlg.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(addressadd_dlg.statusbar), addressadd_dlg.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(addressadd_dlg.statusbar), addressadd_dlg.status_cid, msg );
+ }
+ }
+}
+
+static gint addressadd_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ addressadd_cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean addressadd_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ addressadd_cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void addressadd_ok( GtkWidget *widget, gboolean *cancelled ) {
+ addressadd_cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void addressadd_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ addressadd_cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static void addressadd_folder_select( GtkCTree *ctree, gint row, gint column,
+ GdkEvent *event, gpointer data )
+{
+ addressadd_dlg.fiSelected = gtk_clist_get_row_data( GTK_CLIST(ctree), row );
+}
+
+static gboolean addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpointer data ) {
+ if( ! event ) return FALSE;
+ if( event->button == 1 ) {
+ /* Handle double click */
+ if( event->type == GDK_2BUTTON_PRESS ) {
+ addressadd_cancelled = FALSE;
+ gtk_main_quit();
+ }
+ }
+
+ return FALSE;
+}
+
+static void addressadd_create( void ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *label_name;
+ GtkWidget *label_addr;
+ GtkWidget *label_rems;
+ GtkWidget *tree_folder;
+ GtkWidget *vlbox;
+ GtkWidget *tree_win;
+ GtkWidget *hbbox;
+ GtkWidget *hsep;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+ gint top;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request( window, 300, 400 );
+ gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
+ gtk_window_set_title( GTK_WINDOW(window), _("Add Address to Book") );
+ gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_MOUSE );
+ gtk_window_set_modal( GTK_WINDOW(window), TRUE );
+ g_signal_connect( G_OBJECT(window), "delete_event",
+ G_CALLBACK(addressadd_delete_event), NULL );
+ g_signal_connect( G_OBJECT(window), "key_press_event",
+ G_CALLBACK(addressadd_key_pressed), NULL );
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ label_name = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), label_name, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label_name), 0, 0.5);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("Address"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
+
+ label_addr = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), label_addr, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label_addr), 0, 0.5);
+
+ /* Third row */
+ top = 2;
+ label = gtk_label_new(_("Remarks"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ label_rems = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), label_rems, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label_rems), 0, 0.5);
+
+ /* Address book/folder tree */
+ vlbox = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), vlbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(vlbox), 8 );
+
+ tree_win = gtk_scrolled_window_new( NULL, NULL );
+ gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(tree_win),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS );
+ gtk_box_pack_start( GTK_BOX(vlbox), tree_win, TRUE, TRUE, 0 );
+
+ tree_folder = gtk_ctree_new( 1, 0 );
+ gtk_container_add( GTK_CONTAINER(tree_win), tree_folder );
+ gtk_clist_column_titles_show( GTK_CLIST(tree_folder) );
+ gtk_clist_set_column_title( GTK_CLIST(tree_folder), 0, _( "Select Address Book Folder" ) );
+ gtk_ctree_set_line_style( GTK_CTREE(tree_folder), GTK_CTREE_LINES_DOTTED );
+ gtk_clist_set_selection_mode( GTK_CLIST(tree_folder), GTK_SELECTION_BROWSE );
+ gtk_ctree_set_expander_style( GTK_CTREE(tree_folder), GTK_CTREE_EXPANDER_SQUARE );
+ gtk_ctree_set_indent( GTK_CTREE(tree_folder), CTREE_INDENT );
+ gtk_clist_set_auto_sort( GTK_CLIST(tree_folder), TRUE );
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
+ gtk_widget_grab_default(ok_btn);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(addressadd_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(addressadd_cancel), NULL);
+ g_signal_connect(G_OBJECT(tree_folder), "select_row",
+ G_CALLBACK(addressadd_folder_select), NULL);
+ g_signal_connect(G_OBJECT(tree_folder), "button_press_event",
+ G_CALLBACK(addressadd_tree_button), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ addressadd_dlg.window = window;
+ addressadd_dlg.label_name = label_name;
+ addressadd_dlg.label_address = label_addr;
+ addressadd_dlg.label_remarks = label_rems;
+ addressadd_dlg.tree_folder = tree_folder;
+ addressadd_dlg.ok_btn = ok_btn;
+ addressadd_dlg.cancel_btn = cancel_btn;
+ addressadd_dlg.statusbar = statusbar;
+ addressadd_dlg.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Address Add" );
+
+ gtk_widget_show_all( window );
+
+ stock_pixmap_gdk( window, STOCK_PIXMAP_BOOK, &bookXpm, &bookXpmMask );
+ stock_pixmap_gdk( window, STOCK_PIXMAP_DIR_OPEN,
+ &folderXpm, &folderXpmMask );
+}
+
+static void addressadd_load_folder( GtkCTreeNode *parentNode, ItemFolder *parentFolder,
+ FolderInfo *fiParent )
+{
+ GtkCTree *tree = GTK_CTREE( addressadd_dlg.tree_folder );
+ GList *list;
+ ItemFolder *folder;
+ gchar *fName;
+ gchar **name;
+ GtkCTreeNode *node;
+ FolderInfo *fi;
+
+ list = parentFolder->listFolder;
+ while( list ) {
+ folder = list->data;
+ fName = g_strdup( ADDRITEM_NAME(folder) );
+ name = &fName;
+ node = gtk_ctree_insert_node( tree, parentNode, NULL, name, FOLDER_SPACING,
+ folderXpm, folderXpmMask, folderXpm, folderXpmMask,
+ FALSE, TRUE );
+ g_free( fName );
+ fi = addressadd_create_folderinfo( fiParent->book, folder );
+ gtk_ctree_node_set_row_data_full( tree, node, fi,
+ ( GtkDestroyNotify ) addressadd_free_folderinfo );
+ addressadd_load_folder( node, folder, fi );
+ list = g_list_next( list );
+ }
+}
+
+static void addressadd_load_data( AddressIndex *addrIndex ) {
+ AddressDataSource *ds;
+ GList *list, *nodeDS;
+ gchar **name;
+ gchar *dsName;
+ ItemFolder *rootFolder;
+ AddressBookFile *abf;
+ FolderInfo *fi;
+ GtkCTree *tree = GTK_CTREE( addressadd_dlg.tree_folder );
+ GtkCTreeNode *node;
+
+ gtk_clist_clear( GTK_CLIST( tree ) );
+ list = addrindex_get_interface_list( addrIndex );
+ while( list ) {
+ AddressInterface *interface = list->data;
+ if( interface->type == ADDR_IF_BOOK ) {
+ nodeDS = interface->listSource;
+ while( nodeDS ) {
+ ds = nodeDS->data;
+ dsName = g_strdup( addrindex_ds_get_name( ds ) );
+
+ /* Read address book */
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ /* Add node for address book */
+ abf = ds->rawDataSource;
+ name = &dsName;
+ node = gtk_ctree_insert_node( tree, NULL, NULL,
+ name, FOLDER_SPACING, bookXpm,
+ bookXpmMask, bookXpm, bookXpmMask,
+ FALSE, TRUE );
+ g_free( dsName );
+
+ fi = addressadd_create_folderinfo( abf, NULL );
+ gtk_ctree_node_set_row_data_full( tree, node, fi,
+ ( GtkDestroyNotify ) addressadd_free_folderinfo );
+
+ rootFolder = addrindex_ds_get_root_folder( ds );
+ addressadd_load_folder( node, rootFolder, fi );
+
+ nodeDS = g_list_next( nodeDS );
+ }
+ }
+ list = g_list_next( list );
+ }
+}
+
+gboolean addressadd_selection( AddressIndex *addrIndex, const gchar *name, const gchar *address, const gchar *remarks ) {
+ gboolean retVal = FALSE;
+ ItemPerson *person = NULL;
+
+ addressadd_cancelled = FALSE;
+ if( ! addressadd_dlg.window ) addressadd_create();
+ gtk_widget_grab_focus(addressadd_dlg.ok_btn);
+ gtk_widget_show(addressadd_dlg.window);
+ manage_window_set_transient(GTK_WINDOW(addressadd_dlg.window));
+
+ addressadd_dlg.fiSelected = NULL;
+ addressadd_status_show( "" );
+ addressadd_load_data( addrIndex );
+ gtk_clist_select_row( GTK_CLIST( addressadd_dlg.tree_folder ), 0, 0 );
+ gtk_widget_show(addressadd_dlg.window);
+
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_name ), "" );
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_address ), "" );
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_remarks ), "" );
+ if( name )
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_name ), name );
+ if( address )
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_address ), address );
+ if( remarks )
+ gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_remarks ), remarks );
+
+ gtk_main();
+ gtk_widget_hide( addressadd_dlg.window );
+
+ if( ! addressadd_cancelled ) {
+ if( addressadd_dlg.fiSelected ) {
+ FolderInfo *fi = addressadd_dlg.fiSelected;
+ person = addrbook_add_contact( fi->book, fi->folder, name, address, remarks );
+ if( person ) retVal = TRUE;
+ }
+ }
+
+ gtk_clist_clear( GTK_CLIST( addressadd_dlg.tree_folder ) );
+
+ return retVal;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/addressadd.h b/src/addressadd.h
new file mode 100644
index 00000000..9206bf98
--- /dev/null
+++ b/src/addressadd.h
@@ -0,0 +1,31 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Add address to address book dialog.
+ */
+
+#ifndef __ADDRESS_ADD_H__
+#define __ADDRESS_ADD_H__
+
+#include "addrindex.h"
+
+gboolean addressadd_selection( AddressIndex *addrIndex, const gchar *name, const gchar *address, const gchar *remarks );
+
+#endif /* __ADDRESS_ADD_H__ */
diff --git a/src/addressbook.c b/src/addressbook.c
new file mode 100644
index 00000000..c0d717e1
--- /dev/null
+++ b/src/addressbook.c
@@ -0,0 +1,3503 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkhpaned.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <string.h>
+#include <setjmp.h>
+
+#include "intl.h"
+#include "main.h"
+#include "addressbook.h"
+#include "manage_window.h"
+#include "prefs_common.h"
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "menu.h"
+#include "stock_pixmap.h"
+#include "xml.h"
+#include "prefs.h"
+#include "procmime.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "codeconv.h"
+#include "about.h"
+#include "addr_compl.h"
+
+#include "mgutils.h"
+#include "addressitem.h"
+#include "addritem.h"
+#include "addrcache.h"
+#include "addrbook.h"
+#include "addrindex.h"
+#include "addressadd.h"
+#include "vcard.h"
+#include "editvcard.h"
+#include "editgroup.h"
+#include "editaddress.h"
+#include "editbook.h"
+#include "ldif.h"
+#include "importldif.h"
+
+#ifdef USE_JPILOT
+#include "jpilot.h"
+#include "editjpilot.h"
+#endif
+
+#ifdef USE_LDAP
+#include <pthread.h>
+#include "syldap.h"
+#include "editldap.h"
+
+#define ADDRESSBOOK_LDAP_BUSYMSG "Busy"
+#endif
+
+typedef enum
+{
+ COL_NAME = 0,
+ COL_ADDRESS = 1,
+ COL_REMARKS = 2
+} AddressBookColumnPos;
+
+#define N_COLS 3
+#define COL_NAME_WIDTH 164
+#define COL_ADDRESS_WIDTH 156
+
+#define COL_FOLDER_WIDTH 170
+#define ADDRESSBOOK_WIDTH 640
+#define ADDRESSBOOK_HEIGHT 360
+
+#define ADDRESSBOOK_MSGBUF_SIZE 2048
+
+static GdkPixmap *folderxpm;
+static GdkBitmap *folderxpmmask;
+static GdkPixmap *folderopenxpm;
+static GdkBitmap *folderopenxpmmask;
+static GdkPixmap *groupxpm;
+static GdkBitmap *groupxpmmask;
+static GdkPixmap *interfacexpm;
+static GdkBitmap *interfacexpmmask;
+static GdkPixmap *bookxpm;
+static GdkBitmap *bookxpmmask;
+static GdkPixmap *addressxpm;
+static GdkBitmap *addressxpmmask;
+static GdkPixmap *vcardxpm;
+static GdkBitmap *vcardxpmmask;
+static GdkPixmap *jpilotxpm;
+static GdkBitmap *jpilotxpmmask;
+static GdkPixmap *categoryxpm;
+static GdkBitmap *categoryxpmmask;
+static GdkPixmap *ldapxpm;
+static GdkBitmap *ldapxpmmask;
+
+/* Message buffer */
+static gchar addressbook_msgbuf[ ADDRESSBOOK_MSGBUF_SIZE ];
+
+/* Address list selection */
+static GList *_addressListSelection_ = NULL;
+
+/* Address index file and interfaces */
+static AddressIndex *_addressIndex_ = NULL;
+static GList *_addressInterfaceList_ = NULL;
+static GList *_addressIFaceSelection_ = NULL;
+#define ADDRESSBOOK_IFACE_SELECTION "1/y,3/y,4/y,2/n"
+
+static AddressBook_win addrbook;
+
+static GHashTable *_addressBookTypeHash_ = NULL;
+static GList *_addressBookTypeList_ = NULL;
+
+static void addressbook_create (void);
+static gint addressbook_close (void);
+static void addressbook_button_set_sensitive (void);
+
+/* callback functions */
+static void addressbook_del_clicked (GtkButton *button,
+ gpointer data);
+static void addressbook_reg_clicked (GtkButton *button,
+ gpointer data);
+static void addressbook_to_clicked (GtkButton *button,
+ gpointer data);
+static void addressbook_lup_clicked (GtkButton *button,
+ gpointer data);
+
+static void addressbook_tree_selected (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gint column,
+ gpointer data);
+static void addressbook_list_selected (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event,
+ gpointer data);
+static void addressbook_list_row_selected (GtkCTree *clist,
+ GtkCTreeNode *node,
+ gint column,
+ gpointer data);
+static void addressbook_list_row_unselected (GtkCTree *clist,
+ GtkCTreeNode *node,
+ gint column,
+ gpointer data);
+static void addressbook_person_expand_node (GtkCTree *ctree,
+ GList *node,
+ gpointer *data );
+static void addressbook_person_collapse_node (GtkCTree *ctree,
+ GList *node,
+ gpointer *data );
+static void addressbook_entry_gotfocus (GtkWidget *widget);
+
+#if 0
+static void addressbook_entry_changed (GtkWidget *widget);
+#endif
+
+static gboolean addressbook_list_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+static gboolean addressbook_list_button_released(GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+static gboolean addressbook_tree_button_pressed (GtkWidget *ctree,
+ GdkEventButton *event,
+ gpointer data);
+static gboolean addressbook_tree_button_released(GtkWidget *ctree,
+ GdkEventButton *event,
+ gpointer data);
+static void addressbook_popup_close (GtkMenuShell *menu_shell,
+ gpointer data);
+
+static void addressbook_new_folder_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_new_group_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_treenode_edit_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_treenode_delete_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void addressbook_change_node_name (GtkCTreeNode *node,
+ const gchar *name);
+
+static void addressbook_new_address_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_edit_address_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_delete_address_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void close_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_file_save_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+/* Data source edit stuff */
+static void addressbook_new_book_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void addressbook_new_vcard_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+#ifdef USE_JPILOT
+static void addressbook_new_jpilot_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+#endif
+
+#ifdef USE_LDAP
+static void addressbook_new_ldap_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+#endif
+
+static void addressbook_set_clist (AddressObject *obj);
+
+static void addressbook_load_tree (void);
+void addressbook_read_file (void);
+
+static GtkCTreeNode *addressbook_add_object (GtkCTreeNode *node,
+ AddressObject *obj);
+static AddressDataSource *addressbook_find_datasource
+ (GtkCTreeNode *node );
+
+static AddressBookFile *addressbook_get_book_file();
+
+static GtkCTreeNode *addressbook_node_add_folder
+ (GtkCTreeNode *node,
+ AddressDataSource *ds,
+ ItemFolder *itemFolder,
+ AddressObjectType otype);
+static GtkCTreeNode *addressbook_node_add_group (GtkCTreeNode *node,
+ AddressDataSource *ds,
+ ItemGroup *itemGroup);
+/* static GtkCTreeNode *addressbook_node_add_category */
+/* (GtkCTreeNode *node, */
+/* AddressDataSource *ds, */
+/* ItemFolder *itemFolder); */
+static void addressbook_tree_remove_children (GtkCTree *ctree,
+ GtkCTreeNode *parent);
+static void addressbook_move_nodes_up (GtkCTree *ctree,
+ GtkCTreeNode *node);
+static GtkCTreeNode *addressbook_find_group_node (GtkCTreeNode *parent,
+ ItemGroup *group);
+
+/* static void addressbook_delete_object (AddressObject *obj); */
+
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static gint addressbook_list_compare_func (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+/* static gint addressbook_obj_name_compare (gconstpointer a, */
+/* gconstpointer b); */
+
+/* static void addressbook_book_show_message (AddressBookFile *book); */
+/* static void addressbook_vcard_show_message (VCardFile *vcf); */
+#ifdef USE_JPILOT
+/* static void addressbook_jpilot_show_message (JPilotFile *jpf); */
+#endif
+#ifdef USE_LDAP
+static void addressbook_ldap_show_message (SyldapServer *server);
+#endif
+
+/* LUT's and IF stuff */
+static void addressbook_free_adapter (GtkCTreeNode *node);
+static void addressbook_free_child_adapters (GtkCTreeNode *node);
+AddressTypeControlItem *addrbookctl_lookup (gint ot);
+AddressTypeControlItem *addrbookctl_lookup_iface(AddressIfType ifType);
+
+void addrbookctl_build_map (GtkWidget *window);
+void addrbookctl_build_iflist (void);
+AdapterInterface *addrbookctl_find_interface (AddressIfType ifType);
+void addrbookctl_build_ifselect (void);
+
+static void addrbookctl_free_interface (AdapterInterface *adapter);
+static void addrbookctl_free_datasource (AdapterDSource *adapter);
+static void addrbookctl_free_folder (AdapterFolder *adapter);
+static void addrbookctl_free_group (AdapterGroup *adapter);
+
+static void addressbook_list_select_clear (void);
+static void addressbook_list_select_add (AddressObject *obj);
+static void addressbook_list_select_remove (AddressObject *obj);
+
+static void addressbook_import_ldif_cb (void);
+
+static GtkItemFactoryEntry addressbook_entries[] =
+{
+ {N_("/_File"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/New _Book"), "<alt>B", addressbook_new_book_cb, 0, NULL},
+ {N_("/_File/New _vCard"), "<alt>D", addressbook_new_vcard_cb, 0, NULL},
+#ifdef USE_JPILOT
+ {N_("/_File/New _JPilot"), "<alt>J", addressbook_new_jpilot_cb, 0, NULL},
+#endif
+#ifdef USE_LDAP
+ {N_("/_File/New _Server"), "<alt>S", addressbook_new_ldap_cb, 0, NULL},
+#endif
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Edit"), NULL, addressbook_treenode_edit_cb, 0, NULL},
+ {N_("/_File/_Delete"), NULL, addressbook_treenode_delete_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Save"), "<alt>S", addressbook_file_save_cb, 0, NULL},
+ {N_("/_File/_Close"), "<alt>W", close_cb, 0, NULL},
+ {N_("/_Address"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Address/New _Address"), "<alt>N", addressbook_new_address_cb, 0, NULL},
+ {N_("/_Address/New _Group"), "<alt>G", addressbook_new_group_cb, 0, NULL},
+ {N_("/_Address/New _Folder"), "<alt>R", addressbook_new_folder_cb, 0, NULL},
+ {N_("/_Address/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Address/_Edit"), "<alt>Return", addressbook_edit_address_cb, 0, NULL},
+ {N_("/_Address/_Delete"), NULL, addressbook_delete_address_cb, 0, NULL},
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/Import _LDIF file"), NULL, addressbook_import_ldif_cb, 0, NULL},
+ {N_("/_Help"), NULL, NULL, 0, "<LastBranch>"},
+ {N_("/_Help/_About"), NULL, about_show, 0, NULL}
+};
+
+/* New options to be added. */
+/*
+ {N_("/_Edit"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Edit/C_ut"), "<ctl>X", NULL, 0, NULL},
+ {N_("/_Edit/_Copy"), "<ctl>C", NULL, 0, NULL},
+ {N_("/_Edit/_Paste"), "<ctl>V", NULL, 0, NULL},
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/Import _Mozilla"), NULL, NULL, 0, NULL},
+ {N_("/_Tools/Import _vCard"), NULL, NULL, 0, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Export _LDIF file"), NULL, NULL, 0, NULL},
+ {N_("/_Tools/Export v_Card"), NULL, NULL, 0, NULL},
+*/
+
+static GtkItemFactoryEntry addressbook_tree_popup_entries[] =
+{
+ {N_("/New _Address"), NULL, addressbook_new_address_cb, 0, NULL},
+ {N_("/New _Group"), NULL, addressbook_new_group_cb, 0, NULL},
+ {N_("/New _Folder"), NULL, addressbook_new_folder_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit"), NULL, addressbook_treenode_edit_cb, 0, NULL},
+ {N_("/_Delete"), NULL, addressbook_treenode_delete_cb, 0, NULL}
+};
+
+static GtkItemFactoryEntry addressbook_list_popup_entries[] =
+{
+ {N_("/New _Address"), NULL, addressbook_new_address_cb, 0, NULL},
+ {N_("/New _Group"), NULL, addressbook_new_group_cb, 0, NULL},
+ {N_("/New _Folder"), NULL, addressbook_new_folder_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit"), NULL, addressbook_edit_address_cb, 0, NULL},
+ {N_("/_Delete"), NULL, addressbook_delete_address_cb, 0, NULL}
+};
+
+void addressbook_open(Compose *target)
+{
+ if (!addrbook.window) {
+ addressbook_read_file();
+ addressbook_create();
+ addressbook_load_tree();
+ gtk_ctree_select(GTK_CTREE(addrbook.ctree),
+ GTK_CTREE_NODE(GTK_CLIST(addrbook.ctree)->row_list));
+ } else
+ gtk_widget_hide(addrbook.window);
+
+ gtk_widget_show_all(addrbook.window);
+
+ addressbook_set_target_compose(target);
+}
+
+void addressbook_set_target_compose(Compose *target)
+{
+ addrbook.target_compose = target;
+
+ addressbook_button_set_sensitive();
+}
+
+Compose *addressbook_get_target_compose(void)
+{
+ return addrbook.target_compose;
+}
+
+void addressbook_refresh(void)
+{
+ if (addrbook.window) {
+ if (addrbook.treeSelected) {
+ gtk_ctree_select(GTK_CTREE(addrbook.ctree),
+ addrbook.treeSelected);
+ }
+ }
+ addressbook_export_to_file();
+}
+
+/*
+* Create the address book widgets. The address book contains two CTree widgets: the
+* address index tree on the left and the address list on the right.
+*
+* The address index tree displays a hierarchy of interfaces and groups. Each node in
+* this tree is linked to an address Adapter. Adapters have been created for interfaces,
+* data sources and folder objects.
+*
+* The address list displays group, person and email objects. These items are linked
+* directly to ItemGroup, ItemPerson and ItemEMail objects inside the address book data
+* sources.
+*
+* In the tradition of MVC architecture, the data stores have been separated from the
+* GUI components. The addrindex.c file provides the interface to all data stores.
+*/
+static void addressbook_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *menubar;
+ GtkWidget *vbox2;
+ GtkWidget *ctree_swin;
+ GtkWidget *ctree;
+ GtkWidget *clist_vbox;
+ GtkWidget *clist_swin;
+ GtkWidget *clist;
+ GtkWidget *paned;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *entry;
+ GtkWidget *statusbar;
+ GtkWidget *hbbox;
+ GtkWidget *hsbox;
+ GtkWidget *del_btn;
+ GtkWidget *reg_btn;
+ GtkWidget *lup_btn;
+ GtkWidget *to_btn;
+ GtkWidget *cc_btn;
+ GtkWidget *bcc_btn;
+ GtkWidget *tree_popup;
+ GtkWidget *list_popup;
+ GtkItemFactory *tree_factory;
+ GtkItemFactory *list_factory;
+ GtkItemFactory *menu_factory;
+ gint n_entries;
+ GList *nodeIf;
+
+ gchar *titles[N_COLS];
+ gchar *text;
+ gint i;
+
+ debug_print("Creating addressbook window...\n");
+
+ titles[COL_NAME] = _("Name");
+ titles[COL_ADDRESS] = _("E-Mail address");
+ titles[COL_REMARKS] = _("Remarks");
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Address book"));
+ gtk_widget_set_size_request
+ (window, ADDRESSBOOK_WIDTH, ADDRESSBOOK_HEIGHT);
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE);
+ gtk_window_set_wmclass(GTK_WINDOW(window), "addressbook", "Sylpheed");
+ gtk_widget_realize(window);
+
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(addressbook_close), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ n_entries = sizeof(addressbook_entries) /
+ sizeof(addressbook_entries[0]);
+ menubar = menubar_create(window, addressbook_entries, n_entries,
+ "<AddressBook>", NULL);
+ gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+ menu_factory = gtk_item_factory_from_widget(menubar);
+
+ vbox2 = gtk_vbox_new(FALSE, 4);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox2), BORDER_WIDTH);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0);
+
+ ctree_swin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ctree_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_widget_set_size_request(ctree_swin, COL_FOLDER_WIDTH + 40, -1);
+
+ /* Address index */
+ ctree = gtk_ctree_new(1, 0);
+ gtk_container_add(GTK_CONTAINER(ctree_swin), ctree);
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), 0, COL_FOLDER_WIDTH);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_SQUARE);
+ gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT);
+ gtk_clist_set_compare_func(GTK_CLIST(ctree),
+ addressbook_list_compare_func);
+
+ g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(addressbook_tree_selected), NULL);
+ g_signal_connect(G_OBJECT(ctree), "button_press_event",
+ G_CALLBACK(addressbook_tree_button_pressed),
+ NULL);
+ g_signal_connect(G_OBJECT(ctree), "button_release_event",
+ G_CALLBACK(addressbook_tree_button_released),
+ NULL);
+
+ clist_vbox = gtk_vbox_new(FALSE, 4);
+
+ clist_swin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(clist_vbox), clist_swin, TRUE, TRUE, 0);
+
+ /* Address list */
+ clist = gtk_ctree_new_with_titles(N_COLS, 0, titles);
+ gtk_container_add(GTK_CONTAINER(clist_swin), clist);
+ gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED);
+ gtk_ctree_set_line_style(GTK_CTREE(clist), GTK_CTREE_LINES_NONE);
+ gtk_ctree_set_expander_style(GTK_CTREE(clist), GTK_CTREE_EXPANDER_SQUARE);
+ gtk_ctree_set_indent(GTK_CTREE(clist), CTREE_INDENT);
+ gtk_clist_set_column_width(GTK_CLIST(clist), COL_NAME,
+ COL_NAME_WIDTH);
+ gtk_clist_set_column_width(GTK_CLIST(clist), COL_ADDRESS,
+ COL_ADDRESS_WIDTH);
+ gtk_clist_set_compare_func(GTK_CLIST(clist),
+ addressbook_list_compare_func);
+
+ for (i = 0; i < N_COLS; i++)
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button,
+ GTK_CAN_FOCUS);
+
+ g_signal_connect(G_OBJECT(clist), "tree_select_row",
+ G_CALLBACK(addressbook_list_row_selected), NULL);
+ g_signal_connect(G_OBJECT(clist), "tree_unselect_row",
+ G_CALLBACK(addressbook_list_row_unselected), NULL);
+ g_signal_connect(G_OBJECT(clist), "button_press_event",
+ G_CALLBACK(addressbook_list_button_pressed),
+ NULL);
+ g_signal_connect(G_OBJECT(clist), "button_release_event",
+ G_CALLBACK(addressbook_list_button_released),
+ NULL);
+ g_signal_connect(G_OBJECT(clist), "select_row",
+ G_CALLBACK(addressbook_list_selected), NULL);
+ g_signal_connect(G_OBJECT(clist), "tree_expand",
+ G_CALLBACK(addressbook_person_expand_node), NULL);
+ g_signal_connect(G_OBJECT(clist), "tree_collapse",
+ G_CALLBACK(addressbook_person_collapse_node), NULL);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(clist_vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new(_("Name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
+
+ address_completion_register_entry(GTK_ENTRY(entry));
+ g_signal_connect(G_OBJECT(entry), "focus_in_event",
+ G_CALLBACK(addressbook_entry_gotfocus), NULL);
+
+#if 0
+ g_signal_connect(G_OBJECT(entry), "changed",
+ G_CALLBACK(addressbook_entry_changed), NULL);
+#endif
+
+ paned = gtk_hpaned_new();
+ gtk_box_pack_start(GTK_BOX(vbox2), paned, TRUE, TRUE, 0);
+ gtk_paned_add1(GTK_PANED(paned), ctree_swin);
+ gtk_paned_add2(GTK_PANED(paned), clist_vbox);
+
+ /* Status bar */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ hbbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(hbbox), 2);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+
+ del_btn = gtk_button_new_with_label(_("Delete"));
+ GTK_WIDGET_SET_FLAGS(del_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), del_btn, TRUE, TRUE, 0);
+ reg_btn = gtk_button_new_with_label(_("Add"));
+ GTK_WIDGET_SET_FLAGS(reg_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), reg_btn, TRUE, TRUE, 0);
+ lup_btn = gtk_button_new_with_label(_("Lookup"));
+ GTK_WIDGET_SET_FLAGS(lup_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), lup_btn, TRUE, TRUE, 0);
+
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(addressbook_del_clicked), NULL);
+ g_signal_connect(G_OBJECT(reg_btn), "clicked",
+ G_CALLBACK(addressbook_reg_clicked), NULL);
+ g_signal_connect(G_OBJECT(lup_btn), "clicked",
+ G_CALLBACK(addressbook_lup_clicked), NULL);
+
+ to_btn = gtk_button_new_with_label
+ (prefs_common.trans_hdr ? _("To:") : "To:");
+ GTK_WIDGET_SET_FLAGS(to_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), to_btn, TRUE, TRUE, 0);
+ cc_btn = gtk_button_new_with_label
+ (prefs_common.trans_hdr ? _("Cc:") : "Cc:");
+ GTK_WIDGET_SET_FLAGS(cc_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), cc_btn, TRUE, TRUE, 0);
+ bcc_btn = gtk_button_new_with_label
+ (prefs_common.trans_hdr ? _("Bcc:") : "Bcc:");
+ GTK_WIDGET_SET_FLAGS(bcc_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(hbbox), bcc_btn, TRUE, TRUE, 0);
+
+ g_signal_connect(G_OBJECT(to_btn), "clicked",
+ G_CALLBACK(addressbook_to_clicked),
+ GINT_TO_POINTER(COMPOSE_ENTRY_TO));
+ g_signal_connect(G_OBJECT(cc_btn), "clicked",
+ G_CALLBACK(addressbook_to_clicked),
+ GINT_TO_POINTER(COMPOSE_ENTRY_CC));
+ g_signal_connect(G_OBJECT(bcc_btn), "clicked",
+ G_CALLBACK(addressbook_to_clicked),
+ GINT_TO_POINTER(COMPOSE_ENTRY_BCC));
+
+ /* Build icons for interface */
+ stock_pixmap_gdk( window, STOCK_PIXMAP_INTERFACE,
+ &interfacexpm, &interfacexpmmask );
+
+ /* Build control tables */
+ addrbookctl_build_map(window);
+ addrbookctl_build_iflist();
+ addrbookctl_build_ifselect();
+
+ /* Add each interface into the tree as a root level folder */
+ nodeIf = _addressInterfaceList_;
+ while( nodeIf ) {
+ AdapterInterface *adapter = nodeIf->data;
+ AddressInterface *iface = adapter->interface;
+ nodeIf = g_list_next(nodeIf);
+
+ if(iface->useInterface) {
+ AddressTypeControlItem *atci = adapter->atci;
+ text = atci->displayName;
+ adapter->treeNode =
+ gtk_ctree_insert_node( GTK_CTREE(ctree),
+ NULL, NULL, &text, FOLDER_SPACING,
+ interfacexpm, interfacexpmmask,
+ interfacexpm, interfacexpmmask,
+ FALSE, FALSE );
+ menu_set_sensitive( menu_factory, atci->menuCommand, adapter->haveLibrary );
+ gtk_ctree_node_set_row_data( GTK_CTREE(ctree), adapter->treeNode, adapter );
+ }
+ }
+
+ /* Popup menu */
+ n_entries = sizeof(addressbook_tree_popup_entries) /
+ sizeof(addressbook_tree_popup_entries[0]);
+ tree_popup = menu_create_items(addressbook_tree_popup_entries,
+ n_entries,
+ "<AddressBookTree>", &tree_factory,
+ NULL);
+ g_signal_connect(G_OBJECT(tree_popup), "selection_done",
+ G_CALLBACK(addressbook_popup_close), NULL);
+ n_entries = sizeof(addressbook_list_popup_entries) /
+ sizeof(addressbook_list_popup_entries[0]);
+ list_popup = menu_create_items(addressbook_list_popup_entries,
+ n_entries,
+ "<AddressBookList>", &list_factory,
+ NULL);
+
+ addrbook.window = window;
+ addrbook.menubar = menubar;
+ addrbook.ctree = ctree;
+ addrbook.clist = clist;
+ addrbook.entry = entry;
+ addrbook.statusbar = statusbar;
+ addrbook.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Addressbook Window" );
+
+ addrbook.del_btn = del_btn;
+ addrbook.reg_btn = reg_btn;
+ addrbook.lup_btn = lup_btn;
+ addrbook.to_btn = to_btn;
+ addrbook.cc_btn = cc_btn;
+ addrbook.bcc_btn = bcc_btn;
+
+ addrbook.tree_popup = tree_popup;
+ addrbook.list_popup = list_popup;
+ addrbook.tree_factory = tree_factory;
+ addrbook.list_factory = list_factory;
+ addrbook.menu_factory = menu_factory;
+
+ addrbook.listSelected = NULL;
+ address_completion_start(window);
+ gtk_widget_show_all(window);
+
+}
+
+static gint addressbook_close(void)
+{
+ gtk_widget_hide(addrbook.window);
+ addressbook_export_to_file();
+ return TRUE;
+}
+
+static void addressbook_status_show( gchar *msg ) {
+ if( addrbook.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(addrbook.statusbar), addrbook.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(addrbook.statusbar), addrbook.status_cid, msg );
+ }
+ }
+}
+
+static void addressbook_ds_show_message( AddressDataSource *ds ) {
+ gint retVal;
+ gchar *name;
+ *addressbook_msgbuf = '\0';
+ if( ds ) {
+ name = addrindex_ds_get_name( ds );
+ retVal = addrindex_ds_get_status_code( ds );
+ if( retVal == MGU_SUCCESS ) {
+ if( ds ) {
+ sprintf( addressbook_msgbuf, "%s", name );
+ }
+ }
+ else {
+ if( ds == NULL ) {
+ sprintf( addressbook_msgbuf, "%s", mgu_error2string( retVal ) );
+ }
+ else {
+ sprintf( addressbook_msgbuf, "%s: %s", name, mgu_error2string( retVal ) );
+ }
+ }
+ }
+ addressbook_status_show( addressbook_msgbuf );
+}
+
+static void addressbook_button_set_sensitive(void)
+{
+ gboolean to_sens = FALSE;
+ gboolean cc_sens = FALSE;
+ gboolean bcc_sens = FALSE;
+
+ if (!addrbook.window) return;
+
+ if (addrbook.target_compose) {
+ to_sens = TRUE;
+ cc_sens = TRUE;
+ if (addrbook.target_compose->use_bcc)
+ bcc_sens = TRUE;
+ }
+
+ gtk_widget_set_sensitive(addrbook.to_btn, to_sens);
+ gtk_widget_set_sensitive(addrbook.cc_btn, cc_sens);
+ gtk_widget_set_sensitive(addrbook.bcc_btn, bcc_sens);
+}
+
+/*
+* Delete one or more objects from address list.
+*/
+static void addressbook_del_clicked(GtkButton *button, gpointer data)
+{
+ GtkCTree *clist = GTK_CTREE(addrbook.clist);
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *pobj, *obj;
+ AdapterDSource *ads = NULL;
+ GtkCTreeNode *nodeList;
+ gboolean procFlag;
+ AlertValue aval;
+ AddressBookFile *abf = NULL;
+ AddressDataSource *ds = NULL;
+
+ pobj = gtk_ctree_node_get_row_data(ctree, addrbook.opened );
+ g_return_if_fail(pobj != NULL);
+
+ nodeList = addrbook.listSelected;
+ obj = gtk_ctree_node_get_row_data( clist, nodeList );
+ if( obj == NULL) return;
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds == NULL ) return;
+
+ procFlag = FALSE;
+ if( pobj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(pobj);
+ if( ads->subType == ADDR_BOOK ) procFlag = TRUE;
+ }
+ else if( pobj->type == ADDR_ITEM_FOLDER ) {
+ procFlag = TRUE;
+ }
+ else if( pobj->type == ADDR_ITEM_GROUP ) {
+ procFlag = TRUE;
+ }
+ if( ! procFlag ) return;
+ abf = ds->rawDataSource;
+ if( abf == NULL ) return;
+
+ /* Confirm deletion */
+ aval = alertpanel( _("Delete address(es)"),
+ _("Really delete the address(es)?"),
+ _("Yes"), _("No"), NULL );
+ if( aval != G_ALERTDEFAULT ) return;
+
+ /* Process deletions */
+ if( pobj->type == ADDR_DATASOURCE || pobj->type == ADDR_ITEM_FOLDER ) {
+ /* Items inside folders */
+ GList *node;
+ node = _addressListSelection_;
+ while( node ) {
+ AddrItemObject *aio = node->data;
+ node = g_list_next( node );
+ if( aio->type == ADDR_ITEM_GROUP ) {
+ ItemGroup *item = ( ItemGroup * ) aio;
+ GtkCTreeNode *nd = NULL;
+
+ nd = addressbook_find_group_node( addrbook.opened, item );
+ item = addrbook_remove_group( abf, item );
+ if( item ) {
+ addritem_free_item_group( item );
+ item = NULL;
+ }
+ /* Remove group from parent node */
+ gtk_ctree_remove_node( ctree, nd );
+ }
+ else if( aio->type == ADDR_ITEM_PERSON ) {
+ ItemPerson *item = ( ItemPerson * ) aio;
+ item = addrbook_remove_person( abf, item );
+ if( item ) {
+ addritem_free_item_person( item );
+ item = NULL;
+ }
+ }
+ else if( aio->type == ADDR_ITEM_EMAIL ) {
+ ItemEMail *item = ( ItemEMail * ) aio;
+ ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(item);
+ item = addrbook_person_remove_email( abf, person, item );
+ if( item ) {
+ addritem_free_item_email( item );
+ item = NULL;
+ }
+ }
+ }
+ addressbook_list_select_clear();
+ gtk_ctree_select( ctree, addrbook.opened);
+ return;
+ }
+ else if( pobj->type == ADDR_ITEM_GROUP ) {
+ /* Items inside groups */
+ GList *node;
+ node = _addressListSelection_;
+ while( node ) {
+ AddrItemObject *aio = node->data;
+ node = g_list_next( node );
+ if( aio->type == ADDR_ITEM_EMAIL ) {
+ ItemEMail *item = ( ItemEMail * ) aio;
+ ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(item);
+ item = addrbook_person_remove_email( abf, person, item );
+ if( item ) {
+ addritem_print_item_email( item, stdout );
+ addritem_free_item_email( item );
+ item = NULL;
+ }
+ }
+ }
+ addressbook_list_select_clear();
+ gtk_ctree_select( ctree, addrbook.opened);
+ return;
+ }
+
+ gtk_ctree_node_set_row_data( clist, nodeList, NULL );
+ gtk_ctree_remove_node( clist, nodeList );
+ addressbook_list_select_remove( obj );
+
+}
+
+static void addressbook_reg_clicked(GtkButton *button, gpointer data)
+{
+ addressbook_new_address_cb( NULL, 0, NULL );
+}
+
+gchar *addressbook_format_address( AddressObject * obj ) {
+ gchar *buf = NULL;
+ gchar *name = NULL;
+ gchar *address = NULL;
+
+ if( obj->type == ADDR_ITEM_EMAIL ) {
+ ItemPerson *person = NULL;
+ ItemEMail *email = ( ItemEMail * ) obj;
+
+ person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+ if( email->address ) {
+ if( ADDRITEM_NAME(email) ) {
+ name = ADDRITEM_NAME(email);
+ if( *name == '\0' ) {
+ name = ADDRITEM_NAME(person);
+ }
+ }
+ else if( ADDRITEM_NAME(person) ) {
+ name = ADDRITEM_NAME(person);
+ }
+ else {
+ buf = g_strdup( email->address );
+ }
+ address = email->address;
+ }
+ }
+ else if( obj->type == ADDR_ITEM_PERSON ) {
+ ItemPerson *person = ( ItemPerson * ) obj;
+ GList *node = person->listEMail;
+
+ name = ADDRITEM_NAME(person);
+ if( node ) {
+ ItemEMail *email = ( ItemEMail * ) node->data;
+ address = email->address;
+ }
+ }
+ if( address ) {
+ if( name && name[0] != '\0' ) {
+ if( name[0] != '"' && strpbrk( name, ",.[]<>" ) != NULL )
+ buf = g_strdup_printf( "\"%s\" <%s>", name, address );
+ else
+ buf = g_strdup_printf( "%s <%s>", name, address );
+ }
+ else {
+ buf = g_strdup( address );
+ }
+ }
+
+ return buf;
+}
+
+static void addressbook_to_clicked(GtkButton *button, gpointer data)
+{
+ GList *node = _addressListSelection_;
+ if (!addrbook.target_compose) return;
+ while( node ) {
+ AddressObject *obj = node->data;
+ Compose *compose = addrbook.target_compose;
+ node = g_list_next( node );
+ if( obj->type == ADDR_ITEM_PERSON || obj->type == ADDR_ITEM_EMAIL ) {
+ gchar *addr = addressbook_format_address( obj );
+ compose_entry_append( compose, addr, (ComposeEntryType) data );
+ g_free( addr );
+ addr = NULL;
+ }
+ else if( obj->type == ADDR_ITEM_GROUP ) {
+ ItemGroup *group = ( ItemGroup * ) obj;
+ GList *nodeMail = group->listEMail;
+ while( nodeMail ) {
+ ItemEMail *email = nodeMail->data;
+ gchar *addr = addressbook_format_address( ( AddressObject * ) email );
+ compose_entry_append( compose, addr, (ComposeEntryType) data );
+ g_free( addr );
+ nodeMail = g_list_next( nodeMail );
+ }
+ }
+ }
+}
+
+static void addressbook_menubar_set_sensitive( gboolean sensitive ) {
+ menu_set_sensitive( addrbook.menu_factory, "/File/New Book", sensitive );
+ menu_set_sensitive( addrbook.menu_factory, "/File/New vCard", sensitive );
+#ifdef USE_JPILOT
+ menu_set_sensitive( addrbook.menu_factory, "/File/New JPilot", sensitive );
+#endif
+#ifdef USE_LDAP
+ menu_set_sensitive( addrbook.menu_factory, "/File/New Server", sensitive );
+#endif
+ menu_set_sensitive( addrbook.menu_factory, "/File/Edit", sensitive );
+ menu_set_sensitive( addrbook.menu_factory, "/File/Delete", sensitive );
+
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Address", sensitive );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Group", sensitive );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Folder", sensitive );
+ gtk_widget_set_sensitive( addrbook.reg_btn, sensitive );
+ gtk_widget_set_sensitive( addrbook.del_btn, sensitive );
+}
+
+static void addressbook_menuitem_set_sensitive( AddressObject *obj, GtkCTreeNode *node ) {
+ gboolean canEdit = FALSE;
+ gboolean canAdd = FALSE;
+ gboolean canEditTr = TRUE;
+ gboolean editAddress = FALSE;
+ AddressTypeControlItem *atci = NULL;
+ AddressDataSource *ds = NULL;
+ AddressInterface *iface = NULL;
+
+ if( obj == NULL ) return;
+ if( obj->type == ADDR_INTERFACE ) {
+ AdapterInterface *adapter = ADAPTER_INTERFACE(obj);
+ iface = adapter->interface;
+ if( iface ) {
+ if( iface->haveLibrary ) {
+ /* Enable appropriate File / New command */
+ atci = adapter->atci;
+ menu_set_sensitive( addrbook.menu_factory, atci->menuCommand, TRUE );
+ }
+ }
+ canEditTr = FALSE;
+ }
+ else if( obj->type == ADDR_DATASOURCE ) {
+ AdapterDSource *ads = ADAPTER_DSOURCE(obj);
+ ds = ads->dataSource;
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ canAdd = canEdit = editAddress = TRUE;
+ }
+ if( ! iface->haveLibrary ) {
+ canAdd = canEdit = editAddress = FALSE;
+ }
+ }
+ else if( obj->type == ADDR_ITEM_FOLDER ) {
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds ) {
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ canAdd = editAddress = TRUE;
+ }
+ }
+ }
+ else if( obj->type == ADDR_ITEM_GROUP ) {
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds ) {
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ editAddress = TRUE;
+ }
+ }
+ }
+
+ if( addrbook.listSelected == NULL ) canEdit = FALSE;
+
+ /* Enable add */
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Address", editAddress );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Group", canAdd );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/New Folder", canAdd );
+ gtk_widget_set_sensitive( addrbook.reg_btn, editAddress );
+
+ /* Enable edit */
+ menu_set_sensitive( addrbook.menu_factory, "/Address/Edit", canEdit );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/Delete", canEdit );
+ gtk_widget_set_sensitive( addrbook.del_btn, canEdit );
+
+ menu_set_sensitive( addrbook.menu_factory, "/File/Edit", canEditTr );
+ menu_set_sensitive( addrbook.menu_factory, "/File/Delete", canEditTr );
+}
+
+static void addressbook_tree_selected(GtkCTree *ctree, GtkCTreeNode *node,
+ gint column, gpointer data)
+{
+ AddressObject *obj = NULL;
+ AdapterDSource *ads = NULL;
+ AddressDataSource *ds = NULL;
+ ItemFolder *rootFolder = NULL;
+
+ addrbook.treeSelected = node;
+ addrbook.listSelected = NULL;
+ addressbook_status_show( "" );
+ if( addrbook.entry != NULL ) gtk_entry_set_text(GTK_ENTRY(addrbook.entry), "");
+
+ if( addrbook.clist ) gtk_clist_clear( GTK_CLIST(addrbook.clist) );
+ if( node ) obj = gtk_ctree_node_get_row_data( ctree, node );
+ if( obj == NULL ) return;
+
+ addrbook.opened = node;
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ /* Read from file */
+ static gboolean tVal = TRUE;
+
+ ads = ADAPTER_DSOURCE(obj);
+ if( ads == NULL ) return;
+ ds = ads->dataSource;
+ if( ds == NULL ) return;
+
+ if( addrindex_ds_get_modify_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+ addressbook_ds_show_message( ds );
+
+ if( ! addrindex_ds_get_access_flag( ds ) ) {
+ /* Remove existing folders and groups */
+ gtk_clist_freeze( GTK_CLIST(ctree) );
+ addressbook_tree_remove_children( ctree, node );
+ gtk_clist_thaw( GTK_CLIST(ctree) );
+
+ /* Load folders into the tree */
+ rootFolder = addrindex_ds_get_root_folder( ds );
+ if( ds->type == ADDR_IF_JPILOT ) {
+ addressbook_node_add_folder( node, ds, rootFolder, ADDR_CATEGORY );
+ }
+ else {
+ addressbook_node_add_folder( node, ds, rootFolder, ADDR_ITEM_FOLDER );
+ }
+ addrindex_ds_set_access_flag( ds, &tVal );
+ gtk_ctree_expand( ctree, node );
+ }
+ }
+
+ /* Update address list */
+ addressbook_set_clist( obj );
+
+ /* Setup main menu selections */
+ addressbook_menubar_set_sensitive( FALSE );
+ addressbook_menuitem_set_sensitive( obj, node );
+
+ addressbook_list_select_clear();
+
+}
+
+static void addressbook_list_selected(GtkCList *clist, gint row, gint column,
+ GdkEvent *event, gpointer data)
+{
+ if (event && event->type == GDK_2BUTTON_PRESS) {
+ /* Handle double click */
+ if (prefs_common.add_address_by_click &&
+ addrbook.target_compose)
+ addressbook_to_clicked(NULL, GINT_TO_POINTER(COMPOSE_ENTRY_TO));
+ else
+ addressbook_edit_address_cb(NULL, 0, NULL);
+ }
+}
+
+#if 0
+static void addressbook_list_select_show() {
+ GList *node = _addressListSelection_;
+ gchar *addr = NULL;
+ printf( "show selection...>>>\n" );
+ while( node != NULL ) {
+ AddressObject *obj = ( AddressObject * ) node->data;
+ if( obj ) {
+ printf( "- %d : '%s'\n", obj->type, obj->name );
+ if( obj->type == ADDR_ITEM_GROUP ) {
+ ItemGroup *group = ( ItemGroup * ) obj;
+ GList *node = group->listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ addr = addressbook_format_address( ( AddressObject * ) email );
+ if( addr ) {
+ printf( "\tgrp >%s<\n", addr );
+ g_free( addr );
+ }
+ node = g_list_next( node );
+ }
+ }
+ else {
+ addr = addressbook_format_address( obj );
+ if( addr ) {
+ printf( "\t>%s<\n", addr );
+ g_free( addr );
+ }
+ }
+ }
+ else {
+ printf( "- NULL" );
+ }
+ node = g_list_next( node );
+ }
+ printf( "show selection...<<<\n" );
+}
+#endif
+
+static void addressbook_list_select_clear() {
+ if( _addressListSelection_ ) {
+ g_list_free( _addressListSelection_ );
+ }
+ _addressListSelection_ = NULL;
+}
+
+static void addressbook_list_select_add( AddressObject *obj ) {
+ if( obj ) {
+ if( obj->type == ADDR_ITEM_PERSON ||
+ obj->type == ADDR_ITEM_EMAIL ||
+ obj->type == ADDR_ITEM_GROUP ) {
+ if( ! g_list_find( _addressListSelection_, obj ) ) {
+ _addressListSelection_ = g_list_append( _addressListSelection_, obj );
+ }
+ }
+ }
+ /* addressbook_list_select_show(); */
+}
+
+static void addressbook_list_select_remove( AddressObject *obj ) {
+ if( obj == NULL ) return;
+ if( _addressListSelection_ ) {
+ _addressListSelection_ = g_list_remove( _addressListSelection_, obj );
+ }
+ /* addressbook_list_select_show(); */
+}
+
+static void addressbook_list_row_selected( GtkCTree *clist, GtkCTreeNode *node, gint column, gpointer data ) {
+ GtkEntry *entry = GTK_ENTRY(addrbook.entry);
+ AddressObject *obj = NULL;
+ AddressObject *pobj = NULL;
+ AdapterDSource *ads = NULL;
+ AddressInterface *iface = NULL;
+ AddressDataSource *ds = NULL;
+ gboolean canEdit = FALSE;
+ gboolean canDelete = FALSE;
+
+ gtk_entry_set_text( entry, "" );
+ addrbook.listSelected = node;
+ obj = gtk_ctree_node_get_row_data( clist, node );
+ if( obj != NULL ) {
+ /* printf( "list select: %d : '%s'\n", obj->type, obj->name ); */
+ addressbook_list_select_add( obj );
+ }
+
+ pobj = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), addrbook.treeSelected );
+ if( pobj == NULL ) return;
+
+ menu_set_insensitive_all( GTK_MENU_SHELL(addrbook.list_popup) );
+
+ if( pobj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(pobj);
+ ds = ads->dataSource;
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ canEdit = TRUE;
+ menu_set_sensitive( addrbook.list_factory, "/New Address", TRUE );
+ menu_set_sensitive( addrbook.list_factory, "/New Folder", TRUE );
+ menu_set_sensitive( addrbook.list_factory, "/New Group", TRUE );
+ gtk_widget_set_sensitive( addrbook.reg_btn, TRUE );
+ }
+ }
+ else if( pobj->type != ADDR_INTERFACE ) {
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ if( pobj->type == ADDR_ITEM_FOLDER || pobj->type == ADDR_ITEM_GROUP ) {
+ canEdit = TRUE;
+ menu_set_sensitive( addrbook.list_factory, "/New Address", TRUE );
+ gtk_widget_set_sensitive( addrbook.reg_btn, TRUE );
+ }
+ if( pobj->type == ADDR_ITEM_FOLDER ) {
+ canEdit = TRUE;
+ menu_set_sensitive( addrbook.list_factory, "/New Folder", TRUE );
+ menu_set_sensitive( addrbook.list_factory, "/New Group", TRUE );
+ }
+ }
+ }
+ if( obj == NULL ) canEdit = FALSE;
+ canDelete = canEdit;
+ if( GTK_CLIST(clist)->selection && GTK_CLIST(clist)->selection->next ) canEdit = FALSE;
+
+ menu_set_sensitive( addrbook.list_factory, "/Edit", canEdit );
+ menu_set_sensitive( addrbook.list_factory, "/Delete", canDelete );
+
+ menu_set_sensitive( addrbook.menu_factory, "/Address/Edit", canEdit );
+ menu_set_sensitive( addrbook.menu_factory, "/Address/Delete", canDelete );
+
+ gtk_widget_set_sensitive( addrbook.del_btn, canDelete );
+
+}
+
+static void addressbook_list_row_unselected( GtkCTree *ctree, GtkCTreeNode *node, gint column, gpointer data ) {
+ AddressObject *obj;
+
+ obj = gtk_ctree_node_get_row_data( ctree, node );
+ if( obj != NULL ) {
+ /* g_print( "list unselect: %d : '%s'\n", obj->type, obj->name ); */
+ addressbook_list_select_remove( obj );
+ }
+}
+
+static void addressbook_entry_gotfocus( GtkWidget *widget ) {
+ gtk_editable_select_region( GTK_EDITABLE(addrbook.entry), 0, -1 );
+}
+
+static gboolean addressbook_list_button_pressed(GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ if( ! event ) return FALSE;
+ if( event->button == 3 ) {
+ gtk_menu_popup( GTK_MENU(addrbook.list_popup), NULL, NULL, NULL, NULL,
+ event->button, event->time );
+ }
+ return FALSE;
+}
+
+static gboolean addressbook_list_button_released(GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ return FALSE;
+}
+
+static gboolean addressbook_tree_button_pressed(GtkWidget *ctree,
+ GdkEventButton *event,
+ gpointer data)
+{
+ GtkCList *clist = GTK_CLIST(ctree);
+ gint row, column;
+ AddressObject *obj = NULL;
+ /* GtkCTreeNode *node; */
+ AdapterDSource *ads = NULL;
+ AddressInterface *iface = NULL;
+ AddressDataSource *ds = NULL;
+ /* AddressTypeControlItem *atci = NULL; */
+ gboolean canEdit = FALSE;
+
+ if( ! event ) return FALSE;
+ addressbook_menubar_set_sensitive( FALSE );
+/* */
+ if( gtk_clist_get_selection_info( clist, event->x, event->y, &row, &column ) ) {
+ gtk_clist_select_row( clist, row, column );
+ gtkut_clist_set_focus_row(clist, row);
+ obj = gtk_clist_get_row_data( clist, row );
+ }
+/* */
+ menu_set_insensitive_all(GTK_MENU_SHELL(addrbook.tree_popup));
+
+ if( obj == NULL ) return FALSE;
+ if (obj->type == ADDR_DATASOURCE) {
+ ads = ADAPTER_DSOURCE(obj);
+ ds = ads->dataSource;
+ iface = ds->interface;
+ canEdit = TRUE;
+ if( ! iface->readOnly ) {
+ menu_set_sensitive( addrbook.tree_factory, "/New Address", TRUE );
+ menu_set_sensitive( addrbook.tree_factory, "/New Folder", TRUE );
+ menu_set_sensitive( addrbook.tree_factory, "/New Group", TRUE );
+ gtk_widget_set_sensitive( addrbook.reg_btn, TRUE );
+ }
+ }
+ else if (obj->type == ADDR_ITEM_FOLDER) {
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ canEdit = TRUE;
+ menu_set_sensitive( addrbook.tree_factory, "/New Address", TRUE );
+ menu_set_sensitive( addrbook.tree_factory, "/New Folder", TRUE );
+ menu_set_sensitive( addrbook.tree_factory, "/New Group", TRUE );
+ gtk_widget_set_sensitive( addrbook.reg_btn, TRUE );
+ }
+ }
+ else if (obj->type == ADDR_ITEM_GROUP) {
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ iface = ds->interface;
+ if( ! iface->readOnly ) {
+ canEdit = TRUE;
+ menu_set_sensitive( addrbook.tree_factory, "/New Address", TRUE );
+ gtk_widget_set_sensitive( addrbook.reg_btn, TRUE );
+ }
+ }
+
+ /* Enable edit */
+ menu_set_sensitive( addrbook.tree_factory, "/Edit", canEdit );
+ menu_set_sensitive( addrbook.tree_factory, "/Delete", canEdit );
+ menu_set_sensitive( addrbook.menu_factory, "/File/Edit", canEdit );
+ menu_set_sensitive( addrbook.menu_factory, "/File/Delete", canEdit );
+
+ if( event->button == 3 ) {
+ gtk_menu_popup(GTK_MENU(addrbook.tree_popup), NULL, NULL, NULL, NULL,
+ event->button, event->time);
+ }
+
+ return FALSE;
+}
+
+static gboolean addressbook_tree_button_released(GtkWidget *ctree,
+ GdkEventButton *event,
+ gpointer data)
+{
+ gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened);
+ gtkut_ctree_set_focus_row(GTK_CTREE(addrbook.ctree), addrbook.opened);
+ return FALSE;
+}
+
+static void addressbook_popup_close(GtkMenuShell *menu_shell, gpointer data)
+{
+ if (!addrbook.opened) return;
+
+ gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened);
+ gtkut_ctree_set_focus_row(GTK_CTREE(addrbook.ctree),
+ addrbook.opened);
+}
+
+static void addressbook_new_folder_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *obj = NULL;
+ AddressDataSource *ds = NULL;
+ AddressBookFile *abf = NULL;
+ ItemFolder *parentFolder = NULL;
+ ItemFolder *folder = NULL;
+
+ if( ! addrbook.treeSelected ) return;
+ obj = gtk_ctree_node_get_row_data( ctree, addrbook.treeSelected );
+ if( obj == NULL ) return;
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds == NULL ) return;
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ if( ADAPTER_DSOURCE(obj)->subType != ADDR_BOOK ) return;
+ }
+ else if( obj->type == ADDR_ITEM_FOLDER ) {
+ parentFolder = ADAPTER_FOLDER(obj)->itemFolder;
+ }
+ else {
+ return;
+ }
+
+ abf = ds->rawDataSource;
+ if( abf == NULL ) return;
+ folder = addressbook_edit_folder( abf, parentFolder, NULL );
+ if( folder ) {
+ GtkCTreeNode *nn;
+ nn = addressbook_node_add_folder( addrbook.treeSelected, ds, folder, ADDR_ITEM_FOLDER );
+ gtk_ctree_expand( ctree, addrbook.treeSelected );
+ if( addrbook.treeSelected == addrbook.opened ) addressbook_set_clist(obj);
+ }
+
+}
+
+static void addressbook_new_group_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *obj = NULL;
+ AddressDataSource *ds = NULL;
+ AddressBookFile *abf = NULL;
+ ItemFolder *parentFolder = NULL;
+ ItemGroup *group = NULL;
+
+ if( ! addrbook.treeSelected ) return;
+ obj = gtk_ctree_node_get_row_data(ctree, addrbook.treeSelected);
+ if( obj == NULL ) return;
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds == NULL ) return;
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ if( ADAPTER_DSOURCE(obj)->subType != ADDR_BOOK ) return;
+ }
+ else if( obj->type == ADDR_ITEM_FOLDER ) {
+ parentFolder = ADAPTER_FOLDER(obj)->itemFolder;
+ }
+ else {
+ return;
+ }
+
+ abf = ds->rawDataSource;
+ if( abf == NULL ) return;
+ group = addressbook_edit_group( abf, parentFolder, NULL );
+ if( group ) {
+ GtkCTreeNode *nn;
+ nn = addressbook_node_add_group( addrbook.treeSelected, ds, group );
+ gtk_ctree_expand( ctree, addrbook.treeSelected );
+ if( addrbook.treeSelected == addrbook.opened ) addressbook_set_clist(obj);
+ }
+
+}
+
+static void addressbook_change_node_name(GtkCTreeNode *node, const gchar *name)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ gchar *text[1];
+ guint8 spacing;
+ GdkPixmap *pix_cl, *pix_op;
+ GdkBitmap *mask_cl, *mask_op;
+ gboolean is_leaf, expanded;
+
+ gtk_ctree_get_node_info(ctree, node, text, &spacing,
+ &pix_cl, &mask_cl, &pix_op, &mask_op,
+ &is_leaf, &expanded);
+ gtk_ctree_set_node_info(ctree, node, name, spacing,
+ pix_cl, mask_cl, pix_op, mask_op,
+ is_leaf, expanded);
+}
+
+/*
+* Edit data source.
+* Enter: obj Address object to edit.
+* node Node in tree.
+* Return: New name of data source.
+*/
+static gchar *addressbook_edit_datasource( AddressObject *obj, GtkCTreeNode *node ) {
+ gchar *newName = NULL;
+ AddressDataSource *ds = NULL;
+ AddressInterface *iface = NULL;
+ AdapterDSource *ads = NULL;
+
+ ds = addressbook_find_datasource( node );
+ if( ds == NULL ) return NULL;
+ iface = ds->interface;
+ if( ! iface->haveLibrary ) return NULL;
+
+ /* Read data from data source */
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ /* Handle edit */
+ ads = ADAPTER_DSOURCE(obj);
+ if( ads->subType == ADDR_BOOK ) {
+ if( addressbook_edit_book( _addressIndex_, ads ) == NULL ) return NULL;
+ }
+ else if( ads->subType == ADDR_VCARD ) {
+ if( addressbook_edit_vcard( _addressIndex_, ads ) == NULL ) return NULL;
+ }
+#ifdef USE_JPILOT
+ else if( ads->subType == ADDR_JPILOT ) {
+ if( addressbook_edit_jpilot( _addressIndex_, ads ) == NULL ) return NULL;
+ }
+#endif
+#ifdef USE_LDAP
+ else if( ads->subType == ADDR_LDAP ) {
+ if( addressbook_edit_ldap( _addressIndex_, ads ) == NULL ) return NULL;
+ }
+#endif
+ else {
+ return NULL;
+ }
+ newName = obj->name;
+ return newName;
+}
+
+/*
+* Edit an object that is in the address tree area.
+*/
+static void addressbook_treenode_edit_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *obj;
+ AddressDataSource *ds = NULL;
+ AddressBookFile *abf = NULL;
+ GtkCTreeNode *node = NULL, *parentNode = NULL;
+ gchar *name = NULL;
+
+ if( ! addrbook.treeSelected ) return;
+ node = addrbook.treeSelected;
+ if( GTK_CTREE_ROW(node)->level == 1 ) return;
+ obj = gtk_ctree_node_get_row_data( ctree, node );
+ if( obj == NULL ) return;
+ parentNode = GTK_CTREE_ROW(node)->parent;
+
+ ds = addressbook_find_datasource( node );
+ if( ds == NULL ) return;
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ name = addressbook_edit_datasource( obj, node );
+ if( name == NULL ) return;
+ }
+ else {
+ abf = ds->rawDataSource;
+ if( abf == NULL ) return;
+ if( obj->type == ADDR_ITEM_FOLDER ) {
+ AdapterFolder *adapter = ADAPTER_FOLDER(obj);
+ ItemFolder *item = adapter->itemFolder;
+ ItemFolder *parentFolder = NULL;
+ parentFolder = ( ItemFolder * ) ADDRITEM_PARENT(item);
+ if( addressbook_edit_folder( abf, parentFolder, item ) == NULL ) return;
+ name = ADDRITEM_NAME(item);
+ }
+ else if( obj->type == ADDR_ITEM_GROUP ) {
+ AdapterGroup *adapter = ADAPTER_GROUP(obj);
+ ItemGroup *item = adapter->itemGroup;
+ ItemFolder *parentFolder = NULL;
+ parentFolder = ( ItemFolder * ) ADDRITEM_PARENT(item);
+ if( addressbook_edit_group( abf, parentFolder, item ) == NULL ) return;
+ name = ADDRITEM_NAME(item);
+ }
+ }
+ if( name && parentNode ) {
+ /* Update node in tree view */
+ addressbook_change_node_name( node, name );
+ gtk_ctree_sort_node(ctree, parentNode);
+ gtk_ctree_expand( ctree, node );
+ gtk_ctree_select( ctree, node );
+ }
+}
+
+/*
+* Delete an item from the tree widget.
+*/
+static void addressbook_treenode_delete_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ GtkCTreeNode *node = NULL;
+ AddressObject *obj;
+ gchar *message;
+ AlertValue aval;
+ AddressBookFile *abf = NULL;
+ AdapterDSource *ads = NULL;
+ AddressInterface *iface = NULL;
+ AddressDataSource *ds = NULL;
+ gboolean remFlag = FALSE;
+
+ if( ! addrbook.treeSelected ) return;
+ node = addrbook.treeSelected;
+ if( GTK_CTREE_ROW(node)->level == 1 ) return;
+
+ obj = gtk_ctree_node_get_row_data( ctree, node );
+ g_return_if_fail(obj != NULL);
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(obj);
+ if( ads == NULL ) return;
+ ds = ads->dataSource;
+ if( ds == NULL ) return;
+ }
+ else {
+ /* Must be folder or something else */
+ ds = addressbook_find_datasource( node );
+ if( ds == NULL ) return;
+
+ /* Only allow deletion from non-readOnly data sources */
+ iface = ds->interface;
+ if( iface->readOnly ) return;
+ }
+
+ /* Confirm deletion */
+ if( obj->type == ADDR_ITEM_FOLDER ) {
+ message = g_strdup_printf( _(
+ "Do you want to delete the folder AND all addresses in `%s' ? \n" \
+ "If deleting the folder only, addresses will be moved into parent folder." ),
+ obj->name );
+ aval = alertpanel( _("Delete"), message, _("Folder only"), _("Folder and Addresses"), _("Cancel") );
+ g_free(message);
+ if( aval == G_ALERTOTHER ) return;
+ }
+ else {
+ message = g_strdup_printf(_("Really delete `%s' ?"), obj->name);
+ aval = alertpanel(_("Delete"), message, _("Yes"), _("No"), NULL);
+ g_free(message);
+ if (aval != G_ALERTDEFAULT) return;
+ }
+
+ /* Proceed with deletion */
+ if( obj->type == ADDR_DATASOURCE ) {
+ /* Remove data source. */
+ if( addrindex_index_remove_datasource( _addressIndex_, ds ) ) {
+ addressbook_free_child_adapters( node );
+ remFlag = TRUE;
+ }
+ }
+ else {
+ abf = addressbook_get_book_file();
+ if( abf == NULL ) return;
+ }
+
+ if( obj->type == ADDR_ITEM_FOLDER ) {
+ AdapterFolder *adapter = ADAPTER_FOLDER(obj);
+ ItemFolder *item = adapter->itemFolder;
+ if( aval == G_ALERTDEFAULT ) {
+ /* Remove folder only */
+ item = addrbook_remove_folder( abf, item );
+ if( item ) {
+ addritem_free_item_folder( item );
+ addressbook_move_nodes_up( ctree, node );
+ remFlag = TRUE;
+ }
+ }
+ else if( aval == G_ALERTALTERNATE ) {
+ /* Remove folder and addresses */
+ item = addrbook_remove_folder_delete( abf, item );
+ if( item ) {
+ addritem_free_item_folder( item );
+ addressbook_free_child_adapters( node );
+ remFlag = TRUE;
+ }
+ }
+ }
+ else if( obj->type == ADDR_ITEM_GROUP ) {
+ AdapterGroup *adapter = ADAPTER_GROUP(obj);
+ ItemGroup *item = adapter->itemGroup;
+
+ item = addrbook_remove_group( abf, item );
+ if( item ) {
+ addritem_free_item_group( item );
+ remFlag = TRUE;
+ }
+ }
+
+ if( remFlag ) {
+ /* Free up adapter and remove node. */
+ addressbook_free_adapter( node );
+ gtk_ctree_remove_node(ctree, node );
+ }
+}
+
+static void addressbook_new_address_cb( gpointer data, guint action, GtkWidget *widget ) {
+ AddressObject *pobj = NULL;
+ AddressDataSource *ds = NULL;
+ AddressBookFile *abf = NULL;
+
+ pobj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), addrbook.treeSelected);
+ if( pobj == NULL ) return;
+ ds = addressbook_find_datasource( GTK_CTREE_NODE(addrbook.treeSelected) );
+ if( ds == NULL ) return;
+
+ abf = ds->rawDataSource;
+ if( abf == NULL ) return;
+
+ if( pobj->type == ADDR_DATASOURCE ) {
+ if( ADAPTER_DSOURCE(pobj)->subType == ADDR_BOOK ) {
+ /* New address */
+ ItemPerson *person = addressbook_edit_person( abf, NULL, NULL, FALSE );
+ if( person ) {
+ if( addrbook.treeSelected == addrbook.opened ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+ }
+ }
+ else if( pobj->type == ADDR_ITEM_FOLDER ) {
+ /* New address */
+ ItemFolder *folder = ADAPTER_FOLDER(pobj)->itemFolder;
+ ItemPerson *person = addressbook_edit_person( abf, folder, NULL, FALSE );
+ if( person ) {
+ if (addrbook.treeSelected == addrbook.opened) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+ }
+ else if( pobj->type == ADDR_ITEM_GROUP ) {
+ /* New address in group */
+ ItemGroup *group = ADAPTER_GROUP(pobj)->itemGroup;
+ if( addressbook_edit_group( abf, NULL, group ) == NULL ) return;
+ if (addrbook.treeSelected == addrbook.opened) {
+ /* Change node name in tree. */
+ addressbook_change_node_name( addrbook.treeSelected, ADDRITEM_NAME(group) );
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+}
+
+/*
+* Search for specified group in address index tree.
+*/
+static GtkCTreeNode *addressbook_find_group_node( GtkCTreeNode *parent, ItemGroup *group ) {
+ GtkCTreeNode *node = NULL;
+ GtkCTreeRow *currRow;
+
+ currRow = GTK_CTREE_ROW( parent );
+ if( currRow ) {
+ node = currRow->children;
+ while( node ) {
+ AddressObject *obj = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), node );
+ if( obj->type == ADDR_ITEM_GROUP ) {
+ ItemGroup *g = ADAPTER_GROUP(obj)->itemGroup;
+ if( g == group ) return node;
+ }
+ currRow = GTK_CTREE_ROW(node);
+ node = currRow->sibling;
+ }
+ }
+ return NULL;
+}
+
+static AddressBookFile *addressbook_get_book_file() {
+ AddressBookFile *abf = NULL;
+ AddressDataSource *ds = NULL;
+
+ ds = addressbook_find_datasource( addrbook.treeSelected );
+ if( ds == NULL ) return NULL;
+ if( ds->type == ADDR_IF_BOOK ) abf = ds->rawDataSource;
+ return abf;
+}
+
+static void addressbook_tree_remove_children( GtkCTree *ctree, GtkCTreeNode *parent ) {
+ GtkCTreeNode *node;
+ GtkCTreeRow *row;
+
+ /* Remove existing folders and groups */
+ row = GTK_CTREE_ROW( parent );
+ if( row ) {
+ while( (node = row->children) ) {
+ gtk_ctree_remove_node( ctree, node );
+ }
+ }
+}
+
+static void addressbook_move_nodes_up( GtkCTree *ctree, GtkCTreeNode *node ) {
+ GtkCTreeNode *parent, *child;
+ GtkCTreeRow *currRow;
+ currRow = GTK_CTREE_ROW( node );
+ if( currRow ) {
+ parent = currRow->parent;
+ while( (child = currRow->children) ) {
+ gtk_ctree_move( ctree, child, parent, node );
+ }
+ gtk_ctree_sort_node( ctree, parent );
+ }
+}
+
+static void addressbook_edit_address_cb( gpointer data, guint action, GtkWidget *widget ) {
+ GtkCTree *clist = GTK_CTREE(addrbook.clist);
+ GtkCTree *ctree;
+ AddressObject *obj = NULL, *pobj = NULL;
+ AddressDataSource *ds = NULL;
+ GtkCTreeNode *node = NULL, *parentNode = NULL;
+ gchar *name = NULL;
+ AddressBookFile *abf = NULL;
+
+ if( addrbook.listSelected == NULL ) return;
+ obj = gtk_ctree_node_get_row_data( clist, addrbook.listSelected );
+ g_return_if_fail(obj != NULL);
+
+ ctree = GTK_CTREE( addrbook.ctree );
+ pobj = gtk_ctree_node_get_row_data( ctree, addrbook.treeSelected );
+ node = gtk_ctree_find_by_row_data( ctree, addrbook.treeSelected, obj );
+
+ ds = addressbook_find_datasource( GTK_CTREE_NODE(addrbook.treeSelected) );
+ if( ds == NULL ) return;
+
+ abf = addressbook_get_book_file();
+ if( abf == NULL ) return;
+ if( obj->type == ADDR_ITEM_EMAIL ) {
+ ItemEMail *email = ( ItemEMail * ) obj;
+ ItemPerson *person;
+ if( email == NULL ) return;
+ if( pobj && pobj->type == ADDR_ITEM_GROUP ) {
+ /* Edit parent group */
+ AdapterGroup *adapter = ADAPTER_GROUP(pobj);
+ ItemGroup *itemGrp = adapter->itemGroup;
+ if( addressbook_edit_group( abf, NULL, itemGrp ) == NULL ) return;
+ name = ADDRITEM_NAME(itemGrp);
+ node = addrbook.treeSelected;
+ parentNode = GTK_CTREE_ROW(node)->parent;
+ }
+ else {
+ /* Edit person - email page */
+ person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+ if( addressbook_edit_person( abf, NULL, person, TRUE ) == NULL ) return;
+ gtk_ctree_select( ctree, addrbook.opened );
+ invalidate_address_completion();
+ return;
+ }
+ }
+ else if( obj->type == ADDR_ITEM_PERSON ) {
+ /* Edit person - basic page */
+ ItemPerson *person = ( ItemPerson * ) obj;
+ if( addressbook_edit_person( abf, NULL, person, FALSE ) == NULL ) return;
+ gtk_ctree_select( ctree, addrbook.opened );
+ invalidate_address_completion();
+ return;
+ }
+ else if( obj->type == ADDR_ITEM_GROUP ) {
+ ItemGroup *itemGrp = ( ItemGroup * ) obj;
+ if( addressbook_edit_group( abf, NULL, itemGrp ) == NULL ) return;
+ parentNode = addrbook.treeSelected;
+ node = addressbook_find_group_node( parentNode, itemGrp );
+ name = ADDRITEM_NAME(itemGrp);
+ }
+ else {
+ return;
+ }
+
+ /* Update tree node with node name */
+ if( node == NULL ) return;
+ addressbook_change_node_name( node, name );
+ gtk_ctree_sort_node( ctree, parentNode );
+ gtk_ctree_select( ctree, addrbook.opened );
+}
+
+static void addressbook_delete_address_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ addressbook_del_clicked(NULL, NULL);
+}
+
+static void close_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ addressbook_close();
+}
+
+static void addressbook_file_save_cb( gpointer data, guint action, GtkWidget *widget ) {
+ addressbook_export_to_file();
+}
+
+static void addressbook_person_expand_node( GtkCTree *ctree, GList *node, gpointer *data ) {
+ if( node ) {
+ ItemPerson *person = gtk_ctree_node_get_row_data( ctree, GTK_CTREE_NODE(node) );
+ if( person ) addritem_person_set_opened( person, TRUE );
+ }
+}
+
+static void addressbook_person_collapse_node( GtkCTree *ctree, GList *node, gpointer *data ) {
+ if( node ) {
+ ItemPerson *person = gtk_ctree_node_get_row_data( ctree, GTK_CTREE_NODE(node) );
+ if( person ) addritem_person_set_opened( person, FALSE );
+ }
+}
+
+static gchar *addressbook_format_item_clist( ItemPerson *person, ItemEMail *email ) {
+ gchar *str = NULL;
+ gchar *eMailAlias = ADDRITEM_NAME(email);
+ if( eMailAlias && *eMailAlias != '\0' ) {
+ if( person ) {
+ str = g_strdup_printf( "%s - %s", ADDRITEM_NAME(person), eMailAlias );
+ }
+ else {
+ str = g_strdup( eMailAlias );
+ }
+ }
+ return str;
+}
+
+static void addressbook_load_group( GtkCTree *clist, ItemGroup *itemGroup ) {
+ GList *items = itemGroup->listEMail;
+ AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_EMAIL );
+ for( ; items != NULL; items = g_list_next( items ) ) {
+ GtkCTreeNode *nodeEMail = NULL;
+ gchar *text[N_COLS];
+ ItemEMail *email = items->data;
+ ItemPerson *person;
+ gchar *str = NULL;
+
+ if( ! email ) continue;
+
+ person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+ str = addressbook_format_item_clist( person, email );
+ if( str ) {
+ text[COL_NAME] = str;
+ }
+ else {
+ text[COL_NAME] = ADDRITEM_NAME(person);
+ }
+ text[COL_ADDRESS] = email->address;
+ text[COL_REMARKS] = email->remarks;
+ nodeEMail = gtk_ctree_insert_node(
+ clist, NULL, NULL,
+ text, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm,
+ atci->iconXpmOpen, atci->maskXpmOpen,
+ FALSE, FALSE );
+ gtk_ctree_node_set_row_data( clist, nodeEMail, email );
+ g_free( str );
+ str = NULL;
+ }
+}
+
+static void addressbook_folder_load_person( GtkCTree *clist, ItemFolder *itemFolder ) {
+ GList *items;
+ AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_PERSON );
+ AddressTypeControlItem *atciMail = addrbookctl_lookup( ADDR_ITEM_EMAIL );
+
+ if( atci == NULL ) return;
+ if( atciMail == NULL ) return;
+
+ /* Load email addresses */
+ items = addritem_folder_get_person_list( itemFolder );
+ for( ; items != NULL; items = g_list_next( items ) ) {
+ GtkCTreeNode *nodePerson = NULL;
+ GtkCTreeNode *nodeEMail = NULL;
+ gchar *text[N_COLS];
+ gboolean flgFirst = TRUE, haveAddr = FALSE;
+ /* gint row; */
+ ItemPerson *person;
+ GList *node;
+
+ person = ( ItemPerson * ) items->data;
+ if( person == NULL ) continue;
+
+ text[COL_NAME] = NULL;
+ node = person->listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ gchar *eMailAddr = NULL;
+ node = g_list_next( node );
+
+ text[COL_ADDRESS] = email->address;
+ text[COL_REMARKS] = email->remarks;
+ eMailAddr = ADDRITEM_NAME(email);
+ if( eMailAddr && *eMailAddr == '\0' ) eMailAddr = NULL;
+ if( flgFirst ) {
+ /* First email belongs with person */
+ gchar *str = addressbook_format_item_clist( person, email );
+ if( str ) {
+ text[COL_NAME] = str;
+ }
+ else {
+ text[COL_NAME] = ADDRITEM_NAME(person);
+ }
+ nodePerson = gtk_ctree_insert_node(
+ clist, NULL, NULL,
+ text, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm,
+ atci->iconXpmOpen, atci->maskXpmOpen,
+ FALSE, person->isOpened );
+ g_free( str );
+ str = NULL;
+ gtk_ctree_node_set_row_data(clist, nodePerson, person );
+ }
+ else {
+ /* Subsequent email is a child node of person */
+ text[COL_NAME] = ADDRITEM_NAME(email);
+ nodeEMail = gtk_ctree_insert_node(
+ clist, nodePerson, NULL,
+ text, FOLDER_SPACING,
+ atciMail->iconXpm, atciMail->maskXpm,
+ atciMail->iconXpmOpen, atciMail->maskXpmOpen,
+ FALSE, TRUE );
+ gtk_ctree_node_set_row_data(clist, nodeEMail, email );
+ }
+ flgFirst = FALSE;
+ haveAddr = TRUE;
+ }
+ if( ! haveAddr ) {
+ /* Have name without EMail */
+ text[COL_NAME] = ADDRITEM_NAME(person);
+ text[COL_ADDRESS] = NULL;
+ text[COL_REMARKS] = NULL;
+ nodePerson = gtk_ctree_insert_node(
+ clist, NULL, NULL,
+ text, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm,
+ atci->iconXpmOpen, atci->maskXpmOpen,
+ FALSE, person->isOpened );
+ gtk_ctree_node_set_row_data(clist, nodePerson, person );
+ }
+ }
+ gtk_ctree_sort_node(GTK_CTREE(clist), NULL);
+
+ /* Free up the list */
+ mgu_clear_list( items );
+ g_list_free( items );
+}
+
+static void addressbook_folder_load_group( GtkCTree *clist, ItemFolder *itemFolder ) {
+ GList *items;
+ AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_GROUP );
+
+ /* Load any groups */
+ if( ! atci ) return;
+ items = addritem_folder_get_group_list( itemFolder );
+ for( ; items != NULL; items = g_list_next( items ) ) {
+ GtkCTreeNode *nodeGroup = NULL;
+ gchar *text[N_COLS];
+ ItemGroup *group = items->data;
+ if( group == NULL ) continue;
+ text[COL_NAME] = ADDRITEM_NAME(group);
+ text[COL_ADDRESS] = NULL;
+ text[COL_REMARKS] = NULL;
+ nodeGroup = gtk_ctree_insert_node(clist, NULL, NULL,
+ text, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm,
+ atci->iconXpmOpen, atci->maskXpmOpen,
+ FALSE, FALSE);
+ gtk_ctree_node_set_row_data(clist, nodeGroup, group );
+ }
+ gtk_ctree_sort_node(clist, NULL);
+
+ /* Free up the list */
+ mgu_clear_list( items );
+ g_list_free( items );
+}
+
+#if 0
+/*
+ * Load data sources into list.
+ */
+static void addressbook_node_load_datasource( GtkCTree *clist, AddressObject *obj ) {
+ AdapterInterface *adapter;
+ AddressInterface *iface;
+ AddressTypeControlItem *atci = NULL;
+ /* AddressDataSource *ds; */
+ GtkCTreeNode *newNode, *node;
+ GtkCTreeRow *row;
+ GtkCell *cell = NULL;
+ gchar *text[N_COLS];
+
+ adapter = ADAPTER_INTERFACE(obj);
+ if( adapter == NULL ) return;
+ iface = adapter->interface;
+ atci = adapter->atci;
+ if( atci == NULL ) return;
+
+ /* Create nodes in list copying values for data sources in tree */
+ row = GTK_CTREE_ROW( adapter->treeNode );
+ if( row ) {
+ node = row->children;
+ while( node ) {
+ gpointer data = gtk_ctree_node_get_row_data( clist, node );
+ row = GTK_CTREE_ROW( node );
+ cell = ( ( GtkCListRow * )row )->cell;
+ text[COL_NAME] = cell->u.text;
+ text[COL_ADDRESS] = NULL;
+ text[COL_REMARKS] = NULL;
+ newNode = gtk_ctree_insert_node( clist, NULL, NULL,
+ text, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm,
+ atci->iconXpmOpen, atci->maskXpmOpen,
+ FALSE, FALSE);
+ gtk_ctree_node_set_row_data( clist, newNode, data );
+ node = row->sibling;
+
+ }
+ }
+ gtk_ctree_sort_node( clist, NULL );
+}
+#endif
+
+static AddressDataSource *addressbook_find_datasource( GtkCTreeNode *node ) {
+ AddressDataSource *ds = NULL;
+ AddressObject *ao;
+
+ g_return_val_if_fail(addrbook.ctree != NULL, NULL);
+
+ while( node ) {
+ if( GTK_CTREE_ROW(node)->level < 2 ) return NULL;
+ ao = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), node );
+ if( ao ) {
+/* printf( "ao->type = %d\n", ao->type ); */
+ if( ao->type == ADDR_DATASOURCE ) {
+ AdapterDSource *ads = ADAPTER_DSOURCE(ao);
+/* printf( "found it\n" ); */
+ ds = ads->dataSource;
+ break;
+ }
+ }
+ node = GTK_CTREE_ROW(node)->parent;
+ }
+ return ds;
+}
+
+/*
+* Load address list widget with children of specified object.
+* Enter: obj Parent object to be loaded.
+*/
+static void addressbook_set_clist( AddressObject *obj ) {
+ GtkCTree *ctreelist = GTK_CTREE(addrbook.clist);
+ GtkCList *clist = GTK_CLIST(addrbook.clist);
+ AddressDataSource *ds = NULL;
+ AdapterDSource *ads = NULL;
+
+ if( obj == NULL ) {
+ gtk_clist_clear(clist);
+ return;
+ }
+
+ if( obj->type == ADDR_INTERFACE ) {
+ /* printf( "set_clist: loading datasource...\n" ); */
+ /* addressbook_node_load_datasource( clist, obj ); */
+ return;
+ }
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(obj);
+ ds = ADAPTER_DSOURCE(obj)->dataSource;
+ if( ds ) {
+ /* Load root folder */
+ ItemFolder *rootFolder = NULL;
+ rootFolder = addrindex_ds_get_root_folder( ds );
+ addressbook_folder_load_person( ctreelist, addrindex_ds_get_root_folder( ds ) );
+ addressbook_folder_load_group( ctreelist, addrindex_ds_get_root_folder( ds ) );
+ }
+ }
+ else {
+ if( obj->type == ADDR_ITEM_GROUP ) {
+ /* Load groups */
+ ItemGroup *itemGroup = ADAPTER_GROUP(obj)->itemGroup;
+ addressbook_load_group( ctreelist, itemGroup );
+ }
+ else if( obj->type == ADDR_ITEM_FOLDER ) {
+ /* Load folders */
+ ItemFolder *itemFolder = ADAPTER_FOLDER(obj)->itemFolder;
+ addressbook_folder_load_person( ctreelist, itemFolder );
+ addressbook_folder_load_group( ctreelist, itemFolder );
+ }
+ }
+
+ gtk_clist_sort(clist);
+ gtk_clist_thaw(clist);
+}
+
+/*
+* Free adaptor for specified node.
+*/
+static void addressbook_free_adapter( GtkCTreeNode *node ) {
+ AddressObject *ao;
+
+ g_return_if_fail(addrbook.ctree != NULL);
+
+ if( node ) {
+ if( GTK_CTREE_ROW(node)->level < 2 ) return;
+ ao = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), node );
+ if( ao == NULL ) return;
+ if( ao->type == ADDR_INTERFACE ) {
+ AdapterInterface *ai = ADAPTER_INTERFACE(ao);
+ addrbookctl_free_interface( ai );
+ }
+ else if( ao->type == ADDR_DATASOURCE ) {
+ AdapterDSource *ads = ADAPTER_DSOURCE(ao);
+ addrbookctl_free_datasource( ads );
+ }
+ else if( ao->type == ADDR_ITEM_FOLDER ) {
+ AdapterFolder *af = ADAPTER_FOLDER(ao);
+ addrbookctl_free_folder( af );
+ }
+ else if( ao->type == ADDR_ITEM_GROUP ) {
+ AdapterGroup *ag = ADAPTER_GROUP(ao);
+ addrbookctl_free_group( ag );
+ }
+ gtk_ctree_node_set_row_data( GTK_CTREE(addrbook.ctree), node, NULL );
+ }
+}
+
+/*
+* Free all children adapters.
+*/
+static void addressbook_free_child_adapters( GtkCTreeNode *node ) {
+ GtkCTreeNode *parent, *child;
+ GtkCTreeRow *currRow;
+
+ if( node == NULL ) return;
+ currRow = GTK_CTREE_ROW( node );
+ if( currRow ) {
+ parent = currRow->parent;
+ child = currRow->children;
+ while( child ) {
+ addressbook_free_child_adapters( child );
+ addressbook_free_adapter( child );
+ currRow = GTK_CTREE_ROW( child );
+ child = currRow->sibling;
+ }
+ }
+}
+
+AdapterDSource *addressbook_create_ds_adapter( AddressDataSource *ds,
+ AddressObjectType otype, gchar *name )
+{
+ AdapterDSource *adapter = g_new0( AdapterDSource, 1 );
+ ADDRESS_OBJECT(adapter)->type = ADDR_DATASOURCE;
+ ADDRESS_OBJECT_NAME(adapter) = g_strdup( name );
+ adapter->dataSource = ds;
+ adapter->subType = otype;
+ return adapter;
+}
+
+void addressbook_ads_set_name( AdapterDSource *adapter, gchar *value ) {
+ ADDRESS_OBJECT_NAME(adapter) = mgu_replace_string( ADDRESS_OBJECT_NAME(adapter), value );
+}
+
+/*
+ * Load tree from address index with the initial data.
+ */
+static void addressbook_load_tree( void ) {
+ GtkCTree *ctree = GTK_CTREE( addrbook.ctree );
+ GList *nodeIf, *nodeDS;
+ AdapterInterface *adapter;
+ AddressInterface *iface;
+ AddressTypeControlItem *atci;
+ AddressDataSource *ds;
+ AdapterDSource *ads;
+ GtkCTreeNode *node, *newNode;
+ gchar *name;
+
+ nodeIf = _addressInterfaceList_;
+ while( nodeIf ) {
+ adapter = nodeIf->data;
+ node = adapter->treeNode;
+ iface = adapter->interface;
+ atci = adapter->atci;
+ if( iface ) {
+ if( iface->useInterface ) {
+ /* Load data sources below interface node */
+ nodeDS = iface->listSource;
+ while( nodeDS ) {
+ ds = nodeDS->data;
+ newNode = NULL;
+ name = addrindex_ds_get_name( ds );
+ ads = addressbook_create_ds_adapter( ds, atci->objectType, name );
+ newNode = addressbook_add_object( node, ADDRESS_OBJECT(ads) );
+ nodeDS = g_list_next( nodeDS );
+ }
+ gtk_ctree_expand( ctree, node );
+ }
+ }
+ nodeIf = g_list_next( nodeIf );
+ }
+}
+
+/*
+ * Convert the old address book to new format.
+ */
+static gboolean addressbook_convert( AddressIndex *addrIndex ) {
+ gboolean retVal = FALSE;
+ gboolean errFlag = TRUE;
+ gchar *msg = NULL;
+
+ /* Read old address book, performing conversion */
+ debug_print( "Reading and converting old address book...\n" );
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_OLD_FILE );
+ addrindex_read_data( addrIndex );
+ if( addrIndex->retVal == MGU_NO_FILE ) {
+ /* We do not have a file - new user */
+ debug_print( "New user... create new books...\n" );
+ addrindex_create_new_books( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ /* Save index file */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ retVal = TRUE;
+ errFlag = FALSE;
+ }
+ else {
+ msg = _( "New user, could not save index file." );
+ }
+ }
+ else {
+ msg = _( "New user, could not save address book files." );
+ }
+ }
+ else {
+ /* We have an old file */
+ if( addrIndex->wasConverted ) {
+ /* Converted successfully - save address index */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ msg = _( "Old address book converted successfully." );
+ retVal = TRUE;
+ errFlag = FALSE;
+ }
+ else {
+ msg = _("Old address book converted,\n"
+ "could not save new address index file" );
+ }
+ }
+ else {
+ /* File conversion failed - just create new books */
+ debug_print( "File conversion failed... just create new books...\n" );
+ addrindex_create_new_books( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ /* Save index */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ msg = _("Could not convert address book,\n"
+ "but created empty new address book files." );
+ retVal = TRUE;
+ errFlag = FALSE;
+ }
+ else {
+ msg = _("Could not convert address book,\n"
+ "could not create new address book files." );
+ }
+ }
+ else {
+ msg = _("Could not convert address book\n"
+ "and could not create new address book files." );
+ }
+ }
+ }
+ if( errFlag ) {
+ debug_print( "Error\n%s\n", msg );
+ alertpanel( _( "Addressbook conversion error" ), msg, _( "Close" ), NULL, NULL );
+ }
+ else if( msg ) {
+ debug_print( "Warning\n%s\n", msg );
+ alertpanel( _( "Addressbook conversion" ), msg, _( "Close" ), NULL, NULL );
+ }
+
+ return retVal;
+}
+
+void addressbook_read_file( void ) {
+ AddressIndex *addrIndex = NULL;
+
+ debug_print( "Reading address index...\n" );
+ if( _addressIndex_ ) {
+ debug_print( "address book already read!!!\n" );
+ return;
+ }
+
+ addrIndex = addrindex_create_index();
+
+ /* Use new address book index. */
+ addrindex_set_file_path( addrIndex, get_rc_dir() );
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_read_data( addrIndex );
+ if( addrIndex->retVal == MGU_NO_FILE ) {
+ /* Conversion required */
+ debug_print( "Converting...\n" );
+ if( addressbook_convert( addrIndex ) ) {
+ _addressIndex_ = addrIndex;
+ }
+ }
+ else if( addrIndex->retVal == MGU_SUCCESS ) {
+ _addressIndex_ = addrIndex;
+ }
+ else {
+ /* Error reading address book */
+ debug_print( "Could not read address index.\n" );
+ addrindex_print_index( addrIndex, stdout );
+ alertpanel( _( "Addressbook Error" ),
+ _( "Could not read address index" ),
+ _( "Close" ), NULL, NULL );
+ }
+ debug_print( "done.\n" );
+}
+
+#if 0
+void addressbook_read_file_old( void ) {
+ AddressIndex *addrIndex = NULL;
+ gboolean errFlag = TRUE;
+ gchar *msg = NULL;
+
+ if( _addressIndex_ ) {
+ debug_print( "address book already read!!!\n" );
+ return;
+ }
+
+ addrIndex = addrindex_create_index();
+
+ /* Use use new address book. */
+ /* addrindex_set_file_path( addrIndex, "/home/match/tmp/empty-dir" ); */
+ addrindex_set_file_path( addrIndex, get_rc_dir() );
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+
+ debug_print( "Reading address index...\n" );
+ addrindex_read_data( addrIndex );
+ if( addrIndex->retVal == MGU_NO_FILE ) {
+ /* Read old address book, performing conversion */
+ debug_print( "Reading and converting old address book...\n" );
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_OLD_FILE );
+ addrindex_read_data( addrIndex );
+ if( addrIndex->retVal == MGU_NO_FILE ) {
+ /* We do not have a file - new user */
+ debug_print( "New user... create new books...\n" );
+ addrindex_create_new_books( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ /* Save index file */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ errFlag = FALSE;
+ }
+ else {
+ msg = g_strdup( _( "New user, could not save index file." ) );
+ }
+ }
+ else {
+ msg = g_strdup( _( "New user, could not save address book files." ) );
+ }
+ }
+ else {
+ /* We have an old file */
+ if( addrIndex->wasConverted ) {
+ /* Converted successfully - save address index */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ msg = g_strdup( _( "Old address book converted successfully." ) );
+ errFlag = FALSE;
+ }
+ else {
+ msg = g_strdup( _(
+ "Old address book converted, " \
+ "could not save new address index file" ) );
+ }
+ }
+ else {
+ /* File conversion failed - just create new books */
+ debug_print( "File conversion failed... just create new books...\n" );
+ addrindex_create_new_books( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ /* Save index */
+ addrindex_set_file_name( addrIndex, ADDRESSBOOK_INDEX_FILE );
+ addrindex_save_data( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ msg = g_strdup( _(
+ "Could not convert address book, " \
+ "but created empty new address book files." ) );
+ errFlag = FALSE;
+ }
+ else {
+ msg = g_strdup( _(
+ "Could not convert address book, " \
+ "could not create new address book files." ) );
+ }
+ }
+ else {
+ msg = g_strdup( _(
+ "Could not convert address book " \
+ "and could not create new address book files." ) );
+ }
+ }
+ }
+ }
+ else if( addrIndex->retVal == MGU_SUCCESS ) {
+ errFlag = FALSE;
+ }
+ else {
+ debug_print( "Could not read address index.\n" );
+ addrindex_print_index( addrIndex, stdout );
+ msg = g_strdup( _( "Could not read address index" ) );
+ }
+ _addressIndex_ = addrIndex;
+
+ if( errFlag ) {
+ debug_print( "Error\n%s\n", msg );
+ alertpanel( _( "Addressbook Conversion Error" ), msg,
+ _( "Close" ), NULL, NULL );
+ }
+ else {
+ if( msg ) {
+ debug_print( "Warning\n%s\n", msg );
+ alertpanel( _( "Addressbook Conversion" ), msg,
+ _( "Close" ), NULL, NULL );
+ }
+ }
+ if( msg ) g_free( msg );
+ debug_print( "done.\n" );
+}
+#endif
+
+/*
+* Add object into the address index tree widget.
+* Enter: node Parent node.
+* obj Object to add.
+* Return: Node that was added, or NULL if object not added.
+*/
+static GtkCTreeNode *addressbook_add_object(GtkCTreeNode *node,
+ AddressObject *obj)
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ GtkCTreeNode *added;
+ AddressObject *pobj;
+ AddressObjectType otype;
+ AddressTypeControlItem *atci = NULL;
+
+ g_return_val_if_fail(node != NULL, NULL);
+ g_return_val_if_fail(obj != NULL, NULL);
+
+ pobj = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_val_if_fail(pobj != NULL, NULL);
+
+ /* Determine object type to be displayed */
+ if( obj->type == ADDR_DATASOURCE ) {
+ otype = ADAPTER_DSOURCE(obj)->subType;
+ }
+ else {
+ otype = obj->type;
+ }
+
+ /* Handle any special conditions. */
+ added = node;
+ atci = addrbookctl_lookup( otype );
+ if( atci ) {
+ if( atci->showInTree ) {
+ /* Add object to tree */
+ gchar **name;
+ name = &obj->name;
+ added = gtk_ctree_insert_node( ctree, node, NULL, name, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm, atci->iconXpmOpen, atci->maskXpmOpen,
+ atci->treeLeaf, atci->treeExpand );
+ gtk_ctree_node_set_row_data(ctree, added, obj);
+ }
+ }
+
+ gtk_ctree_sort_node(ctree, node);
+
+ return added;
+}
+
+/*
+* Add group into the address index tree.
+* Enter: node Parent node.
+* ds Data source.
+* itemGroup Group to add.
+* Return: Inserted node.
+*/
+static GtkCTreeNode *addressbook_node_add_group( GtkCTreeNode *node, AddressDataSource *ds, ItemGroup *itemGroup ) {
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ GtkCTreeNode *newNode;
+ AdapterGroup *adapter;
+ AddressTypeControlItem *atci = NULL;
+ gchar **name;
+
+ if( ds == NULL ) return NULL;
+ if( node == NULL || itemGroup == NULL ) return NULL;
+
+ name = &itemGroup->obj.name;
+
+ atci = addrbookctl_lookup( ADDR_ITEM_GROUP );
+
+ adapter = g_new0( AdapterGroup, 1 );
+ ADDRESS_OBJECT_TYPE(adapter) = ADDR_ITEM_GROUP;
+ ADDRESS_OBJECT_NAME(adapter) = g_strdup( ADDRITEM_NAME(itemGroup) );
+ adapter->itemGroup = itemGroup;
+
+ newNode = gtk_ctree_insert_node( ctree, node, NULL, name, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm, atci->iconXpm, atci->maskXpm,
+ atci->treeLeaf, atci->treeExpand );
+ gtk_ctree_node_set_row_data( ctree, newNode, adapter );
+ gtk_ctree_sort_node( ctree, node );
+ return newNode;
+}
+
+/*
+* Add folder into the address index tree.
+* Enter: node Parent node.
+* ds Data source.
+* itemFolder Folder to add.
+* otype Object type to display.
+* Return: Inserted node.
+*/
+static GtkCTreeNode *addressbook_node_add_folder(
+ GtkCTreeNode *node, AddressDataSource *ds, ItemFolder *itemFolder, AddressObjectType otype )
+{
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ GtkCTreeNode *newNode = NULL;
+ AdapterFolder *adapter;
+ AddressTypeControlItem *atci = NULL;
+ GList *listItems = NULL;
+ gchar **name;
+ ItemFolder *rootFolder;
+
+ if( ds == NULL ) return NULL;
+ if( node == NULL || itemFolder == NULL ) return NULL;
+
+ /* Determine object type */
+ atci = addrbookctl_lookup( otype );
+ if( atci == NULL ) return NULL;
+
+ rootFolder = addrindex_ds_get_root_folder( ds );
+ if( itemFolder == rootFolder ) {
+ newNode = node;
+ }
+ else {
+ name = &itemFolder->obj.name;
+
+ adapter = g_new0( AdapterFolder, 1 );
+ ADDRESS_OBJECT_TYPE(adapter) = ADDR_ITEM_FOLDER;
+ ADDRESS_OBJECT_NAME(adapter) = g_strdup( ADDRITEM_NAME(itemFolder) );
+ adapter->itemFolder = itemFolder;
+
+ newNode = gtk_ctree_insert_node( ctree, node, NULL, name, FOLDER_SPACING,
+ atci->iconXpm, atci->maskXpm, atci->iconXpm, atci->maskXpm,
+ atci->treeLeaf, atci->treeExpand );
+ gtk_ctree_node_set_row_data( ctree, newNode, adapter );
+ }
+
+ listItems = itemFolder->listFolder;
+ while( listItems ) {
+ ItemFolder *item = listItems->data;
+ addressbook_node_add_folder( newNode, ds, item, otype );
+ listItems = g_list_next( listItems );
+ }
+ listItems = itemFolder->listGroup;
+ while( listItems ) {
+ ItemGroup *item = listItems->data;
+ addressbook_node_add_group( newNode, ds, item );
+ listItems = g_list_next( listItems );
+ }
+ gtk_ctree_sort_node( ctree, node );
+ return newNode;
+}
+
+#if 0
+static void addressbook_delete_object(AddressObject *obj) {
+ AdapterDSource *ads = NULL;
+ AddressDataSource *ds = NULL;
+ if (!obj) return;
+
+ /* Remove data source. */
+ /* printf( "Delete obj type : %d\n", obj->type ); */
+
+ ads = ADAPTER_DSOURCE(obj);
+ if( ads == NULL ) return;
+ ds = ads->dataSource;
+ if( ds == NULL ) return;
+
+ /* Remove data source */
+ if( addrindex_index_remove_datasource( _addressIndex_, ds ) ) {
+ addrindex_free_datasource( _addressIndex_, ds );
+ }
+ /* Free up Adapter object */
+ g_free( ADAPTER_DSOURCE(obj) );
+}
+#endif
+
+void addressbook_export_to_file( void ) {
+ if( _addressIndex_ ) {
+ /* Save all new address book data */
+ debug_print( "Saving address books...\n" );
+ addrindex_save_all_books( _addressIndex_ );
+
+ debug_print( "Exporting addressbook to file...\n" );
+ addrindex_save_data( _addressIndex_ );
+ if( _addressIndex_->retVal != MGU_SUCCESS ) {
+ addrindex_print_index( _addressIndex_, stdout );
+ }
+
+ /* Notify address completion of new data */
+ invalidate_address_completion();
+ }
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ addressbook_close();
+ return FALSE;
+}
+
+/*
+* Comparsion using names of AddressItem objects.
+*/
+/*
+static gint addressbook_list_compare_func(GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2)
+{
+ AddressObject *obj1 = ((GtkCListRow *)ptr1)->data;
+ AddressObject *obj2 = ((GtkCListRow *)ptr2)->data;
+ gchar *name1 = NULL, *name2 = NULL;
+ if( obj1 ) name1 = obj1->name;
+ if( obj2 ) name2 = obj2->name;
+ if( ! name1 ) return ( name2 != NULL );
+ if( ! name2 ) return -1;
+ return strcasecmp(name1, name2);
+}
+*/
+
+/*
+* Comparison using cell contents (text in first column).
+*/
+static gint addressbook_list_compare_func( GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2 ) {
+ GtkCell *cell1 = ((GtkCListRow *)ptr1)->cell;
+ GtkCell *cell2 = ((GtkCListRow *)ptr2)->cell;
+ gchar *name1 = NULL, *name2 = NULL;
+ if( cell1 ) name1 = cell1->u.text;
+ if( cell2 ) name2 = cell2->u.text;
+ if( ! name1 ) return ( name2 != NULL );
+ if( ! name2 ) return -1;
+ return strcasecmp( name1, name2 );
+}
+
+/* static */
+gint addressbook_obj_name_compare(gconstpointer a, gconstpointer b)
+{
+ const AddressObject *obj = a;
+ const gchar *name = b;
+ AddressTypeControlItem *atci = NULL;
+
+ if (!obj || !name) return -1;
+
+ atci = addrbookctl_lookup( obj->type );
+ if( ! atci ) return -1;
+ if( ! obj->name ) return -1;
+ return strcasecmp(obj->name, name);
+}
+
+#if 0
+static void addressbook_book_show_message( AddressBookFile *abf ) {
+ *addressbook_msgbuf = '\0';
+ if( abf ) {
+ if( abf->retVal == MGU_SUCCESS ) {
+ sprintf( addressbook_msgbuf, "%s", abf->name );
+ }
+ else {
+ sprintf( addressbook_msgbuf, "%s: %s", abf->name, mgu_error2string( abf->retVal ) );
+ }
+ }
+ addressbook_status_show( addressbook_msgbuf );
+}
+#endif
+
+static void addressbook_new_book_cb( gpointer data, guint action, GtkWidget *widget ) {
+ AdapterDSource *ads;
+ AdapterInterface *adapter;
+
+ adapter = addrbookctl_find_interface( ADDR_IF_BOOK );
+ if( adapter == NULL ) return;
+ if( addrbook.treeSelected == NULL ) return;
+ if( addrbook.treeSelected != adapter->treeNode ) return;
+ ads = addressbook_edit_book( _addressIndex_, NULL );
+ if( ads ) {
+ addressbook_add_object( addrbook.treeSelected, ADDRESS_OBJECT(ads) );
+ if( addrbook.treeSelected == addrbook.opened ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+}
+
+static void addressbook_new_vcard_cb( gpointer data, guint action, GtkWidget *widget ) {
+ AdapterDSource *ads;
+ AdapterInterface *adapter;
+
+ adapter = addrbookctl_find_interface( ADDR_IF_VCARD );
+ if( adapter == NULL ) return;
+ if( addrbook.treeSelected != adapter->treeNode ) return;
+ ads = addressbook_edit_vcard( _addressIndex_, NULL );
+ if( ads ) {
+ addressbook_add_object( addrbook.treeSelected, ADDRESS_OBJECT(ads) );
+ if( addrbook.treeSelected == addrbook.opened ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+}
+
+#if 0
+static void addressbook_vcard_show_message( VCardFile *vcf ) {
+ *addressbook_msgbuf = '\0';
+ if( vcf ) {
+ if( vcf->retVal == MGU_SUCCESS ) {
+ sprintf( addressbook_msgbuf, "%s", vcf->name );
+ }
+ else {
+ sprintf( addressbook_msgbuf, "%s: %s", vcf->name, mgu_error2string( vcf->retVal ) );
+ }
+ }
+ addressbook_status_show( addressbook_msgbuf );
+}
+#endif
+
+#ifdef USE_JPILOT
+static void addressbook_new_jpilot_cb( gpointer data, guint action, GtkWidget *widget ) {
+ AdapterDSource *ads;
+ AdapterInterface *adapter;
+ AddressInterface *iface;
+
+ adapter = addrbookctl_find_interface( ADDR_IF_JPILOT );
+ if( adapter == NULL ) return;
+ if( addrbook.treeSelected != adapter->treeNode ) return;
+ iface = adapter->interface;
+ if( ! iface->haveLibrary ) return;
+ ads = addressbook_edit_jpilot( _addressIndex_, NULL );
+ if( ads ) {
+ addressbook_add_object( addrbook.treeSelected, ADDRESS_OBJECT(ads) );
+ if( addrbook.treeSelected == addrbook.opened ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+}
+
+#if 0
+static void addressbook_jpilot_show_message( JPilotFile *jpf ) {
+ *addressbook_msgbuf = '\0';
+ if( jpf ) {
+ if( jpf->retVal == MGU_SUCCESS ) {
+ sprintf( addressbook_msgbuf, "%s", jpf->name );
+ }
+ else {
+ sprintf( addressbook_msgbuf, "%s: %s", jpf->name, mgu_error2string( jpf->retVal ) );
+ }
+ }
+ addressbook_status_show( addressbook_msgbuf );
+}
+#endif
+#endif /* USE_JPILOT */
+
+#ifdef USE_LDAP
+static void addressbook_new_ldap_cb( gpointer data, guint action, GtkWidget *widget ) {
+ AdapterDSource *ads;
+ AdapterInterface *adapter;
+ AddressInterface *iface;
+
+ adapter = addrbookctl_find_interface( ADDR_IF_LDAP );
+ if( adapter == NULL ) return;
+ if( addrbook.treeSelected != adapter->treeNode ) return;
+ iface = adapter->interface;
+ if( ! iface->haveLibrary ) return;
+ ads = addressbook_edit_ldap( _addressIndex_, NULL );
+ if( ads ) {
+ addressbook_add_object( addrbook.treeSelected, ADDRESS_OBJECT(ads) );
+ if( addrbook.treeSelected == addrbook.opened ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), addrbook.opened );
+ }
+ }
+}
+
+static void addressbook_ldap_show_message( SyldapServer *svr ) {
+ *addressbook_msgbuf = '\0';
+ if( svr ) {
+ if( svr->busyFlag ) {
+ sprintf( addressbook_msgbuf, "%s: %s", svr->name, ADDRESSBOOK_LDAP_BUSYMSG );
+ }
+ else {
+ if( svr->retVal == MGU_SUCCESS ) {
+ sprintf( addressbook_msgbuf, "%s", svr->name );
+ }
+ else {
+ sprintf( addressbook_msgbuf, "%s: %s", svr->name, mgu_error2string( svr->retVal ) );
+ }
+ }
+ }
+ addressbook_status_show( addressbook_msgbuf );
+}
+
+static void ldapsearch_callback( SyldapServer *sls ) {
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *obj;
+ AdapterDSource *ads = NULL;
+ AddressDataSource *ds = NULL;
+ AddressInterface *iface = NULL;
+
+ if( sls == NULL ) return;
+ if( ! addrbook.treeSelected ) return;
+ if( GTK_CTREE_ROW( addrbook.treeSelected )->level == 1 ) return;
+
+ obj = gtk_ctree_node_get_row_data( ctree, addrbook.treeSelected );
+ if( obj == NULL ) return;
+ if( obj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(obj);
+ if( ads->subType == ADDR_LDAP ) {
+ SyldapServer *server;
+
+ ds = ads->dataSource;
+ if( ds == NULL ) return;
+ iface = ds->interface;
+ if( ! iface->haveLibrary ) return;
+ server = ds->rawDataSource;
+ if( server == sls ) {
+ /* Read from cache */
+ gtk_widget_show_all(addrbook.window);
+ addressbook_set_clist( obj );
+ addressbook_ldap_show_message( sls );
+ gtk_widget_show_all(addrbook.window);
+ gtk_entry_set_text( GTK_ENTRY(addrbook.entry), "" );
+ }
+ }
+ }
+}
+#endif
+
+/*
+ * Lookup button handler.
+ */
+static void addressbook_lup_clicked( GtkButton *button, gpointer data ) {
+ GtkCTree *ctree = GTK_CTREE(addrbook.ctree);
+ AddressObject *obj;
+ AdapterDSource *ads = NULL;
+#ifdef USE_LDAP
+ AddressDataSource *ds = NULL;
+ AddressInterface *iface = NULL;
+#endif /* USE_LDAP */
+ gchar *sLookup;
+
+ if( ! addrbook.treeSelected ) return;
+ if( GTK_CTREE_ROW( addrbook.treeSelected )->level == 1 ) return;
+
+ obj = gtk_ctree_node_get_row_data( ctree, addrbook.treeSelected );
+ if( obj == NULL ) return;
+
+ sLookup = gtk_editable_get_chars( GTK_EDITABLE(addrbook.entry), 0, -1 );
+ g_strchomp( sLookup );
+
+ if( obj->type == ADDR_DATASOURCE ) {
+ ads = ADAPTER_DSOURCE(obj);
+#ifdef USE_LDAP
+ if( ads->subType == ADDR_LDAP ) {
+ SyldapServer *server;
+
+ ds = ads->dataSource;
+ if( ds == NULL ) return;
+ iface = ds->interface;
+ if( ! iface->haveLibrary ) return;
+ server = ds->rawDataSource;
+ if( server ) {
+ syldap_cancel_read( server );
+ if( *sLookup == '\0' || strlen( sLookup ) < 1 ) return;
+ syldap_set_search_value( server, sLookup );
+ syldap_set_callback( server, ldapsearch_callback );
+ syldap_read_data_th( server );
+ addressbook_ldap_show_message( server );
+ }
+ }
+#endif /* USE_LDAP */
+ }
+
+ g_free( sLookup );
+}
+
+/* **********************************************************************
+* Build lookup tables.
+* ***********************************************************************
+*/
+
+/*
+* Build table that controls the rendering of object types.
+*/
+void addrbookctl_build_map( GtkWidget *window ) {
+ AddressTypeControlItem *atci;
+
+ /* Build icons */
+ stock_pixmap_gdk(window, STOCK_PIXMAP_DIR_CLOSE, &folderxpm, &folderxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_DIR_OPEN, &folderopenxpm, &folderopenxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_GROUP, &groupxpm, &groupxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_VCARD, &vcardxpm, &vcardxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_BOOK, &bookxpm, &bookxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_ADDRESS, &addressxpm, &addressxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_JPILOT, &jpilotxpm, &jpilotxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_CATEGORY, &categoryxpm, &categoryxpmmask);
+ stock_pixmap_gdk(window, STOCK_PIXMAP_LDAP, &ldapxpm, &ldapxpmmask);
+
+ _addressBookTypeHash_ = g_hash_table_new( g_int_hash, g_int_equal );
+ _addressBookTypeList_ = NULL;
+
+ /* Interface */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_INTERFACE;
+ atci->interfaceType = ADDR_IF_NONE;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "Interface" );
+ atci->iconXpm = folderxpm;
+ atci->maskXpm = folderxpmmask;
+ atci->iconXpmOpen = folderopenxpm;
+ atci->maskXpmOpen = folderopenxpmmask;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Address book */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_BOOK;
+ atci->interfaceType = ADDR_IF_BOOK;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "Address Book" );
+ atci->iconXpm = bookxpm;
+ atci->maskXpm = bookxpmmask;
+ atci->iconXpmOpen = bookxpm;
+ atci->maskXpmOpen = bookxpmmask;
+ atci->menuCommand = "/File/New Book";
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Item person */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_ITEM_PERSON;
+ atci->interfaceType = ADDR_IF_NONE;
+ atci->showInTree = FALSE;
+ atci->treeExpand = FALSE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "Person" );
+ atci->iconXpm = NULL;
+ atci->maskXpm = NULL;
+ atci->iconXpmOpen = NULL;
+ atci->maskXpmOpen = NULL;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Item email */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_ITEM_EMAIL;
+ atci->interfaceType = ADDR_IF_NONE;
+ atci->showInTree = FALSE;
+ atci->treeExpand = FALSE;
+ atci->treeLeaf = TRUE;
+ atci->displayName = _( "EMail Address" );
+ atci->iconXpm = addressxpm;
+ atci->maskXpm = addressxpmmask;
+ atci->iconXpmOpen = addressxpm;
+ atci->maskXpmOpen = addressxpmmask;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Item group */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_ITEM_GROUP;
+ atci->interfaceType = ADDR_IF_BOOK;
+ atci->showInTree = TRUE;
+ atci->treeExpand = FALSE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "Group" );
+ atci->iconXpm = groupxpm;
+ atci->maskXpm = groupxpmmask;
+ atci->iconXpmOpen = groupxpm;
+ atci->maskXpmOpen = groupxpmmask;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Item folder */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_ITEM_FOLDER;
+ atci->interfaceType = ADDR_IF_BOOK;
+ atci->showInTree = TRUE;
+ atci->treeExpand = FALSE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "Folder" );
+ atci->iconXpm = folderxpm;
+ atci->maskXpm = folderxpmmask;
+ atci->iconXpmOpen = folderopenxpm;
+ atci->maskXpmOpen = folderopenxpmmask;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* vCard */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_VCARD;
+ atci->interfaceType = ADDR_IF_VCARD;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = TRUE;
+ atci->displayName = _( "vCard" );
+ atci->iconXpm = vcardxpm;
+ atci->maskXpm = vcardxpmmask;
+ atci->iconXpmOpen = vcardxpm;
+ atci->maskXpmOpen = vcardxpmmask;
+ atci->menuCommand = "/File/New vCard";
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* JPilot */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_JPILOT;
+ atci->interfaceType = ADDR_IF_JPILOT;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = FALSE;
+ atci->displayName = _( "JPilot" );
+ atci->iconXpm = jpilotxpm;
+ atci->maskXpm = jpilotxpmmask;
+ atci->iconXpmOpen = jpilotxpm;
+ atci->maskXpmOpen = jpilotxpmmask;
+ atci->menuCommand = "/File/New JPilot";
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* Category */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_CATEGORY;
+ atci->interfaceType = ADDR_IF_JPILOT;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = TRUE;
+ atci->displayName = _( "JPilot" );
+ atci->iconXpm = categoryxpm;
+ atci->maskXpm = categoryxpmmask;
+ atci->iconXpmOpen = categoryxpm;
+ atci->maskXpmOpen = categoryxpmmask;
+ atci->menuCommand = NULL;
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+ /* LDAP Server */
+ atci = g_new0( AddressTypeControlItem, 1 );
+ atci->objectType = ADDR_LDAP;
+ atci->interfaceType = ADDR_IF_LDAP;
+ atci->showInTree = TRUE;
+ atci->treeExpand = TRUE;
+ atci->treeLeaf = TRUE;
+ atci->displayName = _( "LDAP Server" );
+ atci->iconXpm = ldapxpm;
+ atci->maskXpm = ldapxpmmask;
+ atci->iconXpmOpen = ldapxpm;
+ atci->maskXpmOpen = ldapxpmmask;
+ atci->menuCommand = "/File/New Server";
+ g_hash_table_insert( _addressBookTypeHash_, &atci->objectType, atci );
+ _addressBookTypeList_ = g_list_append( _addressBookTypeList_, atci );
+
+}
+
+/*
+* Search for specified object type.
+*/
+AddressTypeControlItem *addrbookctl_lookup( gint ot ) {
+ gint objType = ot;
+ return ( AddressTypeControlItem * ) g_hash_table_lookup( _addressBookTypeHash_, &objType );
+}
+
+/*
+* Search for specified interface type.
+*/
+AddressTypeControlItem *addrbookctl_lookup_iface( AddressIfType ifType ) {
+ GList *node = _addressBookTypeList_;
+ while( node ) {
+ AddressTypeControlItem *atci = node->data;
+ if( atci->interfaceType == ifType ) return atci;
+ node = g_list_next( node );
+ }
+ return NULL;
+}
+
+static void addrbookctl_free_address( AddressObject *obj ) {
+ g_free( obj->name );
+ obj->type = ADDR_NONE;
+ obj->name = NULL;
+}
+
+static void addrbookctl_free_interface( AdapterInterface *adapter ) {
+ addrbookctl_free_address( ADDRESS_OBJECT(adapter) );
+ adapter->interface = NULL;
+ adapter->interfaceType = ADDR_IF_NONE;
+ adapter->atci = NULL;
+ adapter->enabled = FALSE;
+ adapter->haveLibrary = FALSE;
+ adapter->treeNode = NULL;
+ g_free( adapter );
+}
+
+static void addrbookctl_free_datasource( AdapterDSource *adapter ) {
+ addrbookctl_free_address( ADDRESS_OBJECT(adapter) );
+ adapter->dataSource = NULL;
+ adapter->subType = ADDR_NONE;
+ g_free( adapter );
+}
+
+static void addrbookctl_free_folder( AdapterFolder *adapter ) {
+ addrbookctl_free_address( ADDRESS_OBJECT(adapter) );
+ adapter->itemFolder = NULL;
+ g_free( adapter );
+}
+
+static void addrbookctl_free_group( AdapterGroup *adapter ) {
+ addrbookctl_free_address( ADDRESS_OBJECT(adapter) );
+ adapter->itemGroup = NULL;
+ g_free( adapter );
+}
+
+/*
+ * Build GUI interface list.
+ */
+void addrbookctl_build_iflist() {
+ AddressTypeControlItem *atci;
+ AdapterInterface *adapter;
+ GList *list = NULL;
+
+ if( _addressIndex_ == NULL ) {
+ _addressIndex_ = addrindex_create_index();
+ }
+ _addressInterfaceList_ = NULL;
+ list = addrindex_get_interface_list( _addressIndex_ );
+ while( list ) {
+ AddressInterface *interface = list->data;
+ atci = addrbookctl_lookup_iface( interface->type );
+ if( atci ) {
+ adapter = g_new0( AdapterInterface, 1 );
+ adapter->interfaceType = interface->type;
+ adapter->atci = atci;
+ adapter->interface = interface;
+ adapter->treeNode = NULL;
+ adapter->enabled = TRUE;
+ adapter->haveLibrary = interface->haveLibrary;
+ ADDRESS_OBJECT(adapter)->type = ADDR_INTERFACE;
+ ADDRESS_OBJECT_NAME(adapter) = g_strdup( atci->displayName );
+ _addressInterfaceList_ = g_list_append( _addressInterfaceList_, adapter );
+ }
+ list = g_list_next( list );
+ }
+}
+
+void addrbookctl_free_selection( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ AdapterInterface *adapter = node->data;
+ adapter = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+}
+
+/*
+* Find GUI interface type specified interface type.
+* Return: Interface item, or NULL if not found.
+*/
+AdapterInterface *addrbookctl_find_interface( AddressIfType ifType ) {
+ GList *node = _addressInterfaceList_;
+ while( node ) {
+ AdapterInterface *adapter = node->data;
+ if( adapter->interfaceType == ifType ) return adapter;
+ node = g_list_next( node );
+ }
+ return NULL;
+}
+
+/*
+* Build interface list selection.
+*/
+void addrbookctl_build_ifselect() {
+ GList *newList = NULL;
+ gchar *selectStr;
+ gchar **splitStr;
+ gint ifType;
+ gint i;
+ gchar *endptr = NULL;
+ gboolean enabled;
+ AdapterInterface *adapter;
+ /* GList *node; */
+
+ selectStr = g_strdup( ADDRESSBOOK_IFACE_SELECTION );
+
+ /* Parse string */
+ splitStr = g_strsplit( selectStr, ",", -1 );
+ for( i = 0; i < ADDRESSBOOK_MAX_IFACE; i++ ) {
+ if( splitStr[i] ) {
+ /* printf( "%d : %s\n", i, splitStr[i] ); */
+ ifType = strtol( splitStr[i], &endptr, 10 );
+ enabled = TRUE;
+ if( *endptr ) {
+ if( strcmp( endptr, "/n" ) == 0 ) {
+ enabled = FALSE;
+ }
+ }
+ /* printf( "\t%d : %s\n", ifType, enabled ? "yes" : "no" ); */
+ adapter = addrbookctl_find_interface( ifType );
+ if( adapter ) {
+ newList = g_list_append( newList, adapter );
+ }
+ }
+ else {
+ break;
+ }
+ }
+ /* printf( "i=%d\n", i ); */
+ g_strfreev( splitStr );
+ g_free( selectStr );
+
+ /* Replace existing list */
+ mgu_clear_list( _addressIFaceSelection_ );
+ g_list_free( _addressIFaceSelection_ );
+ _addressIFaceSelection_ = newList;
+ newList = NULL;
+
+}
+
+/* **********************************************************************
+* Add sender to address book.
+* ***********************************************************************
+*/
+
+/*
+ * This function is used by the Add sender to address book function.
+ */
+gboolean addressbook_add_contact( const gchar *name, const gchar *address, const gchar *remarks ) {
+ debug_print( "addressbook_add_contact: name/address: %s - %s\n", name, address );
+ if( addressadd_selection( _addressIndex_, name, address, remarks ) ) {
+ debug_print( "addressbook_add_contact - added\n" );
+ addressbook_refresh();
+ }
+ return TRUE;
+}
+
+/* **********************************************************************
+* Address completion support.
+* ***********************************************************************
+*/
+
+/*
+* This function is used by the address completion function to load
+* addresses.
+* Enter: callBackFunc Function to be called when an address is
+* to be loaded.
+* Return: TRUE if data loaded, FALSE if address index not loaded.
+*/
+gboolean addressbook_load_completion( gint (*callBackFunc) ( const gchar *, const gchar * ) ) {
+ /* AddressInterface *interface; */
+ AddressDataSource *ds;
+ GList *nodeIf, *nodeDS;
+ GList *listP, *nodeP;
+ GList *nodeM;
+ gchar *sName, *sAddress, *sAlias, *sFriendly;
+
+ debug_print( "addressbook_load_completion\n" );
+
+ if( _addressIndex_ == NULL ) return FALSE;
+
+ nodeIf = addrindex_get_interface_list( _addressIndex_ );
+ while( nodeIf ) {
+ AddressInterface *interface = nodeIf->data;
+ nodeDS = interface->listSource;
+ while( nodeDS ) {
+ ds = nodeDS->data;
+
+ /* Read address book */
+ if( ! addrindex_ds_get_read_flag( ds ) ) {
+ addrindex_ds_read_data( ds );
+ }
+
+ /* Get all persons */
+ listP = addrindex_ds_get_all_persons( ds );
+ nodeP = listP;
+ while( nodeP ) {
+ ItemPerson *person = nodeP->data;
+ nodeM = person->listEMail;
+
+ /* Figure out name to use */
+ sName = person->nickName;
+ if( sName == NULL || *sName == '\0' ) {
+ sName = ADDRITEM_NAME(person);
+ }
+
+ /* Process each E-Mail address */
+ while( nodeM ) {
+ ItemEMail *email = nodeM->data;
+ /* Have mail */
+ sFriendly = sName;
+ sAddress = email->address;
+ if( sAddress || *sAddress != '\0' ) {
+ sAlias = ADDRITEM_NAME(email);
+ if( sAlias && *sAlias != '\0' ) {
+ sFriendly = sAlias;
+ }
+ ( callBackFunc ) ( sFriendly, sAddress );
+ }
+
+ nodeM = g_list_next( nodeM );
+ }
+ nodeP = g_list_next( nodeP );
+ }
+ /* Free up the list */
+ g_list_free( listP );
+
+ nodeDS = g_list_next( nodeDS );
+ }
+ nodeIf = g_list_next( nodeIf );
+ }
+ debug_print( "addressbook_load_completion... done\n" );
+
+ return TRUE;
+}
+
+/* **********************************************************************
+* Address Import.
+* ***********************************************************************
+*/
+
+/*
+* Import LDIF file.
+*/
+static void addressbook_import_ldif_cb() {
+ AddressDataSource *ds = NULL;
+ AdapterDSource *ads = NULL;
+ AddressBookFile *abf = NULL;
+ AdapterInterface *adapter;
+ GtkCTreeNode *newNode;
+
+ adapter = addrbookctl_find_interface( ADDR_IF_BOOK );
+ if ( !adapter || !adapter->treeNode ) return;
+
+ abf = addressbook_imp_ldif( _addressIndex_ );
+ if ( !abf ) return;
+
+ ds = addrindex_index_add_datasource( _addressIndex_, ADDR_IF_BOOK, abf );
+ ads = addressbook_create_ds_adapter( ds, ADDR_BOOK, NULL );
+ addressbook_ads_set_name( ads, abf->name );
+ newNode = addressbook_add_object( adapter->treeNode, ADDRESS_OBJECT(ads) );
+ if ( newNode ) {
+ gtk_ctree_select( GTK_CTREE(addrbook.ctree), newNode );
+ addrbook.treeSelected = newNode;
+ }
+
+ /* Notify address completion */
+ invalidate_address_completion();
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/addressbook.h b/src/addressbook.h
new file mode 100644
index 00000000..59512d53
--- /dev/null
+++ b/src/addressbook.h
@@ -0,0 +1,49 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ADDRESSBOOK_H__
+#define __ADDRESSBOOK_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+#include "compose.h"
+
+void addressbook_open (Compose *target);
+void addressbook_set_target_compose (Compose *target);
+Compose *addressbook_get_target_compose (void);
+void addressbook_read_file (void);
+void addressbook_export_to_file (void);
+gint addressbook_obj_name_compare (gconstpointer a,
+ gconstpointer b);
+/* static gint addressbook_obj_name_compare(gconstpointer a,
+ gconstpointer b); */
+
+/* provisional API for accessing the address book */
+
+void addressbook_access (void);
+void addressbook_unaccess (void);
+
+gboolean addressbook_add_contact ( const gchar *name,
+ const gchar *address,
+ const gchar *remarks );
+
+gboolean addressbook_load_completion ( gint (*callBackFunc) ( const gchar *, const gchar * ) );
+
+#endif /* __ADDRESSBOOK_H__ */
diff --git a/src/addressitem.h b/src/addressitem.h
new file mode 100644
index 00000000..919bf40e
--- /dev/null
+++ b/src/addressitem.h
@@ -0,0 +1,158 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Address item data. Shared among GUI components only.
+ */
+
+#ifndef __ADDRESSITEM_H__
+#define __ADDRESSITEM_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkctree.h>
+
+#include "compose.h"
+#include "addrindex.h"
+
+#define ADDRESS_OBJECT(obj) ((AddressObject *)obj)
+#define ADDRESS_OBJECT_TYPE(obj) (ADDRESS_OBJECT(obj)->type)
+#define ADDRESS_OBJECT_NAME(obj) (ADDRESS_OBJECT(obj)->name)
+
+#define ADAPTER_INTERFACE(obj) ((AdapterInterface *)obj)
+#define ADAPTER_FOLDER(obj) ((AdapterFolder *)obj)
+#define ADAPTER_GROUP(obj) ((AdapterGroup *)obj)
+#define ADAPTER_DSOURCE(obj) ((AdapterDSource *)obj)
+
+typedef enum {
+ ADDR_NONE,
+ ADDR_ITEM_PERSON,
+ ADDR_ITEM_EMAIL,
+ ADDR_ITEM_FOLDER,
+ ADDR_ITEM_GROUP,
+ ADDR_INTERFACE,
+ ADDR_DATASOURCE,
+ ADDR_BOOK, /* Sub-type */
+ ADDR_VCARD, /* Sub-type */
+ ADDR_JPILOT, /* Sub-type */
+ ADDR_CATEGORY, /* Sub-type */
+ ADDR_LDAP /* Sub-type */
+} AddressObjectType;
+
+typedef struct _AddressBook_win AddressBook_win;
+struct _AddressBook_win
+{
+ GtkWidget *window;
+ GtkWidget *menubar;
+ GtkWidget *ctree;
+ GtkWidget *clist;
+ GtkWidget *entry;
+ GtkWidget *statusbar;
+
+ GtkWidget *del_btn;
+ GtkWidget *reg_btn;
+ GtkWidget *lup_btn;
+ GtkWidget *to_btn;
+ GtkWidget *cc_btn;
+ GtkWidget *bcc_btn;
+
+ GtkWidget *tree_popup;
+ GtkWidget *list_popup;
+ GtkItemFactory *tree_factory;
+ GtkItemFactory *list_factory;
+ GtkItemFactory *menu_factory;
+
+ GtkCTreeNode *treeSelected;
+ GtkCTreeNode *opened;
+ GtkCTreeNode *listSelected;
+
+ Compose *target_compose;
+ gint status_cid;
+};
+
+typedef struct _AddressTypeControlItem AddressTypeControlItem;
+struct _AddressTypeControlItem {
+ AddressObjectType objectType;
+ AddressIfType interfaceType;
+ gchar *displayName;
+ gboolean showInTree;
+ gboolean treeExpand;
+ gboolean treeLeaf;
+ gchar *menuCommand;
+ GdkPixmap *iconXpm;
+ GdkBitmap *maskXpm;
+ GdkPixmap *iconXpmOpen;
+ GdkBitmap *maskXpmOpen;
+};
+
+typedef struct _AddressObject AddressObject;
+struct _AddressObject {
+ AddressObjectType type;
+ gchar *name;
+};
+
+typedef struct _AdapterInterface AdapterInterface;
+struct _AdapterInterface {
+ AddressObject obj;
+ AddressInterface *interface;
+ AddressIfType interfaceType;
+ AddressTypeControlItem *atci;
+ gboolean enabled;
+ gboolean haveLibrary;
+ GtkCTreeNode *treeNode;
+};
+
+typedef struct _AdapterDSource AdapterDSource;
+struct _AdapterDSource {
+ AddressObject obj;
+ AddressDataSource *dataSource;
+ AddressObjectType subType;
+};
+
+typedef struct _AdapterFolder AdapterFolder;
+struct _AdapterFolder {
+ AddressObject obj;
+ ItemFolder *itemFolder;
+};
+
+typedef struct _AdapterGroup AdapterGroup;
+struct _AdapterGroup {
+ AddressObject obj;
+ ItemGroup *itemGroup;
+};
+
+typedef struct _AddressFileSelection AddressFileSelection;
+struct _AddressFileSelection {
+ GtkWidget *fileSelector;
+ gboolean cancelled;
+};
+
+AdapterDSource *addressbook_create_ds_adapter ( AddressDataSource *ds,
+ AddressObjectType otype,
+ gchar *name );
+
+void addressbook_ads_set_name ( AdapterDSource *adapter,
+ gchar *value );
+
+#endif /* __ADDRESSITEM_H__ */
+
+/*
+* End of Source.
+*/
+
diff --git a/src/addrindex.c b/src/addrindex.c
new file mode 100644
index 00000000..07d57711
--- /dev/null
+++ b/src/addrindex.c
@@ -0,0 +1,1892 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General functions for accessing address index file.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "mgutils.h"
+#include "addritem.h"
+#include "addrcache.h"
+#include "addrbook.h"
+#include "addrindex.h"
+#include "xml.h"
+
+#ifndef DEV_STANDALONE
+#include "prefs.h"
+#include "codeconv.h"
+#endif
+
+#include "vcard.h"
+
+#ifdef USE_JPILOT
+#include "jpilot.h"
+#endif
+
+#ifdef USE_LDAP
+#include "syldap.h"
+#endif
+
+#define TAG_ADDRESS_INDEX "addressbook"
+
+#define TAG_IF_ADDRESS_BOOK "book_list"
+#define TAG_IF_VCARD "vcard_list"
+#define TAG_IF_JPILOT "jpilot_list"
+#define TAG_IF_LDAP "ldap_list"
+
+#define TAG_DS_ADDRESS_BOOK "book"
+#define TAG_DS_VCARD "vcard"
+#define TAG_DS_JPILOT "jpilot"
+#define TAG_DS_LDAP "server"
+
+/* XML Attribute names */
+#define ATTAG_BOOK_NAME "name"
+#define ATTAG_BOOK_FILE "file"
+
+#define ATTAG_VCARD_NAME "name"
+#define ATTAG_VCARD_FILE "file"
+
+#define ATTAG_JPILOT_NAME "name"
+#define ATTAG_JPILOT_FILE "file"
+#define ATTAG_JPILOT_CUSTOM_1 "custom-1"
+#define ATTAG_JPILOT_CUSTOM_2 "custom-2"
+#define ATTAG_JPILOT_CUSTOM_3 "custom-3"
+#define ATTAG_JPILOT_CUSTOM_4 "custom-4"
+#define ATTAG_JPILOT_CUSTOM "custom-"
+
+#define ATTAG_LDAP_NAME "name"
+#define ATTAG_LDAP_HOST "host"
+#define ATTAG_LDAP_PORT "port"
+#define ATTAG_LDAP_BASE_DN "base-dn"
+#define ATTAG_LDAP_BIND_DN "bind-dn"
+#define ATTAG_LDAP_BIND_PASS "bind-pass"
+#define ATTAG_LDAP_CRITERIA "criteria"
+#define ATTAG_LDAP_MAX_ENTRY "max-entry"
+#define ATTAG_LDAP_TIMEOUT "timeout"
+
+#if 0
+N_("Common address")
+N_("Personal address")
+#endif
+
+#define DISP_NEW_COMMON _("Common address")
+#define DISP_NEW_PERSONAL _("Personal address")
+
+/* Old address book */
+#define TAG_IF_OLD_COMMON "common_address"
+#define TAG_IF_OLD_PERSONAL "personal_address"
+
+#define DISP_OLD_COMMON _("Common address")
+#define DISP_OLD_PERSONAL _("Personal address")
+
+typedef struct _AddressIfAttr AddressIfAttrib;
+struct _AddressIfAttr {
+ gchar *name;
+ gchar *value;
+};
+
+/*
+* Build interface with default values.
+*/
+static AddressInterface *addrindex_create_interface( gint type, gchar *name, gchar *tagIf, gchar *tagDS ) {
+ AddressInterface *iface = g_new0( AddressInterface, 1 );
+ ADDRITEM_TYPE(iface) = ITEMTYPE_INTERFACE;
+ ADDRITEM_ID(iface) = NULL;
+ ADDRITEM_NAME(iface) = g_strdup( name );
+ ADDRITEM_PARENT(iface) = NULL;
+ ADDRITEM_SUBTYPE(iface) = type;
+ iface->type = type;
+ iface->name = g_strdup( name );
+ iface->listTag = g_strdup( tagIf );
+ iface->itemTag = g_strdup( tagDS );
+ iface->legacyFlag = FALSE;
+ iface->haveLibrary = TRUE;
+ iface->useInterface = TRUE;
+ iface->readOnly = TRUE;
+ iface->getAccessFlag = NULL;
+ iface->getModifyFlag = NULL;
+ iface->getReadFlag = NULL;
+ iface->getStatusCode = NULL;
+ iface->getReadData = NULL;
+ iface->getRootFolder = NULL;
+ iface->getListFolder = NULL;
+ iface->getListPerson = NULL;
+ iface->getAllPersons = NULL;
+ iface->getAllGroups = NULL;
+ iface->getName = NULL;
+ iface->listSource = NULL;
+ return iface;
+}
+
+/*
+* Build table of interfaces.
+*/
+static void addrindex_build_if_list( AddressIndex *addrIndex ) {
+ AddressInterface *iface;
+
+ iface = addrindex_create_interface( ADDR_IF_BOOK, "Address Book", TAG_IF_ADDRESS_BOOK, TAG_DS_ADDRESS_BOOK );
+ iface->readOnly = FALSE;
+ iface->getModifyFlag = ( void * ) addrbook_get_modified;
+ iface->getAccessFlag = ( void * ) addrbook_get_accessed;
+ iface->getReadFlag = ( void * ) addrbook_get_read_flag;
+ iface->getStatusCode = ( void * ) addrbook_get_status;
+ iface->getReadData = ( void * ) addrbook_read_data;
+ iface->getRootFolder = ( void * ) addrbook_get_root_folder;
+ iface->getListFolder = ( void * ) addrbook_get_list_folder;
+ iface->getListPerson = ( void * ) addrbook_get_list_person;
+ iface->getAllPersons = ( void * ) addrbook_get_all_persons;
+ iface->getName = ( void * ) addrbook_get_name;
+ iface->setAccessFlag = ( void * ) addrbook_set_accessed;
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+ iface = addrindex_create_interface( ADDR_IF_VCARD, "vCard", TAG_IF_VCARD, TAG_DS_VCARD );
+ iface->getModifyFlag = ( void * ) vcard_get_modified;
+ iface->getAccessFlag = ( void * ) vcard_get_accessed;
+ iface->getReadFlag = ( void * ) vcard_get_read_flag;
+ iface->getStatusCode = ( void * ) vcard_get_status;
+ iface->getReadData = ( void * ) vcard_read_data;
+ iface->getRootFolder = ( void * ) vcard_get_root_folder;
+ iface->getListFolder = ( void * ) vcard_get_list_folder;
+ iface->getListPerson = ( void * ) vcard_get_list_person;
+ iface->getAllPersons = ( void * ) vcard_get_all_persons;
+ iface->getName = ( void * ) vcard_get_name;
+ iface->setAccessFlag = ( void * ) vcard_set_accessed;
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+ iface = addrindex_create_interface( ADDR_IF_JPILOT, "JPilot", TAG_IF_JPILOT, TAG_DS_JPILOT );
+#ifdef USE_JPILOT
+ /* iface->haveLibrary = jpilot_test_pilot_lib(); */
+ iface->haveLibrary = TRUE;
+ iface->useInterface = iface->haveLibrary;
+ iface->getModifyFlag = ( void * ) jpilot_get_modified;
+ iface->getAccessFlag = ( void * ) jpilot_get_accessed;
+ iface->getReadFlag = ( void * ) jpilot_get_read_flag;
+ iface->getStatusCode = ( void * ) jpilot_get_status;
+ iface->getReadData = ( void * ) jpilot_read_data;
+ iface->getRootFolder = ( void * ) jpilot_get_root_folder;
+ iface->getListFolder = ( void * ) jpilot_get_list_folder;
+ iface->getListPerson = ( void * ) jpilot_get_list_person;
+ iface->getAllPersons = ( void * ) jpilot_get_all_persons;
+ iface->getName = ( void * ) jpilot_get_name;
+ iface->setAccessFlag = ( void * ) jpilot_set_accessed;
+#else
+ iface->useInterface = FALSE;
+ iface->haveLibrary = FALSE;
+#endif
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+ iface = addrindex_create_interface( ADDR_IF_LDAP, "LDAP", TAG_IF_LDAP, TAG_DS_LDAP );
+#ifdef USE_LDAP
+ /* iface->haveLibrary = syldap_test_ldap_lib(); */
+ iface->haveLibrary = TRUE;
+ iface->useInterface = iface->haveLibrary;
+ iface->getAccessFlag = ( void * ) syldap_get_accessed;
+ /* iface->getModifyFlag = ( void * ) syldap_get_modified; */
+ /* iface->getReadFlag = ( void * ) syldap_get_read_flag; */
+ iface->getStatusCode = ( void * ) syldap_get_status;
+ iface->getReadData = ( void * ) syldap_read_data;
+ iface->getRootFolder = ( void * ) syldap_get_root_folder;
+ iface->getListFolder = ( void * ) syldap_get_list_folder;
+ iface->getListPerson = ( void * ) syldap_get_list_person;
+ iface->getName = ( void * ) syldap_get_name;
+ iface->setAccessFlag = ( void * ) syldap_set_accessed;
+#else
+ iface->useInterface = FALSE;
+ iface->haveLibrary = FALSE;
+#endif
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+ /* Two old legacy data sources */
+ iface = addrindex_create_interface( ADDR_IF_COMMON, "Old Address - common", TAG_IF_OLD_COMMON, NULL );
+ iface->legacyFlag = TRUE;
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+ iface = addrindex_create_interface( ADDR_IF_COMMON, "Old Address - personal", TAG_IF_OLD_PERSONAL, NULL );
+ iface->legacyFlag = TRUE;
+ addrIndex->interfaceList = g_list_append( addrIndex->interfaceList, iface );
+ ADDRITEM_PARENT(iface) = ADDRITEM_OBJECT(addrIndex);
+
+}
+
+/*
+* Free name-value pairs.
+*/
+static void addrindex_free_attributes( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ AddressIfAttrib *nv = node->data;
+ g_free( nv->name ); nv->name = NULL;
+ g_free( nv->value ); nv->value = NULL;
+ g_free( nv );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+}
+
+/*
+* Free up data source.
+*/
+void addrindex_free_datasource( AddressIndex *addrIndex, AddressDataSource *ds ) {
+ AddressInterface *iface = NULL;
+ g_return_if_fail( addrIndex != NULL );
+ g_return_if_fail( ds != NULL );
+
+ if( ds->interface == NULL ) {
+ iface = addrindex_get_interface( addrIndex, ds->type );
+ }
+ if( iface == NULL ) return;
+
+ if( iface->useInterface ) {
+ if( iface->type == ADDR_IF_BOOK ) {
+ AddressBookFile *abf = ds->rawDataSource;
+ if( abf ) {
+ addrbook_free_book( abf );
+ }
+ }
+ else if( iface->type == ADDR_IF_VCARD ) {
+ VCardFile *vcf = ds->rawDataSource;
+ if( vcf ) {
+ vcard_free( vcf );
+ }
+ }
+#ifdef USE_JPILOT
+ else if( iface->type == ADDR_IF_JPILOT ) {
+ JPilotFile *jpf = ds->rawDataSource;
+ if( jpf ) {
+ jpilot_free( jpf );
+ }
+ }
+#endif
+#ifdef USE_LDAP
+ else if( iface->type == ADDR_IF_LDAP ) {
+ SyldapServer *server = ds->rawDataSource;
+ if( server ) {
+ syldap_free( server );
+ }
+ }
+#endif
+ }
+ else {
+ GList *list = ds->rawDataSource;
+ addrindex_free_attributes( list );
+ }
+
+ g_free( ADDRITEM_ID(addrIndex) );
+ g_free( ADDRITEM_NAME(addrIndex) );
+
+ ADDRITEM_TYPE(addrIndex) = ITEMTYPE_NONE;
+ ADDRITEM_ID(addrIndex) = NULL;
+ ADDRITEM_NAME(addrIndex) = NULL;
+ ADDRITEM_PARENT(addrIndex) = NULL;
+ ADDRITEM_SUBTYPE(addrIndex) = 0;
+ ds->type = ADDR_IF_NONE;
+ ds->rawDataSource = NULL;
+ ds->interface = NULL;
+
+ ds->type = ADDR_IF_NONE;
+ ds->rawDataSource = NULL;
+ ds->interface = NULL;
+ g_free( ds );
+}
+
+static void addrindex_free_all_datasources( AddressInterface *iface ) {
+ GList *node = iface->listSource;
+ while( node ) {
+ AddressDataSource *ds = node->data;
+ if( iface->useInterface ) {
+ if( iface->type == ADDR_IF_BOOK ) {
+ AddressBookFile *abf = ds->rawDataSource;
+ if( abf ) {
+ addrbook_free_book( abf );
+ }
+ }
+ else if( iface->type == ADDR_IF_VCARD ) {
+ VCardFile *vcf = ds->rawDataSource;
+ if( vcf ) {
+ vcard_free( vcf );
+ }
+ }
+#ifdef USE_JPILOT
+ else if( iface->type == ADDR_IF_JPILOT ) {
+ JPilotFile *jpf = ds->rawDataSource;
+ if( jpf ) {
+ jpilot_free( jpf );
+ }
+ }
+#endif
+#ifdef USE_LDAP
+ else if( iface->type == ADDR_IF_LDAP ) {
+ SyldapServer *server = ds->rawDataSource;
+ if( server ) {
+ syldap_free( server );
+ }
+ }
+#endif
+ }
+ else {
+ GList *list = ds->rawDataSource;
+ addrindex_free_attributes( list );
+ }
+
+ ds->type = ADDR_IF_NONE;
+ ds->rawDataSource = NULL;
+ ds->interface = NULL;
+ g_free( ds );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+}
+
+static void addrindex_free_interface( AddressInterface *iface ) {
+ addrindex_free_all_datasources( iface );
+
+ g_free( ADDRITEM_ID(iface) );
+ g_free( ADDRITEM_NAME(iface) );
+ g_free( iface->name );
+ g_free( iface->listTag );
+ g_free( iface->itemTag );
+
+ ADDRITEM_TYPE(iface) = ITEMTYPE_NONE;
+ ADDRITEM_ID(iface) = NULL;
+ ADDRITEM_NAME(iface) = NULL;
+ ADDRITEM_PARENT(iface) = NULL;
+ ADDRITEM_SUBTYPE(iface) = 0;
+ iface->type = ADDR_IF_NONE;
+ iface->name = NULL;
+ iface->listTag = NULL;
+ iface->itemTag = NULL;
+ iface->legacyFlag = FALSE;
+ iface->useInterface = FALSE;
+ iface->haveLibrary = FALSE;
+
+ g_list_free( iface->listSource );
+ iface->listSource = NULL;
+}
+
+/*
+* Create new object.
+*/
+AddressIndex *addrindex_create_index() {
+ AddressIndex *addrIndex = g_new0( AddressIndex, 1 );
+
+ ADDRITEM_TYPE(addrIndex) = ITEMTYPE_INDEX;
+ ADDRITEM_ID(addrIndex) = NULL;
+ ADDRITEM_NAME(addrIndex) = g_strdup( "Address Index" );
+ ADDRITEM_PARENT(addrIndex) = NULL;
+ ADDRITEM_SUBTYPE(addrIndex) = 0;
+ addrIndex->filePath = NULL;
+ addrIndex->fileName = NULL;
+ addrIndex->retVal = MGU_SUCCESS;
+ addrIndex->needsConversion = FALSE;
+ addrIndex->wasConverted = FALSE;
+ addrIndex->conversionError = FALSE;
+ addrIndex->interfaceList = NULL;
+ addrIndex->lastType = ADDR_IF_NONE;
+ addrIndex->dirtyFlag = FALSE;
+ addrindex_build_if_list( addrIndex );
+ return addrIndex;
+}
+
+/*
+* Specify file to be used.
+*/
+void addrindex_set_file_path( AddressIndex *addrIndex, const gchar *value ) {
+ g_return_if_fail( addrIndex != NULL );
+ addrIndex->filePath = mgu_replace_string( addrIndex->filePath, value );
+}
+void addrindex_set_file_name( AddressIndex *addrIndex, const gchar *value ) {
+ g_return_if_fail( addrIndex != NULL );
+ addrIndex->fileName = mgu_replace_string( addrIndex->fileName, value );
+}
+void addrindex_set_dirty( AddressIndex *addrIndex, const gboolean value ) {
+ g_return_if_fail( addrIndex != NULL );
+ addrIndex->dirtyFlag = value;
+}
+
+/*
+* Return list of interfaces.
+*/
+GList *addrindex_get_interface_list( AddressIndex *addrIndex ) {
+ g_return_val_if_fail( addrIndex != NULL, NULL );
+ return addrIndex->interfaceList;
+}
+
+/*
+* Free up object.
+*/
+void addrindex_free_index( AddressIndex *addrIndex ) {
+ GList *node;
+
+ g_return_if_fail( addrIndex != NULL );
+
+ g_free( ADDRITEM_ID(addrIndex) );
+ g_free( ADDRITEM_NAME(addrIndex) );
+ g_free( addrIndex->filePath );
+ g_free( addrIndex->fileName );
+ ADDRITEM_TYPE(addrIndex) = ITEMTYPE_NONE;
+ ADDRITEM_ID(addrIndex) = NULL;
+ ADDRITEM_NAME(addrIndex) = NULL;
+ ADDRITEM_PARENT(addrIndex) = NULL;
+ ADDRITEM_SUBTYPE(addrIndex) = 0;
+ addrIndex->filePath = NULL;
+ addrIndex->fileName = NULL;
+ addrIndex->retVal = MGU_SUCCESS;
+ addrIndex->needsConversion = FALSE;
+ addrIndex->wasConverted = FALSE;
+ addrIndex->conversionError = FALSE;
+ addrIndex->lastType = ADDR_IF_NONE;
+ addrIndex->dirtyFlag = FALSE;
+ node = addrIndex->interfaceList;
+ while( node ) {
+ AddressInterface *iface = node->data;
+ addrindex_free_interface( iface );
+ node = g_list_next( node );
+ }
+ g_list_free( addrIndex->interfaceList );
+ addrIndex->interfaceList = NULL;
+ g_free( addrIndex );
+}
+
+/*
+* Print address index.
+*/
+void addrindex_print_index( AddressIndex *addrIndex, FILE *stream ) {
+ g_return_if_fail( addrIndex != NULL );
+ fprintf( stream, "AddressIndex:\n" );
+ fprintf( stream, "\tfile path: '%s'\n", addrIndex->filePath );
+ fprintf( stream, "\tfile name: '%s'\n", addrIndex->fileName );
+ fprintf( stream, "\t status: %d : '%s'\n", addrIndex->retVal, mgu_error2string( addrIndex->retVal ) );
+ fprintf( stream, "\tconverted: '%s'\n", addrIndex->wasConverted ? "yes" : "no" );
+ fprintf( stream, "\tcvt error: '%s'\n", addrIndex->conversionError ? "yes" : "no" );
+ fprintf( stream, "\t---\n" );
+}
+
+/*
+* Retrieve specified interface from index.
+*/
+AddressInterface *addrindex_get_interface( AddressIndex *addrIndex, AddressIfType ifType ) {
+ AddressInterface *retVal = NULL;
+ GList *node;
+
+ g_return_val_if_fail( addrIndex != NULL, NULL );
+
+ node = addrIndex->interfaceList;
+ while( node ) {
+ AddressInterface *iface = node->data;
+ node = g_list_next( node );
+ if( iface->type == ifType ) {
+ retVal = iface;
+ break;
+ }
+ }
+ return retVal;
+}
+
+AddressDataSource *addrindex_create_datasource() {
+ AddressDataSource *ds = NULL;
+ ds = g_new0( AddressDataSource, 1 );
+ ADDRITEM_TYPE(ds) = ITEMTYPE_DATASOURCE;
+ ADDRITEM_ID(ds) = NULL;
+ ADDRITEM_NAME(ds) = NULL;
+ ADDRITEM_PARENT(ds) = NULL;
+ ADDRITEM_SUBTYPE(ds) = 0;
+ ds->type = ADDR_IF_NONE;
+ ds->rawDataSource = NULL;
+ ds->interface = NULL;
+ return ds;
+}
+
+/*
+* Add data source to index.
+* Enter: addrIndex Address index object.
+* ifType Interface type to add.
+* dataSource Actual data source to add.
+* Return: TRUE if data source was added.
+* Note: The raw data object (for example, AddressBookFile or VCardFile object) should be
+* supplied as the dataSource argument.
+*/
+AddressDataSource *addrindex_index_add_datasource( AddressIndex *addrIndex, AddressIfType ifType, gpointer dataSource ) {
+ AddressInterface *iface;
+ AddressDataSource *ds = NULL;
+
+ g_return_val_if_fail( addrIndex != NULL, NULL );
+ g_return_val_if_fail( dataSource != NULL, NULL );
+
+ iface = addrindex_get_interface( addrIndex, ifType );
+ if( iface ) {
+ ds = addrindex_create_datasource();
+ ADDRITEM_PARENT(ds) = ADDRITEM_OBJECT(iface);
+ ds->type = ifType;
+ ds->rawDataSource = dataSource;
+ ds->interface = iface;
+ iface->listSource = g_list_append( iface->listSource, ds );
+ addrIndex->dirtyFlag = TRUE;
+ }
+ return ds;
+}
+
+/*
+* Remove data source from index.
+* Enter: addrIndex Address index object.
+* dataSource Data source to remove.
+* Return: Data source if removed, or NULL if data source was not found in
+* index. Note the this object must still be freed.
+*/
+AddressDataSource *addrindex_index_remove_datasource( AddressIndex *addrIndex, AddressDataSource *dataSource ) {
+ AddressDataSource *retVal = FALSE;
+ AddressInterface *iface;
+
+ g_return_val_if_fail( addrIndex != NULL, NULL );
+ g_return_val_if_fail( dataSource != NULL, NULL );
+
+ iface = addrindex_get_interface( addrIndex, dataSource->type );
+ if( iface ) {
+ iface->listSource = g_list_remove( iface->listSource, dataSource );
+ addrIndex->dirtyFlag = TRUE;
+ dataSource->interface = NULL;
+ retVal = dataSource;
+ }
+ return retVal;
+}
+
+static AddressInterface *addrindex_tag_get_interface( AddressIndex *addrIndex, gchar *tag, AddressIfType ifType ) {
+ AddressInterface *retVal = NULL;
+ GList *node = addrIndex->interfaceList;
+
+ while( node ) {
+ AddressInterface *iface = node->data;
+ node = g_list_next( node );
+ if( tag ) {
+ if( strcmp( iface->listTag, tag ) == 0 ) {
+ retVal = iface;
+ break;
+ }
+ }
+ else {
+ if( iface->type == ifType ) {
+ retVal = iface;
+ break;
+ }
+ }
+ }
+ return retVal;
+}
+
+static AddressInterface *addrindex_tag_get_datasource( AddressIndex *addrIndex, AddressIfType ifType, gchar *tag ) {
+ AddressInterface *retVal = NULL;
+ GList *node = addrIndex->interfaceList;
+
+ while( node ) {
+ AddressInterface *iface = node->data;
+ node = g_list_next( node );
+ if( iface->type == ifType && iface->itemTag ) {
+ if( strcmp( iface->itemTag, tag ) == 0 ) {
+ retVal = iface;
+ break;
+ }
+ }
+ }
+ return retVal;
+}
+
+/* **********************************************************************
+* Interface XML parsing functions.
+* ***********************************************************************
+*/
+#if 0
+static void show_attribs( GList *attr ) {
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ printf( "\tattr value : %s :%s:\n", name, value );
+ attr = g_list_next( attr );
+ }
+ printf( "\t---\n" );
+}
+#endif
+
+static void addrindex_write_elem_s( FILE *fp, gint lvl, gchar *name ) {
+ gint i;
+ for( i = 0; i < lvl; i++ ) fputs( " ", fp );
+ fputs( "<", fp );
+ fputs( name, fp );
+}
+
+static void addrindex_write_elem_e( FILE *fp, gint lvl, gchar *name ) {
+ gint i;
+ for( i = 0; i < lvl; i++ ) fputs( " ", fp );
+ fputs( "</", fp );
+ fputs( name, fp );
+ fputs( ">\n", fp );
+}
+
+static void addrindex_write_attr( FILE *fp, gchar *name, gchar *value ) {
+ fputs( " ", fp );
+ fputs( name, fp );
+ fputs( "=\"", fp );
+ xml_file_put_escape_str( fp, value );
+ fputs( "\"", fp );
+}
+
+/*
+* Return list of name-value pairs.
+*/
+static GList *addrindex_read_attributes( XMLFile *file ) {
+ GList *list = NULL;
+ AddressIfAttrib *nv;
+ GList *attr;
+ gchar *name;
+ gchar *value;
+
+ attr = xml_get_current_tag_attr( file );
+ while( attr ) {
+ name = ((XMLAttr *)attr->data)->name;
+ value = ((XMLAttr *)attr->data)->value;
+ nv = g_new0( AddressIfAttrib, 1 );
+ nv->name = g_strdup( name );
+ nv->value = g_strdup( value );
+ list = g_list_append( list, nv );
+ attr = g_list_next( attr );
+ }
+ return list;
+}
+
+/*
+* Output name-value pairs.
+*/
+static void addrindex_write_attributes( FILE *fp, gchar *tag, GList *list, gint lvl ) {
+ GList *node;
+ AddressIfAttrib *nv;
+ if( list ) {
+ addrindex_write_elem_s( fp, lvl, tag );
+ node = list;
+ while( node ) {
+ nv = node->data;
+ addrindex_write_attr( fp, nv->name, nv->value );
+ node = g_list_next( node );
+ }
+ fputs(" />\n", fp);
+ }
+}
+
+#if 0
+static void addrindex_print_attributes( GList *list, FILE *stream ) {
+ GList *node = list;
+ while( node ) {
+ AddressIfAttrib *nv = node->data;
+ fprintf( stream, "%s : %s\n", nv->name, nv->value );
+ node = g_list_next( node );
+ }
+}
+#endif
+
+static AddressDataSource *addrindex_parse_book( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ AddressBookFile *abf;
+ GList *attr;
+
+ abf = addrbook_create_book();
+ attr = xml_get_current_tag_attr( file );
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, ATTAG_BOOK_NAME ) == 0 ) {
+ addrbook_set_name( abf, value );
+ }
+ else if( strcmp( name, ATTAG_BOOK_FILE ) == 0) {
+ addrbook_set_file( abf, value );
+ }
+ attr = g_list_next( attr );
+ }
+ ds->rawDataSource = abf;
+ return ds;
+}
+
+static void addrindex_write_book( FILE *fp, AddressDataSource *ds, gint lvl ) {
+ AddressBookFile *abf = ds->rawDataSource;
+ if( abf ) {
+ addrindex_write_elem_s( fp, lvl, TAG_DS_ADDRESS_BOOK );
+ addrindex_write_attr( fp, ATTAG_BOOK_NAME, abf->name );
+ addrindex_write_attr( fp, ATTAG_BOOK_FILE, abf->fileName );
+ fputs( " />\n", fp );
+ }
+}
+
+static AddressDataSource *addrindex_parse_vcard( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ VCardFile *vcf;
+ GList *attr;
+
+ vcf = vcard_create();
+ attr = xml_get_current_tag_attr( file );
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, ATTAG_VCARD_NAME ) == 0 ) {
+ vcard_set_name( vcf, value );
+ }
+ else if( strcmp( name, ATTAG_VCARD_FILE ) == 0) {
+ vcard_set_file( vcf, value );
+ }
+ attr = g_list_next( attr );
+ }
+ ds->rawDataSource = vcf;
+ return ds;
+}
+
+static void addrindex_write_vcard( FILE *fp, AddressDataSource *ds, gint lvl ) {
+ VCardFile *vcf = ds->rawDataSource;
+ if( vcf ) {
+ addrindex_write_elem_s( fp, lvl, TAG_DS_VCARD );
+ addrindex_write_attr( fp, ATTAG_VCARD_NAME, vcf->name );
+ addrindex_write_attr( fp, ATTAG_VCARD_FILE, vcf->path );
+ fputs( " />\n", fp );
+ }
+}
+
+#ifdef USE_JPILOT
+static AddressDataSource *addrindex_parse_jpilot( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ JPilotFile *jpf;
+ GList *attr;
+
+ jpf = jpilot_create();
+ attr = xml_get_current_tag_attr( file );
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ if( strcmp( name, ATTAG_JPILOT_NAME ) == 0 ) {
+ jpilot_set_name( jpf, value );
+ }
+ else if( strcmp( name, ATTAG_JPILOT_FILE ) == 0 ) {
+ jpilot_set_file( jpf, value );
+ }
+ else if( strcmp( name, ATTAG_JPILOT_CUSTOM_1 ) == 0 ) {
+ jpilot_add_custom_label( jpf, value );
+ }
+ else if( strcmp( name, ATTAG_JPILOT_CUSTOM_2 ) == 0 ) {
+ jpilot_add_custom_label( jpf, value );
+ }
+ else if( strcmp( name, ATTAG_JPILOT_CUSTOM_3 ) == 0 ) {
+ jpilot_add_custom_label( jpf, value );
+ }
+ else if( strcmp( name, ATTAG_JPILOT_CUSTOM_4 ) == 0 ) {
+ jpilot_add_custom_label( jpf, value );
+ }
+ attr = g_list_next( attr );
+ }
+ ds->rawDataSource = jpf;
+ return ds;
+}
+
+static void addrindex_write_jpilot( FILE *fp,AddressDataSource *ds, gint lvl ) {
+ JPilotFile *jpf = ds->rawDataSource;
+ if( jpf ) {
+ gint ind;
+ GList *node;
+ GList *customLbl = jpilot_get_custom_labels( jpf );
+ addrindex_write_elem_s( fp, lvl, TAG_DS_JPILOT );
+ addrindex_write_attr( fp, ATTAG_JPILOT_NAME, jpf->name );
+ addrindex_write_attr( fp, ATTAG_JPILOT_FILE, jpf->path );
+ node = customLbl;
+ ind = 1;
+ while( node ) {
+ gchar name[256];
+ sprintf( name, "%s%d", ATTAG_JPILOT_CUSTOM, ind );
+ addrindex_write_attr( fp, name, node->data );
+ ind++;
+ node = g_list_next( node );
+ }
+ fputs( " />\n", fp );
+ }
+}
+#else
+/* Just read/write name-value pairs */
+static AddressDataSource *addrindex_parse_jpilot( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ GList *list = addrindex_read_attributes( file );
+ ds->rawDataSource = list;
+ return ds;
+}
+
+static void addrindex_write_jpilot( FILE *fp, AddressDataSource *ds, gint lvl ) {
+ GList *list = ds->rawDataSource;
+ if( list ) {
+ addrindex_write_attributes( fp, TAG_DS_JPILOT, list, lvl );
+ }
+}
+#endif
+
+#ifdef USE_LDAP
+static AddressDataSource *addrindex_parse_ldap( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ SyldapServer *server;
+ GList *attr;
+
+ server = syldap_create();
+ attr = xml_get_current_tag_attr( file );
+ while( attr ) {
+ gchar *name = ((XMLAttr *)attr->data)->name;
+ gchar *value = ((XMLAttr *)attr->data)->value;
+ gint ivalue = atoi( value );
+ if( strcmp( name, ATTAG_LDAP_NAME ) == 0 ) {
+ syldap_set_name( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_HOST ) == 0 ) {
+ syldap_set_host( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_PORT ) == 0 ) {
+ syldap_set_port( server, ivalue );
+ }
+ else if( strcmp( name, ATTAG_LDAP_BASE_DN ) == 0 ) {
+ syldap_set_base_dn( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_BIND_DN ) == 0 ) {
+ syldap_set_bind_dn( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_BIND_PASS ) == 0 ) {
+ syldap_set_bind_password( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_CRITERIA ) == 0 ) {
+ syldap_set_search_criteria( server, value );
+ }
+ else if( strcmp( name, ATTAG_LDAP_MAX_ENTRY ) == 0 ) {
+ syldap_set_max_entries( server, ivalue );
+ }
+ else if( strcmp( name, ATTAG_LDAP_TIMEOUT ) == 0 ) {
+ syldap_set_timeout( server, ivalue );
+ }
+ attr = g_list_next( attr );
+ }
+
+ ds->rawDataSource = server;
+ return ds;
+}
+
+static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
+ SyldapServer *server = ds->rawDataSource;
+ if( server ) {
+ gchar value[256];
+
+ addrindex_write_elem_s( fp, lvl, TAG_DS_LDAP );
+ addrindex_write_attr( fp, ATTAG_LDAP_NAME, server->name );
+ addrindex_write_attr( fp, ATTAG_LDAP_HOST, server->hostName );
+
+ sprintf( value, "%d", server->port );
+ addrindex_write_attr( fp, ATTAG_LDAP_PORT, value );
+
+ addrindex_write_attr( fp, ATTAG_LDAP_BASE_DN, server->baseDN );
+ addrindex_write_attr( fp, ATTAG_LDAP_BIND_DN, server->bindDN );
+ addrindex_write_attr( fp, ATTAG_LDAP_BIND_PASS, server->bindPass );
+ addrindex_write_attr( fp, ATTAG_LDAP_CRITERIA, server->searchCriteria );
+
+ sprintf( value, "%d", server->maxEntries );
+ addrindex_write_attr( fp, ATTAG_LDAP_MAX_ENTRY, value );
+ sprintf( value, "%d", server->timeOut );
+ addrindex_write_attr( fp, ATTAG_LDAP_TIMEOUT, value );
+
+ fputs(" />\n", fp);
+ }
+}
+#else
+/* Just read/write name-value pairs */
+static AddressDataSource *addrindex_parse_ldap( XMLFile *file ) {
+ AddressDataSource *ds = g_new0( AddressDataSource, 1 );
+ GList *list = addrindex_read_attributes( file );
+ ds->rawDataSource = list;
+ return ds;
+}
+
+static void addrindex_write_ldap( FILE *fp, AddressDataSource *ds, gint lvl ) {
+ GList *list = ds->rawDataSource;
+ if( list ) {
+ addrindex_write_attributes( fp, TAG_DS_LDAP, list, lvl );
+ }
+}
+#endif
+
+/* **********************************************************************
+* Address index I/O functions.
+* ***********************************************************************
+*/
+static void addrindex_read_index( AddressIndex *addrIndex, XMLFile *file ) {
+ guint prev_level;
+ /* gchar *element; */
+ /* GList *attr; */
+ XMLTag *xtag;
+ AddressInterface *iface = NULL, *dsIFace = NULL;
+ AddressDataSource *ds;
+
+ for (;;) {
+ prev_level = file->level;
+ xml_parse_next_tag( file );
+ if( file->level < prev_level ) return;
+
+ xtag = xml_get_current_tag( file );
+ /* printf( "tag : %s\n", xtag->tag ); */
+
+ iface = addrindex_tag_get_interface( addrIndex, xtag->tag, ADDR_IF_NONE );
+ if( iface ) {
+ addrIndex->lastType = iface->type;
+ if( iface->legacyFlag ) addrIndex->needsConversion = TRUE;
+ /* printf( "found : %s\n", iface->name ); */
+ }
+ else {
+ dsIFace = addrindex_tag_get_datasource( addrIndex, addrIndex->lastType, xtag->tag );
+ if( dsIFace ) {
+ /* Add data source to list */
+ /* printf( "\tdata source: %s\n", dsIFace->name ); */
+ ds = NULL;
+ if( addrIndex->lastType == ADDR_IF_BOOK ) {
+ ds = addrindex_parse_book( file );
+ if( ds->rawDataSource ) {
+ addrbook_set_path( ds->rawDataSource, addrIndex->filePath );
+ /* addrbook_print_book( ds->rawDataSource, stdout ); */
+ }
+ }
+ else if( addrIndex->lastType == ADDR_IF_VCARD ) {
+ ds = addrindex_parse_vcard( file );
+ /* if( ds->rawDataSource ) { */
+ /* vcard_print_file( ds->rawDataSource, stdout ); */
+ /* } */
+ }
+ else if( addrIndex->lastType == ADDR_IF_JPILOT ) {
+ ds = addrindex_parse_jpilot( file );
+ /*
+ if( ds->rawDataSource ) {
+ jpilot_print_file( ds->rawDataSource, stdout );
+ // addrindex_print_attributes( ds->rawDataSource, stdout );
+ }
+ */
+ }
+ else if( addrIndex->lastType == ADDR_IF_LDAP ) {
+ ds = addrindex_parse_ldap( file );
+ /*
+ if( ds->rawDataSource ) {
+ syldap_print_data( ds->rawDataSource, stdout );
+ // addrindex_print_attributes( ds->rawDataSource, stdout );
+ }
+ */
+ }
+ if( ds ) {
+ ds->type = addrIndex->lastType;
+ ds->interface = dsIFace;
+ dsIFace->listSource = g_list_append( dsIFace->listSource, ds );
+ }
+ /* printf( "=============================\n\n" ); */
+ }
+ }
+ /*
+ element = xml_get_element( file );
+ attr = xml_get_current_tag_attr( file );
+ if( _interfaceLast_ && ! _interfaceLast_->legacyFlag ) {
+ show_attribs( attr );
+ printf( "\ttag value : %s :\n", element );
+ }
+ */
+ addrindex_read_index( addrIndex, file );
+ }
+}
+
+static gint addrindex_read_file( AddressIndex *addrIndex ) {
+ XMLFile *file = NULL;
+ gchar *fileSpec = NULL;
+
+ g_return_val_if_fail( addrIndex != NULL, -1 );
+
+ fileSpec = g_strconcat( addrIndex->filePath, G_DIR_SEPARATOR_S, addrIndex->fileName, NULL );
+ addrIndex->retVal = MGU_NO_FILE;
+ file = xml_open_file( fileSpec );
+ g_free( fileSpec );
+
+ if( file == NULL ) {
+ /* fprintf( stdout, " file '%s' does not exist.\n", addrIndex->fileName ); */
+ return addrIndex->retVal;
+ }
+
+ addrIndex->retVal = MGU_BAD_FORMAT;
+ if( xml_get_dtd( file ) == 0 ) {
+ if( xml_parse_next_tag( file ) == 0 ) {
+ if( xml_compare_tag( file, TAG_ADDRESS_INDEX ) ) {
+ addrindex_read_index( addrIndex, file );
+ addrIndex->retVal = MGU_SUCCESS;
+ }
+ }
+ }
+ xml_close_file( file );
+
+ return addrIndex->retVal;
+}
+
+static void addrindex_write_index( AddressIndex *addrIndex, FILE *fp ) {
+ GList *nodeIF, *nodeDS;
+ gint lvlList = 1;
+ gint lvlItem = 1 + lvlList;
+
+ nodeIF = addrIndex->interfaceList;
+ while( nodeIF ) {
+ AddressInterface *iface = nodeIF->data;
+ if( ! iface->legacyFlag ) {
+ nodeDS = iface->listSource;
+ addrindex_write_elem_s( fp, lvlList, iface->listTag );
+ fputs( ">\n", fp );
+ while( nodeDS ) {
+ AddressDataSource *ds = nodeDS->data;
+ if( ds ) {
+ if( iface->type == ADDR_IF_BOOK ) {
+ addrindex_write_book( fp, ds, lvlItem );
+ }
+ if( iface->type == ADDR_IF_VCARD ) {
+ addrindex_write_vcard( fp, ds, lvlItem );
+ }
+ if( iface->type == ADDR_IF_JPILOT ) {
+ addrindex_write_jpilot( fp, ds, lvlItem );
+ }
+ if( iface->type == ADDR_IF_LDAP ) {
+ addrindex_write_ldap( fp, ds, lvlItem );
+ }
+ }
+ nodeDS = g_list_next( nodeDS );
+ }
+ addrindex_write_elem_e( fp, lvlList, iface->listTag );
+ }
+ nodeIF = g_list_next( nodeIF );
+ }
+}
+
+/*
+* Write data to specified file.
+* Enter: addrIndex Address index object.
+* newFile New file name.
+* return: Status code, from addrIndex->retVal.
+* Note: File will be created in directory specified by addrIndex.
+*/
+gint addrindex_write_to( AddressIndex *addrIndex, const gchar *newFile ) {
+ FILE *fp;
+ gchar *fileSpec;
+#ifndef DEV_STANDALONE
+ PrefFile *pfile;
+#endif
+
+ g_return_val_if_fail( addrIndex != NULL, -1 );
+
+ fileSpec = g_strconcat( addrIndex->filePath, G_DIR_SEPARATOR_S, newFile, NULL );
+ addrIndex->retVal = MGU_OPEN_FILE;
+#ifdef DEV_STANDALONE
+ fp = fopen( fileSpec, "wb" );
+ g_free( fileSpec );
+ if( fp ) {
+ fputs( "<?xml version=\"1.0\" ?>\n", fp );
+#else
+ pfile = prefs_file_open( fileSpec );
+ g_free( fileSpec );
+ if( pfile ) {
+ fp = pfile->fp;
+ fprintf( fp, "<?xml version=\"1.0\" encoding=\"%s\" ?>\n",
+ conv_get_internal_charset_str() );
+#endif
+ addrindex_write_elem_s( fp, 0, TAG_ADDRESS_INDEX );
+ fputs( ">\n", fp );
+
+ addrindex_write_index( addrIndex, fp );
+ addrindex_write_elem_e( fp, 0, TAG_ADDRESS_INDEX );
+
+ addrIndex->retVal = MGU_SUCCESS;
+#ifdef DEV_STANDALONE
+ fclose( fp );
+#else
+ if( prefs_file_close( pfile ) < 0 ) {
+ addrIndex->retVal = MGU_ERROR_WRITE;
+ }
+#endif
+ }
+
+ fileSpec = NULL;
+ return addrIndex->retVal;
+}
+
+/*
+* Save address index data to original file.
+* return: Status code, from addrIndex->retVal.
+*/
+gint addrindex_save_data( AddressIndex *addrIndex ) {
+ g_return_val_if_fail( addrIndex != NULL, -1 );
+
+ addrIndex->retVal = MGU_NO_FILE;
+ if( addrIndex->fileName == NULL || *addrIndex->fileName == '\0' ) return addrIndex->retVal;
+ if( addrIndex->filePath == NULL || *addrIndex->filePath == '\0' ) return addrIndex->retVal;
+
+ addrindex_write_to( addrIndex, addrIndex->fileName );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ addrIndex->dirtyFlag = FALSE;
+ }
+ return addrIndex->retVal;
+}
+
+/*
+* Save all address book files which may have changed.
+* Return: Status code, set if there was a problem saving data.
+*/
+gint addrindex_save_all_books( AddressIndex *addrIndex ) {
+ gint retVal = MGU_SUCCESS;
+ GList *nodeIf, *nodeDS;
+
+ nodeIf = addrIndex->interfaceList;
+ while( nodeIf ) {
+ AddressInterface *iface = nodeIf->data;
+ if( iface->type == ADDR_IF_BOOK ) {
+ nodeDS = iface->listSource;
+ while( nodeDS ) {
+ AddressDataSource *ds = nodeDS->data;
+ AddressBookFile *abf = ds->rawDataSource;
+ if( abf->dirtyFlag ) {
+ if( abf->readFlag ) {
+ addrbook_save_data( abf );
+ if( abf->retVal != MGU_SUCCESS ) {
+ retVal = abf->retVal;
+ }
+ }
+ }
+ nodeDS = g_list_next( nodeDS );
+ }
+ break;
+ }
+ nodeIf = g_list_next( nodeIf );
+ }
+ return retVal;
+}
+
+
+/* **********************************************************************
+* Address book conversion to new format.
+* ***********************************************************************
+*/
+
+#define ELTAG_IF_OLD_FOLDER "folder"
+#define ELTAG_IF_OLD_GROUP "group"
+#define ELTAG_IF_OLD_ITEM "item"
+#define ELTAG_IF_OLD_NAME "name"
+#define ELTAG_IF_OLD_ADDRESS "address"
+#define ELTAG_IF_OLD_REMARKS "remarks"
+#define ATTAG_IF_OLD_NAME "name"
+
+#define TEMPNODE_ROOT 0
+#define TEMPNODE_FOLDER 1
+#define TEMPNODE_GROUP 2
+#define TEMPNODE_ADDRESS 3
+
+typedef struct _AddressCvt_Node AddressCvtNode;
+struct _AddressCvt_Node {
+ gint type;
+ gchar *name;
+ gchar *address;
+ gchar *remarks;
+ GList *list;
+};
+
+/*
+* Parse current address item.
+*/
+static AddressCvtNode *addrindex_parse_item( XMLFile *file ) {
+ gchar *element;
+ guint level;
+ AddressCvtNode *nn;
+
+ nn = g_new0( AddressCvtNode, 1 );
+ nn->type = TEMPNODE_ADDRESS;
+ nn->list = NULL;
+
+ level = file->level;
+
+ for (;;) {
+ xml_parse_next_tag(file);
+ if (file->level < level) return nn;
+
+ element = xml_get_element( file );
+ if( xml_compare_tag( file, ELTAG_IF_OLD_NAME ) ) {
+ nn->name = g_strdup( element );
+ }
+ if( xml_compare_tag( file, ELTAG_IF_OLD_ADDRESS ) ) {
+ nn->address = g_strdup( element );
+ }
+ if( xml_compare_tag( file, ELTAG_IF_OLD_REMARKS ) ) {
+ nn->remarks = g_strdup( element );
+ }
+ xml_parse_next_tag(file);
+ }
+}
+
+/*
+* Create a temporary node below specified node.
+*/
+static AddressCvtNode *addrindex_add_object( AddressCvtNode *node, gint type, gchar *name, gchar *addr, char *rem ) {
+ AddressCvtNode *nn;
+ nn = g_new0( AddressCvtNode, 1 );
+ nn->type = type;
+ nn->name = g_strdup( name );
+ nn->remarks = g_strdup( rem );
+ node->list = g_list_append( node->list, nn );
+ return nn;
+}
+
+/*
+* Process current temporary node.
+*/
+static void addrindex_add_obj( XMLFile *file, AddressCvtNode *node ) {
+ GList *attr;
+ guint prev_level;
+ AddressCvtNode *newNode = NULL;
+ gchar *name;
+ gchar *value;
+
+ for (;;) {
+ prev_level = file->level;
+ xml_parse_next_tag( file );
+ if (file->level < prev_level) return;
+ name = NULL;
+ value = NULL;
+
+ if( xml_compare_tag( file, ELTAG_IF_OLD_GROUP ) ) {
+ attr = xml_get_current_tag_attr(file);
+ if (attr) {
+ name = ((XMLAttr *)attr->data)->name;
+ if( strcmp( name, ATTAG_IF_OLD_NAME ) == 0 ) {
+ value = ((XMLAttr *)attr->data)->value;
+ }
+ }
+ newNode = addrindex_add_object( node, TEMPNODE_GROUP, value, "", "" );
+ addrindex_add_obj( file, newNode );
+
+ }
+ else if( xml_compare_tag( file, ELTAG_IF_OLD_FOLDER ) ) {
+ attr = xml_get_current_tag_attr(file);
+ if (attr) {
+ name = ((XMLAttr *)attr->data)->name;
+ if( strcmp( name, ATTAG_IF_OLD_NAME ) == 0 ) {
+ value = ((XMLAttr *)attr->data)->value;
+ }
+ }
+ newNode = addrindex_add_object( node, TEMPNODE_FOLDER, value, "", "" );
+ addrindex_add_obj( file, newNode );
+ }
+ else if( xml_compare_tag( file, ELTAG_IF_OLD_ITEM ) ) {
+ newNode = addrindex_parse_item( file );
+ node->list = g_list_append( node->list, newNode );
+ }
+ else {
+ /* printf( "invalid: !!! \n" ); */
+ attr = xml_get_current_tag_attr( file );
+ }
+ }
+}
+
+/*
+* Consume all nodes below current tag.
+*/
+static void addrindex_consume_tree( XMLFile *file ) {
+ guint prev_level;
+ gchar *element;
+ GList *attr;
+ XMLTag *xtag;
+
+ for (;;) {
+ prev_level = file->level;
+ xml_parse_next_tag( file );
+ if (file->level < prev_level) return;
+
+ xtag = xml_get_current_tag( file );
+ /* printf( "tag : %s\n", xtag->tag ); */
+ element = xml_get_element( file );
+ attr = xml_get_current_tag_attr( file );
+ /* show_attribs( attr ); */
+ /* printf( "\ttag value : %s :\n", element ); */
+ addrindex_consume_tree( file );
+ }
+}
+
+/*
+* Print temporary tree.
+*/
+static void addrindex_print_node( AddressCvtNode *node, FILE *stream ) {
+ GList *list;
+
+ fprintf( stream, "Node:\ttype :%d:\n", node->type );
+ fprintf( stream, "\tname :%s:\n", node->name );
+ fprintf( stream, "\taddr :%s:\n", node->address );
+ fprintf( stream, "\trems :%s:\n", node->remarks );
+ if( node->list ) {
+ fprintf( stream, "\t--list----\n" );
+ }
+ list = node->list;
+ while( list ) {
+ AddressCvtNode *lNode = list->data;
+ list = g_list_next( list );
+ addrindex_print_node( lNode, stream );
+ }
+ fprintf( stream, "\t==list-%d==\n", node->type );
+}
+
+/*
+* Free up temporary tree.
+*/
+static void addrindex_free_node( AddressCvtNode *node ) {
+ GList *list = node->list;
+
+ while( list ) {
+ AddressCvtNode *lNode = list->data;
+ list = g_list_next( list );
+ addrindex_free_node( lNode );
+ }
+ node->type = TEMPNODE_ROOT;
+ g_free( node->name );
+ g_free( node->address );
+ g_free( node->remarks );
+ g_list_free( node->list );
+ g_free( node );
+}
+
+/*
+* Process address book for specified node.
+*/
+static void addrindex_process_node(
+ AddressBookFile *abf, AddressCvtNode *node, ItemFolder *parent,
+ ItemGroup *parentGrp, ItemFolder *folderGrp )
+{
+ GList *list;
+ ItemFolder *itemFolder = NULL;
+ ItemGroup *itemGParent = parentGrp;
+ ItemFolder *itemGFolder = folderGrp;
+ AddressCache *cache = abf->addressCache;
+
+ if( node->type == TEMPNODE_ROOT ) {
+ itemFolder = parent;
+ }
+ else if( node->type == TEMPNODE_FOLDER ) {
+ itemFolder = addritem_create_item_folder();
+ addritem_folder_set_name( itemFolder, node->name );
+ addrcache_id_folder( cache, itemFolder );
+ addrcache_folder_add_folder( cache, parent, itemFolder );
+ itemGFolder = NULL;
+ }
+ else if( node->type == TEMPNODE_GROUP ) {
+ ItemGroup *itemGroup;
+ gchar *fName;
+
+ /* Create a folder for group */
+ fName = g_strdup_printf( "Cvt - %s", node->name );
+ itemGFolder = addritem_create_item_folder();
+ addritem_folder_set_name( itemGFolder, fName );
+ addrcache_id_folder( cache, itemGFolder );
+ addrcache_folder_add_folder( cache, parent, itemGFolder );
+ g_free( fName );
+
+ /* Add group into folder */
+ itemGroup = addritem_create_item_group();
+ addritem_group_set_name( itemGroup, node->name );
+ addrcache_id_group( cache, itemGroup );
+ addrcache_folder_add_group( cache, itemGFolder, itemGroup );
+ itemGParent = itemGroup;
+ }
+ else if( node->type == TEMPNODE_ADDRESS ) {
+ ItemPerson *itemPerson;
+ ItemEMail *itemEMail;
+
+ /* Create person and email objects */
+ itemPerson = addritem_create_item_person();
+ addritem_person_set_common_name( itemPerson, node->name );
+ addrcache_id_person( cache, itemPerson );
+ itemEMail = addritem_create_item_email();
+ addritem_email_set_address( itemEMail, node->address );
+ addritem_email_set_remarks( itemEMail, node->remarks );
+ addrcache_id_email( cache, itemEMail );
+ addrcache_person_add_email( cache, itemPerson, itemEMail );
+
+ /* Add person into appropriate folder */
+ if( itemGFolder ) {
+ addrcache_folder_add_person( cache, itemGFolder, itemPerson );
+ }
+ else {
+ addrcache_folder_add_person( cache, parent, itemPerson );
+ }
+
+ /* Add email address only into group */
+ if( parentGrp ) {
+ addrcache_group_add_email( cache, parentGrp, itemEMail );
+ }
+ }
+
+ list = node->list;
+ while( list ) {
+ AddressCvtNode *lNode = list->data;
+ list = g_list_next( list );
+ addrindex_process_node( abf, lNode, itemFolder, itemGParent, itemGFolder );
+ }
+}
+
+/*
+* Process address book to specified file number.
+*/
+static gboolean addrindex_process_book( AddressIndex *addrIndex, XMLFile *file, gchar *displayName ) {
+ gboolean retVal = FALSE;
+ AddressBookFile *abf = NULL;
+ AddressCvtNode *rootNode = NULL;
+ gchar *newFile = NULL;
+ GList *fileList = NULL;
+ gint fileNum = 0;
+
+ /* Setup root node */
+ rootNode = g_new0( AddressCvtNode, 1 );
+ rootNode->type = TEMPNODE_ROOT;
+ rootNode->name = g_strdup( "root" );
+ rootNode->list = NULL;
+ addrindex_add_obj( file, rootNode );
+ /* addrindex_print_node( rootNode, stdout ); */
+
+ /* Create new address book */
+ abf = addrbook_create_book();
+ addrbook_set_name( abf, displayName );
+ addrbook_set_path( abf, addrIndex->filePath );
+
+ /* Determine next available file number */
+ fileList = addrbook_get_bookfile_list( abf );
+ if( fileList ) {
+ fileNum = 1 + abf->maxValue;
+ }
+ g_list_free( fileList );
+ fileList = NULL;
+
+ newFile = addrbook_gen_new_file_name( fileNum );
+ if( newFile ) {
+ addrbook_set_file( abf, newFile );
+ }
+
+ addrindex_process_node( abf, rootNode, abf->addressCache->rootFolder, NULL, NULL );
+
+ /* addrbook_dump_book( abf, stdout ); */
+ addrbook_save_data( abf );
+ addrIndex->retVal = abf->retVal;
+ if( abf->retVal == MGU_SUCCESS ) retVal = TRUE;
+
+ addrbook_free_book( abf );
+ abf = NULL;
+ addrindex_free_node( rootNode );
+ rootNode = NULL;
+
+ /* Create entries in address index */
+ if( retVal ) {
+ abf = addrbook_create_book();
+ addrbook_set_name( abf, displayName );
+ addrbook_set_path( abf, addrIndex->filePath );
+ addrbook_set_file( abf, newFile );
+ addrindex_index_add_datasource( addrIndex, ADDR_IF_BOOK, abf );
+ }
+
+ return retVal;
+}
+
+/*
+* Process tree converting data.
+*/
+static void addrindex_convert_tree( AddressIndex *addrIndex, XMLFile *file ) {
+ guint prev_level;
+ gchar *element;
+ GList *attr;
+ XMLTag *xtag;
+
+ /* Process file */
+ for (;;) {
+ prev_level = file->level;
+ xml_parse_next_tag( file );
+ if (file->level < prev_level) return;
+
+ xtag = xml_get_current_tag( file );
+ /* printf( "tag : %d : %s\n", prev_level, xtag->tag ); */
+ if( strcmp( xtag->tag, TAG_IF_OLD_COMMON ) == 0 ) {
+ if( addrindex_process_book( addrIndex, file, DISP_OLD_COMMON ) ) {
+ addrIndex->needsConversion = FALSE;
+ addrIndex->wasConverted = TRUE;
+ continue;
+ }
+ return;
+ }
+ if( strcmp( xtag->tag, TAG_IF_OLD_PERSONAL ) == 0 ) {
+ if( addrindex_process_book( addrIndex, file, DISP_OLD_PERSONAL ) ) {
+ addrIndex->needsConversion = FALSE;
+ addrIndex->wasConverted = TRUE;
+ continue;
+ }
+ return;
+ }
+ element = xml_get_element( file );
+ attr = xml_get_current_tag_attr( file );
+ /* show_attribs( attr ); */
+ /* printf( "\ttag value : %s :\n", element ); */
+ addrindex_consume_tree( file );
+ }
+}
+
+static gint addrindex_convert_data( AddressIndex *addrIndex ) {
+ XMLFile *file = NULL;
+ gchar *fileSpec;
+
+ fileSpec = g_strconcat( addrIndex->filePath, G_DIR_SEPARATOR_S, addrIndex->fileName, NULL );
+ addrIndex->retVal = MGU_NO_FILE;
+ file = xml_open_file( fileSpec );
+ g_free( fileSpec );
+
+ if( file == NULL ) {
+ /* fprintf( stdout, " file '%s' does not exist.\n", addrIndex->fileName ); */
+ return addrIndex->retVal;
+ }
+
+ addrIndex->retVal = MGU_BAD_FORMAT;
+ if( xml_get_dtd( file ) == 0 ) {
+ if( xml_parse_next_tag( file ) == 0 ) {
+ if( xml_compare_tag( file, TAG_ADDRESS_INDEX ) ) {
+ addrindex_convert_tree( addrIndex, file );
+ }
+ }
+ }
+ xml_close_file( file );
+ return addrIndex->retVal;
+}
+
+/*
+* Create a new address book file.
+*/
+static gboolean addrindex_create_new_book( AddressIndex *addrIndex, gchar *displayName ) {
+ gboolean retVal = FALSE;
+ AddressBookFile *abf = NULL;
+ gchar *newFile = NULL;
+ GList *fileList = NULL;
+ gint fileNum = 0;
+
+ /* Create new address book */
+ abf = addrbook_create_book();
+ addrbook_set_name( abf, displayName );
+ addrbook_set_path( abf, addrIndex->filePath );
+
+ /* Determine next available file number */
+ fileList = addrbook_get_bookfile_list( abf );
+ if( fileList ) {
+ fileNum = 1 + abf->maxValue;
+ }
+ g_list_free( fileList );
+ fileList = NULL;
+
+ newFile = addrbook_gen_new_file_name( fileNum );
+ if( newFile ) {
+ addrbook_set_file( abf, newFile );
+ }
+
+ addrbook_save_data( abf );
+ addrIndex->retVal = abf->retVal;
+ if( abf->retVal == MGU_SUCCESS ) retVal = TRUE;
+ addrbook_free_book( abf );
+ abf = NULL;
+
+ /* Create entries in address index */
+ if( retVal ) {
+ abf = addrbook_create_book();
+ addrbook_set_name( abf, displayName );
+ addrbook_set_path( abf, addrIndex->filePath );
+ addrbook_set_file( abf, newFile );
+ addrindex_index_add_datasource( addrIndex, ADDR_IF_BOOK, abf );
+ }
+
+ return retVal;
+}
+
+/*
+* Read data for address index performing a conversion if necesary.
+* Enter: addrIndex Address index object.
+* return: Status code, from addrIndex->retVal.
+* Note: New address book files will be created in directory specified by
+* addrIndex. Three files will be created, for the following:
+* "Common addresses"
+* "Personal addresses"
+* "Gathered addresses" - a new address book.
+*/
+gint addrindex_read_data( AddressIndex *addrIndex ) {
+ g_return_val_if_fail( addrIndex != NULL, -1 );
+
+ addrIndex->conversionError = FALSE;
+ addrindex_read_file( addrIndex );
+ if( addrIndex->retVal == MGU_SUCCESS ) {
+ if( addrIndex->needsConversion ) {
+ if( addrindex_convert_data( addrIndex ) == MGU_SUCCESS ) {
+ addrIndex->conversionError = TRUE;
+ }
+ else {
+ addrIndex->conversionError = TRUE;
+ }
+ }
+ addrIndex->dirtyFlag = TRUE;
+ }
+ return addrIndex->retVal;
+}
+
+/*
+* Create new address books for a new address index.
+* Enter: addrIndex Address index object.
+* return: Status code, from addrIndex->retVal.
+* Note: New address book files will be created in directory specified by
+* addrIndex. Three files will be created, for the following:
+* "Common addresses"
+* "Personal addresses"
+* "Gathered addresses" - a new address book.
+*/
+gint addrindex_create_new_books( AddressIndex *addrIndex ) {
+ gboolean flg;
+
+ g_return_val_if_fail( addrIndex != NULL, -1 );
+
+ flg = addrindex_create_new_book( addrIndex, DISP_NEW_COMMON );
+ if( flg ) {
+ flg = addrindex_create_new_book( addrIndex, DISP_NEW_PERSONAL );
+ addrIndex->dirtyFlag = TRUE;
+ }
+ return addrIndex->retVal;
+}
+
+/* **********************************************************************
+* New interface stuff.
+* ***********************************************************************
+*/
+
+/*
+ * Return modified flag for specified data source.
+ */
+gboolean addrindex_ds_get_modify_flag( AddressDataSource *ds ) {
+ gboolean retVal = FALSE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getModifyFlag ) {
+ retVal = ( iface->getModifyFlag ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return accessed flag for specified data source.
+ */
+gboolean addrindex_ds_get_access_flag( AddressDataSource *ds ) {
+ gboolean retVal = FALSE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getAccessFlag ) {
+ retVal = ( iface->getAccessFlag ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return data read flag for specified data source.
+ */
+gboolean addrindex_ds_get_read_flag( AddressDataSource *ds ) {
+ gboolean retVal = TRUE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getReadFlag ) {
+ retVal = ( iface->getReadFlag ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return status code for specified data source.
+ */
+gint addrindex_ds_get_status_code( AddressDataSource *ds ) {
+ gint retVal = MGU_SUCCESS;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getStatusCode ) {
+ retVal = ( iface->getStatusCode ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return data read flag for specified data source.
+ */
+gint addrindex_ds_read_data( AddressDataSource *ds ) {
+ gint retVal = MGU_SUCCESS;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getReadData ) {
+ retVal = ( iface->getReadData ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return data read flag for specified data source.
+ */
+ItemFolder *addrindex_ds_get_root_folder( AddressDataSource *ds ) {
+ ItemFolder *retVal = NULL;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getRootFolder ) {
+ retVal = ( iface->getRootFolder ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return list of folders for specified data source.
+ */
+GList *addrindex_ds_get_list_folder( AddressDataSource *ds ) {
+ GList *retVal = FALSE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getListFolder ) {
+ retVal = ( iface->getListFolder ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return list of persons in root folder for specified data source.
+ */
+GList *addrindex_ds_get_list_person( AddressDataSource *ds ) {
+ GList *retVal = FALSE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getListPerson ) {
+ retVal = ( iface->getListPerson ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return name for specified data source.
+ */
+gchar *addrindex_ds_get_name( AddressDataSource *ds ) {
+ gchar *retVal = FALSE;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getName ) {
+ retVal = ( iface->getName ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Set the access flag inside the data source.
+ */
+void addrindex_ds_set_access_flag( AddressDataSource *ds, gboolean *value ) {
+ AddressInterface *iface;
+
+ if( ds == NULL ) return;
+ iface = ds->interface;
+ if( iface == NULL ) return;
+ if( iface->setAccessFlag ) {
+ ( iface->setAccessFlag ) ( ds->rawDataSource, value );
+ }
+}
+
+/*
+ * Return read only flag for specified data source.
+ */
+gboolean addrindex_ds_get_readonly( AddressDataSource *ds ) {
+ AddressInterface *iface;
+ if( ds == NULL ) return TRUE;
+ iface = ds->interface;
+ if( iface == NULL ) return TRUE;
+ return iface->readOnly;
+}
+
+/*
+ * Return list of all persons for specified data source.
+ */
+GList *addrindex_ds_get_all_persons( AddressDataSource *ds ) {
+ GList *retVal = NULL;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getAllPersons ) {
+ retVal = ( iface->getAllPersons ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+ * Return list of all groups for specified data source.
+ */
+GList *addrindex_ds_get_all_groups( AddressDataSource *ds ) {
+ GList *retVal = NULL;
+ AddressInterface *iface;
+
+ if( ds == NULL ) return retVal;
+ iface = ds->interface;
+ if( iface == NULL ) return retVal;
+ if( iface->getAllGroups ) {
+ retVal = ( iface->getAllGroups ) ( ds->rawDataSource );
+ }
+ return retVal;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/addrindex.h b/src/addrindex.h
new file mode 100644
index 00000000..a31ed8e4
--- /dev/null
+++ b/src/addrindex.h
@@ -0,0 +1,130 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General functions for accessing address index file.
+ */
+
+#ifndef __ADDRINDEX_H__
+#define __ADDRINDEX_H__
+
+#include <stdio.h>
+#include <glib.h>
+#include "addritem.h"
+
+#define ADDRESSBOOK_MAX_IFACE 4
+#define ADDRESSBOOK_INDEX_FILE "addrbook--index.xml"
+#define ADDRESSBOOK_OLD_FILE "addressbook.xml"
+
+typedef enum {
+ ADDR_IF_NONE,
+ ADDR_IF_BOOK,
+ ADDR_IF_VCARD,
+ ADDR_IF_JPILOT,
+ ADDR_IF_LDAP,
+ ADDR_IF_COMMON,
+ ADDR_IF_PERSONAL
+} AddressIfType;
+
+typedef struct _AddressIndex AddressIndex;
+struct _AddressIndex {
+ AddrItemObject obj;
+ gchar *filePath;
+ gchar *fileName;
+ gint retVal;
+ gboolean needsConversion;
+ gboolean wasConverted;
+ gboolean conversionError;
+ AddressIfType lastType;
+ gboolean dirtyFlag;
+ GList *interfaceList;
+};
+
+typedef struct _AddressInterface AddressInterface;
+struct _AddressInterface {
+ AddrItemObject obj;
+ AddressIfType type;
+ gchar *name;
+ gchar *listTag;
+ gchar *itemTag;
+ gboolean legacyFlag;
+ gboolean useInterface;
+ gboolean haveLibrary;
+ gboolean readOnly;
+ GList *listSource;
+ gboolean (*getModifyFlag)( void * );
+ gboolean (*getAccessFlag)( void * );
+ gboolean (*getReadFlag)( void * );
+ gint (*getStatusCode)( void * );
+ gint (*getReadData)( void * );
+ ItemFolder *(*getRootFolder)( void * );
+ GList *(*getListFolder)( void * );
+ GList *(*getListPerson)( void * );
+ GList *(*getAllPersons)( void * );
+ GList *(*getAllGroups)( void * );
+ gchar *(*getName)( void * );
+ void (*setAccessFlag)( void *, void * );
+};
+
+typedef struct _AddressDataSource AddressDataSource;
+struct _AddressDataSource {
+ AddrItemObject obj;
+ AddressIfType type;
+ AddressInterface *interface;
+ gpointer rawDataSource;
+};
+
+AddressIndex *addrindex_create_index ();
+void addrindex_set_file_path ( AddressIndex *addrIndex, const gchar *value );
+void addrindex_set_file_name ( AddressIndex *addrIndex, const gchar *value );
+void addrindex_set_dirty ( AddressIndex *addrIndex, const gboolean value );
+GList *addrindex_get_interface_list ( AddressIndex *addrIndex );
+void addrindex_free_index ( AddressIndex *addrIndex );
+void addrindex_print_index ( AddressIndex *addrIndex, FILE *stream );
+
+AddressInterface *addrindex_get_interface ( AddressIndex *addrIndex, AddressIfType ifType );
+AddressDataSource *addrindex_index_add_datasource ( AddressIndex *addrIndex, AddressIfType ifType, gpointer dataSource );
+AddressDataSource *addrindex_index_remove_datasource ( AddressIndex *addrIndex, AddressDataSource *dataSource );
+void addrindex_free_datasource ( AddressIndex *addrIndex, AddressDataSource *ds );
+
+gint addrindex_read_data ( AddressIndex *addrIndex );
+gint addrindex_write_to ( AddressIndex *addrIndex, const gchar *newFile );
+gint addrindex_save_data ( AddressIndex *addrIndex );
+gint addrindex_create_new_books ( AddressIndex *addrIndex );
+gint addrindex_save_all_books ( AddressIndex *addrIndex );
+
+gboolean addrindex_ds_get_modify_flag ( AddressDataSource *ds );
+gboolean addrindex_ds_get_access_flag ( AddressDataSource *ds );
+gboolean addrindex_ds_get_read_flag ( AddressDataSource *ds );
+gint addrindex_ds_get_status_code ( AddressDataSource *ds );
+gint addrindex_ds_read_data ( AddressDataSource *ds );
+ItemFolder *addrindex_ds_get_root_folder( AddressDataSource *ds );
+GList *addrindex_ds_get_list_folder ( AddressDataSource *ds );
+GList *addrindex_ds_get_list_person ( AddressDataSource *ds );
+gchar *addrindex_ds_get_name ( AddressDataSource *ds );
+void addrindex_ds_set_access_flag ( AddressDataSource *ds, gboolean *value );
+gboolean addrindex_ds_get_readonly ( AddressDataSource *ds );
+GList *addrindex_ds_get_all_persons ( AddressDataSource *ds );
+GList *addrindex_ds_get_all_groups ( AddressDataSource *ds );
+
+#endif /* __ADDRINDEX_H__ */
+
+/*
+* End of Source.
+*/
diff --git a/src/addritem.c b/src/addritem.c
new file mode 100644
index 00000000..0fdfb019
--- /dev/null
+++ b/src/addritem.c
@@ -0,0 +1,989 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General primitive address item objects.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "addritem.h"
+#include "mgutils.h"
+
+/*
+* Create new email address item.
+*/
+ItemEMail *addritem_create_item_email( void ) {
+ ItemEMail *item;
+ item = g_new0( ItemEMail, 1 );
+ ADDRITEM_TYPE(item) = ITEMTYPE_EMAIL;
+ ADDRITEM_ID(item) = NULL;
+ ADDRITEM_NAME(item) = NULL;
+ ADDRITEM_PARENT(item) = NULL;
+ ADDRITEM_SUBTYPE(item) = 0;
+ item->address = NULL;
+ item->remarks = NULL;
+ return item;
+}
+
+/*
+* Create copy of specified email address item.
+*/
+ItemEMail *addritem_copy_item_email( ItemEMail *item ) {
+ ItemEMail *itemNew = NULL;
+ if( item ) {
+ itemNew = addritem_create_item_email();
+ ADDRITEM_TYPE(itemNew) = ADDRITEM_TYPE(item);
+ ADDRITEM_ID(itemNew) = g_strdup( ADDRITEM_ID(item) );
+ ADDRITEM_NAME(itemNew) = g_strdup( ADDRITEM_NAME(item) );
+ ADDRITEM_PARENT(itemNew) = ADDRITEM_PARENT(item);
+ itemNew->address = g_strdup( item->address );
+ itemNew->remarks = g_strdup( item->remarks );
+ }
+ return itemNew;
+}
+
+void addritem_email_set_id( ItemEMail *email, const gchar *value ) {
+ ADDRITEM_ID(email) = mgu_replace_string( ADDRITEM_ID(email), value );
+}
+void addritem_email_set_alias( ItemEMail *email, const gchar *value ) {
+ ADDRITEM_NAME(email) = mgu_replace_string( ADDRITEM_NAME(email), value );
+}
+void addritem_email_set_address( ItemEMail *email, const gchar *value ) {
+ email->address = mgu_replace_string( email->address, value );
+}
+void addritem_email_set_remarks( ItemEMail *email, const gchar *value ) {
+ email->remarks = mgu_replace_string( email->remarks, value );
+}
+
+/*
+* Free address item email.
+*/
+void addritem_free_item_email( ItemEMail *item ) {
+ g_return_if_fail( item != NULL );
+
+ /* Free internal stuff */
+ g_free( ADDRITEM_ID(item) );
+ g_free( ADDRITEM_NAME(item) );
+ g_free( item->address );
+ g_free( item->remarks );
+
+ ADDRITEM_OBJECT(item)->type = ITEMTYPE_NONE;
+ ADDRITEM_ID(item) = NULL;
+ ADDRITEM_NAME(item) = NULL;
+ ADDRITEM_PARENT(item) = NULL;
+ ADDRITEM_SUBTYPE(item) = 0;
+ item->address = NULL;
+ item->remarks = NULL;
+ g_free( item );
+}
+
+/*
+* Create new attribute.
+*/
+UserAttribute *addritem_create_attribute( void ) {
+ UserAttribute *item;
+ item = g_new0( UserAttribute, 1 );
+ item->uid = NULL;
+ item->name = NULL;
+ item->value = NULL;
+ return item;
+}
+
+/*
+* Create copy of specified attribute.
+*/
+UserAttribute *addritem_copy_attribute( UserAttribute *item ) {
+ UserAttribute *itemNew = NULL;
+ if( item ) {
+ itemNew = addritem_create_attribute();
+ itemNew->uid = g_strdup( item->uid );
+ itemNew->name = g_strdup( item->name );
+ itemNew->value = g_strdup( item->value );
+ }
+ return itemNew;
+}
+
+void addritem_attrib_set_id( UserAttribute *item, const gchar *value ) {
+ g_return_if_fail( item != NULL );
+ item->uid = mgu_replace_string( item->uid, value );
+}
+void addritem_attrib_set_name( UserAttribute *item, const gchar *value ) {
+ g_return_if_fail( item != NULL );
+ item->name = mgu_replace_string( item->name, value );
+}
+void addritem_attrib_set_value( UserAttribute *item, const gchar *value ) {
+ g_return_if_fail( item != NULL );
+ item->value = mgu_replace_string( item->value, value );
+}
+
+/*
+* Free user attribute.
+*/
+void addritem_free_attribute( UserAttribute *item ) {
+ g_return_if_fail( item != NULL );
+ g_free( item->uid );
+ g_free( item->name );
+ g_free( item->value );
+ item->uid = NULL;
+ item->name = NULL;
+ item->value = NULL;
+ g_free( item );
+}
+
+/*
+* Create new address book person.
+*/
+ItemPerson *addritem_create_item_person( void ) {
+ ItemPerson *person;
+ person = g_new0( ItemPerson, 1 );
+ ADDRITEM_TYPE(person) = ITEMTYPE_PERSON;
+ ADDRITEM_ID(person) = NULL;
+ ADDRITEM_NAME(person) = NULL;
+ ADDRITEM_PARENT(person) = NULL;
+ ADDRITEM_SUBTYPE(person) = 0;
+ person->firstName = NULL;
+ person->lastName = NULL;
+ person->nickName = NULL;
+ person->listEMail = NULL;
+ person->listAttrib = NULL;
+ person->externalID = NULL;
+ person->isOpened = FALSE;
+ return person;
+}
+
+void addritem_person_set_id( ItemPerson *person, const gchar *value ) {
+ ADDRITEM_ID(person) = mgu_replace_string( ADDRITEM_ID(person), value );
+}
+void addritem_person_set_first_name( ItemPerson *person, const gchar *value ) {
+ person->firstName = mgu_replace_string( person->firstName, value );
+}
+void addritem_person_set_last_name( ItemPerson *person, const gchar *value ) {
+ person->lastName = mgu_replace_string( person->lastName, value );
+}
+void addritem_person_set_nick_name( ItemPerson *person, const gchar *value ) {
+ person->nickName = mgu_replace_string( person->nickName, value );
+}
+void addritem_person_set_common_name( ItemPerson *person, const gchar *value ) {
+ ADDRITEM_NAME(person) = mgu_replace_string( ADDRITEM_NAME(person), value );
+}
+void addritem_person_set_external_id( ItemPerson *person, const gchar *value ) {
+ person->externalID = mgu_replace_string( person->externalID, value );
+}
+void addritem_person_set_opened( ItemPerson *person, const gboolean value ) {
+ person->isOpened = value;
+}
+
+/*
+* Free linked list of item addresses.
+*/
+void addritem_free_list_email( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ addritem_free_item_email( node->data );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+}
+
+/*
+* Free linked list of attributes.
+*/
+void addritem_free_list_attribute( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ addritem_free_attribute( node->data );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+}
+
+/*
+* Free address person.
+*/
+void addritem_free_item_person( ItemPerson *person ) {
+ g_return_if_fail( person != NULL );
+
+ /* Free internal stuff */
+ g_free( ADDRITEM_ID(person) );
+ g_free( ADDRITEM_NAME(person) );
+ g_free( person->firstName );
+ g_free( person->lastName );
+ g_free( person->nickName );
+ g_free( person->externalID );
+ addritem_free_list_email( person->listEMail );
+ addritem_free_list_attribute( person->listAttrib );
+
+ ADDRITEM_OBJECT(person)->type = ITEMTYPE_NONE;
+ ADDRITEM_ID(person) = NULL;
+ ADDRITEM_NAME(person) = NULL;
+ ADDRITEM_PARENT(person) = NULL;
+ ADDRITEM_SUBTYPE(person) = 0;
+ person->firstName = NULL;
+ person->lastName = NULL;
+ person->nickName = NULL;
+ person->externalID = NULL;
+ person->listEMail = NULL;
+ person->listAttrib = NULL;
+
+ g_free( person );
+}
+
+/*
+* Print address item.
+*/
+void addritem_print_item_email( ItemEMail *item, FILE *stream ) {
+ g_return_if_fail( item != NULL );
+ fprintf( stream, "\t\tt/id: %d : '%s'\n", ADDRITEM_TYPE(item), ADDRITEM_ID(item) );
+ fprintf( stream, "\t\tsubty: %d\n", ADDRITEM_SUBTYPE(item) );
+ fprintf( stream, "\t\talis: '%s'\n", ADDRITEM_NAME(item) );
+ fprintf( stream, "\t\taddr: '%s'\n", item->address );
+ fprintf( stream, "\t\trems: '%s'\n", item->remarks );
+ fprintf( stream, "\t\t---\n" );
+}
+
+/*
+* Print user attribute.
+*/
+void addritem_print_attribute( UserAttribute *item, FILE *stream ) {
+ g_return_if_fail( item != NULL );
+ fprintf( stream, "\t\tuid : '%s'\n", item->uid );
+ fprintf( stream, "\t\tname : '%s'\n", item->name );
+ fprintf( stream, "\t\tvalue: '%s'\n", item->value );
+ fprintf( stream, "\t\t---\n" );
+}
+
+/*
+* Print person item.
+*/
+void addritem_print_item_person( ItemPerson *person, FILE *stream ) {
+ GList *node;
+ g_return_if_fail( person != NULL );
+ fprintf( stream, "Person:\n" );
+ fprintf( stream, "\tt/uid: %d : '%s'\n", ADDRITEM_TYPE(person), ADDRITEM_ID(person) );
+ fprintf( stream, "\tsubty: %d\n", ADDRITEM_SUBTYPE(person) );
+ fprintf( stream, "\tcommn: '%s'\n", ADDRITEM_NAME(person) );
+ fprintf( stream, "\tfirst: '%s'\n", person->firstName );
+ fprintf( stream, "\tlast : '%s'\n", person->lastName );
+ fprintf( stream, "\tnick : '%s'\n", person->nickName );
+ fprintf( stream, "\textID: '%s'\n", person->externalID );
+ fprintf( stream, "\teMail:\n" );
+ fprintf( stream, "\t---\n" );
+ node = person->listEMail;
+ while( node ) {
+ addritem_print_item_email( node->data, stream );
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\tuAttr:\n" );
+ fprintf( stream, "\t---\n" );
+ node = person->listAttrib;
+ while( node ) {
+ addritem_print_attribute( node->data, stream );
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\t===\n" );
+}
+
+/*
+* Add EMail address to person.
+* return: TRUE if item added.
+*/
+gboolean addritem_person_add_email( ItemPerson *person, ItemEMail *email ) {
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, FALSE );
+ g_return_val_if_fail( email != NULL, FALSE );
+
+ node = person->listEMail;
+ while( node ) {
+ if( node->data == email ) return FALSE;
+ node = g_list_next( node );
+ }
+ person->listEMail = g_list_append( person->listEMail, email );
+ ADDRITEM_PARENT(email) = ADDRITEM_OBJECT(person);
+ return TRUE;
+}
+
+/*
+* Return email object with specified ID.
+* param: person Person object.
+* eid EMail ID.
+* return: EMail object, or NULL if not found.
+*/
+ItemEMail *addritem_person_get_email( ItemPerson *person, const gchar *eid ) {
+ ItemEMail *email = NULL;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( eid == NULL || *eid == '\0' ) return NULL;
+
+ /* Look for email */
+ node = person->listEMail;
+ while( node ) {
+ AddrItemObject *objE = node->data;
+ gchar *ide = ADDRITEM_ID(objE);
+ if( ide ) {
+ if( strcmp( ide, eid ) == 0 ) {
+ email = ( ItemEMail * ) objE;
+ }
+ }
+ node = g_list_next( node );
+ }
+ return email;
+}
+
+/*
+* Remove email address for specified person.
+* param: person Person object.
+* eid EMail ID.
+* return: EMail object, or NULL if not found. Note that object should still be freed.
+*/
+ItemEMail *addritem_person_remove_email_id( ItemPerson *person, const gchar *eid ) {
+ ItemEMail *email = NULL;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( eid == NULL || *eid == '\0' ) return NULL;
+
+ /* Look for email */
+ node = person->listEMail;
+ while( node ) {
+ AddrItemObject *objE = node->data;
+ gchar *ide = ADDRITEM_ID(objE);
+ if( ide ) {
+ if( strcmp( ide, eid ) == 0 ) {
+ email = ( ItemEMail * ) objE;
+ }
+ }
+ node = g_list_next( node );
+ }
+
+ if( email ) {
+ /* Remove email from person's address list */
+ if( person->listEMail ) {
+ person->listEMail = g_list_remove( person->listEMail, email );
+ }
+ /* Unlink reference to person. */
+ ADDRITEM_PARENT(email) = NULL;
+ }
+ return email;
+}
+
+/*
+* Remove email address for specified.
+* param: person Person.
+* email EMail to remove.
+* return: EMail object, or NULL if not found. Note that object should still be freed.
+*/
+ItemEMail *addritem_person_remove_email( ItemPerson *person, ItemEMail *email ) {
+ gboolean found = FALSE;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( email == NULL ) return NULL;
+
+ /* Look for email */
+ node = person->listEMail;
+ while( node ) {
+ if( node-> data == email ) {
+ found = TRUE;
+ break;
+ }
+ node = g_list_next( node );
+ }
+
+ if( found ) {
+ /* Remove email from person's address list */
+ if( person->listEMail ) {
+ person->listEMail = g_list_remove( person->listEMail, email );
+ }
+ /* Unlink reference to person. */
+ ADDRITEM_PARENT(email) = NULL;
+ return email;
+ }
+ return NULL;
+}
+
+/*
+* Add user attribute to person.
+* return: TRUE if item added.
+*/
+void addritem_person_add_attribute( ItemPerson *person, UserAttribute *attrib ) {
+ g_return_if_fail( person != NULL );
+ person->listAttrib = g_list_append( person->listAttrib, attrib );
+}
+
+/*
+* Return attribute with specified ID.
+* param: person Person object.
+* aid Attribute ID.
+* return: UserAttribute object, or NULL if not found. Note that object should still be freed.
+*/
+UserAttribute *addritem_person_get_attribute( ItemPerson *person, const gchar *aid ) {
+ UserAttribute *attrib = NULL;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( aid == NULL || *aid == '\0' ) return NULL;
+
+ /* Look for attribute */
+ node = person->listAttrib;
+ while( node ) {
+ UserAttribute *attr = node->data;
+ gchar *ida = attr->uid;
+ if( ida ) {
+ if( strcmp( ida, aid ) == 0 ) {
+ attrib = attr;
+ }
+ }
+ node = g_list_next( node );
+ }
+ return attrib;
+}
+
+/*
+* Remove attribute from person.
+* param: person Person object.
+* aid Attribute ID.
+* return: UserAttribute object, or NULL if not found. Note that object should still be freed.
+*/
+UserAttribute *addritem_person_remove_attrib_id( ItemPerson *person, const gchar *aid ) {
+ UserAttribute *attrib = NULL;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( aid == NULL || *aid == '\0' ) return NULL;
+
+ /* Look for attribute */
+ node = person->listAttrib;
+ while( node ) {
+ UserAttribute *attr = node->data;
+ gchar *ida = attr->uid;
+ if( ida ) {
+ if( strcmp( ida, aid ) == 0 ) {
+ attrib = attr;
+ }
+ }
+ node = g_list_next( node );
+ }
+
+ /* Remove email from person's address list */
+ if( person->listAttrib ) {
+ person->listAttrib = g_list_remove( person->listAttrib, attrib );
+ }
+ return attrib;
+}
+
+/*
+* Remove attribute from person.
+* param: person Person.
+* attrib Attribute to remove.
+* return: UserAttribute object. Note that object should still be freed.
+*/
+UserAttribute *addritem_person_remove_attribute( ItemPerson *person, UserAttribute *attrib ) {
+ gboolean found = FALSE;
+ GList *node;
+
+ g_return_val_if_fail( person != NULL, NULL );
+ if( attrib == NULL ) return NULL;
+
+ /* Look for attribute */
+ node = person->listAttrib;
+ while( node ) {
+ if( node-> data == attrib ) {
+ found = TRUE;
+ break;
+ }
+ node = g_list_next( node );
+ }
+
+ if( found ) {
+ /* Remove attribute */
+ if( person->listAttrib ) {
+ person->listAttrib = g_list_remove( person->listAttrib, attrib );
+ }
+ }
+ return attrib;
+}
+
+/*
+* Create new address book group.
+*/
+ItemGroup *addritem_create_item_group( void ) {
+ ItemGroup *group;
+
+ group = g_new0( ItemGroup, 1 );
+ ADDRITEM_TYPE(group) = ITEMTYPE_GROUP;
+ ADDRITEM_ID(group) = NULL;
+ ADDRITEM_NAME(group) = NULL;
+ ADDRITEM_PARENT(group) = NULL;
+ ADDRITEM_SUBTYPE(group) = 0;
+ group->remarks = NULL;
+ group->listEMail = NULL;
+ return group;
+}
+
+/*
+* Specify name to be used.
+*/
+void addritem_group_set_id( ItemGroup *group, const gchar *value ) {
+ ADDRITEM_ID(group) = mgu_replace_string( ADDRITEM_ID(group), value );
+}
+void addritem_group_set_name( ItemGroup *group, const gchar *value ) {
+ ADDRITEM_NAME(group) = mgu_replace_string( ADDRITEM_NAME(group), value );
+}
+void addritem_group_set_remarks( ItemGroup *group, const gchar *value ) {
+ group->remarks = mgu_replace_string( group->remarks, value );
+}
+
+/*
+* Free address group.
+*/
+void addritem_free_item_group( ItemGroup *group ) {
+ g_return_if_fail( group != NULL );
+
+ /* Free internal stuff */
+ g_free( ADDRITEM_ID(group) );
+ g_free( ADDRITEM_NAME(group) );
+ g_free( group->remarks );
+ mgu_clear_list( group->listEMail );
+ g_list_free( group->listEMail );
+
+ ADDRITEM_TYPE(group) = ITEMTYPE_NONE;
+ ADDRITEM_ID(group) = NULL;
+ ADDRITEM_NAME(group) = NULL;
+ ADDRITEM_PARENT(group) = NULL;
+ ADDRITEM_SUBTYPE(group) = 0;
+ group->remarks = NULL;
+ group->listEMail = NULL;
+
+ g_free( group );
+}
+
+/*
+* Add EMail address to group.
+* return: TRUE if item added.
+*/
+gboolean addritem_group_add_email( ItemGroup *group, ItemEMail *email ) {
+ GList *node;
+
+ g_return_val_if_fail( group != NULL, FALSE );
+ g_return_val_if_fail( email != NULL, FALSE );
+
+ node = group->listEMail;
+ while( node ) {
+ if( node->data == email ) return FALSE;
+ node = g_list_next( node );
+ }
+ group->listEMail = g_list_append( group->listEMail, email );
+ return TRUE;
+}
+
+/*
+* Remove email address for specified group.
+* param: group Group from which to remove address.
+* email EMail to remove
+* return: EMail object, or NULL if email not found in group. Note that this object is
+* referenced (linked) to a group and should *NOT* be freed. This object should only be
+* freed after removing from a person.
+*/
+ItemEMail *addritem_group_remove_email( ItemGroup *group, ItemEMail *email ) {
+ if( group && email ) {
+ GList *node = group->listEMail;
+ while( node ) {
+ if( node->data == email ) {
+ group->listEMail = g_list_remove( group->listEMail, email );
+ return email;
+ }
+ node = g_list_next( node );
+ }
+ }
+ return NULL;
+}
+
+/*
+* Remove email address for specified group and ID.
+* param: group Group from which to remove address.
+* eid EMail ID.
+* return: EMail object, or NULL if email not found in group. Note that this object is
+* referenced (linked) to a group and should *NOT* be freed. This object should only be
+* freed after removing from a person.
+*/
+ItemEMail *addritem_group_remove_email_id( ItemGroup *group, const gchar *eid ) {
+ if( group ) {
+ GList *node = group->listEMail;
+ while( node ) {
+ ItemEMail *email = ( ItemEMail * ) node->data;
+ if( strcmp( ADDRITEM_ID( email ), eid ) == 0 ) {
+ group->listEMail = g_list_remove( group->listEMail, email );
+ return email;
+ }
+ node = g_list_next( node );
+ }
+ }
+ return NULL;
+}
+
+/*
+* Print address group item.
+*/
+void addritem_print_item_group( ItemGroup *group, FILE *stream ) {
+ GList *node;
+ ItemPerson *person;
+ ItemEMail *item;
+ g_return_if_fail( group != NULL );
+ fprintf( stream, "Group:\n" );
+ fprintf( stream, "\tt/u: %d : '%s'\n", ADDRITEM_TYPE(group), ADDRITEM_ID(group) );
+ fprintf( stream, "\tsub: %d\n", ADDRITEM_SUBTYPE(group) );
+ fprintf( stream, "\tgrp: '%s'\n", ADDRITEM_NAME(group) );
+ fprintf( stream, "\trem: '%s'\n", group->remarks );
+ fprintf( stream, "\t---\n" );
+ node = group->listEMail;
+ while( node ) {
+ item = node->data;
+ person = ( ItemPerson * ) ADDRITEM_PARENT(item);
+ if( person ) {
+ fprintf( stream, "\t\tpid : '%s'\n", ADDRITEM_ID(person) );
+ fprintf( stream, "\t\tcomn: '%s'\n", ADDRITEM_NAME(person) );
+ }
+ else {
+ fprintf( stream, "\t\tpid : ???\n" );
+ fprintf( stream, "\t\tcomn: ???\n" );
+ }
+ addritem_print_item_email( item, stream );
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\t***\n" );
+}
+
+/*
+* Create new address folder.
+*/
+ItemFolder *addritem_create_item_folder( void ) {
+ ItemFolder *folder;
+ folder = g_new0( ItemFolder, 1 );
+ ADDRITEM_TYPE(folder) = ITEMTYPE_FOLDER;
+ ADDRITEM_ID(folder) = NULL;
+ ADDRITEM_NAME(folder) = NULL;
+ ADDRITEM_PARENT(folder) = NULL;
+ ADDRITEM_SUBTYPE(folder) = 0;
+ folder->remarks = NULL;
+ folder->isRoot = FALSE;
+ folder->listItems = NULL;
+ folder->listFolder = NULL;
+ folder->listPerson = NULL;
+ folder->listGroup = NULL;
+ folder->userData = NULL;
+ return folder;
+}
+
+/*
+* Specify name to be used.
+*/
+void addritem_folder_set_id( ItemFolder *folder, const gchar *value ) {
+ ADDRITEM_ID(folder) = mgu_replace_string( ADDRITEM_ID(folder), value );
+}
+void addritem_folder_set_name( ItemFolder *folder, const gchar *value ) {
+ ADDRITEM_NAME(folder) = mgu_replace_string( ADDRITEM_NAME(folder), value );
+}
+void addritem_folder_set_remarks( ItemFolder *folder, const gchar *value ) {
+ folder->remarks = mgu_replace_string( folder->remarks, value );
+}
+
+/*
+* Free address folder. Note: this does not free up the lists of children
+* (folders, groups and person). This should be done prior to calling this
+* function.
+*/
+void addritem_free_item_folder( ItemFolder *folder ) {
+ g_return_if_fail( folder != NULL );
+
+ /* Free internal stuff */
+ g_free( ADDRITEM_ID(folder) );
+ g_free( ADDRITEM_NAME(folder) );
+ g_free( folder->remarks );
+ mgu_clear_list( folder->listItems );
+ g_list_free( folder->listItems );
+
+ ADDRITEM_TYPE(folder) = ITEMTYPE_NONE;
+ ADDRITEM_ID(folder) = NULL;
+ ADDRITEM_NAME(folder) = NULL;
+ ADDRITEM_PARENT(folder) = NULL;
+ ADDRITEM_SUBTYPE(folder) = 0;
+ folder->isRoot = FALSE;
+ folder->remarks = NULL;
+ folder->listItems = NULL;
+ folder->listFolder = NULL;
+ folder->listGroup = NULL;
+ folder->listPerson = NULL;
+
+ g_free( folder->userData );
+ folder->userData = NULL;
+
+ g_free( folder );
+}
+
+/*
+* Free up folders recursively. Note: this does not free up the lists of children
+* (folders, groups and person). This should be done prior to calling this
+* function.
+*/
+void addritem_free_item_folder_recurse( ItemFolder *parent ) {
+ GList *node = parent->listFolder;
+
+ while( node ) {
+ ItemFolder *folder = node->data;
+ addritem_free_item_folder_recurse( folder );
+ node = g_list_next( node );
+ }
+ g_list_free( parent->listPerson );
+ g_list_free( parent->listGroup );
+ g_list_free( parent->listFolder );
+ parent->listPerson = NULL;
+ parent->listGroup = NULL;
+ parent->listFolder = NULL;
+}
+
+/*
+* Free up list of person in specified folder.
+*/
+void addritem_folder_free_person( ItemFolder *folder ) {
+ GList *node;
+
+ g_return_if_fail( folder != NULL );
+
+ /* Free up folder of persons. */
+ node = folder->listPerson;
+ while( node ) {
+ ItemPerson *person = node->data;
+ addritem_free_item_person( person );
+ person = NULL;
+ node = g_list_next( node );
+ }
+}
+
+/*
+* Add person into folder.
+* return: TRUE if person added.
+*/
+gboolean addritem_folder_add_person( ItemFolder *folder, ItemPerson *item ) {
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ folder->listPerson = g_list_append( folder->listPerson, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ return TRUE;
+}
+
+/*
+* Add folder into folder.
+* return: TRUE if folder added.
+*/
+gboolean addritem_folder_add_folder( ItemFolder *folder, ItemFolder *item ) {
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ folder->listFolder = g_list_append( folder->listFolder, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ return TRUE;
+}
+
+/*
+* Add group into folder.
+* return: TRUE if folder added.
+*/
+gboolean addritem_folder_add_group( ItemFolder *folder, ItemGroup *item ) {
+ g_return_val_if_fail( folder != NULL, FALSE );
+ g_return_val_if_fail( item != NULL, FALSE );
+
+ folder->listGroup = g_list_append( folder->listGroup, item );
+ ADDRITEM_PARENT(item) = ADDRITEM_OBJECT(folder);
+ return TRUE;
+}
+
+/*
+* Print address folder item.
+*/
+void addritem_print_item_folder( ItemFolder *folder, FILE *stream ) {
+ GList *node;
+ /* ItemPerson *person; */
+ ItemFolder *parent;
+
+ g_return_if_fail( folder != NULL );
+
+ fprintf( stream, "Folder:\n" );
+ fprintf( stream, "\tt/u: %d : '%s'\n", ADDRITEM_TYPE(folder), ADDRITEM_ID(folder) );
+ fprintf( stream, "\tsub: %d\n", ADDRITEM_SUBTYPE(folder) );
+ fprintf( stream, "\tnam: '%s'\n", ADDRITEM_NAME(folder) );
+ fprintf( stream, "\trem: '%s'\n", folder->remarks );
+ fprintf( stream, "\t---\n" );
+ parent = ( ItemFolder * ) ADDRITEM_PARENT(folder);
+ if( parent ) {
+ fprintf( stream, "\tpar: %s : %s\n", ADDRITEM_ID(parent), ADDRITEM_NAME(parent) );
+ }
+ else {
+ fprintf( stream, "\tpar: NULL\n" );
+ }
+ node = folder->listFolder;
+ while( node ) {
+ AddrItemObject *aio = node->data;
+ if( aio ) {
+ if( aio->type == ITEMTYPE_FOLDER ) {
+ ItemFolder *item = ( ItemFolder * ) aio;
+ addritem_print_item_folder( item, stream );
+ }
+ }
+ else {
+ fprintf( stream, "\t\tpid : ???\n" );
+ }
+
+ node = g_list_next( node );
+ }
+
+ node = folder->listPerson;
+ while( node ) {
+ AddrItemObject *aio = node->data;
+ if( aio ) {
+ if( aio->type == ITEMTYPE_PERSON ) {
+ ItemPerson *item = ( ItemPerson * ) aio;
+ addritem_print_item_person( item, stream );
+ }
+ }
+ else {
+ fprintf( stream, "\t\tpid : ???\n" );
+ }
+
+ node = g_list_next( node );
+ }
+
+ node = folder->listGroup;
+ while( node ) {
+ AddrItemObject *aio = node->data;
+ if( aio ) {
+ if( aio->type == ITEMTYPE_GROUP ) {
+ ItemGroup *item = ( ItemGroup * ) aio;
+ addritem_print_item_group( item, stream );
+ }
+ }
+ else {
+ fprintf( stream, "\t\tpid : ???\n" );
+ }
+ node = g_list_next( node );
+ }
+ fprintf( stream, "\t###\n" );
+}
+
+/*
+* Return link list of persons for specified folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to use the
+* addritem_free_xxx() functions... this will destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *addritem_folder_get_person_list( ItemFolder *folder ) {
+ GList *list = NULL;
+ GList *node = NULL;
+
+ g_return_val_if_fail( folder != NULL, NULL );
+
+ node = folder->listPerson;
+ while( node ) {
+ ItemPerson *person = node->data;
+ list = g_list_append( list, person );
+ node = g_list_next( node );
+ }
+ return list;
+}
+
+/*
+* Return link list of groups for specified folder. Note that the list contains
+* references to items and should be g_free() when done. Do *NOT* attempt to use the
+* addritem_free_xxx() functions... this will destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *addritem_folder_get_group_list( ItemFolder *folder ) {
+ GList *list = NULL;
+ GList *node = NULL;
+
+ g_return_val_if_fail( folder != NULL, NULL );
+
+ node = folder->listGroup;
+ while( node ) {
+ ItemGroup *group = node->data;
+ list = g_list_append( list, group );
+ node = g_list_next( node );
+ }
+ return list;
+}
+
+/*
+* Move person's email item.
+* param: person Person.
+* itemMove Item to move.
+* itemTarget Target item before which to move item.
+*/
+
+ItemEMail *addritem_move_email_before( ItemPerson *person, ItemEMail *itemMove, ItemEMail *itemTarget ) {
+ gint posT, posM;
+
+ g_return_val_if_fail( person != NULL, NULL );
+
+ if( itemTarget == NULL ) return NULL;
+ if( itemMove == NULL ) return NULL;
+ if( itemMove == itemTarget ) return itemMove;
+
+ posT = g_list_index( person->listEMail, itemTarget );
+ if( posT < 0 ) return NULL;
+ posM = g_list_index( person->listEMail, itemMove );
+ if( posM < 0 ) return NULL;
+ person->listEMail = g_list_remove( person->listEMail, itemMove );
+ person->listEMail = g_list_insert( person->listEMail, itemMove, posT );
+ return itemMove;
+}
+
+/*
+* Move person's email item.
+* param: person Person.
+* itemMove Item to move.
+* itemTarget Target item after which to move item.
+*/
+ItemEMail *addritem_move_email_after( ItemPerson *person, ItemEMail *itemMove, ItemEMail *itemTarget ) {
+ gint posT, posM;
+
+ g_return_val_if_fail( person != NULL, NULL );
+
+ if( itemTarget == NULL ) return NULL;
+ if( itemMove == NULL ) return NULL;
+ if( itemMove == itemTarget ) return itemMove;
+
+ posT = g_list_index( person->listEMail, itemTarget );
+ if( posT < 0 ) return NULL;
+ posM = g_list_index( person->listEMail, itemMove );
+ if( posM < 0 ) return NULL;
+ person->listEMail = g_list_remove( person->listEMail, itemMove );
+ person->listEMail = g_list_insert( person->listEMail, itemMove, 1+posT );
+ return itemMove;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/addritem.h b/src/addritem.h
new file mode 100644
index 00000000..80cbdaa5
--- /dev/null
+++ b/src/addritem.h
@@ -0,0 +1,174 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Address item data.
+ */
+
+#ifndef __ADDRITEM_H__
+#define __ADDRITEM_H__
+
+#include <stdio.h>
+#include <glib.h>
+
+#define ADDRITEM_OBJECT(obj) ((AddrItemObject *)obj)
+#define ADDRITEM_TYPE(obj) (ADDRITEM_OBJECT(obj)->type)
+#define ADDRITEM_NAME(obj) (ADDRITEM_OBJECT(obj)->name)
+#define ADDRITEM_ID(obj) (ADDRITEM_OBJECT(obj)->uid)
+#define ADDRITEM_PARENT(obj) (ADDRITEM_OBJECT(obj)->parent)
+#define ADDRITEM_SUBTYPE(obj) (ADDRITEM_OBJECT(obj)->subType)
+
+typedef enum {
+ ITEMTYPE_NONE,
+ ITEMTYPE_PERSON,
+ ITEMTYPE_EMAIL,
+ ITEMTYPE_FOLDER,
+ ITEMTYPE_GROUP,
+ ITEMTYPE_INDEX,
+ ITEMTYPE_INTERFACE,
+ ITEMTYPE_DATASOURCE
+} ItemObjectType;
+
+typedef struct _AddrItemObject AddrItemObject;
+struct _AddrItemObject {
+ ItemObjectType type;
+ gchar *name;
+ gchar *uid;
+ AddrItemObject *parent;
+ gint subType;
+};
+
+typedef struct _ItemPerson ItemPerson;
+struct _ItemPerson {
+ AddrItemObject obj;
+ gchar *firstName;
+ gchar *lastName;
+ gchar *nickName;
+ gchar *externalID;
+ GList *listEMail;
+ GList *listAttrib;
+ gboolean isOpened;
+};
+
+typedef struct _ItemEMail ItemEMail;
+struct _ItemEMail {
+ AddrItemObject obj;
+ gchar *address;
+ gchar *remarks;
+};
+
+typedef struct _UserAttribute UserAttribute;
+struct _UserAttribute {
+ gchar *uid;
+ gchar *name;
+ gchar *value;
+};
+
+typedef struct _ItemFolder ItemFolder;
+struct _ItemFolder {
+ AddrItemObject obj;
+ gchar *remarks;
+ gboolean isRoot;
+ GList *listItems;
+ GList *listFolder;
+ GList *listPerson;
+ GList *listGroup;
+ gpointer userData;
+};
+
+typedef struct _ItemGroup ItemGroup;
+struct _ItemGroup {
+ AddrItemObject obj;
+ gchar *remarks;
+ GList *listEMail;
+};
+
+/* Function prototypes */
+ItemEMail *addritem_create_item_email ( void );
+ItemEMail *addritem_copy_item_email ( ItemEMail *item );
+void addritem_email_set_id ( ItemEMail *email, const gchar *value );
+void addritem_email_set_alias ( ItemEMail *email, const gchar *value );
+void addritem_email_set_address ( ItemEMail *email, const gchar *value );
+void addritem_email_set_remarks ( ItemEMail *email, const gchar *value );
+void addritem_free_item_email ( ItemEMail *item );
+
+UserAttribute *addritem_create_attribute( void );
+UserAttribute *addritem_copy_attribute ( UserAttribute *item );
+void addritem_attrib_set_id ( UserAttribute *item, const gchar *value );
+void addritem_attrib_set_name ( UserAttribute *item, const gchar *value );
+void addritem_attrib_set_value ( UserAttribute *item, const gchar *value );
+void addritem_free_attribute ( UserAttribute *item );
+
+ItemPerson *addritem_create_item_person ( void );
+void addritem_person_set_id ( ItemPerson *person, const gchar *value );
+void addritem_person_set_first_name ( ItemPerson *person, const gchar *value );
+void addritem_person_set_last_name ( ItemPerson *person, const gchar *value );
+void addritem_person_set_nick_name ( ItemPerson *person, const gchar *value );
+void addritem_person_set_common_name ( ItemPerson *person, const gchar *value );
+void addritem_person_set_external_id ( ItemPerson *person, const gchar *value );
+void addritem_person_set_opened ( ItemPerson *person, const gboolean value );
+void addritem_free_item_person ( ItemPerson *person );
+void addritem_free_list_email ( GList *list );
+void addritem_free_list_attribute ( GList *list );
+
+ItemGroup *addritem_create_item_group ( void );
+void addritem_free_item_group ( ItemGroup *group );
+void addritem_print ( ItemGroup *group, FILE *stream );
+void addritem_group_set_id ( ItemGroup *group, const gchar *value );
+void addritem_group_set_name ( ItemGroup *group, const gchar *value );
+void addritem_group_set_remarks ( ItemGroup *group, const gchar *value );
+
+void addritem_print_item_email ( ItemEMail *item, FILE *stream );
+void addritem_print_attribute ( UserAttribute *item, FILE *stream );
+void addritem_print_item_person ( ItemPerson *person, FILE *stream );
+void addritem_print_item_group ( ItemGroup *group, FILE *stream );
+void addritem_print_item_folder ( ItemFolder *folder, FILE *stream );
+
+gboolean addritem_person_add_email ( ItemPerson *person, ItemEMail *email );
+ItemEMail *addritem_person_get_email ( ItemPerson *person, const gchar *eid );
+ItemEMail *addritem_person_remove_email_id ( ItemPerson *person, const gchar *eid );
+ItemEMail *addritem_person_remove_email ( ItemPerson *person, ItemEMail *email );
+
+void addritem_person_add_attribute ( ItemPerson *person, UserAttribute *attrib );
+UserAttribute *addritem_person_get_attribute ( ItemPerson *person, const gchar *aid );
+UserAttribute *addritem_person_remove_attrib_id ( ItemPerson *person, const gchar *aid );
+UserAttribute *addritem_person_remove_attribute ( ItemPerson *person, UserAttribute *attrib );
+
+ItemFolder *addritem_create_item_folder ( void );
+void addritem_folder_set_id ( ItemFolder *folder, const gchar *value );
+void addritem_folder_set_name ( ItemFolder *folder, const gchar *value );
+void addritem_folder_set_remarks ( ItemFolder *folder, const gchar *value );
+void addritem_free_item_folder ( ItemFolder *folder );
+void addritem_free_item_folder_recurse ( ItemFolder *parent );
+
+gboolean addritem_group_add_email ( ItemGroup *group, ItemEMail *email );
+ItemEMail *addritem_group_remove_email ( ItemGroup *group, ItemEMail *email );
+ItemEMail *addritem_group_remove_email_id ( ItemGroup *group, const gchar *eid );
+
+gboolean addritem_folder_add_person ( ItemFolder *folder, ItemPerson *item );
+gboolean addritem_folder_add_folder ( ItemFolder *folder, ItemFolder *item );
+gboolean addritem_folder_add_group ( ItemFolder *folder, ItemGroup *item );
+void addritem_folder_free_person ( ItemFolder *folder );
+GList *addritem_folder_get_person_list ( ItemFolder *folder );
+GList *addritem_folder_get_group_list ( ItemFolder *folder );
+
+ItemEMail *addritem_move_email_before ( ItemPerson *person, ItemEMail *itemMove, ItemEMail *itemTarget );
+ItemEMail *addritem_move_email_after ( ItemPerson *person, ItemEMail *itemMove, ItemEMail *itemTarget );
+
+#endif /* __ADDRITEM_H__ */
diff --git a/src/alertpanel.c b/src/alertpanel.c
new file mode 100644
index 00000000..bc865358
--- /dev/null
+++ b/src/alertpanel.c
@@ -0,0 +1,353 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "intl.h"
+#include "alertpanel.h"
+#include "manage_window.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "inc.h"
+#include "stock_pixmap.h"
+#include "prefs_common.h"
+
+#define ALERT_PANEL_WIDTH 380
+#define TITLE_HEIGHT 72
+#define MESSAGE_HEIGHT 62
+
+static gboolean alertpanel_is_open = FALSE;
+static AlertValue value;
+
+static GtkWidget *dialog;
+
+static void alertpanel_show (void);
+static void alertpanel_create (const gchar *title,
+ const gchar *message,
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label,
+ gboolean can_disable,
+ AlertType type);
+
+static void alertpanel_button_toggled (GtkToggleButton *button,
+ gpointer data);
+static void alertpanel_button_clicked (GtkWidget *widget,
+ gpointer data);
+static gint alertpanel_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean alertpanel_close (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+
+AlertValue alertpanel(const gchar *title,
+ const gchar *message,
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label)
+{
+ if (alertpanel_is_open)
+ return -1;
+ else
+ alertpanel_is_open = TRUE;
+
+ alertpanel_create(title, message, button1_label, button2_label,
+ button3_label, FALSE, ALERT_QUESTION);
+ alertpanel_show();
+
+ debug_print("return value = %d\n", value);
+ return value;
+}
+
+void alertpanel_message(const gchar *title, const gchar *message,
+ AlertType type)
+{
+ if (alertpanel_is_open)
+ return;
+ else
+ alertpanel_is_open = TRUE;
+
+ alertpanel_create(title, message, NULL, NULL, NULL, FALSE, type);
+ alertpanel_show();
+}
+
+AlertValue alertpanel_message_with_disable(const gchar *title,
+ const gchar *message,
+ AlertType type)
+{
+ if (alertpanel_is_open)
+ return 0;
+ else
+ alertpanel_is_open = TRUE;
+
+ alertpanel_create(title, message, NULL, NULL, NULL, TRUE, type);
+ alertpanel_show();
+
+ return value;
+}
+
+void alertpanel_notice(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[256];
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+ strretchomp(buf);
+
+ alertpanel_message(_("Notice"), buf, ALERT_NOTICE);
+}
+
+void alertpanel_warning(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[256];
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+ strretchomp(buf);
+
+ alertpanel_message(_("Warning"), buf, ALERT_WARNING);
+}
+
+void alertpanel_error(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[256];
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+ strretchomp(buf);
+
+ alertpanel_message(_("Error"), buf, ALERT_ERROR);
+}
+
+static void alertpanel_show(void)
+{
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+ manage_window_set_transient(GTK_WINDOW(dialog));
+ value = G_ALERTWAIT;
+
+ inc_lock();
+ while ((value & G_ALERT_VALUE_MASK) == G_ALERTWAIT)
+ gtk_main_iteration();
+
+ gtk_widget_destroy(dialog);
+ GTK_EVENTS_FLUSH();
+
+ alertpanel_is_open = FALSE;
+ inc_unlock();
+}
+
+static void alertpanel_create(const gchar *title,
+ const gchar *message,
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label,
+ gboolean can_disable,
+ AlertType type)
+{
+ static PangoFontDescription *font_desc;
+ StockPixmap stock_pixmap;
+ GtkWidget *pixmapwid;
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *spc_vbox;
+ GtkWidget *msg_vbox;
+ GtkWidget *disable_chkbtn;
+ GtkWidget *confirm_area;
+ GtkWidget *button1;
+ GtkWidget *button2;
+ GtkWidget *button3;
+ const gchar *label2;
+ const gchar *label3;
+
+ debug_print(_("Creating alert panel dialog...\n"));
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_title(GTK_WINDOW(dialog), title);
+ gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE);
+ gtk_container_set_border_width
+ (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(dialog), "delete_event",
+ G_CALLBACK(alertpanel_deleted),
+ (gpointer)G_ALERTOTHER);
+ g_signal_connect(G_OBJECT(dialog), "key_press_event",
+ G_CALLBACK(alertpanel_close),
+ (gpointer)G_ALERTOTHER);
+ gtk_widget_realize(dialog);
+
+ /* for title label */
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
+ hbox, TRUE, TRUE, 8);
+
+ /* title icon and label */
+ switch (type) {
+ case ALERT_NOTICE:
+ stock_pixmap = STOCK_PIXMAP_DIALOG_INFO; break;
+ case ALERT_QUESTION:
+ stock_pixmap = STOCK_PIXMAP_DIALOG_QUESTION; break;
+ case ALERT_WARNING:
+ stock_pixmap = STOCK_PIXMAP_DIALOG_WARNING; break;
+ case ALERT_ERROR:
+ stock_pixmap = STOCK_PIXMAP_DIALOG_ERROR; break;
+ default:
+ stock_pixmap = STOCK_PIXMAP_DIALOG_QUESTION; break;
+ }
+ pixmapwid = stock_pixmap_widget(dialog, stock_pixmap);
+ gtk_box_pack_start(GTK_BOX(hbox), pixmapwid, FALSE, FALSE, 16);
+
+ label = gtk_label_new(title);
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ if (!font_desc) {
+ gchar *fontstr = prefs_common.titlefont
+ ? prefs_common.titlefont
+ : DEFAULT_TITLE_FONT;
+ font_desc = pango_font_description_from_string(fontstr);
+ }
+ if (font_desc)
+ gtk_widget_modify_font(label, font_desc);
+
+ /* for message and button(s) */
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
+ vbox);
+
+ spc_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), spc_vbox, FALSE, FALSE, 0);
+ gtk_widget_set_size_request(spc_vbox, -1, 16);
+
+ msg_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), msg_vbox, FALSE, FALSE, 0);
+
+ /* for message label */
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(msg_vbox), hbox, FALSE, FALSE, 0);
+
+ /* message label */
+ label = gtk_label_new(message);
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 24);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+
+ if (can_disable) {
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 8);
+
+ disable_chkbtn = gtk_check_button_new_with_label
+ (_("Show this message next time"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(disable_chkbtn),
+ TRUE);
+ gtk_box_pack_start(GTK_BOX(hbox), disable_chkbtn,
+ FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(disable_chkbtn), "toggled",
+ G_CALLBACK(alertpanel_button_toggled),
+ GUINT_TO_POINTER(G_ALERTDISABLE));
+ } else {
+ spc_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), spc_vbox, FALSE, FALSE, 0);
+ gtk_widget_set_size_request(spc_vbox, -1, 20);
+ }
+
+ /* for button(s) */
+ if (!button1_label)
+ button1_label = _("OK");
+ label2 = button2_label;
+ label3 = button3_label;
+ if (label2 && *label2 == '+') label2++;
+ if (label3 && *label3 == '+') label3++;
+
+ gtkut_button_set_create(&confirm_area,
+ &button1, button1_label,
+ button2_label ? &button2 : NULL, label2,
+ button3_label ? &button3 : NULL, label3);
+
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(button1);
+ gtk_widget_grab_focus(button1);
+ if (button2_label && *button2_label == '+') {
+ gtk_widget_grab_default(button2);
+ gtk_widget_grab_focus(button2);
+ }
+ if (button3_label && *button3_label == '+') {
+ gtk_widget_grab_default(button3);
+ gtk_widget_grab_focus(button3);
+ }
+
+ g_signal_connect(G_OBJECT(button1), "clicked",
+ G_CALLBACK(alertpanel_button_clicked),
+ GUINT_TO_POINTER(G_ALERTDEFAULT));
+ if (button2_label)
+ g_signal_connect(G_OBJECT(button2), "clicked",
+ G_CALLBACK(alertpanel_button_clicked),
+ GUINT_TO_POINTER(G_ALERTALTERNATE));
+ if (button3_label)
+ g_signal_connect(G_OBJECT(button3), "clicked",
+ G_CALLBACK(alertpanel_button_clicked),
+ GUINT_TO_POINTER(G_ALERTOTHER));
+
+ gtk_widget_show_all(dialog);
+}
+
+static void alertpanel_button_toggled(GtkToggleButton *button,
+ gpointer data)
+{
+ if (gtk_toggle_button_get_active(button))
+ value &= ~GPOINTER_TO_UINT(data);
+ else
+ value |= GPOINTER_TO_UINT(data);
+}
+
+static void alertpanel_button_clicked(GtkWidget *widget, gpointer data)
+{
+ value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data;
+}
+
+static gint alertpanel_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data;
+ return TRUE;
+}
+
+static gboolean alertpanel_close(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ if (event->type == GDK_KEY_PRESS)
+ if (((GdkEventKey *)event)->keyval != GDK_Escape)
+ return FALSE;
+
+ value = (value & ~G_ALERT_VALUE_MASK) | (AlertValue)data;
+ return FALSE;
+}
diff --git a/src/alertpanel.h b/src/alertpanel.h
new file mode 100644
index 00000000..8b0d4e1b
--- /dev/null
+++ b/src/alertpanel.h
@@ -0,0 +1,67 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ALERTPANEL_H__
+#define __ALERTPANEL_H__
+
+#include <glib.h>
+#include <gtk/gtkwindow.h>
+
+typedef enum
+{
+ G_ALERTDEFAULT,
+ G_ALERTALTERNATE,
+ G_ALERTOTHER,
+ G_ALERTWAIT,
+
+ G_ALERTDISABLE = 1 << 16
+} AlertValue;
+
+typedef enum
+{
+ ALERT_NOTICE,
+ ALERT_QUESTION,
+ ALERT_WARNING,
+ ALERT_ERROR
+} AlertType;
+
+#define G_ALERT_VALUE_MASK 0x0000ffff
+
+AlertValue alertpanel (const gchar *title,
+ const gchar *message,
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label);
+
+void alertpanel_message (const gchar *title,
+ const gchar *message,
+ AlertType type);
+
+AlertValue alertpanel_message_with_disable (const gchar *title,
+ const gchar *message,
+ AlertType type);
+
+void alertpanel_notice (const gchar *format,
+ ...) G_GNUC_PRINTF(1, 2);
+void alertpanel_warning (const gchar *format,
+ ...) G_GNUC_PRINTF(1, 2);
+void alertpanel_error (const gchar *format,
+ ...) G_GNUC_PRINTF(1, 2);
+
+#endif /* __ALERTPANEL_H__ */
diff --git a/src/base64.c b/src/base64.c
new file mode 100644
index 00000000..484cd286
--- /dev/null
+++ b/src/base64.c
@@ -0,0 +1,168 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "base64.h"
+
+static const gchar base64char[64] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+static const gchar base64val[128] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
+};
+
+#define BASE64VAL(c) (isascii((guchar)c) ? base64val[(gint)(c)] : -1)
+
+void base64_encode(gchar *out, const guchar *in, gint inlen)
+{
+ const guchar *inp = in;
+ gchar *outp = out;
+
+ while (inlen >= 3) {
+ *outp++ = base64char[(inp[0] >> 2) & 0x3f];
+ *outp++ = base64char[((inp[0] & 0x03) << 4) |
+ ((inp[1] >> 4) & 0x0f)];
+ *outp++ = base64char[((inp[1] & 0x0f) << 2) |
+ ((inp[2] >> 6) & 0x03)];
+ *outp++ = base64char[inp[2] & 0x3f];
+
+ inp += 3;
+ inlen -= 3;
+ }
+
+ if (inlen > 0) {
+ *outp++ = base64char[(inp[0] >> 2) & 0x3f];
+ if (inlen == 1) {
+ *outp++ = base64char[(inp[0] & 0x03) << 4];
+ *outp++ = '=';
+ } else {
+ *outp++ = base64char[((inp[0] & 0x03) << 4) |
+ ((inp[1] >> 4) & 0x0f)];
+ *outp++ = base64char[((inp[1] & 0x0f) << 2)];
+ }
+ *outp++ = '=';
+ }
+
+ *outp = '\0';
+}
+
+gint base64_decode(guchar *out, const gchar *in, gint inlen)
+{
+ const gchar *inp = in;
+ guchar *outp = out;
+ gchar buf[4];
+
+ if (inlen < 0)
+ inlen = G_MAXINT;
+
+ while (inlen >= 4 && *inp != '\0') {
+ buf[0] = *inp++;
+ inlen--;
+ if (BASE64VAL(buf[0]) == -1) break;
+
+ buf[1] = *inp++;
+ inlen--;
+ if (BASE64VAL(buf[1]) == -1) break;
+
+ buf[2] = *inp++;
+ inlen--;
+ if (buf[2] != '=' && BASE64VAL(buf[2]) == -1) break;
+
+ buf[3] = *inp++;
+ inlen--;
+ if (buf[3] != '=' && BASE64VAL(buf[3]) == -1) break;
+
+ *outp++ = ((BASE64VAL(buf[0]) << 2) & 0xfc) |
+ ((BASE64VAL(buf[1]) >> 4) & 0x03);
+ if (buf[2] != '=') {
+ *outp++ = ((BASE64VAL(buf[1]) & 0x0f) << 4) |
+ ((BASE64VAL(buf[2]) >> 2) & 0x0f);
+ if (buf[3] != '=') {
+ *outp++ = ((BASE64VAL(buf[2]) & 0x03) << 6) |
+ (BASE64VAL(buf[3]) & 0x3f);
+ }
+ }
+ }
+
+ return outp - out;
+}
+
+Base64Decoder *base64_decoder_new(void)
+{
+ Base64Decoder *decoder;
+
+ decoder = g_new0(Base64Decoder, 1);
+ return decoder;
+}
+
+void base64_decoder_free(Base64Decoder *decoder)
+{
+ g_free(decoder);
+}
+
+gint base64_decoder_decode(Base64Decoder *decoder,
+ const gchar *in, guchar *out)
+{
+ gint len, total_len = 0;
+ gint buf_len;
+ gchar buf[4];
+
+ g_return_val_if_fail(decoder != NULL, -1);
+ g_return_val_if_fail(in != NULL, -1);
+ g_return_val_if_fail(out != NULL, -1);
+
+ buf_len = decoder->buf_len;
+ memcpy(buf, decoder->buf, sizeof(buf));
+
+ for (;;) {
+ while (buf_len < 4) {
+ gchar c = *in;
+
+ in++;
+ if (c == '\0') break;
+ if (c == '\r' || c == '\n') continue;
+ if (c != '=' && BASE64VAL(c) == -1)
+ return -1;
+ buf[buf_len++] = c;
+ }
+ if (buf_len < 4 || buf[0] == '=' || buf[1] == '=') {
+ decoder->buf_len = buf_len;
+ memcpy(decoder->buf, buf, sizeof(buf));
+ return total_len;
+ }
+ len = base64_decode(out, buf, 4);
+ out += len;
+ total_len += len;
+ buf_len = 0;
+ if (len < 3) {
+ decoder->buf_len = 0;
+ return total_len;
+ }
+ }
+}
diff --git a/src/base64.h b/src/base64.h
new file mode 100644
index 00000000..4aa55758
--- /dev/null
+++ b/src/base64.h
@@ -0,0 +1,46 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __BASE64_H__
+#define __BASE64_H__
+
+#include <glib.h>
+
+typedef struct _Base64Decoder Base64Decoder;
+
+struct _Base64Decoder
+{
+ gint buf_len;
+ gchar buf[4];
+};
+
+void base64_encode (gchar *out,
+ const guchar *in,
+ gint inlen);
+gint base64_decode (guchar *out,
+ const gchar *in,
+ gint inlen);
+
+Base64Decoder *base64_decoder_new (void);
+void base64_decoder_free (Base64Decoder *decoder);
+gint base64_decoder_decode (Base64Decoder *decoder,
+ const gchar *in,
+ guchar *out);
+
+#endif /* __BASE64_H__ */
diff --git a/src/codeconv.c b/src/codeconv.c
new file mode 100644
index 00000000..7c5b449b
--- /dev/null
+++ b/src/codeconv.c
@@ -0,0 +1,1769 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#if HAVE_ICONV
+# include <iconv.h>
+#endif
+
+#include "intl.h"
+#include "codeconv.h"
+#include "unmime.h"
+#include "base64.h"
+#include "quoted-printable.h"
+#include "utils.h"
+#include "prefs_common.h"
+
+typedef enum
+{
+ JIS_ASCII,
+ JIS_KANJI,
+ JIS_HWKANA,
+ JIS_AUXKANJI
+} JISState;
+
+#define SUBST_CHAR '_'
+#define ESC '\033'
+
+#define iseuckanji(c) \
+ (((c) & 0xff) >= 0xa1 && ((c) & 0xff) <= 0xfe)
+#define iseuchwkana1(c) \
+ (((c) & 0xff) == 0x8e)
+#define iseuchwkana2(c) \
+ (((c) & 0xff) >= 0xa1 && ((c) & 0xff) <= 0xdf)
+#define iseucaux(c) \
+ (((c) & 0xff) == 0x8f)
+#define issjiskanji1(c) \
+ ((((c) & 0xff) >= 0x81 && ((c) & 0xff) <= 0x9f) || \
+ (((c) & 0xff) >= 0xe0 && ((c) & 0xff) <= 0xfc))
+#define issjiskanji2(c) \
+ ((((c) & 0xff) >= 0x40 && ((c) & 0xff) <= 0x7e) || \
+ (((c) & 0xff) >= 0x80 && ((c) & 0xff) <= 0xfc))
+#define issjishwkana(c) \
+ (((c) & 0xff) >= 0xa1 && ((c) & 0xff) <= 0xdf)
+
+#define K_IN() \
+ if (state != JIS_KANJI) { \
+ *out++ = ESC; \
+ *out++ = '$'; \
+ *out++ = 'B'; \
+ state = JIS_KANJI; \
+ }
+
+#define K_OUT() \
+ if (state != JIS_ASCII) { \
+ *out++ = ESC; \
+ *out++ = '('; \
+ *out++ = 'B'; \
+ state = JIS_ASCII; \
+ }
+
+#define HW_IN() \
+ if (state != JIS_HWKANA) { \
+ *out++ = ESC; \
+ *out++ = '('; \
+ *out++ = 'I'; \
+ state = JIS_HWKANA; \
+ }
+
+#define AUX_IN() \
+ if (state != JIS_AUXKANJI) { \
+ *out++ = ESC; \
+ *out++ = '$'; \
+ *out++ = '('; \
+ *out++ = 'D'; \
+ state = JIS_AUXKANJI; \
+ }
+
+void conv_jistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ const guchar *in = inbuf;
+ guchar *out = outbuf;
+ JISState state = JIS_ASCII;
+
+ while (*in != '\0') {
+ if (*in == ESC) {
+ in++;
+ if (*in == '$') {
+ if (*(in + 1) == '@' || *(in + 1) == 'B') {
+ state = JIS_KANJI;
+ in += 2;
+ } else if (*(in + 1) == '(' &&
+ *(in + 2) == 'D') {
+ state = JIS_AUXKANJI;
+ in += 3;
+ } else {
+ /* unknown escape sequence */
+ state = JIS_ASCII;
+ }
+ } else if (*in == '(') {
+ if (*(in + 1) == 'B' || *(in + 1) == 'J') {
+ state = JIS_ASCII;
+ in += 2;
+ } else if (*(in + 1) == 'I') {
+ state = JIS_HWKANA;
+ in += 2;
+ } else {
+ /* unknown escape sequence */
+ state = JIS_ASCII;
+ }
+ } else {
+ /* unknown escape sequence */
+ state = JIS_ASCII;
+ }
+ } else if (*in == 0x0e) {
+ state = JIS_HWKANA;
+ in++;
+ } else if (*in == 0x0f) {
+ state = JIS_ASCII;
+ in++;
+ } else {
+ switch (state) {
+ case JIS_ASCII:
+ *out++ = *in++;
+ break;
+ case JIS_KANJI:
+ *out++ = *in++ | 0x80;
+ if (*in == '\0') break;
+ *out++ = *in++ | 0x80;
+ break;
+ case JIS_HWKANA:
+ *out++ = 0x8e;
+ *out++ = *in++ | 0x80;
+ break;
+ case JIS_AUXKANJI:
+ *out++ = 0x8f;
+ *out++ = *in++ | 0x80;
+ if (*in == '\0') break;
+ *out++ = *in++ | 0x80;
+ break;
+ }
+ }
+ }
+
+ *out = '\0';
+}
+
+#define JIS_HWDAKUTEN 0x5e
+#define JIS_HWHANDAKUTEN 0x5f
+
+static gint conv_jis_hantozen(guchar *outbuf, guchar jis_code, guchar sound_sym)
+{
+ static guint16 h2z_tbl[] = {
+ /* 0x20 - 0x2f */
+ 0x0000, 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521,
+ 0x2523, 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543,
+ /* 0x30 - 0x3f */
+ 0x213c, 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b, 0x252d,
+ 0x252f, 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b, 0x253d,
+ /* 0x40 - 0x4f */
+ 0x253f, 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b, 0x254c,
+ 0x254d, 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b, 0x255e,
+ /* 0x50 - 0x5f */
+ 0x255f, 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569,
+ 0x256a, 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b, 0x212c
+ };
+
+ static guint16 dakuten_tbl[] = {
+ /* 0x30 - 0x3f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x252c, 0x252e,
+ 0x2530, 0x2532, 0x2534, 0x2536, 0x2538, 0x253a, 0x253c, 0x253e,
+ /* 0x40 - 0x4f */
+ 0x2540, 0x2542, 0x2545, 0x2547, 0x2549, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2550, 0x2553, 0x2556, 0x2559, 0x255c, 0x0000
+ };
+
+ static guint16 handakuten_tbl[] = {
+ /* 0x4a - 0x4e */
+ 0x2551, 0x2554, 0x2557, 0x255a, 0x255d
+ };
+
+ guint16 out_code;
+
+ jis_code &= 0x7f;
+ sound_sym &= 0x7f;
+
+ if (jis_code < 0x21 || jis_code > 0x5f)
+ return 0;
+
+ if (sound_sym == JIS_HWDAKUTEN &&
+ jis_code >= 0x36 && jis_code <= 0x4e) {
+ out_code = dakuten_tbl[jis_code - 0x30];
+ if (out_code != 0) {
+ *outbuf = out_code >> 8;
+ *(outbuf + 1) = out_code & 0xff;
+ return 2;
+ }
+ }
+
+ if (sound_sym == JIS_HWHANDAKUTEN &&
+ jis_code >= 0x4a && jis_code <= 0x4e) {
+ out_code = handakuten_tbl[jis_code - 0x4a];
+ *outbuf = out_code >> 8;
+ *(outbuf + 1) = out_code & 0xff;
+ return 2;
+ }
+
+ out_code = h2z_tbl[jis_code - 0x20];
+ *outbuf = out_code >> 8;
+ *(outbuf + 1) = out_code & 0xff;
+ return 1;
+}
+
+void conv_euctojis(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ const guchar *in = inbuf;
+ guchar *out = outbuf;
+ JISState state = JIS_ASCII;
+
+ while (*in != '\0') {
+ if (isascii(*in)) {
+ K_OUT();
+ *out++ = *in++;
+ } else if (iseuckanji(*in)) {
+ if (iseuckanji(*(in + 1))) {
+ K_IN();
+ *out++ = *in++ & 0x7f;
+ *out++ = *in++ & 0x7f;
+ } else {
+ K_OUT();
+ *out++ = SUBST_CHAR;
+ in++;
+ if (*in != '\0' && !isascii(*in)) {
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+ } else if (iseuchwkana1(*in)) {
+ if (iseuchwkana2(*(in + 1))) {
+ if (prefs_common.allow_jisx0201_kana) {
+ HW_IN();
+ in++;
+ *out++ = *in++ & 0x7f;
+ } else {
+ guchar jis_ch[2];
+ gint len;
+
+ if (iseuchwkana1(*(in + 2)) &&
+ iseuchwkana2(*(in + 3)))
+ len = conv_jis_hantozen
+ (jis_ch,
+ *(in + 1), *(in + 3));
+ else
+ len = conv_jis_hantozen
+ (jis_ch,
+ *(in + 1), '\0');
+ if (len == 0)
+ in += 2;
+ else {
+ K_IN();
+ in += len * 2;
+ *out++ = jis_ch[0];
+ *out++ = jis_ch[1];
+ }
+ }
+ } else {
+ K_OUT();
+ in++;
+ if (*in != '\0' && !isascii(*in)) {
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+ } else if (iseucaux(*in)) {
+ in++;
+ if (iseuckanji(*in) && iseuckanji(*(in + 1))) {
+ AUX_IN();
+ *out++ = *in++ & 0x7f;
+ *out++ = *in++ & 0x7f;
+ } else {
+ K_OUT();
+ if (*in != '\0' && !isascii(*in)) {
+ *out++ = SUBST_CHAR;
+ in++;
+ if (*in != '\0' && !isascii(*in)) {
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+ }
+ } else {
+ K_OUT();
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+
+ K_OUT();
+ *out = '\0';
+}
+
+void conv_sjistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ const guchar *in = inbuf;
+ guchar *out = outbuf;
+
+ while (*in != '\0') {
+ if (isascii(*in)) {
+ *out++ = *in++;
+ } else if (issjiskanji1(*in)) {
+ if (issjiskanji2(*(in + 1))) {
+ guchar out1 = *in;
+ guchar out2 = *(in + 1);
+ guchar row;
+
+ row = out1 < 0xa0 ? 0x70 : 0xb0;
+ if (out2 < 0x9f) {
+ out1 = (out1 - row) * 2 - 1;
+ out2 -= out2 > 0x7f ? 0x20 : 0x1f;
+ } else {
+ out1 = (out1 - row) * 2;
+ out2 -= 0x7e;
+ }
+
+ *out++ = out1 | 0x80;
+ *out++ = out2 | 0x80;
+ in += 2;
+ } else {
+ *out++ = SUBST_CHAR;
+ in++;
+ if (*in != '\0' && !isascii(*in)) {
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+ } else if (issjishwkana(*in)) {
+ *out++ = 0x8e;
+ *out++ = *in++;
+ } else {
+ *out++ = SUBST_CHAR;
+ in++;
+ }
+ }
+
+ *out = '\0';
+}
+
+void conv_jistoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+#if HAVE_ICONV
+ gchar *tmpstr;
+
+ tmpstr = conv_iconv_strdup(inbuf, CS_ISO_2022_JP, CS_UTF_8);
+ if (tmpstr) {
+ strncpy2(outbuf, tmpstr, outlen);
+ g_free(tmpstr);
+ } else
+ strncpy2(outbuf, inbuf, outlen);
+#else
+ strncpy2(outbuf, inbuf, outlen);
+#endif /* HAVE_ICONV */
+}
+
+void conv_sjistoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+#if HAVE_ICONV
+ gchar *tmpstr;
+
+ tmpstr = conv_iconv_strdup(inbuf, CS_SHIFT_JIS, CS_UTF_8);
+ if (tmpstr) {
+ strncpy2(outbuf, tmpstr, outlen);
+ g_free(tmpstr);
+ } else
+ strncpy2(outbuf, inbuf, outlen);
+#else
+ strncpy2(outbuf, inbuf, outlen);
+#endif /* HAVE_ICONV */
+}
+
+void conv_euctoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+#if HAVE_ICONV
+ gchar *tmpstr;
+
+ tmpstr = conv_iconv_strdup(inbuf, CS_EUC_JP, CS_UTF_8);
+ if (tmpstr) {
+ strncpy2(outbuf, tmpstr, outlen);
+ g_free(tmpstr);
+ } else
+ strncpy2(outbuf, inbuf, outlen);
+#else
+ strncpy2(outbuf, inbuf, outlen);
+#endif /* HAVE_ICONV */
+}
+
+void conv_anytoeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ switch (conv_guess_ja_encoding(inbuf)) {
+ case C_ISO_2022_JP:
+ conv_jistoeuc(outbuf, outlen, inbuf);
+ break;
+ case C_SHIFT_JIS:
+ conv_sjistoeuc(outbuf, outlen, inbuf);
+ break;
+ default:
+ strncpy2(outbuf, inbuf, outlen);
+ break;
+ }
+}
+
+void conv_anytoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ switch (conv_guess_ja_encoding(inbuf)) {
+ case C_ISO_2022_JP:
+ conv_jistoutf8(outbuf, outlen, inbuf);
+ break;
+ case C_SHIFT_JIS:
+ conv_sjistoutf8(outbuf, outlen, inbuf);
+ break;
+ case C_EUC_JP:
+ conv_euctoutf8(outbuf, outlen, inbuf);
+ break;
+ default:
+ strncpy2(outbuf, inbuf, outlen);
+ break;
+ }
+}
+
+void conv_anytojis(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ switch (conv_guess_ja_encoding(inbuf)) {
+ case C_EUC_JP:
+ conv_euctojis(outbuf, outlen, inbuf);
+ break;
+ default:
+ strncpy2(outbuf, inbuf, outlen);
+ break;
+ }
+}
+
+static gchar valid_eucjp_tbl[][96] = {
+ /* 0xa2a0 - 0xa2ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0 },
+
+ /* 0xa3a0 - 0xa3ff */
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
+
+ /* 0xa4a0 - 0xa4ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+
+ /* 0xa5a0 - 0xa5ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+
+ /* 0xa6a0 - 0xa6ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+
+ /* 0xa7a0 - 0xa7ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+
+ /* 0xa8a0 - 0xa8ff */
+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+};
+
+static gboolean isprintableeuckanji(guchar c1, guchar c2)
+{
+ if (c1 <= 0xa0 || c1 >= 0xf5)
+ return FALSE;
+ if (c2 <= 0xa0 || c2 == 0xff)
+ return FALSE;
+
+ if (c1 >= 0xa9 && c1 <= 0xaf)
+ return FALSE;
+
+ if (c1 >= 0xa2 && c1 <= 0xa8)
+ return (gboolean)valid_eucjp_tbl[c1 - 0xa2][c2 - 0xa0];
+
+ if (c1 == 0xcf) {
+ if (c2 >= 0xd4 && c2 <= 0xfe)
+ return FALSE;
+ } else if (c1 == 0xf4) {
+ if (c2 >= 0xa7 && c2 <= 0xfe)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void conv_unreadable_eucjp(gchar *str)
+{
+ register guchar *p = str;
+
+ while (*p != '\0') {
+ if (isascii(*p)) {
+ /* convert CR+LF -> LF */
+ if (*p == '\r' && *(p + 1) == '\n')
+ memmove(p, p + 1, strlen(p));
+ /* printable 7 bit code */
+ p++;
+ } else if (iseuckanji(*p)) {
+ if (isprintableeuckanji(*p, *(p + 1))) {
+ /* printable euc-jp code */
+ p += 2;
+ } else {
+ /* substitute unprintable code */
+ *p++ = SUBST_CHAR;
+ if (*p != '\0') {
+ if (isascii(*p))
+ p++;
+ else
+ *p++ = SUBST_CHAR;
+ }
+ }
+ } else if (iseuchwkana1(*p)) {
+ if (iseuchwkana2(*(p + 1)))
+ /* euc-jp hankaku kana */
+ p += 2;
+ else
+ *p++ = SUBST_CHAR;
+ } else if (iseucaux(*p)) {
+ if (iseuckanji(*(p + 1)) && iseuckanji(*(p + 2))) {
+ /* auxiliary kanji */
+ p += 3;
+ } else
+ *p++ = SUBST_CHAR;
+ } else
+ /* substitute unprintable 1 byte code */
+ *p++ = SUBST_CHAR;
+ }
+}
+
+void conv_unreadable_8bit(gchar *str)
+{
+ register guchar *p = str;
+
+ while (*p != '\0') {
+ /* convert CR+LF -> LF */
+ if (*p == '\r' && *(p + 1) == '\n')
+ memmove(p, p + 1, strlen(p));
+ else if (!isascii(*p)) *p = SUBST_CHAR;
+ p++;
+ }
+}
+
+void conv_unreadable_latin(gchar *str)
+{
+ register guchar *p = str;
+
+ while (*p != '\0') {
+ /* convert CR+LF -> LF */
+ if (*p == '\r' && *(p + 1) == '\n')
+ memmove(p, p + 1, strlen(p));
+ else if ((*p & 0xff) >= 0x7f && (*p & 0xff) <= 0x9f)
+ *p = SUBST_CHAR;
+ p++;
+ }
+}
+
+void conv_unreadable_locale(gchar *str)
+{
+ switch (conv_get_locale_charset()) {
+ case C_US_ASCII:
+ case C_ISO_8859_1:
+ case C_ISO_8859_2:
+ case C_ISO_8859_3:
+ case C_ISO_8859_4:
+ case C_ISO_8859_5:
+ case C_ISO_8859_6:
+ case C_ISO_8859_7:
+ case C_ISO_8859_8:
+ case C_ISO_8859_9:
+ case C_ISO_8859_10:
+ case C_ISO_8859_11:
+ case C_ISO_8859_13:
+ case C_ISO_8859_14:
+ case C_ISO_8859_15:
+ conv_unreadable_latin(str);
+ break;
+ case C_EUC_JP:
+ conv_unreadable_eucjp(str);
+ break;
+ default:
+ break;
+ }
+}
+
+#define NCV '\0'
+
+void conv_mb_alnum(gchar *str)
+{
+ static guchar char_tbl[] = {
+ /* 0xa0 - 0xaf */
+ NCV, ' ', NCV, NCV, ',', '.', NCV, ':',
+ ';', '?', '!', NCV, NCV, NCV, NCV, NCV,
+ /* 0xb0 - 0xbf */
+ NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV,
+ NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV,
+ /* 0xc0 - 0xcf */
+ NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV,
+ NCV, NCV, '(', ')', NCV, NCV, '[', ']',
+ /* 0xd0 - 0xdf */
+ '{', '}', NCV, NCV, NCV, NCV, NCV, NCV,
+ NCV, NCV, NCV, NCV, '+', '-', NCV, NCV,
+ /* 0xe0 - 0xef */
+ NCV, '=', NCV, '<', '>', NCV, NCV, NCV,
+ NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV
+ };
+
+ register guchar *p = str;
+ register gint len;
+
+ len = strlen(str);
+
+ while (len > 1) {
+ if (*p == 0xa3) {
+ register guchar ch = *(p + 1);
+
+ if (ch >= 0xb0 && ch <= 0xfa) {
+ /* [a-zA-Z] */
+ *p = ch & 0x7f;
+ p++;
+ len--;
+ memmove(p, p + 1, len);
+ len--;
+ } else {
+ p += 2;
+ len -= 2;
+ }
+ } else if (*p == 0xa1) {
+ register guchar ch = *(p + 1);
+
+ if (ch >= 0xa0 && ch <= 0xef &&
+ NCV != char_tbl[ch - 0xa0]) {
+ *p = char_tbl[ch - 0xa0];
+ p++;
+ len--;
+ memmove(p, p + 1, len);
+ len--;
+ } else {
+ p += 2;
+ len -= 2;
+ }
+ } else if (iseuckanji(*p)) {
+ p += 2;
+ len -= 2;
+ } else {
+ p++;
+ len--;
+ }
+ }
+}
+
+CharSet conv_guess_ja_encoding(const gchar *str)
+{
+ const guchar *p = str;
+ CharSet guessed = C_US_ASCII;
+
+ while (*p != '\0') {
+ if (*p == ESC && (*(p + 1) == '$' || *(p + 1) == '(')) {
+ if (guessed == C_US_ASCII)
+ return C_ISO_2022_JP;
+ p += 2;
+ } else if (isascii(*p)) {
+ p++;
+ } else if (iseuckanji(*p) && iseuckanji(*(p + 1))) {
+ if (*p >= 0xfd && *p <= 0xfe)
+ return C_EUC_JP;
+ else if (guessed == C_SHIFT_JIS) {
+ if ((issjiskanji1(*p) &&
+ issjiskanji2(*(p + 1))) ||
+ issjishwkana(*p))
+ guessed = C_SHIFT_JIS;
+ else
+ guessed = C_EUC_JP;
+ } else
+ guessed = C_EUC_JP;
+ p += 2;
+ } else if (issjiskanji1(*p) && issjiskanji2(*(p + 1))) {
+ if (iseuchwkana1(*p) && iseuchwkana2(*(p + 1)))
+ guessed = C_SHIFT_JIS;
+ else
+ return C_SHIFT_JIS;
+ p += 2;
+ } else if (issjishwkana(*p)) {
+ guessed = C_SHIFT_JIS;
+ p++;
+ } else {
+ p++;
+ }
+ }
+
+ return guessed;
+}
+
+void conv_jistodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ conv_jistoutf8(outbuf, outlen, inbuf);
+}
+
+void conv_sjistodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ conv_sjistoutf8(outbuf, outlen, inbuf);
+}
+
+void conv_euctodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ conv_euctoutf8(outbuf, outlen, inbuf);
+}
+
+void conv_anytodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ conv_anytoutf8(outbuf, outlen, inbuf);
+}
+
+void conv_ustodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ strncpy2(outbuf, inbuf, outlen);
+ conv_unreadable_8bit(outbuf);
+}
+
+void conv_latintodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ strncpy2(outbuf, inbuf, outlen);
+ //conv_unreadable_latin(outbuf);
+}
+
+void conv_localetodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+#if HAVE_ICONV
+ gchar *tmpstr;
+
+ tmpstr = conv_iconv_strdup(inbuf, conv_get_locale_charset_str(),
+ conv_get_internal_charset_str());
+ if (tmpstr) {
+ strncpy2(outbuf, tmpstr, outlen);
+ g_free(tmpstr);
+ } else
+ strncpy2(outbuf, inbuf, outlen);
+#else
+ strncpy2(outbuf, inbuf, outlen);
+#endif /* HAVE_ICONV */
+}
+
+void conv_noconv(gchar *outbuf, gint outlen, const gchar *inbuf)
+{
+ strncpy2(outbuf, inbuf, outlen);
+}
+
+CodeConverter *conv_code_converter_new(const gchar *src_charset)
+{
+ CodeConverter *conv;
+
+ conv = g_new0(CodeConverter, 1);
+ conv->code_conv_func = conv_get_code_conv_func(src_charset, NULL);
+ conv->charset_str = g_strdup(src_charset);
+ conv->charset = conv_get_charset_from_str(src_charset);
+
+ return conv;
+}
+
+void conv_code_converter_destroy(CodeConverter *conv)
+{
+ g_free(conv->charset_str);
+ g_free(conv);
+}
+
+gint conv_convert(CodeConverter *conv, gchar *outbuf, gint outlen,
+ const gchar *inbuf)
+{
+#if HAVE_ICONV
+ if (conv->code_conv_func != conv_noconv)
+ conv->code_conv_func(outbuf, outlen, inbuf);
+ else {
+ gchar *str;
+
+ str = conv_iconv_strdup(inbuf, conv->charset_str, NULL);
+ if (!str)
+ return -1;
+ else {
+ strncpy2(outbuf, str, outlen);
+ g_free(str);
+ }
+ }
+#else /* !HAVE_ICONV */
+ conv->code_conv_func(outbuf, outlen, inbuf);
+#endif
+
+ return 0;
+}
+
+gchar *conv_codeset_strdup(const gchar *inbuf,
+ const gchar *src_code, const gchar *dest_code)
+{
+ gchar *buf;
+ size_t len;
+ CodeConvFunc conv_func;
+
+ conv_func = conv_get_code_conv_func(src_code, dest_code);
+ if (conv_func != conv_noconv) {
+ len = (strlen(inbuf) + 1) * 3;
+ buf = g_malloc(len);
+ if (!buf) return NULL;
+
+ conv_func(buf, len, inbuf);
+ return g_realloc(buf, strlen(buf) + 1);
+ }
+
+#if HAVE_ICONV
+ return conv_iconv_strdup(inbuf, src_code, dest_code);
+#else
+ return g_strdup(inbuf);
+#endif /* HAVE_ICONV */
+}
+
+CodeConvFunc conv_get_code_conv_func(const gchar *src_charset_str,
+ const gchar *dest_charset_str)
+{
+ CodeConvFunc code_conv = conv_noconv;
+ CharSet src_charset;
+ CharSet dest_charset;
+
+ if (!src_charset_str)
+ src_charset = conv_get_locale_charset();
+ else
+ src_charset = conv_get_charset_from_str(src_charset_str);
+
+ /* auto detection mode */
+ if (!src_charset_str && !dest_charset_str) {
+ //if (src_charset == C_EUC_JP || src_charset == C_SHIFT_JIS)
+ // return conv_anytodisp;
+ //else
+ return conv_noconv;
+ }
+
+ dest_charset = conv_get_charset_from_str(dest_charset_str);
+
+ if (dest_charset == C_US_ASCII)
+ return conv_ustodisp;
+
+ switch (src_charset) {
+ case C_ISO_2022_JP:
+ case C_ISO_2022_JP_2:
+ case C_ISO_2022_JP_3:
+ if (dest_charset == C_AUTO)
+ code_conv = conv_jistodisp;
+ else if (dest_charset == C_EUC_JP)
+ code_conv = conv_jistoeuc;
+ else if (dest_charset == C_UTF_8)
+ code_conv = conv_jistoutf8;
+ break;
+ case C_US_ASCII:
+ if (dest_charset == C_AUTO)
+ code_conv = conv_ustodisp;
+ break;
+ case C_ISO_8859_1:
+ case C_ISO_8859_2:
+ case C_ISO_8859_3:
+ case C_ISO_8859_4:
+ case C_ISO_8859_5:
+ case C_ISO_8859_6:
+ case C_ISO_8859_7:
+ case C_ISO_8859_8:
+ case C_ISO_8859_9:
+ case C_ISO_8859_10:
+ case C_ISO_8859_11:
+ case C_ISO_8859_13:
+ case C_ISO_8859_14:
+ case C_ISO_8859_15:
+ break;
+ case C_SHIFT_JIS:
+ if (dest_charset == C_AUTO)
+ code_conv = conv_sjistodisp;
+ else if (dest_charset == C_EUC_JP)
+ code_conv = conv_sjistoeuc;
+ else if (dest_charset == C_UTF_8)
+ code_conv = conv_sjistoutf8;
+ break;
+ case C_EUC_JP:
+ if (dest_charset == C_AUTO)
+ code_conv = conv_euctodisp;
+ else if (dest_charset == C_ISO_2022_JP ||
+ dest_charset == C_ISO_2022_JP_2 ||
+ dest_charset == C_ISO_2022_JP_3)
+ code_conv = conv_euctojis;
+ else if (dest_charset == C_UTF_8)
+ code_conv = conv_euctoutf8;
+ break;
+ default:
+ break;
+ }
+
+ return code_conv;
+}
+
+#if HAVE_ICONV
+gchar *conv_iconv_strdup(const gchar *inbuf,
+ const gchar *src_code, const gchar *dest_code)
+{
+ iconv_t cd;
+ const gchar *inbuf_p;
+ gchar *outbuf;
+ gchar *outbuf_p;
+ size_t in_size;
+ size_t in_left;
+ size_t out_size;
+ size_t out_left;
+ size_t n_conv;
+ size_t len;
+
+ if (!src_code)
+ src_code = conv_get_outgoing_charset_str();
+ if (!dest_code)
+ dest_code = conv_get_locale_charset_str();
+
+ /* don't convert if current codeset is US-ASCII */
+ if (!strcasecmp(dest_code, CS_US_ASCII))
+ return g_strdup(inbuf);
+
+ /* don't convert if src and dest codeset are identical */
+ if (!strcasecmp(src_code, dest_code))
+ return g_strdup(inbuf);
+
+ cd = iconv_open(dest_code, src_code);
+ if (cd == (iconv_t)-1)
+ return NULL;
+
+ inbuf_p = inbuf;
+ in_size = strlen(inbuf);
+ in_left = in_size;
+ out_size = (in_size + 1) * 2;
+ outbuf = g_malloc(out_size);
+ outbuf_p = outbuf;
+ out_left = out_size;
+
+#define EXPAND_BUF() \
+{ \
+ len = outbuf_p - outbuf; \
+ out_size *= 2; \
+ outbuf = g_realloc(outbuf, out_size); \
+ outbuf_p = outbuf + len; \
+ out_left = out_size - len; \
+}
+
+ while ((n_conv = iconv(cd, (ICONV_CONST gchar **)&inbuf_p, &in_left,
+ &outbuf_p, &out_left)) == (size_t)-1) {
+ if (EILSEQ == errno) {
+ inbuf_p++;
+ in_left--;
+ if (out_left == 0) {
+ EXPAND_BUF();
+ }
+ *outbuf_p++ = SUBST_CHAR;
+ out_left--;
+ } else if (EINVAL == errno) {
+ break;
+ } else if (E2BIG == errno) {
+ EXPAND_BUF();
+ } else {
+ g_warning("conv_iconv_strdup(): %s\n",
+ g_strerror(errno));
+ break;
+ }
+ }
+
+ while ((n_conv = iconv(cd, NULL, NULL, &outbuf_p, &out_left)) ==
+ (size_t)-1) {
+ if (E2BIG == errno) {
+ EXPAND_BUF();
+ } else {
+ g_warning("conv_iconv_strdup(): %s\n",
+ g_strerror(errno));
+ break;
+ }
+ }
+
+#undef EXPAND_BUF
+
+ len = outbuf_p - outbuf;
+ outbuf = g_realloc(outbuf, len + 1);
+ outbuf[len] = '\0';
+
+ iconv_close(cd);
+
+ return outbuf;
+}
+#endif /* HAVE_ICONV */
+
+static const struct {
+ CharSet charset;
+ gchar *const name;
+} charsets[] = {
+ {C_US_ASCII, CS_US_ASCII},
+ {C_US_ASCII, CS_ANSI_X3_4_1968},
+ {C_UTF_8, CS_UTF_8},
+ {C_UTF_7, CS_UTF_7},
+ {C_ISO_8859_1, CS_ISO_8859_1},
+ {C_ISO_8859_2, CS_ISO_8859_2},
+ {C_ISO_8859_3, CS_ISO_8859_3},
+ {C_ISO_8859_4, CS_ISO_8859_4},
+ {C_ISO_8859_5, CS_ISO_8859_5},
+ {C_ISO_8859_6, CS_ISO_8859_6},
+ {C_ISO_8859_7, CS_ISO_8859_7},
+ {C_ISO_8859_8, CS_ISO_8859_8},
+ {C_ISO_8859_9, CS_ISO_8859_9},
+ {C_ISO_8859_10, CS_ISO_8859_10},
+ {C_ISO_8859_11, CS_ISO_8859_11},
+ {C_ISO_8859_13, CS_ISO_8859_13},
+ {C_ISO_8859_14, CS_ISO_8859_14},
+ {C_ISO_8859_15, CS_ISO_8859_15},
+ {C_BALTIC, CS_BALTIC},
+ {C_CP1250, CS_CP1250},
+ {C_CP1251, CS_CP1251},
+ {C_CP1252, CS_CP1252},
+ {C_CP1253, CS_CP1253},
+ {C_CP1254, CS_CP1254},
+ {C_CP1255, CS_CP1255},
+ {C_CP1256, CS_CP1256},
+ {C_CP1257, CS_CP1257},
+ {C_CP1258, CS_CP1258},
+ {C_WINDOWS_1250, CS_WINDOWS_1250},
+ {C_WINDOWS_1251, CS_WINDOWS_1251},
+ {C_WINDOWS_1252, CS_WINDOWS_1252},
+ {C_WINDOWS_1253, CS_WINDOWS_1253},
+ {C_WINDOWS_1254, CS_WINDOWS_1254},
+ {C_WINDOWS_1255, CS_WINDOWS_1255},
+ {C_WINDOWS_1256, CS_WINDOWS_1256},
+ {C_WINDOWS_1257, CS_WINDOWS_1257},
+ {C_WINDOWS_1258, CS_WINDOWS_1258},
+ {C_KOI8_R, CS_KOI8_R},
+ {C_KOI8_T, CS_KOI8_T},
+ {C_KOI8_U, CS_KOI8_U},
+ {C_ISO_2022_JP, CS_ISO_2022_JP},
+ {C_ISO_2022_JP_2, CS_ISO_2022_JP_2},
+ {C_ISO_2022_JP_3, CS_ISO_2022_JP_3},
+ {C_EUC_JP, CS_EUC_JP},
+ {C_EUC_JP, CS_EUCJP},
+ {C_SHIFT_JIS, CS_SHIFT_JIS},
+ {C_SHIFT_JIS, CS_SHIFT__JIS},
+ {C_SHIFT_JIS, CS_SJIS},
+ {C_ISO_2022_KR, CS_ISO_2022_KR},
+ {C_EUC_KR, CS_EUC_KR},
+ {C_ISO_2022_CN, CS_ISO_2022_CN},
+ {C_EUC_CN, CS_EUC_CN},
+ {C_GB2312, CS_GB2312},
+ {C_GBK, CS_GBK},
+ {C_EUC_TW, CS_EUC_TW},
+ {C_BIG5, CS_BIG5},
+ {C_BIG5_HKSCS, CS_BIG5_HKSCS},
+ {C_TIS_620, CS_TIS_620},
+ {C_WINDOWS_874, CS_WINDOWS_874},
+ {C_GEORGIAN_PS, CS_GEORGIAN_PS},
+ {C_TCVN5712_1, CS_TCVN5712_1},
+};
+
+static const struct {
+ gchar *const locale;
+ CharSet charset;
+ CharSet out_charset;
+} locale_table[] = {
+ {"ja_JP.eucJP" , C_EUC_JP , C_ISO_2022_JP},
+ {"ja_JP.EUC-JP" , C_EUC_JP , C_ISO_2022_JP},
+ {"ja_JP.EUC" , C_EUC_JP , C_ISO_2022_JP},
+ {"ja_JP.ujis" , C_EUC_JP , C_ISO_2022_JP},
+ {"ja_JP.SJIS" , C_SHIFT_JIS , C_ISO_2022_JP},
+ {"ja_JP.JIS" , C_ISO_2022_JP , C_ISO_2022_JP},
+ {"ja_JP" , C_EUC_JP , C_ISO_2022_JP},
+ {"ko_KR.EUC-KR" , C_EUC_KR , C_EUC_KR},
+ {"ko_KR" , C_EUC_KR , C_EUC_KR},
+ {"zh_CN.GB2312" , C_GB2312 , C_GB2312},
+ {"zh_CN.GBK" , C_GBK , C_GB2312},
+ {"zh_CN" , C_GB2312 , C_GB2312},
+ {"zh_HK" , C_BIG5_HKSCS , C_BIG5_HKSCS},
+ {"zh_TW.eucTW" , C_EUC_TW , C_BIG5},
+ {"zh_TW.EUC-TW" , C_EUC_TW , C_BIG5},
+ {"zh_TW.Big5" , C_BIG5 , C_BIG5},
+ {"zh_TW" , C_BIG5 , C_BIG5},
+
+ {"ru_RU.KOI8-R" , C_KOI8_R , C_KOI8_R},
+ {"ru_RU.KOI8R" , C_KOI8_R , C_KOI8_R},
+ {"ru_RU.CP1251" , C_WINDOWS_1251, C_KOI8_R},
+ {"ru_RU" , C_ISO_8859_5 , C_KOI8_R},
+ {"tg_TJ" , C_KOI8_T , C_KOI8_T},
+ {"ru_UA" , C_KOI8_U , C_KOI8_U},
+ {"uk_UA.CP1251" , C_WINDOWS_1251, C_KOI8_U},
+ {"uk_UA" , C_KOI8_U , C_KOI8_U},
+
+ {"be_BY" , C_WINDOWS_1251, C_WINDOWS_1251},
+ {"bg_BG" , C_WINDOWS_1251, C_WINDOWS_1251},
+
+ {"yi_US" , C_WINDOWS_1255, C_WINDOWS_1255},
+
+ {"af_ZA" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"br_FR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"ca_ES" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"da_DK" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"de_AT" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"de_BE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"de_CH" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"de_DE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"de_LU" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_AU" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_BW" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_CA" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_DK" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_GB" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_HK" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_IE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_NZ" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_PH" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_SG" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_US" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_ZA" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"en_ZW" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_AR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_BO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_CL" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_CO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_CR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_DO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_EC" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_ES" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_GT" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_HN" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_MX" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_NI" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_PA" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_PE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_PR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_PY" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_SV" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_US" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_UY" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"es_VE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"et_EE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"eu_ES" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fi_FI" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fo_FO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fr_BE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fr_CA" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fr_CH" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fr_FR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"fr_LU" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"ga_IE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"gl_ES" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"gv_GB" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"id_ID" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"is_IS" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"it_CH" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"it_IT" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"kl_GL" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"kw_GB" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"ms_MY" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"nl_BE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"nl_NL" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"nn_NO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"no_NO" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"oc_FR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"pt_BR" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"pt_PT" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"sq_AL" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"sv_FI" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"sv_SE" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"tl_PH" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"uz_UZ" , C_ISO_8859_1 , C_ISO_8859_1},
+ {"wa_BE" , C_ISO_8859_1 , C_ISO_8859_1},
+
+ {"bs_BA" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"cs_CZ" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"hr_HR" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"hu_HU" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"pl_PL" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"ro_RO" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"sk_SK" , C_ISO_8859_2 , C_ISO_8859_2},
+ {"sl_SI" , C_ISO_8859_2 , C_ISO_8859_2},
+
+ {"sr_YU@cyrillic" , C_ISO_8859_5 , C_ISO_8859_5},
+ {"sr_YU" , C_ISO_8859_2 , C_ISO_8859_2},
+
+ {"mt_MT" , C_ISO_8859_3 , C_ISO_8859_3},
+
+ {"lt_LT.iso88594" , C_ISO_8859_4 , C_ISO_8859_4},
+ {"lt_LT.ISO8859-4" , C_ISO_8859_4 , C_ISO_8859_4},
+ {"lt_LT.ISO_8859-4" , C_ISO_8859_4 , C_ISO_8859_4},
+ {"lt_LT" , C_ISO_8859_13 , C_ISO_8859_13},
+
+ {"mk_MK" , C_ISO_8859_5 , C_ISO_8859_5},
+
+ {"ar_AE" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_BH" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_DZ" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_EG" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_IQ" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_JO" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_KW" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_LB" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_LY" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_MA" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_OM" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_QA" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_SA" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_SD" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_SY" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_TN" , C_ISO_8859_6 , C_ISO_8859_6},
+ {"ar_YE" , C_ISO_8859_6 , C_ISO_8859_6},
+
+ {"el_GR" , C_ISO_8859_7 , C_ISO_8859_7},
+ {"he_IL" , C_ISO_8859_8 , C_ISO_8859_8},
+ {"iw_IL" , C_ISO_8859_8 , C_ISO_8859_8},
+ {"tr_TR" , C_ISO_8859_9 , C_ISO_8859_9},
+
+ {"lv_LV" , C_ISO_8859_13 , C_ISO_8859_13},
+ {"mi_NZ" , C_ISO_8859_13 , C_ISO_8859_13},
+
+ {"cy_GB" , C_ISO_8859_14 , C_ISO_8859_14},
+
+ {"ar_IN" , C_UTF_8 , C_UTF_8},
+ {"en_IN" , C_UTF_8 , C_UTF_8},
+ {"se_NO" , C_UTF_8 , C_UTF_8},
+ {"ta_IN" , C_UTF_8 , C_UTF_8},
+ {"te_IN" , C_UTF_8 , C_UTF_8},
+ {"ur_PK" , C_UTF_8 , C_UTF_8},
+
+ {"th_TH" , C_TIS_620 , C_TIS_620},
+ /* {"th_TH" , C_WINDOWS_874}, */
+ /* {"th_TH" , C_ISO_8859_11}, */
+
+ {"ka_GE" , C_GEORGIAN_PS , C_GEORGIAN_PS},
+ {"vi_VN.TCVN" , C_TCVN5712_1 , C_TCVN5712_1},
+
+ {"C" , C_US_ASCII , C_US_ASCII},
+ {"POSIX" , C_US_ASCII , C_US_ASCII},
+ {"ANSI_X3.4-1968" , C_US_ASCII , C_US_ASCII},
+};
+
+static GHashTable *conv_get_charset_to_str_table(void)
+{
+ static GHashTable *table;
+ gint i;
+
+ if (table)
+ return table;
+
+ table = g_hash_table_new(NULL, g_direct_equal);
+
+ for (i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++) {
+ if (g_hash_table_lookup(table, GUINT_TO_POINTER(charsets[i].charset))
+ == NULL) {
+ g_hash_table_insert
+ (table, GUINT_TO_POINTER(charsets[i].charset),
+ charsets[i].name);
+ }
+ }
+
+ return table;
+}
+
+static GHashTable *conv_get_charset_from_str_table(void)
+{
+ static GHashTable *table;
+ gint i;
+
+ if (table)
+ return table;
+
+ table = g_hash_table_new(str_case_hash, str_case_equal);
+
+ for (i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++) {
+ g_hash_table_insert(table, charsets[i].name,
+ GUINT_TO_POINTER(charsets[i].charset));
+ }
+
+ return table;
+}
+
+const gchar *conv_get_charset_str(CharSet charset)
+{
+ GHashTable *table;
+
+ table = conv_get_charset_to_str_table();
+ return g_hash_table_lookup(table, GUINT_TO_POINTER(charset));
+}
+
+CharSet conv_get_charset_from_str(const gchar *charset)
+{
+ GHashTable *table;
+
+ if (!charset) return C_AUTO;
+
+ table = conv_get_charset_from_str_table();
+ return GPOINTER_TO_UINT(g_hash_table_lookup(table, charset));
+}
+
+CharSet conv_get_locale_charset(void)
+{
+ static CharSet cur_charset = -1;
+ const gchar *cur_locale;
+ const gchar *p;
+ gint i;
+
+ if (cur_charset != -1)
+ return cur_charset;
+
+ cur_locale = conv_get_current_locale();
+ if (!cur_locale) {
+ cur_charset = C_US_ASCII;
+ return cur_charset;
+ }
+
+ if (strcasestr(cur_locale, "UTF-8")) {
+ cur_charset = C_UTF_8;
+ return cur_charset;
+ }
+
+ if ((p = strcasestr(cur_locale, "@euro")) && p[5] == '\0') {
+ cur_charset = C_ISO_8859_15;
+ return cur_charset;
+ }
+
+ for (i = 0; i < sizeof(locale_table) / sizeof(locale_table[0]); i++) {
+ const gchar *p;
+
+ /* "ja_JP.EUC" matches with "ja_JP.eucJP", "ja_JP.EUC" and
+ "ja_JP". "ja_JP" matches with "ja_JP.xxxx" and "ja" */
+ if (!strncasecmp(cur_locale, locale_table[i].locale,
+ strlen(locale_table[i].locale))) {
+ cur_charset = locale_table[i].charset;
+ return cur_charset;
+ } else if ((p = strchr(locale_table[i].locale, '_')) &&
+ !strchr(p + 1, '.')) {
+ if (strlen(cur_locale) == 2 &&
+ !strncasecmp(cur_locale, locale_table[i].locale, 2)) {
+ cur_charset = locale_table[i].charset;
+ return cur_charset;
+ }
+ }
+ }
+
+ cur_charset = C_AUTO;
+ return cur_charset;
+}
+
+const gchar *conv_get_locale_charset_str(void)
+{
+ static const gchar *codeset = NULL;
+
+ if (!codeset)
+ codeset = conv_get_charset_str(conv_get_locale_charset());
+
+ return codeset ? codeset : CS_UTF_8;
+}
+
+CharSet conv_get_internal_charset(void)
+{
+ return C_UTF_8;
+}
+
+const gchar *conv_get_internal_charset_str(void)
+{
+ return CS_UTF_8;
+}
+
+CharSet conv_get_outgoing_charset(void)
+{
+ static CharSet out_charset = -1;
+ const gchar *cur_locale;
+ const gchar *p;
+ gint i;
+
+ if (out_charset != -1)
+ return out_charset;
+
+ cur_locale = conv_get_current_locale();
+ if (!cur_locale) {
+ out_charset = C_AUTO;
+ return out_charset;
+ }
+
+ if ((p = strcasestr(cur_locale, "@euro")) && p[5] == '\0') {
+ out_charset = C_ISO_8859_15;
+ return out_charset;
+ }
+
+ for (i = 0; i < sizeof(locale_table) / sizeof(locale_table[0]); i++) {
+ const gchar *p;
+
+ if (!strncasecmp(cur_locale, locale_table[i].locale,
+ strlen(locale_table[i].locale))) {
+ out_charset = locale_table[i].out_charset;
+ break;
+ } else if ((p = strchr(locale_table[i].locale, '_')) &&
+ !strchr(p + 1, '.')) {
+ if (strlen(cur_locale) == 2 &&
+ !strncasecmp(cur_locale, locale_table[i].locale, 2)) {
+ out_charset = locale_table[i].out_charset;
+ break;
+ }
+ }
+ }
+
+#if !HAVE_ICONV
+ /* encoding conversion without iconv() is only supported
+ on Japanese locale for now */
+ if (out_charset == C_ISO_2022_JP)
+ return out_charset;
+ else
+ return conv_get_locale_charset();
+#endif
+
+ return out_charset;
+}
+
+const gchar *conv_get_outgoing_charset_str(void)
+{
+ CharSet out_charset;
+ const gchar *str;
+
+ if (prefs_common.outgoing_charset) {
+ if (!isalpha((guchar)prefs_common.outgoing_charset[0])) {
+ g_free(prefs_common.outgoing_charset);
+ prefs_common.outgoing_charset = g_strdup(CS_AUTO);
+ } else if (strcmp(prefs_common.outgoing_charset, CS_AUTO) != 0)
+ return prefs_common.outgoing_charset;
+ }
+
+ out_charset = conv_get_outgoing_charset();
+ str = conv_get_charset_str(out_charset);
+
+ return str ? str : CS_UTF_8;
+}
+
+gboolean conv_is_multibyte_encoding(CharSet encoding)
+{
+ switch (encoding) {
+ case C_EUC_JP:
+ case C_EUC_KR:
+ case C_EUC_TW:
+ case C_EUC_CN:
+ case C_ISO_2022_JP:
+ case C_ISO_2022_JP_2:
+ case C_ISO_2022_JP_3:
+ case C_ISO_2022_KR:
+ case C_ISO_2022_CN:
+ case C_SHIFT_JIS:
+ case C_GB2312:
+ case C_BIG5:
+ case C_UTF_8:
+ case C_UTF_7:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+const gchar *conv_get_current_locale(void)
+{
+ const gchar *cur_locale;
+
+ cur_locale = g_getenv("LC_ALL");
+ if (!cur_locale) cur_locale = g_getenv("LC_CTYPE");
+ if (!cur_locale) cur_locale = g_getenv("LANG");
+ if (!cur_locale) cur_locale = setlocale(LC_CTYPE, NULL);
+
+ debug_print("current locale: %s\n",
+ cur_locale ? cur_locale : "(none)");
+
+ return cur_locale;
+}
+
+void conv_unmime_header_overwrite(gchar *str)
+{
+ gchar *buf;
+ gint buflen;
+ CharSet cur_charset;
+
+ cur_charset = conv_get_locale_charset();
+
+ if (cur_charset == C_EUC_JP) {
+ buflen = strlen(str) * 2 + 1;
+ Xalloca(buf, buflen, return);
+ conv_anytodisp(buf, buflen, str);
+ unmime_header(str, buf);
+ } else {
+ buflen = strlen(str) + 1;
+ Xalloca(buf, buflen, return);
+ unmime_header(buf, str);
+ strncpy2(str, buf, buflen);
+ }
+}
+
+void conv_unmime_header(gchar *outbuf, gint outlen, const gchar *str,
+ const gchar *charset)
+{
+ CharSet cur_charset;
+
+ cur_charset = conv_get_locale_charset();
+
+ if (cur_charset == C_EUC_JP) {
+ gchar *buf;
+ gint buflen;
+
+ buflen = strlen(str) * 2 + 1;
+ Xalloca(buf, buflen, return);
+ conv_anytodisp(buf, buflen, str);
+ unmime_header(outbuf, buf);
+ } else
+ unmime_header(outbuf, str);
+}
+
+#define MAX_LINELEN 76
+#define MAX_HARD_LINELEN 996
+#define MIMESEP_BEGIN "=?"
+#define MIMESEP_END "?="
+
+#define B64LEN(len) ((len) / 3 * 4 + ((len) % 3 ? 4 : 0))
+
+#define LBREAK_IF_REQUIRED(cond, is_plain_text) \
+{ \
+ if (len - (destp - (guchar *)dest) < MAX_LINELEN + 2) { \
+ *destp = '\0'; \
+ return; \
+ } \
+ \
+ if ((cond) && *srcp) { \
+ if (destp > (guchar *)dest && left < MAX_LINELEN - 1) { \
+ if (isspace(*(destp - 1))) \
+ destp--; \
+ else if (is_plain_text && isspace(*srcp)) \
+ srcp++; \
+ if (*srcp) { \
+ *destp++ = '\n'; \
+ *destp++ = ' '; \
+ left = MAX_LINELEN - 1; \
+ } \
+ } \
+ } \
+}
+
+void conv_encode_header(gchar *dest, gint len, const gchar *src,
+ gint header_len, gboolean addr_field)
+{
+ const gchar *cur_encoding;
+ const gchar *out_encoding;
+ gint mimestr_len;
+ gchar *mimesep_enc;
+ gint left;
+ const guchar *srcp = src;
+ guchar *destp = dest;
+ gboolean use_base64;
+
+ if (MB_CUR_MAX > 1) {
+ use_base64 = TRUE;
+ mimesep_enc = "?B?";
+ } else {
+ use_base64 = FALSE;
+ mimesep_enc = "?Q?";
+ }
+
+ cur_encoding = conv_get_locale_charset_str();
+ if (!strcmp(cur_encoding, CS_US_ASCII))
+ cur_encoding = CS_ISO_8859_1;
+ out_encoding = conv_get_outgoing_charset_str();
+ if (!strcmp(out_encoding, CS_US_ASCII))
+ out_encoding = CS_ISO_8859_1;
+
+ mimestr_len = strlen(MIMESEP_BEGIN) + strlen(out_encoding) +
+ strlen(mimesep_enc) + strlen(MIMESEP_END);
+
+ left = MAX_LINELEN - header_len;
+
+ while (*srcp) {
+ LBREAK_IF_REQUIRED(left <= 0, TRUE);
+
+ while (isspace(*srcp)) {
+ *destp++ = *srcp++;
+ left--;
+ LBREAK_IF_REQUIRED(left <= 0, TRUE);
+ }
+
+ /* output as it is if the next word is ASCII string */
+ if (!is_next_nonascii(srcp)) {
+ gint word_len;
+
+ word_len = get_next_word_len(srcp);
+ LBREAK_IF_REQUIRED(left < word_len, TRUE);
+ while (word_len > 0) {
+ LBREAK_IF_REQUIRED(left + (MAX_HARD_LINELEN - MAX_LINELEN) <= 0, TRUE)
+ *destp++ = *srcp++;
+ left--;
+ word_len--;
+ }
+
+ continue;
+ }
+
+ /* don't include parentheses in encoded strings */
+ if (addr_field && (*srcp == '(' || *srcp == ')')) {
+ LBREAK_IF_REQUIRED(left < 2, FALSE);
+ *destp++ = *srcp++;
+ left--;
+ }
+
+ while (1) {
+ gint mb_len = 0;
+ gint cur_len = 0;
+ gchar *part_str;
+ gchar *out_str;
+ gchar *enc_str;
+ const guchar *p = srcp;
+ gint out_str_len;
+ gint out_enc_str_len;
+ gint mime_block_len;
+ gboolean cont = FALSE;
+
+ while (*p != '\0') {
+ if (isspace(*p) && !is_next_nonascii(p + 1))
+ break;
+ /* don't include parentheses in encoded
+ strings */
+ if (addr_field && (*p == '(' || *p == ')'))
+ break;
+
+ if (MB_CUR_MAX > 1) {
+ mb_len = mblen(p, MB_CUR_MAX);
+ if (mb_len < 0) {
+ g_warning("conv_encode_header(): invalid multibyte character encountered\n");
+ mb_len = 1;
+ }
+ } else
+ mb_len = 1;
+
+ Xstrndup_a(part_str, srcp, cur_len + mb_len, );
+ out_str = conv_codeset_strdup
+ (part_str, cur_encoding, out_encoding);
+ if (!out_str) {
+ g_warning("conv_encode_header(): code conversion failed\n");
+ conv_unreadable_8bit(part_str);
+ out_str = g_strdup(part_str);
+ }
+ out_str_len = strlen(out_str);
+
+ if (use_base64)
+ out_enc_str_len = B64LEN(out_str_len);
+ else
+ out_enc_str_len =
+ qp_get_q_encoding_len(out_str);
+
+ g_free(out_str);
+
+ if (mimestr_len + out_enc_str_len <= left) {
+ cur_len += mb_len;
+ p += mb_len;
+ } else if (cur_len == 0) {
+ LBREAK_IF_REQUIRED(1, FALSE);
+ continue;
+ } else {
+ cont = TRUE;
+ break;
+ }
+ }
+
+ if (cur_len > 0) {
+ Xstrndup_a(part_str, srcp, cur_len, );
+ out_str = conv_codeset_strdup
+ (part_str, cur_encoding, out_encoding);
+ if (!out_str) {
+ g_warning("conv_encode_header(): code conversion failed\n");
+ conv_unreadable_8bit(part_str);
+ out_str = g_strdup(part_str);
+ }
+ out_str_len = strlen(out_str);
+
+ if (use_base64)
+ out_enc_str_len = B64LEN(out_str_len);
+ else
+ out_enc_str_len =
+ qp_get_q_encoding_len(out_str);
+
+ Xalloca(enc_str, out_enc_str_len + 1, );
+ if (use_base64)
+ base64_encode(enc_str, out_str, out_str_len);
+ else
+ qp_q_encode(enc_str, out_str);
+
+ g_free(out_str);
+
+ /* output MIME-encoded string block */
+ mime_block_len = mimestr_len + strlen(enc_str);
+ g_snprintf(destp, mime_block_len + 1,
+ MIMESEP_BEGIN "%s%s%s" MIMESEP_END,
+ out_encoding, mimesep_enc, enc_str);
+ destp += mime_block_len;
+ srcp += cur_len;
+
+ left -= mime_block_len;
+ }
+
+ LBREAK_IF_REQUIRED(cont, FALSE);
+
+ if (cur_len == 0)
+ break;
+ }
+ }
+
+ *destp = '\0';
+}
+
+#undef LBREAK_IF_REQUIRED
diff --git a/src/codeconv.h b/src/codeconv.h
new file mode 100644
index 00000000..21539fd6
--- /dev/null
+++ b/src/codeconv.h
@@ -0,0 +1,238 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __CODECONV_H__
+#define __CODECONV_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+typedef struct _CodeConverter CodeConverter;
+
+typedef enum
+{
+ C_AUTO,
+ C_US_ASCII,
+ C_UTF_8,
+ C_UTF_7,
+ C_ISO_8859_1,
+ C_ISO_8859_2,
+ C_ISO_8859_3,
+ C_ISO_8859_4,
+ C_ISO_8859_5,
+ C_ISO_8859_6,
+ C_ISO_8859_7,
+ C_ISO_8859_8,
+ C_ISO_8859_9,
+ C_ISO_8859_10,
+ C_ISO_8859_11,
+ C_ISO_8859_13,
+ C_ISO_8859_14,
+ C_ISO_8859_15,
+ C_BALTIC,
+ C_CP1250,
+ C_CP1251,
+ C_CP1252,
+ C_CP1253,
+ C_CP1254,
+ C_CP1255,
+ C_CP1256,
+ C_CP1257,
+ C_CP1258,
+ C_WINDOWS_1250,
+ C_WINDOWS_1251,
+ C_WINDOWS_1252,
+ C_WINDOWS_1253,
+ C_WINDOWS_1254,
+ C_WINDOWS_1255,
+ C_WINDOWS_1256,
+ C_WINDOWS_1257,
+ C_WINDOWS_1258,
+ C_KOI8_R,
+ C_KOI8_T,
+ C_KOI8_U,
+ C_ISO_2022_JP,
+ C_ISO_2022_JP_2,
+ C_ISO_2022_JP_3,
+ C_EUC_JP,
+ C_SHIFT_JIS,
+ C_ISO_2022_KR,
+ C_EUC_KR,
+ C_ISO_2022_CN,
+ C_EUC_CN,
+ C_GB2312,
+ C_GBK,
+ C_EUC_TW,
+ C_BIG5,
+ C_BIG5_HKSCS,
+ C_TIS_620,
+ C_WINDOWS_874,
+ C_GEORGIAN_PS,
+ C_TCVN5712_1
+} CharSet;
+
+typedef void (*CodeConvFunc) (gchar *outbuf, gint outlen, const gchar *inbuf);
+
+struct _CodeConverter
+{
+ CodeConvFunc code_conv_func;
+ gchar *charset_str;
+ CharSet charset;
+};
+
+#define CS_AUTO "AUTO"
+#define CS_US_ASCII "US-ASCII"
+#define CS_ANSI_X3_4_1968 "ANSI_X3.4-1968"
+#define CS_UTF_8 "UTF-8"
+#define CS_UTF_7 "UTF-7"
+#define CS_ISO_8859_1 "ISO-8859-1"
+#define CS_ISO_8859_2 "ISO-8859-2"
+#define CS_ISO_8859_3 "ISO-8859-3"
+#define CS_ISO_8859_4 "ISO-8859-4"
+#define CS_ISO_8859_5 "ISO-8859-5"
+#define CS_ISO_8859_6 "ISO-8859-6"
+#define CS_ISO_8859_7 "ISO-8859-7"
+#define CS_ISO_8859_8 "ISO-8859-8"
+#define CS_ISO_8859_9 "ISO-8859-9"
+#define CS_ISO_8859_10 "ISO-8859-10"
+#define CS_ISO_8859_11 "ISO-8859-11"
+#define CS_ISO_8859_13 "ISO-8859-13"
+#define CS_ISO_8859_14 "ISO-8859-14"
+#define CS_ISO_8859_15 "ISO-8859-15"
+#define CS_BALTIC "BALTIC"
+#define CS_CP1250 "CP1250"
+#define CS_CP1251 "CP1251"
+#define CS_CP1252 "CP1252"
+#define CS_CP1253 "CP1253"
+#define CS_CP1254 "CP1254"
+#define CS_CP1255 "CP1255"
+#define CS_CP1256 "CP1256"
+#define CS_CP1257 "CP1257"
+#define CS_CP1258 "CP1258"
+#define CS_WINDOWS_1250 "Windows-1250"
+#define CS_WINDOWS_1251 "Windows-1251"
+#define CS_WINDOWS_1252 "Windows-1252"
+#define CS_WINDOWS_1253 "Windows-1253"
+#define CS_WINDOWS_1254 "Windows-1254"
+#define CS_WINDOWS_1255 "Windows-1255"
+#define CS_WINDOWS_1256 "Windows-1256"
+#define CS_WINDOWS_1257 "Windows-1257"
+#define CS_WINDOWS_1258 "Windows-1258"
+#define CS_KOI8_R "KOI8-R"
+#define CS_KOI8_T "KOI8-T"
+#define CS_KOI8_U "KOI8-U"
+#define CS_ISO_2022_JP "ISO-2022-JP"
+#define CS_ISO_2022_JP_2 "ISO-2022-JP-2"
+#define CS_ISO_2022_JP_3 "ISO-2022-JP-3"
+#define CS_EUC_JP "EUC-JP"
+#define CS_EUCJP "EUCJP"
+#define CS_SHIFT_JIS "Shift_JIS"
+#define CS_SHIFT__JIS "SHIFT-JIS"
+#define CS_SJIS "SJIS"
+#define CS_X_SJIS "X-SJIS"
+#define CS_ISO_2022_KR "ISO-2022-KR"
+#define CS_EUC_KR "EUC-KR"
+#define CS_ISO_2022_CN "ISO-2022-CN"
+#define CS_EUC_CN "EUC-CN"
+#define CS_GB2312 "GB2312"
+#define CS_GBK "GBK"
+#define CS_EUC_TW "EUC-TW"
+#define CS_BIG5 "Big5"
+#define CS_BIG5_HKSCS "BIG5-HKSCS"
+#define CS_TIS_620 "TIS-620"
+#define CS_WINDOWS_874 "Windows-874"
+#define CS_GEORGIAN_PS "GEORGIAN-PS"
+#define CS_TCVN5712_1 "TCVN5712-1"
+
+void conv_jistoeuc (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_euctojis (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_sjistoeuc (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_anytoeuc (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_anytojis (gchar *outbuf, gint outlen, const gchar *inbuf);
+
+void conv_jistoutf8 (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_sjistoutf8 (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_euctoutf8 (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_anytoutf8 (gchar *outbuf, gint outlen, const gchar *inbuf);
+
+void conv_unreadable_eucjp (gchar *str);
+void conv_unreadable_8bit (gchar *str);
+void conv_unreadable_latin (gchar *str);
+void conv_unreadable_locale (gchar *str);
+
+//void conv_mb_alnum(gchar *str);
+
+CharSet conv_guess_ja_encoding(const gchar *str);
+
+void conv_jistodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_sjistodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_euctodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_ustodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_latintodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_noconv (gchar *outbuf, gint outlen, const gchar *inbuf);
+void conv_localetodisp (gchar *outbuf, gint outlen, const gchar *inbuf);
+
+CodeConverter *conv_code_converter_new (const gchar *src_charset);
+void conv_code_converter_destroy (CodeConverter *conv);
+gint conv_convert (CodeConverter *conv,
+ gchar *outbuf,
+ gint outlen,
+ const gchar *inbuf);
+
+gchar *conv_codeset_strdup (const gchar *inbuf,
+ const gchar *src_code,
+ const gchar *dest_code);
+
+CodeConvFunc conv_get_code_conv_func (const gchar *src_charset_str,
+ const gchar *dest_charset_str);
+
+#if HAVE_ICONV
+gchar *conv_iconv_strdup (const gchar *inbuf,
+ const gchar *src_code,
+ const gchar *dest_code);
+#endif
+
+const gchar *conv_get_charset_str (CharSet charset);
+CharSet conv_get_charset_from_str (const gchar *charset);
+CharSet conv_get_locale_charset (void);
+const gchar *conv_get_locale_charset_str (void);
+CharSet conv_get_internal_charset (void);
+const gchar *conv_get_internal_charset_str (void);
+CharSet conv_get_outgoing_charset (void);
+const gchar *conv_get_outgoing_charset_str (void);
+gboolean conv_is_multibyte_encoding (CharSet encoding);
+
+const gchar *conv_get_current_locale (void);
+
+void conv_unmime_header_overwrite (gchar *str);
+void conv_unmime_header (gchar *outbuf,
+ gint outlen,
+ const gchar *str,
+ const gchar *charset);
+void conv_encode_header (gchar *dest,
+ gint len,
+ const gchar *src,
+ gint header_len,
+ gboolean addr_field);
+
+
+#endif /* __CODECONV_H__ */
diff --git a/src/colorlabel.c b/src/colorlabel.c
new file mode 100644
index 00000000..f99a9317
--- /dev/null
+++ b/src/colorlabel.c
@@ -0,0 +1,338 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001-2004 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* (alfons) - based on a contribution by Satoshi Nagayasu; revised for colorful
+ * menu and more Sylpheed integration. The idea to put the code in a separate
+ * file is just that it make it easier to allow "user changeable" label colors.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkpixmap.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkcheckmenuitem.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkalignment.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkdrawingarea.h>
+
+#include "intl.h"
+#include "colorlabel.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+static gchar *labels[] = {
+ N_("Orange"),
+ N_("Red") ,
+ N_("Pink"),
+ N_("Sky blue"),
+ N_("Blue"),
+ N_("Green"),
+ N_("Brown")
+};
+
+typedef enum LabelColorChangeFlags_ {
+ LCCF_COLOR = 1 << 0,
+ LCCF_LABEL = 1 << 1,
+ LCCF_ALL = LCCF_COLOR | LCCF_LABEL
+} LabelColorChangeFlags;
+
+/* XXX: if you add colors, make sure you also check the procmsg.h.
+ * color indices are stored as 3 bits; that explains the max. of 7 colors */
+static struct
+{
+ LabelColorChangeFlags changed;
+ GdkColor color;
+
+ /* XXX: note that the label member is supposed to be dynamically
+ * allocated and fffreed */
+ gchar *label;
+ GtkWidget *widget;
+} label_colors[] = {
+ { LCCF_ALL, { 0, 0xffff, (0x99 << 8), 0x0 }, NULL, NULL },
+ { LCCF_ALL, { 0, 0xffff, 0, 0 }, NULL, NULL },
+ { LCCF_ALL, { 0, 0xffff, (0x66 << 8), 0xffff }, NULL, NULL },
+ { LCCF_ALL, { 0, 0x0, (0xcc << 8), 0xffff }, NULL, NULL },
+ { LCCF_ALL, { 0, 0x0, 0x0, 0xffff }, NULL, NULL },
+ { LCCF_ALL, { 0, 0x0, 0x99 << 8, 0x0 }, NULL, NULL },
+ { LCCF_ALL, { 0, 0x66 << 8, 0x33 << 8, 0x33 << 8 }, NULL, NULL }
+};
+
+#define LABEL_COLOR_WIDTH 28
+#define LABEL_COLOR_HEIGHT 16
+
+#define LABEL_COLORS_ELEMS (sizeof label_colors / sizeof label_colors[0])
+
+#define G_RETURN_VAL_IF_INVALID_COLOR(color, val) \
+ g_return_val_if_fail((color) >= 0 && (color) < LABEL_COLORS_ELEMS, (val))
+
+static void colorlabel_recreate (gint);
+static void colorlabel_recreate_label (gint);
+
+gint colorlabel_get_color_count(void)
+{
+ return LABEL_COLORS_ELEMS;
+}
+
+GdkColor colorlabel_get_color(gint color_index)
+{
+ GdkColor invalid = { 0 };
+
+ G_RETURN_VAL_IF_INVALID_COLOR(color_index, invalid);
+
+ return label_colors[color_index].color;
+}
+
+gchar *colorlabel_get_color_text(gint color_index)
+{
+ G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL);
+
+ colorlabel_recreate_label(color_index);
+ return label_colors[color_index].label;
+}
+
+static gboolean colorlabel_drawing_area_expose_event_cb
+ (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
+{
+ GdkDrawable *drawable = widget->window;
+ gulong c = (gulong) GPOINTER_TO_INT(data);
+ GdkColor color;
+ GdkGC *gc;
+
+ color.red = ((c >> 16UL) & 0xFFUL) << 8UL;
+ color.green = ((c >> 8UL) & 0xFFUL) << 8UL;
+ color.blue = ((c) & 0xFFUL) << 8UL;
+
+ gdk_colormap_alloc_color(gtk_widget_get_colormap(widget), &color, FALSE, TRUE);
+
+ gc = gdk_gc_new(drawable);
+
+ gdk_gc_set_foreground(gc, &color);
+ gdk_draw_rectangle(drawable, gc,
+ TRUE, 0, 0, widget->allocation.width - 1,
+ widget->allocation.height - 1);
+ gdk_draw_rectangle(drawable, widget->style->black_gc,
+ FALSE, 0, 0, widget->allocation.width - 1,
+ widget->allocation.height - 1);
+
+ gdk_gc_unref(gc);
+
+ return FALSE;
+}
+
+static GtkWidget *colorlabel_create_color_widget(GdkColor color)
+{
+ GtkWidget *widget;
+
+ widget = gtk_drawing_area_new();
+ gtk_drawing_area_size(GTK_DRAWING_AREA(widget),
+ LABEL_COLOR_WIDTH - 2, LABEL_COLOR_HEIGHT - 4);
+
+#define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL)
+#define CR(r, g, b) ((CL(r) << (gulong) 16) | \
+ (CL(g) << (gulong) 8) | \
+ (CL(b)))
+
+ g_signal_connect(G_OBJECT(widget), "expose_event",
+ G_CALLBACK(colorlabel_drawing_area_expose_event_cb),
+ GINT_TO_POINTER
+ ((gint)CR(color.red, color.green, color.blue)));
+
+ return widget;
+}
+
+/* XXX: this function to check if menus with colors and labels should
+ * be recreated */
+gboolean colorlabel_changed(void)
+{
+ gint n;
+
+ for (n = 0; n < LABEL_COLORS_ELEMS; n++) {
+ if (label_colors[n].changed)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* XXX: colorlabel_recreate_XXX are there to make sure everything
+ * is initialized ok, without having to call a global _xxx_init_
+ * function */
+static void colorlabel_recreate_color(gint color)
+{
+ GtkWidget *widget;
+
+ if (!(label_colors[color].changed & LCCF_COLOR))
+ return;
+
+ widget = colorlabel_create_color_widget(label_colors[color].color);
+ g_return_if_fail(widget);
+
+ if (label_colors[color].widget)
+ gtk_widget_destroy(label_colors[color].widget);
+
+ label_colors[color].widget = widget;
+ label_colors[color].changed &= ~LCCF_COLOR;
+}
+
+static void colorlabel_recreate_label(gint color)
+{
+ if (!label_colors[color].changed & LCCF_LABEL)
+ return;
+
+ if (label_colors[color].label == NULL)
+ label_colors[color].label = g_strdup(gettext(labels[color]));
+
+ label_colors[color].changed &= ~LCCF_LABEL;
+}
+
+/* XXX: call this function everytime when you're doing important
+ * stuff with the label_colors[] array */
+static void colorlabel_recreate(gint color)
+{
+ colorlabel_recreate_label(color);
+ colorlabel_recreate_color(color);
+}
+
+static void colorlabel_recreate_all(void)
+{
+ gint n;
+
+ for ( n = 0; n < LABEL_COLORS_ELEMS; n++)
+ colorlabel_recreate(n);
+}
+
+/* colorlabel_create_check_color_menu_item() - creates a color
+ * menu item with a check box */
+GtkWidget *colorlabel_create_check_color_menu_item(gint color_index)
+{
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *align;
+ GtkWidget *item;
+
+ G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL);
+
+ item = gtk_check_menu_item_new();
+
+ colorlabel_recreate(color_index);
+
+ /* XXX: gnome-core::panel::menu.c is a great example of
+ * how to create pixmap menus */
+ label = gtk_label_new(label_colors[color_index].label);
+
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_widget_show(label);
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(hbox);
+ gtk_container_add(GTK_CONTAINER(item), hbox);
+
+ align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
+ gtk_widget_show(align);
+ gtk_container_set_border_width(GTK_CONTAINER(align), 1);
+
+ gtk_container_add(GTK_CONTAINER(align), label_colors[color_index].widget);
+ gtk_widget_show(label_colors[color_index].widget);
+ gtk_widget_set_size_request
+ (align, LABEL_COLOR_WIDTH, LABEL_COLOR_HEIGHT);
+
+ gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4);
+
+ return item;
+}
+
+/* colorlabel_create_color_menu() - creates a color menu without
+ * checkitems, probably for use in combo items */
+GtkWidget *colorlabel_create_color_menu(void)
+{
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *align;
+ GtkWidget *item;
+ GtkWidget *menu;
+ gint i;
+
+ colorlabel_recreate_all();
+
+ /* create the menu items. each item has its color code attached */
+ menu = gtk_menu_new();
+ g_object_set_data(G_OBJECT(menu), "label_color_menu", menu);
+
+#if 0
+ item = gtk_menu_item_new_with_label(_("None"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ g_object_set_data(G_OBJECT(item), "color", GUINT_TO_POINTER(0));
+ gtk_widget_show(item);
+#endif
+
+ /* and the color items */
+ for (i = 0; i < LABEL_COLORS_ELEMS; i++) {
+ GtkWidget *widget = colorlabel_create_color_widget(label_colors[i].color);
+
+ item = gtk_menu_item_new();
+ g_object_set_data(G_OBJECT(item), "color",
+ GUINT_TO_POINTER(i + 1));
+
+ label = gtk_label_new(label_colors[i].label);
+
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_widget_show(label);
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(hbox);
+ gtk_container_add(GTK_CONTAINER(item), hbox);
+
+ align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
+ gtk_widget_show(align);
+ gtk_container_set_border_width(GTK_CONTAINER(align), 1);
+
+ gtk_container_add(GTK_CONTAINER(align), widget);
+ gtk_widget_show(widget);
+ gtk_widget_set_size_request
+ (align, LABEL_COLOR_WIDTH, LABEL_COLOR_HEIGHT);
+
+ gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4);
+
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ gtk_widget_show(item);
+ }
+
+ gtk_widget_show(menu);
+
+ return menu;
+}
+
+guint colorlabel_get_color_menu_active_item(GtkWidget *menu)
+{
+ GtkWidget *menuitem;
+ guint color;
+
+ g_return_val_if_fail
+ (g_object_get_data(G_OBJECT(menu), "label_color_menu"), 0);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ color = GPOINTER_TO_UINT
+ (g_object_get_data(G_OBJECT(menuitem), "color"));
+ return color;
+}
diff --git a/src/colorlabel.h b/src/colorlabel.h
new file mode 100644
index 00000000..8bb23c31
--- /dev/null
+++ b/src/colorlabel.h
@@ -0,0 +1,34 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(COLORLABEL_H__)
+#define COLORLABEL_H__
+
+#include <glib.h>
+
+gint colorlabel_get_color_count (void);
+GdkColor colorlabel_get_color (gint color_index);
+gchar *colorlabel_get_color_text (gint color_index);
+gboolean colorlabel_changed (void);
+GtkWidget *colorlabel_create_check_color_menu_item
+ (gint color_index);
+GtkWidget *colorlabel_create_color_menu (void);
+guint colorlabel_get_color_menu_active_item (GtkWidget *menu);
+
+#endif /* COLORLABEL_H__ */
diff --git a/src/compose.c b/src/compose.c
new file mode 100644
index 00000000..441ab942
--- /dev/null
+++ b/src/compose.c
@@ -0,0 +1,6204 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkcheckmenuitem.h>
+#include <gtk/gtkoptionmenu.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkvpaned.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtkhandlebox.h>
+#include <gtk/gtktoolbar.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtkdnd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <time.h>
+/* #include <sys/utsname.h> */
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <errno.h>
+
+#if (HAVE_WCTYPE_H && HAVE_WCHAR_H)
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+#include "intl.h"
+#include "main.h"
+#include "mainwindow.h"
+#include "compose.h"
+#include "addressbook.h"
+#include "folderview.h"
+#include "procmsg.h"
+#include "menu.h"
+#include "stock_pixmap.h"
+#include "send_message.h"
+#include "imap.h"
+#include "news.h"
+#include "customheader.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "action.h"
+#include "account.h"
+#include "filesel.h"
+#include "procheader.h"
+#include "procmime.h"
+#include "statusbar.h"
+#include "about.h"
+#include "base64.h"
+#include "quoted-printable.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "socket.h"
+#include "alertpanel.h"
+#include "manage_window.h"
+#include "gtkshruler.h"
+#include "folder.h"
+#include "addr_compl.h"
+#include "quote_fmt.h"
+#include "template.h"
+#include "undo.h"
+
+#if USE_GPGME
+# include "rfc2015.h"
+#endif
+
+typedef enum
+{
+ COL_MIMETYPE = 0,
+ COL_SIZE = 1,
+ COL_NAME = 2
+} AttachColumnPos;
+
+#define N_ATTACH_COLS 3
+
+typedef enum
+{
+ COMPOSE_ACTION_MOVE_BEGINNING_OF_LINE,
+ COMPOSE_ACTION_MOVE_FORWARD_CHARACTER,
+ COMPOSE_ACTION_MOVE_BACKWARD_CHARACTER,
+ COMPOSE_ACTION_MOVE_FORWARD_WORD,
+ COMPOSE_ACTION_MOVE_BACKWARD_WORD,
+ COMPOSE_ACTION_MOVE_END_OF_LINE,
+ COMPOSE_ACTION_MOVE_NEXT_LINE,
+ COMPOSE_ACTION_MOVE_PREVIOUS_LINE,
+ COMPOSE_ACTION_DELETE_FORWARD_CHARACTER,
+ COMPOSE_ACTION_DELETE_BACKWARD_CHARACTER,
+ COMPOSE_ACTION_DELETE_FORWARD_WORD,
+ COMPOSE_ACTION_DELETE_BACKWARD_WORD,
+ COMPOSE_ACTION_DELETE_LINE,
+ COMPOSE_ACTION_DELETE_LINE_N,
+ COMPOSE_ACTION_DELETE_TO_LINE_END
+} ComposeAction;
+
+#define B64_LINE_SIZE 57
+#define B64_BUFFSIZE 77
+
+#define MAX_REFERENCES_LEN 999
+
+static GdkColor quote_color = {0, 0, 0, 0xbfff};
+
+static GList *compose_list = NULL;
+
+static Compose *compose_create (PrefsAccount *account,
+ ComposeMode mode);
+static void compose_connect_changed_callbacks (Compose *compose);
+static void compose_toolbar_create (Compose *compose,
+ GtkWidget *container);
+static GtkWidget *compose_account_option_menu_create
+ (Compose *compose);
+static void compose_set_template_menu (Compose *compose);
+static void compose_template_apply (Compose *compose,
+ Template *tmpl,
+ gboolean replace);
+static void compose_destroy (Compose *compose);
+
+static void compose_entry_show (Compose *compose,
+ ComposeEntryType type);
+static GtkEntry *compose_get_entry (Compose *compose,
+ ComposeEntryType type);
+static void compose_entries_set (Compose *compose,
+ const gchar *mailto);
+static void compose_entries_set_from_item (Compose *compose,
+ FolderItem *item,
+ ComposeMode mode);
+static gint compose_parse_header (Compose *compose,
+ MsgInfo *msginfo);
+static gchar *compose_parse_references (const gchar *ref,
+ const gchar *msgid);
+
+static gchar *compose_quote_fmt (Compose *compose,
+ MsgInfo *msginfo,
+ const gchar *fmt,
+ const gchar *qmark,
+ const gchar *body);
+
+static void compose_reply_set_entry (Compose *compose,
+ MsgInfo *msginfo,
+ ComposeMode mode);
+static void compose_reedit_set_entry (Compose *compose,
+ MsgInfo *msginfo);
+static void compose_insert_sig (Compose *compose,
+ gboolean replace);
+static gchar *compose_get_signature_str (Compose *compose);
+static void compose_insert_file (Compose *compose,
+ const gchar *file);
+static void compose_attach_append (Compose *compose,
+ const gchar *file,
+ const gchar *filename,
+ const gchar *content_type);
+static void compose_attach_parts (Compose *compose,
+ MsgInfo *msginfo);
+static void compose_wrap_line (Compose *compose);
+static void compose_wrap_line_all (Compose *compose);
+static void compose_wrap_line_all_full (Compose *compose,
+ gboolean autowrap);
+static void compose_set_title (Compose *compose);
+static void compose_select_account (Compose *compose,
+ PrefsAccount *account,
+ gboolean init);
+
+static gboolean compose_check_for_valid_recipient
+ (Compose *compose);
+static gboolean compose_check_entries (Compose *compose);
+
+static gint compose_send (Compose *compose);
+static gint compose_write_to_file (Compose *compose,
+ const gchar *file,
+ gboolean is_draft);
+static gint compose_write_body_to_file (Compose *compose,
+ const gchar *file);
+static gint compose_redirect_write_to_file (Compose *compose,
+ const gchar *file);
+static gint compose_remove_reedit_target (Compose *compose);
+static gint compose_queue (Compose *compose,
+ const gchar *file);
+static void compose_write_attach (Compose *compose,
+ FILE *fp);
+static gint compose_write_headers (Compose *compose,
+ FILE *fp,
+ const gchar *charset,
+ EncodingType encoding,
+ gboolean is_draft);
+static gint compose_redirect_write_headers (Compose *compose,
+ FILE *fp);
+
+static void compose_convert_header (gchar *dest,
+ gint len,
+ gchar *src,
+ gint header_len,
+ gboolean addr_field);
+static void compose_generate_msgid (Compose *compose,
+ gchar *buf,
+ gint len);
+
+static void compose_attach_info_free (AttachInfo *ainfo);
+static void compose_attach_remove_selected (Compose *compose);
+
+static void compose_attach_property (Compose *compose);
+static void compose_attach_property_create (gboolean *cancelled);
+static void attach_property_ok (GtkWidget *widget,
+ gboolean *cancelled);
+static void attach_property_cancel (GtkWidget *widget,
+ gboolean *cancelled);
+static gint attach_property_delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gboolean *cancelled);
+static gboolean attach_property_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gboolean *cancelled);
+
+static void compose_exec_ext_editor (Compose *compose);
+static gint compose_exec_ext_editor_real (const gchar *file);
+static gboolean compose_ext_editor_kill (Compose *compose);
+static void compose_input_cb (gpointer data,
+ gint source,
+ GdkInputCondition condition);
+static void compose_set_ext_editor_sensitive (Compose *compose,
+ gboolean sensitive);
+
+static void compose_undo_state_changed (UndoMain *undostruct,
+ gint undo_state,
+ gint redo_state,
+ gpointer data);
+
+static gint calc_cursor_xpos (GtkTextView *text,
+ gint extra,
+ gint char_width);
+
+/* callback functions */
+
+static gboolean compose_edit_size_alloc (GtkEditable *widget,
+ GtkAllocation *allocation,
+ GtkSHRuler *shruler);
+
+static void toolbar_send_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_send_later_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_draft_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_insert_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_attach_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_sig_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_ext_editor_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_linewrap_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_address_cb (GtkWidget *widget,
+ gpointer data);
+
+static void account_activated (GtkMenuItem *menuitem,
+ gpointer data);
+
+static void attach_selected (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event,
+ gpointer data);
+static gboolean attach_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+static gboolean attach_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+static void compose_send_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_send_later_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_draft_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_attach_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_insert_file_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_insert_sig_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_close_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_address_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_template_activate_cb(GtkWidget *widget,
+ gpointer data);
+
+static void compose_ext_editor_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static gint compose_delete_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static void compose_destroy_cb (GtkWidget *widget,
+ Compose *compose);
+
+static void compose_undo_cb (Compose *compose);
+static void compose_redo_cb (Compose *compose);
+static void compose_cut_cb (Compose *compose);
+static void compose_copy_cb (Compose *compose);
+static void compose_paste_cb (Compose *compose);
+static void compose_paste_as_quote_cb (Compose *compose);
+static void compose_allsel_cb (Compose *compose);
+
+static void compose_action_cb (Compose *compose,
+ ComposeAction action);
+
+static void compose_grab_focus_cb (GtkWidget *widget,
+ Compose *compose);
+
+static void compose_changed_cb (GtkTextBuffer *textbuf,
+ Compose *compose);
+
+static void compose_toggle_autowrap_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_toggle_to_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_cc_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_bcc_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_replyto_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_followupto_cb(gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_attach_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_ruler_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+#if USE_GPGME
+static void compose_toggle_sign_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void compose_toggle_encrypt_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+#endif
+
+static void compose_attach_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data);
+static void compose_insert_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data);
+
+static void to_activated (GtkWidget *widget,
+ Compose *compose);
+static void newsgroups_activated (GtkWidget *widget,
+ Compose *compose);
+static void cc_activated (GtkWidget *widget,
+ Compose *compose);
+static void bcc_activated (GtkWidget *widget,
+ Compose *compose);
+static void replyto_activated (GtkWidget *widget,
+ Compose *compose);
+static void followupto_activated (GtkWidget *widget,
+ Compose *compose);
+static void subject_activated (GtkWidget *widget,
+ Compose *compose);
+
+static void text_activated (GtkWidget *widget,
+ Compose *compose);
+static void text_inserted (GtkTextBuffer *buffer,
+ GtkTextIter *iter,
+ const gchar *text,
+ gint len,
+ Compose *compose);
+
+static gboolean compose_send_control_enter (Compose *compose);
+
+static GtkItemFactoryEntry compose_popup_entries[] =
+{
+ {N_("/_Add..."), NULL, compose_attach_cb, 0, NULL},
+ {N_("/_Remove"), NULL, compose_attach_remove_selected, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Properties..."), NULL, compose_attach_property, 0, NULL}
+};
+
+static GtkItemFactoryEntry compose_entries[] =
+{
+ {N_("/_File"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/_Send"), "<control>Return",
+ compose_send_cb, 0, NULL},
+ {N_("/_File/Send _later"), "<shift><control>S",
+ compose_send_later_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/Save to _draft folder"),
+ "<shift><control>D", compose_draft_cb, 0, NULL},
+ {N_("/_File/Save and _keep editing"),
+ "<control>S", compose_draft_cb, 1, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Attach file"), "<control>M", compose_attach_cb, 0, NULL},
+ {N_("/_File/_Insert file"), "<control>I", compose_insert_file_cb, 0, NULL},
+ {N_("/_File/Insert si_gnature"), "<control>G", compose_insert_sig_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Close"), "<control>W", compose_close_cb, 0, NULL},
+
+ {N_("/_Edit"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Edit/_Undo"), "<control>Z", compose_undo_cb, 0, NULL},
+ {N_("/_Edit/_Redo"), "<control>Y", compose_redo_cb, 0, NULL},
+ {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit/Cu_t"), "<control>X", compose_cut_cb, 0, NULL},
+ {N_("/_Edit/_Copy"), "<control>C", compose_copy_cb, 0, NULL},
+ {N_("/_Edit/_Paste"), "<control>V", compose_paste_cb, 0, NULL},
+ {N_("/_Edit/Paste as _quotation"),
+ NULL, compose_paste_as_quote_cb, 0, NULL},
+ {N_("/_Edit/Select _all"), "<control>A", compose_allsel_cb, 0, NULL},
+ {N_("/_Edit/A_dvanced"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Edit/A_dvanced/Move a character backward"),
+ "<control>B",
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_BACKWARD_CHARACTER,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move a character forward"),
+ "<control>F",
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_FORWARD_CHARACTER,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move a word backward"),
+ NULL, /* "<alt>B" */
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_BACKWARD_WORD,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move a word forward"),
+ NULL, /* "<alt>F" */
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_FORWARD_WORD,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move to beginning of line"),
+ NULL, /* "<control>A" */
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_BEGINNING_OF_LINE,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move to end of line"),
+ "<control>E",
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_END_OF_LINE,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move to previous line"),
+ "<control>P",
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_PREVIOUS_LINE,
+ NULL},
+ {N_("/_Edit/A_dvanced/Move to next line"),
+ "<control>N",
+ compose_action_cb,
+ COMPOSE_ACTION_MOVE_NEXT_LINE,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete a character backward"),
+ "<control>H",
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_BACKWARD_CHARACTER,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete a character forward"),
+ "<control>D",
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_FORWARD_CHARACTER,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete a word backward"),
+ NULL, /* "<control>W" */
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_BACKWARD_WORD,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete a word forward"),
+ NULL, /* "<alt>D", */
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_FORWARD_WORD,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete line"),
+ "<control>U",
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_LINE,
+ NULL},
+ {N_("/_Edit/A_dvanced/Delete to end of line"),
+ "<control>K",
+ compose_action_cb,
+ COMPOSE_ACTION_DELETE_TO_LINE_END,
+ NULL},
+ {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit/_Wrap current paragraph"),
+ "<control>L", compose_wrap_line, 0, NULL},
+ {N_("/_Edit/Wrap all long _lines"),
+ "<control><alt>L", compose_wrap_line_all, 0, NULL},
+ {N_("/_Edit/Aut_o wrapping"), "<shift><control>L", compose_toggle_autowrap_cb, 0, "<ToggleItem>"},
+ {N_("/_View"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_To"), NULL, compose_toggle_to_cb , 0, "<ToggleItem>"},
+ {N_("/_View/_Cc"), NULL, compose_toggle_cc_cb , 0, "<ToggleItem>"},
+ {N_("/_View/_Bcc"), NULL, compose_toggle_bcc_cb , 0, "<ToggleItem>"},
+ {N_("/_View/_Reply to"), NULL, compose_toggle_replyto_cb, 0, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Followup to"), NULL, compose_toggle_followupto_cb, 0, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/R_uler"), NULL, compose_toggle_ruler_cb, 0, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Attachment"), NULL, compose_toggle_attach_cb, 0, "<ToggleItem>"},
+
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/_Address book"), "<shift><control>A", compose_address_cb , 0, NULL},
+ {N_("/_Tools/_Template"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Edit with e_xternal editor"),
+ "<shift><control>X", compose_ext_editor_cb, 0, NULL},
+#if USE_GPGME
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/PGP Si_gn"), NULL, compose_toggle_sign_cb , 0, "<ToggleItem>"},
+ {N_("/_Tools/PGP _Encrypt"), NULL, compose_toggle_encrypt_cb, 0, "<ToggleItem>"},
+#endif /* USE_GPGME */
+
+ {N_("/_Help"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Help/_About"), NULL, about_show, 0, NULL}
+};
+
+static GtkTargetEntry compose_mime_types[] =
+{
+ {"text/uri-list", 0, 0}
+};
+
+
+void compose_new(PrefsAccount *account, FolderItem *item, const gchar *mailto,
+ GPtrArray *attach_files)
+{
+ Compose *compose;
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ if (!account) account = cur_account;
+ g_return_if_fail(account != NULL);
+
+ compose = compose_create(account, COMPOSE_NEW);
+
+ undo_block(compose->undostruct);
+
+ if (prefs_common.auto_sig)
+ compose_insert_sig(compose, FALSE);
+
+ text = GTK_TEXT_VIEW(compose->text);
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+
+ if (account->protocol != A_NNTP) {
+ if (mailto && *mailto != '\0') {
+ compose_entries_set(compose, mailto);
+ gtk_widget_grab_focus(compose->subject_entry);
+ } else if (item) {
+ compose_entries_set_from_item
+ (compose, item, COMPOSE_NEW);
+ if (item->auto_to)
+ gtk_widget_grab_focus(compose->subject_entry);
+ else
+ gtk_widget_grab_focus(compose->to_entry);
+ } else
+ gtk_widget_grab_focus(compose->to_entry);
+ } else {
+ if (mailto && *mailto != '\0') {
+ compose_entry_append(compose, mailto,
+ COMPOSE_ENTRY_NEWSGROUPS);
+ gtk_widget_grab_focus(compose->subject_entry);
+ } else
+ gtk_widget_grab_focus(compose->newsgroups_entry);
+ }
+
+ if (attach_files) {
+ gint i;
+ gchar *file;
+
+ for (i = 0; i < attach_files->len; i++) {
+ file = g_ptr_array_index(attach_files, i);
+ compose_attach_append(compose, file, file, NULL);
+ }
+ }
+
+ undo_unblock(compose->undostruct);
+
+ compose_connect_changed_callbacks(compose);
+
+ if (prefs_common.auto_exteditor)
+ compose_exec_ext_editor(compose);
+}
+
+void compose_reply(MsgInfo *msginfo, FolderItem *item, ComposeMode mode,
+ const gchar *body)
+{
+ Compose *compose;
+ PrefsAccount *account;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gboolean quote = FALSE;
+
+ g_return_if_fail(msginfo != NULL);
+ g_return_if_fail(msginfo->folder != NULL);
+
+ if (COMPOSE_QUOTE_MODE(mode) == COMPOSE_WITH_QUOTE)
+ quote = TRUE;
+
+ account = account_find_from_item(msginfo->folder);
+ if (!account && msginfo->to && prefs_common.reply_account_autosel) {
+ gchar *to;
+ Xstrdup_a(to, msginfo->to, return);
+ extract_address(to);
+ account = account_find_from_address(to);
+ }
+ if (!account) account = cur_account;
+ g_return_if_fail(account != NULL);
+
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED);
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_REPLIED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo, MSG_REPLIED);
+
+ compose = compose_create(account, COMPOSE_REPLY);
+
+ compose->replyinfo = procmsg_msginfo_get_full_info(msginfo);
+ if (!compose->replyinfo)
+ compose->replyinfo = procmsg_msginfo_copy(msginfo);
+
+ if (compose_parse_header(compose, msginfo) < 0) return;
+
+ undo_block(compose->undostruct);
+
+ compose_reply_set_entry(compose, msginfo, mode);
+ if (item)
+ compose_entries_set_from_item(compose, item, COMPOSE_REPLY);
+
+ if (quote) {
+ gchar *qmark;
+ gchar *quote_str;
+
+ if (prefs_common.quotemark && *prefs_common.quotemark)
+ qmark = prefs_common.quotemark;
+ else
+ qmark = "> ";
+
+ quote_str = compose_quote_fmt(compose, compose->replyinfo,
+ prefs_common.quotefmt,
+ qmark, body);
+ }
+
+ if (prefs_common.auto_sig)
+ compose_insert_sig(compose, FALSE);
+
+ if (quote && prefs_common.linewrap_quote)
+ compose_wrap_line_all(compose);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text));
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+
+ gtk_widget_grab_focus(compose->text);
+
+ undo_unblock(compose->undostruct);
+
+ compose_connect_changed_callbacks(compose);
+
+ if (prefs_common.auto_exteditor)
+ compose_exec_ext_editor(compose);
+}
+
+void compose_forward(GSList *mlist, FolderItem *item, gboolean as_attach,
+ const gchar *body)
+{
+ Compose *compose;
+ PrefsAccount *account;
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ g_return_if_fail(mlist != NULL);
+
+ msginfo = (MsgInfo *)mlist->data;
+ g_return_if_fail(msginfo->folder != NULL);
+
+ account = account_find_from_item(msginfo->folder);
+ if (!account) account = cur_account;
+ g_return_if_fail(account != NULL);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED);
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED);
+ }
+ msginfo = (MsgInfo *)mlist->data;
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_list_unset_perm_flags(mlist, MSG_REPLIED);
+
+ compose = compose_create(account, COMPOSE_FORWARD);
+
+ undo_block(compose->undostruct);
+
+ compose_entry_set(compose, "Fw: ", COMPOSE_ENTRY_SUBJECT);
+ if (mlist->next == NULL && msginfo->subject && *msginfo->subject)
+ compose_entry_append(compose, msginfo->subject,
+ COMPOSE_ENTRY_SUBJECT);
+ if (item)
+ compose_entries_set_from_item(compose, item, COMPOSE_FORWARD);
+
+ text = GTK_TEXT_VIEW(compose->text);
+ buffer = gtk_text_view_get_buffer(text);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+
+ if (as_attach) {
+ gchar *msgfile;
+
+ msgfile = procmsg_get_message_file_path(msginfo);
+ if (!is_file_exist(msgfile))
+ g_warning(_("%s: file not exist\n"), msgfile);
+ else
+ compose_attach_append(compose, msgfile, msgfile,
+ "message/rfc822");
+
+ g_free(msgfile);
+ } else {
+ gchar *qmark;
+ gchar *quote_str;
+ MsgInfo *full_msginfo;
+
+ full_msginfo = procmsg_msginfo_get_full_info(msginfo);
+ if (!full_msginfo)
+ full_msginfo = procmsg_msginfo_copy(msginfo);
+
+ if (cur != mlist) {
+ GtkTextMark *mark;
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark
+ (buffer, &iter, mark);
+ gtk_text_buffer_insert
+ (buffer, &iter, "\n\n", 2);
+ }
+
+ if (prefs_common.fw_quotemark &&
+ *prefs_common.fw_quotemark)
+ qmark = prefs_common.fw_quotemark;
+ else
+ qmark = "> ";
+
+ quote_str = compose_quote_fmt(compose, full_msginfo,
+ prefs_common.fw_quotefmt,
+ qmark, body);
+ compose_attach_parts(compose, msginfo);
+
+ procmsg_msginfo_free(full_msginfo);
+
+ if (body) break;
+ }
+ }
+
+ if (prefs_common.auto_sig)
+ compose_insert_sig(compose, FALSE);
+
+ if (prefs_common.linewrap_quote)
+ compose_wrap_line_all(compose);
+
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+
+ undo_unblock(compose->undostruct);
+
+ compose_connect_changed_callbacks(compose);
+
+ if (account->protocol != A_NNTP)
+ gtk_widget_grab_focus(compose->to_entry);
+ else
+ gtk_widget_grab_focus(compose->newsgroups_entry);
+
+ if (prefs_common.auto_exteditor)
+ compose_exec_ext_editor(compose);
+}
+
+void compose_redirect(MsgInfo *msginfo, FolderItem *item)
+{
+ Compose *compose;
+ PrefsAccount *account;
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+
+ g_return_if_fail(msginfo != NULL);
+ g_return_if_fail(msginfo->folder != NULL);
+
+ account = account_find_from_item(msginfo->folder);
+ if (!account) account = cur_account;
+ g_return_if_fail(account != NULL);
+
+ compose = compose_create(account, COMPOSE_REDIRECT);
+ compose->targetinfo = procmsg_msginfo_copy(msginfo);
+
+ if (compose_parse_header(compose, msginfo) < 0) return;
+
+ undo_block(compose->undostruct);
+
+ if (msginfo->subject)
+ compose_entry_set(compose, msginfo->subject,
+ COMPOSE_ENTRY_SUBJECT);
+ compose_entries_set_from_item(compose, item, COMPOSE_REDIRECT);
+
+ text = GTK_TEXT_VIEW(compose->text);
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ if ((fp = procmime_get_first_text_content(msginfo)) == NULL)
+ g_warning(_("Can't get text part\n"));
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ gtk_text_buffer_insert(buffer, &iter, buf, -1);
+ }
+ fclose(fp);
+ }
+ compose_attach_parts(compose, msginfo);
+
+ if (account->protocol != A_NNTP)
+ gtk_widget_grab_focus(compose->to_entry);
+ else
+ gtk_widget_grab_focus(compose->newsgroups_entry);
+
+ gtk_text_view_set_editable(text, FALSE);
+
+ undo_unblock(compose->undostruct);
+
+ compose_connect_changed_callbacks(compose);
+}
+
+void compose_reedit(MsgInfo *msginfo)
+{
+ Compose *compose;
+ PrefsAccount *account;
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+
+ g_return_if_fail(msginfo != NULL);
+ g_return_if_fail(msginfo->folder != NULL);
+
+ account = account_find_from_msginfo(msginfo);
+ if (!account) account = cur_account;
+ g_return_if_fail(account != NULL);
+
+ compose = compose_create(account, COMPOSE_REEDIT);
+ compose->targetinfo = procmsg_msginfo_copy(msginfo);
+
+ if (compose_parse_header(compose, msginfo) < 0) return;
+
+ undo_block(compose->undostruct);
+
+ compose_reedit_set_entry(compose, msginfo);
+
+ text = GTK_TEXT_VIEW(compose->text);
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ if ((fp = procmime_get_first_text_content(msginfo)) == NULL)
+ g_warning(_("Can't get text part\n"));
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ gtk_text_buffer_insert(buffer, &iter, buf, -1);
+ }
+ fclose(fp);
+ }
+ compose_attach_parts(compose, msginfo);
+
+ gtk_widget_grab_focus(compose->text);
+
+ undo_unblock(compose->undostruct);
+
+ compose_connect_changed_callbacks(compose);
+
+ if (prefs_common.auto_exteditor)
+ compose_exec_ext_editor(compose);
+}
+
+GList *compose_get_compose_list(void)
+{
+ return compose_list;
+}
+
+static void compose_entry_show(Compose *compose, ComposeEntryType type)
+{
+ GtkItemFactory *ifactory;
+
+ ifactory = gtk_item_factory_from_widget(compose->menubar);
+
+ switch (type) {
+ case COMPOSE_ENTRY_CC:
+ menu_set_active(ifactory, "/View/Cc", TRUE);
+ break;
+ case COMPOSE_ENTRY_BCC:
+ menu_set_active(ifactory, "/View/Bcc", TRUE);
+ break;
+ case COMPOSE_ENTRY_REPLY_TO:
+ menu_set_active(ifactory, "/View/Reply to", TRUE);
+ break;
+ case COMPOSE_ENTRY_FOLLOWUP_TO:
+ menu_set_active(ifactory, "/View/Followup to", TRUE);
+ break;
+ case COMPOSE_ENTRY_TO:
+ menu_set_active(ifactory, "/View/To", TRUE);
+ break;
+ default:
+ break;
+ }
+}
+
+static GtkEntry *compose_get_entry(Compose *compose, ComposeEntryType type)
+{
+ GtkEntry *entry;
+
+ switch (type) {
+ case COMPOSE_ENTRY_CC:
+ entry = GTK_ENTRY(compose->cc_entry);
+ break;
+ case COMPOSE_ENTRY_BCC:
+ entry = GTK_ENTRY(compose->bcc_entry);
+ break;
+ case COMPOSE_ENTRY_REPLY_TO:
+ entry = GTK_ENTRY(compose->reply_entry);
+ break;
+ case COMPOSE_ENTRY_SUBJECT:
+ entry = GTK_ENTRY(compose->subject_entry);
+ break;
+ case COMPOSE_ENTRY_NEWSGROUPS:
+ entry = GTK_ENTRY(compose->newsgroups_entry);
+ break;
+ case COMPOSE_ENTRY_FOLLOWUP_TO:
+ entry = GTK_ENTRY(compose->followup_entry);
+ break;
+ case COMPOSE_ENTRY_TO:
+ default:
+ entry = GTK_ENTRY(compose->to_entry);
+ break;
+ }
+
+ return entry;
+}
+
+void compose_entry_set(Compose *compose, const gchar *text,
+ ComposeEntryType type)
+{
+ GtkEntry *entry;
+
+ if (!text) return;
+
+ compose_entry_show(compose, type);
+ entry = compose_get_entry(compose, type);
+
+ gtk_entry_set_text(entry, text);
+}
+
+void compose_entry_append(Compose *compose, const gchar *text,
+ ComposeEntryType type)
+{
+ GtkEntry *entry;
+ const gchar *str;
+ gint pos;
+
+ if (!text || *text == '\0') return;
+
+ compose_entry_show(compose, type);
+ entry = compose_get_entry(compose, type);
+
+ if (type != COMPOSE_ENTRY_SUBJECT) {
+ str = gtk_entry_get_text(entry);
+ if (*str != '\0') {
+ pos = entry->text_length;
+ gtk_editable_insert_text(GTK_EDITABLE(entry),
+ ", ", -1, &pos);
+ }
+ }
+
+ pos = entry->text_length;
+ gtk_editable_insert_text(GTK_EDITABLE(entry), text, -1, &pos);
+}
+
+static void compose_entries_set(Compose *compose, const gchar *mailto)
+{
+ gchar *to = NULL;
+ gchar *cc = NULL;
+ gchar *bcc = NULL;
+ gchar *subject = NULL;
+ gchar *body = NULL;
+
+ scan_mailto_url(mailto, &to, &cc, &bcc, &subject, &body);
+
+ if (to)
+ compose_entry_set(compose, to, COMPOSE_ENTRY_TO);
+ if (cc)
+ compose_entry_set(compose, cc, COMPOSE_ENTRY_CC);
+ if (bcc)
+ compose_entry_set(compose, bcc, COMPOSE_ENTRY_BCC);
+ if (subject)
+ compose_entry_set(compose, subject, COMPOSE_ENTRY_SUBJECT);
+ if (body) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ gtk_text_buffer_insert(buffer, &iter, body, -1);
+ gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+ }
+
+ g_free(to);
+ g_free(cc);
+ g_free(bcc);
+ g_free(subject);
+ g_free(body);
+}
+
+static void compose_entries_set_from_item(Compose *compose, FolderItem *item,
+ ComposeMode mode)
+{
+ g_return_if_fail(item != NULL);
+
+ if (item->auto_to) {
+ if (mode != COMPOSE_REPLY || item->use_auto_to_on_reply)
+ compose_entry_set(compose, item->auto_to,
+ COMPOSE_ENTRY_TO);
+ }
+ if (item->auto_cc)
+ compose_entry_set(compose, item->auto_cc, COMPOSE_ENTRY_CC);
+ if (item->auto_bcc)
+ compose_entry_set(compose, item->auto_bcc, COMPOSE_ENTRY_BCC);
+ if (item->auto_replyto)
+ compose_entry_set(compose, item->auto_replyto,
+ COMPOSE_ENTRY_REPLY_TO);
+}
+
+#undef ACTIVATE_MENU
+
+static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
+{
+ static HeaderEntry hentry[] = {{"Reply-To:", NULL, TRUE},
+ {"Cc:", NULL, TRUE},
+ {"References:", NULL, FALSE},
+ {"Bcc:", NULL, TRUE},
+ {"Newsgroups:", NULL, TRUE},
+ {"Followup-To:", NULL, TRUE},
+ {"List-Post:", NULL, FALSE},
+ {NULL, NULL, FALSE}};
+
+ enum
+ {
+ H_REPLY_TO = 0,
+ H_CC = 1,
+ H_REFERENCES = 2,
+ H_BCC = 3,
+ H_NEWSGROUPS = 4,
+ H_FOLLOWUP_TO = 5,
+ H_LIST_POST = 6
+ };
+
+ FILE *fp;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ if ((fp = procmsg_open_message(msginfo)) == NULL) return -1;
+ procheader_get_header_fields(fp, hentry);
+ fclose(fp);
+
+ if (hentry[H_REPLY_TO].body != NULL) {
+ conv_unmime_header_overwrite(hentry[H_REPLY_TO].body);
+ compose->replyto = hentry[H_REPLY_TO].body;
+ hentry[H_REPLY_TO].body = NULL;
+ }
+ if (hentry[H_CC].body != NULL) {
+ conv_unmime_header_overwrite(hentry[H_CC].body);
+ compose->cc = hentry[H_CC].body;
+ hentry[H_CC].body = NULL;
+ }
+ if (hentry[H_REFERENCES].body != NULL) {
+ if (compose->mode == COMPOSE_REEDIT)
+ compose->references = hentry[H_REFERENCES].body;
+ else {
+ compose->references = compose_parse_references
+ (hentry[H_REFERENCES].body, msginfo->msgid);
+ g_free(hentry[H_REFERENCES].body);
+ }
+ hentry[H_REFERENCES].body = NULL;
+ }
+ if (hentry[H_BCC].body != NULL) {
+ if (compose->mode == COMPOSE_REEDIT) {
+ conv_unmime_header_overwrite(hentry[H_BCC].body);
+ compose->bcc = hentry[H_BCC].body;
+ } else
+ g_free(hentry[H_BCC].body);
+ hentry[H_BCC].body = NULL;
+ }
+ if (hentry[H_NEWSGROUPS].body != NULL) {
+ compose->newsgroups = hentry[H_NEWSGROUPS].body;
+ hentry[H_NEWSGROUPS].body = NULL;
+ }
+ if (hentry[H_FOLLOWUP_TO].body != NULL) {
+ conv_unmime_header_overwrite(hentry[H_FOLLOWUP_TO].body);
+ compose->followup_to = hentry[H_FOLLOWUP_TO].body;
+ hentry[H_FOLLOWUP_TO].body = NULL;
+ }
+ if (hentry[H_LIST_POST].body != NULL) {
+ gchar *to = NULL;
+
+ extract_address(hentry[H_LIST_POST].body);
+ if (hentry[H_LIST_POST].body[0] != '\0') {
+ scan_mailto_url(hentry[H_LIST_POST].body,
+ &to, NULL, NULL, NULL, NULL);
+ if (to) {
+ g_free(compose->ml_post);
+ compose->ml_post = to;
+ }
+ }
+ g_free(hentry[H_LIST_POST].body);
+ hentry[H_LIST_POST].body = NULL;
+ }
+
+ if (compose->mode == COMPOSE_REEDIT && msginfo->inreplyto)
+ compose->inreplyto = g_strdup(msginfo->inreplyto);
+ else if (compose->mode != COMPOSE_REEDIT &&
+ msginfo->msgid && *msginfo->msgid) {
+ compose->inreplyto = g_strdup(msginfo->msgid);
+
+ if (!compose->references) {
+ if (msginfo->inreplyto && *msginfo->inreplyto)
+ compose->references =
+ g_strdup_printf("<%s>\n\t<%s>",
+ msginfo->inreplyto,
+ msginfo->msgid);
+ else
+ compose->references =
+ g_strconcat("<", msginfo->msgid, ">",
+ NULL);
+ }
+ }
+
+ return 0;
+}
+
+static gchar *compose_parse_references(const gchar *ref, const gchar *msgid)
+{
+ GSList *ref_id_list, *cur;
+ GString *new_ref;
+ gchar *new_ref_str;
+
+ ref_id_list = references_list_append(NULL, ref);
+ if (!ref_id_list) return NULL;
+ if (msgid && *msgid)
+ ref_id_list = g_slist_append(ref_id_list, g_strdup(msgid));
+
+ for (;;) {
+ gint len = 0;
+
+ for (cur = ref_id_list; cur != NULL; cur = cur->next)
+ /* "<" + Message-ID + ">" + CR+LF+TAB */
+ len += strlen((gchar *)cur->data) + 5;
+
+ if (len > MAX_REFERENCES_LEN) {
+ /* remove second message-ID */
+ if (ref_id_list && ref_id_list->next &&
+ ref_id_list->next->next) {
+ g_free(ref_id_list->next->data);
+ ref_id_list = g_slist_remove
+ (ref_id_list, ref_id_list->next->data);
+ } else {
+ slist_free_strings(ref_id_list);
+ g_slist_free(ref_id_list);
+ return NULL;
+ }
+ } else
+ break;
+ }
+
+ new_ref = g_string_new("");
+ for (cur = ref_id_list; cur != NULL; cur = cur->next) {
+ if (new_ref->len > 0)
+ g_string_append(new_ref, "\n\t");
+ g_string_sprintfa(new_ref, "<%s>", (gchar *)cur->data);
+ }
+
+ slist_free_strings(ref_id_list);
+ g_slist_free(ref_id_list);
+
+ new_ref_str = new_ref->str;
+ g_string_free(new_ref, FALSE);
+
+ return new_ref_str;
+}
+
+static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
+ const gchar *fmt, const gchar *qmark,
+ const gchar *body)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ static MsgInfo dummyinfo;
+ gchar *quote_str = NULL;
+ gchar *buf;
+ gchar *p, *lastp;
+ gint len;
+
+ if (!msginfo)
+ msginfo = &dummyinfo;
+
+ if (qmark != NULL) {
+ quote_fmt_init(msginfo, NULL, NULL);
+ quote_fmt_scan_string(qmark);
+ quote_fmt_parse();
+
+ buf = quote_fmt_get_buffer();
+ if (buf == NULL)
+ alertpanel_error(_("Quote mark format error."));
+ else
+ Xstrdup_a(quote_str, buf, return NULL)
+ }
+
+ if (fmt && *fmt != '\0') {
+ quote_fmt_init(msginfo, quote_str, body);
+ quote_fmt_scan_string(fmt);
+ quote_fmt_parse();
+
+ buf = quote_fmt_get_buffer();
+ if (buf == NULL) {
+ alertpanel_error(_("Message reply/forward format error."));
+ return NULL;
+ }
+ } else
+ buf = "";
+
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ for (p = buf; *p != '\0'; ) {
+ lastp = strchr(p, '\n');
+ len = lastp ? lastp - p + 1 : -1;
+ gtk_text_buffer_insert(buffer, &iter, p, len);
+ if (lastp)
+ p = lastp + 1;
+ else
+ break;
+ }
+
+ return buf;
+}
+
+static void compose_reply_set_entry(Compose *compose, MsgInfo *msginfo,
+ ComposeMode mode)
+{
+ GSList *cc_list = NULL;
+ GSList *cur;
+ gchar *from = NULL;
+ gchar *replyto = NULL;
+ GHashTable *to_table;
+ gboolean to_all = FALSE, to_ml = FALSE, ignore_replyto = FALSE;
+
+ g_return_if_fail(compose->account != NULL);
+ g_return_if_fail(msginfo != NULL);
+
+ switch (COMPOSE_MODE(mode)) {
+ case COMPOSE_REPLY_TO_SENDER:
+ ignore_replyto = TRUE;
+ break;
+ case COMPOSE_REPLY_TO_ALL:
+ to_all = TRUE;
+ break;
+ case COMPOSE_REPLY_TO_LIST:
+ to_ml = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ if (compose->account->protocol != A_NNTP) {
+ if (!compose->replyto && to_ml && compose->ml_post)
+ compose_entry_set(compose, compose->ml_post,
+ COMPOSE_ENTRY_TO);
+ else
+ compose_entry_set(compose,
+ (compose->replyto && !ignore_replyto)
+ ? compose->replyto
+ : msginfo->from ? msginfo->from : "",
+ COMPOSE_ENTRY_TO);
+ } else {
+ if (ignore_replyto) {
+ compose_entry_set(compose,
+ msginfo->from ? msginfo->from : "",
+ COMPOSE_ENTRY_TO);
+ } else {
+ compose_entry_set(compose,
+ compose->followup_to ? compose->followup_to
+ : compose->newsgroups ? compose->newsgroups
+ : "",
+ COMPOSE_ENTRY_NEWSGROUPS);
+ }
+ }
+
+ if (msginfo->subject && *msginfo->subject) {
+ gchar *buf;
+ guchar *p;
+
+ buf = g_strdup(msginfo->subject);
+
+ if (msginfo->folder && msginfo->folder->trim_compose_subject)
+ trim_subject(buf);
+
+ while (!strncasecmp(buf, "Re:", 3)) {
+ p = buf + 3;
+ while (isspace(*p)) p++;
+ memmove(buf, p, strlen(p) + 1);
+ }
+
+ compose_entry_set(compose, "Re: ", COMPOSE_ENTRY_SUBJECT);
+ compose_entry_append(compose, buf, COMPOSE_ENTRY_SUBJECT);
+
+ g_free(buf);
+ } else
+ compose_entry_set(compose, "Re: ", COMPOSE_ENTRY_SUBJECT);
+
+ if (!compose->replyto && to_ml && compose->ml_post) return;
+ if (!to_all || compose->account->protocol == A_NNTP) return;
+
+ if (compose->replyto) {
+ Xstrdup_a(replyto, compose->replyto, return);
+ extract_address(replyto);
+ }
+ if (msginfo->from) {
+ Xstrdup_a(from, msginfo->from, return);
+ extract_address(from);
+ }
+
+ if (replyto && from)
+ cc_list = address_list_append(cc_list, from);
+ cc_list = address_list_append(cc_list, msginfo->to);
+ cc_list = address_list_append(cc_list, compose->cc);
+
+ to_table = g_hash_table_new(g_str_hash, g_str_equal);
+ if (replyto)
+ g_hash_table_insert(to_table, replyto, GINT_TO_POINTER(1));
+ if (compose->account)
+ g_hash_table_insert(to_table, compose->account->address,
+ GINT_TO_POINTER(1));
+
+ /* remove address on To: and that of current account */
+ for (cur = cc_list; cur != NULL; ) {
+ GSList *next = cur->next;
+
+ if (g_hash_table_lookup(to_table, cur->data) != NULL)
+ cc_list = g_slist_remove(cc_list, cur->data);
+ else
+ g_hash_table_insert(to_table, cur->data, cur);
+
+ cur = next;
+ }
+ g_hash_table_destroy(to_table);
+
+ if (cc_list) {
+ for (cur = cc_list; cur != NULL; cur = cur->next)
+ compose_entry_append(compose, (gchar *)cur->data,
+ COMPOSE_ENTRY_CC);
+ slist_free_strings(cc_list);
+ g_slist_free(cc_list);
+ }
+}
+
+static void compose_reedit_set_entry(Compose *compose, MsgInfo *msginfo)
+{
+ g_return_if_fail(msginfo != NULL);
+
+ compose_entry_set(compose, msginfo->to , COMPOSE_ENTRY_TO);
+ compose_entry_set(compose, compose->cc , COMPOSE_ENTRY_CC);
+ compose_entry_set(compose, compose->bcc , COMPOSE_ENTRY_BCC);
+ compose_entry_set(compose, compose->replyto, COMPOSE_ENTRY_REPLY_TO);
+ compose_entry_set(compose, msginfo->subject, COMPOSE_ENTRY_SUBJECT);
+}
+
+static void compose_insert_sig(Compose *compose, gboolean replace)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ gint cur_pos;
+
+ g_return_if_fail(compose->account != NULL);
+
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+ cur_pos = gtk_text_iter_get_offset(&iter);
+
+ if (replace)
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+
+ if (replace && compose->sig_str) {
+ GtkTextIter first_iter, start_iter, end_iter;
+ gboolean found;
+
+ gtk_text_buffer_get_start_iter(buffer, &first_iter);
+
+ if (compose->sig_str[0] == '\0')
+ found = FALSE;
+ else
+ found = gtk_text_iter_forward_search
+ (&first_iter, compose->sig_str,
+ GTK_TEXT_SEARCH_TEXT_ONLY,
+ &start_iter, &end_iter, NULL);
+
+ if (found)
+ gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
+ }
+
+ g_free(compose->sig_str);
+ compose->sig_str = compose_get_signature_str(compose);
+ if (compose->sig_str) {
+ if (!replace)
+ gtk_text_buffer_insert(buffer, &iter, "\n\n", 2);
+ gtk_text_buffer_insert(buffer, &iter, compose->sig_str, -1);
+ } else
+ compose->sig_str = g_strdup("");
+
+ if (cur_pos > gtk_text_buffer_get_char_count(buffer))
+ cur_pos = gtk_text_buffer_get_char_count(buffer);
+
+ gtk_text_buffer_get_iter_at_offset(buffer, &iter, cur_pos);
+ gtk_text_buffer_move_mark(buffer, mark, &iter);
+}
+
+static gchar *compose_get_signature_str(Compose *compose)
+{
+ gchar *sig_body = NULL;
+ gchar *sig_str = NULL;
+ gchar *utf8_sig_str = NULL;
+
+ g_return_val_if_fail(compose->account != NULL, NULL);
+
+ if (!compose->account->sig_path)
+ return NULL;
+
+ if (compose->account->sig_type == SIG_FILE) {
+ if (!is_file_or_fifo_exist(compose->account->sig_path)) {
+ g_warning("can't open signature file: %s\n",
+ compose->account->sig_path);
+ return NULL;
+ }
+ }
+
+ if (compose->account->sig_type == SIG_COMMAND)
+ sig_body = get_command_output(compose->account->sig_path);
+ else {
+ gchar *tmp;
+
+ tmp = file_read_to_str(compose->account->sig_path);
+ if (!tmp)
+ return NULL;
+ sig_body = normalize_newlines(tmp);
+ g_free(tmp);
+ }
+
+ if (prefs_common.sig_sep) {
+ sig_str = g_strconcat(prefs_common.sig_sep, "\n", sig_body,
+ NULL);
+ g_free(sig_body);
+ } else
+ sig_str = sig_body;
+
+ if (sig_str) {
+ utf8_sig_str = conv_codeset_strdup
+ (sig_str, conv_get_locale_charset_str(), CS_UTF_8);
+ g_free(sig_str);
+ }
+
+ return utf8_sig_str;
+}
+
+static void compose_insert_file(Compose *compose, const gchar *file)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ const gchar *cur_encoding;
+ gchar buf[BUFFSIZE];
+ gint len;
+ FILE *fp;
+
+ g_return_if_fail(file != NULL);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return;
+ }
+
+ buffer = gtk_text_view_get_buffer(text);
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ cur_encoding = conv_get_locale_charset_str();
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ gchar *str;
+
+ str = conv_codeset_strdup(buf, cur_encoding, CS_UTF_8);
+ if (!str) continue;
+
+ /* strip <CR> if DOS/Windows file,
+ replace <CR> with <LF> if Macintosh file. */
+ strcrchomp(str);
+ len = strlen(str);
+ if (len > 0 && str[len - 1] != '\n') {
+ while (--len >= 0)
+ if (str[len] == '\r') str[len] = '\n';
+ }
+
+ gtk_text_buffer_insert(buffer, &iter, str, -1);
+ g_free(str);
+ }
+
+ fclose(fp);
+}
+
+static void compose_attach_append(Compose *compose, const gchar *file,
+ const gchar *filename,
+ const gchar *content_type)
+{
+ AttachInfo *ainfo;
+ gchar *text[N_ATTACH_COLS];
+ FILE *fp;
+ off_t size;
+ gint row;
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(*file != '\0');
+
+ if (!is_file_exist(file)) {
+ g_warning(_("File %s doesn't exist\n"), file);
+ return;
+ }
+ if ((size = get_file_size(file)) < 0) {
+ g_warning(_("Can't get file size of %s\n"), file);
+ return;
+ }
+ if (size == 0) {
+ alertpanel_notice(_("File %s is empty."), file);
+ return;
+ }
+ if ((fp = fopen(file, "rb")) == NULL) {
+ alertpanel_error(_("Can't read %s."), file);
+ return;
+ }
+ fclose(fp);
+
+ compose_changed_cb(NULL, compose);
+
+ if (!compose->use_attach) {
+ GtkItemFactory *ifactory;
+
+ ifactory = gtk_item_factory_from_widget(compose->menubar);
+ menu_set_active(ifactory, "/View/Attachment", TRUE);
+ }
+
+ ainfo = g_new0(AttachInfo, 1);
+ ainfo->file = g_strdup(file);
+
+ if (content_type) {
+ ainfo->content_type = g_strdup(content_type);
+ if (!strcasecmp(content_type, "message/rfc822")) {
+ MsgInfo *msginfo;
+ MsgFlags flags = {0, 0};
+ const gchar *name;
+
+ if (procmime_get_encoding_for_text_file(file) == ENC_7BIT)
+ ainfo->encoding = ENC_7BIT;
+ else
+ ainfo->encoding = ENC_8BIT;
+
+ msginfo = procheader_parse_file(file, flags, FALSE);
+ if (msginfo && msginfo->subject)
+ name = msginfo->subject;
+ else
+ name = g_basename(filename ? filename : file);
+
+ ainfo->name = g_strdup_printf(_("Message: %s"), name);
+
+ procmsg_msginfo_free(msginfo);
+ } else {
+ if (!g_strncasecmp(content_type, "text", 4))
+ ainfo->encoding = procmime_get_encoding_for_text_file(file);
+ else
+ ainfo->encoding = ENC_BASE64;
+ ainfo->name = g_strdup
+ (g_basename(filename ? filename : file));
+ }
+ } else {
+ ainfo->content_type = procmime_get_mime_type(file);
+ if (!ainfo->content_type) {
+ ainfo->content_type =
+ g_strdup("application/octet-stream");
+ ainfo->encoding = ENC_BASE64;
+ } else if (!g_strncasecmp(ainfo->content_type, "text", 4))
+ ainfo->encoding =
+ procmime_get_encoding_for_text_file(file);
+ else
+ ainfo->encoding = ENC_BASE64;
+ ainfo->name = g_strdup(g_basename(filename ? filename : file));
+ }
+ ainfo->size = size;
+
+ text[COL_MIMETYPE] = ainfo->content_type;
+ text[COL_SIZE] = to_human_readable(size);
+ text[COL_NAME] = ainfo->name;
+
+ row = gtk_clist_append(GTK_CLIST(compose->attach_clist), text);
+ gtk_clist_set_row_data(GTK_CLIST(compose->attach_clist), row, ainfo);
+}
+
+#define IS_FIRST_PART_TEXT(info) \
+ ((info->mime_type == MIME_TEXT || info->mime_type == MIME_TEXT_HTML) || \
+ (info->mime_type == MIME_MULTIPART && info->content_type && \
+ !strcasecmp(info->content_type, "multipart/alternative") && \
+ (info->children && \
+ (info->children->mime_type == MIME_TEXT || \
+ info->children->mime_type == MIME_TEXT_HTML))))
+
+static void compose_attach_parts(Compose *compose, MsgInfo *msginfo)
+{
+ MimeInfo *mimeinfo;
+ MimeInfo *child;
+ gchar *infile;
+ gchar *outfile;
+
+ mimeinfo = procmime_scan_message(msginfo);
+ if (!mimeinfo) return;
+
+ /* skip first text (presumably message body) */
+ child = mimeinfo->children;
+ if (!child || IS_FIRST_PART_TEXT(mimeinfo)) {
+ procmime_mimeinfo_free_all(mimeinfo);
+ return;
+ }
+ if (IS_FIRST_PART_TEXT(child))
+ child = child->next;
+
+ infile = procmsg_get_message_file_path(msginfo);
+
+ while (child != NULL) {
+ if (child->children || child->mime_type == MIME_MULTIPART) {
+ child = procmime_mimeinfo_next(child);
+ continue;
+ }
+
+ outfile = procmime_get_tmp_file_name(child);
+ if (procmime_get_part(outfile, infile, child) < 0)
+ g_warning(_("Can't get the part of multipart message."));
+ else
+ compose_attach_append
+ (compose, outfile,
+ child->filename ? child->filename : child->name,
+ child->content_type);
+
+ child = child->next;
+ }
+
+ g_free(infile);
+ procmime_mimeinfo_free_all(mimeinfo);
+}
+
+#undef IS_FIRST_PART_TEXT
+
+#define CHAR_BUF_SIZE 8
+
+#define GET_CHAR(iter_p, buf, len) \
+{ \
+ GtkTextIter end_iter; \
+ gchar *tmp; \
+ end_iter = *iter_p; \
+ \
+ gtk_text_iter_forward_char(&end_iter); \
+ tmp = gtk_text_buffer_get_text(textbuf, iter_p, &end_iter, FALSE); \
+ if (tmp) { \
+ glong items_read, items_witten; \
+ GError *error = NULL; \
+ gunichar *wide_char; \
+ \
+ strncpy2(buf, tmp, CHAR_BUF_SIZE); \
+ wide_char = g_utf8_to_ucs4(tmp, -1, \
+ &items_read, &items_witten, \
+ &error); \
+ if (error != NULL) { \
+ g_warning("%s\n", error->message); \
+ g_error_free(error); \
+ } \
+ len = wide_char && g_unichar_iswide(*wide_char) ? 2 : 1; \
+ g_free(wide_char); \
+ } else { \
+ buf[0] = '\0'; \
+ len = 1; \
+ } \
+ g_free(tmp); \
+}
+
+#define INDENT_CHARS ">|#"
+#define SPACE_CHARS " \t"
+
+#warning FIXME_GTK2
+static void compose_wrap_line(Compose *compose)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *textbuf;
+ GtkTextMark *mark;
+ GtkTextIter insert_iter, iter;
+ gint ch_len, last_ch_len;
+ gchar cbuf[CHAR_BUF_SIZE], last_ch;
+ guint text_len;
+ gint p_start, p_end;
+ gint line_pos, cur_pos;
+ gint line_len, cur_len;
+ gboolean line_end;
+ gboolean quoted;
+
+ textbuf = gtk_text_view_get_buffer(text);
+ text_len = gtk_text_buffer_get_char_count(textbuf);
+ mark = gtk_text_buffer_get_insert(textbuf);
+ gtk_text_buffer_get_iter_at_mark(textbuf, &insert_iter, mark);
+ cur_pos = gtk_text_iter_get_offset(&insert_iter);
+ GET_CHAR(&insert_iter, cbuf, ch_len);
+
+ if ((ch_len == 1 && *cbuf == '\n') || cur_pos == text_len) {
+ GtkTextIter prev_iter;
+
+ if (cur_pos == 0)
+ return; /* on the paragraph mark */
+ prev_iter = insert_iter;
+ gtk_text_iter_backward_char(&prev_iter);
+ GET_CHAR(&prev_iter, cbuf, ch_len);
+ if (ch_len == 1 && *cbuf == '\n')
+ return; /* on the paragraph mark */
+ }
+
+ /* find paragraph start. */
+ line_end = quoted = FALSE;
+ for (iter = insert_iter; gtk_text_iter_backward_char(&iter); ) {
+ GET_CHAR(&iter, cbuf, ch_len);
+ if (ch_len == 1 && *cbuf == '\n') {
+ if (quoted)
+ return; /* quoted part */
+ if (line_end) {
+ gtk_text_iter_forward_chars(&iter, 2);
+ break;
+ }
+ line_end = TRUE;
+ } else {
+ if (ch_len == 1 && strchr(INDENT_CHARS, *cbuf))
+ quoted = TRUE;
+ else if (ch_len != 1 || !isspace(*(guchar *)cbuf))
+ quoted = FALSE;
+
+ line_end = FALSE;
+ }
+ }
+ p_start = gtk_text_iter_get_offset(&iter);
+
+ /* find paragraph end. */
+ line_end = FALSE;
+ for (iter = insert_iter; gtk_text_iter_forward_char(&iter); ) {
+ GET_CHAR(&iter, cbuf, ch_len);
+ if (ch_len == 1 && *cbuf == '\n') {
+ if (line_end) {
+ gtk_text_iter_backward_char(&iter);
+ break;
+ }
+ line_end = TRUE;
+ } else {
+ if (line_end && ch_len == 1 &&
+ strchr(INDENT_CHARS, *cbuf))
+ return; /* quoted part */
+
+ line_end = FALSE;
+ }
+ }
+ p_end = gtk_text_iter_get_offset(&iter);
+
+ if (p_end >= text_len)
+ p_end = text_len;
+
+ if (p_start >= p_end)
+ return;
+
+ line_len = cur_len = 0;
+ last_ch_len = 0;
+ last_ch = '\0';
+ line_pos = p_start;
+ for (cur_pos = p_start; cur_pos < p_end; cur_pos++) {
+ gboolean space = FALSE;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter, cur_pos);
+ GET_CHAR(&iter, cbuf, ch_len);
+
+ if (ch_len < 0) {
+ cbuf[0] = '\0';
+ ch_len = 1;
+ }
+
+ if (ch_len == 1 && isspace(*(guchar *)cbuf))
+ space = TRUE;
+
+ if (ch_len == 1 && *cbuf == '\n') {
+ gboolean replace = FALSE;
+ GtkTextIter next_iter = iter;
+
+ gtk_text_iter_forward_char(&next_iter);
+
+ if (last_ch_len == 1 && !isspace((guchar)last_ch)) {
+ if (cur_pos + 1 < p_end) {
+ GET_CHAR(&next_iter, cbuf, ch_len);
+ if (ch_len == 1 &&
+ !isspace(*(guchar *)cbuf))
+ replace = TRUE;
+ }
+ }
+ gtk_text_buffer_delete(textbuf, &iter, &next_iter);
+ if (replace) {
+ gtk_text_buffer_insert(textbuf, &iter, " ", 1);
+ space = TRUE;
+ } else {
+ p_end--;
+ cur_pos--;
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, cur_pos);
+ continue;
+ }
+ }
+
+ last_ch_len = ch_len;
+ last_ch = *cbuf;
+
+ if (space) {
+ line_pos = cur_pos + 1;
+ line_len = cur_len + ch_len;
+ }
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter, line_pos);
+
+ if (cur_len + ch_len > prefs_common.linewrap_len &&
+ line_len > 0) {
+ gint tlen = ch_len;
+ GtkTextIter prev_iter = iter;
+
+ gtk_text_iter_backward_char(&prev_iter);
+
+ if (ch_len == 1 && isspace(*(guchar *)cbuf)) {
+ gtk_text_buffer_delete
+ (textbuf, &prev_iter, &iter);
+ iter = prev_iter;
+ p_end--;
+ cur_pos--;
+ line_pos--;
+ cur_len--;
+ line_len--;
+ }
+ ch_len = tlen;
+
+ gtk_text_buffer_insert(textbuf, &iter, "\n", 1);
+ p_end++;
+ cur_pos++;
+ line_pos++;
+ cur_len = cur_len - line_len + ch_len;
+ line_len = 0;
+ continue;
+ }
+
+ if (ch_len > 1) {
+ line_pos = cur_pos + 1;
+ line_len = cur_len + ch_len;
+ }
+ cur_len += ch_len;
+ }
+}
+
+#undef WRAP_DEBUG
+#ifdef WRAP_DEBUG
+/* Darko: used when I debug wrapping */
+void dump_text(GtkTextBuffer *textbuf, int pos, int tlen, int breakoncr)
+{
+ gint clen;
+ gchar cbuf[CHAR_BUF_SIZE];
+
+ printf("%d [", pos);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter, pos);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, pos + tlen);
+ for (; gtk_text_iter_forward_char(&iter) &&
+ gtk_text_iter_compare(&iter, &end_iter) < 0; ) {
+ GET_CHAR(&iter, cbuf, clen);
+ if (clen < 0) break;
+ if (breakoncr && clen == 1 && cbuf[0] == '\n')
+ break;
+ fwrite(cbuf, clen, 1, stdout);
+ }
+ printf("]\n");
+}
+#endif
+
+typedef enum {
+ WAIT_FOR_SPACE,
+ WAIT_FOR_INDENT_CHAR,
+ WAIT_FOR_INDENT_CHAR_OR_SPACE
+} IndentState;
+
+/* return indent length, we allow:
+ > followed by spaces/tabs
+ | followed by spaces/tabs
+ uppercase characters immediately followed by >,
+ and the repeating sequences of the above */
+/* return indent length */
+static guint get_indent_length(GtkTextBuffer *textbuf, guint start_pos,
+ guint text_len)
+{
+ guint i_len = 0;
+ guint i, ch_len, alnum_cnt = 0;
+ IndentState state = WAIT_FOR_INDENT_CHAR;
+ gchar cbuf[CHAR_BUF_SIZE];
+ gboolean is_space;
+ gboolean is_indent;
+
+#warning FIXME_GTK2 use GtkTextIter
+ for (i = start_pos; i < text_len; i++) {
+ GtkTextIter iter;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter, i);
+ GET_CHAR(&iter, cbuf, ch_len);
+ if (ch_len > 1)
+ break;
+
+ if (cbuf[0] == '\n')
+ break;
+
+ is_indent = strchr(INDENT_CHARS, cbuf[0]) ? TRUE : FALSE;
+ is_space = strchr(SPACE_CHARS, cbuf[0]) ? TRUE : FALSE;
+
+ switch (state) {
+ case WAIT_FOR_SPACE:
+ if (is_space == FALSE)
+ goto out;
+ state = WAIT_FOR_INDENT_CHAR_OR_SPACE;
+ break;
+ case WAIT_FOR_INDENT_CHAR_OR_SPACE:
+ if (is_indent == FALSE && is_space == FALSE &&
+ !isupper((guchar)cbuf[0]))
+ goto out;
+ if (is_space == TRUE) {
+ alnum_cnt = 0;
+ state = WAIT_FOR_INDENT_CHAR_OR_SPACE;
+ } else if (is_indent == TRUE) {
+ alnum_cnt = 0;
+ state = WAIT_FOR_SPACE;
+ } else {
+ alnum_cnt++;
+ state = WAIT_FOR_INDENT_CHAR;
+ }
+ break;
+ case WAIT_FOR_INDENT_CHAR:
+ if (is_indent == FALSE && !isupper((guchar)cbuf[0]))
+ goto out;
+ if (is_indent == TRUE) {
+ alnum_cnt = 0;
+ state = WAIT_FOR_SPACE;
+ } else {
+ alnum_cnt++;
+ }
+ break;
+ }
+
+ i_len++;
+ }
+
+out:
+ if ((i_len > 0) && (state == WAIT_FOR_INDENT_CHAR))
+ i_len -= alnum_cnt;
+
+ return i_len;
+}
+
+/* insert quotation string when line was wrapped */
+static guint ins_quote(GtkTextBuffer *textbuf, GtkTextIter *iter,
+ guint indent_len,
+ guint prev_line_pos, guint text_len,
+ gchar *quote_fmt)
+{
+ guint ins_len = 0;
+
+ if (indent_len) {
+ GtkTextIter iter1, iter2;
+ gchar *text;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter1,
+ prev_line_pos);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter2,
+ prev_line_pos + indent_len);
+ text = gtk_text_buffer_get_text(textbuf, &iter1, &iter2, FALSE);
+ if (!text) return 0;
+
+ gtk_text_buffer_insert(textbuf, iter, text, -1);
+ ins_len = g_utf8_strlen(text, -1);
+
+ g_free(text);
+ }
+
+ return ins_len;
+}
+
+/* check if we should join the next line */
+static gboolean join_next_line_is_needed(GtkTextBuffer *textbuf,
+ guint start_pos, guint tlen,
+ guint prev_ilen, gboolean autowrap)
+{
+ guint indent_len, ch_len;
+ gboolean do_join = FALSE;
+ gchar cbuf[CHAR_BUF_SIZE];
+
+ indent_len = get_indent_length(textbuf, start_pos, tlen);
+
+ if ((autowrap || indent_len > 0) && indent_len == prev_ilen) {
+ GtkTextIter iter;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter,
+ start_pos + indent_len);
+ GET_CHAR(&iter, cbuf, ch_len);
+ if (ch_len > 0 && (cbuf[0] != '\n'))
+ do_join = TRUE;
+ }
+
+ return do_join;
+}
+
+static void compose_wrap_line_all(Compose *compose)
+{
+ compose_wrap_line_all_full(compose, FALSE);
+}
+
+static void compose_wrap_line_all_full(Compose *compose, gboolean autowrap)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *textbuf;
+ GtkTextIter iter, end_iter;
+ guint tlen;
+ guint line_pos = 0, cur_pos = 0, p_pos = 0;
+ gint line_len = 0, cur_len = 0;
+ gint ch_len;
+ gboolean is_new_line = TRUE, do_delete = FALSE;
+ guint i_len = 0;
+ gboolean linewrap_quote = TRUE;
+ gboolean set_editable_pos = FALSE;
+ gint editable_pos = 0;
+ guint linewrap_len = prefs_common.linewrap_len;
+ gchar *qfmt = prefs_common.quotemark;
+ gchar cbuf[CHAR_BUF_SIZE];
+
+ textbuf = gtk_text_view_get_buffer(text);
+ tlen = gtk_text_buffer_get_char_count(textbuf);
+
+ for (; cur_pos < tlen; cur_pos++) {
+ /* mark position of new line - needed for quotation wrap */
+ if (is_new_line) {
+ if (linewrap_quote)
+ i_len = get_indent_length
+ (textbuf, cur_pos, tlen);
+
+ is_new_line = FALSE;
+ p_pos = cur_pos;
+ }
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &iter, cur_pos);
+ GET_CHAR(&iter, cbuf, ch_len);
+
+ /* fix line length for tabs */
+ if (ch_len == 1 && *cbuf == '\t') {
+ guint tab_width = 8;
+ guint tab_offset = line_len % tab_width;
+
+ if (tab_offset) {
+ line_len += tab_width - tab_offset - 1;
+ cur_len = line_len;
+ }
+ }
+
+ /* we have encountered line break */
+ if (ch_len == 1 && *cbuf == '\n') {
+ gint clen;
+ gchar cb[CHAR_BUF_SIZE];
+
+ /* should we join the next line */
+ if ((autowrap || i_len != cur_len) && do_delete &&
+ join_next_line_is_needed
+ (textbuf, cur_pos + 1, tlen, i_len, autowrap))
+ do_delete = TRUE;
+ else
+ do_delete = FALSE;
+
+ /* skip delete if it is continuous URL */
+ if (do_delete && (line_pos - p_pos <= i_len) &&
+ gtkut_text_buffer_is_uri_string(textbuf, line_pos,
+ tlen))
+ do_delete = FALSE;
+
+ /* should we delete to perform smart wrapping */
+ if (line_len < linewrap_len && do_delete) {
+ /* get rid of newline */
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, cur_pos);
+ end_iter = iter;
+ gtk_text_iter_forward_char(&end_iter);
+ gtk_text_buffer_delete
+ (textbuf, &iter, &end_iter);
+ tlen--;
+
+ /* if text starts with quote fmt or with
+ indent string, delete them */
+ if (i_len) {
+ guint ilen;
+ ilen = gtkut_text_buffer_str_compare_n
+ (textbuf, cur_pos, p_pos, i_len,
+ tlen);
+ if (ilen) {
+ end_iter = iter;
+ gtk_text_iter_forward_chars
+ (&end_iter, ilen);
+ gtk_text_buffer_delete
+ (textbuf,
+ &iter, &end_iter);
+ tlen -= ilen;
+ }
+ }
+
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, cur_pos);
+ GET_CHAR(&iter, cb, clen);
+ /* insert space between the next line */
+ if (cur_pos > 0) {
+ gint clen_prev;
+ gchar cb_prev[MB_LEN_MAX];
+ GtkTextIter iter_prev = iter;
+
+ gtk_text_iter_backward_char(&iter_prev);
+ GET_CHAR(&iter_prev, cb_prev,
+ clen_prev);
+ if ((clen_prev != clen && clen > 1) ||
+ (clen == 1 &&
+ !isspace((guchar)cb[0]))) {
+ gtk_text_buffer_insert
+ (textbuf, &iter,
+ " ", 1);
+ tlen++;
+ }
+ }
+
+ /* and start over with current line */
+ cur_pos = p_pos - 1;
+ line_pos = cur_pos;
+ line_len = cur_len = 0;
+ do_delete = FALSE;
+ is_new_line = TRUE;
+ /* move beginning of line if we are on
+ linebreak */
+#warning FIXME_GTK2
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, line_pos);
+ GET_CHAR(&iter, cb, clen);
+ if (clen == 1 && *cb == '\n')
+ line_pos++;
+ continue;
+ }
+
+ /* mark new line beginning */
+ line_pos = cur_pos + 1;
+ line_len = cur_len = 0;
+ do_delete = FALSE;
+ is_new_line = TRUE;
+ continue;
+ }
+
+ if (ch_len < 0) {
+ cbuf[0] = '\0';
+ ch_len = 1;
+ }
+
+ /* possible line break */
+ if (ch_len == 1 && isspace(*(guchar *)cbuf)) {
+ line_pos = cur_pos + 1;
+ line_len = cur_len + ch_len;
+ }
+
+ /* are we over wrapping length set in preferences ? */
+ if (cur_len + ch_len > linewrap_len) {
+ gint clen;
+
+ /* force wrapping if it is one long word but not URL */
+ if (line_pos - p_pos <= i_len)
+ if (!gtkut_text_buffer_is_uri_string
+ (textbuf, line_pos, tlen))
+ line_pos = cur_pos - 1;
+
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, line_pos);
+ GET_CHAR(&iter, cbuf, clen);
+
+ /* if next character is space delete it */
+ if (clen == 1 && isspace(*(guchar *)cbuf)) {
+ if (p_pos + i_len != line_pos ||
+ !gtkut_text_buffer_is_uri_string
+ (textbuf, line_pos, tlen)) {
+ /* workaround for correct cursor
+ position */
+ if (set_editable_pos == FALSE) {
+ GtkTextMark *mark;
+
+ mark = gtk_text_buffer_get_insert(textbuf);
+ gtk_text_buffer_get_iter_at_mark(textbuf, &iter, mark);
+ editable_pos = gtk_text_iter_get_offset(&iter);
+ if (editable_pos == line_pos)
+ set_editable_pos = TRUE;
+ }
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, line_pos);
+ end_iter = iter;
+ gtk_text_iter_backward_char(&end_iter);
+ gtk_text_buffer_delete
+ (textbuf, &iter, &end_iter);
+ tlen--;
+ cur_pos--;
+ line_pos--;
+ cur_len--;
+ line_len--;
+ }
+ }
+
+ /* if it is URL at beginning of line don't wrap */
+ if (p_pos + i_len == line_pos &&
+ gtkut_text_buffer_is_uri_string(textbuf,
+ line_pos, tlen)) {
+ continue;
+ }
+
+ /* insert CR */
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, line_pos);
+ gtk_text_buffer_insert(textbuf, &iter, "\n", 1);
+ tlen++;
+ line_pos++;
+ /* for loop will increase it */
+ cur_pos = line_pos - 1;
+ /* start over with current line */
+ is_new_line = TRUE;
+ line_len = cur_len = 0;
+ if (autowrap || i_len > 0)
+ do_delete = TRUE;
+ else
+ do_delete = FALSE;
+
+ /* should we insert quotation ? */
+ if (linewrap_quote && i_len) {
+ /* only if line is not already quoted */
+ if (!gtkut_text_buffer_str_compare
+ (textbuf, line_pos, tlen, qfmt)) {
+ guint ins_len;
+
+ if (line_pos - p_pos > i_len) {
+ ins_len = ins_quote
+ (textbuf, &iter, i_len,
+ p_pos, tlen, qfmt);
+ tlen += ins_len;
+ }
+ }
+ }
+ continue;
+ }
+
+ if (ch_len > 1) {
+ line_pos = cur_pos + 1;
+ line_len = cur_len + ch_len;
+ }
+ /* advance to next character in buffer */
+ cur_len += ch_len;
+ }
+
+ if (set_editable_pos && editable_pos <= tlen) {
+ gtk_text_buffer_get_iter_at_offset
+ (textbuf, &iter, editable_pos);
+ gtk_text_buffer_place_cursor(textbuf, &iter);
+ }
+}
+
+#undef GET_CHAR
+#undef CHAR_BUF_SIZE
+
+static void compose_set_title(Compose *compose)
+{
+ gchar *str;
+ gchar *edited;
+
+ edited = compose->modified ? _(" [Edited]") : "";
+ if (compose->account && compose->account->address)
+ str = g_strdup_printf(_("%s - Compose message%s"),
+ compose->account->address, edited);
+ else
+ str = g_strdup_printf(_("Compose message%s"), edited);
+ gtk_window_set_title(GTK_WINDOW(compose->window), str);
+ g_free(str);
+}
+
+static void compose_select_account(Compose *compose, PrefsAccount *account,
+ gboolean init)
+{
+ GtkItemFactory *ifactory;
+
+ g_return_if_fail(account != NULL);
+
+ compose->account = account;
+
+ compose_set_title(compose);
+
+ ifactory = gtk_item_factory_from_widget(compose->menubar);
+
+ if (account->protocol == A_NNTP) {
+ gtk_widget_show(compose->newsgroups_hbox);
+ gtk_widget_show(compose->newsgroups_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 2, 4);
+ compose->use_newsgroups = TRUE;
+
+ menu_set_active(ifactory, "/View/To", FALSE);
+ menu_set_sensitive(ifactory, "/View/To", TRUE);
+ menu_set_active(ifactory, "/View/Cc", FALSE);
+ menu_set_sensitive(ifactory, "/View/Cc", TRUE);
+ menu_set_sensitive(ifactory, "/View/Followup to", TRUE);
+ } else {
+ gtk_widget_hide(compose->newsgroups_hbox);
+ gtk_widget_hide(compose->newsgroups_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 2, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_newsgroups = FALSE;
+
+ menu_set_active(ifactory, "/View/To", TRUE);
+ menu_set_sensitive(ifactory, "/View/To", FALSE);
+ menu_set_active(ifactory, "/View/Cc", TRUE);
+ menu_set_sensitive(ifactory, "/View/Cc", FALSE);
+ menu_set_active(ifactory, "/View/Followup to", FALSE);
+ menu_set_sensitive(ifactory, "/View/Followup to", FALSE);
+ }
+
+ if (account->set_autocc) {
+ compose_entry_show(compose, COMPOSE_ENTRY_CC);
+ if (account->auto_cc && compose->mode != COMPOSE_REEDIT)
+ compose_entry_set(compose, account->auto_cc,
+ COMPOSE_ENTRY_CC);
+ }
+ if (account->set_autobcc) {
+ compose_entry_show(compose, COMPOSE_ENTRY_BCC);
+ if (account->auto_bcc && compose->mode != COMPOSE_REEDIT)
+ compose_entry_set(compose, account->auto_bcc,
+ COMPOSE_ENTRY_BCC);
+ }
+ if (account->set_autoreplyto) {
+ compose_entry_show(compose, COMPOSE_ENTRY_REPLY_TO);
+ if (account->auto_replyto && compose->mode != COMPOSE_REEDIT)
+ compose_entry_set(compose, account->auto_replyto,
+ COMPOSE_ENTRY_REPLY_TO);
+ }
+
+#if USE_GPGME
+ if (account->default_sign)
+ menu_set_active(ifactory, "/Tools/PGP Sign", TRUE);
+ if (account->default_encrypt)
+ menu_set_active(ifactory, "/Tools/PGP Encrypt", TRUE);
+#endif /* USE_GPGME */
+
+ if (!init && compose->mode != COMPOSE_REDIRECT && prefs_common.auto_sig)
+ compose_insert_sig(compose, TRUE);
+}
+
+static gboolean compose_check_for_valid_recipient(Compose *compose)
+{
+ const gchar *to_raw = "", *cc_raw = "", *bcc_raw = "";
+ const gchar *newsgroups_raw = "";
+ gchar *to, *cc, *bcc;
+ gchar *newsgroups;
+
+ if (compose->use_to)
+ to_raw = gtk_entry_get_text(GTK_ENTRY(compose->to_entry));
+ if (compose->use_cc)
+ cc_raw = gtk_entry_get_text(GTK_ENTRY(compose->cc_entry));
+ if (compose->use_bcc)
+ bcc_raw = gtk_entry_get_text(GTK_ENTRY(compose->bcc_entry));
+ if (compose->use_newsgroups)
+ newsgroups_raw = gtk_entry_get_text
+ (GTK_ENTRY(compose->newsgroups_entry));
+
+ Xstrdup_a(to, to_raw, return FALSE);
+ Xstrdup_a(cc, cc_raw, return FALSE);
+ Xstrdup_a(bcc, bcc_raw, return FALSE);
+ Xstrdup_a(newsgroups, newsgroups_raw, return FALSE);
+ g_strstrip(to);
+ g_strstrip(cc);
+ g_strstrip(bcc);
+ g_strstrip(newsgroups);
+
+ if (*to == '\0' && *cc == '\0' && *bcc == '\0' && *newsgroups == '\0')
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static gboolean compose_check_entries(Compose *compose)
+{
+ const gchar *str;
+
+ if (compose_check_for_valid_recipient(compose) == FALSE) {
+ alertpanel_error(_("Recipient is not specified."));
+ return FALSE;
+ }
+
+ str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry));
+ if (*str == '\0') {
+ AlertValue aval;
+
+ aval = alertpanel(_("Send"),
+ _("Subject is empty. Send it anyway?"),
+ _("Yes"), _("No"), NULL);
+ if (aval != G_ALERTDEFAULT)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gint compose_send(Compose *compose)
+{
+ gchar tmp[MAXPATHLEN + 1];
+ gint ok = 0;
+ static gboolean lock = FALSE;
+
+ if (lock) return 1;
+
+ g_return_val_if_fail(compose->account != NULL, -1);
+
+ lock = TRUE;
+
+ if (compose_check_entries(compose) == FALSE) {
+ lock = FALSE;
+ return 1;
+ }
+
+ if (!main_window_toggle_online_if_offline(main_window_get())) {
+ lock = FALSE;
+ return 1;
+ }
+
+ /* write to temporary file */
+ g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.%p",
+ get_tmp_dir(), G_DIR_SEPARATOR, compose);
+
+ if (compose->mode == COMPOSE_REDIRECT) {
+ if (compose_redirect_write_to_file(compose, tmp) < 0) {
+ lock = FALSE;
+ return -1;
+ }
+ } else {
+ if (prefs_common.linewrap_at_send)
+ compose_wrap_line_all(compose);
+
+ if (compose_write_to_file(compose, tmp, FALSE) < 0) {
+ lock = FALSE;
+ return -1;
+ }
+ }
+
+ if (!compose->to_list && !compose->newsgroup_list) {
+ g_warning(_("can't get recipient list."));
+ unlink(tmp);
+ lock = FALSE;
+ return -1;
+ }
+
+ if (compose->to_list) {
+ PrefsAccount *ac;
+
+ if (compose->account->protocol != A_NNTP)
+ ac = compose->account;
+ else {
+ ac = account_find_from_address(compose->account->address);
+ if (!ac) {
+ if (cur_account && cur_account->protocol != A_NNTP)
+ ac = cur_account;
+ else
+ ac = account_get_default();
+ }
+ if (!ac || ac->protocol == A_NNTP) {
+ alertpanel_error(_("Account for sending mail is not specified.\n"
+ "Please select a mail account before sending."));
+ unlink(tmp);
+ lock = FALSE;
+ return -1;
+ }
+ }
+ ok = send_message(tmp, ac, compose->to_list);
+ statusbar_pop_all();
+ }
+
+ if (ok == 0 && compose->newsgroup_list) {
+ ok = news_post(FOLDER(compose->account->folder), tmp);
+ if (ok < 0) {
+ alertpanel_error(_("Error occurred while posting the message to %s ."),
+ compose->account->nntp_server);
+ unlink(tmp);
+ lock = FALSE;
+ return -1;
+ }
+ }
+
+ if (ok == 0) {
+ if (compose->mode == COMPOSE_REEDIT) {
+ compose_remove_reedit_target(compose);
+ if (compose->targetinfo)
+ folderview_update_item
+ (compose->targetinfo->folder, TRUE);
+ }
+ /* save message to outbox */
+ if (prefs_common.savemsg) {
+ FolderItem *outbox;
+
+ outbox = account_get_special_folder
+ (compose->account, F_OUTBOX);
+ if (procmsg_save_to_outbox(outbox, tmp, FALSE) < 0)
+ alertpanel_error
+ (_("Can't save the message to outbox."));
+ else
+ folderview_update_item(outbox, TRUE);
+ }
+ }
+
+ unlink(tmp);
+ lock = FALSE;
+ return ok;
+}
+
+#if USE_GPGME
+/* interfaces to rfc2015 to keep out the prefs stuff there.
+ * returns 0 on success and -1 on error. */
+static gint compose_create_signers_list(Compose *compose, GSList **pkey_list)
+{
+ const gchar *key_id = NULL;
+ GSList *key_list;
+
+ switch (compose->account->sign_key) {
+ case SIGN_KEY_DEFAULT:
+ *pkey_list = NULL;
+ return 0;
+ case SIGN_KEY_BY_FROM:
+ key_id = compose->account->address;
+ break;
+ case SIGN_KEY_CUSTOM:
+ key_id = compose->account->sign_key_id;
+ break;
+ default:
+ break;
+ }
+
+ key_list = rfc2015_create_signers_list(key_id);
+
+ if (!key_list) {
+ alertpanel_error(_("Could not find any key associated with "
+ "currently selected key id `%s'."), key_id);
+ return -1;
+ }
+
+ *pkey_list = key_list;
+ return 0;
+}
+
+/* clearsign message body text */
+static gint compose_clearsign_text(Compose *compose, gchar **text)
+{
+ GSList *key_list;
+ gchar *tmp_file;
+
+ tmp_file = get_tmp_file();
+ if (str_write_to_file(*text, tmp_file) < 0) {
+ g_free(tmp_file);
+ return -1;
+ }
+
+ if (compose_create_signers_list(compose, &key_list) < 0 ||
+ rfc2015_clearsign(tmp_file, key_list) < 0) {
+ unlink(tmp_file);
+ g_free(tmp_file);
+ return -1;
+ }
+
+ g_free(*text);
+ *text = file_read_to_str(tmp_file);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ if (*text == NULL)
+ return -1;
+
+ return 0;
+}
+#endif /* USE_GPGME */
+
+static gint compose_write_to_file(Compose *compose, const gchar *file,
+ gboolean is_draft)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ FILE *fp;
+ size_t len;
+ gchar *chars;
+ gchar *buf;
+ gchar *canon_buf;
+ const gchar *out_codeset;
+ EncodingType encoding;
+
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ /* chmod for security */
+ if (change_file_mode_rw(fp, file) < 0) {
+ FILE_OP_ERROR(file, "chmod");
+ g_warning(_("can't change file mode\n"));
+ }
+
+ /* get all composed text */
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text));
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ chars = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+ if (is_ascii_str(chars)) {
+ buf = chars;
+ chars = NULL;
+ out_codeset = CS_US_ASCII;
+ encoding = ENC_7BIT;
+ } else {
+ const gchar *src_codeset;
+
+ out_codeset = conv_get_outgoing_charset_str();
+ if (!strcasecmp(out_codeset, CS_US_ASCII))
+ out_codeset = CS_ISO_8859_1;
+
+ if (prefs_common.encoding_method == CTE_BASE64)
+ encoding = ENC_BASE64;
+ else if (prefs_common.encoding_method == CTE_QUOTED_PRINTABLE)
+ encoding = ENC_QUOTED_PRINTABLE;
+ else if (prefs_common.encoding_method == CTE_8BIT)
+ encoding = ENC_8BIT;
+ else
+ encoding = procmime_get_encoding_for_charset(out_codeset);
+
+#if USE_GPGME
+ if (!is_draft &&
+ compose->use_signing && !compose->account->clearsign &&
+ encoding == ENC_8BIT)
+ encoding = ENC_BASE64;
+#endif
+
+ src_codeset = CS_UTF_8;
+
+ debug_print("src encoding = %s, out encoding = %s, transfer encoding = %s\n",
+ src_codeset, out_codeset, procmime_get_encoding_str(encoding));
+
+ buf = conv_codeset_strdup(chars, src_codeset, out_codeset);
+ if (!buf) {
+ AlertValue aval;
+ gchar *msg;
+
+ msg = g_strdup_printf(_("Can't convert the character encoding of the message from\n"
+ "%s to %s.\n"
+ "Send it anyway?"), src_codeset, out_codeset);
+ aval = alertpanel
+ (_("Error"), msg, _("Yes"), _("+No"), NULL);
+ g_free(msg);
+
+ if (aval != G_ALERTDEFAULT) {
+ g_free(chars);
+ fclose(fp);
+ unlink(file);
+ return -1;
+ } else {
+ buf = chars;
+ out_codeset = src_codeset;
+ chars = NULL;
+ }
+ }
+ }
+ g_free(chars);
+
+ canon_buf = canonicalize_str(buf);
+ g_free(buf);
+ buf = canon_buf;
+
+#if USE_GPGME
+ if (!is_draft && compose->use_signing && compose->account->clearsign) {
+ if (compose_clearsign_text(compose, &buf) < 0) {
+ g_warning("clearsign failed\n");
+ fclose(fp);
+ unlink(file);
+ g_free(buf);
+ return -1;
+ }
+ }
+#endif
+
+ /* write headers */
+ if (compose_write_headers
+ (compose, fp, out_codeset, encoding, is_draft) < 0) {
+ g_warning(_("can't write headers\n"));
+ fclose(fp);
+ unlink(file);
+ g_free(buf);
+ return -1;
+ }
+
+ if (compose->use_attach &&
+ GTK_CLIST(compose->attach_clist)->row_list) {
+#if USE_GPGME
+ /* This prolog message is ignored by mime software and
+ * because it would make our signing/encryption task
+ * tougher, we don't emit it in that case */
+ if (!compose->use_signing && !compose->use_encryption)
+#endif
+ fputs("This is a multi-part message in MIME format.\n", fp);
+
+ fprintf(fp, "\n--%s\n", compose->boundary);
+ fprintf(fp, "Content-Type: text/plain; charset=%s\n",
+ out_codeset);
+#if USE_GPGME
+ if (compose->use_signing && !compose->account->clearsign)
+ fprintf(fp, "Content-Disposition: inline\n");
+#endif
+ fprintf(fp, "Content-Transfer-Encoding: %s\n",
+ procmime_get_encoding_str(encoding));
+ fputc('\n', fp);
+ }
+
+ /* write body */
+ len = strlen(buf);
+ if (encoding == ENC_BASE64) {
+ gchar outbuf[B64_BUFFSIZE];
+ gint i, l;
+
+ for (i = 0; i < len; i += B64_LINE_SIZE) {
+ l = MIN(B64_LINE_SIZE, len - i);
+ base64_encode(outbuf, buf + i, l);
+ fputs(outbuf, fp);
+ fputc('\n', fp);
+ }
+ } else if (encoding == ENC_QUOTED_PRINTABLE) {
+ gchar *outbuf;
+ size_t outlen;
+
+ outbuf = g_malloc(len * 4);
+ qp_encode_line(outbuf, buf);
+ outlen = strlen(outbuf);
+ if (fwrite(outbuf, sizeof(gchar), outlen, fp) != outlen) {
+ FILE_OP_ERROR(file, "fwrite");
+ fclose(fp);
+ unlink(file);
+ g_free(outbuf);
+ g_free(buf);
+ return -1;
+ }
+ g_free(outbuf);
+ } else if (fwrite(buf, sizeof(gchar), len, fp) != len) {
+ FILE_OP_ERROR(file, "fwrite");
+ fclose(fp);
+ unlink(file);
+ g_free(buf);
+ return -1;
+ }
+ g_free(buf);
+
+ if (compose->use_attach &&
+ GTK_CLIST(compose->attach_clist)->row_list)
+ compose_write_attach(compose, fp);
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ unlink(file);
+ return -1;
+ }
+
+#if USE_GPGME
+ if (is_draft) {
+ uncanonicalize_file_replace(file);
+ return 0;
+ }
+
+ if ((compose->use_signing && !compose->account->clearsign) ||
+ compose->use_encryption) {
+ if (canonicalize_file_replace(file) < 0) {
+ unlink(file);
+ return -1;
+ }
+ }
+
+ if (compose->use_signing && !compose->account->clearsign) {
+ GSList *key_list;
+
+ if (compose_create_signers_list(compose, &key_list) < 0 ||
+ rfc2015_sign(file, key_list) < 0) {
+ unlink(file);
+ return -1;
+ }
+ }
+ if (compose->use_encryption) {
+ if (rfc2015_encrypt(file, compose->to_list,
+ compose->account->ascii_armored) < 0) {
+ unlink(file);
+ return -1;
+ }
+ }
+#endif /* USE_GPGME */
+
+ uncanonicalize_file_replace(file);
+
+ return 0;
+}
+
+static gint compose_write_body_to_file(Compose *compose, const gchar *file)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ FILE *fp;
+ size_t len;
+ gchar *chars, *tmp;
+
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ /* chmod for security */
+ if (change_file_mode_rw(fp, file) < 0) {
+ FILE_OP_ERROR(file, "chmod");
+ g_warning(_("can't change file mode\n"));
+ }
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text));
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+
+ chars = conv_codeset_strdup
+ (tmp, CS_UTF_8, conv_get_locale_charset_str());
+
+ g_free(tmp);
+
+ if (!chars) {
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+
+ /* write body */
+ len = strlen(chars);
+ if (fwrite(chars, sizeof(gchar), len, fp) != len) {
+ FILE_OP_ERROR(file, "fwrite");
+ g_free(chars);
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+
+ g_free(chars);
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ unlink(file);
+ return -1;
+ }
+ return 0;
+}
+
+static gint compose_redirect_write_to_file(Compose *compose, const gchar *file)
+{
+ FILE *fp;
+ FILE *fdest;
+ size_t len;
+ gchar buf[BUFFSIZE];
+
+ g_return_val_if_fail(file != NULL, -1);
+ g_return_val_if_fail(compose->account != NULL, -1);
+ g_return_val_if_fail(compose->account->address != NULL, -1);
+ g_return_val_if_fail(compose->mode == COMPOSE_REDIRECT, -1);
+ g_return_val_if_fail(compose->targetinfo != NULL, -1);
+
+ if ((fp = procmsg_open_message(compose->targetinfo)) == NULL)
+ return -1;
+
+ if ((fdest = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ fclose(fp);
+ return -1;
+ }
+
+ if (change_file_mode_rw(fdest, file) < 0) {
+ FILE_OP_ERROR(file, "chmod");
+ g_warning(_("can't change file mode\n"));
+ }
+
+ while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) == 0) {
+ if (g_strncasecmp(buf, "Return-Path:",
+ strlen("Return-Path:")) == 0 ||
+ g_strncasecmp(buf, "Delivered-To:",
+ strlen("Delivered-To:")) == 0 ||
+ g_strncasecmp(buf, "Received:",
+ strlen("Received:")) == 0 ||
+ g_strncasecmp(buf, "Subject:",
+ strlen("Subject:")) == 0 ||
+ g_strncasecmp(buf, "X-UIDL:",
+ strlen("X-UIDL:")) == 0)
+ continue;
+
+ if (fputs(buf, fdest) == EOF)
+ goto error;
+
+#if 0
+ if (g_strncasecmp(buf, "From:", strlen("From:")) == 0) {
+ fputs("\n (by way of ", fdest);
+ if (compose->account->name) {
+ compose_convert_header(buf, sizeof(buf),
+ compose->account->name,
+ strlen(" (by way of "),
+ FALSE);
+ fprintf(fdest, "%s <%s>", buf,
+ compose->account->address);
+ } else
+ fputs(compose->account->address, fdest);
+ fputs(")", fdest);
+ }
+#endif
+
+ if (fputs("\n", fdest) == EOF)
+ goto error;
+ }
+
+ compose_redirect_write_headers(compose, fdest);
+
+ while ((len = fread(buf, sizeof(gchar), sizeof(buf), fp)) > 0) {
+ if (fwrite(buf, sizeof(gchar), len, fdest) != len) {
+ FILE_OP_ERROR(file, "fwrite");
+ goto error;
+ }
+ }
+
+ fclose(fp);
+ if (fclose(fdest) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ unlink(file);
+ return -1;
+ }
+
+ return 0;
+error:
+ fclose(fp);
+ fclose(fdest);
+ unlink(file);
+
+ return -1;
+}
+
+static gint compose_remove_reedit_target(Compose *compose)
+{
+ FolderItem *item;
+ MsgInfo *msginfo = compose->targetinfo;
+
+ g_return_val_if_fail(compose->mode == COMPOSE_REEDIT, -1);
+ if (!msginfo) return -1;
+
+ item = msginfo->folder;
+ g_return_val_if_fail(item != NULL, -1);
+
+ folder_item_scan(item);
+ if (procmsg_msg_exist(msginfo) &&
+ (item->stype == F_DRAFT || item->stype == F_QUEUE)) {
+ if (folder_item_remove_msg(item, msginfo) < 0) {
+ g_warning(_("can't remove the old message\n"));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+static gint compose_queue(Compose *compose, const gchar *file)
+{
+ FolderItem *queue;
+ gchar *tmp;
+ FILE *fp, *src_fp;
+ GSList *cur;
+ gchar buf[BUFFSIZE];
+ gint num;
+ MsgFlags flag = {0, 0};
+
+ debug_print(_("queueing message...\n"));
+ g_return_val_if_fail(compose->to_list != NULL ||
+ compose->newsgroup_list != NULL,
+ -1);
+ g_return_val_if_fail(compose->account != NULL, -1);
+
+ tmp = g_strdup_printf("%s%cqueue.%p", get_tmp_dir(),
+ G_DIR_SEPARATOR, compose);
+ if ((fp = fopen(tmp, "wb")) == NULL) {
+ FILE_OP_ERROR(tmp, "fopen");
+ g_free(tmp);
+ return -1;
+ }
+ if ((src_fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ fclose(fp);
+ unlink(tmp);
+ g_free(tmp);
+ return -1;
+ }
+ if (change_file_mode_rw(fp, tmp) < 0) {
+ FILE_OP_ERROR(tmp, "chmod");
+ g_warning(_("can't change file mode\n"));
+ }
+
+ /* queueing variables */
+ fprintf(fp, "AF:\n");
+ fprintf(fp, "NF:0\n");
+ fprintf(fp, "PS:10\n");
+ fprintf(fp, "SRH:1\n");
+ fprintf(fp, "SFN:\n");
+ fprintf(fp, "DSR:\n");
+ if (compose->msgid)
+ fprintf(fp, "MID:<%s>\n", compose->msgid);
+ else
+ fprintf(fp, "MID:\n");
+ fprintf(fp, "CFG:\n");
+ fprintf(fp, "PT:0\n");
+ fprintf(fp, "S:%s\n", compose->account->address);
+ fprintf(fp, "RQ:\n");
+ if (compose->account->smtp_server)
+ fprintf(fp, "SSV:%s\n", compose->account->smtp_server);
+ else
+ fprintf(fp, "SSV:\n");
+ if (compose->account->nntp_server)
+ fprintf(fp, "NSV:%s\n", compose->account->nntp_server);
+ else
+ fprintf(fp, "NSV:\n");
+ fprintf(fp, "SSH:\n");
+ if (compose->to_list) {
+ fprintf(fp, "R:<%s>", (gchar *)compose->to_list->data);
+ for (cur = compose->to_list->next; cur != NULL;
+ cur = cur->next)
+ fprintf(fp, ",<%s>", (gchar *)cur->data);
+ fprintf(fp, "\n");
+ } else
+ fprintf(fp, "R:\n");
+ /* Sylpheed account ID */
+ fprintf(fp, "AID:%d\n", compose->account->account_id);
+ fprintf(fp, "\n");
+
+ while (fgets(buf, sizeof(buf), src_fp) != NULL) {
+ if (fputs(buf, fp) == EOF) {
+ FILE_OP_ERROR(tmp, "fputs");
+ fclose(fp);
+ fclose(src_fp);
+ unlink(tmp);
+ g_free(tmp);
+ return -1;
+ }
+ }
+
+ fclose(src_fp);
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(tmp, "fclose");
+ unlink(tmp);
+ g_free(tmp);
+ return -1;
+ }
+
+ queue = account_get_special_folder(compose->account, F_QUEUE);
+ if (!queue) {
+ g_warning(_("can't find queue folder\n"));
+ unlink(tmp);
+ g_free(tmp);
+ return -1;
+ }
+ folder_item_scan(queue);
+ if ((num = folder_item_add_msg(queue, tmp, &flag, TRUE)) < 0) {
+ g_warning(_("can't queue the message\n"));
+ unlink(tmp);
+ g_free(tmp);
+ return -1;
+ }
+ g_free(tmp);
+
+ if (compose->mode == COMPOSE_REEDIT) {
+ compose_remove_reedit_target(compose);
+ if (compose->targetinfo &&
+ compose->targetinfo->folder != queue)
+ folderview_update_item
+ (compose->targetinfo->folder, TRUE);
+ }
+
+ folder_item_scan(queue);
+ folderview_update_item(queue, TRUE);
+
+ return 0;
+}
+
+static void compose_write_attach(Compose *compose, FILE *fp)
+{
+ AttachInfo *ainfo;
+ GtkCList *clist = GTK_CLIST(compose->attach_clist);
+ gint row;
+ FILE *attach_fp;
+ gchar filename[BUFFSIZE];
+ gint len;
+
+ for (row = 0; (ainfo = gtk_clist_get_row_data(clist, row)) != NULL;
+ row++) {
+ if ((attach_fp = fopen(ainfo->file, "rb")) == NULL) {
+ g_warning("Can't open file %s\n", ainfo->file);
+ continue;
+ }
+
+ fprintf(fp, "\n--%s\n", compose->boundary);
+
+ if (!g_strcasecmp(ainfo->content_type, "message/rfc822")) {
+ fprintf(fp, "Content-Type: %s\n", ainfo->content_type);
+ fprintf(fp, "Content-Disposition: inline\n");
+ } else {
+ compose_convert_header(filename, sizeof(filename),
+ ainfo->name, 12, FALSE);
+ fprintf(fp, "Content-Type: %s;\n"
+ " name=\"%s\"\n",
+ ainfo->content_type, filename);
+ fprintf(fp, "Content-Disposition: attachment;\n"
+ " filename=\"%s\"\n", filename);
+ }
+
+ fprintf(fp, "Content-Transfer-Encoding: %s\n\n",
+ procmime_get_encoding_str(ainfo->encoding));
+
+ if (ainfo->encoding == ENC_BASE64) {
+ gchar inbuf[B64_LINE_SIZE], outbuf[B64_BUFFSIZE];
+ FILE *tmp_fp = attach_fp;
+ gchar *tmp_file = NULL;
+ ContentType content_type;
+
+ content_type =
+ procmime_scan_mime_type(ainfo->content_type);
+ if (content_type == MIME_TEXT ||
+ content_type == MIME_TEXT_HTML ||
+ content_type == MIME_MESSAGE_RFC822) {
+ tmp_file = get_tmp_file();
+ if (canonicalize_file(ainfo->file, tmp_file) < 0) {
+ g_free(tmp_file);
+ fclose(attach_fp);
+ continue;
+ }
+ if ((tmp_fp = fopen(tmp_file, "rb")) == NULL) {
+ FILE_OP_ERROR(tmp_file, "fopen");
+ unlink(tmp_file);
+ g_free(tmp_file);
+ fclose(attach_fp);
+ continue;
+ }
+ }
+
+ while ((len = fread(inbuf, sizeof(gchar),
+ B64_LINE_SIZE, tmp_fp))
+ == B64_LINE_SIZE) {
+ base64_encode(outbuf, inbuf, B64_LINE_SIZE);
+ fputs(outbuf, fp);
+ fputc('\n', fp);
+ }
+ if (len > 0 && feof(tmp_fp)) {
+ base64_encode(outbuf, inbuf, len);
+ fputs(outbuf, fp);
+ fputc('\n', fp);
+ }
+
+ if (tmp_file) {
+ fclose(tmp_fp);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ }
+ } else if (ainfo->encoding == ENC_QUOTED_PRINTABLE) {
+ gchar inbuf[BUFFSIZE], outbuf[BUFFSIZE * 4];
+
+ while (fgets(inbuf, sizeof(inbuf), attach_fp) != NULL) {
+ qp_encode_line(outbuf, inbuf);
+ fputs(outbuf, fp);
+ }
+ } else {
+ gchar buf[BUFFSIZE];
+
+ while (fgets(buf, sizeof(buf), attach_fp) != NULL) {
+ strcrchomp(buf);
+ fputs(buf, fp);
+ }
+ }
+
+ fclose(attach_fp);
+ }
+
+ fprintf(fp, "\n--%s--\n", compose->boundary);
+}
+
+#define QUOTE_IF_REQUIRED(out, str) \
+{ \
+ if (*str != '"' && strpbrk(str, ",.[]<>")) { \
+ gchar *__tmp; \
+ gint len; \
+ \
+ len = strlen(str) + 3; \
+ Xalloca(__tmp, len, return -1); \
+ g_snprintf(__tmp, len, "\"%s\"", str); \
+ out = __tmp; \
+ } else { \
+ Xstrdup_a(out, str, return -1); \
+ } \
+}
+
+#define PUT_RECIPIENT_HEADER(header, str) \
+{ \
+ if (*str != '\0') { \
+ gchar *dest; \
+ \
+ Xstrdup_a(dest, str, return -1); \
+ g_strstrip(dest); \
+ if (*dest != '\0') { \
+ compose->to_list = address_list_append \
+ (compose->to_list, dest); \
+ compose_convert_header \
+ (buf, sizeof(buf), dest, strlen(header) + 2, \
+ TRUE); \
+ fprintf(fp, "%s: %s\n", header, buf); \
+ } \
+ } \
+}
+
+#define IS_IN_CUSTOM_HEADER(header) \
+ (compose->account->add_customhdr && \
+ custom_header_find(compose->account->customhdr_list, header) != NULL)
+
+static gint compose_write_headers(Compose *compose, FILE *fp,
+ const gchar *charset, EncodingType encoding,
+ gboolean is_draft)
+{
+ gchar buf[BUFFSIZE];
+ const gchar *entry_str;
+ gchar *str;
+ gchar *name;
+ /* struct utsname utsbuf; */
+
+ g_return_val_if_fail(fp != NULL, -1);
+ g_return_val_if_fail(charset != NULL, -1);
+ g_return_val_if_fail(compose->account != NULL, -1);
+ g_return_val_if_fail(compose->account->address != NULL, -1);
+
+ /* Date */
+ if (compose->account->add_date) {
+ get_rfc822_date(buf, sizeof(buf));
+ fprintf(fp, "Date: %s\n", buf);
+ }
+
+ /* From */
+ if (compose->account->name && *compose->account->name) {
+ compose_convert_header
+ (buf, sizeof(buf), compose->account->name,
+ strlen("From: "), TRUE);
+ QUOTE_IF_REQUIRED(name, buf);
+ fprintf(fp, "From: %s <%s>\n",
+ name, compose->account->address);
+ } else
+ fprintf(fp, "From: %s\n", compose->account->address);
+
+ slist_free_strings(compose->to_list);
+ g_slist_free(compose->to_list);
+ compose->to_list = NULL;
+
+ /* To */
+ if (compose->use_to) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry));
+ PUT_RECIPIENT_HEADER("To", entry_str);
+ }
+
+ slist_free_strings(compose->newsgroup_list);
+ g_slist_free(compose->newsgroup_list);
+ compose->newsgroup_list = NULL;
+
+ /* Newsgroups */
+ if (compose->use_newsgroups) {
+ entry_str = gtk_entry_get_text
+ (GTK_ENTRY(compose->newsgroups_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ remove_space(str);
+ if (*str != '\0') {
+ compose->newsgroup_list =
+ newsgroup_list_append
+ (compose->newsgroup_list, str);
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Newsgroups: "),
+ TRUE);
+ fprintf(fp, "Newsgroups: %s\n", buf);
+ }
+ }
+ }
+
+ /* Cc */
+ if (compose->use_cc) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->cc_entry));
+ PUT_RECIPIENT_HEADER("Cc", entry_str);
+ }
+
+ /* Bcc */
+ if (compose->use_bcc) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->bcc_entry));
+ PUT_RECIPIENT_HEADER("Bcc", entry_str);
+ }
+
+ if (!is_draft && !compose->to_list && !compose->newsgroup_list)
+ return -1;
+
+ /* Subject */
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry));
+ if (*entry_str != '\0' && !IS_IN_CUSTOM_HEADER("Subject")) {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ if (*str != '\0') {
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Subject: "), FALSE);
+ fprintf(fp, "Subject: %s\n", buf);
+ }
+ }
+
+ /* Message-ID */
+ if (compose->account->gen_msgid) {
+ compose_generate_msgid(compose, buf, sizeof(buf));
+ fprintf(fp, "Message-Id: <%s>\n", buf);
+ compose->msgid = g_strdup(buf);
+ }
+
+ /* In-Reply-To */
+ if (compose->inreplyto && compose->to_list)
+ fprintf(fp, "In-Reply-To: <%s>\n", compose->inreplyto);
+
+ /* References */
+ if (compose->references)
+ fprintf(fp, "References: %s\n", compose->references);
+
+ /* Followup-To */
+ if (compose->use_followupto && !IS_IN_CUSTOM_HEADER("Followup-To")) {
+ entry_str = gtk_entry_get_text
+ (GTK_ENTRY(compose->followup_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ remove_space(str);
+ if (*str != '\0') {
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Followup-To: "),
+ TRUE);
+ fprintf(fp, "Followup-To: %s\n", buf);
+ }
+ }
+ }
+
+ /* Reply-To */
+ if (compose->use_replyto && !IS_IN_CUSTOM_HEADER("Reply-To")) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->reply_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ if (*str != '\0') {
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Reply-To: "),
+ TRUE);
+ fprintf(fp, "Reply-To: %s\n", buf);
+ }
+ }
+ }
+
+ /* Organization */
+ if (compose->account->organization &&
+ !IS_IN_CUSTOM_HEADER("Organization")) {
+ compose_convert_header(buf, sizeof(buf),
+ compose->account->organization,
+ strlen("Organization: "), FALSE);
+ fprintf(fp, "Organization: %s\n", buf);
+ }
+
+ /* Program version and system info */
+ /* uname(&utsbuf); */
+ if (compose->to_list && !IS_IN_CUSTOM_HEADER("X-Mailer")) {
+ fprintf(fp, "X-Mailer: %s (GTK+ %d.%d.%d; %s)\n",
+ prog_version,
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ TARGET_ALIAS);
+ /* utsbuf.sysname, utsbuf.release, utsbuf.machine); */
+ }
+ if (compose->newsgroup_list && !IS_IN_CUSTOM_HEADER("X-Newsreader")) {
+ fprintf(fp, "X-Newsreader: %s (GTK+ %d.%d.%d; %s)\n",
+ prog_version,
+ gtk_major_version, gtk_minor_version, gtk_micro_version,
+ TARGET_ALIAS);
+ /* utsbuf.sysname, utsbuf.release, utsbuf.machine); */
+ }
+
+ /* custom headers */
+ if (compose->account->add_customhdr) {
+ GSList *cur;
+
+ for (cur = compose->account->customhdr_list; cur != NULL;
+ cur = cur->next) {
+ CustomHeader *chdr = (CustomHeader *)cur->data;
+
+ if (strcasecmp(chdr->name, "Date") != 0 &&
+ strcasecmp(chdr->name, "From") != 0 &&
+ strcasecmp(chdr->name, "To") != 0 &&
+ /* strcasecmp(chdr->name, "Sender") != 0 && */
+ strcasecmp(chdr->name, "Message-Id") != 0 &&
+ strcasecmp(chdr->name, "In-Reply-To") != 0 &&
+ strcasecmp(chdr->name, "References") != 0 &&
+ strcasecmp(chdr->name, "Mime-Version") != 0 &&
+ strcasecmp(chdr->name, "Content-Type") != 0 &&
+ strcasecmp(chdr->name, "Content-Transfer-Encoding")
+ != 0) {
+ compose_convert_header
+ (buf, sizeof(buf),
+ chdr->value ? chdr->value : "",
+ strlen(chdr->name) + 2, FALSE);
+ fprintf(fp, "%s: %s\n", chdr->name, buf);
+ }
+ }
+ }
+
+ /* MIME */
+ fprintf(fp, "Mime-Version: 1.0\n");
+ if (compose->use_attach &&
+ GTK_CLIST(compose->attach_clist)->row_list) {
+ compose->boundary = generate_mime_boundary(NULL);
+ fprintf(fp,
+ "Content-Type: multipart/mixed;\n"
+ " boundary=\"%s\"\n", compose->boundary);
+ } else {
+ fprintf(fp, "Content-Type: text/plain; charset=%s\n", charset);
+#if USE_GPGME
+ if (compose->use_signing && !compose->account->clearsign)
+ fprintf(fp, "Content-Disposition: inline\n");
+#endif
+ fprintf(fp, "Content-Transfer-Encoding: %s\n",
+ procmime_get_encoding_str(encoding));
+ }
+
+ /* X-Sylpheed header */
+ if (is_draft)
+ fprintf(fp, "X-Sylpheed-Account-Id: %d\n",
+ compose->account->account_id);
+
+ /* separator between header and body */
+ fputs("\n", fp);
+
+ return 0;
+}
+
+static gint compose_redirect_write_headers(Compose *compose, FILE *fp)
+{
+ gchar buf[BUFFSIZE];
+ const gchar *entry_str;
+ gchar *str;
+
+ g_return_val_if_fail(fp != NULL, -1);
+ g_return_val_if_fail(compose->account != NULL, -1);
+ g_return_val_if_fail(compose->account->address != NULL, -1);
+
+ /* Resent-Date */
+ get_rfc822_date(buf, sizeof(buf));
+ fprintf(fp, "Resent-Date: %s\n", buf);
+
+ /* Resent-From */
+ if (compose->account->name) {
+ compose_convert_header
+ (buf, sizeof(buf), compose->account->name,
+ strlen("Resent-From: "), TRUE);
+ fprintf(fp, "Resent-From: %s <%s>\n",
+ buf, compose->account->address);
+ } else
+ fprintf(fp, "Resent-From: %s\n", compose->account->address);
+
+ slist_free_strings(compose->to_list);
+ g_slist_free(compose->to_list);
+ compose->to_list = NULL;
+
+ /* Resent-To */
+ if (compose->use_to) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry));
+ PUT_RECIPIENT_HEADER("Resent-To", entry_str);
+ }
+ if (compose->use_cc) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->cc_entry));
+ PUT_RECIPIENT_HEADER("Resent-Cc", entry_str);
+ }
+ if (compose->use_bcc) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->bcc_entry));
+ PUT_RECIPIENT_HEADER("Bcc", entry_str);
+ }
+
+ slist_free_strings(compose->newsgroup_list);
+ g_slist_free(compose->newsgroup_list);
+ compose->newsgroup_list = NULL;
+
+ /* Newsgroups */
+ if (compose->use_newsgroups) {
+ entry_str = gtk_entry_get_text
+ (GTK_ENTRY(compose->newsgroups_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ remove_space(str);
+ if (*str != '\0') {
+ compose->newsgroup_list =
+ newsgroup_list_append
+ (compose->newsgroup_list, str);
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Newsgroups: "),
+ TRUE);
+ fprintf(fp, "Newsgroups: %s\n", buf);
+ }
+ }
+ }
+
+ if (!compose->to_list && !compose->newsgroup_list)
+ return -1;
+
+ /* Subject */
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ if (*str != '\0') {
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Subject: "), FALSE);
+ fprintf(fp, "Subject: %s\n", buf);
+ }
+ }
+
+ /* Resent-Message-Id */
+ if (compose->account->gen_msgid) {
+ compose_generate_msgid(compose, buf, sizeof(buf));
+ fprintf(fp, "Resent-Message-Id: <%s>\n", buf);
+ compose->msgid = g_strdup(buf);
+ }
+
+ /* Followup-To */
+ if (compose->use_followupto) {
+ entry_str = gtk_entry_get_text
+ (GTK_ENTRY(compose->followup_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ remove_space(str);
+ if (*str != '\0') {
+ compose_convert_header(buf, sizeof(buf), str,
+ strlen("Followup-To: "),
+ TRUE);
+ fprintf(fp, "Followup-To: %s\n", buf);
+ }
+ }
+ }
+
+ /* Resent-Reply-To */
+ if (compose->use_replyto) {
+ entry_str = gtk_entry_get_text(GTK_ENTRY(compose->reply_entry));
+ if (*entry_str != '\0') {
+ Xstrdup_a(str, entry_str, return -1);
+ g_strstrip(str);
+ if (*str != '\0') {
+ compose_convert_header
+ (buf, sizeof(buf), str,
+ strlen("Resent-Reply-To: "), TRUE);
+ fprintf(fp, "Resent-Reply-To: %s\n", buf);
+ }
+ }
+ }
+
+ fputs("\n", fp);
+
+ return 0;
+}
+
+#undef IS_IN_CUSTOM_HEADER
+
+static void compose_convert_header(gchar *dest, gint len, gchar *src,
+ gint header_len, gboolean addr_field)
+{
+ gchar *str;
+ const gchar *cur_encoding;
+
+ g_return_if_fail(src != NULL);
+ g_return_if_fail(dest != NULL);
+
+ if (len < 1) return;
+
+ g_strchomp(src);
+
+#warning FIXME_GTK2 redundant code conversion
+ cur_encoding = conv_get_locale_charset_str();
+ if (!strcmp(cur_encoding, CS_US_ASCII))
+ cur_encoding = CS_ISO_8859_1;
+ str = conv_codeset_strdup(src, CS_UTF_8, cur_encoding);
+ if (str)
+ conv_encode_header(dest, len, str, header_len, addr_field);
+ g_free(str);
+}
+
+static void compose_generate_msgid(Compose *compose, gchar *buf, gint len)
+{
+ struct tm *lt;
+ time_t t;
+ gchar *addr;
+
+ t = time(NULL);
+ lt = localtime(&t);
+
+ if (compose->account && compose->account->address &&
+ *compose->account->address) {
+ if (strchr(compose->account->address, '@'))
+ addr = g_strdup(compose->account->address);
+ else
+ addr = g_strconcat(compose->account->address, "@",
+ get_domain_name(), NULL);
+ } else
+ addr = g_strconcat(g_get_user_name(), "@", get_domain_name(),
+ NULL);
+
+ g_snprintf(buf, len, "%04d%02d%02d%02d%02d%02d.%08x.%s",
+ lt->tm_year + 1900, lt->tm_mon + 1,
+ lt->tm_mday, lt->tm_hour,
+ lt->tm_min, lt->tm_sec,
+ (guint)random(), addr);
+
+ debug_print(_("generated Message-ID: %s\n"), buf);
+
+ g_free(addr);
+}
+
+static void compose_add_entry_field(GtkWidget *table, GtkWidget **hbox,
+ GtkWidget **entry, gint *count,
+ const gchar *label_str,
+ gboolean is_addr_entry)
+{
+ GtkWidget *label;
+
+ if (GTK_TABLE(table)->nrows < (*count) + 1)
+ gtk_table_resize(GTK_TABLE(table), (*count) + 1, 2);
+
+ *hbox = gtk_hbox_new(FALSE, 0);
+ label = gtk_label_new
+ (prefs_common.trans_hdr ? gettext(label_str) : label_str);
+ gtk_box_pack_end(GTK_BOX(*hbox), label, FALSE, FALSE, 0);
+ gtk_table_attach(GTK_TABLE(table), *hbox, 0, 1, *count, (*count) + 1,
+ GTK_FILL, 0, 2, 0);
+ *entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(*entry), MAX_ENTRY_LENGTH);
+ gtk_table_attach_defaults
+ (GTK_TABLE(table), *entry, 1, 2, *count, (*count) + 1);
+ if (GTK_TABLE(table)->nrows > (*count) + 1)
+ gtk_table_set_row_spacing(GTK_TABLE(table), *count, 4);
+
+ if (is_addr_entry)
+ address_completion_register_entry(GTK_ENTRY(*entry));
+
+ (*count)++;
+}
+
+static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
+{
+ Compose *compose;
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *menubar;
+ GtkWidget *handlebox;
+
+ GtkWidget *vbox2;
+
+ GtkWidget *table_vbox;
+ GtkWidget *label;
+ GtkWidget *from_optmenu_hbox;
+ GtkWidget *to_entry;
+ GtkWidget *to_hbox;
+ GtkWidget *newsgroups_entry;
+ GtkWidget *newsgroups_hbox;
+ GtkWidget *subject_entry;
+ GtkWidget *cc_entry;
+ GtkWidget *cc_hbox;
+ GtkWidget *bcc_entry;
+ GtkWidget *bcc_hbox;
+ GtkWidget *reply_entry;
+ GtkWidget *reply_hbox;
+ GtkWidget *followup_entry;
+ GtkWidget *followup_hbox;
+
+ GtkWidget *paned;
+
+ GtkWidget *attach_scrwin;
+ GtkWidget *attach_clist;
+
+ GtkWidget *edit_vbox;
+ GtkWidget *ruler_hbox;
+ GtkWidget *ruler;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ GtkWidget *table;
+ GtkWidget *hbox;
+
+ UndoMain *undostruct;
+
+ gchar *titles[N_ATTACH_COLS];
+ guint n_menu_entries;
+ GtkStyle *style, *new_style;
+ GdkColormap *cmap;
+ GdkColor color[1];
+ gboolean success[1];
+ GtkWidget *popupmenu;
+ GtkItemFactory *popupfactory;
+ GtkItemFactory *ifactory;
+ GtkWidget *tmpl_menu;
+ gint n_entries;
+ gint count = 0;
+ gint i;
+
+ static GdkGeometry geometry;
+
+ g_return_val_if_fail(account != NULL, NULL);
+
+ debug_print(_("Creating compose window...\n"));
+ compose = g_new0(Compose, 1);
+
+ titles[COL_MIMETYPE] = _("MIME type");
+ titles[COL_SIZE] = _("Size");
+ titles[COL_NAME] = _("Name");
+
+ compose->account = account;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+ gtk_widget_set_size_request(window, -1, prefs_common.compose_height);
+ gtk_window_set_wmclass(GTK_WINDOW(window), "compose", "Sylpheed");
+
+ if (!geometry.max_width) {
+ geometry.max_width = gdk_screen_width();
+ geometry.max_height = gdk_screen_height();
+ }
+ gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL,
+ &geometry, GDK_HINT_MAX_SIZE);
+
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(compose_delete_cb), compose);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(compose_destroy_cb), compose);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ n_menu_entries = sizeof(compose_entries) / sizeof(compose_entries[0]);
+ menubar = menubar_create(window, compose_entries,
+ n_menu_entries, "<Compose>", compose);
+ gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+
+ handlebox = gtk_handle_box_new();
+ gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+
+ compose_toolbar_create(compose, handlebox);
+
+ vbox2 = gtk_vbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox2), BORDER_WIDTH);
+
+ table_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox2), table_vbox, FALSE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(table_vbox),
+ BORDER_WIDTH * 2);
+
+ table = gtk_table_new(8, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(table_vbox), table, FALSE, TRUE, 0);
+
+ /* option menu for selecting accounts */
+ hbox = gtk_hbox_new(FALSE, 0);
+ label = gtk_label_new(prefs_common.trans_hdr ? _("From:") : "From:");
+ gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, count, count + 1,
+ GTK_FILL, 0, 2, 0);
+ from_optmenu_hbox = compose_account_option_menu_create(compose);
+ gtk_table_attach_defaults(GTK_TABLE(table), from_optmenu_hbox,
+ 1, 2, count, count + 1);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 0, 4);
+ count++;
+
+ /* header labels and entries */
+ compose_add_entry_field(table, &to_hbox, &to_entry, &count,
+ "To:", TRUE);
+ compose_add_entry_field(table, &newsgroups_hbox, &newsgroups_entry,
+ &count, "Newsgroups:", FALSE);
+ compose_add_entry_field(table, &cc_hbox, &cc_entry, &count,
+ "Cc:", TRUE);
+ compose_add_entry_field(table, &bcc_hbox, &bcc_entry, &count,
+ "Bcc:", TRUE);
+ compose_add_entry_field(table, &reply_hbox, &reply_entry, &count,
+ "Reply-To:", TRUE);
+ compose_add_entry_field(table, &followup_hbox, &followup_entry, &count,
+ "Followup-To:", FALSE);
+ compose_add_entry_field(table, &hbox, &subject_entry, &count,
+ "Subject:", FALSE);
+
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ g_signal_connect(G_OBJECT(to_entry), "activate",
+ G_CALLBACK(to_activated), compose);
+ g_signal_connect(G_OBJECT(newsgroups_entry), "activate",
+ G_CALLBACK(newsgroups_activated), compose);
+ g_signal_connect(G_OBJECT(cc_entry), "activate",
+ G_CALLBACK(cc_activated), compose);
+ g_signal_connect(G_OBJECT(bcc_entry), "activate",
+ G_CALLBACK(bcc_activated), compose);
+ g_signal_connect(G_OBJECT(reply_entry), "activate",
+ G_CALLBACK(replyto_activated), compose);
+ g_signal_connect(G_OBJECT(followup_entry), "activate",
+ G_CALLBACK(followupto_activated), compose);
+ g_signal_connect(G_OBJECT(subject_entry), "activate",
+ G_CALLBACK(subject_activated), compose);
+
+ g_signal_connect(G_OBJECT(to_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(newsgroups_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(cc_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(bcc_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(reply_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(followup_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ g_signal_connect(G_OBJECT(subject_entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+
+ /* attachment list */
+ attach_scrwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(attach_scrwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_widget_set_size_request(attach_scrwin, -1, 80);
+
+ attach_clist = gtk_clist_new_with_titles(N_ATTACH_COLS, titles);
+ gtk_clist_set_column_justification(GTK_CLIST(attach_clist), COL_SIZE,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_width(GTK_CLIST(attach_clist), COL_MIMETYPE, 240);
+ gtk_clist_set_column_width(GTK_CLIST(attach_clist), COL_SIZE, 64);
+ gtk_clist_set_selection_mode(GTK_CLIST(attach_clist),
+ GTK_SELECTION_EXTENDED);
+ for (i = 0; i < N_ATTACH_COLS; i++)
+ GTK_WIDGET_UNSET_FLAGS
+ (GTK_CLIST(attach_clist)->column[i].button,
+ GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(attach_scrwin), attach_clist);
+
+ g_signal_connect(G_OBJECT(attach_clist), "select_row",
+ G_CALLBACK(attach_selected), compose);
+ g_signal_connect(G_OBJECT(attach_clist), "button_press_event",
+ G_CALLBACK(attach_button_pressed), compose);
+ g_signal_connect(G_OBJECT(attach_clist), "key_press_event",
+ G_CALLBACK(attach_key_pressed), compose);
+
+ /* drag and drop */
+ gtk_drag_dest_set(attach_clist,
+ GTK_DEST_DEFAULT_ALL, compose_mime_types, 1,
+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ g_signal_connect(G_OBJECT(attach_clist), "drag_data_received",
+ G_CALLBACK(compose_attach_drag_received_cb),
+ compose);
+
+ /* pane between attach clist and text */
+ paned = gtk_vpaned_new();
+ gtk_paned_add1(GTK_PANED(paned), attach_scrwin);
+ gtk_widget_ref(paned);
+ gtk_widget_show_all(paned);
+
+ edit_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox2), edit_vbox, TRUE, TRUE, 0);
+
+ /* ruler */
+ ruler_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(edit_vbox), ruler_hbox, FALSE, FALSE, 0);
+
+ ruler = gtk_shruler_new();
+ gtk_ruler_set_range(GTK_RULER(ruler), 0.0, 100.0, 1.0, 100.0);
+ gtk_box_pack_start(GTK_BOX(ruler_hbox), ruler, TRUE, TRUE,
+ BORDER_WIDTH + 1);
+ gtk_widget_set_size_request(ruler_hbox, 1, -1);
+
+ /* text widget */
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(edit_vbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_widget_set_size_request(scrolledwin, prefs_common.compose_width,
+ -1);
+
+ text = gtk_text_view_new();
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), TRUE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+ gtk_text_buffer_add_selection_clipboard(buffer, clipboard);
+ /* GTK_STEXT(text)->default_tab_width = 8; */
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+
+ g_signal_connect(G_OBJECT(text), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+#warning FIXME_GTK2
+#if 0
+ g_signal_connect(G_OBJECT(text), "activate",
+ G_CALLBACK(text_activated), compose);
+#endif
+ g_signal_connect(G_OBJECT(text), "insert_text",
+ G_CALLBACK(text_inserted), compose);
+ g_signal_connect_after(G_OBJECT(text), "size_allocate",
+ G_CALLBACK(compose_edit_size_alloc),
+ ruler);
+
+ /* drag and drop */
+ gtk_drag_dest_set(text, GTK_DEST_DEFAULT_ALL, compose_mime_types, 1,
+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ g_signal_connect(G_OBJECT(text), "drag_data_received",
+ G_CALLBACK(compose_insert_drag_received_cb),
+ compose);
+
+ gtk_widget_show_all(vbox);
+
+ style = gtk_widget_get_style(text);
+ new_style = gtk_style_copy(style);
+
+#warning FIXME_GTK2 use normal API for setting font
+ if (prefs_common.textfont) {
+ PangoFontDescription *font_desc;
+
+ font_desc = pango_font_description_from_string
+ (prefs_common.textfont);
+ if (font_desc) {
+ if (new_style->font_desc)
+ pango_font_description_free
+ (new_style->font_desc);
+ new_style->font_desc = font_desc;
+ }
+ }
+
+ gtk_widget_set_style(text, new_style);
+
+ color[0] = quote_color;
+ cmap = gdk_window_get_colormap(window->window);
+ gdk_colormap_alloc_colors(cmap, color, 1, FALSE, TRUE, success);
+ if (success[0] == FALSE) {
+ g_warning("Compose: color allocation failed.\n");
+ style = gtk_widget_get_style(text);
+ quote_color = style->black;
+ }
+
+ n_entries = sizeof(compose_popup_entries) /
+ sizeof(compose_popup_entries[0]);
+ popupmenu = menu_create_items(compose_popup_entries, n_entries,
+ "<Compose>", &popupfactory,
+ compose);
+
+ ifactory = gtk_item_factory_from_widget(menubar);
+ menu_set_sensitive(ifactory, "/Edit/Undo", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Redo", FALSE);
+
+ tmpl_menu = gtk_item_factory_get_item(ifactory, "/Tools/Template");
+
+ gtk_widget_hide(bcc_hbox);
+ gtk_widget_hide(bcc_entry);
+ gtk_widget_hide(reply_hbox);
+ gtk_widget_hide(reply_entry);
+ gtk_widget_hide(followup_hbox);
+ gtk_widget_hide(followup_entry);
+ gtk_widget_hide(ruler_hbox);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 4, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 5, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 6, 0);
+
+ if (account->protocol == A_NNTP) {
+ gtk_widget_hide(to_hbox);
+ gtk_widget_hide(to_entry);
+ gtk_widget_hide(cc_hbox);
+ gtk_widget_hide(cc_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 1, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 3, 0);
+ } else {
+ gtk_widget_hide(newsgroups_hbox);
+ gtk_widget_hide(newsgroups_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(table), 2, 0);
+ }
+
+ switch (prefs_common.toolbar_style) {
+ case TOOLBAR_NONE:
+ gtk_widget_hide(handlebox);
+ break;
+ case TOOLBAR_ICON:
+ gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar),
+ GTK_TOOLBAR_ICONS);
+ break;
+ case TOOLBAR_TEXT:
+ gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar),
+ GTK_TOOLBAR_TEXT);
+ break;
+ case TOOLBAR_BOTH:
+ gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar),
+ GTK_TOOLBAR_BOTH);
+ break;
+ }
+
+ undostruct = undo_init(text);
+ undo_set_change_state_func(undostruct, &compose_undo_state_changed,
+ menubar);
+
+ address_completion_start(window);
+
+ compose->window = window;
+ compose->vbox = vbox;
+ compose->menubar = menubar;
+ compose->handlebox = handlebox;
+
+ compose->vbox2 = vbox2;
+
+ compose->table_vbox = table_vbox;
+ compose->table = table;
+ compose->to_hbox = to_hbox;
+ compose->to_entry = to_entry;
+ compose->newsgroups_hbox = newsgroups_hbox;
+ compose->newsgroups_entry = newsgroups_entry;
+ compose->subject_entry = subject_entry;
+ compose->cc_hbox = cc_hbox;
+ compose->cc_entry = cc_entry;
+ compose->bcc_hbox = bcc_hbox;
+ compose->bcc_entry = bcc_entry;
+ compose->reply_hbox = reply_hbox;
+ compose->reply_entry = reply_entry;
+ compose->followup_hbox = followup_hbox;
+ compose->followup_entry = followup_entry;
+
+ compose->paned = paned;
+
+ compose->attach_scrwin = attach_scrwin;
+ compose->attach_clist = attach_clist;
+
+ compose->edit_vbox = edit_vbox;
+ compose->ruler_hbox = ruler_hbox;
+ compose->ruler = ruler;
+ compose->scrolledwin = scrolledwin;
+ compose->text = text;
+
+ compose->focused_editable = NULL;
+
+ compose->popupmenu = popupmenu;
+ compose->popupfactory = popupfactory;
+
+ compose->tmpl_menu = tmpl_menu;
+
+ compose->mode = mode;
+
+ compose->targetinfo = NULL;
+ compose->replyinfo = NULL;
+
+ compose->replyto = NULL;
+ compose->cc = NULL;
+ compose->bcc = NULL;
+ compose->followup_to = NULL;
+
+ compose->ml_post = NULL;
+
+ compose->inreplyto = NULL;
+ compose->references = NULL;
+ compose->msgid = NULL;
+ compose->boundary = NULL;
+
+ compose->autowrap = prefs_common.autowrap;
+
+ compose->use_to = FALSE;
+ compose->use_cc = FALSE;
+ compose->use_bcc = FALSE;
+ compose->use_replyto = FALSE;
+ compose->use_newsgroups = FALSE;
+ compose->use_followupto = FALSE;
+ compose->use_attach = FALSE;
+
+#if USE_GPGME
+ compose->use_signing = FALSE;
+ compose->use_encryption = FALSE;
+#endif /* USE_GPGME */
+
+ compose->modified = FALSE;
+
+ compose->paste_as_quotation = FALSE;
+
+ compose->to_list = NULL;
+ compose->newsgroup_list = NULL;
+
+ compose->undostruct = undostruct;
+
+ compose->sig_str = NULL;
+
+ compose->exteditor_file = NULL;
+ compose->exteditor_pid = -1;
+ compose->exteditor_readdes = -1;
+ compose->exteditor_tag = -1;
+
+ compose_select_account(compose, account, TRUE);
+
+ menu_set_active(ifactory, "/Edit/Auto wrapping", prefs_common.autowrap);
+ menu_set_active(ifactory, "/View/Ruler", prefs_common.show_ruler);
+
+ if (mode == COMPOSE_REDIRECT) {
+ menu_set_sensitive(ifactory, "/File/Save to draft folder", FALSE);
+ menu_set_sensitive(ifactory, "/File/Save and keep editing", FALSE);
+ menu_set_sensitive(ifactory, "/File/Attach file", FALSE);
+ menu_set_sensitive(ifactory, "/File/Insert file", FALSE);
+ menu_set_sensitive(ifactory, "/File/Insert signature", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Cut", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Paste", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Wrap current paragraph", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Wrap all long lines", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Auto wrapping", FALSE);
+ menu_set_sensitive(ifactory, "/Edit/Advanced", FALSE);
+ menu_set_sensitive(ifactory, "/View/Attachment", FALSE);
+ menu_set_sensitive(ifactory, "/Tools/Template", FALSE);
+ menu_set_sensitive(ifactory, "/Tools/Actions", FALSE);
+ menu_set_sensitive(ifactory, "/Tools/Edit with external editor", FALSE);
+#if USE_GPGME
+ menu_set_sensitive(ifactory, "/Tools/PGP Sign", FALSE);
+ menu_set_sensitive(ifactory, "/Tools/PGP Encrypt", FALSE);
+#endif /* USE_GPGME */
+
+ gtk_widget_set_sensitive(compose->insert_btn, FALSE);
+ gtk_widget_set_sensitive(compose->attach_btn, FALSE);
+ gtk_widget_set_sensitive(compose->sig_btn, FALSE);
+ gtk_widget_set_sensitive(compose->exteditor_btn, FALSE);
+ gtk_widget_set_sensitive(compose->linewrap_btn, FALSE);
+
+ menu_set_sensitive_all(GTK_MENU_SHELL(compose->popupmenu),
+ FALSE);
+ }
+
+ addressbook_set_target_compose(compose);
+ action_update_compose_menu(ifactory, compose);
+ compose_set_template_menu(compose);
+
+ compose_list = g_list_append(compose_list, compose);
+
+ gtk_widget_show(window);
+
+ return compose;
+}
+
+static void compose_connect_changed_callbacks(Compose *compose)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);;
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ g_signal_connect(G_OBJECT(buffer), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->to_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->newsgroups_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->cc_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->bcc_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->reply_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->followup_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(compose->subject_entry), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+}
+
+static void compose_toolbar_create(Compose *compose, GtkWidget *container)
+{
+ GtkWidget *toolbar;
+ GtkWidget *icon_wid;
+ GtkWidget *send_btn;
+ GtkWidget *sendl_btn;
+ GtkWidget *draft_btn;
+ GtkWidget *insert_btn;
+ GtkWidget *attach_btn;
+ GtkWidget *sig_btn;
+ GtkWidget *exteditor_btn;
+ GtkWidget *linewrap_btn;
+ GtkWidget *addrbook_btn;
+
+ toolbar = gtk_toolbar_new();
+ gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar),
+ GTK_ORIENTATION_HORIZONTAL);
+ gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH);
+ gtk_container_add(GTK_CONTAINER(container), toolbar);
+ gtk_container_set_border_width(GTK_CONTAINER(container), 2);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND);
+ send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Send"),
+ _("Send message"),
+ "Send",
+ icon_wid,
+ G_CALLBACK(toolbar_send_cb),
+ compose);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND_QUEUE);
+ sendl_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Send later"),
+ _("Put into queue folder and send later"),
+ "Send later",
+ icon_wid,
+ G_CALLBACK(toolbar_send_later_cb),
+ compose);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL);
+ draft_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Draft"),
+ _("Save to draft folder"),
+ "Draft",
+ icon_wid,
+ G_CALLBACK(toolbar_draft_cb),
+ compose);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PASTE);
+ insert_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Insert"),
+ _("Insert file"),
+ "Insert",
+ icon_wid,
+ G_CALLBACK(toolbar_insert_cb),
+ compose);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_ATTACH);
+ attach_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Attach"),
+ _("Attach file"),
+ "Attach",
+ icon_wid,
+ G_CALLBACK(toolbar_attach_cb),
+ compose);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL);
+ sig_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Signature"),
+ _("Insert signature"),
+ "Signature",
+ icon_wid,
+ G_CALLBACK(toolbar_sig_cb), compose);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_COMPOSE);
+ exteditor_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Editor"),
+ _("Edit with external editor"),
+ "Editor",
+ icon_wid,
+ G_CALLBACK(toolbar_ext_editor_cb),
+ compose);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_LINEWRAP);
+ linewrap_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Linewrap"),
+ _("Wrap all long lines"),
+ "Linewrap",
+ icon_wid,
+ G_CALLBACK(toolbar_linewrap_cb),
+ compose);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_ADDRESS_BOOK);
+ addrbook_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Address"),
+ _("Address book"),
+ "Address",
+ icon_wid,
+ G_CALLBACK(toolbar_address_cb),
+ compose);
+
+ compose->toolbar = toolbar;
+ compose->send_btn = send_btn;
+ compose->sendl_btn = sendl_btn;
+ compose->draft_btn = draft_btn;
+ compose->insert_btn = insert_btn;
+ compose->attach_btn = attach_btn;
+ compose->sig_btn = sig_btn;
+ compose->exteditor_btn = exteditor_btn;
+ compose->linewrap_btn = linewrap_btn;
+ compose->addrbook_btn = addrbook_btn;
+
+ gtk_widget_show_all(toolbar);
+}
+
+static GtkWidget *compose_account_option_menu_create(Compose *compose)
+{
+ GList *accounts;
+ GtkWidget *hbox;
+ GtkWidget *optmenu;
+ GtkWidget *menu;
+ gint num = 0, def_menu = 0;
+
+ accounts = account_get_list();
+ g_return_val_if_fail(accounts != NULL, NULL);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
+ menu = gtk_menu_new();
+
+ for (; accounts != NULL; accounts = accounts->next, num++) {
+ PrefsAccount *ac = (PrefsAccount *)accounts->data;
+ GtkWidget *menuitem;
+ gchar *name;
+
+ if (ac == compose->account) def_menu = num;
+
+ if (ac->name)
+ name = g_strdup_printf("%s: %s <%s>",
+ ac->account_name,
+ ac->name, ac->address);
+ else
+ name = g_strdup_printf("%s: %s",
+ ac->account_name, ac->address);
+ MENUITEM_ADD(menu, menuitem, name, ac);
+ g_free(name);
+ g_signal_connect(G_OBJECT(menuitem), "activate",
+ G_CALLBACK(account_activated),
+ compose);
+ }
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
+ gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), def_menu);
+
+ return hbox;
+}
+
+static void compose_set_template_menu(Compose *compose)
+{
+ GSList *tmpl_list, *cur;
+ GtkWidget *menu;
+ GtkWidget *item;
+
+ tmpl_list = template_get_config();
+
+ menu = gtk_menu_new();
+
+ for (cur = tmpl_list; cur != NULL; cur = cur->next) {
+ Template *tmpl = (Template *)cur->data;
+
+ item = gtk_menu_item_new_with_label(tmpl->name);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(compose_template_activate_cb),
+ compose);
+ g_object_set_data(G_OBJECT(item), "template", tmpl);
+ gtk_widget_show(item);
+ }
+
+ gtk_widget_show(menu);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(compose->tmpl_menu), menu);
+}
+
+void compose_reflect_prefs_all(void)
+{
+ GList *cur;
+ Compose *compose;
+
+ for (cur = compose_list; cur != NULL; cur = cur->next) {
+ compose = (Compose *)cur->data;
+ compose_set_template_menu(compose);
+ }
+}
+
+static void compose_template_apply(Compose *compose, Template *tmpl,
+ gboolean replace)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ gchar *qmark;
+ gchar *parsed_str;
+
+ if (!tmpl || !tmpl->value) return;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ if (tmpl->to && *tmpl->to != '\0')
+ compose_entry_set(compose, tmpl->to, COMPOSE_ENTRY_TO);
+ if (tmpl->cc && *tmpl->cc != '\0')
+ compose_entry_set(compose, tmpl->cc, COMPOSE_ENTRY_CC);
+ if (tmpl->subject && *tmpl->subject != '\0')
+ compose_entry_set(compose, tmpl->subject, COMPOSE_ENTRY_SUBJECT);
+
+ if (replace)
+ gtk_text_buffer_set_text(buffer, "", 0);
+
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+
+ if (compose->replyinfo == NULL) {
+ parsed_str = compose_quote_fmt(compose, NULL, tmpl->value,
+ NULL, NULL);
+ } else {
+ if (prefs_common.quotemark && *prefs_common.quotemark)
+ qmark = prefs_common.quotemark;
+ else
+ qmark = "> ";
+
+ parsed_str = compose_quote_fmt(compose, compose->replyinfo,
+ tmpl->value, qmark, NULL);
+ }
+
+ if (replace && parsed_str && prefs_common.auto_sig)
+ compose_insert_sig(compose, FALSE);
+
+ if (replace && parsed_str) {
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+ }
+
+ if (parsed_str)
+ compose_changed_cb(NULL, compose);
+}
+
+static void compose_destroy(Compose *compose)
+{
+ gint row;
+ GtkCList *clist = GTK_CLIST(compose->attach_clist);
+ AttachInfo *ainfo;
+
+ /* NOTE: address_completion_end() does nothing with the window
+ * however this may change. */
+ address_completion_end(compose->window);
+
+ slist_free_strings(compose->to_list);
+ g_slist_free(compose->to_list);
+ slist_free_strings(compose->newsgroup_list);
+ g_slist_free(compose->newsgroup_list);
+
+ procmsg_msginfo_free(compose->targetinfo);
+ procmsg_msginfo_free(compose->replyinfo);
+
+ g_free(compose->replyto);
+ g_free(compose->cc);
+ g_free(compose->bcc);
+ g_free(compose->newsgroups);
+ g_free(compose->followup_to);
+
+ g_free(compose->ml_post);
+
+ g_free(compose->inreplyto);
+ g_free(compose->references);
+ g_free(compose->msgid);
+ g_free(compose->boundary);
+
+ if (compose->undostruct)
+ undo_destroy(compose->undostruct);
+
+ g_free(compose->sig_str);
+
+ g_free(compose->exteditor_file);
+
+ for (row = 0; (ainfo = gtk_clist_get_row_data(clist, row)) != NULL;
+ row++)
+ compose_attach_info_free(ainfo);
+
+ if (addressbook_get_target_compose() == compose)
+ addressbook_set_target_compose(NULL);
+
+ prefs_common.compose_width = compose->scrolledwin->allocation.width;
+ prefs_common.compose_height = compose->window->allocation.height;
+
+ gtk_widget_destroy(compose->paned);
+
+ g_free(compose);
+
+ compose_list = g_list_remove(compose_list, compose);
+}
+
+static void compose_attach_info_free(AttachInfo *ainfo)
+{
+ g_free(ainfo->file);
+ g_free(ainfo->content_type);
+ g_free(ainfo->name);
+ g_free(ainfo);
+}
+
+static void compose_attach_remove_selected(Compose *compose)
+{
+ GtkCList *clist = GTK_CLIST(compose->attach_clist);
+ AttachInfo *ainfo;
+ gint row;
+
+ while (clist->selection != NULL) {
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ainfo = gtk_clist_get_row_data(clist, row);
+ compose_attach_info_free(ainfo);
+ gtk_clist_remove(clist, row);
+ }
+}
+
+static struct _AttachProperty
+{
+ GtkWidget *window;
+ GtkWidget *mimetype_entry;
+ GtkWidget *encoding_optmenu;
+ GtkWidget *path_entry;
+ GtkWidget *filename_entry;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+} attach_prop;
+
+static void compose_attach_property(Compose *compose)
+{
+ GtkCList *clist = GTK_CLIST(compose->attach_clist);
+ AttachInfo *ainfo;
+ gint row;
+ GtkOptionMenu *optmenu;
+ static gboolean cancelled;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ ainfo = gtk_clist_get_row_data(clist, row);
+ if (!ainfo) return;
+
+ if (!attach_prop.window)
+ compose_attach_property_create(&cancelled);
+ gtk_widget_grab_focus(attach_prop.ok_btn);
+ gtk_widget_show(attach_prop.window);
+ manage_window_set_transient(GTK_WINDOW(attach_prop.window));
+
+ optmenu = GTK_OPTION_MENU(attach_prop.encoding_optmenu);
+ if (ainfo->encoding == ENC_UNKNOWN)
+ gtk_option_menu_set_history(optmenu, ENC_BASE64);
+ else
+ gtk_option_menu_set_history(optmenu, ainfo->encoding);
+
+ gtk_entry_set_text(GTK_ENTRY(attach_prop.mimetype_entry),
+ ainfo->content_type ? ainfo->content_type : "");
+ gtk_entry_set_text(GTK_ENTRY(attach_prop.path_entry),
+ ainfo->file ? ainfo->file : "");
+ gtk_entry_set_text(GTK_ENTRY(attach_prop.filename_entry),
+ ainfo->name ? ainfo->name : "");
+
+ for (;;) {
+ const gchar *entry_text;
+ gchar *text;
+ gchar *cnttype = NULL;
+ gchar *file = NULL;
+ off_t size = 0;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ cancelled = FALSE;
+ gtk_main();
+
+ if (cancelled == TRUE) {
+ gtk_widget_hide(attach_prop.window);
+ break;
+ }
+
+ entry_text = gtk_entry_get_text
+ (GTK_ENTRY(attach_prop.mimetype_entry));
+ if (*entry_text != '\0') {
+ gchar *p;
+
+ text = g_strstrip(g_strdup(entry_text));
+ if ((p = strchr(text, '/')) && !strchr(p + 1, '/')) {
+ cnttype = g_strdup(text);
+ g_free(text);
+ } else {
+ alertpanel_error(_("Invalid MIME type."));
+ g_free(text);
+ continue;
+ }
+ }
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ ainfo->encoding = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+
+ entry_text = gtk_entry_get_text
+ (GTK_ENTRY(attach_prop.path_entry));
+ if (*entry_text != '\0') {
+ if (is_file_exist(entry_text) &&
+ (size = get_file_size(entry_text)) > 0)
+ file = g_strdup(entry_text);
+ else {
+ alertpanel_error
+ (_("File doesn't exist or is empty."));
+ g_free(cnttype);
+ continue;
+ }
+ }
+
+ entry_text = gtk_entry_get_text
+ (GTK_ENTRY(attach_prop.filename_entry));
+ if (*entry_text != '\0') {
+ g_free(ainfo->name);
+ ainfo->name = g_strdup(entry_text);
+ }
+
+ if (cnttype) {
+ g_free(ainfo->content_type);
+ ainfo->content_type = cnttype;
+ }
+ if (file) {
+ g_free(ainfo->file);
+ ainfo->file = file;
+ }
+ if (size)
+ ainfo->size = size;
+
+ gtk_clist_set_text(clist, row, COL_MIMETYPE,
+ ainfo->content_type);
+ gtk_clist_set_text(clist, row, COL_SIZE,
+ to_human_readable(ainfo->size));
+ gtk_clist_set_text(clist, row, COL_NAME, ainfo->name);
+
+ gtk_widget_hide(attach_prop.window);
+ break;
+ }
+}
+
+#define SET_LABEL_AND_ENTRY(str, entry, top) \
+{ \
+ label = gtk_label_new(str); \
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), \
+ GTK_FILL, 0, 0, 0); \
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); \
+ \
+ entry = gtk_entry_new(); \
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, top, (top + 1), \
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \
+}
+
+static void compose_attach_property_create(gboolean *cancelled)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *mimetype_entry;
+ GtkWidget *hbox;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *path_entry;
+ GtkWidget *filename_entry;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ debug_print("Creating attach_property window...\n");
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 480, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_set_title(GTK_WINDOW(window), _("Properties"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(attach_property_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(attach_property_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ table = gtk_table_new(4, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ SET_LABEL_AND_ENTRY(_("MIME type"), mimetype_entry, 0);
+
+ label = gtk_label_new(_("Encoding"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 1, 2,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new();
+ MENUITEM_ADD(optmenu_menu, menuitem, "7bit", ENC_7BIT);
+ gtk_widget_set_sensitive(menuitem, FALSE);
+ MENUITEM_ADD(optmenu_menu, menuitem, "8bit", ENC_8BIT);
+ gtk_widget_set_sensitive(menuitem, FALSE);
+ MENUITEM_ADD(optmenu_menu, menuitem, "quoted-printable",
+ ENC_QUOTED_PRINTABLE);
+ MENUITEM_ADD(optmenu_menu, menuitem, "base64", ENC_BASE64);
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu);
+
+ SET_LABEL_AND_ENTRY(_("Path"), path_entry, 2);
+ SET_LABEL_AND_ENTRY(_("File name"), filename_entry, 3);
+
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(attach_property_ok),
+ cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(attach_property_cancel),
+ cancelled);
+
+ gtk_widget_show_all(vbox);
+
+ attach_prop.window = window;
+ attach_prop.mimetype_entry = mimetype_entry;
+ attach_prop.encoding_optmenu = optmenu;
+ attach_prop.path_entry = path_entry;
+ attach_prop.filename_entry = filename_entry;
+ attach_prop.ok_btn = ok_btn;
+ attach_prop.cancel_btn = cancel_btn;
+}
+
+#undef SET_LABEL_AND_ENTRY
+
+static void attach_property_ok(GtkWidget *widget, gboolean *cancelled)
+{
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void attach_property_cancel(GtkWidget *widget, gboolean *cancelled)
+{
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint attach_property_delete_event(GtkWidget *widget, GdkEventAny *event,
+ gboolean *cancelled)
+{
+ *cancelled = TRUE;
+ gtk_main_quit();
+
+ return TRUE;
+}
+
+static gboolean attach_property_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gboolean *cancelled)
+{
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void compose_exec_ext_editor(Compose *compose)
+{
+ gchar *tmp;
+ pid_t pid;
+ gint pipe_fds[2];
+
+ tmp = g_strdup_printf("%s%ctmpmsg.%p", get_tmp_dir(),
+ G_DIR_SEPARATOR, compose);
+
+ if (pipe(pipe_fds) < 0) {
+ perror("pipe");
+ g_free(tmp);
+ return;
+ }
+
+ if ((pid = fork()) < 0) {
+ perror("fork");
+ g_free(tmp);
+ return;
+ }
+
+ if (pid != 0) {
+ /* close the write side of the pipe */
+ close(pipe_fds[1]);
+
+ compose->exteditor_file = g_strdup(tmp);
+ compose->exteditor_pid = pid;
+ compose->exteditor_readdes = pipe_fds[0];
+
+ compose_set_ext_editor_sensitive(compose, FALSE);
+
+ compose->exteditor_tag =
+ gdk_input_add(pipe_fds[0], GDK_INPUT_READ,
+ compose_input_cb, compose);
+ } else { /* process-monitoring process */
+ pid_t pid_ed;
+
+ if (setpgid(0, 0))
+ perror("setpgid");
+
+ /* close the read side of the pipe */
+ close(pipe_fds[0]);
+
+ if (compose_write_body_to_file(compose, tmp) < 0) {
+ fd_write_all(pipe_fds[1], "2\n", 2);
+ _exit(1);
+ }
+
+ pid_ed = compose_exec_ext_editor_real(tmp);
+ if (pid_ed < 0) {
+ fd_write_all(pipe_fds[1], "1\n", 2);
+ _exit(1);
+ }
+
+ /* wait until editor is terminated */
+ waitpid(pid_ed, NULL, 0);
+
+ fd_write_all(pipe_fds[1], "0\n", 2);
+
+ close(pipe_fds[1]);
+ _exit(0);
+ }
+
+ g_free(tmp);
+}
+
+static gint compose_exec_ext_editor_real(const gchar *file)
+{
+ static gchar *def_cmd = "emacs %s";
+ gchar buf[1024];
+ gchar *p;
+ gchar **cmdline;
+ pid_t pid;
+
+ g_return_val_if_fail(file != NULL, -1);
+
+ if ((pid = fork()) < 0) {
+ perror("fork");
+ return -1;
+ }
+
+ if (pid != 0) return pid;
+
+ /* grandchild process */
+
+ if (setpgid(0, getppid()))
+ perror("setpgid");
+
+ if (prefs_common.ext_editor_cmd &&
+ (p = strchr(prefs_common.ext_editor_cmd, '%')) &&
+ *(p + 1) == 's' && !strchr(p + 2, '%')) {
+ g_snprintf(buf, sizeof(buf), prefs_common.ext_editor_cmd, file);
+ } else {
+ if (prefs_common.ext_editor_cmd)
+ g_warning(_("External editor command line is invalid: `%s'\n"),
+ prefs_common.ext_editor_cmd);
+ g_snprintf(buf, sizeof(buf), def_cmd, file);
+ }
+
+ cmdline = strsplit_with_quote(buf, " ", 1024);
+ execvp(cmdline[0], cmdline);
+
+ perror("execvp");
+ g_strfreev(cmdline);
+
+ _exit(1);
+}
+
+static gboolean compose_ext_editor_kill(Compose *compose)
+{
+ pid_t pgid = compose->exteditor_pid * -1;
+ gint ret;
+
+ ret = kill(pgid, 0);
+
+ if (ret == 0 || (ret == -1 && EPERM == errno)) {
+ AlertValue val;
+ gchar *msg;
+
+ msg = g_strdup_printf
+ (_("The external editor is still working.\n"
+ "Force terminating the process?\n"
+ "process group id: %d"), -pgid);
+ val = alertpanel(_("Notice"), msg, _("Yes"), _("+No"), NULL);
+ g_free(msg);
+
+ if (val == G_ALERTDEFAULT) {
+ gdk_input_remove(compose->exteditor_tag);
+ close(compose->exteditor_readdes);
+
+ if (kill(pgid, SIGTERM) < 0) perror("kill");
+ waitpid(compose->exteditor_pid, NULL, 0);
+
+ g_warning(_("Terminated process group id: %d"), -pgid);
+ g_warning(_("Temporary file: %s"),
+ compose->exteditor_file);
+
+ compose_set_ext_editor_sensitive(compose, TRUE);
+
+ g_free(compose->exteditor_file);
+ compose->exteditor_file = NULL;
+ compose->exteditor_pid = -1;
+ compose->exteditor_readdes = -1;
+ compose->exteditor_tag = -1;
+ } else
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void compose_input_cb(gpointer data, gint source,
+ GdkInputCondition condition)
+{
+ gchar buf[3];
+ Compose *compose = (Compose *)data;
+ gint i = 0;
+
+ debug_print(_("Compose: input from monitoring process\n"));
+
+ gdk_input_remove(compose->exteditor_tag);
+
+ for (;;) {
+ if (read(source, &buf[i], 1) < 1) {
+ buf[0] = '3';
+ break;
+ }
+ if (buf[i] == '\n') {
+ buf[i] = '\0';
+ break;
+ }
+ i++;
+ if (i == sizeof(buf) - 1)
+ break;
+ }
+
+ waitpid(compose->exteditor_pid, NULL, 0);
+
+ if (buf[0] == '0') { /* success */
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ gtk_text_buffer_set_text(buffer, "", 0);
+ compose_insert_file(compose, compose->exteditor_file);
+ compose_changed_cb(NULL, compose);
+
+ if (unlink(compose->exteditor_file) < 0)
+ FILE_OP_ERROR(compose->exteditor_file, "unlink");
+ } else if (buf[0] == '1') { /* failed */
+ g_warning(_("Couldn't exec external editor\n"));
+ if (unlink(compose->exteditor_file) < 0)
+ FILE_OP_ERROR(compose->exteditor_file, "unlink");
+ } else if (buf[0] == '2') {
+ g_warning(_("Couldn't write to file\n"));
+ } else if (buf[0] == '3') {
+ g_warning(_("Pipe read failed\n"));
+ }
+
+ close(source);
+
+ compose_set_ext_editor_sensitive(compose, TRUE);
+
+ g_free(compose->exteditor_file);
+ compose->exteditor_file = NULL;
+ compose->exteditor_pid = -1;
+ compose->exteditor_readdes = -1;
+ compose->exteditor_tag = -1;
+}
+
+static void compose_set_ext_editor_sensitive(Compose *compose,
+ gboolean sensitive)
+{
+ GtkItemFactory *ifactory;
+
+ ifactory = gtk_item_factory_from_widget(compose->menubar);
+
+ menu_set_sensitive(ifactory, "/File/Send", sensitive);
+ menu_set_sensitive(ifactory, "/File/Send later", sensitive);
+ menu_set_sensitive(ifactory, "/File/Save to draft folder",
+ sensitive);
+ menu_set_sensitive(ifactory, "/File/Insert file", sensitive);
+ menu_set_sensitive(ifactory, "/File/Insert signature", sensitive);
+ menu_set_sensitive(ifactory, "/Edit/Wrap current paragraph", sensitive);
+ menu_set_sensitive(ifactory, "/Edit/Wrap all long lines", sensitive);
+ menu_set_sensitive(ifactory, "/Tools/Edit with external editor",
+ sensitive);
+
+ gtk_widget_set_sensitive(compose->text, sensitive);
+ gtk_widget_set_sensitive(compose->send_btn, sensitive);
+ gtk_widget_set_sensitive(compose->sendl_btn, sensitive);
+ gtk_widget_set_sensitive(compose->draft_btn, sensitive);
+ gtk_widget_set_sensitive(compose->insert_btn, sensitive);
+ gtk_widget_set_sensitive(compose->sig_btn, sensitive);
+ gtk_widget_set_sensitive(compose->exteditor_btn, sensitive);
+ gtk_widget_set_sensitive(compose->linewrap_btn, sensitive);
+}
+
+/**
+ * compose_undo_state_changed:
+ *
+ * Change the sensivity of the menuentries undo and redo
+ **/
+static void compose_undo_state_changed(UndoMain *undostruct, gint undo_state,
+ gint redo_state, gpointer data)
+{
+ GtkWidget *widget = GTK_WIDGET(data);
+ GtkItemFactory *ifactory;
+
+ g_return_if_fail(widget != NULL);
+
+ ifactory = gtk_item_factory_from_widget(widget);
+
+ switch (undo_state) {
+ case UNDO_STATE_TRUE:
+ if (!undostruct->undo_state) {
+ debug_print ("Set_undo - Testpoint\n");
+ undostruct->undo_state = TRUE;
+ menu_set_sensitive(ifactory, "/Edit/Undo", TRUE);
+ }
+ break;
+ case UNDO_STATE_FALSE:
+ if (undostruct->undo_state) {
+ undostruct->undo_state = FALSE;
+ menu_set_sensitive(ifactory, "/Edit/Undo", FALSE);
+ }
+ break;
+ case UNDO_STATE_UNCHANGED:
+ break;
+ case UNDO_STATE_REFRESH:
+ menu_set_sensitive(ifactory, "/Edit/Undo",
+ undostruct->undo_state);
+ break;
+ default:
+ g_warning("Undo state not recognized");
+ break;
+ }
+
+ switch (redo_state) {
+ case UNDO_STATE_TRUE:
+ if (!undostruct->redo_state) {
+ undostruct->redo_state = TRUE;
+ menu_set_sensitive(ifactory, "/Edit/Redo", TRUE);
+ }
+ break;
+ case UNDO_STATE_FALSE:
+ if (undostruct->redo_state) {
+ undostruct->redo_state = FALSE;
+ menu_set_sensitive(ifactory, "/Edit/Redo", FALSE);
+ }
+ break;
+ case UNDO_STATE_UNCHANGED:
+ break;
+ case UNDO_STATE_REFRESH:
+ menu_set_sensitive(ifactory, "/Edit/Redo",
+ undostruct->redo_state);
+ break;
+ default:
+ g_warning("Redo state not recognized");
+ break;
+ }
+}
+
+static gint calc_cursor_xpos(GtkTextView *text, gint extra, gint char_width)
+{
+#if 0
+ gint cursor_pos;
+
+ cursor_pos = (text->cursor_pos_x - extra) / char_width;
+ cursor_pos = MAX(cursor_pos, 0);
+
+ return cursor_pos;
+#endif
+#warning FIXME_GTK2
+ return 0;
+}
+
+/* callback functions */
+
+/* compose_edit_size_alloc() - called when resized. don't know whether Gtk
+ * includes "non-client" (windows-izm) in calculation, so this calculation
+ * may not be accurate.
+ */
+static gboolean compose_edit_size_alloc(GtkEditable *widget,
+ GtkAllocation *allocation,
+ GtkSHRuler *shruler)
+{
+ if (prefs_common.show_ruler) {
+ gint char_width = 0, char_height = 0;
+ gint line_width_in_chars;
+
+ gtkut_get_font_size(GTK_WIDGET(widget),
+ &char_width, &char_height);
+ line_width_in_chars =
+ (allocation->width - allocation->x) / char_width;
+
+ /* got the maximum */
+ gtk_ruler_set_range(GTK_RULER(shruler),
+ 0.0, line_width_in_chars,
+ calc_cursor_xpos(GTK_TEXT_VIEW(widget),
+ allocation->x,
+ char_width),
+ /*line_width_in_chars*/ char_width);
+ }
+
+ return TRUE;
+}
+
+static void toolbar_send_cb(GtkWidget *widget, gpointer data)
+{
+ compose_send_cb(data, 0, NULL);
+}
+
+static void toolbar_send_later_cb(GtkWidget *widget, gpointer data)
+{
+ compose_send_later_cb(data, 0, NULL);
+}
+
+static void toolbar_draft_cb(GtkWidget *widget, gpointer data)
+{
+ compose_draft_cb(data, 0, NULL);
+}
+
+static void toolbar_insert_cb(GtkWidget *widget, gpointer data)
+{
+ compose_insert_file_cb(data, 0, NULL);
+}
+
+static void toolbar_attach_cb(GtkWidget *widget, gpointer data)
+{
+ compose_attach_cb(data, 0, NULL);
+}
+
+static void toolbar_sig_cb(GtkWidget *widget, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ compose_insert_sig(compose, FALSE);
+}
+
+static void toolbar_ext_editor_cb(GtkWidget *widget, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ compose_exec_ext_editor(compose);
+}
+
+static void toolbar_linewrap_cb(GtkWidget *widget, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ compose_wrap_line_all(compose);
+}
+
+static void toolbar_address_cb(GtkWidget *widget, gpointer data)
+{
+ compose_address_cb(data, 0, NULL);
+}
+
+static void account_activated(GtkMenuItem *menuitem, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ PrefsAccount *ac;
+
+ ac = (PrefsAccount *)g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+ g_return_if_fail(ac != NULL);
+
+ if (ac != compose->account)
+ compose_select_account(compose, ac, FALSE);
+}
+
+static void attach_selected(GtkCList *clist, gint row, gint column,
+ GdkEvent *event, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ if (event && event->type == GDK_2BUTTON_PRESS)
+ compose_attach_property(compose);
+}
+
+static gboolean attach_button_pressed(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ Compose *compose = (Compose *)data;
+ GtkCList *clist = GTK_CLIST(compose->attach_clist);
+ gint row, column;
+
+ if (!event) return FALSE;
+
+ if (event->button == 3) {
+ if ((clist->selection && !clist->selection->next) ||
+ !clist->selection) {
+ gtk_clist_unselect_all(clist);
+ if (gtk_clist_get_selection_info(clist,
+ event->x, event->y,
+ &row, &column)) {
+ gtk_clist_select_row(clist, row, column);
+ gtkut_clist_set_focus_row(clist, row);
+ }
+ }
+ gtk_menu_popup(GTK_MENU(compose->popupmenu), NULL, NULL,
+ NULL, NULL, event->button, event->time);
+ }
+
+ return FALSE;
+}
+
+static gboolean attach_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ Compose *compose = (Compose *)data;
+
+ if (!event) return FALSE;
+
+ switch (event->keyval) {
+ case GDK_Delete:
+ compose_attach_remove_selected(compose);
+ break;
+ }
+
+ return FALSE;
+}
+
+static void compose_send_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ gint val;
+
+ val = compose_send(compose);
+
+ if (val == 0) gtk_widget_destroy(compose->window);
+}
+
+static void compose_send_later_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ FolderItem *queue;
+ gchar tmp[MAXPATHLEN + 1];
+
+ if (compose_check_entries(compose) == FALSE)
+ return;
+
+ queue = account_get_special_folder(compose->account, F_QUEUE);
+ if (!queue) {
+ g_warning("can't find queue folder\n");
+ return;
+ }
+ if (!FOLDER_IS_LOCAL(queue->folder) &&
+ !main_window_toggle_online_if_offline(main_window_get()))
+ return;
+
+ g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.%p",
+ get_tmp_dir(), G_DIR_SEPARATOR, compose);
+
+ if (compose->mode == COMPOSE_REDIRECT) {
+ if (compose_redirect_write_to_file(compose, tmp) < 0) {
+ alertpanel_error(_("Can't queue the message."));
+ return;
+ }
+ } else {
+ if (prefs_common.linewrap_at_send)
+ compose_wrap_line_all(compose);
+
+ if (compose_write_to_file(compose, tmp, FALSE) < 0) {
+ alertpanel_error(_("Can't queue the message."));
+ return;
+ }
+ }
+
+ if (compose_queue(compose, tmp) < 0) {
+ alertpanel_error(_("Can't queue the message."));
+ return;
+ }
+
+ if (unlink(tmp) < 0)
+ FILE_OP_ERROR(tmp, "unlink");
+
+ gtk_widget_destroy(compose->window);
+}
+
+static void compose_draft_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ FolderItem *draft;
+ gchar *tmp;
+ gint msgnum;
+ MsgFlags flag = {0, 0};
+ static gboolean lock = FALSE;
+
+ if (lock) return;
+
+ draft = account_get_special_folder(compose->account, F_DRAFT);
+ g_return_if_fail(draft != NULL);
+
+ lock = TRUE;
+
+ tmp = g_strdup_printf("%s%cdraft.%p", get_tmp_dir(),
+ G_DIR_SEPARATOR, compose);
+
+ if (compose_write_to_file(compose, tmp, TRUE) < 0) {
+ g_free(tmp);
+ lock = FALSE;
+ return;
+ }
+
+ folder_item_scan(draft);
+ if ((msgnum = folder_item_add_msg(draft, tmp, &flag, TRUE)) < 0) {
+ unlink(tmp);
+ g_free(tmp);
+ lock = FALSE;
+ return;
+ }
+ g_free(tmp);
+ draft->mtime = 0; /* force updating */
+
+ if (compose->mode == COMPOSE_REEDIT) {
+ compose_remove_reedit_target(compose);
+ if (compose->targetinfo &&
+ compose->targetinfo->folder != draft)
+ folderview_update_item(compose->targetinfo->folder,
+ TRUE);
+ }
+
+ folder_item_scan(draft);
+ folderview_update_item(draft, TRUE);
+
+ lock = FALSE;
+
+ /* 0: quit editing 1: keep editing */
+ if (action == 0)
+ gtk_widget_destroy(compose->window);
+ else {
+ struct stat s;
+ gchar *path;
+
+ path = folder_item_fetch_msg(draft, msgnum);
+ g_return_if_fail(path != NULL);
+ if (stat(path, &s) < 0) {
+ FILE_OP_ERROR(path, "stat");
+ g_free(path);
+ lock = FALSE;
+ return;
+ }
+ g_free(path);
+
+ procmsg_msginfo_free(compose->targetinfo);
+ compose->targetinfo = g_new0(MsgInfo, 1);
+ compose->targetinfo->msgnum = msgnum;
+ compose->targetinfo->size = s.st_size;
+ compose->targetinfo->mtime = s.st_mtime;
+ compose->targetinfo->folder = draft;
+ compose->mode = COMPOSE_REEDIT;
+ }
+}
+
+static void compose_attach_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ const gchar *file;
+
+ file = filesel_select_file(_("Select file"), NULL);
+
+ if (file && *file)
+ compose_attach_append(compose, file, file, NULL);
+}
+
+static void compose_insert_file_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ const gchar *file;
+
+ file = filesel_select_file(_("Select file"), NULL);
+
+ if (file && *file)
+ compose_insert_file(compose, file);
+}
+
+static void compose_insert_sig_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ compose_insert_sig(compose, FALSE);
+}
+
+static gint compose_delete_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ compose_close_cb(data, 0, NULL);
+ return TRUE;
+}
+
+static void compose_close_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+ AlertValue val;
+
+ if (compose->exteditor_tag != -1) {
+ if (!compose_ext_editor_kill(compose))
+ return;
+ }
+
+ if (compose->modified) {
+ val = alertpanel(_("Discard message"),
+ _("This message has been modified. discard it?"),
+ _("Discard"), _("to Draft"), _("Cancel"));
+
+ switch (val) {
+ case G_ALERTDEFAULT:
+ break;
+ case G_ALERTALTERNATE:
+ compose_draft_cb(data, 0, NULL);
+ return;
+ default:
+ return;
+ }
+ }
+
+ gtk_widget_destroy(compose->window);
+}
+
+static void compose_address_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ addressbook_open(compose);
+}
+
+static void compose_template_activate_cb(GtkWidget *widget, gpointer data)
+{
+ Compose *compose = (Compose *)data;
+ Template *tmpl;
+ gchar *msg;
+ AlertValue val;
+
+ tmpl = g_object_get_data(G_OBJECT(widget), "template");
+ g_return_if_fail(tmpl != NULL);
+
+ msg = g_strdup_printf(_("Do you want to apply the template `%s' ?"),
+ tmpl->name);
+ val = alertpanel(_("Apply template"), msg,
+ _("Replace"), _("Insert"), _("Cancel"));
+ g_free(msg);
+
+ if (val == G_ALERTDEFAULT)
+ compose_template_apply(compose, tmpl, TRUE);
+ else if (val == G_ALERTALTERNATE)
+ compose_template_apply(compose, tmpl, FALSE);
+}
+
+static void compose_ext_editor_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ compose_exec_ext_editor(compose);
+}
+
+static void compose_destroy_cb(GtkWidget *widget, Compose *compose)
+{
+ compose_destroy(compose);
+}
+
+static void compose_undo_cb(Compose *compose)
+{
+ undo_undo(compose->undostruct);
+}
+
+static void compose_redo_cb(Compose *compose)
+{
+ undo_redo(compose->undostruct);
+}
+
+static void compose_cut_cb(Compose *compose)
+{
+ if (compose->focused_editable &&
+ GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
+ if (GTK_IS_EDITABLE(compose->focused_editable)) {
+ gtk_editable_cut_clipboard
+ (GTK_EDITABLE(compose->focused_editable));
+ } else if (GTK_IS_TEXT_VIEW(compose->focused_editable)) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer(text);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_cut_clipboard(buffer, clipboard, TRUE);
+ }
+ }
+}
+
+static void compose_copy_cb(Compose *compose)
+{
+ if (compose->focused_editable &&
+ GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
+ if (GTK_IS_EDITABLE(compose->focused_editable)) {
+ gtk_editable_copy_clipboard
+ (GTK_EDITABLE(compose->focused_editable));
+ } else if (GTK_IS_TEXT_VIEW(compose->focused_editable)) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer(text);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_copy_clipboard(buffer, clipboard);
+ }
+ }
+}
+
+static void compose_paste_cb(Compose *compose)
+{
+ if (compose->focused_editable &&
+ GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
+ if (GTK_IS_EDITABLE(compose->focused_editable)) {
+ gtk_editable_paste_clipboard
+ (GTK_EDITABLE(compose->focused_editable));
+ } else if (GTK_IS_TEXT_VIEW(compose->focused_editable)) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer(text);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_paste_clipboard(buffer, clipboard,
+ NULL, TRUE);
+ }
+ }
+}
+
+static void compose_paste_as_quote_cb(Compose *compose)
+{
+ compose->paste_as_quotation = TRUE;
+
+ if (compose->focused_editable &&
+ GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
+ if (GTK_IS_EDITABLE(compose->focused_editable)) {
+ gtk_editable_paste_clipboard
+ (GTK_EDITABLE(compose->focused_editable));
+ } else if (GTK_IS_TEXT_VIEW(compose->focused_editable)) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer(text);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_paste_clipboard(buffer, clipboard,
+ NULL, TRUE);
+ }
+ }
+
+ compose->paste_as_quotation = FALSE;
+}
+
+static void compose_allsel_cb(Compose *compose)
+{
+ if (compose->focused_editable &&
+ GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
+ if (GTK_IS_EDITABLE(compose->focused_editable)) {
+ gtk_editable_select_region
+ (GTK_EDITABLE(compose->focused_editable),
+ 0, -1);
+ } else if (GTK_IS_TEXT_VIEW(compose->focused_editable)) {
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ gtk_text_buffer_move_mark_by_name
+ (buffer, "selection_bound", &iter);
+ }
+ }
+}
+
+static void textview_move_beginning_of_line(GtkTextView *text)
+{
+}
+
+static void textview_move_forward_character(GtkTextView *text)
+{
+}
+
+static void textview_move_backward_character(GtkTextView *text)
+{
+}
+
+static void textview_move_forward_word(GtkTextView *text)
+{
+}
+
+static void textview_move_backward_word(GtkTextView *text)
+{
+}
+
+static void textview_move_end_of_line(GtkTextView *text)
+{
+}
+
+static void textview_move_next_line(GtkTextView *text)
+{
+}
+
+static void textview_move_previous_line(GtkTextView *text)
+{
+}
+
+static void textview_delete_forward_character(GtkTextView *text)
+{
+}
+
+static void textview_delete_backward_character(GtkTextView *text)
+{
+}
+
+static void textview_delete_forward_word(GtkTextView *text)
+{
+}
+
+static void textview_delete_backward_word(GtkTextView *text)
+{
+}
+
+static void textview_delete_line(GtkTextView *text)
+{
+}
+
+static void textview_delete_to_line_end(GtkTextView *text)
+{
+}
+
+static void compose_action_cb(Compose *compose, ComposeAction action)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(compose->text);
+ static struct {
+ void (*do_action) (GtkTextView *text);
+ } action_table[] = {
+ {textview_move_beginning_of_line},
+ {textview_move_forward_character},
+ {textview_move_backward_character},
+ {textview_move_forward_word},
+ {textview_move_backward_word},
+ {textview_move_end_of_line},
+ {textview_move_next_line},
+ {textview_move_previous_line},
+ {textview_delete_forward_character},
+ {textview_delete_backward_character},
+ {textview_delete_forward_word},
+ {textview_delete_backward_word},
+ {textview_delete_line},
+ {NULL}, /* textview_delete_line_n */
+ {textview_delete_to_line_end}
+ };
+
+ if (!GTK_WIDGET_HAS_FOCUS(text)) return;
+
+ if (action >= COMPOSE_ACTION_MOVE_BEGINNING_OF_LINE &&
+ action <= COMPOSE_ACTION_DELETE_TO_LINE_END)
+ action_table[action].do_action(text);
+}
+
+static void compose_grab_focus_cb(GtkWidget *widget, Compose *compose)
+{
+ if (GTK_IS_EDITABLE(widget) || GTK_IS_TEXT_VIEW(widget))
+ compose->focused_editable = widget;
+}
+
+static void compose_changed_cb(GtkTextBuffer *textbuf, Compose *compose)
+{
+ if (compose->modified == FALSE) {
+ compose->modified = TRUE;
+ compose_set_title(compose);
+ }
+}
+
+static void compose_toggle_autowrap_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ compose->autowrap = GTK_CHECK_MENU_ITEM(widget)->active;
+ if (compose->autowrap)
+ compose_wrap_line_all_full(compose, TRUE);
+}
+
+static void compose_toggle_to_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->to_hbox);
+ gtk_widget_show(compose->to_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 1, 4);
+ compose->use_to = TRUE;
+ } else {
+ gtk_widget_hide(compose->to_hbox);
+ gtk_widget_hide(compose->to_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 1, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_to = FALSE;
+ }
+
+ if (addressbook_get_target_compose() == compose)
+ addressbook_set_target_compose(compose);
+}
+
+static void compose_toggle_cc_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->cc_hbox);
+ gtk_widget_show(compose->cc_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 3, 4);
+ compose->use_cc = TRUE;
+ } else {
+ gtk_widget_hide(compose->cc_hbox);
+ gtk_widget_hide(compose->cc_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 3, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_cc = FALSE;
+ }
+
+ if (addressbook_get_target_compose() == compose)
+ addressbook_set_target_compose(compose);
+}
+
+static void compose_toggle_bcc_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->bcc_hbox);
+ gtk_widget_show(compose->bcc_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 4, 4);
+ compose->use_bcc = TRUE;
+ } else {
+ gtk_widget_hide(compose->bcc_hbox);
+ gtk_widget_hide(compose->bcc_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 4, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_bcc = FALSE;
+ }
+
+ if (addressbook_get_target_compose() == compose)
+ addressbook_set_target_compose(compose);
+}
+
+static void compose_toggle_replyto_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->reply_hbox);
+ gtk_widget_show(compose->reply_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 5, 4);
+ compose->use_replyto = TRUE;
+ } else {
+ gtk_widget_hide(compose->reply_hbox);
+ gtk_widget_hide(compose->reply_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 5, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_replyto = FALSE;
+ }
+}
+
+static void compose_toggle_followupto_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->followup_hbox);
+ gtk_widget_show(compose->followup_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 6, 4);
+ compose->use_followupto = TRUE;
+ } else {
+ gtk_widget_hide(compose->followup_hbox);
+ gtk_widget_hide(compose->followup_entry);
+ gtk_table_set_row_spacing(GTK_TABLE(compose->table), 6, 0);
+ gtk_widget_queue_resize(compose->table_vbox);
+ compose->use_followupto = FALSE;
+ }
+}
+
+static void compose_toggle_attach_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_ref(compose->edit_vbox);
+
+ gtkut_container_remove(GTK_CONTAINER(compose->vbox2),
+ compose->edit_vbox);
+ gtk_paned_add2(GTK_PANED(compose->paned), compose->edit_vbox);
+ gtk_box_pack_start(GTK_BOX(compose->vbox2), compose->paned,
+ TRUE, TRUE, 0);
+ gtk_widget_show(compose->paned);
+
+ gtk_widget_unref(compose->edit_vbox);
+ gtk_widget_unref(compose->paned);
+
+ compose->use_attach = TRUE;
+ } else {
+ gtk_widget_ref(compose->paned);
+ gtk_widget_ref(compose->edit_vbox);
+
+ gtkut_container_remove(GTK_CONTAINER(compose->vbox2),
+ compose->paned);
+ gtkut_container_remove(GTK_CONTAINER(compose->paned),
+ compose->edit_vbox);
+ gtk_box_pack_start(GTK_BOX(compose->vbox2),
+ compose->edit_vbox, TRUE, TRUE, 0);
+
+ gtk_widget_unref(compose->edit_vbox);
+
+ compose->use_attach = FALSE;
+ }
+}
+
+#if USE_GPGME
+static void compose_toggle_sign_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active)
+ compose->use_signing = TRUE;
+ else
+ compose->use_signing = FALSE;
+}
+
+static void compose_toggle_encrypt_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active)
+ compose->use_encryption = TRUE;
+ else
+ compose->use_encryption = FALSE;
+}
+#endif /* USE_GPGME */
+
+static void compose_toggle_ruler_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ Compose *compose = (Compose *)data;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(compose->ruler_hbox);
+ prefs_common.show_ruler = TRUE;
+ } else {
+ gtk_widget_hide(compose->ruler_hbox);
+ gtk_widget_queue_resize(compose->edit_vbox);
+ prefs_common.show_ruler = FALSE;
+ }
+}
+
+static void compose_attach_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data)
+{
+ Compose *compose = (Compose *)user_data;
+ GList *list, *tmp;
+
+ list = uri_list_extract_filenames((const gchar *)data->data);
+ for (tmp = list; tmp != NULL; tmp = tmp->next)
+ compose_attach_append
+ (compose, (const gchar *)tmp->data,
+ (const gchar *)tmp->data, NULL);
+ if (list) compose_changed_cb(NULL, compose);
+ list_free_strings(list);
+ g_list_free(list);
+}
+
+static void compose_insert_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data)
+{
+ Compose *compose = (Compose *)user_data;
+ GList *list, *tmp;
+
+ list = uri_list_extract_filenames((const gchar *)data->data);
+ for (tmp = list; tmp != NULL; tmp = tmp->next)
+ compose_insert_file(compose, (const gchar *)tmp->data);
+ list_free_strings(list);
+ g_list_free(list);
+}
+
+static void to_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ if (GTK_WIDGET_VISIBLE(compose->newsgroups_entry))
+ gtk_widget_grab_focus(compose->newsgroups_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->cc_entry))
+ gtk_widget_grab_focus(compose->cc_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->bcc_entry))
+ gtk_widget_grab_focus(compose->bcc_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->reply_entry))
+ gtk_widget_grab_focus(compose->reply_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->followup_entry))
+ gtk_widget_grab_focus(compose->followup_entry);
+ else
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void newsgroups_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ if (GTK_WIDGET_VISIBLE(compose->cc_entry))
+ gtk_widget_grab_focus(compose->cc_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->bcc_entry))
+ gtk_widget_grab_focus(compose->bcc_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->reply_entry))
+ gtk_widget_grab_focus(compose->reply_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->followup_entry))
+ gtk_widget_grab_focus(compose->followup_entry);
+ else
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void cc_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ if (GTK_WIDGET_VISIBLE(compose->bcc_entry))
+ gtk_widget_grab_focus(compose->bcc_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->reply_entry))
+ gtk_widget_grab_focus(compose->reply_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->followup_entry))
+ gtk_widget_grab_focus(compose->followup_entry);
+ else
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void bcc_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ if (GTK_WIDGET_VISIBLE(compose->reply_entry))
+ gtk_widget_grab_focus(compose->reply_entry);
+ else if (GTK_WIDGET_VISIBLE(compose->followup_entry))
+ gtk_widget_grab_focus(compose->followup_entry);
+ else
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void replyto_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ if (GTK_WIDGET_VISIBLE(compose->followup_entry))
+ gtk_widget_grab_focus(compose->followup_entry);
+ else
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void followupto_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ gtk_widget_grab_focus(compose->subject_entry);
+}
+
+static void subject_activated(GtkWidget *widget, Compose *compose)
+{
+ if (compose_send_control_enter(compose)) return;
+
+ gtk_widget_grab_focus(compose->text);
+}
+
+static void text_activated(GtkWidget *widget, Compose *compose)
+{
+ compose_send_control_enter(compose);
+}
+
+static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter,
+ const gchar *text, gint len, Compose *compose)
+{
+ g_return_if_fail(text != NULL);
+
+ g_signal_handlers_block_by_func(G_OBJECT(buffer),
+ G_CALLBACK(text_inserted),
+ compose);
+
+ if (compose->paste_as_quotation) {
+ gchar *new_text;
+ gchar *qmark;
+
+ if (len < 0)
+ len = strlen(text);
+ new_text = g_strndup(text, len);
+ if (prefs_common.quotemark && *prefs_common.quotemark)
+ qmark = prefs_common.quotemark;
+ else
+ qmark = "> ";
+ gtk_text_buffer_place_cursor(buffer, iter);
+ compose_quote_fmt(compose, NULL, "%Q", qmark, new_text);
+ g_free(new_text);
+ } else
+ gtk_text_buffer_insert(buffer, iter, text, len);
+
+ if (compose->autowrap)
+ compose_wrap_line_all_full(compose, TRUE);
+
+ g_signal_handlers_unblock_by_func(G_OBJECT(buffer),
+ G_CALLBACK(text_inserted),
+ compose);
+ g_signal_stop_emission_by_name(G_OBJECT(buffer), "insert-text");
+}
+
+static gboolean compose_send_control_enter(Compose *compose)
+{
+ GdkEvent *ev;
+ GdkEventKey *kev;
+ GtkItemFactory *ifactory;
+ GtkAccelKey *accel;
+ GtkWidget *send_menu;
+ GSList *list;
+ GdkModifierType ignored_mods =
+ (GDK_LOCK_MASK | GDK_MOD2_MASK | GDK_MOD3_MASK |
+ GDK_MOD4_MASK | GDK_MOD5_MASK);
+
+ ev = gtk_get_current_event();
+ if (ev->type != GDK_KEY_PRESS) return FALSE;
+
+ kev = (GdkEventKey *)ev;
+ if (!(kev->keyval == GDK_Return && (kev->state & GDK_CONTROL_MASK)))
+ return FALSE;
+
+ ifactory = gtk_item_factory_from_widget(compose->menubar);
+ send_menu = gtk_item_factory_get_widget(ifactory, "/File/Send");
+ list = gtk_accel_groups_from_object(G_OBJECT(send_menu));
+ if (!list)
+ return FALSE;
+
+ accel = (GtkAccelKey *)list->data;
+ if (accel && accel->accel_key == kev->keyval &&
+ (accel->accel_mods & ~ignored_mods) ==
+ (kev->state & ~ignored_mods)) {
+ compose_send_cb(compose, 0, NULL);
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/compose.h b/src/compose.h
new file mode 100644
index 00000000..7fe7a294
--- /dev/null
+++ b/src/compose.h
@@ -0,0 +1,214 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __COMPOSE_H__
+#define __COMPOSE_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkitemfactory.h>
+
+typedef struct _Compose Compose;
+typedef struct _AttachInfo AttachInfo;
+
+#include "procmsg.h"
+#include "procmime.h"
+#include "folder.h"
+#include "addressbook.h"
+#include "prefs_account.h"
+#include "undo.h"
+
+typedef enum
+{
+ COMPOSE_ENTRY_TO,
+ COMPOSE_ENTRY_CC,
+ COMPOSE_ENTRY_BCC,
+ COMPOSE_ENTRY_REPLY_TO,
+ COMPOSE_ENTRY_SUBJECT,
+ COMPOSE_ENTRY_NEWSGROUPS,
+ COMPOSE_ENTRY_FOLLOWUP_TO
+} ComposeEntryType;
+
+typedef enum
+{
+ COMPOSE_REPLY = 1,
+ COMPOSE_REPLY_TO_SENDER = 2,
+ COMPOSE_REPLY_TO_ALL = 3,
+ COMPOSE_REPLY_TO_LIST = 4,
+ COMPOSE_FORWARD = 5,
+ COMPOSE_FORWARD_AS_ATTACH = 6,
+ COMPOSE_NEW = 7,
+ COMPOSE_REDIRECT = 8,
+ COMPOSE_REEDIT = 9,
+
+ COMPOSE_WITH_QUOTE = 1 << 16,
+ COMPOSE_WITHOUT_QUOTE = 2 << 16,
+
+ COMPOSE_MODE_MASK = 0xffff,
+ COMPOSE_QUOTE_MODE_MASK = 0x30000
+} ComposeMode;
+
+#define COMPOSE_MODE(mode) ((mode) & COMPOSE_MODE_MASK)
+#define COMPOSE_QUOTE_MODE(mode) ((mode) & COMPOSE_QUOTE_MODE_MASK)
+
+struct _Compose
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *menubar;
+
+ GtkWidget *handlebox;
+ GtkWidget *toolbar;
+ GtkWidget *send_btn;
+ GtkWidget *sendl_btn;
+ GtkWidget *draft_btn;
+ GtkWidget *insert_btn;
+ GtkWidget *attach_btn;
+ GtkWidget *sig_btn;
+ GtkWidget *exteditor_btn;
+ GtkWidget *linewrap_btn;
+ GtkWidget *addrbook_btn;
+
+ GtkWidget *vbox2;
+
+ GtkWidget *table_vbox;
+ GtkWidget *table;
+ GtkWidget *to_hbox;
+ GtkWidget *to_entry;
+ GtkWidget *newsgroups_hbox;
+ GtkWidget *newsgroups_entry;
+ GtkWidget *subject_entry;
+ GtkWidget *cc_hbox;
+ GtkWidget *cc_entry;
+ GtkWidget *bcc_hbox;
+ GtkWidget *bcc_entry;
+ GtkWidget *reply_hbox;
+ GtkWidget *reply_entry;
+ GtkWidget *followup_hbox;
+ GtkWidget *followup_entry;
+
+ GtkWidget *paned;
+
+ GtkWidget *attach_scrwin;
+ GtkWidget *attach_clist;
+
+ GtkWidget *edit_vbox;
+ GtkWidget *ruler_hbox;
+ GtkWidget *ruler;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+
+ GtkWidget *focused_editable;
+
+ GtkWidget *popupmenu;
+
+ GtkItemFactory *popupfactory;
+
+ GtkWidget *tmpl_menu;
+
+ ComposeMode mode;
+
+ MsgInfo *targetinfo;
+ MsgInfo *replyinfo;
+
+ gchar *replyto;
+ gchar *cc;
+ gchar *bcc;
+ gchar *newsgroups;
+ gchar *followup_to;
+
+ gchar *ml_post;
+
+ gchar *inreplyto;
+ gchar *references;
+ gchar *msgid;
+ gchar *boundary;
+
+ gboolean autowrap;
+
+ gboolean use_to;
+ gboolean use_cc;
+ gboolean use_bcc;
+ gboolean use_replyto;
+ gboolean use_newsgroups;
+ gboolean use_followupto;
+ gboolean use_attach;
+
+ /* privacy settings */
+ gboolean use_signing;
+ gboolean use_encryption;
+
+ gboolean modified;
+
+ gboolean paste_as_quotation;
+
+ GSList *to_list;
+ GSList *newsgroup_list;
+
+ PrefsAccount *account;
+
+ UndoMain *undostruct;
+
+ gchar *sig_str;
+
+ /* external editor */
+ gchar *exteditor_file;
+ pid_t exteditor_pid;
+ gint exteditor_readdes;
+ gint exteditor_tag;
+};
+
+struct _AttachInfo
+{
+ gchar *file;
+ gchar *content_type;
+ EncodingType encoding;
+ gchar *name;
+ off_t size;
+};
+
+void compose_new (PrefsAccount *account,
+ FolderItem *item,
+ const gchar *mailto,
+ GPtrArray *attach_files);
+
+void compose_reply (MsgInfo *msginfo,
+ FolderItem *item,
+ ComposeMode mode,
+ const gchar *body);
+void compose_forward (GSList *mlist,
+ FolderItem *item,
+ gboolean as_attach,
+ const gchar *body);
+void compose_redirect (MsgInfo *msginfo,
+ FolderItem *item);
+void compose_reedit (MsgInfo *msginfo);
+
+GList *compose_get_compose_list (void);
+
+void compose_entry_set (Compose *compose,
+ const gchar *text,
+ ComposeEntryType type);
+void compose_entry_append (Compose *compose,
+ const gchar *text,
+ ComposeEntryType type);
+
+void compose_reflect_prefs_all (void);
+
+#endif /* __COMPOSE_H__ */
diff --git a/src/customheader.c b/src/customheader.c
new file mode 100644
index 00000000..2bcb0357
--- /dev/null
+++ b/src/customheader.c
@@ -0,0 +1,100 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "customheader.h"
+#include "utils.h"
+
+
+gchar *custom_header_get_str(CustomHeader *ch)
+{
+ return g_strdup_printf("%i:%s: %s",
+ ch->account_id, ch->name,
+ ch->value ? ch->value : "");
+}
+
+CustomHeader *custom_header_read_str(const gchar *buf)
+{
+ CustomHeader *ch;
+ gchar *account_id_str;
+ gint id;
+ gchar *name;
+ gchar *value;
+ gchar *tmp;
+
+ Xstrdup_a(tmp, buf, return NULL);
+
+ account_id_str = tmp;
+
+ name = strchr(account_id_str, ':');
+ if (!name)
+ return NULL;
+ else {
+ gchar *endp;
+
+ *name++ = '\0';
+ id = strtol(account_id_str, &endp, 10);
+ if (*endp != '\0') return NULL;
+ }
+
+ value = strchr(name, ':');
+ if (!value) return NULL;
+
+ *value++ = '\0';
+
+ g_strstrip(name);
+ g_strstrip(value);
+
+ ch = g_new0(CustomHeader, 1);
+ ch->account_id = id;
+ ch->name = *name ? g_strdup(name) : NULL;
+ ch->value = *value ? g_strdup(value) : NULL;
+
+ return ch;
+}
+
+CustomHeader *custom_header_find(GSList *header_list, const gchar *header)
+{
+ GSList *cur;
+ CustomHeader *chdr;
+
+ for (cur = header_list; cur != NULL; cur = cur->next) {
+ chdr = (CustomHeader *)cur->data;
+ if (!strcasecmp(chdr->name, header))
+ return chdr;
+ }
+
+ return NULL;
+}
+
+void custom_header_free(CustomHeader *ch)
+{
+ if (!ch) return;
+
+ g_free(ch->name);
+ g_free(ch->value);
+ g_free(ch);
+}
diff --git a/src/customheader.h b/src/customheader.h
new file mode 100644
index 00000000..8554ea7f
--- /dev/null
+++ b/src/customheader.h
@@ -0,0 +1,40 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __CUSTOMHEADER_H__
+#define __CUSTOMHEADER_H__
+
+#include <glib.h>
+
+struct _CustomHeader
+{
+ gint account_id;
+ gchar *name;
+ gchar *value;
+};
+
+typedef struct _CustomHeader CustomHeader;
+
+gchar *custom_header_get_str (CustomHeader *ch);
+CustomHeader *custom_header_read_str (const gchar *buf);
+CustomHeader *custom_header_find (GSList *header_list,
+ const gchar *header);
+void custom_header_free (CustomHeader *ch);
+
+#endif /* __CUSTOMHEADER_H__ */
diff --git a/src/defs.h b/src/defs.h
new file mode 100644
index 00000000..ed5699db
--- /dev/null
+++ b/src/defs.h
@@ -0,0 +1,110 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __DEFS_H__
+#define __DEFS_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if HAVE_PATHS_H
+# include <paths.h>
+#endif
+
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+#define INBOX_DIR "inbox"
+#define OUTBOX_DIR "sent"
+#define QUEUE_DIR "queue"
+#define DRAFT_DIR "draft"
+#define TRASH_DIR "trash"
+#define RC_DIR ".sylpheed-2.0"
+#define NEWS_CACHE_DIR "newscache"
+#define IMAP_CACHE_DIR "imapcache"
+#define MIME_TMP_DIR "mimetmp"
+#define COMMON_RC "sylpheedrc"
+#define ACCOUNT_RC "accountrc"
+#define FILTER_RC "filterrc"
+#define FILTER_LIST "filter.xml"
+#define FILTER_HEADER_RC "filterheaderrc"
+#define CUSTOM_HEADER_RC "customheaderrc"
+#define DISPLAY_HEADER_RC "dispheaderrc"
+#define MENU_RC "menurc"
+#define ACTIONS_RC "actionsrc"
+#define COMMAND_HISTORY "command_history"
+#define TEMPLATE_DIR "templates"
+#define TMP_DIR "tmp"
+#define NEWSGROUP_LIST ".newsgroup_list"
+#define ADDRESS_BOOK "addressbook.xml"
+#define MANUAL_HTML_INDEX "sylpheed.html"
+#define FAQ_HTML_INDEX "sylpheed-faq.html"
+#define HOMEPAGE_URI "http://sylpheed.good-day.net/"
+#define FOLDER_LIST "folderlist.xml"
+#define CACHE_FILE ".sylpheed2_cache"
+#define MARK_FILE ".sylpheed_mark"
+#define CACHE_VERSION 19
+#define MARK_VERSION 2
+
+#define DEFAULT_SIGNATURE ".signature"
+#define DEFAULT_INC_PATH "/usr/bin/mh/inc"
+#define DEFAULT_INC_PROGRAM "inc"
+/* #define DEFAULT_INC_PATH "/usr/bin/imget" */
+/* #define DEFAULT_INC_PROGRAM "imget" */
+#define DEFAULT_SENDMAIL_CMD "/usr/sbin/sendmail -t -i"
+#define DEFAULT_BROWSER_CMD "mozilla-firefox -remote 'openURL(%s,new-window)'"
+
+#ifdef _PATH_MAILDIR
+# define DEFAULT_SPOOL_PATH _PATH_MAILDIR
+#else
+# define DEFAULT_SPOOL_PATH "/var/spool/mail"
+#endif
+
+#define BUFFSIZE 8192
+
+#ifndef MAXPATHLEN
+# define MAXPATHLEN 4095
+#endif
+
+#define DEFAULT_HEIGHT 460
+#define DEFAULT_FOLDERVIEW_WIDTH 179
+#define DEFAULT_MAINVIEW_WIDTH 600
+#define DEFAULT_SUMMARY_HEIGHT 140
+#define DEFAULT_HEADERVIEW_HEIGHT 40
+#define DEFAULT_COMPOSE_HEIGHT 560
+#define BORDER_WIDTH 2
+#define CTREE_INDENT 18
+#define FOLDER_SPACING 4
+#define MAX_ENTRY_LENGTH 8191
+#define COLOR_DIM 35000
+#define UI_REFRESH_INTERVAL 50000 /* usec */
+#define FOLDER_UPDATE_INTERVAL 1500 /* msec */
+#define PROGRESS_UPDATE_INTERVAL 200 /* msec */
+#define SESSION_TIMEOUT_INTERVAL 60 /* sec */
+#define MAX_HISTORY_SIZE 16
+
+#define DEFAULT_NORMAL_FONT "Helvetica 12"
+#define DEFAULT_MESSAGE_FONT "Helvetica 14"
+#define DEFAULT_BOLD_FONT "Helvetica Bold 12"
+#define DEFAULT_SMALL_FONT "Helvetica 10"
+#define DEFAULT_TITLE_FONT "Helvetica 16"
+
+#endif /* __DEFS_H__ */
diff --git a/src/displayheader.c b/src/displayheader.c
new file mode 100644
index 00000000..1db374cd
--- /dev/null
+++ b/src/displayheader.c
@@ -0,0 +1,59 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "displayheader.h"
+
+gchar *display_header_prop_get_str(DisplayHeaderProp *dp)
+{
+ return g_strconcat(dp->hidden ? "-" : "", dp->name, NULL);
+}
+
+DisplayHeaderProp *display_header_prop_read_str(gchar *buf)
+{
+ DisplayHeaderProp *dp;
+
+ dp = g_new0(DisplayHeaderProp, 1);
+
+ dp->hidden = FALSE;
+ if (*buf == '-') {
+ dp->hidden = TRUE;
+ buf++;
+ }
+ if (*buf == '\0') {
+ g_free(dp);
+ return NULL;
+ }
+ dp->name = g_strdup(buf);
+
+ return dp;
+}
+
+void display_header_prop_free(DisplayHeaderProp *dp)
+{
+ if (!dp) return;
+
+ g_free(dp->name);
+ g_free(dp);
+}
diff --git a/src/displayheader.h b/src/displayheader.h
new file mode 100644
index 00000000..e7baa2be
--- /dev/null
+++ b/src/displayheader.h
@@ -0,0 +1,37 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __DISPLAYHEADER_H__
+#define __DISPLAYHEADER_H__
+
+#include <glib.h>
+
+typedef struct _DisplayHeaderProp DisplayHeaderProp;
+
+struct _DisplayHeaderProp
+{
+ gchar *name;
+ gboolean hidden;
+};
+
+gchar *display_header_prop_get_str (DisplayHeaderProp *dp);
+DisplayHeaderProp *display_header_prop_read_str (gchar *buf);
+void display_header_prop_free (DisplayHeaderProp *dp);
+
+#endif /* __DISPLAYHEADER_H__ */
diff --git a/src/editaddress.c b/src/editaddress.c
new file mode 100644
index 00000000..35c57d20
--- /dev/null
+++ b/src/editaddress.c
@@ -0,0 +1,1198 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktable.h>
+
+#include "intl.h"
+#include "mgutils.h"
+#include "addressbook.h"
+#include "addressitem.h"
+#include "addritem.h"
+#include "addrbook.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+#include "codeconv.h"
+
+#include "prefs_common.h"
+
+/*
+static struct _AddressEdit_dlg {
+ GtkWidget *window;
+ GtkWidget *name_entry;
+ GtkWidget *addr_entry;
+ GtkWidget *rem_entry;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+} addredit;
+*/
+
+static struct _PersonEdit_dlg {
+ GtkWidget *window;
+ GtkWidget *notebook;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+
+ /* Basic data tab */
+ GtkWidget *entry_name;
+ GtkWidget *entry_first;
+ GtkWidget *entry_last;
+ GtkWidget *entry_nick;
+
+ /* EMail data tab */
+ GtkWidget *entry_email;
+ GtkWidget *entry_alias;
+ GtkWidget *entry_remarks;
+ GtkWidget *clist_email;
+
+ /* Attribute data tab */
+ GtkWidget *entry_atname;
+ GtkWidget *entry_atvalue;
+ GtkWidget *clist_attrib;
+
+ gint rowIndEMail;
+ gint rowIndAttrib;
+ gboolean editNew;
+
+} personeditdlg;
+
+typedef enum {
+ EMAIL_COL_EMAIL = 0,
+ EMAIL_COL_ALIAS = 1,
+ EMAIL_COL_REMARKS = 2
+} PersonEditEMailColumnPos;
+
+typedef enum {
+ ATTRIB_COL_NAME = 0,
+ ATTRIB_COL_VALUE = 1
+} PersonEditAttribColumnPos;
+
+#define EDITPERSON_WIDTH 520
+#define EDITPERSON_HEIGHT 340
+
+#define EMAIL_N_COLS 3
+#define EMAIL_COL_WIDTH_EMAIL 180
+#define EMAIL_COL_WIDTH_ALIAS 80
+
+#define ATTRIB_N_COLS 2
+#define ATTRIB_COL_WIDTH_NAME 120
+#define ATTRIB_COL_WIDTH_VALUE 180
+
+#define PAGE_BASIC 0
+#define PAGE_EMAIL 1
+#define PAGE_ATTRIBUTES 2
+
+#if 0
+#define SET_LABEL_AND_ENTRY(str, entry, top) \
+{ \
+ label = gtk_label_new(str); \
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), \
+ GTK_FILL, 0, 0, 0); \
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); \
+ \
+ entry = gtk_entry_new(); \
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, top, (top + 1), \
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \
+}
+
+static void edit_address_ok(GtkWidget *widget, gboolean *cancelled)
+{
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_address_cancel(GtkWidget *widget, gboolean *cancelled)
+{
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint edit_address_delete_event(GtkWidget *widget, GdkEventAny *event,
+ gboolean *cancelled)
+{
+ *cancelled = TRUE;
+ gtk_main_quit();
+
+ return TRUE;
+}
+
+static gboolean edit_address_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gboolean *cancelled)
+{
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void addressbook_edit_address_create(gboolean *cancelled)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+ GtkWidget *addr_entry;
+ GtkWidget *rem_entry;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ debug_print("Creating edit_address window...\n");
+
+ window = gtk_window_new(GTK_WINDOW_DIALOG);
+ gtk_widget_set_size_request(window, 400, -1);
+ /* gtk_container_set_border_width(GTK_CONTAINER(window), 8); */
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit address"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_address_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_address_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ SET_LABEL_AND_ENTRY(_("Name"), name_entry, 0);
+ SET_LABEL_AND_ENTRY(_("Address"), addr_entry, 1);
+ SET_LABEL_AND_ENTRY(_("Remarks"), rem_entry, 2);
+
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_address_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_address_cancel), cancelled);
+
+ gtk_widget_show_all(vbox);
+
+ addredit.window = window;
+ addredit.name_entry = name_entry;
+ addredit.addr_entry = addr_entry;
+ addredit.rem_entry = rem_entry;
+ addredit.ok_btn = ok_btn;
+ addredit.cancel_btn = cancel_btn;
+}
+
+AddressItem *addressbook_edit_address(AddressItem *item)
+{
+ static gboolean cancelled;
+ const gchar *str;
+
+ if (!addredit.window)
+ addressbook_edit_address_create(&cancelled);
+ gtk_widget_grab_focus(addredit.ok_btn);
+ gtk_widget_grab_focus(addredit.name_entry);
+ gtk_widget_show(addredit.window);
+ manage_window_set_transient(GTK_WINDOW(addredit.window));
+
+ gtk_entry_set_text(GTK_ENTRY(addredit.name_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(addredit.addr_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(addredit.rem_entry), "");
+
+ if (item) {
+ if (ADDRESS_OBJECT_NAME(item))
+ gtk_entry_set_text(GTK_ENTRY(addredit.name_entry),
+ ADDRESS_OBJECT_NAME(item));
+ if (item->address)
+ gtk_entry_set_text(GTK_ENTRY(addredit.addr_entry),
+ item->address);
+ if (item->remarks)
+ gtk_entry_set_text(GTK_ENTRY(addredit.rem_entry),
+ item->remarks);
+ }
+
+ gtk_main();
+ gtk_widget_hide(addredit.window);
+ if (cancelled == TRUE) return NULL;
+
+ str = gtk_entry_get_text(GTK_ENTRY(addredit.name_entry));
+ if (*str == '\0') return NULL;
+
+ if (!item) {
+ item = mgu_create_address();
+ ADDRESS_OBJECT_TYPE(item) = ADDR_ITEM;
+ }
+
+ g_free(ADDRESS_OBJECT_NAME(item));
+ ADDRESS_OBJECT_NAME(item) = g_strdup(str);
+
+ str = gtk_entry_get_text(GTK_ENTRY(addredit.addr_entry));
+ g_free(item->address);
+ if (*str == '\0')
+ item->address = NULL;
+ else
+ item->address = g_strdup(str);
+
+ str = gtk_entry_get_text(GTK_ENTRY(addredit.rem_entry));
+ g_free(item->remarks);
+ if (*str == '\0')
+ item->remarks = NULL;
+ else
+ item->remarks = g_strdup(str);
+
+ return item;
+}
+#endif /* 0 */
+
+static void edit_person_status_show( gchar *msg ) {
+ if( personeditdlg.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(personeditdlg.statusbar), personeditdlg.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(personeditdlg.statusbar), personeditdlg.status_cid, msg );
+ }
+ }
+}
+
+static void edit_person_ok(GtkWidget *widget, gboolean *cancelled) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_person_cancel(GtkWidget *widget, gboolean *cancelled) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint edit_person_delete_event(GtkWidget *widget, GdkEventAny *event, gboolean *cancelled) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_person_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static gchar *_title_new_ = NULL;
+static gchar *_title_edit_ = NULL;
+
+static void edit_person_set_window_title( gint pageNum ) {
+ gchar *sTitle;
+
+ if( _title_new_ == NULL ) {
+ _title_new_ = g_strdup( _("Add New Person") );
+ _title_edit_ = g_strdup( _("Edit Person Details") );
+ }
+
+ if( pageNum == PAGE_BASIC ) {
+ if( personeditdlg.editNew ) {
+ gtk_window_set_title( GTK_WINDOW(personeditdlg.window), _title_new_ );
+ }
+ else {
+ gtk_window_set_title( GTK_WINDOW(personeditdlg.window), _title_edit_ );
+ }
+ }
+ else {
+ if( personeditdlg.entry_name == NULL ) {
+ sTitle = g_strdup( _title_edit_ );
+ }
+ else {
+ gchar *name;
+ name = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_name), 0, -1 );
+ sTitle = g_strdup_printf( "%s - %s", _title_edit_, name );
+ g_free( name );
+ }
+ gtk_window_set_title( GTK_WINDOW(personeditdlg.window), sTitle );
+ g_free( sTitle );
+ }
+}
+
+static void edit_person_email_clear( gpointer data ) {
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_email), "" );
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_alias), "" );
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_remarks), "" );
+}
+
+static void edit_person_attrib_clear( gpointer data ) {
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atname), "" );
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), "" );
+}
+
+static void edit_person_switch_page( GtkNotebook *notebook, GtkNotebookPage *page,
+ gint pageNum, gpointer user_data)
+{
+ edit_person_set_window_title( pageNum );
+ edit_person_status_show( "" );
+}
+
+/*
+* Load clist with a copy of person's email addresses.
+*/
+void edit_person_load_email( ItemPerson *person ) {
+ GList *node = person->listEMail;
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ gchar *text[ EMAIL_N_COLS ];
+ while( node ) {
+ ItemEMail *emorig = ( ItemEMail * ) node->data;
+ ItemEMail *email = addritem_copy_item_email( emorig );
+ gint row;
+ text[ EMAIL_COL_EMAIL ] = email->address;
+ text[ EMAIL_COL_ALIAS ] = email->obj.name;
+ text[ EMAIL_COL_REMARKS ] = email->remarks;
+
+ row = gtk_clist_append( clist, text );
+ gtk_clist_set_row_data( clist, row, email );
+ node = g_list_next( node );
+ }
+}
+
+static void edit_person_email_list_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ ItemEMail *email = gtk_clist_get_row_data( clist, row );
+ if( email ) {
+ if( email->address )
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_email), email->address );
+ if( ADDRITEM_NAME(email) )
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_alias), ADDRITEM_NAME(email) );
+ if( email->remarks )
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_remarks), email->remarks );
+ }
+ personeditdlg.rowIndEMail = row;
+ edit_person_status_show( NULL );
+}
+
+static void edit_person_email_move( gint dir ) {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ gint row = personeditdlg.rowIndEMail + dir;
+ ItemEMail *email = gtk_clist_get_row_data( clist, row );
+ if( email ) {
+ gtk_clist_row_move( clist, personeditdlg.rowIndEMail, row );
+ personeditdlg.rowIndEMail = row;
+ }
+ edit_person_email_clear( NULL );
+ edit_person_status_show( NULL );
+}
+
+static void edit_person_email_move_up( gpointer data ) {
+ edit_person_email_move( -1 );
+}
+
+static void edit_person_email_move_down( gpointer data ) {
+ edit_person_email_move( +1 );
+}
+
+static void edit_person_email_delete( gpointer data ) {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ gint row = personeditdlg.rowIndEMail;
+ ItemEMail *email = gtk_clist_get_row_data( clist, row );
+ edit_person_email_clear( NULL );
+ if( email ) {
+ /* Remove list entry */
+ gtk_clist_remove( clist, row );
+ addritem_free_item_email( email );
+ email = NULL;
+ }
+
+ /* Position hilite bar */
+ email = gtk_clist_get_row_data( clist, row );
+ if( ! email ) {
+ personeditdlg.rowIndEMail = -1 + row;
+ }
+ edit_person_status_show( NULL );
+}
+
+static ItemEMail *edit_person_email_edit( gboolean *error, ItemEMail *email ) {
+ ItemEMail *retVal = NULL;
+ gchar *sEmail, *sAlias, *sRemarks, *sEmail_;
+
+ *error = TRUE;
+ sEmail_ = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_email), 0, -1 );
+ sAlias = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_alias), 0, -1 );
+ sRemarks = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_remarks), 0, -1 );
+ sEmail = mgu_email_check_empty( sEmail_ );
+ g_free( sEmail_ );
+
+ if( sEmail ) {
+ if( email == NULL ) {
+ email = addritem_create_item_email();
+ }
+ addritem_email_set_address( email, sEmail );
+ addritem_email_set_alias( email, sAlias );
+ addritem_email_set_remarks( email, sRemarks );
+ retVal = email;
+ *error = FALSE;
+ }
+ else {
+ edit_person_status_show( _( "An E-Mail address must be supplied." ) );
+ }
+
+ g_free( sEmail );
+ g_free( sAlias );
+ g_free( sRemarks );
+
+ return retVal;
+}
+
+static void edit_person_email_modify( gpointer data ) {
+ gboolean errFlg = FALSE;
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ gint row = personeditdlg.rowIndEMail;
+ ItemEMail *email = gtk_clist_get_row_data( clist, row );
+ if( email ) {
+ edit_person_email_edit( &errFlg, email );
+ if( ! errFlg ) {
+ gtk_clist_set_text( clist, row, EMAIL_COL_EMAIL, email->address );
+ gtk_clist_set_text( clist, row, EMAIL_COL_ALIAS, email->obj.name );
+ gtk_clist_set_text( clist, row, EMAIL_COL_REMARKS, email->remarks );
+ edit_person_email_clear( NULL );
+ }
+ }
+}
+
+static void edit_person_email_add( gpointer data ) {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ gboolean errFlg = FALSE;
+ ItemEMail *email = NULL;
+ gint row = personeditdlg.rowIndEMail;
+ if( gtk_clist_get_row_data( clist, row ) == NULL ) row = 0;
+
+ email = edit_person_email_edit( &errFlg, NULL );
+ if( ! errFlg ) {
+ gchar *text[ EMAIL_N_COLS ];
+ text[ EMAIL_COL_EMAIL ] = email->address;
+ text[ EMAIL_COL_ALIAS ] = email->obj.name;
+ text[ EMAIL_COL_REMARKS ] = email->remarks;
+
+ row = gtk_clist_insert( clist, 1 + row, text );
+ gtk_clist_set_row_data( clist, row, email );
+ gtk_clist_select_row( clist, row, 0 );
+ edit_person_email_clear( NULL );
+ }
+}
+
+/*
+* Load clist with a copy of person's email addresses.
+*/
+void edit_person_load_attrib( ItemPerson *person ) {
+ GList *node = person->listAttrib;
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_attrib);
+ gchar *text[ ATTRIB_N_COLS ];
+ while( node ) {
+ UserAttribute *atorig = ( UserAttribute * ) node->data;
+ UserAttribute *attrib = addritem_copy_attribute( atorig );
+ gint row;
+ text[ ATTRIB_COL_NAME ] = attrib->name;
+ text[ ATTRIB_COL_VALUE ] = attrib->value;
+
+ row = gtk_clist_append( clist, text );
+ gtk_clist_set_row_data( clist, row, attrib );
+ node = g_list_next( node );
+ }
+}
+
+static void edit_person_attrib_list_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ UserAttribute *attrib = gtk_clist_get_row_data( clist, row );
+ if( attrib ) {
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atname), attrib->name );
+ gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), attrib->value );
+ }
+ personeditdlg.rowIndAttrib = row;
+ edit_person_status_show( NULL );
+}
+
+static void edit_person_attrib_delete( gpointer data ) {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_attrib);
+ gint row = personeditdlg.rowIndAttrib;
+ UserAttribute *attrib = gtk_clist_get_row_data( clist, row );
+ edit_person_attrib_clear( NULL );
+ if( attrib ) {
+ /* Remove list entry */
+ gtk_clist_remove( clist, row );
+ addritem_free_attribute( attrib );
+ attrib = NULL;
+ }
+
+ /* Position hilite bar */
+ attrib = gtk_clist_get_row_data( clist, row );
+ if( ! attrib ) {
+ personeditdlg.rowIndAttrib = -1 + row;
+ }
+ edit_person_status_show( NULL );
+}
+
+static UserAttribute *edit_person_attrib_edit( gboolean *error, UserAttribute *attrib ) {
+ UserAttribute *retVal = NULL;
+ gchar *sName, *sValue, *sName_, *sValue_;
+
+ *error = TRUE;
+ sName_ = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_atname), 0, -1 );
+ sValue_ = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_atvalue), 0, -1 );
+ sName = mgu_email_check_empty( sName_ );
+ sValue = mgu_email_check_empty( sValue_ );
+ g_free( sName_ );
+ g_free( sValue_ );
+
+ if( sName && sValue ) {
+ if( attrib == NULL ) {
+ attrib = addritem_create_attribute();
+ }
+ addritem_attrib_set_name( attrib, sName );
+ addritem_attrib_set_value( attrib, sValue );
+ retVal = attrib;
+ *error = FALSE;
+ }
+ else {
+ edit_person_status_show( _( "A Name and Value must be supplied." ) );
+ }
+
+ g_free( sName );
+ g_free( sValue );
+
+ return retVal;
+}
+
+static void edit_person_attrib_modify( gpointer data ) {
+ gboolean errFlg = FALSE;
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_attrib);
+ gint row = personeditdlg.rowIndAttrib;
+ UserAttribute *attrib = gtk_clist_get_row_data( clist, row );
+ if( attrib ) {
+ edit_person_attrib_edit( &errFlg, attrib );
+ if( ! errFlg ) {
+ gtk_clist_set_text( clist, row, ATTRIB_COL_NAME, attrib->name );
+ gtk_clist_set_text( clist, row, ATTRIB_COL_VALUE, attrib->value );
+ edit_person_attrib_clear( NULL );
+ }
+ }
+}
+
+static void edit_person_attrib_add( gpointer data ) {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_attrib);
+ gboolean errFlg = FALSE;
+ UserAttribute *attrib = NULL;
+ gint row = personeditdlg.rowIndAttrib;
+ if( gtk_clist_get_row_data( clist, row ) == NULL ) row = 0;
+
+ attrib = edit_person_attrib_edit( &errFlg, NULL );
+ if( ! errFlg ) {
+ gchar *text[ EMAIL_N_COLS ];
+ text[ ATTRIB_COL_NAME ] = attrib->name;
+ text[ ATTRIB_COL_VALUE ] = attrib->value;
+
+ row = gtk_clist_insert( clist, 1 + row, text );
+ gtk_clist_set_row_data( clist, row, attrib );
+ gtk_clist_select_row( clist, row, 0 );
+ edit_person_attrib_clear( NULL );
+ }
+}
+
+static void addressbook_edit_person_dialog_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *vnbox;
+ GtkWidget *notebook;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, EDITPERSON_WIDTH, EDITPERSON_HEIGHT );
+ /* gtk_container_set_border_width(GTK_CONTAINER(window), 0); */
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit Person Data"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_person_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_person_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ /* gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); */
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ vnbox = gtk_vbox_new(FALSE, 4);
+ gtk_container_set_border_width(GTK_CONTAINER(vnbox), 4);
+ gtk_widget_show(vnbox);
+ gtk_box_pack_start(GTK_BOX(vbox), vnbox, TRUE, TRUE, 0);
+
+ /* Notebook */
+ notebook = gtk_notebook_new();
+ gtk_widget_show(notebook);
+ gtk_box_pack_start(GTK_BOX(vnbox), notebook, TRUE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(notebook), 6);
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vnbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_person_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_person_cancel), cancelled);
+ g_signal_connect(G_OBJECT(notebook), "switch_page",
+ G_CALLBACK(edit_person_switch_page), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ personeditdlg.window = window;
+ personeditdlg.notebook = notebook;
+ personeditdlg.ok_btn = ok_btn;
+ personeditdlg.cancel_btn = cancel_btn;
+ personeditdlg.statusbar = statusbar;
+ personeditdlg.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit Person Dialog" );
+
+}
+
+void addressbook_edit_person_page_basic( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *entry_name;
+ GtkWidget *entry_fn;
+ GtkWidget *entry_ln;
+ GtkWidget *entry_nn;
+ const gchar *locale;
+ gint top = 0;
+
+ vbox = gtk_vbox_new( FALSE, 8 );
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( personeditdlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( personeditdlg.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( personeditdlg.notebook ), pageNum ), label );
+
+ table = gtk_table_new( 4, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+#define ATTACH_ROW(text, entry) \
+{ \
+ label = gtk_label_new(text); \
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), \
+ GTK_FILL, 0, 0, 0); \
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); \
+ \
+ entry = gtk_entry_new(); \
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, top, (top + 1), \
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \
+ top++; \
+}
+
+ ATTACH_ROW(_("Display Name"), entry_name);
+ locale = conv_get_current_locale();
+ if (locale &&
+ (!g_strncasecmp(locale, "ja", 2) ||
+ !g_strncasecmp(locale, "ko", 2) ||
+ !g_strncasecmp(locale, "zh", 2))) {
+ ATTACH_ROW(_("Last Name"), entry_ln);
+ ATTACH_ROW(_("First Name"), entry_fn);
+ } else {
+ ATTACH_ROW(_("First Name"), entry_fn);
+ ATTACH_ROW(_("Last Name"), entry_ln);
+ }
+ ATTACH_ROW(_("Nick Name"), entry_nn);
+
+#undef ATTACH_ROW
+
+ gtk_widget_show_all(vbox);
+
+ personeditdlg.entry_name = entry_name;
+ personeditdlg.entry_first = entry_fn;
+ personeditdlg.entry_last = entry_ln;
+ personeditdlg.entry_nick = entry_nn;
+}
+
+void addressbook_edit_person_page_email( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *vboxl;
+ GtkWidget *vboxb;
+ GtkWidget *vbuttonbox;
+ GtkWidget *buttonUp;
+ GtkWidget *buttonDown;
+ GtkWidget *buttonDel;
+ GtkWidget *buttonMod;
+ GtkWidget *buttonAdd;
+ GtkWidget *buttonClr;
+
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *clist_swin;
+ GtkWidget *clist;
+ GtkWidget *entry_email;
+ GtkWidget *entry_alias;
+ GtkWidget *entry_remarks;
+ gint top;
+
+ gchar *titles[ EMAIL_N_COLS ];
+ gint i;
+
+ titles[ EMAIL_COL_EMAIL ] = _("E-Mail Address");
+ titles[ EMAIL_COL_ALIAS ] = _("Alias");
+ titles[ EMAIL_COL_REMARKS ] = _("Remarks");
+
+ vbox = gtk_vbox_new( FALSE, 8 );
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( personeditdlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( personeditdlg.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( personeditdlg.notebook ), pageNum ), label );
+
+ /* Split into two areas */
+ hbox = gtk_hbox_new( FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER( vbox ), hbox );
+
+ /* EMail list */
+ vboxl = gtk_vbox_new( FALSE, 4 );
+ gtk_container_add( GTK_CONTAINER( hbox ), vboxl );
+ gtk_container_set_border_width( GTK_CONTAINER(vboxl), 4 );
+
+ /* Address list */
+ clist_swin = gtk_scrolled_window_new( NULL, NULL );
+ gtk_container_add( GTK_CONTAINER(vboxl), clist_swin );
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ clist = gtk_clist_new_with_titles( EMAIL_N_COLS, titles );
+ gtk_container_add( GTK_CONTAINER(clist_swin), clist );
+ gtk_clist_set_selection_mode( GTK_CLIST(clist), GTK_SELECTION_BROWSE );
+ gtk_clist_set_column_width( GTK_CLIST(clist), EMAIL_COL_EMAIL, EMAIL_COL_WIDTH_EMAIL );
+ gtk_clist_set_column_width( GTK_CLIST(clist), EMAIL_COL_ALIAS, EMAIL_COL_WIDTH_ALIAS );
+
+ for( i = 0; i < EMAIL_N_COLS; i++ )
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, GTK_CAN_FOCUS);
+
+ /* Data entry area */
+ table = gtk_table_new( 4, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vboxl), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 4 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("E-Mail Address"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_email = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_email, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Alias"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_alias = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_alias, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Remarks"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_remarks = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_remarks, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Button box */
+ vboxb = gtk_vbox_new( FALSE, 4 );
+ gtk_box_pack_start(GTK_BOX(hbox), vboxb, FALSE, FALSE, 2);
+
+ vbuttonbox = gtk_vbutton_box_new();
+ gtk_button_box_set_layout( GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START );
+ gtk_box_set_spacing( GTK_BOX(vbuttonbox), 8 );
+ gtk_container_set_border_width( GTK_CONTAINER(vbuttonbox), 4 );
+ gtk_container_add( GTK_CONTAINER(vboxb), vbuttonbox );
+
+ /* Buttons */
+ buttonUp = gtk_button_new_with_label( _( "Move Up" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonUp );
+
+ buttonDown = gtk_button_new_with_label( _( "Move Down" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonDown );
+
+ buttonDel = gtk_button_new_with_label( _( "Delete" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonDel );
+
+ buttonMod = gtk_button_new_with_label( _( "Modify" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonMod );
+
+ buttonAdd = gtk_button_new_with_label( _( "Add" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonAdd );
+
+ buttonClr = gtk_button_new_with_label( _( "Clear" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonClr );
+
+ gtk_widget_show_all(vbox);
+
+ /* Event handlers */
+ g_signal_connect( G_OBJECT(clist), "select_row",
+ G_CALLBACK( edit_person_email_list_selected), NULL );
+ g_signal_connect( G_OBJECT(buttonUp), "clicked",
+ G_CALLBACK( edit_person_email_move_up ), NULL );
+ g_signal_connect( G_OBJECT(buttonDown), "clicked",
+ G_CALLBACK( edit_person_email_move_down ), NULL );
+ g_signal_connect( G_OBJECT(buttonDel), "clicked",
+ G_CALLBACK( edit_person_email_delete ), NULL );
+ g_signal_connect( G_OBJECT(buttonMod), "clicked",
+ G_CALLBACK( edit_person_email_modify ), NULL );
+ g_signal_connect( G_OBJECT(buttonAdd), "clicked",
+ G_CALLBACK( edit_person_email_add ), NULL );
+ g_signal_connect( G_OBJECT(buttonClr), "clicked",
+ G_CALLBACK( edit_person_email_clear ), NULL );
+
+ personeditdlg.clist_email = clist;
+ personeditdlg.entry_email = entry_email;
+ personeditdlg.entry_alias = entry_alias;
+ personeditdlg.entry_remarks = entry_remarks;
+}
+
+void addressbook_edit_person_page_attrib( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *vboxl;
+ GtkWidget *vboxb;
+ GtkWidget *vbuttonbox;
+ GtkWidget *buttonDel;
+ GtkWidget *buttonMod;
+ GtkWidget *buttonAdd;
+ GtkWidget *buttonClr;
+
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *clist_swin;
+ GtkWidget *clist;
+ GtkWidget *entry_name;
+ GtkWidget *entry_value;
+ gint top;
+
+ gchar *titles[ ATTRIB_N_COLS ];
+ gint i;
+
+ titles[ ATTRIB_COL_NAME ] = _("Name");
+ titles[ ATTRIB_COL_VALUE ] = _("Value");
+
+ vbox = gtk_vbox_new( FALSE, 8 );
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( personeditdlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( personeditdlg.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( personeditdlg.notebook ), pageNum ), label );
+
+ /* Split into two areas */
+ hbox = gtk_hbox_new( FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER( vbox ), hbox );
+
+ /* Attribute list */
+ vboxl = gtk_vbox_new( FALSE, 4 );
+ gtk_container_add( GTK_CONTAINER( hbox ), vboxl );
+ gtk_container_set_border_width( GTK_CONTAINER(vboxl), 4 );
+
+ /* Address list */
+ clist_swin = gtk_scrolled_window_new( NULL, NULL );
+ gtk_container_add( GTK_CONTAINER(vboxl), clist_swin );
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ clist = gtk_clist_new_with_titles( ATTRIB_N_COLS, titles );
+ gtk_container_add( GTK_CONTAINER(clist_swin), clist );
+ gtk_clist_set_selection_mode( GTK_CLIST(clist), GTK_SELECTION_BROWSE );
+ gtk_clist_set_column_width( GTK_CLIST(clist), ATTRIB_COL_NAME, ATTRIB_COL_WIDTH_NAME );
+ gtk_clist_set_column_width( GTK_CLIST(clist), ATTRIB_COL_VALUE, ATTRIB_COL_WIDTH_VALUE );
+
+ for( i = 0; i < ATTRIB_N_COLS; i++ )
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, GTK_CAN_FOCUS);
+
+ /* Data entry area */
+ table = gtk_table_new( 4, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vboxl), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 4 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_name = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Value"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_value = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_value, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Button box */
+ vboxb = gtk_vbox_new( FALSE, 4 );
+ gtk_box_pack_start(GTK_BOX(hbox), vboxb, FALSE, FALSE, 2);
+
+ vbuttonbox = gtk_vbutton_box_new();
+ gtk_button_box_set_layout( GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START );
+ gtk_box_set_spacing( GTK_BOX(vbuttonbox), 8 );
+ gtk_container_set_border_width( GTK_CONTAINER(vbuttonbox), 4 );
+ gtk_container_add( GTK_CONTAINER(vboxb), vbuttonbox );
+
+ /* Buttons */
+ buttonDel = gtk_button_new_with_label( _( "Delete" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonDel );
+
+ buttonMod = gtk_button_new_with_label( _( "Modify" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonMod );
+
+ buttonAdd = gtk_button_new_with_label( _( "Add" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonAdd );
+
+ buttonClr = gtk_button_new_with_label( _( "Clear" ) );
+ gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonClr );
+
+ gtk_widget_show_all(vbox);
+
+ /* Event handlers */
+ g_signal_connect( G_OBJECT(clist), "select_row",
+ G_CALLBACK( edit_person_attrib_list_selected), NULL );
+ g_signal_connect( G_OBJECT(buttonDel), "clicked",
+ G_CALLBACK( edit_person_attrib_delete ), NULL );
+ g_signal_connect( G_OBJECT(buttonMod), "clicked",
+ G_CALLBACK( edit_person_attrib_modify ), NULL );
+ g_signal_connect( G_OBJECT(buttonAdd), "clicked",
+ G_CALLBACK( edit_person_attrib_add ), NULL );
+ g_signal_connect( G_OBJECT(buttonClr), "clicked",
+ G_CALLBACK( edit_person_attrib_clear ), NULL );
+
+ personeditdlg.clist_attrib = clist;
+ personeditdlg.entry_atname = entry_name;
+ personeditdlg.entry_atvalue = entry_value;
+}
+
+static void addressbook_edit_person_create( gboolean *cancelled ) {
+ addressbook_edit_person_dialog_create( cancelled );
+ addressbook_edit_person_page_basic( PAGE_BASIC, _( "Basic Data" ) );
+ addressbook_edit_person_page_email( PAGE_EMAIL, _( "E-Mail Address" ) );
+ addressbook_edit_person_page_attrib( PAGE_ATTRIBUTES, _( "User Attributes" ) );
+ gtk_widget_show_all( personeditdlg.window );
+}
+
+/*
+* Return list of email items.
+*/
+static GList *edit_person_build_email_list() {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_email);
+ GList *listEMail = NULL;
+ ItemEMail *email;
+ gint row = 0;
+ while( (email = gtk_clist_get_row_data( clist, row )) ) {
+ listEMail = g_list_append( listEMail, email );
+ row++;
+ }
+ return listEMail;
+}
+
+/*
+* Return list of attributes.
+*/
+static GList *edit_person_build_attrib_list() {
+ GtkCList *clist = GTK_CLIST(personeditdlg.clist_attrib);
+ GList *listAttrib = NULL;
+ UserAttribute *attrib;
+ gint row = 0;
+ while( (attrib = gtk_clist_get_row_data( clist, row )) ) {
+ listAttrib = g_list_append( listAttrib, attrib );
+ row++;
+ }
+ return listAttrib;
+}
+
+/*
+* Edit person.
+* Enter: abf Address book.
+* parent Parent folder for person (or NULL if adding to root folder). Argument is
+* only required for new objects).
+* person Person to edit, or NULL for a new person object.
+* pgMail If TRUE, E-Mail page will be activated.
+* Return: Edited object, or NULL if cancelled.
+*/
+ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent, ItemPerson *person, gboolean pgMail ) {
+ static gboolean cancelled;
+ GList *listEMail = NULL;
+ GList *listAttrib = NULL;
+ gchar *cn = NULL;
+
+ if (!personeditdlg.window)
+ addressbook_edit_person_create(&cancelled);
+ gtk_widget_grab_focus(personeditdlg.ok_btn);
+ gtk_widget_grab_focus(personeditdlg.entry_name);
+ gtk_widget_show(personeditdlg.window);
+ manage_window_set_transient(GTK_WINDOW(personeditdlg.window));
+
+ /* Clear all fields */
+ personeditdlg.rowIndEMail = -1;
+ personeditdlg.rowIndAttrib = -1;
+ edit_person_status_show( "" );
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_email) );
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_attrib) );
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_name), "" );
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_first), "" );
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_last), "" );
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_nick), "" );
+
+ personeditdlg.editNew = FALSE;
+ if( person ) {
+ if( ADDRITEM_NAME(person) )
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_name), ADDRITEM_NAME(person) );
+ if( person->firstName )
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_first), person->firstName );
+ if( person->lastName )
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_last), person->lastName );
+ if( person->nickName )
+ gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_nick), person->nickName );
+ edit_person_load_email( person );
+ edit_person_load_attrib( person );
+ }
+ else {
+ personeditdlg.editNew = TRUE;
+ }
+
+ /* Select appropriate start page */
+ if( pgMail ) {
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_EMAIL );
+ }
+ else {
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(personeditdlg.notebook), PAGE_BASIC );
+ }
+
+ gtk_clist_select_row( GTK_CLIST(personeditdlg.clist_email), 0, 0 );
+ gtk_clist_select_row( GTK_CLIST(personeditdlg.clist_attrib), 0, 0 );
+ edit_person_email_clear( NULL );
+ edit_person_attrib_clear( NULL );
+
+ gtk_main();
+ gtk_widget_hide( personeditdlg.window );
+
+ listEMail = edit_person_build_email_list();
+ listAttrib = edit_person_build_attrib_list();
+ if( cancelled ) {
+ addritem_free_list_email( listEMail );
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_email) );
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_attrib) );
+ return NULL;
+ }
+
+ cn = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_name), 0, -1 );
+ if( person ) {
+ /* Update email/attribute list */
+ addrbook_update_address_list( abf, person, listEMail );
+ addrbook_update_attrib_list( abf, person, listAttrib );
+ }
+ else {
+ /* Create new person and email/attribute list */
+ if( cn == NULL || *cn == '\0' ) {
+ /* Wasting our time */
+ if( listEMail == NULL && listAttrib == NULL ) cancelled = TRUE;
+ }
+ if( ! cancelled ) {
+ person = addrbook_add_address_list( abf, parent, listEMail );
+ addrbook_add_attrib_list( abf, person, listAttrib );
+ }
+ }
+
+ if( !cancelled ) {
+ /* Set person stuff */
+ gchar *name;
+ addritem_person_set_common_name( person, cn );
+ name = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_first), 0, -1 );
+ addritem_person_set_first_name( person, name );
+ g_free( name );
+ name = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_last), 0, -1 );
+ addritem_person_set_last_name( person, name );
+ g_free( name );
+ name = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_nick), 0, -1 );
+ addritem_person_set_nick_name( person, name );
+ g_free( name );
+ }
+ g_free( cn );
+
+ listEMail = NULL;
+
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_email) );
+ gtk_clist_clear( GTK_CLIST(personeditdlg.clist_attrib) );
+
+ return person;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/editaddress.h b/src/editaddress.h
new file mode 100644
index 00000000..0d8d38d0
--- /dev/null
+++ b/src/editaddress.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit address item data.
+ */
+
+#ifndef __EDITADDRESS_H__
+#define __EDITADDRESS_H__
+
+ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent, ItemPerson *person, gboolean pgMail );
+
+#endif /* __EDITADDRESS_H__ */
diff --git a/src/editbook.c b/src/editbook.c
new file mode 100644
index 00000000..68208c03
--- /dev/null
+++ b/src/editbook.c
@@ -0,0 +1,348 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit new address book entry.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "utils.h"
+#include "prefs_common.h"
+#include "mgutils.h"
+#include "addressbook.h"
+#include "addressitem.h"
+#include "addrindex.h"
+#include "addrbook.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+
+#define ADDRESSBOOK_GUESS_BOOK "MyAddressBook"
+
+static struct _AddrBookEdit_Dlg {
+ GtkWidget *window;
+ GtkWidget *name_entry;
+ GtkWidget *file_label;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *check_btn;
+ /* GtkWidget *file_btn; */
+ GtkWidget *statusbar;
+ gint status_cid;
+ AddressBookFile *bookFile;
+} addrbookedit_dlg;
+
+/* static struct _AddressFileSelection vcard_file_selector; */
+
+/*
+* Edit functions.
+*/
+void edit_book_status_show( gchar *msg ) {
+ if( addrbookedit_dlg.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(addrbookedit_dlg.statusbar), addrbookedit_dlg.status_cid );
+ if( msg ) {
+ gtk_statusbar_push(
+ GTK_STATUSBAR(addrbookedit_dlg.statusbar), addrbookedit_dlg.status_cid, msg );
+ }
+ else {
+ gtk_statusbar_push(
+ GTK_STATUSBAR(addrbookedit_dlg.statusbar), addrbookedit_dlg.status_cid, "" );
+ }
+ }
+}
+
+static void edit_book_ok( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_book_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint edit_book_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_book_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void edit_book_file_check( void ) {
+ gint t;
+ gchar *sMsg;
+ AddressBookFile *abf = addrbookedit_dlg.bookFile;
+
+ t = addrbook_test_read_file( abf, abf->fileName );
+ if( t == MGU_SUCCESS ) {
+ sMsg = _("File appears to be Ok.");
+ }
+ else if( t == MGU_BAD_FORMAT ) {
+ sMsg = _("File does not appear to be a valid address book format.");
+ }
+ else {
+ sMsg = _("Could not read file.");
+ }
+ edit_book_status_show( sMsg );
+}
+
+static void edit_book_enable_buttons( gboolean enable ) {
+ gtk_widget_set_sensitive( addrbookedit_dlg.check_btn, enable );
+ /* gtk_widget_set_sensitive( addrbookedit_dlg.file_btn, enable ); */
+}
+
+static void edit_book_name_focus( GtkWidget *widget, GdkEventFocus *event, gpointer data) {
+ edit_book_status_show( "" );
+}
+
+static gchar *edit_book_guess_file( AddressBookFile *abf ) {
+ gchar *newFile = NULL;
+ GList *fileList = NULL;
+ gint fileNum = 1;
+ fileList = addrbook_get_bookfile_list( abf );
+ if( fileList ) {
+ fileNum = 1 + abf->maxValue;
+ }
+ newFile = addrbook_gen_new_file_name( fileNum );
+ g_list_free( fileList );
+ fileList = NULL;
+ return newFile;
+}
+
+static void addressbook_edit_book_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+ GtkWidget *file_label;
+ GtkWidget *hbbox;
+ GtkWidget *hsep;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *check_btn;
+ /* GtkWidget *file_btn; */
+ GtkWidget *statusbar;
+ GtkWidget *hsbox;
+ gint top;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit Addressbook"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_book_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_book_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ check_btn = gtk_button_new_with_label( _(" Check File "));
+ gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("File"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ file_label = gtk_label_new( "" );
+ gtk_misc_set_alignment(GTK_MISC(file_label), 0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), file_label, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* file_btn = gtk_button_new_with_label( _(" ... ")); */
+ /* gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); */
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
+ gtk_widget_grab_default(ok_btn);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(name_entry), "focus_in_event",
+ G_CALLBACK(edit_book_name_focus), NULL );
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_book_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_book_cancel), cancelled);
+/* g_signal_connect(G_OBJECT(file_btn), "clicked", */
+/* G_CALLBACK(edit_book_file_select), NULL); */
+ g_signal_connect(G_OBJECT(check_btn), "clicked",
+ G_CALLBACK(edit_book_file_check), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ addrbookedit_dlg.window = window;
+ addrbookedit_dlg.name_entry = name_entry;
+ addrbookedit_dlg.file_label = file_label;
+ addrbookedit_dlg.ok_btn = ok_btn;
+ addrbookedit_dlg.cancel_btn = cancel_btn;
+ addrbookedit_dlg.check_btn = check_btn;
+ /* addrbookedit_dlg.file_btn = file_btn; */
+ addrbookedit_dlg.statusbar = statusbar;
+ addrbookedit_dlg.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit Addressbook Dialog" );
+}
+
+AdapterDSource *addressbook_edit_book( AddressIndex *addrIndex, AdapterDSource *ads ) {
+ static gboolean cancelled;
+ gchar *sName;
+ AddressDataSource *ds = NULL;
+ AddressBookFile *abf;
+ gboolean fin;
+ gboolean newBook = FALSE;
+ gchar *newFile = NULL;
+
+ if (!addrbookedit_dlg.window)
+ addressbook_edit_book_create(&cancelled);
+ gtk_widget_grab_focus(addrbookedit_dlg.ok_btn);
+ gtk_widget_grab_focus(addrbookedit_dlg.name_entry);
+ gtk_widget_show(addrbookedit_dlg.window);
+ manage_window_set_transient(GTK_WINDOW(addrbookedit_dlg.window));
+
+ edit_book_status_show( "" );
+ gtk_label_set_text( GTK_LABEL(addrbookedit_dlg.file_label), "" );
+ if( ads ) {
+ ds = ads->dataSource;
+ abf = ds->rawDataSource;
+ if (abf->name)
+ gtk_entry_set_text(GTK_ENTRY(addrbookedit_dlg.name_entry), abf->name);
+ if( abf->fileName )
+ gtk_label_set_text(GTK_LABEL(addrbookedit_dlg.file_label), abf->fileName);
+ gtk_window_set_title( GTK_WINDOW(addrbookedit_dlg.window), _("Edit Addressbook"));
+ edit_book_enable_buttons( TRUE );
+ }
+ else {
+ gchar *tmp = NULL;
+ newBook = TRUE;
+ abf = addrbook_create_book();
+ addrbook_set_path( abf, addrIndex->filePath );
+
+ /* Take initial guess at file name */
+ newFile = edit_book_guess_file( abf );
+ if( newFile ) {
+ tmp = g_strdup_printf( "<%s>", newFile );
+ gtk_label_set_text(GTK_LABEL(addrbookedit_dlg.file_label), tmp );
+ g_free( tmp );
+ }
+ g_free( newFile );
+
+ gtk_entry_set_text( GTK_ENTRY(addrbookedit_dlg.name_entry), ADDRESSBOOK_GUESS_BOOK );
+ gtk_window_set_title( GTK_WINDOW(addrbookedit_dlg.window), _("Add New Addressbook") );
+ edit_book_enable_buttons( FALSE );
+ }
+
+ addrbookedit_dlg.bookFile = abf;
+
+ gtk_main();
+ gtk_widget_hide(addrbookedit_dlg.window);
+
+ if( cancelled == TRUE ) {
+ if( newBook ) {
+ addrbook_free_book( abf );
+ abf = NULL;
+ }
+ return NULL;
+ }
+
+ fin = FALSE;
+ sName = gtk_editable_get_chars( GTK_EDITABLE(addrbookedit_dlg.name_entry), 0, -1 );
+ if( *sName == '\0' ) fin = TRUE;
+
+ if( fin ) {
+ if( newBook ) {
+ addrbook_free_book( abf );
+ abf = NULL;
+ }
+ }
+ else {
+ if( newBook ) {
+ /* Get final file name in case it changed */
+ newFile = edit_book_guess_file( abf );
+ addrbook_set_file( abf, newFile );
+ g_free( newFile );
+ ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_BOOK, abf );
+ ads = addressbook_create_ds_adapter( ds, ADDR_BOOK, NULL );
+ }
+ addressbook_ads_set_name( ads, sName );
+ addrbook_set_name( abf, sName );
+ abf->dirtyFlag = TRUE;
+ }
+ g_free( sName );
+
+ /* Save data */
+ if( abf ) addrbook_save_data( abf );
+
+ return ads;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/editbook.h b/src/editbook.h
new file mode 100644
index 00000000..13e49651
--- /dev/null
+++ b/src/editbook.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit new address book data.
+ */
+
+#ifndef __EDITBOOK_H__
+#define __EDITBOOK_H__
+
+AdapterDSource *addressbook_edit_book( AddressIndex *addrIndex, AdapterDSource *ads );
+
+#endif /* __EDITBOOK_H__ */
diff --git a/src/editgroup.c b/src/editgroup.c
new file mode 100644
index 00000000..59948608
--- /dev/null
+++ b/src/editgroup.c
@@ -0,0 +1,540 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "intl.h"
+#include "addressbook.h"
+#include "addressitem.h"
+#include "addrbook.h"
+#include "addritem.h"
+
+#include "mgutils.h"
+
+#include "prefs_common.h"
+
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+
+#define ADDRESSBOOK_GUESS_FOLDER_NAME "NewFolder"
+#define ADDRESSBOOK_GUESS_GROUP_NAME "NewGroup"
+
+#define EDITGROUP_WIDTH 580
+#define EDITGROUP_HEIGHT 340
+
+typedef enum {
+ GROUP_COL_NAME = 0,
+ GROUP_COL_EMAIL = 1,
+ GROUP_COL_REMARKS = 2
+} GroupEditEMailColumnPos;
+
+#define GROUP_N_COLS 3
+#define GROUP_COL_WIDTH_NAME 140
+#define GROUP_COL_WIDTH_EMAIL 120
+
+static struct _GroupEdit_dlg {
+ GtkWidget *window;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+
+ /* Basic data tab */
+ GtkWidget *entry_name;
+ GtkCList *clist_group;
+ GtkCList *clist_avail;
+
+ GHashTable *hashEMail;
+ gint rowIndGroup;
+ gint rowIndAvail;
+
+} groupeditdlg;
+
+
+static gchar *_edit_group_dfl_message_ = NULL;
+
+static void edit_group_status_show( gchar *msg ) {
+ if( groupeditdlg.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(groupeditdlg.statusbar), groupeditdlg.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(groupeditdlg.statusbar), groupeditdlg.status_cid, msg );
+ }
+ }
+}
+
+static void edit_group_ok(GtkWidget *widget, gboolean *cancelled) {
+ gchar *sName;
+ gboolean errFlag = TRUE;
+
+ sName = gtk_editable_get_chars( GTK_EDITABLE(groupeditdlg.entry_name), 0, -1 );
+ if( sName ) {
+ g_strstrip( sName );
+ if( *sName != '\0' ) {
+ gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), sName );
+ *cancelled = FALSE;
+ gtk_main_quit();
+ errFlag = FALSE;
+ }
+ }
+ if( errFlag ) {
+ edit_group_status_show( _( "A Group Name must be supplied." ) );
+ }
+ g_free( sName );
+}
+
+static void edit_group_cancel(GtkWidget *widget, gboolean *cancelled) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint edit_group_delete_event(GtkWidget *widget, GdkEventAny *event, gboolean *cancelled) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_group_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static gchar *edit_group_format_item_clist( ItemPerson *person, ItemEMail *email ) {
+ gchar *str = NULL;
+ gchar *aName = ADDRITEM_NAME(email);
+ if( aName == NULL || *aName == '\0' ) return str;
+ if( person ) {
+ str = g_strdup_printf( "%s - %s", ADDRITEM_NAME(person), aName );
+ }
+ else {
+ str = g_strdup( aName );
+ }
+ return str;
+}
+
+static gint edit_group_clist_add_email( GtkCList *clist, ItemEMail *email ) {
+ ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+ gchar *str = edit_group_format_item_clist( person, email );
+ gchar *text[ GROUP_N_COLS ];
+ gint row;
+ if( str ) {
+ text[ GROUP_COL_NAME ] = str;
+ }
+ else {
+ text[ GROUP_COL_NAME ] = ADDRITEM_NAME(person);
+ }
+ text[ GROUP_COL_EMAIL ] = email->address;
+ text[ GROUP_COL_REMARKS ] = email->remarks;
+ row = gtk_clist_append( clist, text );
+ gtk_clist_set_row_data( clist, row, email );
+ return row;
+}
+
+static void edit_group_load_clist( GtkCList *clist, GList *listEMail ) {
+ GList *node = listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+ edit_group_clist_add_email( clist, email );
+ node = g_list_next( node );
+ }
+}
+
+static void edit_group_group_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ groupeditdlg.rowIndGroup = row;
+}
+
+static void edit_group_avail_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ groupeditdlg.rowIndAvail = row;
+}
+
+static gint edit_group_move_email( GtkCList *clist_from, GtkCList *clist_to, gint row ) {
+ ItemEMail *email = gtk_clist_get_row_data( clist_from, row );
+ gint rrow = -1;
+ if( email ) {
+ gtk_clist_remove( clist_from, row );
+ rrow = edit_group_clist_add_email( clist_to, email );
+ gtk_clist_select_row( clist_to, rrow, 0 );
+ }
+ return rrow;
+}
+
+static void edit_group_to_group( GtkWidget *widget, gpointer data ) {
+ groupeditdlg.rowIndGroup = edit_group_move_email( groupeditdlg.clist_avail,
+ groupeditdlg.clist_group, groupeditdlg.rowIndAvail );
+}
+
+static void edit_group_to_avail( GtkWidget *widget, gpointer data ) {
+ groupeditdlg.rowIndAvail = edit_group_move_email( groupeditdlg.clist_group,
+ groupeditdlg.clist_avail, groupeditdlg.rowIndGroup );
+}
+
+static gboolean edit_group_list_group_button( GtkCList *clist, GdkEventButton *event, gpointer data ) {
+ if( ! event ) return FALSE;
+ if( event->button == 1 ) {
+ if( event->type == GDK_2BUTTON_PRESS ) {
+ edit_group_to_avail( NULL, NULL );
+ }
+ }
+ return FALSE;
+}
+
+static gboolean edit_group_list_avail_button( GtkCList *clist, GdkEventButton *event, gpointer data ) {
+ if( ! event ) return FALSE;
+ if( event->button == 1 ) {
+ if( event->type == GDK_2BUTTON_PRESS ) {
+ edit_group_to_group( NULL, NULL );
+ }
+ }
+ return FALSE;
+}
+
+static gint edit_group_list_compare_func( GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2 ) {
+ GtkCell *cell1 = ((GtkCListRow *)ptr1)->cell;
+ GtkCell *cell2 = ((GtkCListRow *)ptr2)->cell;
+ gchar *name1 = NULL, *name2 = NULL;
+ if( cell1 ) name1 = cell1->u.text;
+ if( cell2 ) name2 = cell2->u.text;
+ if( ! name1 ) return ( name2 != NULL );
+ if( ! name2 ) return -1;
+ return strcasecmp( name1, name2 );
+}
+
+static void addressbook_edit_group_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+
+ GtkWidget *hboxg;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *entry_name;
+ GtkWidget *hboxl;
+ GtkWidget *vboxl;
+ GtkWidget *hboxh;
+
+ GtkWidget *clist_swin;
+ GtkWidget *clist_group;
+ GtkWidget *clist_avail;
+
+ GtkWidget *buttonGroup;
+ GtkWidget *buttonAvail;
+ gint top;
+
+ gchar *titles[ GROUP_N_COLS ];
+ gint i;
+
+ titles[ GROUP_COL_NAME ] = _( "Name" );
+ titles[ GROUP_COL_EMAIL ] = _("E-Mail Address");
+ titles[ GROUP_COL_REMARKS ] = _("Remarks");
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, EDITGROUP_WIDTH, EDITGROUP_HEIGHT );
+ gtk_container_set_border_width(GTK_CONTAINER(window), 0);
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit Group Data"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_group_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_group_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new( FALSE, 6 );
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH);
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( window ), vbox );
+
+ /* Group area */
+ hboxg = gtk_hbox_new( FALSE, 0 );
+ gtk_box_pack_start(GTK_BOX(vbox), hboxg, FALSE, FALSE, 0);
+
+ /* Data entry area */
+ table = gtk_table_new( 1, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(hboxg), table, TRUE, TRUE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 4 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 0);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Group Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_name = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* List area */
+ hboxl = gtk_hbox_new( FALSE, 6 );
+ gtk_container_set_border_width( GTK_CONTAINER(hboxl), 8 );
+ gtk_box_pack_start(GTK_BOX(vbox), hboxl, TRUE, TRUE, 0);
+
+ /* Group list */
+ vboxl = gtk_vbox_new( FALSE, 0 );
+ gtk_box_pack_start(GTK_BOX(hboxl), vboxl, TRUE, TRUE, 0);
+
+ hboxh = gtk_hbox_new( FALSE, 0 );
+ gtk_container_set_border_width( GTK_CONTAINER(hboxh), 4 );
+ gtk_box_pack_start(GTK_BOX(vboxl), hboxh, FALSE, FALSE, 0);
+ label = gtk_label_new(_("Addresses in Group"));
+ gtk_box_pack_start(GTK_BOX(hboxh), label, TRUE, TRUE, 0);
+ buttonAvail = gtk_button_new_with_label( _( " -> " ) );
+ gtk_box_pack_end(GTK_BOX(hboxh), buttonAvail, FALSE, FALSE, 0);
+
+ clist_swin = gtk_scrolled_window_new( NULL, NULL );
+ gtk_box_pack_start(GTK_BOX(vboxl), clist_swin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ clist_group = gtk_clist_new_with_titles( GROUP_N_COLS, titles );
+ gtk_container_add( GTK_CONTAINER(clist_swin), clist_group );
+ gtk_clist_set_selection_mode( GTK_CLIST(clist_group), GTK_SELECTION_BROWSE );
+ gtk_clist_set_column_width( GTK_CLIST(clist_group), GROUP_COL_NAME, GROUP_COL_WIDTH_NAME );
+ gtk_clist_set_column_width( GTK_CLIST(clist_group), GROUP_COL_EMAIL, GROUP_COL_WIDTH_EMAIL );
+ gtk_clist_set_compare_func( GTK_CLIST(clist_group), edit_group_list_compare_func );
+ gtk_clist_set_auto_sort( GTK_CLIST(clist_group), TRUE );
+
+ for( i = 0; i < GROUP_N_COLS; i++ )
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_group)->column[i].button, GTK_CAN_FOCUS);
+
+ /* Available list */
+ vboxl = gtk_vbox_new( FALSE, 0 );
+ gtk_box_pack_start(GTK_BOX(hboxl), vboxl, TRUE, TRUE, 0);
+
+ hboxh = gtk_hbox_new( FALSE, 0 );
+ gtk_container_set_border_width( GTK_CONTAINER(hboxh), 4 );
+ gtk_box_pack_start(GTK_BOX(vboxl), hboxh, FALSE, FALSE, 0);
+ buttonGroup = gtk_button_new_with_label( _( " <- " ) );
+ gtk_box_pack_start(GTK_BOX(hboxh), buttonGroup, FALSE, FALSE, 0);
+ label = gtk_label_new(_("Available Addresses"));
+ gtk_box_pack_end(GTK_BOX(hboxh), label, TRUE, TRUE, 0);
+
+ clist_swin = gtk_scrolled_window_new( NULL, NULL );
+ gtk_box_pack_start(GTK_BOX(vboxl), clist_swin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ clist_avail = gtk_clist_new_with_titles( GROUP_N_COLS, titles );
+ gtk_container_add( GTK_CONTAINER(clist_swin), clist_avail );
+ gtk_clist_set_selection_mode( GTK_CLIST(clist_avail), GTK_SELECTION_BROWSE );
+ gtk_clist_set_column_width( GTK_CLIST(clist_avail), GROUP_COL_NAME, GROUP_COL_WIDTH_NAME );
+ gtk_clist_set_column_width( GTK_CLIST(clist_avail), GROUP_COL_EMAIL, GROUP_COL_WIDTH_EMAIL );
+ gtk_clist_set_compare_func( GTK_CLIST(clist_avail), edit_group_list_compare_func );
+ gtk_clist_set_auto_sort( GTK_CLIST(clist_avail), TRUE );
+
+ for( i = 0; i < GROUP_N_COLS; i++ )
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_avail)->column[i].button, GTK_CAN_FOCUS);
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_group_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_group_cancel), cancelled);
+
+ gtk_widget_show_all(vbox);
+
+ /* Event handlers */
+ g_signal_connect(G_OBJECT(clist_group), "select_row",
+ G_CALLBACK( edit_group_group_selected), NULL);
+ g_signal_connect(G_OBJECT(clist_avail), "select_row",
+ G_CALLBACK( edit_group_avail_selected), NULL);
+ g_signal_connect(G_OBJECT(buttonGroup), "clicked",
+ G_CALLBACK( edit_group_to_group ), NULL);
+ g_signal_connect(G_OBJECT(buttonAvail), "clicked",
+ G_CALLBACK( edit_group_to_avail ), NULL);
+ g_signal_connect(G_OBJECT(clist_avail), "button_press_event",
+ G_CALLBACK(edit_group_list_avail_button), NULL);
+ g_signal_connect(G_OBJECT(clist_group), "button_press_event",
+ G_CALLBACK(edit_group_list_group_button), NULL);
+
+ groupeditdlg.window = window;
+ groupeditdlg.ok_btn = ok_btn;
+ groupeditdlg.cancel_btn = cancel_btn;
+ groupeditdlg.statusbar = statusbar;
+ groupeditdlg.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit Group Dialog" );
+
+ groupeditdlg.entry_name = entry_name;
+ groupeditdlg.clist_group = GTK_CLIST( clist_group );
+ groupeditdlg.clist_avail = GTK_CLIST( clist_avail );
+
+ if( ! _edit_group_dfl_message_ ) {
+ _edit_group_dfl_message_ = _( "Move E-Mail Addresses to or from Group with arrow buttons" );
+ }
+}
+
+/*
+* Return list of email items.
+*/
+static GList *edit_group_build_email_list() {
+ GtkCList *clist = GTK_CLIST(groupeditdlg.clist_group);
+ GList *listEMail = NULL;
+ ItemEMail *email;
+ gint row = 0;
+ while( (email = gtk_clist_get_row_data( clist, row )) ) {
+ listEMail = g_list_append( listEMail, email );
+ row++;
+ }
+ return listEMail;
+}
+
+/*
+* Edit group.
+* Enter: abf Address book.
+* folder Parent folder for group (or NULL if adding to root folder). Argument is
+* only required for new objects).
+* group Group to edit, or NULL for a new group object.
+* Return: Edited object, or NULL if cancelled.
+*/
+ItemGroup *addressbook_edit_group( AddressBookFile *abf, ItemFolder *parent, ItemGroup *group ) {
+ static gboolean cancelled;
+ GList *listEMail = NULL;
+ gchar *name;
+
+ if (!groupeditdlg.window)
+ addressbook_edit_group_create(&cancelled);
+ gtk_widget_grab_focus(groupeditdlg.ok_btn);
+ gtk_widget_grab_focus(groupeditdlg.entry_name);
+ gtk_widget_show(groupeditdlg.window);
+ manage_window_set_transient(GTK_WINDOW(groupeditdlg.window));
+
+ /* Clear all fields */
+ groupeditdlg.rowIndGroup = -1;
+ groupeditdlg.rowIndAvail = -1;
+ edit_group_status_show( "" );
+ gtk_clist_clear( GTK_CLIST(groupeditdlg.clist_group) );
+ gtk_clist_clear( GTK_CLIST(groupeditdlg.clist_avail) );
+
+ if( group ) {
+ if( ADDRITEM_NAME(group) )
+ gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), ADDRITEM_NAME(group) );
+ edit_group_load_clist( groupeditdlg.clist_group, group->listEMail );
+ gtk_window_set_title( GTK_WINDOW(groupeditdlg.window), _("Edit Group Details"));
+ }
+ else {
+ gtk_window_set_title( GTK_WINDOW(groupeditdlg.window), _("Add New Group"));
+ gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), ADDRESSBOOK_GUESS_GROUP_NAME );
+ }
+
+ listEMail = addrbook_get_available_email_list( abf, group );
+ edit_group_load_clist( groupeditdlg.clist_avail, listEMail );
+ mgu_clear_list( listEMail );
+ listEMail = NULL;
+ gtk_clist_select_row( groupeditdlg.clist_group, 0, 0 );
+ gtk_clist_select_row( groupeditdlg.clist_avail, 0, 0 );
+
+ edit_group_status_show( _edit_group_dfl_message_ );
+
+ gtk_main();
+ gtk_widget_hide( groupeditdlg.window );
+
+ if( cancelled ) {
+ return NULL;
+ }
+
+ listEMail = edit_group_build_email_list();
+ if( group ) {
+ /* Update email list */
+ addrbook_update_group_list( abf, group, listEMail );
+ }
+ else {
+ /* Create new person and email list */
+ group = addrbook_add_group_list( abf, parent, listEMail );
+ }
+ name = gtk_editable_get_chars( GTK_EDITABLE(groupeditdlg.entry_name), 0, -1 );
+ addritem_group_set_name( group, name );
+ g_free( name );
+
+ listEMail = NULL;
+ return group;
+}
+
+/*
+* Edit folder.
+* Enter: abf Address book.
+* parent Parent folder for folder (or NULL if adding to root folder). Argument is
+* only required for new objects).
+* folder Folder to edit, or NULL for a new folder object.
+* Return: Edited object, or NULL if cancelled.
+*/
+ItemFolder *addressbook_edit_folder( AddressBookFile *abf, ItemFolder *parent, ItemFolder *folder ) {
+ gchar *name = NULL;
+
+ if( folder ) {
+ name = g_strdup( ADDRITEM_NAME(folder) );
+ name = input_dialog( _("Edit folder"), _("Input the new name of folder:"), name );
+ }
+ else {
+ name = input_dialog( _("New folder"),
+ _("Input the name of new folder:"),
+ _(ADDRESSBOOK_GUESS_FOLDER_NAME) );
+ }
+ if( ! name ) return NULL;
+ g_strstrip( name );
+ if( *name == '\0' ) {
+ g_free( name );
+ return NULL;
+ }
+ if( folder ) {
+ if( strcasecmp( name, ADDRITEM_NAME(folder) ) == 0 ) {
+ g_free( name );
+ return NULL;
+ }
+ }
+
+ if( ! folder ) {
+ folder = addrbook_add_new_folder( abf, parent );
+ }
+ addritem_folder_set_name( folder, name );
+ g_free( name );
+ return folder;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/editgroup.h b/src/editgroup.h
new file mode 100644
index 00000000..6a3571dd
--- /dev/null
+++ b/src/editgroup.h
@@ -0,0 +1,26 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EDITGROUP_H__
+#define __EDITGROUP_H__
+
+ItemGroup *addressbook_edit_group( AddressBookFile *abf, ItemFolder *folder, ItemGroup *group );
+ItemFolder *addressbook_edit_folder( AddressBookFile *abf, ItemFolder *parent, ItemFolder *folder );
+
+#endif /* __EDITGROUP_H__ */
diff --git a/src/editjpilot.c b/src/editjpilot.c
new file mode 100644
index 00000000..b2b36f01
--- /dev/null
+++ b/src/editjpilot.c
@@ -0,0 +1,447 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit JPilot address book data.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_JPILOT
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "addressbook.h"
+#include "prefs_common.h"
+#include "addressitem.h"
+#include "jpilot.h"
+#include "mgutils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+
+#define ADDRESSBOOK_GUESS_JPILOT "MyJPilot"
+#define JPILOT_NUM_CUSTOM_LABEL 4
+
+static struct _JPilotEdit {
+ GtkWidget *window;
+ GtkWidget *name_entry;
+ GtkWidget *file_entry;
+ GtkWidget *custom_check[JPILOT_NUM_CUSTOM_LABEL];
+ GtkWidget *custom_label[JPILOT_NUM_CUSTOM_LABEL];
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+} jpilotedit;
+
+static struct _AddressFileSelection jpilot_file_selector;
+
+/*
+* Edit functions.
+*/
+void edit_jpilot_status_show( gchar *msg ) {
+ if( jpilotedit.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(jpilotedit.statusbar), jpilotedit.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(jpilotedit.statusbar), jpilotedit.status_cid, msg );
+ }
+ }
+}
+
+static gint edit_jpilot_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_jpilot_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void edit_jpilot_ok( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_jpilot_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static void edit_jpilot_fill_check_box( JPilotFile *jpf ) {
+ gint i;
+ GList *node, *customLbl = NULL;
+ gchar *labelName;
+ gboolean done, checked;
+ for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) {
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), FALSE );
+ gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), "" );
+ }
+
+ done = FALSE;
+ i = 0;
+ customLbl = jpilot_load_custom_label( jpf, customLbl );
+ node = customLbl;
+ while( ! done ) {
+ if( node ) {
+ labelName = node->data;
+ gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), labelName );
+ checked = jpilot_test_custom_label( jpf, labelName );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), checked );
+ i++;
+ if( i >= JPILOT_NUM_CUSTOM_LABEL ) done = TRUE;
+ node = g_list_next( node );
+ }
+ else {
+ done = TRUE;
+ }
+ }
+ mgu_free_dlist( customLbl );
+ customLbl = NULL;
+}
+
+static void edit_jpilot_fill_check_box_new() {
+ gint i;
+ for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) {
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( jpilotedit.custom_check[i] ), FALSE );
+ gtk_label_set_text( GTK_LABEL( jpilotedit.custom_label[i] ), "" );
+ }
+}
+
+static void edit_jpilot_read_check_box( JPilotFile *pilotFile ) {
+ gint i;
+ gchar *labelName;
+ jpilot_clear_custom_labels( pilotFile );
+ for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) {
+ if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(jpilotedit.custom_check[i]) ) ) {
+ labelName = GTK_LABEL(jpilotedit.custom_label[i])->label;
+ jpilot_add_custom_label( pilotFile, labelName );
+ }
+ }
+}
+
+static void edit_jpilot_file_check( void ) {
+ gint t = -1;
+ gchar *sFile;
+ gchar *sMsg;
+ gboolean flg;
+
+ flg = FALSE;
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 );
+ if( sFile ) {
+ g_strchomp( sFile ); g_strchug( sFile );
+ if( *sFile != '\0' ) {
+ /* Attempt to read file */
+ JPilotFile *jpf = jpilot_create_path( sFile );
+ t = jpilot_read_data( jpf );
+ if( t == MGU_SUCCESS ) {
+ /* Set check boxes */
+ edit_jpilot_fill_check_box( jpf );
+ flg = TRUE;
+ }
+ jpilot_free( jpf );
+ jpf = NULL;
+ }
+ }
+ if( ! flg ) {
+ /* Clear all check boxes */
+ edit_jpilot_fill_check_box_new();
+ }
+ g_free( sFile );
+
+ /* Display appropriate message */
+ if( t == MGU_SUCCESS ) {
+ sMsg = "";
+ }
+ else if( t == MGU_BAD_FORMAT || t == MGU_OO_MEMORY ) {
+ sMsg = _("File does not appear to be JPilot format.");
+ }
+ else {
+ sMsg = _("Could not read file.");
+ }
+ edit_jpilot_status_show( sMsg );
+}
+
+static void edit_jpilot_file_ok( GtkWidget *widget, gpointer data ) {
+ const gchar *sFile;
+ AddressFileSelection *afs;
+ GtkWidget *fileSel;
+
+ afs = ( AddressFileSelection * ) data;
+ fileSel = afs->fileSelector;
+ sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) );
+
+ afs->cancelled = FALSE;
+ gtk_entry_set_text( GTK_ENTRY(jpilotedit.file_entry), sFile );
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ edit_jpilot_file_check();
+ gtk_widget_grab_focus( jpilotedit.file_entry );
+}
+
+static void edit_jpilot_file_cancel( GtkWidget *widget, gpointer data ) {
+ AddressFileSelection *afs = ( AddressFileSelection * ) data;
+ afs->cancelled = TRUE;
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ gtk_widget_grab_focus( jpilotedit.file_entry );
+}
+
+static void edit_jpilot_file_select_create( AddressFileSelection *afs ) {
+ GtkWidget *fileSelector;
+
+ fileSelector = gtk_file_selection_new( _("Select JPilot File") );
+ gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button),
+ "clicked", G_CALLBACK (edit_jpilot_file_ok), ( gpointer ) afs );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button),
+ "clicked", G_CALLBACK (edit_jpilot_file_cancel), ( gpointer ) afs );
+ afs->fileSelector = fileSelector;
+ afs->cancelled = TRUE;
+}
+
+static void edit_jpilot_file_select( void ) {
+ gchar *sFile;
+
+ if (! jpilot_file_selector.fileSelector )
+ edit_jpilot_file_select_create( & jpilot_file_selector );
+
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 );
+ gtk_file_selection_set_filename( GTK_FILE_SELECTION( jpilot_file_selector.fileSelector ), sFile );
+ g_free( sFile );
+ gtk_widget_show( jpilot_file_selector.fileSelector );
+ gtk_grab_add( jpilot_file_selector.fileSelector );
+}
+
+static void addressbook_edit_jpilot_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+ GtkWidget *file_entry;
+ GtkWidget *vbox_custom;
+ GtkWidget *frame_custom;
+ GtkWidget *custom_check[JPILOT_NUM_CUSTOM_LABEL];
+ GtkWidget *custom_label[JPILOT_NUM_CUSTOM_LABEL];
+ GtkWidget *hlbox;
+ GtkWidget *hbbox;
+ GtkWidget *hsep;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *check_btn;
+ GtkWidget *file_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+ gint top, i;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 0);
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit JPilot Entry"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_jpilot_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_jpilot_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+
+ table = gtk_table_new(2 + JPILOT_NUM_CUSTOM_LABEL, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ check_btn = gtk_button_new_with_label( _(" Check File "));
+ gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("File"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ file_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ file_btn = gtk_button_new_with_label( _(" ... "));
+ gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Third row */
+ top = 2;
+ frame_custom = gtk_frame_new(_("Additional e-Mail address item(s)"));
+ gtk_table_attach(GTK_TABLE(table), frame_custom, 1, 2, top, (top + JPILOT_NUM_CUSTOM_LABEL), GTK_FILL, 0, 0, 0);
+
+ /* Now do custom labels. */
+ vbox_custom = gtk_vbox_new (FALSE, 8);
+ for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) {
+ hlbox = gtk_hbox_new( FALSE, 0 );
+ custom_check[i] = gtk_check_button_new();
+ custom_label[i] = gtk_label_new( "" );
+ gtk_box_pack_start( GTK_BOX(hlbox), custom_check[i], FALSE, FALSE, 0 );
+ gtk_box_pack_start( GTK_BOX(hlbox), custom_label[i], TRUE, TRUE, 0 );
+ gtk_box_pack_start( GTK_BOX(vbox_custom), hlbox, TRUE, TRUE, 0 );
+ gtk_misc_set_alignment(GTK_MISC(custom_label[i]), 0, 0.5);
+ top++;
+ }
+ gtk_container_add (GTK_CONTAINER (frame_custom), vbox_custom);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox_custom), 8 );
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
+ gtk_widget_grab_default(ok_btn);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_jpilot_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_jpilot_cancel), cancelled);
+ g_signal_connect(G_OBJECT(file_btn), "clicked",
+ G_CALLBACK(edit_jpilot_file_select), NULL);
+ g_signal_connect(G_OBJECT(check_btn), "clicked",
+ G_CALLBACK(edit_jpilot_file_check), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ jpilotedit.window = window;
+ jpilotedit.name_entry = name_entry;
+ jpilotedit.file_entry = file_entry;
+ jpilotedit.ok_btn = ok_btn;
+ jpilotedit.cancel_btn = cancel_btn;
+ jpilotedit.statusbar = statusbar;
+ jpilotedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit JPilot Dialog" );
+ for( i = 0; i < JPILOT_NUM_CUSTOM_LABEL; i++ ) {
+ jpilotedit.custom_check[i] = custom_check[i];
+ jpilotedit.custom_label[i] = custom_label[i];
+ }
+}
+
+AdapterDSource *addressbook_edit_jpilot( AddressIndex *addrIndex, AdapterDSource *ads ) {
+ static gboolean cancelled;
+ gchar *sName;
+ gchar *sFile;
+ AddressDataSource *ds = NULL;
+ JPilotFile *jpf = NULL;
+ gboolean fin;
+
+ if( ! jpilotedit.window )
+ addressbook_edit_jpilot_create(&cancelled);
+ gtk_widget_grab_focus(jpilotedit.ok_btn);
+ gtk_widget_grab_focus(jpilotedit.name_entry);
+ gtk_widget_show(jpilotedit.window);
+ manage_window_set_transient(GTK_WINDOW(jpilotedit.window));
+
+ edit_jpilot_status_show( "" );
+ if( ads ) {
+ ds = ads->dataSource;
+ jpf = ds->rawDataSource;
+ if (jpf->name)
+ gtk_entry_set_text(GTK_ENTRY(jpilotedit.name_entry), jpf->name);
+ if (jpf->path)
+ gtk_entry_set_text(GTK_ENTRY(jpilotedit.file_entry), jpf->path);
+ gtk_window_set_title( GTK_WINDOW(jpilotedit.window), _("Edit JPilot Entry"));
+ edit_jpilot_fill_check_box( jpf );
+ }
+ else {
+ gchar *guessFile = jpilot_find_pilotdb();
+ gtk_entry_set_text(GTK_ENTRY(jpilotedit.name_entry), ADDRESSBOOK_GUESS_JPILOT );
+ gtk_entry_set_text(GTK_ENTRY(jpilotedit.file_entry), guessFile );
+ gtk_window_set_title( GTK_WINDOW(jpilotedit.window), _("Add New JPilot Entry"));
+ edit_jpilot_fill_check_box_new();
+ if( *guessFile != '\0' ) {
+ edit_jpilot_file_check();
+ }
+ }
+
+ gtk_main();
+ gtk_widget_hide(jpilotedit.window);
+ if (cancelled == TRUE) return NULL;
+
+ fin = FALSE;
+ sName = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.name_entry), 0, -1 );
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(jpilotedit.file_entry), 0, -1 );
+ if( *sName == '\0' ) fin = TRUE;
+ if( *sFile == '\0' ) fin = TRUE;
+
+ if( ! fin ) {
+ if( ! ads ) {
+ jpf = jpilot_create();
+ ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_JPILOT, jpf );
+ ads = addressbook_create_ds_adapter( ds, ADDR_JPILOT, NULL );
+ }
+ addressbook_ads_set_name( ads, sName );
+ jpilot_set_name( jpf, sName );
+ jpilot_set_file( jpf, sFile );
+ edit_jpilot_read_check_box( jpf );
+ }
+ g_free( sName );
+ g_free( sFile );
+
+ return ads;
+}
+
+#endif /* USE_JPILOT */
+
+/*
+* End of Source.
+*/
+
diff --git a/src/editjpilot.h b/src/editjpilot.h
new file mode 100644
index 00000000..e866255e
--- /dev/null
+++ b/src/editjpilot.h
@@ -0,0 +1,33 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit JPilot address book data.
+ */
+
+#ifndef __EDITJPILOT_H__
+#define __EDITJPILOT_H__
+
+#ifdef USE_JPILOT
+
+AdapterDSource *addressbook_edit_jpilot( AddressIndex *addrIndex, AdapterDSource *ads );
+
+#endif /* USE_JPILOT */
+
+#endif /* __EDITJPILOT_H__ */
diff --git a/src/editldap.c b/src/editldap.c
new file mode 100644
index 00000000..4ef4e4a3
--- /dev/null
+++ b/src/editldap.c
@@ -0,0 +1,600 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit LDAP address book data.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_LDAP
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "addressbook.h"
+#include "prefs_common.h"
+#include "addressitem.h"
+#include "mgutils.h"
+#include "syldap.h"
+#include "editldap_basedn.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+
+#define ADDRESSBOOK_GUESS_LDAP_NAME "MyServer"
+#define ADDRESSBOOK_GUESS_LDAP_SERVER "localhost"
+
+#define LDAPEDIT_TABLE_ROWS 6
+#define LDAPEDIT_TABLE_COLS 3
+
+static struct _LDAPEdit {
+ GtkWidget *window;
+ GtkWidget *notebook;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+ GtkWidget *entry_name;
+ GtkWidget *entry_server;
+ GtkWidget *spinbtn_port;
+ GtkWidget *entry_baseDN;
+ GtkWidget *spinbtn_timeout;
+ GtkWidget *entry_bindDN;
+ GtkWidget *entry_bindPW;
+ GtkWidget *entry_criteria;
+ GtkWidget *spinbtn_maxentry;
+} ldapedit;
+
+/*
+* Edit functions.
+*/
+static void edit_ldap_status_show( gchar *msg ) {
+ if( ldapedit.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid, msg );
+ }
+ }
+}
+
+static void edit_ldap_ok( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_ldap_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static gint edit_ldap_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void edit_ldap_switch_page( GtkWidget *widget ) {
+ edit_ldap_status_show( "" );
+}
+
+static void edit_ldap_server_check( void ) {
+ gchar *sHost, *sBind, *sPass;
+ gint iPort, iTime;
+ gchar *sMsg;
+ gchar *sBaseDN = NULL;
+ gint iBaseDN = 0;
+ gboolean flg;
+
+ edit_ldap_status_show( "" );
+ flg = FALSE;
+ sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
+ sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
+ sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
+ iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
+ iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
+ g_strchomp( sHost ); g_strchug( sHost );
+ g_strchomp( sBind ); g_strchug( sBind );
+ g_strchomp( sPass ); g_strchug( sPass );
+ if( *sHost != '\0' ) {
+ /* Test connection to server */
+ if( syldap_test_connect_s( sHost, iPort ) ) {
+ /* Attempt to read base DN */
+ GList *baseDN = syldap_read_basedn_s( sHost, iPort, sBind, sPass, iTime );
+ if( baseDN ) {
+ GList *node = baseDN;
+ while( node ) {
+ ++iBaseDN;
+ if( ! sBaseDN ) {
+ sBaseDN = g_strdup( node->data );
+ }
+ node = g_list_next( node );
+ }
+ mgu_free_dlist( baseDN );
+ baseDN = node = NULL;
+ }
+ flg = TRUE;
+ }
+ }
+ g_free( sHost );
+ g_free( sBind );
+ g_free( sPass );
+
+ if( sBaseDN ) {
+ /* Load search DN */
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), sBaseDN);
+ g_free( sBaseDN );
+ }
+
+ /* Display appropriate message */
+ if( flg ) {
+ sMsg = _( "Connected successfully to server" );
+ }
+ else {
+ sMsg = _( "Could not connect to server" );
+ }
+ edit_ldap_status_show( sMsg );
+}
+
+static void edit_ldap_basedn_select( void ) {
+ gchar *sHost, *sBind, *sPass, *sBase;
+ gint iPort, iTime;
+ gchar *selectDN;
+
+ sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
+ sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 );
+ sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
+ sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
+ iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
+ iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
+ g_strchomp( sHost ); g_strchug( sHost );
+ g_strchomp( sBind ); g_strchug( sBind );
+ g_strchomp( sPass ); g_strchug( sPass );
+ selectDN = edit_ldap_basedn_selection( sHost, iPort, sBase, iTime, sBind, sPass );
+ if( selectDN ) {
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), selectDN);
+ g_free( selectDN );
+ selectDN = NULL;
+ }
+ g_free( sHost );
+ g_free( sBase );
+ g_free( sBind );
+ g_free( sPass );
+}
+
+static void edit_ldap_search_reset( void ) {
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
+}
+
+static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *notebook;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 0);
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP Server"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_ldap_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_ldap_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new( FALSE, 6 );
+ /* gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); */
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( window ), vbox );
+
+ /* Notebook */
+ notebook = gtk_notebook_new();
+ gtk_widget_show( notebook );
+ gtk_box_pack_start( GTK_BOX( vbox ), notebook, TRUE, TRUE, 0 );
+ gtk_container_set_border_width( GTK_CONTAINER( notebook ), 6 );
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_ldap_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_ldap_cancel), cancelled);
+ g_signal_connect(G_OBJECT(notebook), "switch_page",
+ G_CALLBACK(edit_ldap_switch_page), NULL );
+
+ gtk_widget_show_all(vbox);
+
+ ldapedit.window = window;
+ ldapedit.notebook = notebook;
+ ldapedit.ok_btn = ok_btn;
+ ldapedit.cancel_btn = cancel_btn;
+ ldapedit.statusbar = statusbar;
+ ldapedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Server Dialog" );
+}
+
+void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *entry_name;
+ GtkWidget *entry_server;
+ GtkWidget *hbox_spin;
+ GtkObject *spinbtn_port_adj;
+ GtkWidget *spinbtn_port;
+ GtkWidget *entry_baseDN;
+ GtkWidget *check_btn;
+ GtkWidget *lookdn_btn;
+ gint top;
+
+ vbox = gtk_vbox_new( FALSE, 8 );
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
+ /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( ldapedit.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label );
+
+ table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_name = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Hostname"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_server = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_server, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Port"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ hbox_spin = gtk_hbox_new (FALSE, 8);
+ spinbtn_port_adj = gtk_adjustment_new (389, 1, 65535, 100, 1000, 1000);
+ spinbtn_port = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_port_adj), 1, 0);
+ gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_port, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_port, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_port), TRUE);
+ gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ check_btn = gtk_button_new_with_label( _(" Check Server "));
+ gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Search Base"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_baseDN = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_baseDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ lookdn_btn = gtk_button_new_with_label( _(" ... "));
+ gtk_table_attach(GTK_TABLE(table), lookdn_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ g_signal_connect(G_OBJECT(check_btn), "clicked",
+ G_CALLBACK(edit_ldap_server_check), NULL);
+ g_signal_connect(G_OBJECT(lookdn_btn), "clicked",
+ G_CALLBACK(edit_ldap_basedn_select), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ ldapedit.entry_name = entry_name;
+ ldapedit.entry_server = entry_server;
+ ldapedit.spinbtn_port = spinbtn_port;
+ ldapedit.entry_baseDN = entry_baseDN;
+}
+
+void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *entry_bindDN;
+ GtkWidget *entry_bindPW;
+ GtkWidget *entry_criteria;
+ GtkWidget *hbox_spin;
+ GtkObject *spinbtn_timeout_adj;
+ GtkWidget *spinbtn_timeout;
+ GtkObject *spinbtn_maxentry_adj;
+ GtkWidget *spinbtn_maxentry;
+ GtkWidget *reset_btn;
+ gint top;
+
+ vbox = gtk_vbox_new( FALSE, 8 );
+ gtk_widget_show( vbox );
+ gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
+ /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( ldapedit.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label );
+
+ table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Search Criteria"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_criteria = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_criteria, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ reset_btn = gtk_button_new_with_label( _(" Reset "));
+ gtk_table_attach(GTK_TABLE(table), reset_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Bind DN"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_bindDN = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_bindDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Bind Password"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ entry_bindPW = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), entry_bindPW, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Timeout (secs)"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ hbox_spin = gtk_hbox_new (FALSE, 8);
+ spinbtn_timeout_adj = gtk_adjustment_new (0, 0, 300, 1, 10, 10);
+ spinbtn_timeout = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_timeout_adj), 1, 0);
+ gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_timeout, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_timeout, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_timeout), TRUE);
+ gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Maximum Entries"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ hbox_spin = gtk_hbox_new (FALSE, 8);
+ spinbtn_maxentry_adj = gtk_adjustment_new (0, 0, 500, 1, 10, 10);
+ spinbtn_maxentry = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_maxentry_adj), 1, 0);
+ gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_maxentry, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_maxentry, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxentry), TRUE);
+ gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ g_signal_connect(G_OBJECT(reset_btn), "clicked",
+ G_CALLBACK(edit_ldap_search_reset), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ ldapedit.entry_criteria = entry_criteria;
+ ldapedit.entry_bindDN = entry_bindDN;
+ ldapedit.entry_bindPW = entry_bindPW;
+ ldapedit.spinbtn_timeout = spinbtn_timeout;
+ ldapedit.spinbtn_maxentry = spinbtn_maxentry;
+}
+
+static void addressbook_edit_ldap_create( gboolean *cancelled ) {
+ gint page = 0;
+ addressbook_edit_ldap_dialog_create( cancelled );
+ addressbook_edit_ldap_page_basic( page++, _( "Basic" ) );
+ addressbook_edit_ldap_page_extended( page++, _( "Extended" ) );
+ gtk_widget_show_all( ldapedit.window );
+}
+
+void edit_ldap_set_optmenu( GtkOptionMenu *optmenu, const gint value ) {
+ GList *cur;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gint menuVal;
+ gint n = 0;
+
+ g_return_if_fail(optmenu != NULL);
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ for( cur = GTK_MENU_SHELL(menu)->children; cur != NULL; cur = cur->next ) {
+ menuitem = GTK_WIDGET(cur->data);
+ menuVal = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data"));
+ if( menuVal == value ) {
+ gtk_option_menu_set_history(optmenu, n);
+ return;
+ }
+ n++;
+ }
+ gtk_option_menu_set_history(optmenu, 0);
+}
+
+gint edit_ldap_get_optmenu( GtkOptionMenu *optmenu ) {
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ g_return_val_if_fail(optmenu != NULL, -1);
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data"));
+}
+
+AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource *ads ) {
+ static gboolean cancelled;
+ gchar *sName, *sHost, *sBase, *sBind, *sPass, *sCrit;
+ gint iPort, iMaxE, iTime;
+ AddressDataSource *ds = NULL;
+ SyldapServer *server = NULL;
+ gboolean fin;
+
+ if (!ldapedit.window)
+ addressbook_edit_ldap_create(&cancelled);
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(ldapedit.notebook), 0 );
+ gtk_widget_grab_focus(ldapedit.ok_btn);
+ gtk_widget_grab_focus(ldapedit.entry_name);
+ gtk_widget_show(ldapedit.window);
+ manage_window_set_transient(GTK_WINDOW(ldapedit.window));
+
+ edit_ldap_status_show( "" );
+ if( ads ) {
+ ds = ads->dataSource;
+ server = ds->rawDataSource;
+ if (server->name)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), server->name);
+ if (server->hostName)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), server->hostName);
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), server->port );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), server->timeOut );
+ if (server->baseDN)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), server->baseDN);
+ if (server->searchCriteria)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), server->searchCriteria);
+ if (server->bindDN)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), server->bindDN);
+ if (server->bindPass)
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), server->bindPass);
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), server->maxEntries );
+ gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Edit LDAP Server"));
+ }
+ else {
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), ADDRESSBOOK_GUESS_LDAP_NAME );
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), ADDRESSBOOK_GUESS_LDAP_SERVER );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), SYLDAP_DFL_PORT );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), SYLDAP_DFL_TIMEOUT );
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), "");
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), "");
+ gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), "");
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), SYLDAP_MAX_ENTRIES );
+ gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Add New LDAP Server"));
+ }
+
+ gtk_main();
+ gtk_widget_hide(ldapedit.window);
+ if (cancelled == TRUE) return NULL;
+
+ fin = FALSE;
+ sName = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_name), 0, -1 );
+ sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
+ iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
+ iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
+ sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 );
+ sCrit = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_criteria), 0, -1 );
+ sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
+ sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
+ iMaxE = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ) );
+
+ if( *sName == '\0' ) fin = TRUE;
+ if( *sHost == '\0' ) fin = TRUE;
+ if( *sBase == '\0' ) fin = TRUE;
+
+ if( ! fin ) {
+ if( ! ads ) {
+ server = syldap_create();
+ ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_LDAP, server );
+ ads = addressbook_create_ds_adapter( ds, ADDR_LDAP, NULL );
+ }
+ addressbook_ads_set_name( ads, sName );
+ syldap_set_name( server, sName );
+ syldap_set_host( server, sHost );
+ syldap_set_port( server, iPort );
+ syldap_set_base_dn( server, sBase );
+ syldap_set_bind_dn( server, sBind );
+ syldap_set_bind_password( server, sPass );
+ syldap_set_search_criteria( server, sCrit );
+ syldap_set_max_entries( server, iMaxE );
+ syldap_set_timeout( server, iTime );
+ }
+ g_free( sName );
+ g_free( sHost );
+ g_free( sBase );
+ g_free( sBind );
+ g_free( sPass );
+ g_free( sCrit );
+
+ return ads;
+}
+
+#endif /* USE_LDAP */
+
+/*
+* End of Source.
+*/
diff --git a/src/editldap.h b/src/editldap.h
new file mode 100644
index 00000000..d1bab628
--- /dev/null
+++ b/src/editldap.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EDITLDAP_H__
+#define __EDITLDAP_H__
+
+#ifdef USE_LDAP
+
+AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource *ads );
+
+#endif /* USE_LDAP */
+
+#endif /* __EDITLDAP_H__ */
diff --git a/src/editldap_basedn.c b/src/editldap_basedn.c
new file mode 100644
index 00000000..54bca814
--- /dev/null
+++ b/src/editldap_basedn.c
@@ -0,0 +1,332 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * LDAP Base DN selection dialog.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_LDAP
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "prefs_common.h"
+#include "syldap.h"
+#include "mgutils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+
+static struct _LDAPEdit_basedn {
+ GtkWidget *window;
+ GtkWidget *host_label;
+ GtkWidget *port_label;
+ GtkWidget *basedn_entry;
+ GtkWidget *basedn_list;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+} ldapedit_basedn;
+
+static gboolean ldapedit_basedn_cancelled;
+static gboolean ldapedit_basedn_bad_server;
+
+/*
+* Edit functions.
+*/
+static void edit_ldap_bdn_status_show( gchar *msg ) {
+ if( ldapedit_basedn.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(ldapedit_basedn.statusbar), ldapedit_basedn.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(ldapedit_basedn.statusbar), ldapedit_basedn.status_cid, msg );
+ }
+ }
+}
+
+static gint edit_ldap_bdn_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ ldapedit_basedn_cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_ldap_bdn_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ ldapedit_basedn_cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void edit_ldap_bdn_ok( GtkWidget *widget, gboolean *cancelled ) {
+ ldapedit_basedn_cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_ldap_bdn_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ ldapedit_basedn_cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static void edit_ldap_bdn_list_select( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ gchar *text = NULL;
+
+ if( gtk_clist_get_text( clist, row, 0, &text ) ) {
+ if( text ) {
+ gtk_entry_set_text(GTK_ENTRY(ldapedit_basedn.basedn_entry), text );
+ }
+ }
+}
+
+static gboolean edit_ldap_bdn_list_button( GtkCList *clist, GdkEventButton *event, gpointer data ) {
+ if( ! event ) return FALSE;
+ if( event->button == 1 ) {
+ if( event->type == GDK_2BUTTON_PRESS ) {
+ ldapedit_basedn_cancelled = FALSE;
+ gtk_main_quit();
+ }
+ }
+ return FALSE;
+}
+
+static void edit_ldap_bdn_create(void) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *host_label;
+ GtkWidget *port_label;
+ GtkWidget *basedn_list;
+ GtkWidget *vlbox;
+ GtkWidget *lwindow;
+ GtkWidget *basedn_entry;
+ GtkWidget *hbbox;
+ GtkWidget *hsep;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+ gint top;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 300, 270);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 0);
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP - Select Search Base"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_ldap_bdn_delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_ldap_bdn_key_pressed), NULL);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Hostname"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ host_label = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), host_label, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(host_label), 0, 0.5);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("Port"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
+
+ port_label = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), port_label, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(port_label), 0, 0.5);
+
+ /* Third row */
+ top = 2;
+ label = gtk_label_new(_("Search Base"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ basedn_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), basedn_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Basedn list */
+ vlbox = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), vlbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(vlbox), 8 );
+
+ lwindow = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(lwindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vlbox), lwindow, TRUE, TRUE, 0);
+
+ basedn_list = gtk_clist_new(1);
+ gtk_container_add(GTK_CONTAINER(lwindow), basedn_list);
+ gtk_clist_column_titles_show( GTK_CLIST(basedn_list) );
+ gtk_clist_set_column_title( GTK_CLIST(basedn_list), 0, _( "Available Search Base(s)" ) );
+ gtk_clist_set_selection_mode(GTK_CLIST(basedn_list), GTK_SELECTION_BROWSE);
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
+ gtk_widget_grab_default(ok_btn);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_ldap_bdn_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_ldap_bdn_cancel), NULL);
+ g_signal_connect(G_OBJECT(basedn_list), "select_row",
+ G_CALLBACK(edit_ldap_bdn_list_select), NULL);
+ g_signal_connect(G_OBJECT(basedn_list), "button_press_event",
+ G_CALLBACK(edit_ldap_bdn_list_button), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ ldapedit_basedn.window = window;
+ ldapedit_basedn.host_label = host_label;
+ ldapedit_basedn.port_label = port_label;
+ ldapedit_basedn.basedn_entry = basedn_entry;
+ ldapedit_basedn.basedn_list = basedn_list;
+ ldapedit_basedn.ok_btn = ok_btn;
+ ldapedit_basedn.cancel_btn = cancel_btn;
+ ldapedit_basedn.statusbar = statusbar;
+ ldapedit_basedn.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Select Base DN" );
+}
+
+void edit_ldap_bdn_load_data( const gchar *hostName, const gint iPort, const gint tov, const gchar* bindDN,
+ const gchar *bindPW ) {
+ gchar *sHost;
+ gchar *sMsg = NULL;
+ gchar sPort[20];
+ gboolean flgConn;
+ gboolean flgDN;
+
+ edit_ldap_bdn_status_show( "" );
+ gtk_clist_clear(GTK_CLIST(ldapedit_basedn.basedn_list));
+ ldapedit_basedn_bad_server = TRUE;
+ flgConn = flgDN = FALSE;
+ sHost = g_strdup( hostName );
+ sprintf( sPort, "%d", iPort );
+ gtk_label_set_text(GTK_LABEL(ldapedit_basedn.host_label), hostName);
+ gtk_label_set_text(GTK_LABEL(ldapedit_basedn.port_label), sPort);
+ if( *sHost != '\0' ) {
+ /* Test connection to server */
+ if( syldap_test_connect_s( sHost, iPort ) ) {
+ /* Attempt to read base DN */
+ GList *baseDN = syldap_read_basedn_s( sHost, iPort, bindDN, bindPW, tov );
+ if( baseDN ) {
+ GList *node = baseDN;
+ gchar *text[2] = { NULL, NULL };
+
+ while( node ) {
+ text[0] = (gchar *)node->data;
+ gtk_clist_append(GTK_CLIST(ldapedit_basedn.basedn_list), text);
+ node = g_list_next( node );
+ flgDN = TRUE;
+ }
+ mgu_free_dlist( baseDN );
+ baseDN = node = NULL;
+ }
+ ldapedit_basedn_bad_server = FALSE;
+ flgConn = TRUE;
+ }
+ }
+ g_free( sHost );
+
+ /* Display appropriate message */
+ if( flgConn ) {
+ if( ! flgDN ) {
+ sMsg = _( "Could not read Search Base(s) from server - please set manually" );
+ }
+ }
+ else {
+ sMsg = _( "Could not connect to server" );
+ }
+ edit_ldap_bdn_status_show( sMsg );
+}
+
+gchar *edit_ldap_basedn_selection( const gchar *hostName, const gint port, gchar *baseDN, const gint tov,
+ const gchar* bindDN, const gchar *bindPW ) {
+ gchar *retVal = NULL;
+
+ ldapedit_basedn_cancelled = FALSE;
+ if( ! ldapedit_basedn.window ) edit_ldap_bdn_create();
+ gtk_widget_grab_focus(ldapedit_basedn.ok_btn);
+ gtk_widget_show(ldapedit_basedn.window);
+ manage_window_set_transient(GTK_WINDOW(ldapedit_basedn.window));
+
+ edit_ldap_bdn_status_show( "" );
+ edit_ldap_bdn_load_data( hostName, port, tov, bindDN, bindPW );
+ gtk_widget_show(ldapedit_basedn.window);
+
+ gtk_entry_set_text(GTK_ENTRY(ldapedit_basedn.basedn_entry), baseDN);
+
+ gtk_main();
+ gtk_widget_hide(ldapedit_basedn.window);
+ if( ldapedit_basedn_cancelled ) return NULL;
+ if( ldapedit_basedn_bad_server ) return NULL;
+
+ retVal = gtk_editable_get_chars( GTK_EDITABLE(ldapedit_basedn.basedn_entry), 0, -1 );
+ g_strchomp( retVal ); g_strchug( retVal );
+ if( *retVal == '\0' ) {
+ g_free( retVal );
+ retVal = NULL;
+ }
+ return retVal;
+}
+
+#endif /* USE_LDAP */
+
+/*
+* End of Source.
+*/
+
diff --git a/src/editldap_basedn.h b/src/editldap_basedn.h
new file mode 100644
index 00000000..a4affd09
--- /dev/null
+++ b/src/editldap_basedn.h
@@ -0,0 +1,30 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EDITLDAP_BASEDN_H__
+#define __EDITLDAP_BASEDN_H__
+
+#ifdef USE_LDAP
+
+gchar *edit_ldap_basedn_selection( const gchar *hostName, const gint port, gchar *baseDN, const gint tov,
+ const gchar* bindDN, const gchar *bindPW );
+
+#endif /* USE_LDAP */
+
+#endif /* __EDITLDAP_BASEDN_H__ */
diff --git a/src/editvcard.c b/src/editvcard.c
new file mode 100644
index 00000000..eaa18800
--- /dev/null
+++ b/src/editvcard.c
@@ -0,0 +1,329 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit vCard address book data.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "addressbook.h"
+#include "prefs_common.h"
+#include "addressitem.h"
+#include "vcard.h"
+#include "mgutils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+
+#define ADDRESSBOOK_GUESS_VCARD "MyGnomeCard"
+
+static struct _VCardEdit {
+ GtkWidget *window;
+ GtkWidget *name_entry;
+ GtkWidget *file_entry;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *statusbar;
+ gint status_cid;
+} vcardedit;
+
+static struct _AddressFileSelection vcard_file_selector;
+
+/*
+* Edit functions.
+*/
+void edit_vcard_status_show( gchar *msg ) {
+ if( vcardedit.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(vcardedit.statusbar), vcardedit.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(vcardedit.statusbar), vcardedit.status_cid, msg );
+ }
+ }
+}
+
+static void edit_vcard_ok( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+}
+
+static void edit_vcard_cancel( GtkWidget *widget, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static void edit_vcard_file_check( void ) {
+ gint t;
+ gchar *sFile;
+ gchar *sMsg;
+
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 );
+ t = vcard_test_read_file( sFile );
+ g_free( sFile );
+ if( t == MGU_SUCCESS ) {
+ sMsg = "";
+ }
+ else if( t == MGU_BAD_FORMAT ) {
+ sMsg = _("File does not appear to be vCard format.");
+ }
+ else {
+ sMsg = _("Could not read file.");
+ }
+ edit_vcard_status_show( sMsg );
+}
+
+static void edit_vcard_file_ok( GtkWidget *widget, gpointer data ) {
+ const gchar *sFile;
+ AddressFileSelection *afs;
+ GtkWidget *fileSel;
+
+ afs = ( AddressFileSelection * ) data;
+ fileSel = afs->fileSelector;
+ sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) );
+
+ afs->cancelled = FALSE;
+ gtk_entry_set_text( GTK_ENTRY(vcardedit.file_entry), sFile );
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ edit_vcard_file_check();
+ gtk_widget_grab_focus( vcardedit.file_entry );
+}
+
+static void edit_vcard_file_cancel( GtkWidget *widget, gpointer data ) {
+ AddressFileSelection *afs = ( AddressFileSelection * ) data;
+ afs->cancelled = TRUE;
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ gtk_widget_grab_focus( vcardedit.file_entry );
+}
+
+static void edit_vcard_file_select_create( AddressFileSelection *afs ) {
+ GtkWidget *fileSelector;
+
+ fileSelector = gtk_file_selection_new( _("Select vCard File") );
+ gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button),
+ "clicked", G_CALLBACK (edit_vcard_file_ok), ( gpointer ) afs );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button),
+ "clicked", G_CALLBACK (edit_vcard_file_cancel), ( gpointer ) afs );
+ afs->fileSelector = fileSelector;
+ afs->cancelled = TRUE;
+}
+
+static void edit_vcard_file_select( void ) {
+ gchar *sFile;
+
+ if (! vcard_file_selector.fileSelector )
+ edit_vcard_file_select_create( & vcard_file_selector );
+
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 );
+ gtk_file_selection_set_filename( GTK_FILE_SELECTION( vcard_file_selector.fileSelector ), sFile );
+ g_free( sFile );
+ gtk_widget_show( vcard_file_selector.fileSelector );
+ gtk_grab_add( vcard_file_selector.fileSelector );
+}
+
+static gint edit_vcard_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ return TRUE;
+}
+
+static gboolean edit_vcard_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+ if (event && event->keyval == GDK_Escape) {
+ *cancelled = TRUE;
+ gtk_main_quit();
+ }
+ return FALSE;
+}
+
+static void addressbook_edit_vcard_create( gboolean *cancelled ) {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+ GtkWidget *file_entry;
+ GtkWidget *hbbox;
+ GtkWidget *hsep;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *check_btn;
+ GtkWidget *file_btn;
+ GtkWidget *statusbar;
+ GtkWidget *hsbox;
+ gint top;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit vCard Entry"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_vcard_delete_event),
+ cancelled);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_vcard_key_pressed),
+ cancelled);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ check_btn = gtk_button_new_with_label( _(" Check File "));
+ gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("File"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ file_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ file_btn = gtk_button_new_with_label( _(" ... "));
+ gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
+ gtk_widget_grab_default(ok_btn);
+
+ hsep = gtk_hseparator_new();
+ gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_vcard_ok), cancelled);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_vcard_cancel), cancelled);
+ g_signal_connect(G_OBJECT(file_btn), "clicked",
+ G_CALLBACK(edit_vcard_file_select), NULL);
+ g_signal_connect(G_OBJECT(check_btn), "clicked",
+ G_CALLBACK(edit_vcard_file_check), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ vcardedit.window = window;
+ vcardedit.name_entry = name_entry;
+ vcardedit.file_entry = file_entry;
+ vcardedit.ok_btn = ok_btn;
+ vcardedit.cancel_btn = cancel_btn;
+ vcardedit.statusbar = statusbar;
+ vcardedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit vCard Dialog" );
+}
+
+AdapterDSource *addressbook_edit_vcard( AddressIndex *addrIndex, AdapterDSource *ads ) {
+ static gboolean cancelled;
+ gchar *sName;
+ gchar *sFile;
+ AddressDataSource *ds = NULL;
+ VCardFile *vcf = NULL;
+ gboolean fin;
+
+ if( ! vcardedit.window )
+ addressbook_edit_vcard_create(&cancelled);
+ gtk_widget_grab_focus(vcardedit.ok_btn);
+ gtk_widget_grab_focus(vcardedit.name_entry);
+ gtk_widget_show(vcardedit.window);
+ manage_window_set_transient(GTK_WINDOW(vcardedit.window));
+
+ edit_vcard_status_show( "" );
+ if( ads ) {
+ ds = ads->dataSource;
+ vcf = ds->rawDataSource;
+ if (vcf->name)
+ gtk_entry_set_text(GTK_ENTRY(vcardedit.name_entry), vcf->name);
+ if (vcf->path)
+ gtk_entry_set_text(GTK_ENTRY(vcardedit.file_entry), vcf->path);
+ gtk_window_set_title( GTK_WINDOW(vcardedit.window), _("Edit vCard Entry"));
+ }
+ else {
+ gtk_entry_set_text(GTK_ENTRY(vcardedit.name_entry), ADDRESSBOOK_GUESS_VCARD );
+ gtk_entry_set_text(GTK_ENTRY(vcardedit.file_entry), vcard_find_gnomecard() );
+ gtk_window_set_title( GTK_WINDOW(vcardedit.window), _("Add New vCard Entry"));
+ }
+
+ gtk_main();
+ gtk_widget_hide(vcardedit.window);
+ if (cancelled == TRUE) return NULL;
+
+ fin = FALSE;
+ sName = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.name_entry), 0, -1 );
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(vcardedit.file_entry), 0, -1 );
+ if( *sName == '\0' ) fin = TRUE;
+ if( *sFile == '\0' ) fin = TRUE;
+
+ if( ! fin ) {
+ if( ! ads ) {
+ vcf = vcard_create();
+ ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_VCARD, vcf );
+ ads = addressbook_create_ds_adapter( ds, ADDR_VCARD, NULL );
+ }
+ addressbook_ads_set_name( ads, sName );
+ vcard_set_name( vcf, sName );
+ vcard_set_file( vcf, sFile );
+ }
+ g_free( sName );
+ g_free( sFile );
+
+ return ads;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/editvcard.h b/src/editvcard.h
new file mode 100644
index 00000000..1dd0979b
--- /dev/null
+++ b/src/editvcard.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit vCard address book data.
+ */
+
+#ifndef __EDITVCARD_H__
+#define __EDITVCARD_H__
+
+AdapterDSource *addressbook_edit_vcard( AddressIndex *addrIndex, AdapterDSource *ads );
+
+#endif /* __EDITVCARD_H__ */
diff --git a/src/export.c b/src/export.c
new file mode 100644
index 00000000..e78ddab9
--- /dev/null
+++ b/src/export.c
@@ -0,0 +1,263 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkfilesel.h>
+#include <gtk/gtksignal.h>
+
+#include "intl.h"
+#include "main.h"
+#include "inc.h"
+#include "mbox.h"
+#include "filesel.h"
+#include "foldersel.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "folder.h"
+#include "utils.h"
+
+static GtkWidget *window;
+static GtkWidget *src_entry;
+static GtkWidget *file_entry;
+static GtkWidget *src_button;
+static GtkWidget *file_button;
+static GtkWidget *ok_button;
+static GtkWidget *cancel_button;
+static gboolean export_ack;
+
+static void export_create(void);
+static void export_ok_cb(GtkWidget *widget, gpointer data);
+static void export_cancel_cb(GtkWidget *widget, gpointer data);
+static void export_srcsel_cb(GtkWidget *widget, gpointer data);
+static void export_filesel_cb(GtkWidget *widget, gpointer data);
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+
+gint export_mbox(FolderItem *default_src)
+{
+ gint ok = 0;
+ gchar *src_id = NULL;
+
+ if (!window)
+ export_create();
+ else
+ gtk_widget_show(window);
+
+ change_dir(startup_dir);
+
+ if (default_src && default_src->path)
+ src_id = folder_item_get_identifier(default_src);
+
+ if (src_id) {
+ gtk_entry_set_text(GTK_ENTRY(src_entry), src_id);
+ g_free(src_id);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(src_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(file_entry), "");
+ gtk_widget_grab_focus(file_entry);
+
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ gtk_main();
+
+ if (export_ack) {
+ const gchar *srcdir, *utf8mbox;
+ FolderItem *src;
+
+ srcdir = gtk_entry_get_text(GTK_ENTRY(src_entry));
+ utf8mbox = gtk_entry_get_text(GTK_ENTRY(file_entry));
+
+ if (utf8mbox && *utf8mbox) {
+ gchar *mbox;
+
+ mbox = g_filename_from_utf8
+ (utf8mbox, -1, NULL, NULL, NULL);
+ if (!mbox) {
+ g_warning("faild to convert character set\n");
+ mbox = g_strdup(utf8mbox);
+ }
+
+ src = folder_find_item_from_identifier(srcdir);
+ if (!src)
+ g_warning("Can't find the folder.\n");
+ else
+ ok = export_to_mbox(src, mbox);
+
+ g_free(mbox);
+ }
+ }
+
+ gtk_widget_hide(window);
+
+ return ok;
+}
+
+static void export_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *desc_label;
+ GtkWidget *table;
+ GtkWidget *file_label;
+ GtkWidget *src_label;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Export"));
+ gtk_container_set_border_width(GTK_CONTAINER(window), 5);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
+
+ desc_label = gtk_label_new
+ (_("Specify target folder and mbox file."));
+ gtk_box_pack_start(GTK_BOX(hbox), desc_label, FALSE, FALSE, 0);
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 8);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+ gtk_widget_set_size_request(table, 420, -1);
+
+ src_label = gtk_label_new(_("Source dir:"));
+ gtk_table_attach(GTK_TABLE(table), src_label, 0, 1, 0, 1,
+ GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(src_label), 1, 0.5);
+
+ file_label = gtk_label_new(_("Exporting file:"));
+ gtk_table_attach(GTK_TABLE(table), file_label, 0, 1, 1, 2,
+ GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(file_label), 1, 0.5);
+
+ src_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), src_entry, 1, 2, 0, 1,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ file_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, 1, 2,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ src_button = gtk_button_new_with_label(_(" Select... "));
+ gtk_table_attach(GTK_TABLE(table), src_button, 2, 3, 0, 1,
+ 0, 0, 0, 0);
+ g_signal_connect(G_OBJECT(src_button), "clicked",
+ G_CALLBACK(export_srcsel_cb), NULL);
+
+ file_button = gtk_button_new_with_label(_(" Select... "));
+ gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 1, 2,
+ 0, 0, 0, 0);
+ g_signal_connect(G_OBJECT(file_button), "clicked",
+ G_CALLBACK(export_filesel_cb), NULL);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_button, _("OK"),
+ &cancel_button, _("Cancel"),
+ NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(export_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(export_cancel_cb), NULL);
+
+ gtk_widget_show_all(window);
+}
+
+static void export_ok_cb(GtkWidget *widget, gpointer data)
+{
+ export_ack = TRUE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void export_cancel_cb(GtkWidget *widget, gpointer data)
+{
+ export_ack = FALSE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void export_filesel_cb(GtkWidget *widget, gpointer data)
+{
+ const gchar *filename;
+ gchar *utf8_filename;
+
+ filename = filesel_select_file(_("Select exporting file"), NULL);
+ if (!filename) return;
+
+ utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
+ if (!utf8_filename) {
+ g_warning("export_filesel_cb(): faild to convert character set.\n");
+ utf8_filename = g_strdup(filename);
+ }
+ gtk_entry_set_text(GTK_ENTRY(file_entry), utf8_filename);
+ g_free(utf8_filename);
+}
+
+static void export_srcsel_cb(GtkWidget *widget, gpointer data)
+{
+ FolderItem *src;
+
+ src = foldersel_folder_sel(NULL, FOLDER_SEL_ALL, NULL);
+ if (src && src->path)
+ gtk_entry_set_text(GTK_ENTRY(src_entry), src->path);
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ export_cancel_cb(NULL, NULL);
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ export_cancel_cb(NULL, NULL);
+ return FALSE;
+}
diff --git a/src/export.h b/src/export.h
new file mode 100644
index 00000000..34d73a06
--- /dev/null
+++ b/src/export.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EXPORT_H__
+#define __EXPORT_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+gint export_mbox(FolderItem *default_src);
+
+#endif /* __EXPORT_H__ */
diff --git a/src/filesel.c b/src/filesel.c
new file mode 100644
index 00000000..57bc5896
--- /dev/null
+++ b/src/filesel.c
@@ -0,0 +1,145 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkfilesel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtksignal.h>
+
+#include "main.h"
+#include "filesel.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+
+static GtkWidget *filesel;
+static gboolean filesel_ack;
+static gboolean filesel_fin;
+
+static void filesel_create(const gchar *title);
+static void filesel_ok_cb(GtkWidget *widget, gpointer data);
+static void filesel_cancel_cb(GtkWidget *widget, gpointer data);
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+
+gchar *filesel_select_file(const gchar *title, const gchar *file)
+{
+ static gchar *filename = NULL;
+ static gchar *cwd = NULL;
+
+ filesel_create(title);
+
+ manage_window_set_transient(GTK_WINDOW(filesel));
+
+ if (filename) {
+ g_free(filename);
+ filename = NULL;
+ }
+
+ if (!cwd)
+ cwd = g_strconcat(startup_dir, G_DIR_SEPARATOR_S, NULL);
+
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), cwd);
+
+ if (file) {
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel),
+ file);
+ gtk_editable_select_region
+ (GTK_EDITABLE(GTK_FILE_SELECTION(filesel)->selection_entry),
+ 0, -1);
+ }
+
+ gtk_widget_show(filesel);
+
+ filesel_ack = filesel_fin = FALSE;
+
+ while (filesel_fin == FALSE)
+ gtk_main_iteration();
+
+ if (filesel_ack) {
+ const gchar *str;
+
+ str = gtk_file_selection_get_filename
+ (GTK_FILE_SELECTION(filesel));
+ if (str && str[0] != '\0') {
+ gchar *dir;
+
+ filename = g_strdup(str);
+ dir = g_dirname(str);
+ g_free(cwd);
+ cwd = g_strconcat(dir, G_DIR_SEPARATOR_S, NULL);
+ g_free(dir);
+ }
+ }
+
+ manage_window_focus_out(filesel, NULL, NULL);
+ gtk_widget_destroy(filesel);
+ GTK_EVENTS_FLUSH();
+
+ return filename;
+}
+
+static void filesel_create(const gchar *title)
+{
+ filesel = gtk_file_selection_new(title);
+ gtk_window_set_position(GTK_WINDOW(filesel), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(filesel), TRUE);
+ gtk_window_set_wmclass
+ (GTK_WINDOW(filesel), "file_selection", "Sylpheed");
+
+ g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
+ "clicked", G_CALLBACK(filesel_ok_cb),
+ NULL);
+ g_signal_connect
+ (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
+ "clicked", G_CALLBACK(filesel_cancel_cb),
+ NULL);
+ g_signal_connect(G_OBJECT(filesel), "delete_event",
+ G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(filesel), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(filesel);
+}
+
+static void filesel_ok_cb(GtkWidget *widget, gpointer data)
+{
+ filesel_ack = TRUE;
+ filesel_fin = TRUE;
+}
+
+static void filesel_cancel_cb(GtkWidget *widget, gpointer data)
+{
+ filesel_ack = FALSE;
+ filesel_fin = TRUE;
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ filesel_cancel_cb(NULL, NULL);
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ filesel_cancel_cb(NULL, NULL);
+ return FALSE;
+}
diff --git a/src/filesel.h b/src/filesel.h
new file mode 100644
index 00000000..e4018585
--- /dev/null
+++ b/src/filesel.h
@@ -0,0 +1,27 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __FILESEL_H__
+#define __FILESEL_H__
+
+#include <glib.h>
+
+gchar *filesel_select_file(const gchar *title, const gchar *file);
+
+#endif /* __FILESEL_H__ */
diff --git a/src/filter.c b/src/filter.c
new file mode 100644
index 00000000..1fa17a70
--- /dev/null
+++ b/src/filter.c
@@ -0,0 +1,1218 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <regex.h>
+#include <time.h>
+
+#include "intl.h"
+#include "procheader.h"
+#include "filter.h"
+#include "folder.h"
+#include "utils.h"
+#include "xml.h"
+#include "prefs.h"
+#include "prefs_account.h"
+
+typedef enum
+{
+ FLT_O_CONTAIN = 1 << 0,
+ FLT_O_CASE_SENS = 1 << 1,
+ FLT_O_REGEX = 1 << 2
+} FilterOldFlag;
+
+static gboolean filter_match_cond (FilterCond *cond,
+ MsgInfo *msginfo,
+ GSList *hlist,
+ FilterInfo *fltinfo);
+static gboolean filter_match_header_cond(FilterCond *cond,
+ GSList *hlist);
+
+static void filter_cond_free (FilterCond *cond);
+static void filter_action_free (FilterAction *action);
+
+
+gint filter_apply(GSList *fltlist, const gchar *file, FilterInfo *fltinfo)
+{
+ MsgInfo *msginfo;
+ gint ret = 0;
+
+ g_return_val_if_fail(file != NULL, -1);
+ g_return_val_if_fail(fltinfo != NULL, -1);
+
+ if (!fltlist) return 0;
+
+ msginfo = procheader_parse_file(file, fltinfo->flags, FALSE);
+ if (!msginfo) return 0;
+ msginfo->file_path = g_strdup(file);
+
+ ret = filter_apply_msginfo(fltlist, msginfo, fltinfo);
+
+ procmsg_msginfo_free(msginfo);
+
+ return ret;
+}
+
+gint filter_apply_msginfo(GSList *fltlist, MsgInfo *msginfo,
+ FilterInfo *fltinfo)
+{
+ gchar *file;
+ GSList *hlist, *cur;
+ FilterRule *rule;
+ gint ret = 0;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+ g_return_val_if_fail(fltinfo != NULL, -1);
+
+ if (!fltlist) return 0;
+
+ file = procmsg_get_message_file(msginfo);
+ hlist = procheader_get_header_list_from_file(file);
+ if (!hlist) {
+ g_free(file);
+ return 0;
+ }
+
+ for (cur = fltlist; cur != NULL; cur = cur->next) {
+ rule = (FilterRule *)cur->data;
+ if (!rule->enabled) continue;
+ if (filter_match_rule(rule, msginfo, hlist, fltinfo)) {
+ ret = filter_action_exec(rule, msginfo, file, fltinfo);
+ if (ret < 0) {
+ g_warning("filter_action_exec() returned error\n");
+ break;
+ }
+ if (fltinfo->drop_done == TRUE ||
+ fltinfo->actions[FLT_ACTION_STOP_EVAL] == TRUE)
+ break;
+ }
+ }
+
+ procheader_header_list_destroy(hlist);
+ g_free(file);
+
+ return ret;
+}
+
+gint filter_action_exec(FilterRule *rule, MsgInfo *msginfo, const gchar *file,
+ FilterInfo *fltinfo)
+{
+ FolderItem *dest_folder = NULL;
+ FilterAction *action;
+ GSList *cur;
+ gchar *cmdline;
+ gboolean copy_to_self = FALSE;
+
+ g_return_val_if_fail(rule != NULL, -1);
+ g_return_val_if_fail(msginfo != NULL, -1);
+ g_return_val_if_fail(file != NULL, -1);
+ g_return_val_if_fail(fltinfo != NULL, -1);
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ action = (FilterAction *)cur->data;
+
+ switch (action->type) {
+ case FLT_ACTION_MARK:
+ debug_print("filter_action_exec(): mark\n");
+ MSG_SET_PERM_FLAGS(fltinfo->flags, MSG_MARKED);
+ fltinfo->actions[action->type] = TRUE;
+ break;
+ case FLT_ACTION_COLOR_LABEL:
+ debug_print("filter_action_exec(): color label: %d\n",
+ action->int_value);
+ MSG_UNSET_PERM_FLAGS(fltinfo->flags,
+ MSG_CLABEL_FLAG_MASK);
+ MSG_SET_COLORLABEL_VALUE(fltinfo->flags,
+ action->int_value);
+ fltinfo->actions[action->type] = TRUE;
+ break;
+ case FLT_ACTION_MARK_READ:
+ debug_print("filter_action_exec(): mark as read\n");
+ if (msginfo->folder) {
+ if (MSG_IS_NEW(fltinfo->flags))
+ msginfo->folder->new--;
+ if (MSG_IS_UNREAD(fltinfo->flags))
+ msginfo->folder->unread--;
+ }
+ MSG_UNSET_PERM_FLAGS(fltinfo->flags, MSG_NEW|MSG_UNREAD);
+ fltinfo->actions[action->type] = TRUE;
+ break;
+ case FLT_ACTION_EXEC:
+ cmdline = g_strconcat(action->str_value, " ", file,
+ NULL);
+ execute_command_line(cmdline, FALSE);
+ g_free(cmdline);
+ fltinfo->actions[action->type] = TRUE;
+ break;
+ case FLT_ACTION_EXEC_ASYNC:
+ cmdline = g_strconcat(action->str_value, " ", file,
+ NULL);
+ execute_command_line(cmdline, TRUE);
+ g_free(cmdline);
+ fltinfo->actions[action->type] = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ action = (FilterAction *)cur->data;
+
+ switch (action->type) {
+ case FLT_ACTION_MOVE:
+ case FLT_ACTION_COPY:
+ dest_folder = folder_find_item_from_identifier
+ (action->str_value);
+ if (!dest_folder) {
+ g_warning("dest folder '%s' not found\n",
+ action->str_value);
+ return -1;
+ }
+ debug_print("filter_action_exec(): %s: dest_folder = %s\n",
+ action->type == FLT_ACTION_COPY ?
+ "copy" : "move", action->str_value);
+
+ if (msginfo->folder) {
+ gint val;
+
+ /* local filtering */
+ if (msginfo->folder == dest_folder)
+ copy_to_self = TRUE;
+ else {
+ if (action->type == FLT_ACTION_COPY) {
+ val = folder_item_copy_msg
+ (dest_folder, msginfo);
+ if (val == -1)
+ return -1;
+ }
+ fltinfo->actions[action->type] = TRUE;
+ }
+ } else {
+ if (folder_item_add_msg(dest_folder, file,
+ &fltinfo->flags,
+ FALSE) < 0)
+ return -1;
+ fltinfo->actions[action->type] = TRUE;
+ }
+
+ fltinfo->dest_list = g_slist_append(fltinfo->dest_list,
+ dest_folder);
+ if (action->type == FLT_ACTION_MOVE) {
+ fltinfo->move_dest = dest_folder;
+ fltinfo->drop_done = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (fltinfo->drop_done == TRUE)
+ return 0;
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ action = (FilterAction *)cur->data;
+
+ switch (action->type) {
+ case FLT_ACTION_NOT_RECEIVE:
+ debug_print("filter_action_exec(): don't receive\n");
+ fltinfo->drop_done = TRUE;
+ fltinfo->actions[action->type] = TRUE;
+ return 0;
+ case FLT_ACTION_DELETE:
+ debug_print("filter_action_exec(): delete\n");
+ if (msginfo->folder) {
+ /* local filtering */
+ if (copy_to_self == FALSE)
+ fltinfo->actions[action->type] = TRUE;
+ } else
+ fltinfo->actions[action->type] = TRUE;
+
+ fltinfo->drop_done = TRUE;
+ return 0;
+ case FLT_ACTION_STOP_EVAL:
+ debug_print("filter_action_exec(): stop evaluation\n");
+ fltinfo->actions[action->type] = TRUE;
+ return 0;
+ default:
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static gboolean strmatch_regex(const gchar *haystack, const gchar *needle)
+{
+ gint ret = 0;
+ regex_t preg;
+ regmatch_t pmatch[1];
+
+ ret = regcomp(&preg, needle, REG_EXTENDED|REG_ICASE);
+ if (ret != 0) return FALSE;
+
+ ret = regexec(&preg, haystack, 1, pmatch, 0);
+ regfree(&preg);
+
+ if (ret == REG_NOMATCH) return FALSE;
+
+ if (pmatch[0].rm_so != -1)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+gboolean filter_match_rule(FilterRule *rule, MsgInfo *msginfo, GSList *hlist,
+ FilterInfo *fltinfo)
+{
+ FilterCond *cond;
+ GSList *cur;
+ gboolean matched;
+
+ g_return_val_if_fail(rule->cond_list != NULL, FALSE);
+ g_return_val_if_fail(rule->action_list != NULL, FALSE);
+
+ switch (rule->timing) {
+ case FLT_TIMING_ANY:
+ break;
+ case FLT_TIMING_ON_RECEIVE:
+ if (msginfo->folder != NULL)
+ return FALSE;
+ break;
+ case FLT_TIMING_MANUAL:
+ if (msginfo->folder == NULL)
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ if (rule->bool_op == FLT_AND) {
+ for (cur = rule->cond_list; cur != NULL; cur = cur->next) {
+ cond = (FilterCond *)cur->data;
+ matched = filter_match_cond(cond, msginfo, hlist,
+ fltinfo);
+ if (matched == FALSE)
+ return FALSE;
+ }
+
+ return TRUE;
+ } else if (rule->bool_op == FLT_OR) {
+ for (cur = rule->cond_list; cur != NULL; cur = cur->next) {
+ cond = (FilterCond *)cur->data;
+ matched = filter_match_cond(cond, msginfo, hlist,
+ fltinfo);
+ if (matched == TRUE)
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+static gboolean filter_match_cond(FilterCond *cond, MsgInfo *msginfo,
+ GSList *hlist, FilterInfo *fltinfo)
+{
+ gboolean matched = FALSE;
+ gchar *file;
+ gchar *cmdline;
+ PrefsAccount *cond_ac;
+
+ switch (cond->type) {
+ case FLT_COND_HEADER:
+ case FLT_COND_ANY_HEADER:
+ case FLT_COND_TO_OR_CC:
+ return filter_match_header_cond(cond, hlist);
+ case FLT_COND_BODY:
+ matched = procmime_find_string(msginfo, cond->str_value,
+ cond->match_func);
+ break;
+ case FLT_COND_CMD_TEST:
+ file = procmsg_get_message_file(msginfo);
+ cmdline = g_strconcat(cond->str_value, " ", file, NULL);
+ matched = (execute_command_line(cmdline, FALSE) == 0);
+ g_free(cmdline);
+ g_free(file);
+ break;
+ case FLT_COND_SIZE_GREATER:
+ matched = (msginfo->size > cond->int_value * 1024);
+ break;
+ case FLT_COND_AGE_GREATER:
+ matched = (time(NULL) - msginfo->date_t >
+ cond->int_value * 24 * 60 * 60);
+ break;
+ case FLT_COND_ACCOUNT:
+ cond_ac = account_find_from_id(cond->int_value);
+ matched = (cond_ac != NULL && cond_ac == fltinfo->account);
+ break;
+ default:
+ g_warning("filter_match_cond(): unknown condition: %d\n",
+ cond->type);
+ return FALSE;
+ }
+
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ matched = !matched;
+
+ return matched;
+}
+
+static gboolean filter_match_header_cond(FilterCond *cond, GSList *hlist)
+{
+ gboolean matched = FALSE;
+ GSList *cur;
+ Header *header;
+
+ for (cur = hlist; cur != NULL; cur = cur->next) {
+ header = (Header *)cur->data;
+
+ switch (cond->type) {
+ case FLT_COND_HEADER:
+ if (!strcasecmp(header->name, cond->header_name)) {
+ if (!cond->str_value ||
+ cond->match_func(header->body,
+ cond->str_value))
+ matched = TRUE;
+ }
+ break;
+ case FLT_COND_ANY_HEADER:
+ if (!cond->str_value ||
+ cond->match_func(header->body, cond->str_value))
+ matched = TRUE;
+ break;
+ case FLT_COND_TO_OR_CC:
+ if (!strcasecmp(header->name, "To") ||
+ !strcasecmp(header->name, "Cc")) {
+ if (!cond->str_value ||
+ cond->match_func(header->body,
+ cond->str_value))
+ matched = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (matched == TRUE)
+ break;
+ }
+
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ matched = !matched;
+
+ return matched;
+}
+
+#define RETURN_IF_TAG_NOT_MATCH(tag_name) \
+ if (strcmp2(xmlnode->tag->tag, tag_name) != 0) { \
+ g_warning("tag name != \"" tag_name "\"\n"); \
+ filter_cond_list_free(cond_list); \
+ filter_action_list_free(cond_list); \
+ return FALSE; \
+ } \
+
+#define STR_SWITCH(sw) { const gchar *sw_str = sw;
+#define STR_CASE_BEGIN(str) if (!strcmp(sw_str, str)) {
+#define STR_CASE(str) } else if (!strcmp(sw_str, str)) {
+#define STR_CASE_END } }
+
+static gboolean filter_xml_node_func(GNode *node, gpointer data)
+{
+ XMLNode *xmlnode;
+ GList *list;
+ const gchar *name = NULL;
+ FilterTiming timing = FLT_TIMING_ANY;
+ gboolean enabled = TRUE;
+ FilterRule *rule;
+ FilterBoolOp bool_op = FLT_OR;
+ GSList *cond_list = NULL;
+ GSList *action_list = NULL;
+ GNode *child, *cond_child, *action_child;
+ GSList **fltlist = (GSList **)data;
+
+ if (g_node_depth(node) != 2) return FALSE;
+ g_return_val_if_fail(node->data != NULL, FALSE);
+
+ xmlnode = node->data;
+ RETURN_IF_TAG_NOT_MATCH("rule");
+
+ for (list = xmlnode->tag->attr; list != NULL; list = list->next) {
+ XMLAttr *attr = (XMLAttr *)list->data;
+
+ if (!attr || !attr->name || !attr->value) continue;
+ if (!strcmp(attr->name, "name"))
+ name = attr->value;
+ else if (!strcmp(attr->name, "timing")) {
+ if (!strcmp(attr->value, "any"))
+ timing = FLT_TIMING_ANY;
+ else if (!strcmp(attr->value, "receive"))
+ timing = FLT_TIMING_ON_RECEIVE;
+ else if (!strcmp(attr->value, "manual"))
+ timing = FLT_TIMING_MANUAL;
+ } else if (!strcmp(attr->name, "enabled")) {
+ if (!strcmp(attr->value, "true"))
+ enabled = TRUE;
+ else
+ enabled = FALSE;
+ }
+ }
+
+ /* condition list */
+ child = node->children;
+ if (!child) {
+ g_warning("<rule> must have children\n");
+ return FALSE;
+ }
+ xmlnode = child->data;
+ RETURN_IF_TAG_NOT_MATCH("condition-list");
+ for (list = xmlnode->tag->attr; list != NULL; list = list->next) {
+ XMLAttr *attr = (XMLAttr *)list->data;
+
+ if (attr && attr->name && attr->value &&
+ !strcmp(attr->name, "bool")) {
+ if (!strcmp(attr->value, "or"))
+ bool_op = FLT_OR;
+ else
+ bool_op = FLT_AND;
+ }
+ }
+
+ for (cond_child = child->children; cond_child != NULL;
+ cond_child = cond_child->next) {
+ const gchar *type = NULL;
+ const gchar *name = NULL;
+ const gchar *value = NULL;
+ FilterCond *cond;
+ FilterCondType cond_type = FLT_COND_HEADER;
+ FilterMatchType match_type = FLT_CONTAIN;
+ FilterMatchFlag match_flag = 0;
+
+ xmlnode = cond_child->data;
+ if (!xmlnode || !xmlnode->tag || !xmlnode->tag->tag) continue;
+
+ for (list = xmlnode->tag->attr; list != NULL; list = list->next) {
+ XMLAttr *attr = (XMLAttr *)list->data;
+
+ if (!attr || !attr->name || !attr->value) continue;
+ if (!strcmp(attr->name, "type"))
+ type = attr->value;
+ else if (!strcmp(attr->name, "name"))
+ name = attr->value;
+ }
+
+ if (type) {
+ filter_rule_match_type_str_to_enum
+ (type, &match_type, &match_flag);
+ }
+ value = xmlnode->element;
+
+ STR_SWITCH(xmlnode->tag->tag)
+ STR_CASE_BEGIN("match-header")
+ cond_type = FLT_COND_HEADER;
+ STR_CASE("match-any-header")
+ cond_type = FLT_COND_ANY_HEADER;
+ STR_CASE("match-to-or-cc")
+ cond_type = FLT_COND_TO_OR_CC;
+ STR_CASE("match-body-text")
+ cond_type = FLT_COND_BODY;
+ STR_CASE("command-test")
+ cond_type = FLT_COND_CMD_TEST;
+ STR_CASE("size")
+ cond_type = FLT_COND_SIZE_GREATER;
+ STR_CASE("age")
+ cond_type = FLT_COND_AGE_GREATER;
+ STR_CASE("account-id")
+ cond_type = FLT_COND_ACCOUNT;
+ STR_CASE_END
+
+ cond = filter_cond_new(cond_type, match_type, match_flag,
+ name, value);
+ cond_list = g_slist_append(cond_list, cond);
+ }
+
+ /* action list */
+ child = child->next;
+ if (!child) {
+ g_warning("<rule> must have multiple children\n");
+ filter_cond_list_free(cond_list);
+ return FALSE;
+ }
+ xmlnode = child->data;
+ RETURN_IF_TAG_NOT_MATCH("action-list");
+
+ for (action_child = child->children; action_child != NULL;
+ action_child = action_child->next) {
+ FilterAction *action;
+ FilterActionType action_type = FLT_ACTION_NONE;
+
+ xmlnode = action_child->data;
+ if (!xmlnode || !xmlnode->tag || !xmlnode->tag->tag) continue;
+
+ STR_SWITCH(xmlnode->tag->tag)
+ STR_CASE_BEGIN("move")
+ action_type = FLT_ACTION_MOVE;
+ STR_CASE("copy")
+ action_type = FLT_ACTION_COPY;
+ STR_CASE("not-receive")
+ action_type = FLT_ACTION_NOT_RECEIVE;
+ STR_CASE("delete")
+ action_type = FLT_ACTION_DELETE;
+ STR_CASE("exec")
+ action_type = FLT_ACTION_EXEC;
+ STR_CASE("exec-async")
+ action_type = FLT_ACTION_EXEC_ASYNC;
+ STR_CASE("mark")
+ action_type = FLT_ACTION_MARK;
+ STR_CASE("color-label")
+ action_type = FLT_ACTION_COLOR_LABEL;
+ STR_CASE("mark-as-read")
+ action_type = FLT_ACTION_MARK_READ;
+ STR_CASE("forward")
+ action_type = FLT_ACTION_FORWARD;
+ STR_CASE("forward-as-attachment")
+ action_type = FLT_ACTION_FORWARD_AS_ATTACHMENT;
+ STR_CASE("redirect")
+ action_type = FLT_ACTION_REDIRECT;
+ STR_CASE("stop-eval")
+ action_type = FLT_ACTION_STOP_EVAL;
+ STR_CASE_END
+
+ action = filter_action_new(action_type, xmlnode->element);
+ action_list = g_slist_append(action_list, action);
+ }
+
+ if (name && cond_list && action_list) {
+ rule = filter_rule_new(name, bool_op, cond_list, action_list);
+ rule->timing = timing;
+ rule->enabled = enabled;
+ *fltlist = g_slist_prepend(*fltlist, rule);
+ }
+
+ return FALSE;
+}
+
+#undef RETURN_IF_TAG_NOT_MATCH
+#undef STR_SWITCH
+#undef STR_CASE_BEGIN
+#undef STR_CASE
+#undef STR_CASE_END
+
+GSList *filter_xml_node_to_filter_list(GNode *node)
+{
+ GSList *fltlist = NULL;
+
+ g_return_val_if_fail(node != NULL, NULL);
+
+ g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, 2,
+ filter_xml_node_func, &fltlist);
+ fltlist = g_slist_reverse(fltlist);
+
+ return fltlist;
+}
+
+#define NODE_NEW(tag, text) \
+ node = xml_node_new(xml_tag_new(tag), text)
+#define ADD_ATTR(name, value) \
+ xml_tag_add_attr(node->tag, xml_attr_new(name, value))
+
+void filter_write_config(GSList *fltlist)
+{
+ gchar *rcpath;
+ PrefFile *pfile;
+ GSList *cur;
+
+ debug_print("Writing filter configuration...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_LIST,
+ NULL);
+ if ((pfile = prefs_file_open(rcpath)) == NULL) {
+ g_warning("failed to write filter configuration to file\n");
+ g_free(rcpath);
+ return;
+ }
+
+ xml_file_put_xml_decl(pfile->fp);
+ fputs("\n<filter>\n", pfile->fp);
+
+ for (cur = fltlist; cur != NULL; cur = cur->next) {
+ FilterRule *rule = (FilterRule *)cur->data;
+ GSList *cur_cond;
+ GSList *cur_action;
+ gchar match_type[16];
+
+ fputs(" <rule name=\"", pfile->fp);
+ xml_file_put_escape_str(pfile->fp, rule->name);
+ fprintf(pfile->fp, "\" timing=\"%s\"",
+ rule->timing == FLT_TIMING_ON_RECEIVE ? "receive" :
+ rule->timing == FLT_TIMING_MANUAL ? "manual" : "any");
+ fprintf(pfile->fp, " enabled=\"%s\">\n",
+ rule->enabled ? "true" : "false");
+
+ fprintf(pfile->fp, " <condition-list bool=\"%s\">\n",
+ rule->bool_op == FLT_OR ? "or" : "and");
+
+ for (cur_cond = rule->cond_list; cur_cond != NULL;
+ cur_cond = cur_cond->next) {
+ FilterCond *cond = (FilterCond *)cur_cond->data;
+ XMLNode *node = NULL;
+
+ switch (cond->match_type) {
+ case FLT_CONTAIN:
+ strcpy(match_type,
+ FLT_IS_NOT_MATCH(cond->match_flag)
+ ? "not-contain" : "contains");
+ break;
+ case FLT_EQUAL:
+ strcpy(match_type,
+ FLT_IS_NOT_MATCH(cond->match_flag)
+ ? "is-not" : "is");
+ break;
+ case FLT_REGEX:
+ strcpy(match_type,
+ FLT_IS_NOT_MATCH(cond->match_flag)
+ ? "not-regex" : "regex");
+ break;
+ default:
+ match_type[0] = '\0';
+ break;
+ }
+
+ switch (cond->type) {
+ case FLT_COND_HEADER:
+ NODE_NEW("match-header", cond->str_value);
+ ADD_ATTR("type", match_type);
+ ADD_ATTR("name", cond->header_name);
+ break;
+ case FLT_COND_ANY_HEADER:
+ NODE_NEW("match-any-header", cond->str_value);
+ ADD_ATTR("type", match_type);
+ break;
+ case FLT_COND_TO_OR_CC:
+ NODE_NEW("match-to-or-cc", cond->str_value);
+ ADD_ATTR("type", match_type);
+ break;
+ case FLT_COND_BODY:
+ NODE_NEW("match-body-text", cond->str_value);
+ ADD_ATTR("type", match_type);
+ break;
+ case FLT_COND_CMD_TEST:
+ NODE_NEW("command-test", cond->str_value);
+ break;
+ case FLT_COND_SIZE_GREATER:
+ NODE_NEW("size", itos(cond->int_value));
+ ADD_ATTR("type",
+ FLT_IS_NOT_MATCH(cond->match_flag)
+ ? "lt" : "gt");
+ break;
+ case FLT_COND_AGE_GREATER:
+ NODE_NEW("age", itos(cond->int_value));
+ ADD_ATTR("type",
+ FLT_IS_NOT_MATCH(cond->match_flag)
+ ? "lt" : "gt");
+ break;
+ case FLT_COND_ACCOUNT:
+ NODE_NEW("account-id", itos(cond->int_value));
+ break;
+ default:
+ break;
+ }
+
+ if (node) {
+ fputs(" ", pfile->fp);
+ xml_file_put_node(pfile->fp, node);
+ xml_free_node(node);
+ }
+ }
+
+ fputs(" </condition-list>\n", pfile->fp);
+
+ fputs(" <action-list>\n", pfile->fp);
+
+ for (cur_action = rule->action_list; cur_action != NULL;
+ cur_action = cur_action->next) {
+ FilterAction *action = (FilterAction *)cur_action->data;
+ XMLNode *node = NULL;
+
+ switch (action->type) {
+ case FLT_ACTION_MOVE:
+ NODE_NEW("move", action->str_value);
+ break;
+ case FLT_ACTION_COPY:
+ NODE_NEW("copy", action->str_value);
+ break;
+ case FLT_ACTION_NOT_RECEIVE:
+ NODE_NEW("not-receive", NULL);
+ break;
+ case FLT_ACTION_DELETE:
+ NODE_NEW("delete", NULL);
+ break;
+ case FLT_ACTION_EXEC:
+ NODE_NEW("exec", action->str_value);
+ break;
+ case FLT_ACTION_EXEC_ASYNC:
+ NODE_NEW("exec-async", action->str_value);
+ break;
+ case FLT_ACTION_MARK:
+ NODE_NEW("mark", NULL);
+ break;
+ case FLT_ACTION_COLOR_LABEL:
+ NODE_NEW("color-label", action->str_value);
+ break;
+ case FLT_ACTION_MARK_READ:
+ NODE_NEW("mark-as-read", NULL);
+ break;
+ case FLT_ACTION_FORWARD:
+ NODE_NEW("forward", action->str_value);
+ break;
+ case FLT_ACTION_FORWARD_AS_ATTACHMENT:
+ NODE_NEW("forward-as-attachment",
+ action->str_value);
+ break;
+ case FLT_ACTION_REDIRECT:
+ NODE_NEW("redirect", action->str_value);
+ break;
+ case FLT_ACTION_STOP_EVAL:
+ NODE_NEW("stop-eval", NULL);
+ break;
+ default:
+ break;
+ }
+
+ if (node) {
+ fputs(" ", pfile->fp);
+ xml_file_put_node(pfile->fp, node);
+ xml_free_node(node);
+ }
+ }
+
+ fputs(" </action-list>\n", pfile->fp);
+
+ fputs(" </rule>\n", pfile->fp);
+ }
+
+ fputs("</filter>\n", pfile->fp);
+
+ g_free(rcpath);
+
+ if (prefs_file_close(pfile) < 0) {
+ g_warning(_("failed to write configuration to file\n"));
+ return;
+ }
+}
+
+#undef NODE_NEW
+#undef ADD_ATTR
+
+gchar *filter_get_str(FilterRule *rule)
+{
+ gchar *str;
+ FilterCond *cond1, *cond2;
+ FilterAction *action = NULL;
+ GSList *cur;
+ gint flag1 = 0, flag2 = 0;
+
+ cond1 = (FilterCond *)rule->cond_list->data;
+ if (rule->cond_list->next)
+ cond2 = (FilterCond *)rule->cond_list->next->data;
+ else
+ cond2 = NULL;
+
+ /* new -> old flag conversion */
+ switch (cond1->match_type) {
+ case FLT_CONTAIN:
+ case FLT_EQUAL:
+ flag1 = FLT_IS_NOT_MATCH(cond1->match_flag) ? 0 : FLT_O_CONTAIN;
+ if (FLT_IS_CASE_SENS(cond1->match_flag))
+ flag1 |= FLT_O_CASE_SENS;
+ break;
+ case FLT_REGEX:
+ flag1 = FLT_O_REGEX; break;
+ default:
+ break;
+ }
+ if (cond2) {
+ switch (cond2->match_type) {
+ case FLT_CONTAIN:
+ case FLT_EQUAL:
+ flag2 = FLT_IS_NOT_MATCH(cond2->match_flag) ? 0 : FLT_O_CONTAIN;
+ if (FLT_IS_CASE_SENS(cond2->match_flag))
+ flag2 |= FLT_O_CASE_SENS;
+ break;
+ case FLT_REGEX:
+ flag2 = FLT_O_REGEX; break;
+ default:
+ break;
+ }
+ } else
+ flag2 = FLT_O_CONTAIN;
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ action = (FilterAction *)cur->data;
+ if (action->type == FLT_ACTION_MOVE ||
+ action->type == FLT_ACTION_NOT_RECEIVE ||
+ action->type == FLT_ACTION_DELETE)
+ break;
+ }
+
+ str = g_strdup_printf
+ ("%s:%s:%c:%s:%s:%s:%d:%d:%c",
+ cond1->header_name, cond1->str_value ? cond1->str_value : "",
+ (cond2 && cond2->header_name) ?
+ (rule->bool_op == FLT_AND ? '&' : '|') : ' ',
+ (cond2 && cond2->header_name) ? cond2->header_name : "",
+ (cond2 && cond2->str_value) ? cond2->str_value : "",
+ (action && action->str_value) ? action->str_value : "",
+ flag1, flag2,
+ (action && action->type == FLT_ACTION_MOVE) ? 'm' :
+ (action && action->type == FLT_ACTION_NOT_RECEIVE) ? 'n' :
+ (action && action->type == FLT_ACTION_DELETE) ? 'd' : ' ');
+
+ return str;
+}
+
+#define PARSE_ONE_PARAM(p, srcp) \
+{ \
+ p = strchr(srcp, '\t'); \
+ if (!p) return NULL; \
+ else \
+ *p++ = '\0'; \
+}
+
+FilterRule *filter_read_str(const gchar *str)
+{
+ FilterRule *rule;
+ FilterBoolOp bool_op;
+ gint flag;
+ FilterCond *cond;
+ FilterMatchType match_type;
+ FilterMatchFlag match_flag;
+ FilterAction *action;
+ GSList *cond_list = NULL;
+ GSList *action_list = NULL;
+ gchar *tmp;
+ gchar *rule_name;
+ gchar *name1, *body1, *op, *name2, *body2, *dest;
+ gchar *flag1 = NULL, *flag2 = NULL, *action1 = NULL;
+
+ Xstrdup_a(tmp, str, return NULL);
+
+ name1 = tmp;
+ PARSE_ONE_PARAM(body1, name1);
+ PARSE_ONE_PARAM(op, body1);
+ PARSE_ONE_PARAM(name2, op);
+ PARSE_ONE_PARAM(body2, name2);
+ PARSE_ONE_PARAM(dest, body2);
+ if (strchr(dest, '\t')) {
+ gchar *p;
+
+ PARSE_ONE_PARAM(flag1, dest);
+ PARSE_ONE_PARAM(flag2, flag1);
+ PARSE_ONE_PARAM(action1, flag2);
+ if ((p = strchr(action1, '\t'))) *p = '\0';
+ }
+
+ bool_op = (*op == '&') ? FLT_AND : FLT_OR;
+
+ if (*name1) {
+ if (flag1)
+ flag = (FilterOldFlag)strtoul(flag1, NULL, 10);
+ else
+ flag = FLT_O_CONTAIN;
+ match_type = FLT_CONTAIN;
+ match_flag = 0;
+ if (flag & FLT_O_REGEX)
+ match_type = FLT_REGEX;
+ else if (!(flag & FLT_O_CONTAIN))
+ match_flag = FLT_NOT_MATCH;
+ if (flag & FLT_O_CASE_SENS)
+ match_flag |= FLT_CASE_SENS;
+ cond = filter_cond_new(FLT_COND_HEADER, match_type, match_flag,
+ name1, body1);
+ cond_list = g_slist_append(cond_list, cond);
+ }
+ if (*name2) {
+ if (flag2)
+ flag = (FilterOldFlag)strtoul(flag2, NULL, 10);
+ else
+ flag = FLT_O_CONTAIN;
+ match_type = FLT_CONTAIN;
+ match_flag = 0;
+ if (flag & FLT_O_REGEX)
+ match_type = FLT_REGEX;
+ else if (!(flag & FLT_O_CONTAIN))
+ match_flag = FLT_NOT_MATCH;
+ if (flag & FLT_O_CASE_SENS)
+ match_flag |= FLT_CASE_SENS;
+ cond = filter_cond_new(FLT_COND_HEADER, match_type, match_flag,
+ name2, body2);
+ cond_list = g_slist_append(cond_list, cond);
+ }
+
+ action = filter_action_new(FLT_ACTION_MOVE,
+ *dest ? g_strdup(dest) : NULL);
+ if (action1) {
+ switch (*action1) {
+ case 'm': action->type = FLT_ACTION_MOVE; break;
+ case 'n': action->type = FLT_ACTION_NOT_RECEIVE; break;
+ case 'd': action->type = FLT_ACTION_DELETE; break;
+ default: g_warning("Invalid action: `%c'\n", *action1);
+ }
+ }
+ action_list = g_slist_append(action_list, action);
+
+ Xstrdup_a(rule_name, str, return NULL);
+ subst_char(rule_name, '\t', ':');
+
+ rule = filter_rule_new(rule_name, bool_op, cond_list, action_list);
+
+ return rule;
+}
+
+FilterRule *filter_rule_new(const gchar *name, FilterBoolOp bool_op,
+ GSList *cond_list, GSList *action_list)
+{
+ FilterRule *rule;
+
+ rule = g_new0(FilterRule, 1);
+ rule->name = g_strdup(name);
+ rule->bool_op = bool_op;
+ rule->cond_list = cond_list;
+ rule->action_list = action_list;
+ rule->timing = FLT_TIMING_ANY;
+ rule->enabled = TRUE;
+
+ return rule;
+}
+
+FilterCond *filter_cond_new(FilterCondType type,
+ FilterMatchType match_type,
+ FilterMatchFlag match_flag,
+ const gchar *header, const gchar *value)
+{
+ FilterCond *cond;
+
+ cond = g_new0(FilterCond, 1);
+ cond->type = type;
+ cond->match_type = match_type;
+ cond->match_flag = match_flag;
+
+ if (type == FLT_COND_HEADER)
+ cond->header_name =
+ (header && *header) ? g_strdup(header) : NULL;
+ else
+ cond->header_name = NULL;
+
+ cond->str_value = (value && *value) ? g_strdup(value) : NULL;
+ if (type == FLT_COND_SIZE_GREATER || type == FLT_COND_AGE_GREATER)
+ cond->int_value = atoi(value);
+ else
+ cond->int_value = 0;
+
+ if (match_type == FLT_REGEX)
+ cond->match_func = strmatch_regex;
+ else if (match_type == FLT_EQUAL) {
+ if (FLT_IS_CASE_SENS(match_flag))
+ cond->match_func = str_find_equal;
+ else
+ cond->match_func = str_case_find_equal;
+ } else {
+ if (FLT_IS_CASE_SENS(match_flag))
+ cond->match_func = str_find;
+ else
+ cond->match_func = str_case_find;
+ }
+
+ return cond;
+}
+
+FilterAction *filter_action_new(FilterActionType type, const gchar *str)
+{
+ FilterAction *action;
+
+ action = g_new0(FilterAction, 1);
+ action->type = type;
+
+ action->str_value = (str && *str) ? g_strdup(str) : NULL;
+ if (type == FLT_ACTION_COLOR_LABEL && str)
+ action->int_value = atoi(str);
+ else
+ action->int_value = 0;
+
+ return action;
+}
+
+FilterInfo *filter_info_new(void)
+{
+ FilterInfo *fltinfo;
+
+ fltinfo = g_new0(FilterInfo, 1);
+ fltinfo->dest_list = NULL;
+ fltinfo->move_dest = NULL;
+ fltinfo->drop_done = FALSE;
+
+ return fltinfo;
+}
+
+void filter_rule_rename_dest_path(FilterRule *rule, const gchar *old_path,
+ const gchar *new_path)
+{
+ FilterAction *action;
+ GSList *cur;
+ gchar *base;
+ gchar *dest_path;
+ gint oldpathlen;
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ action = (FilterAction *)cur->data;
+
+ if (action->type != FLT_ACTION_MOVE &&
+ action->type != FLT_ACTION_COPY)
+ continue;
+
+ oldpathlen = strlen(old_path);
+ if (action->str_value &&
+ !strncmp(old_path, action->str_value, oldpathlen)) {
+ base = action->str_value + oldpathlen;
+ while (*base == G_DIR_SEPARATOR) base++;
+ if (*base == '\0')
+ dest_path = g_strdup(new_path);
+ else
+ dest_path = g_strconcat(new_path,
+ G_DIR_SEPARATOR_S,
+ base, NULL);
+ g_free(action->str_value);
+ action->str_value = dest_path;
+ }
+ }
+}
+
+void filter_rule_delete_action_by_dest_path(FilterRule *rule, const gchar *path)
+{
+ FilterAction *action;
+ GSList *cur;
+ GSList *next;
+
+ for (cur = rule->action_list; cur != NULL; cur = next) {
+ action = (FilterAction *)cur->data;
+ next = cur->next;
+
+ if (action->type != FLT_ACTION_MOVE &&
+ action->type != FLT_ACTION_COPY)
+ continue;
+
+ if (action->str_value &&
+ !strncmp(path, action->str_value, strlen(path))) {
+ rule->action_list = g_slist_remove
+ (rule->action_list, action);
+ filter_action_free(action);
+ }
+ }
+}
+
+void filter_rule_match_type_str_to_enum(const gchar *match_type,
+ FilterMatchType *type,
+ FilterMatchFlag *flag)
+{
+ g_return_if_fail(match_type != NULL);
+
+ *type = FLT_CONTAIN;
+ *flag = 0;
+
+ if (!strcmp(match_type, "contains")) {
+ *type = FLT_CONTAIN;
+ } else if (!strcmp(match_type, "not-contain")) {
+ *type = FLT_CONTAIN;
+ *flag = FLT_NOT_MATCH;
+ } else if (!strcmp(match_type, "is")) {
+ *type = FLT_EQUAL;
+ } else if (!strcmp(match_type, "is-not")) {
+ *type = FLT_EQUAL;
+ *flag = FLT_NOT_MATCH;
+ } else if (!strcmp(match_type, "regex")) {
+ *type = FLT_REGEX;
+ } else if (!strcmp(match_type, "not-regex")) {
+ *type = FLT_REGEX;
+ *flag = FLT_NOT_MATCH;
+ } else if (!strcmp(match_type, "gt")) {
+ } else if (!strcmp(match_type, "lt")) {
+ *flag = FLT_NOT_MATCH;
+ }
+}
+
+void filter_rule_free(FilterRule *rule)
+{
+ if (!rule) return;
+
+ g_free(rule->name);
+
+ filter_cond_list_free(rule->cond_list);
+ filter_action_list_free(rule->action_list);
+
+ g_free(rule);
+}
+
+void filter_cond_list_free(GSList *cond_list)
+{
+ GSList *cur;
+
+ for (cur = cond_list; cur != NULL; cur = cur->next)
+ filter_cond_free((FilterCond *)cur->data);
+ g_slist_free(cond_list);
+}
+
+void filter_action_list_free(GSList *action_list)
+{
+ GSList *cur;
+
+ for (cur = action_list; cur != NULL; cur = cur->next)
+ filter_action_free((FilterAction *)cur->data);
+ g_slist_free(action_list);
+}
+
+static void filter_cond_free(FilterCond *cond)
+{
+ g_free(cond->header_name);
+ g_free(cond->str_value);
+ g_free(cond);
+}
+
+static void filter_action_free(FilterAction *action)
+{
+ g_free(action->str_value);
+ g_free(action);
+}
+
+void filter_info_free(FilterInfo *fltinfo)
+{
+ g_slist_free(fltinfo->dest_list);
+ g_free(fltinfo);
+}
diff --git a/src/filter.h b/src/filter.h
new file mode 100644
index 00000000..ab1ff711
--- /dev/null
+++ b/src/filter.h
@@ -0,0 +1,194 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __FILTER_H__
+#define __FILTER_H__
+
+#include <glib.h>
+
+#include "folder.h"
+#include "procmsg.h"
+#include "utils.h"
+
+typedef struct _FilterCond FilterCond;
+typedef struct _FilterAction FilterAction;
+typedef struct _FilterRule FilterRule;
+typedef struct _FilterInfo FilterInfo;
+
+typedef enum
+{
+ FLT_TIMING_ANY,
+ FLT_TIMING_ON_RECEIVE,
+ FLT_TIMING_MANUAL
+} FilterTiming;
+
+typedef enum
+{
+ FLT_COND_HEADER,
+ FLT_COND_ANY_HEADER,
+ FLT_COND_TO_OR_CC,
+ FLT_COND_BODY,
+ FLT_COND_CMD_TEST,
+ FLT_COND_SIZE_GREATER,
+ FLT_COND_AGE_GREATER,
+ FLT_COND_ACCOUNT
+} FilterCondType;
+
+typedef enum
+{
+ FLT_CONTAIN,
+ FLT_EQUAL,
+ FLT_REGEX
+} FilterMatchType;
+
+typedef enum
+{
+ FLT_NOT_MATCH = 1 << 0,
+ FLT_CASE_SENS = 1 << 1
+} FilterMatchFlag;
+
+typedef enum
+{
+ FLT_OR,
+ FLT_AND
+} FilterBoolOp;
+
+typedef enum
+{
+ FLT_ACTION_MOVE,
+ FLT_ACTION_COPY,
+ FLT_ACTION_NOT_RECEIVE,
+ FLT_ACTION_DELETE,
+ FLT_ACTION_EXEC,
+ FLT_ACTION_EXEC_ASYNC,
+ FLT_ACTION_MARK,
+ FLT_ACTION_COLOR_LABEL,
+ FLT_ACTION_MARK_READ,
+ FLT_ACTION_FORWARD,
+ FLT_ACTION_FORWARD_AS_ATTACHMENT,
+ FLT_ACTION_REDIRECT,
+ FLT_ACTION_STOP_EVAL,
+ FLT_ACTION_NONE
+} FilterActionType;
+
+#define FLT_IS_NOT_MATCH(flag) ((flag & FLT_NOT_MATCH) != 0)
+#define FLT_IS_CASE_SENS(flag) ((flag & FLT_CASE_SENS) != 0)
+
+struct _FilterCond
+{
+ FilterCondType type;
+
+ gchar *header_name;
+
+ gchar *str_value;
+ gint int_value;
+
+ FilterMatchType match_type;
+ FilterMatchFlag match_flag;
+
+ StrFindFunc match_func;
+};
+
+struct _FilterAction
+{
+ FilterActionType type;
+
+ gchar *str_value;
+ gint int_value;
+};
+
+struct _FilterRule
+{
+ gchar *name;
+
+ FilterBoolOp bool_op;
+
+ GSList *cond_list;
+ GSList *action_list;
+
+ FilterTiming timing;
+ gboolean enabled;
+};
+
+struct _FilterInfo
+{
+ PrefsAccount *account;
+ MsgFlags flags;
+
+ gboolean actions[FLT_ACTION_NONE];
+ GSList *dest_list;
+ FolderItem *move_dest;
+ gboolean drop_done;
+};
+
+gint filter_apply (GSList *fltlist,
+ const gchar *file,
+ FilterInfo *fltinfo);
+gint filter_apply_msginfo (GSList *fltlist,
+ MsgInfo *msginfo,
+ FilterInfo *fltinfo);
+
+gint filter_action_exec (FilterRule *rule,
+ MsgInfo *msginfo,
+ const gchar *file,
+ FilterInfo *fltinfo);
+
+gboolean filter_match_rule (FilterRule *rule,
+ MsgInfo *msginfo,
+ GSList *hlist,
+ FilterInfo *fltinfo);
+
+/* read / write config */
+GSList *filter_xml_node_to_filter_list (GNode *node);
+void filter_write_config (GSList *fltlist);
+
+/* for old filterrc */
+gchar *filter_get_str (FilterRule *rule);
+FilterRule *filter_read_str (const gchar *str);
+
+FilterRule *filter_rule_new (const gchar *name,
+ FilterBoolOp bool_op,
+ GSList *cond_list,
+ GSList *action_list);
+FilterCond *filter_cond_new (FilterCondType type,
+ FilterMatchType match_type,
+ FilterMatchFlag match_flag,
+ const gchar *header,
+ const gchar *body);
+FilterAction *filter_action_new (FilterActionType type,
+ const gchar *str);
+FilterInfo *filter_info_new (void);
+
+void filter_rule_rename_dest_path (FilterRule *rule,
+ const gchar *old_path,
+ const gchar *new_path);
+void filter_rule_delete_action_by_dest_path
+ (FilterRule *rule,
+ const gchar *path);
+
+void filter_rule_match_type_str_to_enum (const gchar *type_str,
+ FilterMatchType *type,
+ FilterMatchFlag *flag);
+
+void filter_rule_free (FilterRule *rule);
+void filter_cond_list_free (GSList *cond_list);
+void filter_action_list_free (GSList *action_list);
+void filter_info_free (FilterInfo *info);
+
+#endif /* __FILTER_H__ */
diff --git a/src/folder.c b/src/folder.c
new file mode 100644
index 00000000..08800e53
--- /dev/null
+++ b/src/folder.c
@@ -0,0 +1,1529 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "folder.h"
+#include "session.h"
+#include "imap.h"
+#include "news.h"
+#include "mh.h"
+#include "utils.h"
+#include "xml.h"
+#include "codeconv.h"
+#include "prefs.h"
+#include "account.h"
+#include "prefs_account.h"
+
+static GList *folder_list = NULL;
+
+static void folder_init (Folder *folder,
+ const gchar *name);
+
+static gboolean folder_read_folder_func (GNode *node,
+ gpointer data);
+static gchar *folder_get_list_path (void);
+static void folder_write_list_recursive (GNode *node,
+ gpointer data);
+
+
+Folder *folder_new(FolderType type, const gchar *name, const gchar *path)
+{
+ Folder *folder = NULL;
+
+ name = name ? name : path;
+ switch (type) {
+ case F_MH:
+ folder = mh_get_class()->folder_new(name, path);
+ break;
+ case F_IMAP:
+ folder = imap_get_class()->folder_new(name, path);
+ break;
+ case F_NEWS:
+ folder = news_get_class()->folder_new(name, path);
+ break;
+ default:
+ return NULL;
+ }
+
+ return folder;
+}
+
+static void folder_init(Folder *folder, const gchar *name)
+{
+ FolderItem *item;
+
+ g_return_if_fail(folder != NULL);
+
+ folder_set_name(folder, name);
+ folder->account = NULL;
+ folder->inbox = NULL;
+ folder->outbox = NULL;
+ folder->draft = NULL;
+ folder->queue = NULL;
+ folder->trash = NULL;
+ folder->ui_func = NULL;
+ folder->ui_func_data = NULL;
+ item = folder_item_new(name, NULL);
+ item->folder = folder;
+ folder->node = item->node = g_node_new(item);
+ folder->data = NULL;
+}
+
+void folder_local_folder_init(Folder *folder, const gchar *name,
+ const gchar *path)
+{
+ folder_init(folder, name);
+ LOCAL_FOLDER(folder)->rootpath = g_strdup(path);
+}
+
+void folder_remote_folder_init(Folder *folder, const gchar *name,
+ const gchar *path)
+{
+ folder_init(folder, name);
+ REMOTE_FOLDER(folder)->session = NULL;
+}
+
+void folder_destroy(Folder *folder)
+{
+ g_return_if_fail(folder != NULL);
+ g_return_if_fail(folder->klass->destroy != NULL);
+
+ folder->klass->destroy(folder);
+
+ folder_list = g_list_remove(folder_list, folder);
+
+ folder_tree_destroy(folder);
+ g_free(folder->name);
+ g_free(folder);
+}
+
+void folder_local_folder_destroy(LocalFolder *lfolder)
+{
+ g_return_if_fail(lfolder != NULL);
+
+ g_free(lfolder->rootpath);
+}
+
+void folder_remote_folder_destroy(RemoteFolder *rfolder)
+{
+ g_return_if_fail(rfolder != NULL);
+
+ if (rfolder->session)
+ session_destroy(rfolder->session);
+}
+
+#if 0
+Folder *mbox_folder_new(const gchar *name, const gchar *path)
+{
+ /* not yet implemented */
+ return NULL;
+}
+
+Folder *maildir_folder_new(const gchar *name, const gchar *path)
+{
+ /* not yet implemented */
+ return NULL;
+}
+#endif
+
+FolderItem *folder_item_new(const gchar *name, const gchar *path)
+{
+ FolderItem *item;
+
+ item = g_new0(FolderItem, 1);
+
+ item->stype = F_NORMAL;
+ item->name = g_strdup(name);
+ item->path = g_strdup(path);
+ item->mtime = 0;
+ item->new = 0;
+ item->unread = 0;
+ item->total = 0;
+ item->unmarked_num = 0;
+ item->last_num = -1;
+ item->no_sub = FALSE;
+ item->no_select = FALSE;
+ item->collapsed = FALSE;
+ item->threaded = TRUE;
+ item->opened = FALSE;
+ item->node = NULL;
+ item->parent = NULL;
+ item->folder = NULL;
+ item->account = NULL;
+ item->ac_apply_sub = FALSE;
+ item->auto_to = NULL;
+ item->use_auto_to_on_reply = FALSE;
+ item->auto_cc = NULL;
+ item->auto_bcc = NULL;
+ item->auto_replyto = NULL;
+ item->mark_queue = NULL;
+ item->data = NULL;
+
+ return item;
+}
+
+void folder_item_append(FolderItem *parent, FolderItem *item)
+{
+ g_return_if_fail(parent != NULL);
+ g_return_if_fail(parent->folder != NULL);
+ g_return_if_fail(parent->node != NULL);
+ g_return_if_fail(item != NULL);
+
+ item->parent = parent;
+ item->folder = parent->folder;
+ item->node = g_node_append_data(parent->node, item);
+}
+
+static gboolean folder_item_remove_func(GNode *node, gpointer data)
+{
+ FolderItem *item = FOLDER_ITEM(node->data);
+
+ folder_item_destroy(item);
+ return FALSE;
+}
+
+void folder_item_remove(FolderItem *item)
+{
+ GNode *node;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(item->node != NULL);
+
+ node = item->node;
+
+ if (item->folder->node == node)
+ item->folder->node = NULL;
+
+ g_node_traverse(node, G_POST_ORDER, G_TRAVERSE_ALL, -1,
+ folder_item_remove_func, NULL);
+ g_node_destroy(node);
+}
+
+void folder_item_remove_children(FolderItem *item)
+{
+ GNode *node, *next;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(item->node != NULL);
+
+ node = item->node->children;
+ while (node != NULL) {
+ next = node->next;
+ folder_item_remove(FOLDER_ITEM(node->data));
+ node = next;
+ }
+}
+
+void folder_item_destroy(FolderItem *item)
+{
+ Folder *folder;
+
+ g_return_if_fail(item != NULL);
+
+ folder = item->folder;
+ if (folder) {
+ if (folder->inbox == item)
+ folder->inbox = NULL;
+ else if (folder->outbox == item)
+ folder->outbox = NULL;
+ else if (folder->draft == item)
+ folder->draft = NULL;
+ else if (folder->queue == item)
+ folder->queue = NULL;
+ else if (folder->trash == item)
+ folder->trash = NULL;
+ }
+
+ g_free(item->name);
+ g_free(item->path);
+ g_free(item->auto_to);
+ g_free(item->auto_cc);
+ g_free(item->auto_bcc);
+ g_free(item->auto_replyto);
+ g_free(item);
+}
+
+void folder_set_ui_func(Folder *folder, FolderUIFunc func, gpointer data)
+{
+ g_return_if_fail(folder != NULL);
+
+ folder->ui_func = func;
+ folder->ui_func_data = data;
+}
+
+void folder_set_name(Folder *folder, const gchar *name)
+{
+ g_return_if_fail(folder != NULL);
+
+ g_free(folder->name);
+ folder->name = name ? g_strdup(name) : NULL;
+ if (folder->node && folder->node->data) {
+ FolderItem *item = (FolderItem *)folder->node->data;
+
+ g_free(item->name);
+ item->name = name ? g_strdup(name) : NULL;
+ }
+}
+
+void folder_tree_destroy(Folder *folder)
+{
+ g_return_if_fail(folder != NULL);
+
+ if (folder->node)
+ folder_item_remove(FOLDER_ITEM(folder->node->data));
+}
+
+void folder_add(Folder *folder)
+{
+ Folder *cur_folder;
+ GList *cur;
+ gint i;
+
+ g_return_if_fail(folder != NULL);
+
+ for (i = 0, cur = folder_list; cur != NULL; cur = cur->next, i++) {
+ cur_folder = FOLDER(cur->data);
+ if (FOLDER_TYPE(folder) == F_MH) {
+ if (FOLDER_TYPE(cur_folder) != F_MH) break;
+ } else if (FOLDER_TYPE(folder) == F_IMAP) {
+ if (FOLDER_TYPE(cur_folder) != F_MH &&
+ FOLDER_TYPE(cur_folder) != F_IMAP) break;
+ } else if (FOLDER_TYPE(folder) == F_NEWS) {
+ if (FOLDER_TYPE(cur_folder) != F_MH &&
+ FOLDER_TYPE(cur_folder) != F_IMAP &&
+ FOLDER_TYPE(cur_folder) != F_NEWS) break;
+ }
+ }
+
+ folder_list = g_list_insert(folder_list, folder, i);
+}
+
+GList *folder_get_list(void)
+{
+ return folder_list;
+}
+
+gint folder_read_list(void)
+{
+ GNode *node;
+ XMLNode *xmlnode;
+ gchar *path;
+
+ path = folder_get_list_path();
+ if (!is_file_exist(path)) return -1;
+ node = xml_parse_file(path);
+ if (!node) return -1;
+
+ xmlnode = node->data;
+ if (strcmp2(xmlnode->tag->tag, "folderlist") != 0) {
+ g_warning("wrong folder list\n");
+ xml_free_tree(node);
+ return -1;
+ }
+
+ g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, 2,
+ folder_read_folder_func, NULL);
+
+ xml_free_tree(node);
+ if (folder_list)
+ return 0;
+ else
+ return -1;
+}
+
+void folder_write_list(void)
+{
+ GList *list;
+ Folder *folder;
+ gchar *path;
+ PrefFile *pfile;
+
+ path = folder_get_list_path();
+ if ((pfile = prefs_file_open(path)) == NULL) return;
+
+ fprintf(pfile->fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n",
+ conv_get_internal_charset_str());
+ fputs("\n<folderlist>\n", pfile->fp);
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ folder_write_list_recursive(folder->node, pfile->fp);
+ }
+
+ fputs("</folderlist>\n", pfile->fp);
+
+ if (prefs_file_close(pfile) < 0)
+ g_warning("failed to write folder list.\n");
+}
+
+struct TotalMsgStatus
+{
+ guint new;
+ guint unread;
+ guint total;
+ GString *str;
+};
+
+static gboolean folder_get_status_full_all_func(GNode *node, gpointer data)
+{
+ FolderItem *item;
+ struct TotalMsgStatus *status = (struct TotalMsgStatus *)data;
+ gchar *id;
+
+ g_return_val_if_fail(node->data != NULL, FALSE);
+
+ item = FOLDER_ITEM(node->data);
+
+ if (!item->path) return FALSE;
+
+ status->new += item->new;
+ status->unread += item->unread;
+ status->total += item->total;
+
+ if (status->str) {
+ id = folder_item_get_identifier(item);
+ g_string_sprintfa(status->str, "%5d %5d %5d %s\n",
+ item->new, item->unread,
+ item->total, id);
+ g_free(id);
+ }
+
+ return FALSE;
+}
+
+static void folder_get_status_full_all(GString *str, guint *new, guint *unread,
+ guint *total)
+{
+ GList *list;
+ Folder *folder;
+ struct TotalMsgStatus status;
+
+ status.new = status.unread = status.total = 0;
+ status.str = str;
+
+ debug_print("Counting total number of messages...\n");
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = FOLDER(list->data);
+ if (folder->node)
+ g_node_traverse(folder->node, G_PRE_ORDER,
+ G_TRAVERSE_ALL, -1,
+ folder_get_status_full_all_func,
+ &status);
+ }
+
+ *new = status.new;
+ *unread = status.unread;
+ *total = status.total;
+}
+
+gchar *folder_get_status(GPtrArray *folders, gboolean full)
+{
+ guint new, unread, total;
+ GString *str;
+ gint i;
+ gchar *ret;
+
+ new = unread = total = 0;
+
+ str = g_string_new(NULL);
+
+ if (folders) {
+ for (i = 0; i < folders->len; i++) {
+ FolderItem *item;
+
+ item = g_ptr_array_index(folders, i);
+ new += item->new;
+ unread += item->unread;
+ total += item->total;
+
+ if (full) {
+ gchar *id;
+
+ id = folder_item_get_identifier(item);
+ g_string_sprintfa(str, "%5d %5d %5d %s\n",
+ item->new, item->unread,
+ item->total, id);
+ g_free(id);
+ }
+ }
+ } else {
+ folder_get_status_full_all(full ? str : NULL,
+ &new, &unread, &total);
+ }
+
+ if (full)
+ g_string_sprintfa(str, "%5d %5d %5d\n", new, unread, total);
+ else
+ g_string_sprintfa(str, "%d %d %d\n", new, unread, total);
+
+ ret = str->str;
+ g_string_free(str, FALSE);
+
+ return ret;
+}
+
+Folder *folder_find_from_path(const gchar *path)
+{
+ GList *list;
+ Folder *folder;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ if (FOLDER_TYPE(folder) == F_MH &&
+ !path_cmp(LOCAL_FOLDER(folder)->rootpath, path))
+ return folder;
+ }
+
+ return NULL;
+}
+
+Folder *folder_find_from_name(const gchar *name, FolderType type)
+{
+ GList *list;
+ Folder *folder;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ if (FOLDER_TYPE(folder) == type &&
+ strcmp2(name, folder->name) == 0)
+ return folder;
+ }
+
+ return NULL;
+}
+
+static gboolean folder_item_find_func(GNode *node, gpointer data)
+{
+ FolderItem *item = node->data;
+ gpointer *d = data;
+ const gchar *path = d[0];
+
+ if (path_cmp(path, item->path) != 0)
+ return FALSE;
+
+ d[1] = item;
+
+ return TRUE;
+}
+
+FolderItem *folder_find_item_from_path(const gchar *path)
+{
+ Folder *folder;
+ gpointer d[2];
+
+ folder = folder_get_default_folder();
+ g_return_val_if_fail(folder != NULL, NULL);
+
+ d[0] = (gpointer)path;
+ d[1] = NULL;
+ g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folder_item_find_func, d);
+ return d[1];
+}
+
+FolderItem *folder_find_child_item_by_name(FolderItem *item, const gchar *name)
+{
+ GNode *node;
+ FolderItem *child;
+
+ for (node = item->node->children; node != NULL; node = node->next) {
+ child = FOLDER_ITEM(node->data);
+ if (strcmp2(g_basename(child->path), name) == 0)
+ return child;
+ }
+
+ return NULL;
+}
+
+static const struct {
+ gchar *str;
+ FolderType type;
+} type_str_table[] = {
+ {"#mh" , F_MH},
+ {"#mbox" , F_MBOX},
+ {"#maildir", F_MAILDIR},
+ {"#imap" , F_IMAP},
+ {"#news" , F_NEWS}
+};
+
+static gchar *folder_get_type_string(FolderType type)
+{
+ gint i;
+
+ for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
+ i++) {
+ if (type_str_table[i].type == type)
+ return type_str_table[i].str;
+ }
+
+ return NULL;
+}
+
+static FolderType folder_get_type_from_string(const gchar *str)
+{
+ gint i;
+
+ for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
+ i++) {
+ if (g_strcasecmp(type_str_table[i].str, str) == 0)
+ return type_str_table[i].type;
+ }
+
+ return F_UNKNOWN;
+}
+
+gchar *folder_get_identifier(Folder *folder)
+{
+ gchar *type_str;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+
+ type_str = folder_get_type_string(FOLDER_TYPE(folder));
+ return g_strconcat(type_str, "/", folder->name, NULL);
+}
+
+gchar *folder_item_get_identifier(FolderItem *item)
+{
+ gchar *id;
+ gchar *folder_id;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->path != NULL, NULL);
+
+ folder_id = folder_get_identifier(item->folder);
+ id = g_strconcat(folder_id, "/", item->path, NULL);
+ g_free(folder_id);
+
+ return id;
+}
+
+FolderItem *folder_find_item_from_identifier(const gchar *identifier)
+{
+ Folder *folder;
+ gpointer d[2];
+ gchar *str;
+ gchar *p;
+ gchar *name;
+ gchar *path;
+ FolderType type;
+
+ g_return_val_if_fail(identifier != NULL, NULL);
+
+ if (*identifier != '#')
+ return folder_find_item_from_path(identifier);
+
+ Xstrdup_a(str, identifier, return NULL);
+
+ p = strchr(str, '/');
+ if (!p)
+ return folder_find_item_from_path(identifier);
+ *p = '\0';
+ p++;
+ type = folder_get_type_from_string(str);
+ if (type == F_UNKNOWN)
+ return folder_find_item_from_path(identifier);
+
+ name = p;
+ p = strchr(p, '/');
+ if (!p)
+ return folder_find_item_from_path(identifier);
+ *p = '\0';
+ p++;
+
+ folder = folder_find_from_name(name, type);
+ if (!folder)
+ return folder_find_item_from_path(identifier);
+
+ path = p;
+
+ d[0] = (gpointer)path;
+ d[1] = NULL;
+ g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folder_item_find_func, d);
+ return d[1];
+}
+
+Folder *folder_get_default_folder(void)
+{
+ return folder_list ? FOLDER(folder_list->data) : NULL;
+}
+
+FolderItem *folder_get_default_inbox(void)
+{
+ Folder *folder;
+
+ if (!folder_list) return NULL;
+ folder = FOLDER(folder_list->data);
+ g_return_val_if_fail(folder != NULL, NULL);
+ return folder->inbox;
+}
+
+FolderItem *folder_get_default_outbox(void)
+{
+ Folder *folder;
+
+ if (!folder_list) return NULL;
+ folder = FOLDER(folder_list->data);
+ g_return_val_if_fail(folder != NULL, NULL);
+ return folder->outbox;
+}
+
+FolderItem *folder_get_default_draft(void)
+{
+ Folder *folder;
+
+ if (!folder_list) return NULL;
+ folder = FOLDER(folder_list->data);
+ g_return_val_if_fail(folder != NULL, NULL);
+ return folder->draft;
+}
+
+FolderItem *folder_get_default_queue(void)
+{
+ Folder *folder;
+
+ if (!folder_list) return NULL;
+ folder = FOLDER(folder_list->data);
+ g_return_val_if_fail(folder != NULL, NULL);
+ return folder->queue;
+}
+
+FolderItem *folder_get_default_trash(void)
+{
+ Folder *folder;
+
+ if (!folder_list) return NULL;
+ folder = FOLDER(folder_list->data);
+ g_return_val_if_fail(folder != NULL, NULL);
+ return folder->trash;
+}
+
+#define CREATE_FOLDER_IF_NOT_EXIST(member, dir, type) \
+{ \
+ if (!folder->member) { \
+ item = folder_item_new(dir, dir); \
+ item->stype = type; \
+ folder_item_append(rootitem, item); \
+ folder->member = item; \
+ } \
+}
+
+void folder_set_missing_folders(void)
+{
+ Folder *folder;
+ FolderItem *rootitem;
+ FolderItem *item;
+ GList *list;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ if (FOLDER_TYPE(folder) != F_MH) continue;
+ rootitem = FOLDER_ITEM(folder->node->data);
+ g_return_if_fail(rootitem != NULL);
+
+ if (folder->inbox && folder->outbox && folder->draft &&
+ folder->queue && folder->trash)
+ continue;
+
+ if (folder->klass->create_tree(folder) < 0) {
+ g_warning("%s: can't create the folder tree.\n",
+ LOCAL_FOLDER(folder)->rootpath);
+ continue;
+ }
+
+ CREATE_FOLDER_IF_NOT_EXIST(inbox, INBOX_DIR, F_INBOX);
+ CREATE_FOLDER_IF_NOT_EXIST(outbox, OUTBOX_DIR, F_OUTBOX);
+ CREATE_FOLDER_IF_NOT_EXIST(draft, DRAFT_DIR, F_DRAFT);
+ CREATE_FOLDER_IF_NOT_EXIST(queue, QUEUE_DIR, F_QUEUE);
+ CREATE_FOLDER_IF_NOT_EXIST(trash, TRASH_DIR, F_TRASH);
+ }
+}
+
+static gboolean folder_unref_account_func(GNode *node, gpointer data)
+{
+ FolderItem *item = node->data;
+ PrefsAccount *account = data;
+
+ if (item->account == account)
+ item->account = NULL;
+
+ return FALSE;
+}
+
+void folder_unref_account_all(PrefsAccount *account)
+{
+ Folder *folder;
+ GList *list;
+
+ if (!account) return;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ if (folder->account == account)
+ folder->account = NULL;
+ g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folder_unref_account_func, account);
+ }
+}
+
+#undef CREATE_FOLDER_IF_NOT_EXIST
+
+gchar *folder_get_path(Folder *folder)
+{
+ gchar *path;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+
+ if (FOLDER_TYPE(folder) == F_MH) {
+ path = g_filename_from_utf8(LOCAL_FOLDER(folder)->rootpath,
+ -1, NULL, NULL, NULL);
+ if (!path) {
+ g_warning("folder_get_path: faild to convert character set\n");
+ path = g_strdup(LOCAL_FOLDER(folder)->rootpath);
+ }
+ } else if (FOLDER_TYPE(folder) == F_IMAP) {
+ g_return_val_if_fail(folder->account != NULL, NULL);
+ path = g_strconcat(get_imap_cache_dir(),
+ G_DIR_SEPARATOR_S,
+ folder->account->recv_server,
+ G_DIR_SEPARATOR_S,
+ folder->account->userid,
+ NULL);
+ } else if (FOLDER_TYPE(folder) == F_NEWS) {
+ g_return_val_if_fail(folder->account != NULL, NULL);
+ path = g_strconcat(get_news_cache_dir(),
+ G_DIR_SEPARATOR_S,
+ folder->account->nntp_server,
+ NULL);
+ } else
+ path = NULL;
+
+ return path;
+}
+
+gchar *folder_item_get_path(FolderItem *item)
+{
+ gchar *folder_path;
+ gchar *item_path = NULL, *path;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ folder_path = folder_get_path(item->folder);
+ g_return_val_if_fail(folder_path != NULL, NULL);
+
+ if (item->path) {
+ item_path = g_filename_from_utf8(item->path, -1,
+ NULL, NULL, NULL);
+ if (!item_path) {
+ g_warning("folder_item_get_path: faild to convert character set\n");
+ item_path = g_strdup(item->path);
+ }
+ }
+
+ if (folder_path[0] == G_DIR_SEPARATOR) {
+ if (item_path)
+ path = g_strconcat(folder_path, G_DIR_SEPARATOR_S,
+ item_path, NULL);
+ else
+ path = g_strdup(folder_path);
+ } else {
+ if (item_path)
+ path = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S,
+ folder_path, G_DIR_SEPARATOR_S,
+ item_path, NULL);
+ else
+ path = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S,
+ folder_path, NULL);
+ }
+
+ g_free(item_path);
+ g_free(folder_path);
+ return path;
+}
+
+gint folder_item_scan(FolderItem *item)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ folder = item->folder;
+ return folder->klass->scan(folder, item);
+}
+
+static void folder_item_scan_foreach_func(gpointer key, gpointer val,
+ gpointer data)
+{
+ folder_item_scan(FOLDER_ITEM(key));
+}
+
+void folder_item_scan_foreach(GHashTable *table)
+{
+ g_hash_table_foreach(table, folder_item_scan_foreach_func, NULL);
+}
+
+GSList *folder_item_get_msg_list(FolderItem *item, gboolean use_cache)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ folder = item->folder;
+ return folder->klass->get_msg_list(folder, item, use_cache);
+}
+
+gchar *folder_item_fetch_msg(FolderItem *item, gint num)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ folder = item->folder;
+
+ return folder->klass->fetch_msg(folder, item, num);
+}
+
+gint folder_item_fetch_all_msg(FolderItem *item)
+{
+ Folder *folder;
+ GSList *mlist;
+ GSList *cur;
+ gint num = 0;
+ gint ret = 0;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ debug_print("fetching all messages in %s ...\n", item->path);
+
+ folder = item->folder;
+
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data ?
+ folder->ui_func_data : GINT_TO_POINTER(num));
+
+ mlist = folder_item_get_msg_list(item, TRUE);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ MsgInfo *msginfo = (MsgInfo *)cur->data;
+ gchar *msg;
+
+ num++;
+ if (folder->ui_func)
+ folder->ui_func(folder, item,
+ folder->ui_func_data ?
+ folder->ui_func_data :
+ GINT_TO_POINTER(num));
+
+ msg = folder_item_fetch_msg(item, msginfo->msgnum);
+ if (!msg) {
+ g_warning("Can't fetch message %d. Aborting.\n",
+ msginfo->msgnum);
+ ret = -1;
+ break;
+ }
+ g_free(msg);
+ }
+
+ procmsg_msg_list_free(mlist);
+
+ return ret;
+}
+
+MsgInfo *folder_item_get_msginfo(FolderItem *item, gint num)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ folder = item->folder;
+
+ return folder->klass->get_msginfo(folder, item, num);
+}
+
+gint folder_item_add_msg(FolderItem *dest, const gchar *file, MsgFlags *flags,
+ gboolean remove_source)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(file != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->add_msg != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->add_msg(folder, dest, file, flags, remove_source);
+}
+
+gint folder_item_add_msgs(FolderItem *dest, GSList *file_list,
+ gboolean remove_source, gint *first)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(file_list != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->add_msgs != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->add_msgs(folder, dest, file_list, remove_source,
+ first);
+}
+
+gint folder_item_move_msg(FolderItem *dest, MsgInfo *msginfo)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msginfo != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->move_msg != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->move_msg(folder, dest, msginfo);
+}
+
+gint folder_item_move_msgs(FolderItem *dest, GSList *msglist)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->move_msgs != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->move_msgs(folder, dest, msglist);
+}
+
+gint folder_item_copy_msg(FolderItem *dest, MsgInfo *msginfo)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msginfo != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->copy_msg != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->copy_msg(folder, dest, msginfo);
+}
+
+gint folder_item_copy_msgs(FolderItem *dest, GSList *msglist)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+ g_return_val_if_fail(dest->folder->klass->copy_msgs != NULL, -1);
+
+ folder = dest->folder;
+
+ return folder->klass->copy_msgs(folder, dest, msglist);
+}
+
+gint folder_item_remove_msg(FolderItem *item, MsgInfo *msginfo)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->folder->klass->remove_msg != NULL, -1);
+
+ folder = item->folder;
+
+ return folder->klass->remove_msg(folder, item, msginfo);
+}
+
+gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
+{
+ Folder *folder;
+ gint ret = 0;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ folder = item->folder;
+ if (folder->klass->remove_msgs) {
+ return folder->klass->remove_msgs(folder, item, msglist);
+ }
+
+ while (msglist != NULL) {
+ MsgInfo *msginfo = (MsgInfo *)msglist->data;
+
+ ret = folder_item_remove_msg(item, msginfo);
+ if (ret != 0) break;
+ msglist = msglist->next;
+ }
+
+ return ret;
+}
+
+gint folder_item_remove_all_msg(FolderItem *item)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->folder->klass->remove_all_msg != NULL, -1);
+
+ folder = item->folder;
+
+ return folder->klass->remove_all_msg(folder, item);
+}
+
+gboolean folder_item_is_msg_changed(FolderItem *item, MsgInfo *msginfo)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, FALSE);
+ g_return_val_if_fail(item->folder->klass->is_msg_changed != NULL,
+ FALSE);
+
+ folder = item->folder;
+ return folder->klass->is_msg_changed(folder, item, msginfo);
+}
+
+gint folder_item_close(FolderItem *item)
+{
+ Folder *folder;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ item->opened = FALSE;
+ folder = item->folder;
+ return folder->klass->close(folder, item);
+}
+
+gchar *folder_item_get_cache_file(FolderItem *item)
+{
+ gchar *path;
+ gchar *file;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->path != NULL, NULL);
+
+ path = folder_item_get_path(item);
+ g_return_val_if_fail(path != NULL, NULL);
+ if (!is_dir_exist(path))
+ make_dir_hier(path);
+ file = g_strconcat(path, G_DIR_SEPARATOR_S, CACHE_FILE, NULL);
+ g_free(path);
+
+ return file;
+}
+
+gchar *folder_item_get_mark_file(FolderItem *item)
+{
+ gchar *path;
+ gchar *file;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->path != NULL, NULL);
+
+ path = folder_item_get_path(item);
+ g_return_val_if_fail(path != NULL, NULL);
+ if (!is_dir_exist(path))
+ make_dir_hier(path);
+ file = g_strconcat(path, G_DIR_SEPARATOR_S, MARK_FILE, NULL);
+ g_free(path);
+
+ return file;
+}
+
+static gboolean folder_build_tree(GNode *node, gpointer data)
+{
+ Folder *folder = FOLDER(data);
+ FolderItem *item;
+ XMLNode *xmlnode;
+ GList *list;
+ SpecialFolderItemType stype = F_NORMAL;
+ const gchar *name = NULL;
+ const gchar *path = NULL;
+ PrefsAccount *account = NULL;
+ gboolean no_sub = FALSE, no_select = FALSE, collapsed = FALSE,
+ threaded = TRUE, ac_apply_sub = FALSE;
+ FolderSortKey sort_key = SORT_BY_NONE;
+ FolderSortType sort_type = SORT_ASCENDING;
+ gint new = 0, unread = 0, total = 0;
+ time_t mtime = 0;
+ gboolean use_auto_to_on_reply = FALSE;
+ gchar *auto_to = NULL, *auto_cc = NULL, *auto_bcc = NULL,
+ *auto_replyto = NULL;
+ gboolean trim_summary_subject = FALSE, trim_compose_subject = FALSE;
+
+ g_return_val_if_fail(node->data != NULL, FALSE);
+ if (!node->parent) return FALSE;
+
+ xmlnode = node->data;
+ if (strcmp2(xmlnode->tag->tag, "folderitem") != 0) {
+ g_warning("tag name != \"folderitem\"\n");
+ return FALSE;
+ }
+
+ list = xmlnode->tag->attr;
+ for (; list != NULL; list = list->next) {
+ XMLAttr *attr = list->data;
+
+ if (!attr || !attr->name || !attr->value) continue;
+ if (!strcmp(attr->name, "type")) {
+ if (!strcasecmp(attr->value, "normal"))
+ stype = F_NORMAL;
+ else if (!strcasecmp(attr->value, "inbox"))
+ stype = F_INBOX;
+ else if (!strcasecmp(attr->value, "outbox"))
+ stype = F_OUTBOX;
+ else if (!strcasecmp(attr->value, "draft"))
+ stype = F_DRAFT;
+ else if (!strcasecmp(attr->value, "queue"))
+ stype = F_QUEUE;
+ else if (!strcasecmp(attr->value, "trash"))
+ stype = F_TRASH;
+ } else if (!strcmp(attr->name, "name"))
+ name = attr->value;
+ else if (!strcmp(attr->name, "path"))
+ path = attr->value;
+ else if (!strcmp(attr->name, "mtime"))
+ mtime = strtoul(attr->value, NULL, 10);
+ else if (!strcmp(attr->name, "new"))
+ new = atoi(attr->value);
+ else if (!strcmp(attr->name, "unread"))
+ unread = atoi(attr->value);
+ else if (!strcmp(attr->name, "total"))
+ total = atoi(attr->value);
+ else if (!strcmp(attr->name, "no_sub"))
+ no_sub = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "no_select"))
+ no_select = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "collapsed"))
+ collapsed = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "threaded"))
+ threaded = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "sort_key")) {
+ if (!strcmp(attr->value, "none"))
+ sort_key = SORT_BY_NONE;
+ else if (!strcmp(attr->value, "number"))
+ sort_key = SORT_BY_NUMBER;
+ else if (!strcmp(attr->value, "size"))
+ sort_key = SORT_BY_SIZE;
+ else if (!strcmp(attr->value, "date"))
+ sort_key = SORT_BY_DATE;
+ else if (!strcmp(attr->value, "from"))
+ sort_key = SORT_BY_FROM;
+ else if (!strcmp(attr->value, "subject"))
+ sort_key = SORT_BY_SUBJECT;
+ else if (!strcmp(attr->value, "score"))
+ sort_key = SORT_BY_SCORE;
+ else if (!strcmp(attr->value, "label"))
+ sort_key = SORT_BY_LABEL;
+ else if (!strcmp(attr->value, "mark"))
+ sort_key = SORT_BY_MARK;
+ else if (!strcmp(attr->value, "unread"))
+ sort_key = SORT_BY_UNREAD;
+ else if (!strcmp(attr->value, "mime"))
+ sort_key = SORT_BY_MIME;
+ else if (!strcmp(attr->value, "to"))
+ sort_key = SORT_BY_TO;
+ } else if (!strcmp(attr->name, "sort_type")) {
+ if (!strcmp(attr->value, "ascending"))
+ sort_type = SORT_ASCENDING;
+ else
+ sort_type = SORT_DESCENDING;
+ } else if (!strcmp(attr->name, "account_id")) {
+ account = account_find_from_id(atoi(attr->value));
+ if (!account) g_warning("account_id: %s not found\n",
+ attr->value);
+ } else if (!strcmp(attr->name, "account_apply_sub"))
+ ac_apply_sub = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "to"))
+ auto_to = g_strdup(attr->value);
+ else if (!strcmp(attr->name, "use_auto_to_on_reply"))
+ use_auto_to_on_reply =
+ *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "cc"))
+ auto_cc = g_strdup(attr->value);
+ else if (!strcmp(attr->name, "bcc"))
+ auto_bcc = g_strdup(attr->value);
+ else if (!strcmp(attr->name, "replyto"))
+ auto_replyto = g_strdup(attr->value);
+ else if (!strcmp(attr->name, "trim_summary_subject")) {
+ trim_summary_subject =
+ *attr->value == '1' ? TRUE : FALSE;
+ } else if (!strcmp(attr->name, "trim_compose_subject")) {
+ trim_compose_subject =
+ *attr->value = '1' ? TRUE : FALSE;
+ }
+ }
+
+ item = folder_item_new(name, path);
+ item->stype = stype;
+ item->mtime = mtime;
+ item->new = new;
+ item->unread = unread;
+ item->total = total;
+ item->no_sub = no_sub;
+ item->no_select = no_select;
+ item->collapsed = collapsed;
+ item->threaded = threaded;
+ item->sort_key = sort_key;
+ item->sort_type = sort_type;
+ item->node = node;
+ item->parent = FOLDER_ITEM(node->parent->data);
+ item->folder = folder;
+ switch (stype) {
+ case F_INBOX: folder->inbox = item; break;
+ case F_OUTBOX: folder->outbox = item; break;
+ case F_DRAFT: folder->draft = item; break;
+ case F_QUEUE: folder->queue = item; break;
+ case F_TRASH: folder->trash = item; break;
+ default: break;
+ }
+ item->account = account;
+ item->ac_apply_sub = ac_apply_sub;
+ item->auto_to = auto_to;
+ item->use_auto_to_on_reply = use_auto_to_on_reply;
+ item->auto_cc = auto_cc;
+ item->auto_bcc = auto_bcc;
+ item->auto_replyto = auto_replyto;
+ item->trim_summary_subject = trim_summary_subject;
+ item->trim_compose_subject = trim_compose_subject;
+ node->data = item;
+ xml_free_node(xmlnode);
+
+ return FALSE;
+}
+
+static gboolean folder_read_folder_func(GNode *node, gpointer data)
+{
+ Folder *folder;
+ FolderItem *item;
+ XMLNode *xmlnode;
+ GList *list;
+ FolderType type = F_UNKNOWN;
+ const gchar *name = NULL;
+ const gchar *path = NULL;
+ PrefsAccount *account = NULL;
+ gboolean collapsed = FALSE, threaded = TRUE, ac_apply_sub = FALSE;
+
+ if (g_node_depth(node) != 2) return FALSE;
+ g_return_val_if_fail(node->data != NULL, FALSE);
+
+ xmlnode = node->data;
+ if (strcmp2(xmlnode->tag->tag, "folder") != 0) {
+ g_warning("tag name != \"folder\"\n");
+ return TRUE;
+ }
+ g_node_unlink(node);
+ list = xmlnode->tag->attr;
+ for (; list != NULL; list = list->next) {
+ XMLAttr *attr = list->data;
+
+ if (!attr || !attr->name || !attr->value) continue;
+ if (!strcmp(attr->name, "type")) {
+ if (!strcasecmp(attr->value, "mh"))
+ type = F_MH;
+ else if (!strcasecmp(attr->value, "mbox"))
+ type = F_MBOX;
+ else if (!strcasecmp(attr->value, "maildir"))
+ type = F_MAILDIR;
+ else if (!strcasecmp(attr->value, "imap"))
+ type = F_IMAP;
+ else if (!strcasecmp(attr->value, "news"))
+ type = F_NEWS;
+ } else if (!strcmp(attr->name, "name"))
+ name = attr->value;
+ else if (!strcmp(attr->name, "path"))
+ path = attr->value;
+ else if (!strcmp(attr->name, "collapsed"))
+ collapsed = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "threaded"))
+ threaded = *attr->value == '1' ? TRUE : FALSE;
+ else if (!strcmp(attr->name, "account_id")) {
+ account = account_find_from_id(atoi(attr->value));
+ if (!account) g_warning("account_id: %s not found\n",
+ attr->value);
+ } else if (!strcmp(attr->name, "account_apply_sub"))
+ ac_apply_sub = *attr->value == '1' ? TRUE : FALSE;
+ }
+
+ folder = folder_new(type, name, path);
+ g_return_val_if_fail(folder != NULL, FALSE);
+ folder->account = account;
+ if (account && (type == F_IMAP || type == F_NEWS))
+ account->folder = REMOTE_FOLDER(folder);
+ item = FOLDER_ITEM(folder->node->data);
+ node->data = item;
+ item->node = node;
+ g_node_destroy(folder->node);
+ folder->node = node;
+ folder_add(folder);
+ item->collapsed = collapsed;
+ item->threaded = threaded;
+ item->account = account;
+ item->ac_apply_sub = ac_apply_sub;
+
+ g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folder_build_tree, folder);
+
+ return FALSE;
+}
+
+static gchar *folder_get_list_path(void)
+{
+ static gchar *filename = NULL;
+
+ if (!filename)
+ filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ FOLDER_LIST, NULL);
+
+ return filename;
+}
+
+#define PUT_ESCAPE_STR(fp, attr, str) \
+{ \
+ fputs(" " attr "=\"", fp); \
+ xml_file_put_escape_str(fp, str); \
+ fputs("\"", fp); \
+}
+
+static void folder_write_list_recursive(GNode *node, gpointer data)
+{
+ FILE *fp = (FILE *)data;
+ FolderItem *item;
+ gint i, depth;
+ static gchar *folder_type_str[] = {"mh", "mbox", "maildir", "imap",
+ "news", "unknown"};
+ static gchar *folder_item_stype_str[] = {"normal", "inbox", "outbox",
+ "draft", "queue", "trash"};
+ static gchar *sort_key_str[] = {"none", "number", "size", "date",
+ "from", "subject", "score", "label",
+ "mark", "unread", "mime", "to"};
+
+ g_return_if_fail(node != NULL);
+ g_return_if_fail(fp != NULL);
+
+ item = FOLDER_ITEM(node->data);
+ g_return_if_fail(item != NULL);
+
+ depth = g_node_depth(node);
+ for (i = 0; i < depth; i++)
+ fputs(" ", fp);
+ if (depth == 1) {
+ Folder *folder = item->folder;
+
+ fprintf(fp, "<folder type=\"%s\"",
+ folder_type_str[FOLDER_TYPE(folder)]);
+ if (folder->name)
+ PUT_ESCAPE_STR(fp, "name", folder->name);
+ if (FOLDER_TYPE(folder) == F_MH)
+ PUT_ESCAPE_STR(fp, "path",
+ LOCAL_FOLDER(folder)->rootpath);
+ if (item->collapsed && node->children)
+ fputs(" collapsed=\"1\"", fp);
+ if (folder->account)
+ fprintf(fp, " account_id=\"%d\"",
+ folder->account->account_id);
+ if (item->ac_apply_sub)
+ fputs(" account_apply_sub=\"1\"", fp);
+ } else {
+ fprintf(fp, "<folderitem type=\"%s\"",
+ folder_item_stype_str[item->stype]);
+ if (item->name)
+ PUT_ESCAPE_STR(fp, "name", item->name);
+ if (item->path)
+ PUT_ESCAPE_STR(fp, "path", item->path);
+
+ if (item->no_sub)
+ fputs(" no_sub=\"1\"", fp);
+ if (item->no_select)
+ fputs(" no_select=\"1\"", fp);
+ if (item->collapsed && node->children)
+ fputs(" collapsed=\"1\"", fp);
+ if (item->threaded)
+ fputs(" threaded=\"1\"", fp);
+ else
+ fputs(" threaded=\"0\"", fp);
+
+ if (item->sort_key != SORT_BY_NONE) {
+ fprintf(fp, " sort_key=\"%s\"",
+ sort_key_str[item->sort_key]);
+ if (item->sort_type == SORT_ASCENDING)
+ fprintf(fp, " sort_type=\"ascending\"");
+ else
+ fprintf(fp, " sort_type=\"descending\"");
+ }
+
+ fprintf(fp,
+ " mtime=\"%lu\" new=\"%d\" unread=\"%d\" total=\"%d\"",
+ item->mtime, item->new, item->unread, item->total);
+
+ if (item->account)
+ fprintf(fp, " account_id=\"%d\"",
+ item->account->account_id);
+ if (item->ac_apply_sub)
+ fputs(" account_apply_sub=\"1\"", fp);
+
+ if (item->auto_to)
+ PUT_ESCAPE_STR(fp, "to", item->auto_to);
+ if (item->use_auto_to_on_reply)
+ fputs(" use_auto_to_on_reply=\"1\"", fp);
+ if (item->auto_cc)
+ PUT_ESCAPE_STR(fp, "cc", item->auto_cc);
+ if (item->auto_bcc)
+ PUT_ESCAPE_STR(fp, "bcc", item->auto_bcc);
+ if (item->auto_replyto)
+ PUT_ESCAPE_STR(fp, "replyto", item->auto_replyto);
+
+ if (item->trim_summary_subject)
+ fputs(" trim_summary_subject=\"1\"", fp);
+ if (item->trim_compose_subject)
+ fputs(" trim_compose_subject=\"1\"", fp);
+ }
+
+ if (node->children) {
+ GNode *child;
+ fputs(">\n", fp);
+
+ child = node->children;
+ while (child) {
+ GNode *cur;
+
+ cur = child;
+ child = cur->next;
+ folder_write_list_recursive(cur, data);
+ }
+
+ for (i = 0; i < depth; i++)
+ fputs(" ", fp);
+ fprintf(fp, "</%s>\n", depth == 1 ? "folder" : "folderitem");
+ } else
+ fputs(" />\n", fp);
+}
+
+#undef PUT_ESCAPE_STR
diff --git a/src/folder.h b/src/folder.h
new file mode 100644
index 00000000..3537e6a1
--- /dev/null
+++ b/src/folder.h
@@ -0,0 +1,386 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __FOLDER_H__
+#define __FOLDER_H__
+
+#include <glib.h>
+#include <time.h>
+
+typedef struct _Folder Folder;
+typedef struct _FolderClass FolderClass;
+
+typedef struct _LocalFolder LocalFolder;
+typedef struct _RemoteFolder RemoteFolder;
+#if 0
+typedef struct _MboxFolder MboxFolder;
+typedef struct _MaildirFolder MaildirFolder;
+#endif
+
+typedef struct _FolderItem FolderItem;
+
+#define FOLDER(obj) ((Folder *)obj)
+#define FOLDER_CLASS(obj) (FOLDER(obj)->klass)
+#define FOLDER_TYPE(obj) (FOLDER(obj)->klass->type)
+
+#define LOCAL_FOLDER(obj) ((LocalFolder *)obj)
+#define REMOTE_FOLDER(obj) ((RemoteFolder *)obj)
+
+#define FOLDER_IS_LOCAL(obj) (FOLDER_TYPE(obj) == F_MH || \
+ FOLDER_TYPE(obj) == F_MBOX || \
+ FOLDER_TYPE(obj) == F_MAILDIR)
+
+#if 0
+#define MBOX_FOLDER(obj) ((MboxFolder *)obj)
+#define MAILDIR_FOLDER(obj) ((MaildirFolder *)obj)
+#endif
+
+#define FOLDER_ITEM(obj) ((FolderItem *)obj)
+
+#define FOLDER_ITEM_CAN_ADD(obj) \
+ ((obj) && FOLDER_ITEM(obj)->folder && \
+ FOLDER_ITEM(obj)->path && \
+ (FOLDER_IS_LOCAL(FOLDER_ITEM(obj)->folder) || \
+ FOLDER_TYPE(FOLDER_ITEM(obj)->folder) == F_IMAP) && \
+ !FOLDER_ITEM(obj)->no_select)
+
+typedef enum
+{
+ F_MH,
+ F_MBOX,
+ F_MAILDIR,
+ F_IMAP,
+ F_NEWS,
+ F_UNKNOWN
+} FolderType;
+
+typedef enum
+{
+ F_NORMAL,
+ F_INBOX,
+ F_OUTBOX,
+ F_DRAFT,
+ F_QUEUE,
+ F_TRASH
+} SpecialFolderItemType;
+
+typedef enum
+{
+ SORT_BY_NONE,
+ SORT_BY_NUMBER,
+ SORT_BY_SIZE,
+ SORT_BY_DATE,
+ SORT_BY_FROM,
+ SORT_BY_SUBJECT,
+ SORT_BY_SCORE,
+ SORT_BY_LABEL,
+ SORT_BY_MARK,
+ SORT_BY_UNREAD,
+ SORT_BY_MIME,
+ SORT_BY_TO
+} FolderSortKey;
+
+typedef enum
+{
+ SORT_ASCENDING,
+ SORT_DESCENDING
+} FolderSortType;
+
+typedef void (*FolderUIFunc) (Folder *folder,
+ FolderItem *item,
+ gpointer data);
+typedef void (*FolderDestroyNotify) (Folder *folder,
+ FolderItem *item,
+ gpointer data);
+
+#include "prefs_account.h"
+#include "session.h"
+#include "procmsg.h"
+
+struct _Folder
+{
+ FolderClass *klass;
+
+ gchar *name;
+ PrefsAccount *account;
+
+ FolderItem *inbox;
+ FolderItem *outbox;
+ FolderItem *draft;
+ FolderItem *queue;
+ FolderItem *trash;
+
+ FolderUIFunc ui_func;
+ gpointer ui_func_data;
+
+ GNode *node;
+
+ gpointer data;
+};
+
+struct _FolderClass
+{
+ FolderType type;
+
+ /* virtual functions */
+ Folder * (*folder_new) (const gchar *name,
+ const gchar *path);
+ void (*destroy) (Folder *folder);
+
+ gint (*scan_tree) (Folder *folder);
+ gint (*create_tree) (Folder *folder);
+
+ GSList * (*get_msg_list) (Folder *folder,
+ FolderItem *item,
+ gboolean use_cache);
+ /* return value is locale charset */
+ gchar * (*fetch_msg) (Folder *folder,
+ FolderItem *item,
+ gint num);
+ MsgInfo * (*get_msginfo) (Folder *folder,
+ FolderItem *item,
+ gint num);
+ gint (*add_msg) (Folder *folder,
+ FolderItem *dest,
+ const gchar *file,
+ MsgFlags *flags,
+ gboolean remove_source);
+ gint (*add_msgs) (Folder *folder,
+ FolderItem *dest,
+ GSList *file_list,
+ gboolean remove_source,
+ gint *first);
+ gint (*move_msg) (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+ gint (*move_msgs) (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+ gint (*copy_msg) (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+ gint (*copy_msgs) (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+ gint (*remove_msg) (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+ gint (*remove_msgs) (Folder *folder,
+ FolderItem *item,
+ GSList *msglist);
+ gint (*remove_all_msg) (Folder *folder,
+ FolderItem *item);
+ gboolean (*is_msg_changed) (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+ gint (*close) (Folder *folder,
+ FolderItem *item);
+ gint (*scan) (Folder *folder,
+ FolderItem *item);
+
+ FolderItem * (*create_folder) (Folder *folder,
+ FolderItem *parent,
+ const gchar *name);
+ gint (*rename_folder) (Folder *folder,
+ FolderItem *item,
+ const gchar *name);
+ gint (*remove_folder) (Folder *folder,
+ FolderItem *item);
+};
+
+struct _LocalFolder
+{
+ Folder folder;
+
+ gchar *rootpath;
+};
+
+struct _RemoteFolder
+{
+ Folder folder;
+
+ Session *session;
+};
+
+#if 0
+struct _MboxFolder
+{
+ LocalFolder lfolder;
+};
+
+struct _MaildirFolder
+{
+ LocalFolder lfolder;
+};
+#endif
+
+struct _FolderItem
+{
+ SpecialFolderItemType stype;
+
+ gchar *name; /* UTF-8 */
+ gchar *path; /* UTF-8 */
+
+ time_t mtime;
+
+ gint new;
+ gint unread;
+ gint total;
+ gint unmarked_num;
+
+ gint last_num;
+
+ /* special flags */
+ guint no_sub : 1; /* no child allowed? */
+ guint no_select : 1; /* not selectable? */
+ guint collapsed : 1; /* collapsed item */
+ guint threaded : 1; /* threaded folder view */
+
+ guint opened : 1; /* opened by summary view */
+ guint updated : 1; /* folderview should be updated */
+
+ FolderSortKey sort_key;
+ FolderSortType sort_type;
+
+ GNode *node;
+
+ FolderItem *parent;
+
+ Folder *folder;
+
+ PrefsAccount *account;
+
+ gboolean ac_apply_sub;
+
+ gchar *auto_to;
+ gboolean use_auto_to_on_reply;
+ gchar *auto_cc;
+ gchar *auto_bcc;
+ gchar *auto_replyto;
+
+ gboolean trim_summary_subject;
+ gboolean trim_compose_subject;
+
+ GSList *mark_queue;
+
+ gpointer data;
+};
+
+Folder *folder_new (FolderType type,
+ const gchar *name,
+ const gchar *path);
+void folder_local_folder_init (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+void folder_remote_folder_init (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+
+void folder_destroy (Folder *folder);
+void folder_local_folder_destroy (LocalFolder *lfolder);
+void folder_remote_folder_destroy(RemoteFolder *rfolder);
+
+FolderItem *folder_item_new (const gchar *name,
+ const gchar *path);
+void folder_item_append (FolderItem *parent,
+ FolderItem *item);
+void folder_item_remove (FolderItem *item);
+void folder_item_remove_children (FolderItem *item);
+void folder_item_destroy (FolderItem *item);
+
+void folder_set_ui_func (Folder *folder,
+ FolderUIFunc func,
+ gpointer data);
+void folder_set_name (Folder *folder,
+ const gchar *name);
+void folder_tree_destroy (Folder *folder);
+
+void folder_add (Folder *folder);
+
+GList *folder_get_list (void);
+gint folder_read_list (void);
+void folder_write_list (void);
+
+gchar *folder_get_status (GPtrArray *folders,
+ gboolean full);
+
+Folder *folder_find_from_path (const gchar *path);
+Folder *folder_find_from_name (const gchar *name,
+ FolderType type);
+FolderItem *folder_find_item_from_path (const gchar *path);
+FolderItem *folder_find_child_item_by_name (FolderItem *item,
+ const gchar *name);
+gchar *folder_get_identifier (Folder *folder);
+gchar *folder_item_get_identifier (FolderItem *item);
+FolderItem *folder_find_item_from_identifier (const gchar *identifier);
+
+Folder *folder_get_default_folder (void);
+FolderItem *folder_get_default_inbox (void);
+FolderItem *folder_get_default_outbox (void);
+FolderItem *folder_get_default_draft (void);
+FolderItem *folder_get_default_queue (void);
+FolderItem *folder_get_default_trash (void);
+
+void folder_set_missing_folders (void);
+void folder_unref_account_all (PrefsAccount *account);
+
+/* return value is locale encoded file name */
+gchar *folder_get_path (Folder *folder);
+gchar *folder_item_get_path (FolderItem *item);
+
+gint folder_item_scan (FolderItem *item);
+void folder_item_scan_foreach (GHashTable *table);
+GSList *folder_item_get_msg_list (FolderItem *item,
+ gboolean use_cache);
+/* return value is locale charset */
+gchar *folder_item_fetch_msg (FolderItem *item,
+ gint num);
+gint folder_item_fetch_all_msg (FolderItem *item);
+MsgInfo *folder_item_get_msginfo (FolderItem *item,
+ gint num);
+gint folder_item_add_msg (FolderItem *dest,
+ const gchar *file,
+ MsgFlags *flags,
+ gboolean remove_source);
+gint folder_item_add_msgs (FolderItem *dest,
+ GSList *file_list,
+ gboolean remove_source,
+ gint *first);
+gint folder_item_move_msg (FolderItem *dest,
+ MsgInfo *msginfo);
+gint folder_item_move_msgs (FolderItem *dest,
+ GSList *msglist);
+gint folder_item_copy_msg (FolderItem *dest,
+ MsgInfo *msginfo);
+gint folder_item_copy_msgs (FolderItem *dest,
+ GSList *msglist);
+gint folder_item_remove_msg (FolderItem *item,
+ MsgInfo *msginfo);
+gint folder_item_remove_msgs (FolderItem *item,
+ GSList *msglist);
+gint folder_item_remove_all_msg (FolderItem *item);
+gboolean folder_item_is_msg_changed (FolderItem *item,
+ MsgInfo *msginfo);
+/* return value is locale chaset */
+gchar *folder_item_get_cache_file (FolderItem *item);
+gchar *folder_item_get_mark_file (FolderItem *item);
+
+gint folder_item_close (FolderItem *item);
+
+#endif /* __FOLDER_H__ */
diff --git a/src/foldersel.c b/src/foldersel.c
new file mode 100644
index 00000000..7ca6afbf
--- /dev/null
+++ b/src/foldersel.c
@@ -0,0 +1,493 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtksignal.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "foldersel.h"
+#include "alertpanel.h"
+#include "manage_window.h"
+#include "folderview.h"
+#include "inputdialog.h"
+#include "folder.h"
+
+static GdkPixmap *folderxpm;
+static GdkBitmap *folderxpmmask;
+static GdkPixmap *folderopenxpm;
+static GdkBitmap *folderopenxpmmask;
+static GdkPixmap *foldernoselectxpm;
+static GdkBitmap *foldernoselectxpmmask;
+
+static GtkWidget *window;
+static GtkWidget *ctree;
+static GtkWidget *entry;
+static GtkWidget *ok_button;
+static GtkWidget *cancel_button;
+static GtkWidget *new_button;
+
+static FolderItem *folder_item;
+static FolderItem *selected_item;
+
+static gboolean cancelled;
+static gboolean finished;
+
+static void foldersel_create (void);
+static void foldersel_init (void);
+static void foldersel_set_tree (Folder *cur_folder,
+ FolderSelectionType type);
+
+static void foldersel_selected (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event,
+ gpointer data);
+
+static void foldersel_ok (GtkButton *button,
+ gpointer data);
+static void foldersel_cancel (GtkButton *button,
+ gpointer data);
+static void foldersel_new_folder(GtkButton *button,
+ gpointer data);
+static void foldersel_activated (void);
+static gint delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+static gint foldersel_clist_compare (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+
+FolderItem *foldersel_folder_sel(Folder *cur_folder,
+ FolderSelectionType type,
+ const gchar *default_folder)
+{
+ GtkCTreeNode *node;
+
+ selected_item = NULL;
+
+ if (!window) {
+ foldersel_create();
+ foldersel_init();
+ } else
+ gtk_widget_show(window);
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ foldersel_set_tree(cur_folder, type);
+
+ if (folder_item) {
+ node = gtk_ctree_find_by_row_data
+ (GTK_CTREE(ctree), NULL, folder_item);
+ if (node) {
+ gint row;
+
+ row = gtkut_ctree_get_nth_from_node
+ (GTK_CTREE(ctree), node);
+ gtk_clist_select_row(GTK_CLIST(ctree), row, -1);
+ gtkut_clist_set_focus_row(GTK_CLIST(ctree), row);
+ gtk_ctree_node_moveto(GTK_CTREE(ctree), node, -1,
+ 0.5, 0);
+ }
+ }
+ gtk_widget_grab_focus(ok_button);
+ gtk_widget_grab_focus(ctree);
+
+ cancelled = finished = FALSE;
+
+ while (finished == FALSE)
+ gtk_main_iteration();
+
+ gtk_widget_hide(window);
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ gtk_clist_clear(GTK_CLIST(ctree));
+
+ if (!cancelled &&
+ selected_item && selected_item->path && !selected_item->no_select) {
+ folder_item = selected_item;
+ return folder_item;
+ } else
+ return NULL;
+}
+
+static void foldersel_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Select folder"));
+ gtk_container_set_border_width(GTK_CONTAINER(window), 4);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_wmclass
+ (GTK_WINDOW(window), "folder_selection", "Sylpheed");
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_set_size_request(scrolledwin, 300, 360);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+
+ ctree = gtk_ctree_new(1, 0);
+ gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_CLIST(ctree)->vadjustment);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_SQUARE);
+ gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT);
+ gtk_clist_set_compare_func(GTK_CLIST(ctree), foldersel_clist_compare);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[0].button,
+ GTK_CAN_FOCUS);
+ /* g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(foldersel_selected), NULL); */
+ g_signal_connect(G_OBJECT(ctree), "select_row",
+ G_CALLBACK(foldersel_selected), NULL);
+
+ entry = gtk_entry_new();
+ gtk_entry_set_editable(GTK_ENTRY(entry), FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(entry), "activate",
+ G_CALLBACK(foldersel_activated), NULL);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_button, _("OK"),
+ &cancel_button, _("Cancel"),
+ &new_button, _("New folder"));
+
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(foldersel_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(foldersel_cancel), NULL);
+ g_signal_connect(G_OBJECT(new_button), "clicked",
+ G_CALLBACK(foldersel_new_folder), NULL);
+
+ gtk_widget_show_all(window);
+}
+
+static void foldersel_init(void)
+{
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_CLOSE,
+ &folderxpm, &folderxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_OPEN,
+ &folderopenxpm, &folderopenxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_NOSELECT,
+ &foldernoselectxpm, &foldernoselectxpmmask);
+}
+
+static gboolean foldersel_gnode_func(GtkCTree *ctree, guint depth,
+ GNode *gnode, GtkCTreeNode *cnode,
+ gpointer data)
+{
+ FolderItem *item = FOLDER_ITEM(gnode->data);
+ gchar *name;
+ GdkPixmap *xpm, *openxpm;
+ GdkBitmap *mask, *openmask;
+
+ switch (item->stype) {
+ case F_INBOX:
+ name = _("Inbox");
+ break;
+ case F_OUTBOX:
+ name = _("Sent");
+ break;
+ case F_QUEUE:
+ name = _("Queue");
+ break;
+ case F_TRASH:
+ name = _("Trash");
+ break;
+ case F_DRAFT:
+ name = _("Drafts");
+ break;
+ default:
+ name = item->name;
+
+ if (!item->parent) {
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ Xstrcat_a(name, name, " (MH)", ); break;
+ case F_IMAP:
+ Xstrcat_a(name, name, " (IMAP4)", ); break;
+ case F_NEWS:
+ Xstrcat_a(name, name, " (News)", ); break;
+ default:
+ break;
+ }
+ }
+ }
+
+ if (item->no_select) {
+ GdkColor color_noselect = {0, COLOR_DIM, COLOR_DIM, COLOR_DIM};
+ xpm = openxpm = foldernoselectxpm;
+ mask = openmask = foldernoselectxpmmask;
+ gtk_ctree_node_set_foreground(ctree, cnode, &color_noselect);
+ } else {
+ xpm = folderxpm;
+ mask = folderxpmmask;
+ openxpm = folderopenxpm;
+ openmask = folderopenxpmmask;
+ }
+
+ gtk_ctree_node_set_row_data(ctree, cnode, item);
+ gtk_ctree_set_node_info(ctree, cnode, name,
+ FOLDER_SPACING,
+ xpm, mask, openxpm, openmask,
+ FALSE, FALSE);
+
+ return TRUE;
+}
+
+static void foldersel_expand_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ if (GTK_CTREE_ROW(node)->children)
+ gtk_ctree_expand(ctree, node);
+}
+
+#define SET_SPECIAL_FOLDER(item) \
+{ \
+ if (item) { \
+ GtkCTreeNode *node_, *parent, *sibling; \
+ \
+ node_ = gtk_ctree_find_by_row_data \
+ (GTK_CTREE(ctree), node, item); \
+ if (!node_) \
+ g_warning("%s not found.\n", item->path); \
+ else { \
+ parent = GTK_CTREE_ROW(node_)->parent; \
+ if (prev && parent == GTK_CTREE_ROW(prev)->parent) \
+ sibling = GTK_CTREE_ROW(prev)->sibling; \
+ else \
+ sibling = GTK_CTREE_ROW(parent)->children; \
+ if (node_ != sibling) \
+ gtk_ctree_move(GTK_CTREE(ctree), \
+ node_, parent, sibling); \
+ } \
+ \
+ prev = node_; \
+ } \
+}
+
+static void foldersel_set_tree(Folder *cur_folder, FolderSelectionType type)
+{
+ Folder *folder;
+ GtkCTreeNode *node;
+ GList *list;
+
+ list = folder_get_list();
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ for (; list != NULL; list = list->next) {
+ GtkCTreeNode *prev = NULL;
+
+ folder = FOLDER(list->data);
+ g_return_if_fail(folder != NULL);
+
+ if (type != FOLDER_SEL_ALL) {
+ if (FOLDER_TYPE(folder) == F_NEWS)
+ continue;
+ }
+
+ node = gtk_ctree_insert_gnode(GTK_CTREE(ctree), NULL, NULL,
+ folder->node,
+ foldersel_gnode_func,
+ NULL);
+ gtk_ctree_sort_recursive(GTK_CTREE(ctree), node);
+ SET_SPECIAL_FOLDER(folder->inbox);
+ SET_SPECIAL_FOLDER(folder->outbox);
+ SET_SPECIAL_FOLDER(folder->draft);
+ SET_SPECIAL_FOLDER(folder->queue);
+ SET_SPECIAL_FOLDER(folder->trash);
+ gtk_ctree_pre_recursive(GTK_CTREE(ctree), node,
+ foldersel_expand_func,
+ NULL);
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+}
+
+static void foldersel_selected(GtkCList *clist, gint row, gint column,
+ GdkEvent *event, gpointer data)
+{
+ GdkEventButton *ev = (GdkEventButton *)event;
+
+ selected_item = gtk_clist_get_row_data(clist, row);
+ if (selected_item && selected_item->path && !selected_item->no_select) {
+ gchar *id;
+ id = folder_item_get_identifier(selected_item);
+ gtk_entry_set_text(GTK_ENTRY(entry), id);
+ g_free(id);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+
+ if (ev && GDK_2BUTTON_PRESS == ev->type)
+ gtk_button_clicked(GTK_BUTTON(ok_button));
+}
+
+static void foldersel_ok(GtkButton *button, gpointer data)
+{
+ finished = TRUE;
+}
+
+static void foldersel_cancel(GtkButton *button, gpointer data)
+{
+ cancelled = TRUE;
+ finished = TRUE;
+}
+
+static void foldersel_new_folder(GtkButton *button, gpointer data)
+{
+ FolderItem *new_item;
+ gchar *new_folder;
+ gchar *disp_name;
+ gchar *p;
+ gchar *text[1] = {NULL};
+ GtkCTreeNode *selected_node;
+ GtkCTreeNode *node;
+ gint row;
+
+ if (!selected_item || FOLDER_TYPE(selected_item->folder) == F_NEWS)
+ return;
+ selected_node = gtk_ctree_find_by_row_data(GTK_CTREE(ctree), NULL,
+ selected_item);
+ if (!selected_node) return;
+
+ new_folder = input_dialog(_("New folder"),
+ _("Input the name of new folder:"),
+ _("NewFolder"));
+ if (!new_folder) return;
+ AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
+
+ p = strchr(new_folder, G_DIR_SEPARATOR);
+ if ((p && FOLDER_TYPE(selected_item->folder) != F_IMAP) ||
+ (p && FOLDER_TYPE(selected_item->folder) == F_IMAP &&
+ *(p + 1) != '\0')) {
+ alertpanel_error(_("`%c' can't be included in folder name."),
+ G_DIR_SEPARATOR);
+ return;
+ }
+
+ disp_name = trim_string(new_folder, 32);
+ AUTORELEASE_STR(disp_name, {g_free(disp_name); return;});
+
+ /* find whether the directory already exists */
+ if (folder_find_child_item_by_name(selected_item, new_folder)) {
+ alertpanel_error(_("The folder `%s' already exists."),
+ disp_name);
+ return;
+ }
+
+ new_item = selected_item->folder->klass->create_folder
+ (selected_item->folder, selected_item, new_folder);
+ if (!new_item) {
+ alertpanel_error(_("Can't create the folder `%s'."), disp_name);
+ return;
+ }
+
+ text[0] = new_item->name;
+ node = gtk_ctree_insert_node(GTK_CTREE(ctree), selected_node,
+ NULL, text, FOLDER_SPACING,
+ folderxpm, folderxpmmask,
+ folderopenxpm, folderopenxpmmask,
+ FALSE, FALSE);
+ gtk_ctree_expand(GTK_CTREE(ctree), selected_node);
+ gtk_ctree_node_set_row_data(GTK_CTREE(ctree), node, new_item);
+ gtk_ctree_sort_recursive(GTK_CTREE(ctree), selected_node);
+
+ row = gtkut_ctree_get_nth_from_node(GTK_CTREE(ctree), node);
+ gtk_clist_select_row(GTK_CLIST(ctree), row, -1);
+ gtkut_clist_set_focus_row(GTK_CLIST(ctree), row);
+ gtk_ctree_node_moveto(GTK_CTREE(ctree), node, -1, 0.5, 0);
+
+ folderview_append_item(new_item);
+ folder_write_list();
+}
+
+static void foldersel_activated(void)
+{
+ gtk_button_clicked(GTK_BUTTON(ok_button));
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ foldersel_cancel(NULL, NULL);
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ foldersel_cancel(NULL, NULL);
+ return FALSE;
+}
+
+static gint foldersel_clist_compare(GtkCList *clist,
+ gconstpointer ptr1, gconstpointer ptr2)
+{
+ FolderItem *item1 = ((GtkCListRow *)ptr1)->data;
+ FolderItem *item2 = ((GtkCListRow *)ptr2)->data;
+
+ if (!item1->name)
+ return (item2->name != NULL);
+ if (!item2->name)
+ return -1;
+
+ return g_strcasecmp(item1->name, item2->name);
+}
diff --git a/src/foldersel.h b/src/foldersel.h
new file mode 100644
index 00000000..802bb50e
--- /dev/null
+++ b/src/foldersel.h
@@ -0,0 +1,39 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __FOLDERSEL_H__
+#define __FOLDERSEL_H__
+
+#include <glib.h>
+#include <gtk/gtkwindow.h>
+
+#include "folder.h"
+
+typedef enum
+{
+ FOLDER_SEL_ALL,
+ FOLDER_SEL_MOVE,
+ FOLDER_SEL_COPY
+} FolderSelectionType;
+
+FolderItem *foldersel_folder_sel(Folder *cur_folder,
+ FolderSelectionType type,
+ const gchar *default_folder);
+
+#endif /* __FOLDERSEL_H__ */
diff --git a/src/folderview.c b/src/folderview.c
new file mode 100644
index 00000000..56320c8f
--- /dev/null
+++ b/src/folderview.c
@@ -0,0 +1,2378 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtkstyle.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkstatusbar.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "main.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "summaryview.h"
+#include "summary_search.h"
+#include "inputdialog.h"
+#include "grouplistdialog.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+#include "menu.h"
+#include "stock_pixmap.h"
+#include "statusbar.h"
+#include "procmsg.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "prefs_filter.h"
+#include "prefs_folder_item.h"
+#include "account.h"
+#include "folder.h"
+#include "inc.h"
+
+typedef enum
+{
+ COL_FOLDER = 0,
+ COL_NEW = 1,
+ COL_UNREAD = 2,
+ COL_TOTAL = 3
+} FolderColumnPos;
+
+#define N_FOLDER_COLS 4
+#define COL_FOLDER_WIDTH 150
+#define COL_NUM_WIDTH 32
+
+#define STATUSBAR_PUSH(mainwin, str) \
+{ \
+ gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->folderview_cid, str); \
+ gtkut_widget_wait_for_draw(mainwin->hbox_stat); \
+}
+
+#define STATUSBAR_POP(mainwin) \
+{ \
+ gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->folderview_cid); \
+}
+
+static GList *folderview_list = NULL;
+
+static GtkStyle *bold_style;
+static GtkStyle *bold_color_style;
+
+static GdkPixmap *inboxxpm;
+static GdkBitmap *inboxxpmmask;
+static GdkPixmap *outboxxpm;
+static GdkBitmap *outboxxpmmask;
+static GdkPixmap *folderxpm;
+static GdkBitmap *folderxpmmask;
+static GdkPixmap *folderopenxpm;
+static GdkBitmap *folderopenxpmmask;
+static GdkPixmap *foldernoselectxpm;
+static GdkBitmap *foldernoselectxpmmask;
+static GdkPixmap *trashxpm;
+static GdkBitmap *trashxpmmask;
+
+static void folderview_select_node (FolderView *folderview,
+ GtkCTreeNode *node);
+static void folderview_set_folders (FolderView *folderview);
+static void folderview_sort_folders (FolderView *folderview,
+ GtkCTreeNode *root,
+ Folder *folder);
+static void folderview_append_folder (FolderView *folderview,
+ Folder *folder);
+static void folderview_update_node (FolderView *folderview,
+ GtkCTreeNode *node);
+
+static gint folderview_clist_compare (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+
+/* callback functions */
+static gboolean folderview_button_pressed (GtkWidget *ctree,
+ GdkEventButton *event,
+ FolderView *folderview);
+static gboolean folderview_button_released (GtkWidget *ctree,
+ GdkEventButton *event,
+ FolderView *folderview);
+
+static gboolean folderview_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ FolderView *folderview);
+static void folderview_selected (GtkCTree *ctree,
+ GtkCTreeNode *row,
+ gint column,
+ FolderView *folderview);
+static void folderview_tree_expanded (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ FolderView *folderview);
+static void folderview_tree_collapsed (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ FolderView *folderview);
+static void folderview_popup_close (GtkMenuShell *menu_shell,
+ FolderView *folderview);
+static void folderview_col_resized (GtkCList *clist,
+ gint column,
+ gint width,
+ FolderView *folderview);
+
+static void folderview_download_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_update_tree_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_new_folder_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_rename_folder_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_delete_folder_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_empty_trash_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_remove_mailbox_cb(FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_rm_imap_server_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_new_news_group_cb(FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_rm_news_group_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+static void folderview_rm_news_server_cb(FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_search_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static void folderview_property_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
+static gboolean folderview_drag_motion_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ FolderView *folderview);
+static void folderview_drag_leave_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ guint time,
+ FolderView *folderview);
+static void folderview_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ FolderView *folderview);
+
+static GtkItemFactoryEntry folderview_mail_popup_entries[] =
+{
+ {N_("/Create _new folder..."), NULL, folderview_new_folder_cb, 0, NULL},
+ {N_("/_Rename folder..."), NULL, folderview_rename_folder_cb, 0, NULL},
+ {N_("/_Delete folder"), NULL, folderview_delete_folder_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Empty _trash"), NULL, folderview_empty_trash_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Check for new messages"),
+ NULL, folderview_update_tree_cb, 0, NULL},
+ {N_("/R_ebuild folder tree"), NULL, folderview_update_tree_cb, 1, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Search messages..."), NULL, folderview_search_cb, 0, NULL},
+ {N_("/_Properties..."), NULL, folderview_property_cb, 0, NULL}
+};
+
+static GtkItemFactoryEntry folderview_imap_popup_entries[] =
+{
+ {N_("/Create _new folder..."), NULL, folderview_new_folder_cb, 0, NULL},
+ {N_("/_Rename folder..."), NULL, folderview_rename_folder_cb, 0, NULL},
+ {N_("/_Delete folder"), NULL, folderview_delete_folder_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Empty _trash"), NULL, folderview_empty_trash_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Down_load"), NULL, folderview_download_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Check for new messages"),
+ NULL, folderview_update_tree_cb, 0, NULL},
+ {N_("/R_ebuild folder tree"), NULL, folderview_update_tree_cb, 1, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Search messages..."), NULL, folderview_search_cb, 0, NULL},
+ {N_("/_Properties..."), NULL, folderview_property_cb, 0, NULL}
+};
+
+static GtkItemFactoryEntry folderview_news_popup_entries[] =
+{
+ {N_("/Su_bscribe to newsgroup..."),
+ NULL, folderview_new_news_group_cb, 0, NULL},
+ {N_("/_Remove newsgroup"), NULL, folderview_rm_news_group_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Down_load"), NULL, folderview_download_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Check for new messages"),
+ NULL, folderview_update_tree_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Search messages..."), NULL, folderview_search_cb, 0, NULL},
+ {N_("/_Properties..."), NULL, folderview_property_cb, 0, NULL}
+};
+
+
+FolderView *folderview_create(void)
+{
+ FolderView *folderview;
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ gchar *titles[N_FOLDER_COLS];
+ GtkWidget *mail_popup;
+ GtkWidget *news_popup;
+ GtkWidget *imap_popup;
+ GtkItemFactory *mail_factory;
+ GtkItemFactory *news_factory;
+ GtkItemFactory *imap_factory;
+ gint n_entries;
+ gint i;
+
+ debug_print(_("Creating folder view...\n"));
+ folderview = g_new0(FolderView, 1);
+
+ titles[COL_FOLDER] = _("Folder");
+ titles[COL_NEW] = _("New");
+ titles[COL_UNREAD] = _("Unread");
+ titles[COL_TOTAL] = _("#");
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy
+ (GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ prefs_common.folderview_vscrollbar_policy);
+ gtk_widget_set_size_request(scrolledwin,
+ prefs_common.folderview_width,
+ prefs_common.folderview_height);
+
+ ctree = gtk_ctree_new_with_titles(N_FOLDER_COLS, COL_FOLDER, titles);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_NEW,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_UNREAD,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_TOTAL,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_FOLDER,
+ prefs_common.folder_col_folder);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_NEW,
+ prefs_common.folder_col_new);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_UNREAD,
+ prefs_common.folder_col_unread);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_TOTAL,
+ prefs_common.folder_col_total);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_SQUARE);
+ gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT);
+ gtk_clist_set_compare_func(GTK_CLIST(ctree), folderview_clist_compare);
+
+ /* don't let title buttons take key focus */
+ for (i = 0; i < N_FOLDER_COLS; i++)
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button,
+ GTK_CAN_FOCUS);
+
+ /* popup menu */
+ n_entries = sizeof(folderview_mail_popup_entries) /
+ sizeof(folderview_mail_popup_entries[0]);
+ mail_popup = menu_create_items(folderview_mail_popup_entries,
+ n_entries,
+ "<MailFolder>", &mail_factory,
+ folderview);
+ n_entries = sizeof(folderview_imap_popup_entries) /
+ sizeof(folderview_imap_popup_entries[0]);
+ imap_popup = menu_create_items(folderview_imap_popup_entries,
+ n_entries,
+ "<IMAPFolder>", &imap_factory,
+ folderview);
+ n_entries = sizeof(folderview_news_popup_entries) /
+ sizeof(folderview_news_popup_entries[0]);
+ news_popup = menu_create_items(folderview_news_popup_entries,
+ n_entries,
+ "<NewsFolder>", &news_factory,
+ folderview);
+
+ g_signal_connect(G_OBJECT(ctree), "key_press_event",
+ G_CALLBACK(folderview_key_pressed),
+ folderview);
+ g_signal_connect(G_OBJECT(ctree), "button_press_event",
+ G_CALLBACK(folderview_button_pressed),
+ folderview);
+ g_signal_connect(G_OBJECT(ctree), "button_release_event",
+ G_CALLBACK(folderview_button_released),
+ folderview);
+ g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(folderview_selected), folderview);
+
+ g_signal_connect_after(G_OBJECT(ctree), "tree_expand",
+ G_CALLBACK(folderview_tree_expanded),
+ folderview);
+ g_signal_connect_after(G_OBJECT(ctree), "tree_collapse",
+ G_CALLBACK(folderview_tree_collapsed),
+ folderview);
+
+ g_signal_connect(G_OBJECT(ctree), "resize_column",
+ G_CALLBACK(folderview_col_resized), folderview);
+
+ g_signal_connect(G_OBJECT(mail_popup), "selection_done",
+ G_CALLBACK(folderview_popup_close), folderview);
+ g_signal_connect(G_OBJECT(imap_popup), "selection_done",
+ G_CALLBACK(folderview_popup_close), folderview);
+ g_signal_connect(G_OBJECT(news_popup), "selection_done",
+ G_CALLBACK(folderview_popup_close), folderview);
+
+ /* drop callback */
+ gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL &
+ ~GTK_DEST_DEFAULT_HIGHLIGHT,
+ summary_drag_types, 1,
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
+ g_signal_connect(G_OBJECT(ctree), "drag_motion",
+ G_CALLBACK(folderview_drag_motion_cb), folderview);
+ g_signal_connect(G_OBJECT(ctree), "drag_leave",
+ G_CALLBACK(folderview_drag_leave_cb), folderview);
+ g_signal_connect(G_OBJECT(ctree), "drag_data_received",
+ G_CALLBACK(folderview_drag_received_cb), folderview);
+
+ folderview->scrolledwin = scrolledwin;
+ folderview->ctree = ctree;
+ folderview->mail_popup = mail_popup;
+ folderview->mail_factory = mail_factory;
+ folderview->imap_popup = imap_popup;
+ folderview->imap_factory = imap_factory;
+ folderview->news_popup = news_popup;
+ folderview->news_factory = news_factory;
+
+ gtk_widget_show_all(scrolledwin);
+
+ folderview_list = g_list_append(folderview_list, folderview);
+
+ return folderview;
+}
+
+void folderview_init(FolderView *folderview)
+{
+ GtkWidget *ctree = folderview->ctree;
+
+ gtk_widget_realize(ctree);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_INBOX, &inboxxpm, &inboxxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_OUTBOX,
+ &outboxxpm, &outboxxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_CLOSE,
+ &folderxpm, &folderxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_OPEN,
+ &folderopenxpm, &folderopenxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DIR_NOSELECT,
+ &foldernoselectxpm, &foldernoselectxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_TRASH, &trashxpm, &trashxpmmask);
+
+ if (!bold_style) {
+ PangoFontDescription *font_desc;
+ bold_style = gtk_style_copy(gtk_widget_get_style(ctree));
+ font_desc = pango_font_description_from_string
+ (prefs_common.boldfont);
+ if (font_desc) {
+ if (bold_style->font_desc)
+ pango_font_description_free
+ (bold_style->font_desc);
+ bold_style->font_desc = font_desc;
+ }
+ bold_color_style = gtk_style_copy(bold_style);
+ bold_color_style->fg[GTK_STATE_NORMAL] = folderview->color_new;
+ }
+}
+
+void folderview_set(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ MainWindow *mainwin = folderview->mainwin;
+
+ debug_print(_("Setting folder info...\n"));
+ STATUSBAR_PUSH(mainwin, _("Setting folder info..."));
+
+ main_window_cursor_wait(mainwin);
+
+ folderview->selected = NULL;
+ folderview->opened = NULL;
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+ gtk_clist_clear(GTK_CLIST(ctree));
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ folderview_set_folders(folderview);
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ main_window_cursor_normal(mainwin);
+ STATUSBAR_POP(mainwin);
+}
+
+void folderview_set_all(void)
+{
+ GList *list;
+
+ for (list = folderview_list; list != NULL; list = list->next)
+ folderview_set((FolderView *)list->data);
+}
+
+void folderview_select(FolderView *folderview, FolderItem *item)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node;
+
+ if (!item) return;
+
+ node = gtk_ctree_find_by_row_data(ctree, NULL, item);
+ if (node) folderview_select_node(folderview, node);
+}
+
+static void folderview_select_node(FolderView *folderview, GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ g_return_if_fail(node != NULL);
+
+ folderview->open_folder = TRUE;
+ gtkut_ctree_set_focus_row(ctree, node);
+ gtk_ctree_select(ctree, node);
+ if (folderview->summaryview->folder_item &&
+ folderview->summaryview->folder_item->total > 0)
+ gtk_widget_grab_focus(folderview->summaryview->ctree);
+ else
+ gtk_widget_grab_focus(folderview->ctree);
+
+ gtkut_ctree_expand_parent_all(ctree, node);
+}
+
+void folderview_unselect(FolderView *folderview)
+{
+ if (folderview->opened && !GTK_CTREE_ROW(folderview->opened)->children)
+ gtk_ctree_collapse
+ (GTK_CTREE(folderview->ctree), folderview->opened);
+
+ folderview->selected = folderview->opened = NULL;
+}
+
+static GtkCTreeNode *folderview_find_next_unread(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ FolderItem *item;
+
+ if (node)
+ node = gtkut_ctree_node_next(ctree, node);
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ if (item && item->unread > 0 && item->stype != F_TRASH)
+ return node;
+ }
+
+ return NULL;
+}
+
+void folderview_select_next_unread(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node = NULL;
+
+ if ((node = folderview_find_next_unread(ctree, folderview->opened))
+ != NULL) {
+ folderview_select_node(folderview, node);
+ return;
+ }
+
+ if (!folderview->opened ||
+ folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list))
+ return;
+ /* search again from the first node */
+ if ((node = folderview_find_next_unread(ctree, NULL)) != NULL)
+ folderview_select_node(folderview, node);
+}
+
+FolderItem *folderview_get_selected_item(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ if (!folderview->selected) return NULL;
+ return gtk_ctree_node_get_row_data(ctree, folderview->selected);
+}
+
+void folderview_update_msg_num(FolderView *folderview, GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ static GtkCTreeNode *prev_row = NULL;
+ FolderItem *item;
+ gint new, unread, total;
+ gchar *new_str, *unread_str, *total_str;
+
+ if (!row) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, row);
+ if (!item) return;
+
+ gtk_ctree_node_get_text(ctree, row, COL_NEW, &new_str);
+ gtk_ctree_node_get_text(ctree, row, COL_UNREAD, &unread_str);
+ gtk_ctree_node_get_text(ctree, row, COL_TOTAL, &total_str);
+ new = atoi(new_str);
+ unread = atoi(unread_str);
+ total = atoi(total_str);
+
+ if (prev_row == row &&
+ item->new == new &&
+ item->unread == unread &&
+ item->total == total)
+ return;
+
+ prev_row = row;
+
+ folderview_update_node(folderview, row);
+}
+
+void folderview_append_item(FolderItem *item)
+{
+ FolderItem *parent;
+ GList *list;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(item->parent != NULL);
+
+ parent = item->parent;
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ FolderView *folderview = (FolderView *)list->data;
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node, *child;
+
+ node = gtk_ctree_find_by_row_data(ctree, NULL, parent);
+ if (node) {
+ child = gtk_ctree_find_by_row_data(ctree, node, item);
+ if (!child) {
+ gchar *text[N_FOLDER_COLS] =
+ {NULL, "0", "0", "0"};
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ text[COL_FOLDER] = item->name;
+ child = gtk_ctree_insert_node
+ (ctree, node, NULL, text,
+ FOLDER_SPACING,
+ folderxpm, folderxpmmask,
+ folderopenxpm, folderopenxpmmask,
+ FALSE, FALSE);
+ gtk_ctree_node_set_row_data(ctree, child, item);
+ gtk_ctree_expand(ctree, node);
+ folderview_update_node(folderview, child);
+ folderview_sort_folders(folderview, node,
+ item->folder);
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ }
+ }
+ }
+}
+
+static void folderview_set_folders(FolderView *folderview)
+{
+ GList *list;
+
+ list = folder_get_list();
+
+ for (; list != NULL; list = list->next)
+ folderview_append_folder(folderview, FOLDER(list->data));
+}
+
+static void folderview_scan_tree_func(Folder *folder, FolderItem *item,
+ gpointer data)
+{
+ GList *list;
+ gchar *rootpath;
+
+ if (FOLDER_IS_LOCAL(folder))
+ rootpath = LOCAL_FOLDER(folder)->rootpath;
+ else if (FOLDER_TYPE(folder) == F_IMAP && folder->account &&
+ folder->account->recv_server)
+ rootpath = folder->account->recv_server;
+ else if (FOLDER_TYPE(folder) == F_NEWS && folder->account &&
+ folder->account->nntp_server)
+ rootpath = folder->account->nntp_server;
+ else
+ return;
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ FolderView *folderview = (FolderView *)list->data;
+ MainWindow *mainwin = folderview->mainwin;
+ gchar *str;
+
+ if (item->path)
+ str = g_strdup_printf(_("Scanning folder %s%c%s ..."),
+ rootpath, G_DIR_SEPARATOR,
+ item->path);
+ else
+ str = g_strdup_printf(_("Scanning folder %s ..."),
+ rootpath);
+
+ STATUSBAR_PUSH(mainwin, str);
+ STATUSBAR_POP(mainwin);
+ g_free(str);
+ }
+}
+
+static GtkWidget *label_window_create(const gchar *str)
+{
+ GtkWidget *window;
+ GtkWidget *label;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 380, 60);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_title(GTK_WINDOW(window), str);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ label = gtk_label_new(str);
+ gtk_container_add(GTK_CONTAINER(window), label);
+ gtk_widget_show(label);
+
+ gtk_widget_show_now(window);
+
+ return window;
+}
+
+static void folderview_rescan_tree(FolderView *folderview, Folder *folder)
+{
+ GtkWidget *window;
+ AlertValue avalue;
+
+ g_return_if_fail(folder != NULL);
+
+ if (!folder->klass->scan_tree) return;
+
+ avalue = alertpanel
+ (_("Rebuild folder tree"),
+ _("The folder tree will be rebuilt. Continue?"),
+ _("Yes"), _("No"), NULL);
+ if (avalue != G_ALERTDEFAULT) return;
+
+ if (!FOLDER_IS_LOCAL(folder) &&
+ !main_window_toggle_online_if_offline(folderview->mainwin))
+ return;
+
+ inc_lock();
+ window = label_window_create(_("Rebuilding folder tree..."));
+
+ summary_show(folderview->summaryview, NULL, FALSE);
+
+ folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
+ if (folder->klass->scan_tree(folder) < 0)
+ alertpanel_error(_("Rebuilding of the folder tree failed."));
+ folder_set_ui_func(folder, NULL, NULL);
+
+ folder_write_list();
+ folderview_set_all();
+ statusbar_pop_all();
+
+ gtk_widget_destroy(window);
+ inc_unlock();
+}
+
+#if 0
+void folderview_rescan_all(void)
+{
+ GList *list;
+ GtkWidget *window;
+
+ inc_lock();
+ window = label_window_create(_("Rebuilding all folder trees..."));
+
+ list = folder_get_list();
+ for (; list != NULL; list = list->next) {
+ Folder *folder = list->data;
+
+ if (!folder->klass->scan_tree) continue;
+ folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
+ folder->klass->scan_tree(folder);
+ folder_set_ui_func(folder, NULL, NULL);
+ }
+
+ folder_write_list();
+ folderview_set_all();
+ gtk_widget_destroy(window);
+ inc_unlock();
+}
+#endif
+
+void folderview_check_new(Folder *folder)
+{
+ GList *list;
+ FolderItem *item;
+ FolderView *folderview;
+ GtkCTree *ctree;
+ GtkCTreeNode *node;
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ folderview = (FolderView *)list->data;
+ ctree = GTK_CTREE(folderview->ctree);
+
+ if (folder && !FOLDER_IS_LOCAL(folder)) {
+ if (!main_window_toggle_online_if_offline
+ (folderview->mainwin))
+ return;
+ }
+
+ inc_lock();
+ main_window_lock(folderview->mainwin);
+ gtk_widget_set_sensitive(folderview->ctree, FALSE);
+
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ if (!item || !item->path || !item->folder) continue;
+ if (item->no_select) continue;
+ if (folder && folder != item->folder) continue;
+ if (!folder && !FOLDER_IS_LOCAL(item->folder)) continue;
+
+ folderview_scan_tree_func(item->folder, item, NULL);
+ if (folder_item_scan(item) < 0) {
+ if (folder && !FOLDER_IS_LOCAL(folder))
+ break;
+ }
+ folderview_update_node(folderview, node);
+ }
+
+ gtk_widget_set_sensitive(folderview->ctree, TRUE);
+ main_window_unlock(folderview->mainwin);
+ inc_unlock();
+ statusbar_pop_all();
+ }
+
+ folder_write_list();
+}
+
+void folderview_check_new_all(void)
+{
+ GList *list;
+ GtkWidget *window;
+ FolderView *folderview;
+
+ folderview = (FolderView *)folderview_list->data;
+
+ inc_lock();
+ main_window_lock(folderview->mainwin);
+ window = label_window_create
+ (_("Checking for new messages in all folders..."));
+
+ list = folder_get_list();
+ for (; list != NULL; list = list->next) {
+ Folder *folder = list->data;
+
+ folderview_check_new(folder);
+ }
+
+ gtk_widget_destroy(window);
+ main_window_unlock(folderview->mainwin);
+ inc_unlock();
+}
+
+static gboolean folderview_search_new_recursive(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ FolderItem *item;
+
+ if (node) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ if (item) {
+ if (item->new > 0 ||
+ (item->stype == F_QUEUE && item->total > 0))
+ return TRUE;
+ }
+ node = GTK_CTREE_ROW(node)->children;
+ } else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ while (node) {
+ if (folderview_search_new_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static gboolean folderview_have_new_children(FolderView *folderview,
+ GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ if (!node)
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ if (!node)
+ return FALSE;
+
+ node = GTK_CTREE_ROW(node)->children;
+
+ while (node) {
+ if (folderview_search_new_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static gboolean folderview_search_unread_recursive(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ FolderItem *item;
+
+ if (node) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ if (item) {
+ if (item->unread > 0 ||
+ (item->stype == F_QUEUE && item->total > 0))
+ return TRUE;
+ }
+ node = GTK_CTREE_ROW(node)->children;
+ } else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ while (node) {
+ if (folderview_search_unread_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static gboolean folderview_have_unread_children(FolderView *folderview,
+ GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ if (!node)
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ if (!node)
+ return FALSE;
+
+ node = GTK_CTREE_ROW(node)->children;
+
+ while (node) {
+ if (folderview_search_unread_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkStyle *style = NULL;
+ FolderItem *item;
+ GdkPixmap *xpm, *openxpm;
+ GdkBitmap *mask, *openmask;
+ gchar *name;
+ gchar *str;
+ gboolean add_unread_mark;
+ gboolean use_bold, use_color;
+
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(item != NULL);
+
+ switch (item->stype) {
+ case F_INBOX:
+ xpm = openxpm = inboxxpm;
+ mask = openmask = inboxxpmmask;
+ name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
+ !strcmp2(item->name, INBOX_DIR) ? _("Inbox") :
+ item->name);
+ break;
+ case F_OUTBOX:
+ xpm = openxpm = outboxxpm;
+ mask = openmask = outboxxpmmask;
+ name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
+ !strcmp2(item->name, OUTBOX_DIR) ? _("Sent") :
+ item->name);
+ break;
+ case F_QUEUE:
+ xpm = openxpm = outboxxpm;
+ mask = openmask = outboxxpmmask;
+ name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
+ !strcmp2(item->name, QUEUE_DIR) ? _("Queue") :
+ item->name);
+ break;
+ case F_TRASH:
+ xpm = openxpm = trashxpm;
+ mask = openmask = trashxpmmask;
+ name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
+ !strcmp2(item->name, TRASH_DIR) ? _("Trash") :
+ item->name);
+ break;
+ case F_DRAFT:
+ xpm = folderxpm;
+ mask = folderxpmmask;
+ openxpm = folderopenxpm;
+ openmask = folderopenxpmmask;
+ name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
+ !strcmp2(item->name, DRAFT_DIR) ? _("Drafts") :
+ item->name);
+ break;
+ default:
+ if (item->no_select) {
+ xpm = openxpm = foldernoselectxpm;
+ mask = openmask = foldernoselectxpmmask;
+ } else {
+ xpm = folderxpm;
+ mask = folderxpmmask;
+ openxpm = folderopenxpm;
+ openmask = folderopenxpmmask;
+ }
+
+ if (!item->parent) {
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ name = " (MH)"; break;
+ case F_IMAP:
+ name = " (IMAP4)"; break;
+ case F_NEWS:
+ name = " (News)"; break;
+ default:
+ name = "";
+ }
+ name = g_strconcat(item->name, name, NULL);
+ } else {
+ if (FOLDER_TYPE(item->folder) == F_NEWS &&
+ item->path &&
+ !strcmp2(item->name, item->path))
+ name = get_abbrev_newsgroup_name
+ (item->path,
+ prefs_common.ng_abbrev_len);
+ else
+ name = g_strdup(item->name);
+ }
+ }
+
+ if (!GTK_CTREE_ROW(node)->expanded &&
+ folderview_have_unread_children(folderview, node))
+ add_unread_mark = TRUE;
+ else
+ add_unread_mark = FALSE;
+
+ if (item->stype == F_QUEUE && item->total > 0 &&
+ prefs_common.display_folder_unread) {
+ str = g_strdup_printf("%s (%d%s)", name, item->total,
+ add_unread_mark ? "+" : "");
+ gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
+ xpm, mask, openxpm, openmask,
+ FALSE, GTK_CTREE_ROW(node)->expanded);
+ g_free(str);
+ } else if ((item->unread > 0 || add_unread_mark) &&
+ prefs_common.display_folder_unread) {
+
+ if (item->unread > 0)
+ str = g_strdup_printf("%s (%d%s)", name, item->unread,
+ add_unread_mark ? "+" : "");
+ else
+ str = g_strdup_printf("%s (+)", name);
+ gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
+ xpm, mask, openxpm, openmask,
+ FALSE, GTK_CTREE_ROW(node)->expanded);
+ g_free(str);
+ } else
+ gtk_ctree_set_node_info(ctree, node, name, FOLDER_SPACING,
+ xpm, mask, openxpm, openmask,
+ FALSE, GTK_CTREE_ROW(node)->expanded);
+ g_free(name);
+
+ if (!item->parent) {
+ gtk_ctree_node_set_text(ctree, node, COL_NEW, "-");
+ gtk_ctree_node_set_text(ctree, node, COL_UNREAD, "-");
+ gtk_ctree_node_set_text(ctree, node, COL_TOTAL, "-");
+ } else {
+ gtk_ctree_node_set_text(ctree, node, COL_NEW, itos(item->new));
+ gtk_ctree_node_set_text(ctree, node, COL_UNREAD, itos(item->unread));
+ gtk_ctree_node_set_text(ctree, node, COL_TOTAL, itos(item->total));
+ }
+
+ if (item->stype == F_OUTBOX || item->stype == F_DRAFT ||
+ item->stype == F_TRASH) {
+ use_bold = use_color = FALSE;
+ } else if (item->stype == F_QUEUE) {
+ /* highlight queue folder if there are any messages */
+ use_bold = use_color = (item->total > 0);
+ } else {
+ /* if unread messages exist, print with bold font */
+ use_bold = (item->unread > 0) || add_unread_mark;
+ /* if new messages exist, print with colored letter */
+ use_color =
+ (item->new > 0) ||
+ (add_unread_mark &&
+ folderview_have_new_children(folderview, node));
+ }
+
+ gtk_ctree_node_set_foreground(ctree, node, NULL);
+
+ if (item->no_select)
+ gtk_ctree_node_set_foreground(ctree, node,
+ &folderview->color_noselect);
+ else if (use_bold && use_color)
+ style = bold_color_style;
+ else if (use_bold)
+ style = bold_style;
+ else if (use_color)
+ gtk_ctree_node_set_foreground(ctree, node,
+ &folderview->color_new);
+
+ gtk_ctree_node_set_row_style(ctree, node, style);
+
+ item->updated = FALSE;
+
+ if ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL)
+ folderview_update_node(folderview, node);
+}
+
+void folderview_update_item(FolderItem *item, gboolean update_summary)
+{
+ GList *list;
+ FolderView *folderview;
+ GtkCTree *ctree;
+ GtkCTreeNode *node;
+
+ g_return_if_fail(item != NULL);
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ folderview = (FolderView *)list->data;
+ ctree = GTK_CTREE(folderview->ctree);
+
+ node = gtk_ctree_find_by_row_data(ctree, NULL, item);
+ if (node) {
+ folderview_update_node(folderview, node);
+ if (update_summary && folderview->opened == node)
+ summary_show(folderview->summaryview,
+ item, FALSE);
+ }
+ }
+}
+
+static void folderview_update_item_foreach_func(gpointer key, gpointer val,
+ gpointer data)
+{
+ folderview_update_item((FolderItem *)key, GPOINTER_TO_INT(data));
+}
+
+void folderview_update_item_foreach(GHashTable *table, gboolean update_summary)
+{
+ g_hash_table_foreach(table, folderview_update_item_foreach_func,
+ GINT_TO_POINTER(update_summary));
+}
+
+static gboolean folderview_update_all_updated_func(GNode *node, gpointer data)
+{
+ FolderItem *item;
+
+ item = FOLDER_ITEM(node->data);
+ if (item->updated) {
+ debug_print("folderview_update_all_updated(): '%s' is updated\n", item->path);
+ folderview_update_item(item, GPOINTER_TO_INT(data));
+ }
+
+ return FALSE;
+}
+
+void folderview_update_all_updated(gboolean update_summary)
+{
+ GList *list;
+ Folder *folder;
+
+ for (list = folder_get_list(); list != NULL; list = list->next) {
+ folder = (Folder *)list->data;
+ g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folderview_update_all_updated_func,
+ GINT_TO_POINTER(update_summary));
+ }
+}
+
+static gboolean folderview_gnode_func(GtkCTree *ctree, guint depth,
+ GNode *gnode, GtkCTreeNode *cnode,
+ gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+ FolderItem *item = FOLDER_ITEM(gnode->data);
+
+ g_return_val_if_fail(item != NULL, FALSE);
+
+ gtk_ctree_node_set_row_data(ctree, cnode, item);
+ folderview_update_node(folderview, cnode);
+
+ return TRUE;
+}
+
+static void folderview_expand_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+ FolderItem *item;
+
+ if (GTK_CTREE_ROW(node)->children) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(item != NULL);
+
+ if (!item->collapsed)
+ gtk_ctree_expand(ctree, node);
+ else
+ folderview_update_node(folderview, node);
+ }
+}
+
+#define SET_SPECIAL_FOLDER(ctree, item) \
+{ \
+ if (item) { \
+ GtkCTreeNode *node, *parent, *sibling; \
+ \
+ node = gtk_ctree_find_by_row_data(ctree, root, item); \
+ if (!node) \
+ g_warning("%s not found.\n", item->path); \
+ else { \
+ parent = GTK_CTREE_ROW(node)->parent; \
+ if (prev && parent == GTK_CTREE_ROW(prev)->parent) \
+ sibling = GTK_CTREE_ROW(prev)->sibling; \
+ else \
+ sibling = GTK_CTREE_ROW(parent)->children; \
+ while (sibling) { \
+ FolderItem *tmp; \
+ \
+ tmp = gtk_ctree_node_get_row_data \
+ (ctree, sibling); \
+ if (tmp->stype != F_NORMAL) \
+ sibling = GTK_CTREE_ROW(sibling)->sibling; \
+ else \
+ break; \
+ } \
+ if (node != sibling) \
+ gtk_ctree_move(ctree, node, parent, sibling); \
+ } \
+ \
+ prev = node; \
+ } \
+}
+
+static void folderview_sort_folders(FolderView *folderview, GtkCTreeNode *root,
+ Folder *folder)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *prev = NULL;
+
+ gtk_ctree_sort_recursive(ctree, root);
+
+ if (GTK_CTREE_ROW(root)->parent) return;
+
+ SET_SPECIAL_FOLDER(ctree, folder->inbox);
+ SET_SPECIAL_FOLDER(ctree, folder->outbox);
+ SET_SPECIAL_FOLDER(ctree, folder->draft);
+ SET_SPECIAL_FOLDER(ctree, folder->queue);
+ SET_SPECIAL_FOLDER(ctree, folder->trash);
+}
+
+static void folderview_append_folder(FolderView *folderview, Folder *folder)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *root;
+
+ g_return_if_fail(folder != NULL);
+
+ root = gtk_ctree_insert_gnode(ctree, NULL, NULL, folder->node,
+ folderview_gnode_func, folderview);
+ gtk_ctree_pre_recursive(ctree, root, folderview_expand_func,
+ folderview);
+ folderview_sort_folders(folderview, root, folder);
+}
+
+void folderview_new_folder(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ case F_MBOX:
+ case F_MAILDIR:
+ case F_IMAP:
+ folderview_new_folder_cb(folderview, 0, NULL);
+ break;
+ case F_NEWS:
+ folderview_new_news_group_cb(folderview, 0, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void folderview_rename_folder(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (!item->path) return;
+ if (item->stype != F_NORMAL) return;
+
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ case F_MBOX:
+ case F_MAILDIR:
+ case F_IMAP:
+ folderview_rename_folder_cb(folderview, 0, NULL);
+ break;
+ case F_NEWS:
+ default:
+ break;
+ }
+}
+
+void folderview_delete_folder(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (!item->path) return;
+ if (item->stype != F_NORMAL) return;
+
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ case F_MBOX:
+ case F_MAILDIR:
+ case F_IMAP:
+ folderview_delete_folder_cb(folderview, 0, NULL);
+ break;
+ case F_NEWS:
+ folderview_rm_news_group_cb(folderview, 0, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void folderview_check_new_selected(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (item->parent != NULL) return;
+
+ folderview_check_new(item->folder);
+}
+
+void folderview_remove_mailbox(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (item->parent != NULL) return;
+
+ switch (FOLDER_TYPE(item->folder)) {
+ case F_MH:
+ case F_MBOX:
+ case F_MAILDIR:
+ folderview_remove_mailbox_cb(folderview, 0, NULL);
+ break;
+ case F_IMAP:
+ folderview_rm_imap_server_cb(folderview, 0, NULL);
+ break;
+ case F_NEWS:
+ folderview_rm_news_server_cb(folderview, 0, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void folderview_rebuild_tree(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (item->parent != NULL) return;
+
+ folderview_rescan_tree(folderview, item->folder);
+}
+
+
+/* callback functions */
+
+static gboolean folderview_button_pressed(GtkWidget *ctree,
+ GdkEventButton *event,
+ FolderView *folderview)
+{
+ GtkCList *clist = GTK_CLIST(ctree);
+ gint prev_row = -1, row = -1, column = -1;
+ FolderItem *item;
+ Folder *folder;
+ GtkWidget *popup;
+ gboolean new_folder = FALSE;
+ gboolean rename_folder = FALSE;
+ gboolean delete_folder = FALSE;
+ gboolean empty_trash = FALSE;
+ gboolean download_msg = FALSE;
+ gboolean update_tree = FALSE;
+ gboolean rescan_tree = FALSE;
+ gboolean remove_tree = FALSE;
+ gboolean search_folder = FALSE;
+ gboolean folder_property = FALSE;
+
+ if (!event) return FALSE;
+
+ if (event->button == 1) {
+ folderview->open_folder = TRUE;
+ return FALSE;
+ }
+
+ if (event->button == 2 || event->button == 3) {
+ /* right clicked */
+ if (clist->selection) {
+ GtkCTreeNode *node;
+
+ node = GTK_CTREE_NODE(clist->selection->data);
+ if (node)
+ prev_row = gtkut_ctree_get_nth_from_node
+ (GTK_CTREE(ctree), node);
+ }
+
+ if (!gtk_clist_get_selection_info(clist, event->x, event->y,
+ &row, &column))
+ return FALSE;
+ if (prev_row != row) {
+ gtk_clist_unselect_all(clist);
+ if (event->button == 2)
+ folderview_select_node
+ (folderview,
+ gtk_ctree_node_nth(GTK_CTREE(ctree),
+ row));
+ else
+ gtk_clist_select_row(clist, row, column);
+ }
+ }
+
+ if (event->button != 3) return FALSE;
+
+ item = gtk_clist_get_row_data(clist, row);
+ g_return_val_if_fail(item != NULL, FALSE);
+ g_return_val_if_fail(item->folder != NULL, FALSE);
+ folder = item->folder;
+
+ if (folderview->mainwin->lock_count == 0) {
+ new_folder = TRUE;
+ if (item->parent == NULL) {
+ update_tree = remove_tree = TRUE;
+ if (folder->account)
+ folder_property = TRUE;
+ } else {
+ folder_property = TRUE;
+ if (folderview->selected == folderview->opened)
+ search_folder = TRUE;
+ }
+ if (FOLDER_IS_LOCAL(folder) || FOLDER_TYPE(folder) == F_IMAP) {
+ if (item->parent == NULL)
+ update_tree = rescan_tree = TRUE;
+ else if (item->stype == F_NORMAL)
+ rename_folder = delete_folder = TRUE;
+ else if (item->stype == F_TRASH)
+ empty_trash = TRUE;
+ } else if (FOLDER_TYPE(folder) == F_NEWS) {
+ if (item->parent != NULL)
+ delete_folder = TRUE;
+ }
+ if (FOLDER_TYPE(folder) == F_IMAP ||
+ FOLDER_TYPE(folder) == F_NEWS) {
+ if (item->parent != NULL && item->no_select == FALSE)
+ download_msg = TRUE;
+ }
+ }
+
+#define SET_SENS(factory, name, sens) \
+ menu_set_sensitive(folderview->factory, name, sens)
+
+ if (FOLDER_IS_LOCAL(folder)) {
+ popup = folderview->mail_popup;
+ menu_set_insensitive_all(GTK_MENU_SHELL(popup));
+ SET_SENS(mail_factory, "/Create new folder...", new_folder);
+ SET_SENS(mail_factory, "/Rename folder...", rename_folder);
+ SET_SENS(mail_factory, "/Delete folder", delete_folder);
+ SET_SENS(mail_factory, "/Empty trash", empty_trash);
+ SET_SENS(mail_factory, "/Check for new messages", update_tree);
+ SET_SENS(mail_factory, "/Rebuild folder tree", rescan_tree);
+ SET_SENS(mail_factory, "/Search messages...", search_folder);
+ SET_SENS(mail_factory, "/Properties...", folder_property);
+ } else if (FOLDER_TYPE(folder) == F_IMAP) {
+ popup = folderview->imap_popup;
+ menu_set_insensitive_all(GTK_MENU_SHELL(popup));
+ SET_SENS(imap_factory, "/Create new folder...", new_folder);
+ SET_SENS(imap_factory, "/Rename folder...", rename_folder);
+ SET_SENS(imap_factory, "/Delete folder", delete_folder);
+ SET_SENS(imap_factory, "/Empty trash", empty_trash);
+ SET_SENS(imap_factory, "/Download", download_msg);
+ SET_SENS(imap_factory, "/Check for new messages", update_tree);
+ SET_SENS(imap_factory, "/Rebuild folder tree", rescan_tree);
+ SET_SENS(imap_factory, "/Search messages...", search_folder);
+ SET_SENS(imap_factory, "/Properties...", folder_property);
+ } else if (FOLDER_TYPE(folder) == F_NEWS) {
+ popup = folderview->news_popup;
+ menu_set_insensitive_all(GTK_MENU_SHELL(popup));
+ SET_SENS(news_factory, "/Subscribe to newsgroup...", new_folder);
+ SET_SENS(news_factory, "/Remove newsgroup", delete_folder);
+ SET_SENS(news_factory, "/Download", download_msg);
+ SET_SENS(news_factory, "/Check for new messages", update_tree);
+ SET_SENS(news_factory, "/Search messages...", search_folder);
+ SET_SENS(news_factory, "/Properties...", folder_property);
+ } else
+ return FALSE;
+
+#undef SET_SENS
+
+ gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL,
+ event->button, event->time);
+
+ return FALSE;
+}
+
+static gboolean folderview_button_released(GtkWidget *ctree,
+ GdkEventButton *event,
+ FolderView *folderview)
+{
+ if (!event) return FALSE;
+
+ if (event->button == 1 && folderview->open_folder == FALSE &&
+ folderview->opened != NULL) {
+ gtkut_ctree_set_focus_row(GTK_CTREE(ctree),
+ folderview->opened);
+ gtk_ctree_select(GTK_CTREE(ctree), folderview->opened);
+ }
+
+ return FALSE;
+}
+
+static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ FolderView *folderview)
+{
+ if (!event) return FALSE;
+
+ switch (event->keyval) {
+ case GDK_Return:
+ if (folderview->selected) {
+ folderview_select_node(folderview,
+ folderview->selected);
+ }
+ break;
+ case GDK_space:
+ if (folderview->selected) {
+ if (folderview->opened == folderview->selected &&
+ (!folderview->summaryview->folder_item ||
+ folderview->summaryview->folder_item->total == 0))
+ folderview_select_next_unread(folderview);
+ else
+ folderview_select_node(folderview,
+ folderview->selected);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
+ gint column, FolderView *folderview)
+{
+ static gboolean can_select = TRUE; /* exclusive lock */
+ gboolean opened;
+ FolderItem *item;
+
+ folderview->selected = row;
+
+ main_window_set_menu_sensitive(folderview->mainwin);
+
+ if (folderview->opened == row) {
+ folderview->open_folder = FALSE;
+ return;
+ }
+
+ if (!can_select || summary_is_locked(folderview->summaryview)) {
+ gtkut_ctree_set_focus_row(ctree, folderview->opened);
+ gtk_ctree_select(ctree, folderview->opened);
+ return;
+ }
+
+ if (!folderview->open_folder) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, row);
+ if (!item) return;
+
+ can_select = FALSE;
+
+ if (item->path)
+ debug_print(_("Folder %s is selected\n"), item->path);
+
+ if (!GTK_CTREE_ROW(row)->children)
+ gtk_ctree_expand(ctree, row);
+ if (folderview->opened &&
+ !GTK_CTREE_ROW(folderview->opened)->children)
+ gtk_ctree_collapse(ctree, folderview->opened);
+
+ /* ungrab the mouse event */
+ if (GTK_WIDGET_HAS_GRAB(ctree)) {
+ gtk_grab_remove(GTK_WIDGET(ctree));
+ if (gdk_pointer_is_grabbed())
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ }
+
+ opened = summary_show(folderview->summaryview, item, FALSE);
+
+ if (!opened) {
+ gtkut_ctree_set_focus_row(ctree, folderview->opened);
+ gtk_ctree_select(ctree, folderview->opened);
+ } else {
+ folderview->opened = row;
+ if (gtk_ctree_node_is_visible(ctree, row)
+ != GTK_VISIBILITY_FULL)
+ gtk_ctree_node_moveto(ctree, row, -1, 0.5, 0);
+ }
+
+ folderview->open_folder = FALSE;
+ can_select = TRUE;
+}
+
+static void folderview_tree_expanded(GtkCTree *ctree, GtkCTreeNode *node,
+ FolderView *folderview)
+{
+ FolderItem *item;
+
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(item != NULL);
+ item->collapsed = FALSE;
+ folderview_update_node(folderview, node);
+}
+
+static void folderview_tree_collapsed(GtkCTree *ctree, GtkCTreeNode *node,
+ FolderView *folderview)
+{
+ FolderItem *item;
+
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(item != NULL);
+ item->collapsed= TRUE;
+ folderview_update_node(folderview, node);
+}
+
+static void folderview_popup_close(GtkMenuShell *menu_shell,
+ FolderView *folderview)
+{
+ if (!folderview->opened) return;
+
+ gtkut_ctree_set_focus_row(GTK_CTREE(folderview->ctree),
+ folderview->opened);
+ gtk_ctree_select(GTK_CTREE(folderview->ctree), folderview->opened);
+}
+
+static void folderview_col_resized(GtkCList *clist, gint column, gint width,
+ FolderView *folderview)
+{
+ switch (column) {
+ case COL_FOLDER:
+ prefs_common.folder_col_folder = width;
+ break;
+ case COL_NEW:
+ prefs_common.folder_col_new = width;
+ break;
+ case COL_UNREAD:
+ prefs_common.folder_col_unread = width;
+ break;
+ case COL_TOTAL:
+ prefs_common.folder_col_total = width;
+ break;
+ default:
+ break;
+ }
+}
+
+static void folderview_download_func(Folder *folder, FolderItem *item,
+ gpointer data)
+{
+ GList *list;
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ FolderView *folderview = (FolderView *)list->data;
+ MainWindow *mainwin = folderview->mainwin;
+ gchar *str;
+
+ str = g_strdup_printf
+ (_("Downloading messages in %s ..."), item->path);
+ main_window_progress_set(mainwin,
+ GPOINTER_TO_INT(data), item->total);
+ STATUSBAR_PUSH(mainwin, str);
+ STATUSBAR_POP(mainwin);
+ g_free(str);
+ }
+}
+
+static void folderview_download_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ MainWindow *mainwin = folderview->mainwin;
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ if (!main_window_toggle_online_if_offline(folderview->mainwin))
+ return;
+
+ main_window_cursor_wait(mainwin);
+ inc_lock();
+ main_window_lock(mainwin);
+ gtk_widget_set_sensitive(folderview->ctree, FALSE);
+ main_window_progress_on(mainwin);
+ GTK_EVENTS_FLUSH();
+ folder_set_ui_func(item->folder, folderview_download_func, NULL);
+ if (folder_item_fetch_all_msg(item) < 0) {
+ gchar *name;
+
+ name = trim_string(item->name, 32);
+ alertpanel_error(_("Error occurred while downloading messages in `%s'."), name);
+ g_free(name);
+ }
+ folder_set_ui_func(item->folder, NULL, NULL);
+ main_window_progress_off(mainwin);
+ gtk_widget_set_sensitive(folderview->ctree, TRUE);
+ main_window_unlock(mainwin);
+ inc_unlock();
+ main_window_cursor_normal(mainwin);
+ statusbar_pop_all();
+}
+
+static void folderview_update_tree_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ if (action == 0)
+ folderview_check_new(item->folder);
+ else
+ folderview_rescan_tree(folderview, item->folder);
+}
+
+static void folderview_new_folder_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ FolderItem *new_item;
+ gchar *new_folder;
+ gchar *name;
+ gchar *p;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (FOLDER_TYPE(item->folder) == F_IMAP)
+ g_return_if_fail(item->folder->account != NULL);
+
+ if (FOLDER_TYPE(item->folder) == F_IMAP) {
+ new_folder = input_dialog
+ (_("New folder"),
+ _("Input the name of new folder:\n"
+ "(if you want to create a folder to store subfolders,\n"
+ " append `/' at the end of the name)"),
+ _("NewFolder"));
+ } else {
+ new_folder = input_dialog(_("New folder"),
+ _("Input the name of new folder:"),
+ _("NewFolder"));
+ }
+ if (!new_folder) return;
+ AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
+
+ p = strchr(new_folder, G_DIR_SEPARATOR);
+ if ((p && FOLDER_TYPE(item->folder) != F_IMAP) ||
+ (p && FOLDER_TYPE(item->folder) == F_IMAP && *(p + 1) != '\0')) {
+ alertpanel_error(_("`%c' can't be included in folder name."),
+ G_DIR_SEPARATOR);
+ return;
+ }
+
+ name = trim_string(new_folder, 32);
+ AUTORELEASE_STR(name, {g_free(name); return;});
+
+ /* find whether the directory already exists */
+ if (folder_find_child_item_by_name(item, new_folder)) {
+ alertpanel_error(_("The folder `%s' already exists."), name);
+ return;
+ }
+
+ new_item = item->folder->klass->create_folder(item->folder, item,
+ new_folder);
+ if (!new_item) {
+ alertpanel_error(_("Can't create the folder `%s'."), name);
+ return;
+ }
+
+ folderview_append_item(new_item);
+ folder_write_list();
+}
+
+static void folderview_rename_folder_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ gchar *new_folder;
+ gchar *name;
+ gchar *message;
+ gchar *old_path;
+ gchar *old_id;
+ gchar *new_id;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->path != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ name = trim_string(item->name, 32);
+ message = g_strdup_printf(_("Input new name for `%s':"), name);
+ new_folder = input_dialog(_("Rename folder"), message,
+ g_basename(item->path));
+ g_free(message);
+ g_free(name);
+ if (!new_folder) return;
+ AUTORELEASE_STR(new_folder, {g_free(new_folder); return;});
+
+ if (strchr(new_folder, G_DIR_SEPARATOR) != NULL) {
+ alertpanel_error(_("`%c' can't be included in folder name."),
+ G_DIR_SEPARATOR);
+ return;
+ }
+
+ if (folder_find_child_item_by_name(item->parent, new_folder)) {
+ name = trim_string(new_folder, 32);
+ alertpanel_error(_("The folder `%s' already exists."), name);
+ g_free(name);
+ return;
+ }
+
+ Xstrdup_a(old_path, item->path, {g_free(new_folder); return;});
+ old_id = folder_item_get_identifier(item);
+
+ if (item->folder->klass->rename_folder(item->folder, item,
+ new_folder) < 0) {
+ g_free(old_id);
+ return;
+ }
+
+ if (folder_get_default_folder() == item->folder)
+ prefs_filter_rename_path(old_path, item->path);
+ new_id = folder_item_get_identifier(item);
+ prefs_filter_rename_path(old_id, new_id);
+ g_free(old_id);
+ g_free(new_id);
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ folderview_update_node(folderview, folderview->selected);
+ folderview_sort_folders(folderview,
+ GTK_CTREE_ROW(folderview->selected)->parent,
+ item->folder);
+ if (folderview->opened == folderview->selected ||
+ gtk_ctree_is_ancestor(ctree,
+ folderview->selected,
+ folderview->opened)) {
+ GtkCTreeNode *node = folderview->opened;
+ folderview_unselect(folderview);
+ folderview_select_node(folderview, node);
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ folder_write_list();
+}
+
+static void folderview_delete_folder_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ Folder *folder;
+ FolderItem *item;
+ gchar *message, *name;
+ AlertValue avalue;
+ gchar *old_path;
+ gchar *old_id;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->path != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ folder = item->folder;
+
+ name = trim_string(item->name, 32);
+ AUTORELEASE_STR(name, {g_free(name); return;});
+ message = g_strdup_printf
+ (_("All folder(s) and message(s) under `%s' will be deleted.\n"
+ "Do you really want to delete?"), name);
+ avalue = alertpanel(_("Delete folder"), message,
+ _("Yes"), _("+No"), NULL);
+ g_free(message);
+ if (avalue != G_ALERTDEFAULT) return;
+
+ Xstrdup_a(old_path, item->path, return);
+ old_id = folder_item_get_identifier(item);
+
+ if (folderview->opened == folderview->selected ||
+ gtk_ctree_is_ancestor(ctree,
+ folderview->selected, folderview->opened)) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+
+ if (folder->klass->remove_folder(folder, item) < 0) {
+ alertpanel_error(_("Can't remove the folder `%s'."), name);
+ g_free(old_id);
+ return;
+ }
+
+ if (folder_get_default_folder() == folder)
+ prefs_filter_delete_path(old_path);
+ prefs_filter_delete_path(old_id);
+ g_free(old_id);
+
+ gtk_ctree_remove_node(ctree, folderview->selected);
+ folder_write_list();
+}
+
+static void folderview_empty_trash_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ Folder *folder;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->path != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ folder = item->folder;
+
+ if (folder->trash != item) return;
+ if (item->stype != F_TRASH) return;
+
+ if (alertpanel(_("Empty trash"), _("Empty all messages in trash?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
+ return;
+
+ procmsg_empty_trash(folder->trash);
+ statusbar_pop_all();
+ folderview_update_item(folder->trash, TRUE);
+
+ if (folderview->opened == folderview->selected)
+ gtk_widget_grab_focus(folderview->ctree);
+}
+
+static void folderview_remove_mailbox_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node;
+ FolderItem *item;
+ gchar *name;
+ gchar *message;
+ AlertValue avalue;
+
+ if (!folderview->selected) return;
+ node = folderview->selected;
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (item->parent) return;
+
+ name = trim_string(item->folder->name, 32);
+ message = g_strdup_printf
+ (_("Really remove the mailbox `%s' ?\n"
+ "(The messages are NOT deleted from the disk)"), name);
+ avalue = alertpanel(_("Remove mailbox"), message,
+ _("Yes"), _("+No"), NULL);
+ g_free(message);
+ g_free(name);
+ if (avalue != G_ALERTDEFAULT) return;
+
+ if (folderview->summaryview->folder_item &&
+ folderview->summaryview->folder_item->folder == item->folder) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+ folder_destroy(item->folder);
+ gtk_ctree_remove_node(ctree, node);
+ folder_write_list();
+}
+
+static void folderview_rm_imap_server_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ PrefsAccount *account;
+ gchar *name;
+ gchar *message;
+ AlertValue avalue;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_IMAP);
+ g_return_if_fail(item->folder->account != NULL);
+
+ name = trim_string(item->folder->name, 32);
+ message = g_strdup_printf(_("Really delete IMAP4 account `%s'?"), name);
+ avalue = alertpanel(_("Delete IMAP4 account"), message,
+ _("Yes"), _("+No"), NULL);
+ g_free(message);
+ g_free(name);
+
+ if (avalue != G_ALERTDEFAULT) return;
+
+ if (folderview->summaryview->folder_item &&
+ folderview->summaryview->folder_item->folder == item->folder) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+
+ account = item->folder->account;
+ folder_destroy(item->folder);
+ account_destroy(account);
+ gtk_ctree_remove_node(ctree, folderview->selected);
+ account_set_menu();
+ main_window_reflect_prefs_all();
+ folder_write_list();
+}
+
+static void folderview_new_news_group_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *servernode, *node;
+ Folder *folder;
+ FolderItem *item;
+ FolderItem *rootitem;
+ FolderItem *newitem;
+ GSList *new_subscr;
+ GSList *cur;
+ GNode *gnode;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ folder = item->folder;
+ g_return_if_fail(folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(folder) == F_NEWS);
+ g_return_if_fail(folder->account != NULL);
+
+ if (GTK_CTREE_ROW(folderview->selected)->parent != NULL)
+ servernode = GTK_CTREE_ROW(folderview->selected)->parent;
+ else
+ servernode = folderview->selected;
+
+ rootitem = gtk_ctree_node_get_row_data(ctree, servernode);
+
+ new_subscr = grouplist_dialog(folder);
+
+ /* remove unsubscribed newsgroups */
+ for (gnode = folder->node->children; gnode != NULL; ) {
+ GNode *next = gnode->next;
+
+ item = FOLDER_ITEM(gnode->data);
+ if (g_slist_find_custom(new_subscr, item->path,
+ (GCompareFunc)g_strcasecmp) != NULL) {
+ gnode = next;
+ continue;
+ }
+
+ node = gtk_ctree_find_by_row_data(ctree, servernode, item);
+ if (!node) {
+ gnode = next;
+ continue;
+ }
+
+ if (folderview->opened == node) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+
+ folder_item_remove(item);
+ gtk_ctree_remove_node(ctree, node);
+
+ gnode = next;
+ }
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ /* add subscribed newsgroups */
+ for (cur = new_subscr; cur != NULL; cur = cur->next) {
+ gchar *name = (gchar *)cur->data;
+
+ if (folder_find_child_item_by_name(rootitem, name) != NULL)
+ continue;
+
+ newitem = folder_item_new(name, name);
+ folder_item_append(rootitem, newitem);
+ folderview_append_item(newitem);
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ slist_free_strings(new_subscr);
+ g_slist_free(new_subscr);
+
+ folder_write_list();
+}
+
+static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ gchar *name;
+ gchar *message;
+ AlertValue avalue;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
+ g_return_if_fail(item->folder->account != NULL);
+
+ name = trim_string_before(item->path, 32);
+ message = g_strdup_printf(_("Really delete newsgroup `%s'?"), name);
+ avalue = alertpanel(_("Delete newsgroup"), message,
+ _("Yes"), _("+No"), NULL);
+ g_free(message);
+ g_free(name);
+ if (avalue != G_ALERTDEFAULT) return;
+
+ if (folderview->opened == folderview->selected) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+
+ folder_item_remove(item);
+ gtk_ctree_remove_node(ctree, folderview->selected);
+ folder_write_list();
+}
+
+static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ PrefsAccount *account;
+ gchar *name;
+ gchar *message;
+ AlertValue avalue;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
+ g_return_if_fail(item->folder->account != NULL);
+
+ name = trim_string(item->folder->name, 32);
+ message = g_strdup_printf(_("Really delete news account `%s'?"), name);
+ avalue = alertpanel(_("Delete news account"), message,
+ _("Yes"), _("+No"), NULL);
+ g_free(message);
+ g_free(name);
+
+ if (avalue != G_ALERTDEFAULT) return;
+
+ if (folderview->summaryview->folder_item &&
+ folderview->summaryview->folder_item->folder == item->folder) {
+ summary_clear_all(folderview->summaryview);
+ folderview->opened = NULL;
+ }
+
+ account = item->folder->account;
+ folder_destroy(item->folder);
+ account_destroy(account);
+ gtk_ctree_remove_node(ctree, folderview->selected);
+ account_set_menu();
+ main_window_reflect_prefs_all();
+ folder_write_list();
+}
+
+static void folderview_search_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ summary_search(folderview->summaryview);
+}
+
+static void folderview_property_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ if (item->parent == NULL && item->folder->account)
+ account_open(item->folder->account);
+ else
+ prefs_folder_item_open(item);
+}
+
+static void folderview_defer_expand_stop(FolderView *folderview)
+{
+ if (folderview->spring_timer > 0) {
+ gtk_timeout_remove(folderview->spring_timer);
+ folderview->spring_timer = 0;
+ }
+ folderview->spring_node = NULL;
+}
+
+static gint folderview_defer_expand(gpointer data)
+{
+ FolderView *folderview = (FolderView *)data;
+
+ if (folderview->spring_node) {
+ gtk_ctree_expand(GTK_CTREE(folderview->ctree),
+ folderview->spring_node);
+ }
+ folderview_defer_expand_stop(folderview);
+
+ return FALSE;
+}
+
+static gboolean folderview_drag_motion_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ FolderView *folderview)
+{
+ gint row, column;
+ FolderItem *item, *src_item;
+ GtkCTreeNode *node = NULL;
+ gboolean acceptable = FALSE;
+
+ if (gtk_clist_get_selection_info
+ (GTK_CLIST(widget), x - 24, y - 24, &row, &column)) {
+ node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
+ item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
+ src_item = folderview->summaryview->folder_item;
+ if (src_item && src_item != item)
+ acceptable = FOLDER_ITEM_CAN_ADD(item);
+ }
+
+ if (node != folderview->spring_node) {
+ folderview_defer_expand_stop(folderview);
+ if (node && !GTK_CTREE_ROW(node)->expanded &&
+ GTK_CTREE_ROW(node)->children) {
+ folderview->spring_timer =
+ gtk_timeout_add(1000, folderview_defer_expand,
+ folderview);
+ folderview->spring_node = node;
+ }
+ }
+
+ if (acceptable) {
+ g_signal_handlers_block_by_func
+ (G_OBJECT(widget),
+ G_CALLBACK(folderview_selected), folderview);
+ gtk_ctree_select(GTK_CTREE(widget), node);
+ g_signal_handlers_unblock_by_func
+ (G_OBJECT(widget),
+ G_CALLBACK(folderview_selected), folderview);
+ if ((context->actions & GDK_ACTION_MOVE) != 0)
+ gdk_drag_status(context, GDK_ACTION_MOVE, time);
+ else if ((context->actions & GDK_ACTION_COPY) != 0)
+ gdk_drag_status(context, GDK_ACTION_COPY, time);
+ else if ((context->actions & GDK_ACTION_LINK) != 0)
+ gdk_drag_status(context, GDK_ACTION_LINK, time);
+ else
+ gdk_drag_status(context, 0, time);
+ } else {
+ gtk_ctree_select(GTK_CTREE(widget), folderview->opened);
+ gdk_drag_status(context, 0, time);
+ }
+
+ return acceptable;
+}
+
+static void folderview_drag_leave_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ guint time,
+ FolderView *folderview)
+{
+ folderview_defer_expand_stop(folderview);
+ gtk_ctree_select(GTK_CTREE(widget), folderview->opened);
+}
+
+static void folderview_drag_received_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ FolderView *folderview)
+{
+ gint row, column;
+ FolderItem *item, *src_item;
+ GtkCTreeNode *node;
+
+ folderview_defer_expand_stop(folderview);
+
+ if (gtk_clist_get_selection_info
+ (GTK_CLIST(widget), x - 24, y - 24, &row, &column) == 0)
+ return;
+
+ node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
+ item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
+ src_item = folderview->summaryview->folder_item;
+ if (FOLDER_ITEM_CAN_ADD(item) && src_item && src_item != item) {
+ if ((context->actions & GDK_ACTION_MOVE) != 0) {
+ summary_move_selected_to(folderview->summaryview, item);
+ gtk_drag_finish(context, TRUE, TRUE, time);
+ } else if ((context->actions & GDK_ACTION_COPY) != 0) {
+ summary_copy_selected_to(folderview->summaryview, item);
+ gtk_drag_finish(context, TRUE, TRUE, time);
+ } else
+ gtk_drag_finish(context, FALSE, FALSE, time);
+ } else
+ gtk_drag_finish(context, FALSE, FALSE, time);
+}
+
+static gint folderview_clist_compare(GtkCList *clist,
+ gconstpointer ptr1, gconstpointer ptr2)
+{
+ FolderItem *item1 = ((GtkCListRow *)ptr1)->data;
+ FolderItem *item2 = ((GtkCListRow *)ptr2)->data;
+
+ if (!item1->name)
+ return (item2->name != NULL);
+ if (!item2->name)
+ return -1;
+
+ return g_strcasecmp(item1->name, item2->name);
+}
diff --git a/src/folderview.h b/src/folderview.h
new file mode 100644
index 00000000..a56f4b39
--- /dev/null
+++ b/src/folderview.h
@@ -0,0 +1,96 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __FOLDERVIEW_H__
+#define __FOLDERVIEW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkctree.h>
+
+#include "folder.h"
+
+typedef struct _FolderView FolderView;
+
+#include "mainwindow.h"
+#include "summaryview.h"
+
+struct _FolderView
+{
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ GtkWidget *mail_popup;
+ GtkWidget *imap_popup;
+ GtkWidget *news_popup;
+
+ GtkItemFactory *mail_factory;
+ GtkItemFactory *imap_factory;
+ GtkItemFactory *news_factory;
+
+ GtkCTreeNode *selected;
+ GtkCTreeNode *opened;
+
+ GtkCTreeNode *spring_node;
+ guint spring_timer;
+
+ gboolean open_folder;
+
+ GdkColor color_new;
+ GdkColor color_noselect;
+
+ MainWindow *mainwin;
+ SummaryView *summaryview;
+};
+
+FolderView *folderview_create (void);
+void folderview_init (FolderView *folderview);
+
+void folderview_set (FolderView *folderview);
+void folderview_set_all (void);
+
+void folderview_select (FolderView *folderview,
+ FolderItem *item);
+void folderview_unselect (FolderView *folderview);
+void folderview_select_next_unread (FolderView *folderview);
+
+FolderItem *folderview_get_selected_item(FolderView *folderview);
+
+void folderview_update_msg_num (FolderView *folderview,
+ GtkCTreeNode *row);
+
+void folderview_append_item (FolderItem *item);
+
+void folderview_check_new (Folder *folder);
+void folderview_check_new_all (void);
+
+void folderview_update_item (FolderItem *item,
+ gboolean update_summary);
+void folderview_update_item_foreach (GHashTable *table,
+ gboolean update_summary);
+void folderview_update_all_updated (gboolean update_summary);
+
+void folderview_new_folder (FolderView *folderview);
+void folderview_rename_folder (FolderView *folderview);
+void folderview_delete_folder (FolderView *folderview);
+
+void folderview_check_new_selected (FolderView *folderview);
+void folderview_remove_mailbox (FolderView *folderview);
+void folderview_rebuild_tree (FolderView *folderview);
+
+#endif /* __FOLDERVIEW_H__ */
diff --git a/src/grouplistdialog.c b/src/grouplistdialog.c
new file mode 100644
index 00000000..28977514
--- /dev/null
+++ b/src/grouplistdialog.c
@@ -0,0 +1,567 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkhbbox.h>
+#include <string.h>
+#include <fnmatch.h>
+
+#include "intl.h"
+#include "grouplistdialog.h"
+#include "manage_window.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "news.h"
+#include "folder.h"
+#include "alertpanel.h"
+#include "recv.h"
+#include "socket.h"
+
+#define GROUPLIST_DIALOG_WIDTH 450
+#define GROUPLIST_DIALOG_HEIGHT 400
+#define GROUPLIST_COL_NAME_WIDTH 250
+
+static gboolean ack;
+static gboolean locked;
+
+static GtkWidget *dialog;
+static GtkWidget *entry;
+static GtkWidget *ctree;
+static GtkWidget *status_label;
+static GtkWidget *ok_button;
+static GSList *group_list;
+static Folder *news_folder;
+
+static GSList *subscribed;
+
+static void grouplist_dialog_create (void);
+static void grouplist_dialog_set_list (const gchar *pattern,
+ gboolean refresh);
+static void grouplist_search (void);
+static void grouplist_clear (void);
+static gboolean grouplist_recv_func (SockInfo *sock,
+ gint count,
+ gint read_bytes,
+ gpointer data);
+
+static gint window_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static void ok_clicked (GtkWidget *widget,
+ gpointer data);
+static void cancel_clicked (GtkWidget *widget,
+ gpointer data);
+static void refresh_clicked (GtkWidget *widget,
+ gpointer data);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void ctree_selected (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gint column,
+ gpointer data);
+static void ctree_unselected (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gint column,
+ gpointer data);
+static void entry_activated (GtkEditable *editable);
+static void search_clicked (GtkWidget *widget,
+ gpointer data);
+
+GSList *grouplist_dialog(Folder *folder)
+{
+ GNode *node;
+ FolderItem *item;
+
+ if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL;
+
+ if (!dialog)
+ grouplist_dialog_create();
+
+ news_folder = folder;
+
+ gtk_widget_show(dialog);
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+ manage_window_set_transient(GTK_WINDOW(dialog));
+ gtk_widget_grab_focus(ok_button);
+ gtk_widget_grab_focus(ctree);
+ GTK_EVENTS_FLUSH();
+
+ subscribed = NULL;
+ for (node = folder->node->children; node != NULL; node = node->next) {
+ item = FOLDER_ITEM(node->data);
+ subscribed = g_slist_append(subscribed, g_strdup(item->path));
+ }
+
+ grouplist_dialog_set_list(NULL, TRUE);
+
+ if (ack) gtk_main();
+
+ manage_window_focus_out(dialog, NULL, NULL);
+ gtk_widget_hide(dialog);
+
+ if (!ack) {
+ slist_free_strings(subscribed);
+ g_slist_free(subscribed);
+ subscribed = NULL;
+
+ for (node = folder->node->children; node != NULL;
+ node = node->next) {
+ item = FOLDER_ITEM(node->data);
+ subscribed = g_slist_append(subscribed,
+ g_strdup(item->path));
+ }
+ }
+
+ grouplist_clear();
+
+ return subscribed;
+}
+
+static void grouplist_dialog_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *msg_label;
+ GtkWidget *search_button;
+ GtkWidget *confirm_area;
+ GtkWidget *cancel_button;
+ GtkWidget *refresh_button;
+ GtkWidget *scrolledwin;
+ gchar *titles[3];
+ gint i;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE);
+ gtk_widget_set_size_request(dialog,
+ GROUPLIST_DIALOG_WIDTH,
+ GROUPLIST_DIALOG_HEIGHT);
+ gtk_container_set_border_width
+ (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Subscribe to newsgroup"));
+ g_signal_connect(G_OBJECT(dialog), "delete_event",
+ G_CALLBACK(window_deleted), NULL);
+ g_signal_connect(G_OBJECT(dialog), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog);
+
+ gtk_widget_realize(dialog);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ msg_label = gtk_label_new(_("Select newsgroups to subscribe."));
+ gtk_box_pack_start(GTK_BOX(hbox), msg_label, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ msg_label = gtk_label_new(_("Find groups:"));
+ gtk_box_pack_start(GTK_BOX(hbox), msg_label, FALSE, FALSE, 0);
+
+ entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(entry), "activate",
+ G_CALLBACK(entry_activated), NULL);
+
+ search_button = gtk_button_new_with_label(_(" Search "));
+ gtk_box_pack_start(GTK_BOX(hbox), search_button, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(search_button), "clicked",
+ G_CALLBACK(search_clicked), NULL);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_box_pack_start(GTK_BOX (vbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ titles[0] = _("Newsgroup name");
+ titles[1] = _("Messages");
+ titles[2] = _("Type");
+ ctree = gtk_ctree_new_with_titles(3, 0, titles);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+ gtk_clist_set_column_width
+ (GTK_CLIST(ctree), 0, GROUPLIST_COL_NAME_WIDTH);
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_MULTIPLE);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_SQUARE);
+ for (i = 0; i < 3; i++)
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(ctree_selected), NULL);
+ g_signal_connect(G_OBJECT(ctree), "tree_unselect_row",
+ G_CALLBACK(ctree_unselected), NULL);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ status_label = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox), status_label, FALSE, FALSE, 0);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_button, _("OK"),
+ &cancel_button, _("Cancel"),
+ &refresh_button, _("Refresh"));
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
+ confirm_area);
+ gtk_widget_grab_default(ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(ok_clicked), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(cancel_clicked), NULL);
+ g_signal_connect(G_OBJECT(refresh_button), "clicked",
+ G_CALLBACK(refresh_clicked), NULL);
+
+ gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
+}
+
+static GHashTable *branch_node_table;
+
+static void grouplist_hash_init(void)
+{
+ branch_node_table = g_hash_table_new(g_str_hash, g_str_equal);
+}
+
+static void grouplist_hash_done(void)
+{
+ hash_free_strings(branch_node_table);
+ g_hash_table_destroy(branch_node_table);
+}
+
+static GtkCTreeNode *grouplist_hash_get_branch_node(const gchar *name)
+{
+ return g_hash_table_lookup(branch_node_table, name);
+}
+
+static void grouplist_hash_set_branch_node(const gchar *name,
+ GtkCTreeNode *node)
+{
+ g_hash_table_insert(branch_node_table, g_strdup(name), node);
+}
+
+static gchar *grouplist_get_parent_name(const gchar *name)
+{
+ gchar *p;
+
+ p = strrchr(name, '.');
+ if (!p)
+ return g_strdup("");
+ return g_strndup(name, p - name);
+}
+
+static GtkCTreeNode *grouplist_create_parent(const gchar *name,
+ const gchar *pattern)
+{
+ GtkCTreeNode *parent;
+ GtkCTreeNode *node;
+ gchar *cols[3];
+ gchar *parent_name;
+
+ if (*name == '\0') return NULL;
+ node = grouplist_hash_get_branch_node(name);
+ if (node != NULL) return node;
+
+ cols[0] = (gchar *)name;
+ cols[1] = cols[2] = "";
+
+ parent_name = grouplist_get_parent_name(name);
+ parent = grouplist_create_parent(parent_name, pattern);
+
+ node = parent ? GTK_CTREE_ROW(parent)->children
+ : GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node = gtk_ctree_insert_node(GTK_CTREE(ctree), parent, node,
+ cols, 0, NULL, NULL, NULL, NULL,
+ FALSE, FALSE);
+ if (parent && fnmatch(pattern, parent_name, 0) != 0)
+ gtk_ctree_expand(GTK_CTREE(ctree), parent);
+ gtk_ctree_node_set_selectable(GTK_CTREE(ctree), node, FALSE);
+
+ grouplist_hash_set_branch_node(name, node);
+
+ g_free(parent_name);
+
+ return node;
+}
+
+static GtkCTreeNode *grouplist_create_branch(NewsGroupInfo *ginfo,
+ const gchar *pattern)
+{
+ GtkCTreeNode *node;
+ GtkCTreeNode *parent;
+ gchar *name = (gchar *)ginfo->name;
+ gchar *parent_name;
+ gchar *count_str;
+ gchar *cols[3];
+ gint count;
+
+ count = ginfo->last - ginfo->first;
+ if (count < 0)
+ count = 0;
+ count_str = itos(count);
+
+ cols[0] = ginfo->name;
+ cols[1] = count_str;
+ if (ginfo->type == 'y')
+ cols[2] = "";
+ else if (ginfo->type == 'm')
+ cols[2] = _("moderated");
+ else if (ginfo->type == 'n')
+ cols[2] = _("readonly");
+ else
+ cols[2] = _("unknown");
+
+ parent_name = grouplist_get_parent_name(name);
+ parent = grouplist_create_parent(parent_name, pattern);
+ node = grouplist_hash_get_branch_node(name);
+ if (node) {
+ gtk_ctree_set_node_info(GTK_CTREE(ctree), node, cols[0], 0,
+ NULL, NULL, NULL, NULL, FALSE, FALSE);
+ gtk_ctree_node_set_text(GTK_CTREE(ctree), node, 1, cols[1]);
+ gtk_ctree_node_set_text(GTK_CTREE(ctree), node, 2, cols[2]);
+ } else {
+ node = parent ? GTK_CTREE_ROW(parent)->children
+ : GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node = gtk_ctree_insert_node(GTK_CTREE(ctree), parent, node,
+ cols, 0, NULL, NULL, NULL, NULL,
+ TRUE, FALSE);
+ if (parent && fnmatch(pattern, parent_name, 0) != 0)
+ gtk_ctree_expand(GTK_CTREE(ctree), parent);
+ }
+ gtk_ctree_node_set_selectable(GTK_CTREE(ctree), node, TRUE);
+ if (node)
+ gtk_ctree_node_set_row_data(GTK_CTREE(ctree), node, ginfo);
+
+ g_free(parent_name);
+
+ return node;
+}
+
+static void grouplist_dialog_set_list(const gchar *pattern, gboolean refresh)
+{
+ GSList *cur;
+ GtkCTreeNode *node;
+
+ if (locked) return;
+ locked = TRUE;
+
+ if (!pattern || *pattern == '\0')
+ pattern = "*";
+
+ if (refresh) {
+ ack = TRUE;
+ grouplist_clear();
+ recv_set_ui_func(grouplist_recv_func, NULL);
+ group_list = news_get_group_list(news_folder);
+ group_list = g_slist_reverse(group_list);
+ recv_set_ui_func(NULL, NULL);
+ if (group_list == NULL && ack == TRUE) {
+ alertpanel_error(_("Can't retrieve newsgroup list."));
+ locked = FALSE;
+ return;
+ }
+ } else {
+ g_signal_handlers_block_by_func
+ (G_OBJECT(ctree), G_CALLBACK(ctree_unselected),
+ NULL);
+ gtk_clist_clear(GTK_CLIST(ctree));
+ g_signal_handlers_unblock_by_func
+ (G_OBJECT(ctree), G_CALLBACK(ctree_unselected),
+ NULL);
+ }
+ gtk_entry_set_text(GTK_ENTRY(entry), pattern);
+
+ grouplist_hash_init();
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ g_signal_handlers_block_by_func(G_OBJECT(ctree),
+ G_CALLBACK(ctree_selected), NULL);
+
+ for (cur = group_list; cur != NULL ; cur = cur->next) {
+ NewsGroupInfo *ginfo = (NewsGroupInfo *)cur->data;
+
+ if (fnmatch(pattern, ginfo->name, 0) == 0) {
+ node = grouplist_create_branch(ginfo, pattern);
+ if (g_slist_find_custom(subscribed, ginfo->name,
+ (GCompareFunc)g_strcasecmp)
+ != NULL)
+ gtk_ctree_select(GTK_CTREE(ctree), node);
+ }
+ }
+
+ g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
+ G_CALLBACK(ctree_selected), NULL);
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ grouplist_hash_done();
+
+ gtk_label_set_text(GTK_LABEL(status_label), _("Done."));
+
+ locked = FALSE;
+}
+
+static void grouplist_search(void)
+{
+ gchar *str;
+
+ if (locked) return;
+
+ str = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
+ grouplist_dialog_set_list(str, FALSE);
+ g_free(str);
+}
+
+static void grouplist_clear(void)
+{
+ g_signal_handlers_block_by_func(G_OBJECT(ctree),
+ G_CALLBACK(ctree_unselected), NULL);
+ gtk_clist_clear(GTK_CLIST(ctree));
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ news_group_list_free(group_list);
+ group_list = NULL;
+ g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
+ G_CALLBACK(ctree_unselected), NULL);
+}
+
+static gboolean grouplist_recv_func(SockInfo *sock, gint count, gint read_bytes,
+ gpointer data)
+{
+ gchar buf[BUFFSIZE];
+
+ g_snprintf(buf, sizeof(buf),
+ _("%d newsgroups received (%s read)"),
+ count, to_human_readable(read_bytes));
+ gtk_label_set_text(GTK_LABEL(status_label), buf);
+ GTK_EVENTS_FLUSH();
+ if (ack == FALSE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static gint window_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ ack = FALSE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+
+ return TRUE;
+}
+
+static void ok_clicked(GtkWidget *widget, gpointer data)
+{
+ ack = TRUE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void cancel_clicked(GtkWidget *widget, gpointer data)
+{
+ ack = FALSE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void refresh_clicked(GtkWidget *widget, gpointer data)
+{
+ gchar *str;
+
+ if (locked) return;
+
+ news_remove_group_list_cache(news_folder);
+
+ str = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
+ grouplist_dialog_set_list(str, TRUE);
+ g_free(str);
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ cancel_clicked(NULL, NULL);
+ return FALSE;
+}
+
+static void ctree_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column,
+ gpointer data)
+{
+ NewsGroupInfo *ginfo;
+
+ ginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (!ginfo) return;
+
+ subscribed = g_slist_append(subscribed, g_strdup(ginfo->name));
+}
+
+static void ctree_unselected(GtkCTree *ctree, GtkCTreeNode *node, gint column,
+ gpointer data)
+{
+ NewsGroupInfo *ginfo;
+ GSList *list;
+
+ ginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (!ginfo) return;
+
+ list = g_slist_find_custom(subscribed, ginfo->name,
+ (GCompareFunc)g_strcasecmp);
+ if (list) {
+ g_free(list->data);
+ subscribed = g_slist_remove(subscribed, list->data);
+ }
+}
+
+static void entry_activated(GtkEditable *editable)
+{
+ grouplist_search();
+}
+
+static void search_clicked(GtkWidget *widget, gpointer data)
+{
+ grouplist_search();
+}
diff --git a/src/grouplistdialog.h b/src/grouplistdialog.h
new file mode 100644
index 00000000..87433059
--- /dev/null
+++ b/src/grouplistdialog.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GROUPLISTDIALOG_H__
+#define __GROUPLISTDIALOG_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+GSList *grouplist_dialog (Folder *folder);
+
+#endif /* __GROUPLISTDIALOG_H__ */
diff --git a/src/gtksctree.c b/src/gtksctree.c
new file mode 100644
index 00000000..eddb52fc
--- /dev/null
+++ b/src/gtksctree.c
@@ -0,0 +1,573 @@
+/*
+ * This program is based on gtkflist.c
+ */
+
+#include "gtksctree.h"
+#include "sylpheed-marshal.h"
+
+enum {
+ ROW_POPUP_MENU,
+ EMPTY_POPUP_MENU,
+ OPEN_ROW,
+ START_DRAG,
+ LAST_SIGNAL
+};
+
+
+static void gtk_sctree_class_init (GtkSCTreeClass *class);
+static void gtk_sctree_init (GtkSCTree *sctree);
+
+static gint gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event);
+static gint gtk_sctree_button_release (GtkWidget *widget, GdkEventButton *event);
+static gint gtk_sctree_motion (GtkWidget *widget, GdkEventMotion *event);
+static void gtk_sctree_drag_begin (GtkWidget *widget, GdkDragContext *context);
+static void gtk_sctree_drag_end (GtkWidget *widget, GdkDragContext *context);
+static void gtk_sctree_drag_data_get (GtkWidget *widget, GdkDragContext *context,
+ GtkSelectionData *data, guint info, guint time);
+static void gtk_sctree_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time);
+static gboolean gtk_sctree_drag_motion (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, guint time);
+static gboolean gtk_sctree_drag_drop (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, guint time);
+static void gtk_sctree_drag_data_received (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, GtkSelectionData *data,
+ guint info, guint time);
+
+static void gtk_sctree_clear (GtkCList *clist);
+static void gtk_sctree_collapse (GtkCTree *ctree, GtkCTreeNode *node);
+
+static GtkCTreeClass *parent_class;
+
+static guint sctree_signals[LAST_SIGNAL];
+
+
+/**
+ * gtk_sctree_get_type:
+ * @void:
+ *
+ * Creates the GtkSCTree class and its type information
+ *
+ * Return value: The type ID for GtkSCTreeClass
+ **/
+GType
+gtk_sctree_get_type (void)
+{
+ static GType sctree_type = 0;
+
+ if (!sctree_type) {
+ GTypeInfo sctree_info = {
+ sizeof (GtkSCTreeClass),
+
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+
+ (GClassInitFunc) gtk_sctree_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+
+ sizeof (GtkSCTree),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gtk_sctree_init,
+ };
+
+ sctree_type = g_type_register_static (GTK_TYPE_CTREE, "GtkSCTree", &sctree_info, (GTypeFlags)0);
+ }
+
+ return sctree_type;
+}
+
+/* Standard class initialization function */
+static void
+gtk_sctree_class_init (GtkSCTreeClass *klass)
+{
+ GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkCListClass *clist_class;
+ GtkCTreeClass *ctree_class;
+
+ object_class = (GtkObjectClass *) klass;
+ widget_class = (GtkWidgetClass *) klass;
+ clist_class = (GtkCListClass *) klass;
+ ctree_class = (GtkCTreeClass *) klass;
+
+ parent_class = gtk_type_class (gtk_ctree_get_type ());
+
+ sctree_signals[ROW_POPUP_MENU] =
+ g_signal_new ("row_popup_menu",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkSCTreeClass, row_popup_menu),
+ NULL, NULL,
+ sylpheed_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ GDK_TYPE_EVENT);
+ sctree_signals[EMPTY_POPUP_MENU] =
+ g_signal_new ("empty_popup_menu",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkSCTreeClass, empty_popup_menu),
+ NULL, NULL,
+ sylpheed_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ GDK_TYPE_EVENT);
+ sctree_signals[OPEN_ROW] =
+ g_signal_new ("open_row",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkSCTreeClass, open_row),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ sctree_signals[START_DRAG] =
+ g_signal_new ("start_drag",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkSCTreeClass, start_drag),
+ NULL, NULL,
+ sylpheed_marshal_VOID__INT_POINTER,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT,
+ GDK_TYPE_EVENT);
+
+ /* gtk_object_class_add_signals (object_class, sctree_signals, LAST_SIGNAL); */
+
+ clist_class->clear = gtk_sctree_clear;
+ ctree_class->tree_collapse = gtk_sctree_collapse;
+
+ widget_class->button_press_event = gtk_sctree_button_press;
+ widget_class->button_release_event = gtk_sctree_button_release;
+ widget_class->motion_notify_event = gtk_sctree_motion;
+ widget_class->drag_begin = gtk_sctree_drag_begin;
+ widget_class->drag_end = gtk_sctree_drag_end;
+ widget_class->drag_data_get = gtk_sctree_drag_data_get;
+ widget_class->drag_leave = gtk_sctree_drag_leave;
+ widget_class->drag_motion = gtk_sctree_drag_motion;
+ widget_class->drag_drop = gtk_sctree_drag_drop;
+ widget_class->drag_data_received = gtk_sctree_drag_data_received;
+}
+
+/* Standard object initialization function */
+static void
+gtk_sctree_init (GtkSCTree *sctree)
+{
+ sctree->anchor_row = NULL;
+
+ /* GtkCTree does not specify pointer motion by default */
+ gtk_widget_add_events (GTK_WIDGET (sctree), GDK_POINTER_MOTION_MASK);
+ gtk_widget_add_events (GTK_WIDGET (sctree), GDK_POINTER_MOTION_MASK);
+}
+
+/* Get information the specified row is selected. */
+
+static gboolean
+row_is_selected(GtkSCTree *sctree, gint row)
+{
+ GtkCListRow *clist_row;
+ clist_row = g_list_nth (GTK_CLIST(sctree)->row_list, row)->data;
+ return clist_row ? clist_row->state == GTK_STATE_SELECTED : FALSE;
+}
+
+/* Selects the rows between the anchor to the specified row, inclusive. */
+static void
+select_range (GtkSCTree *sctree, gint row)
+{
+ gint prev_row;
+ gint min, max;
+ gint i;
+
+ if (sctree->anchor_row == NULL) {
+ prev_row = row;
+ sctree->anchor_row = gtk_ctree_node_nth(GTK_CTREE(sctree), row);
+ } else
+ prev_row = g_list_position(GTK_CLIST(sctree)->row_list,
+ (GList *)sctree->anchor_row);
+
+ if (row < prev_row) {
+ min = row;
+ max = prev_row;
+ } else {
+ min = prev_row;
+ max = row;
+ }
+ for (i = min; i <= max; i++)
+ gtk_clist_select_row (GTK_CLIST (sctree), i, -1);
+}
+
+/* Handles row selection according to the specified modifier state */
+static void
+select_row (GtkSCTree *sctree, gint row, gint col, guint state)
+{
+ gboolean range, additive;
+ g_return_if_fail (sctree != NULL);
+ g_return_if_fail (GTK_IS_SCTREE (sctree));
+
+ range = ((state & GDK_SHIFT_MASK) != 0) &&
+ (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_SINGLE) &&
+ (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_BROWSE);
+ additive = ((state & GDK_CONTROL_MASK) != 0) &&
+ (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_SINGLE) &&
+ (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_BROWSE);
+
+ gtk_clist_freeze (GTK_CLIST (sctree));
+ GTK_CLIST(sctree)->focus_row = row;
+ GTK_CLIST_GET_CLASS(sctree)->refresh(GTK_CLIST(sctree));
+ if (!additive)
+ gtk_clist_unselect_all (GTK_CLIST (sctree));
+
+ if (!range) {
+ GtkCTreeNode *node;
+
+ node = gtk_ctree_node_nth (GTK_CTREE(sctree), row);
+
+ /*No need to manage overlapped list*/
+ if (additive) {
+ if (row_is_selected(sctree, row))
+ gtk_clist_unselect_row (GTK_CLIST (sctree), row, col);
+ else
+ g_signal_emit_by_name
+ (G_OBJECT (sctree),
+ "tree_select_row", node, col);
+ } else {
+ g_signal_emit_by_name
+ (G_OBJECT (sctree),
+ "tree_select_row", node, col);
+ }
+ sctree->anchor_row = node;
+ } else
+ select_range (sctree, row);
+ gtk_clist_thaw (GTK_CLIST (sctree));
+}
+
+/* Our handler for button_press events. We override all of GtkCList's broken
+ * behavior.
+ */
+static gint
+gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event)
+{
+ GtkSCTree *sctree;
+ GtkCList *clist;
+ gboolean on_row;
+ gint row;
+ gint col;
+ gint retval;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ sctree = GTK_SCTREE (widget);
+ clist = GTK_CLIST (widget);
+ retval = FALSE;
+
+ if (event->window != clist->clist_window)
+ return (* GTK_WIDGET_CLASS (parent_class)->button_press_event) (widget, event);
+
+ on_row = gtk_clist_get_selection_info (clist, event->x, event->y, &row, &col);
+
+ if (on_row && !GTK_WIDGET_HAS_FOCUS(widget))
+ gtk_widget_grab_focus (widget);
+
+ if (gtk_ctree_is_hot_spot (GTK_CTREE(sctree), event->x, event->y)) {
+ gtk_ctree_toggle_expansion
+ (GTK_CTREE(sctree),
+ gtk_ctree_node_nth(GTK_CTREE(sctree), row));
+ return TRUE;
+ }
+
+ switch (event->type) {
+ case GDK_BUTTON_PRESS:
+ if (event->button == 1 || event->button == 2) {
+ if (event->button == 2)
+ event->state &= ~(GDK_SHIFT_MASK | GDK_CONTROL_MASK);
+ if (on_row) {
+ /* Save the mouse info for DnD */
+ sctree->dnd_press_button = event->button;
+ sctree->dnd_press_x = event->x;
+ sctree->dnd_press_y = event->y;
+
+ /* Handle selection */
+ if ((row_is_selected (sctree, row)
+ && !(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)))
+ || ((event->state & GDK_CONTROL_MASK)
+ && !(event->state & GDK_SHIFT_MASK))) {
+ sctree->dnd_select_pending = TRUE;
+ sctree->dnd_select_pending_state = event->state;
+ sctree->dnd_select_pending_row = row;
+ } else
+ select_row (sctree, row, col, event->state);
+ } else
+ gtk_clist_unselect_all (clist);
+
+ retval = TRUE;
+ } else if (event->button == 3) {
+ /* Emit *_popup_menu signal*/
+ if (on_row) {
+ if (!row_is_selected(sctree,row))
+ select_row (sctree, row, col, 0);
+ g_signal_emit (G_OBJECT (sctree),
+ sctree_signals[ROW_POPUP_MENU],
+ 0, event);
+ } else {
+ gtk_clist_unselect_all(clist);
+ g_signal_emit (G_OBJECT (sctree),
+ sctree_signals[EMPTY_POPUP_MENU],
+ 0, event);
+ }
+ retval = TRUE;
+ }
+
+ break;
+
+ case GDK_2BUTTON_PRESS:
+ if (event->button != 1)
+ break;
+
+ sctree->dnd_select_pending = FALSE;
+ sctree->dnd_select_pending_state = 0;
+
+ if (on_row)
+ g_signal_emit (G_OBJECT (sctree),
+ sctree_signals[OPEN_ROW], 0);
+
+ retval = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ return retval;
+}
+
+/* Our handler for button_release events. We override all of GtkCList's broken
+ * behavior.
+ */
+static gint
+gtk_sctree_button_release (GtkWidget *widget, GdkEventButton *event)
+{
+ GtkSCTree *sctree;
+ GtkCList *clist;
+ gint on_row;
+ gint row, col;
+ gint retval;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ sctree = GTK_SCTREE (widget);
+ clist = GTK_CLIST (widget);
+ retval = FALSE;
+
+ if (event->window != clist->clist_window)
+ return (* GTK_WIDGET_CLASS (parent_class)->button_release_event) (widget, event);
+
+ on_row = gtk_clist_get_selection_info (clist, event->x, event->y, &row, &col);
+
+ if (!(event->button == 1 || event->button == 2))
+ return FALSE;
+
+ sctree->dnd_press_button = 0;
+ sctree->dnd_press_x = 0;
+ sctree->dnd_press_y = 0;
+
+ if (on_row) {
+ if (sctree->dnd_select_pending) {
+ select_row (sctree, row, col, sctree->dnd_select_pending_state);
+ sctree->dnd_select_pending = FALSE;
+ sctree->dnd_select_pending_state = 0;
+ }
+
+ retval = TRUE;
+ }
+
+ return retval;
+}
+
+/* Our handler for motion_notify events. We override all of GtkCList's broken
+ * behavior.
+ */
+static gint
+gtk_sctree_motion (GtkWidget *widget, GdkEventMotion *event)
+{
+ GtkSCTree *sctree;
+ GtkCList *clist;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ sctree = GTK_SCTREE (widget);
+ clist = GTK_CLIST (widget);
+
+ if (event->window != clist->clist_window)
+ return (* GTK_WIDGET_CLASS (parent_class)->motion_notify_event) (widget, event);
+
+ if (!((sctree->dnd_press_button == 1 && (event->state & GDK_BUTTON1_MASK))
+ || (sctree->dnd_press_button == 2 && (event->state & GDK_BUTTON2_MASK))))
+ return FALSE;
+
+ /* This is the same threshold value that is used in gtkdnd.c */
+
+ if (MAX (ABS (sctree->dnd_press_x - event->x),
+ ABS (sctree->dnd_press_y - event->y)) <= 3)
+ return FALSE;
+
+ /* Handle any pending selections */
+
+ if (sctree->dnd_select_pending) {
+ if (!row_is_selected(sctree,sctree->dnd_select_pending_row))
+ select_row (sctree,
+ sctree->dnd_select_pending_row,
+ -1,
+ sctree->dnd_select_pending_state);
+
+ sctree->dnd_select_pending = FALSE;
+ sctree->dnd_select_pending_state = 0;
+ }
+
+ g_signal_emit (G_OBJECT (sctree),
+ sctree_signals[START_DRAG],
+ 0,
+ sctree->dnd_press_button,
+ event);
+ return TRUE;
+}
+
+/* We override the drag_begin signal to do nothing */
+static void
+gtk_sctree_drag_begin (GtkWidget *widget, GdkDragContext *context)
+{
+ /* nothing */
+}
+
+/* We override the drag_end signal to do nothing */
+static void
+gtk_sctree_drag_end (GtkWidget *widget, GdkDragContext *context)
+{
+ /* nothing */
+}
+
+/* We override the drag_data_get signal to do nothing */
+static void
+gtk_sctree_drag_data_get (GtkWidget *widget, GdkDragContext *context,
+ GtkSelectionData *data, guint info, guint time)
+{
+ /* nothing */
+}
+
+/* We override the drag_leave signal to do nothing */
+static void
+gtk_sctree_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time)
+{
+ /* nothing */
+}
+
+/* We override the drag_motion signal to do nothing */
+static gboolean
+gtk_sctree_drag_motion (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, guint time)
+{
+ return FALSE;
+}
+
+/* We override the drag_drop signal to do nothing */
+static gboolean
+gtk_sctree_drag_drop (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, guint time)
+{
+ return FALSE;
+}
+
+/* We override the drag_data_received signal to do nothing */
+static void
+gtk_sctree_drag_data_received (GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, GtkSelectionData *data,
+ guint info, guint time)
+{
+ /* nothing */
+}
+
+/* Our handler for the clear signal of the clist. We have to reset the anchor
+ * to null.
+ */
+static void
+gtk_sctree_clear (GtkCList *clist)
+{
+ GtkSCTree *sctree;
+
+ g_return_if_fail (clist != NULL);
+ g_return_if_fail (GTK_IS_SCTREE (clist));
+
+ sctree = GTK_SCTREE (clist);
+ sctree->anchor_row = NULL;
+
+ if (((GtkCListClass *)parent_class)->clear)
+ (* ((GtkCListClass *)parent_class)->clear) (clist);
+}
+
+/* Our handler for the change_focus_row_expansion signal of the ctree.
+ We have to set the anchor to parent visible node.
+ */
+static void
+gtk_sctree_collapse (GtkCTree *ctree, GtkCTreeNode *node)
+{
+ g_return_if_fail (ctree != NULL);
+ g_return_if_fail (GTK_IS_SCTREE (ctree));
+
+ (* parent_class->tree_collapse) (ctree, node);
+ GTK_SCTREE(ctree)->anchor_row =
+ gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->focus_row);
+}
+
+GtkWidget *gtk_sctree_new_with_titles (gint columns, gint tree_column,
+ gchar *titles[])
+{
+#if 0
+ GtkSCTree* sctree;
+
+ sctree = gtk_type_new (gtk_sctree_get_type ());
+ gtk_ctree_construct (GTK_CTREE (sctree), columns, tree_column, titles);
+ gtk_clist_set_selection_mode(GTK_CLIST(sctree), GTK_SELECTION_EXTENDED);
+
+ return GTK_WIDGET (sctree);
+#else
+ GtkWidget *widget;
+
+ g_return_val_if_fail (columns > 0, NULL);
+ g_return_val_if_fail (tree_column >= 0 && tree_column < columns, NULL);
+
+ widget = gtk_widget_new (TYPE_GTK_SCTREE,
+ "n_columns", columns,
+ "tree_column", tree_column,
+ NULL);
+ if (titles) {
+ GtkCList *clist = GTK_CLIST (widget);
+ guint i;
+
+ for (i = 0; i < columns; i++)
+ gtk_clist_set_column_title (clist, i, titles[i]);
+ gtk_clist_column_titles_show (clist);
+ }
+
+ return widget;
+#endif
+}
+
+void gtk_sctree_select (GtkSCTree *sctree, GtkCTreeNode *node)
+{
+ select_row(sctree,
+ g_list_position(GTK_CLIST(sctree)->row_list, (GList *)node),
+ -1, 0);
+}
+
+void gtk_sctree_unselect_all (GtkSCTree *sctree)
+{
+ gtk_clist_unselect_all(GTK_CLIST(sctree));
+ sctree->anchor_row = NULL;
+}
+
+void gtk_sctree_set_anchor_row (GtkSCTree *sctree, GtkCTreeNode *node)
+{
+ sctree->anchor_row = node;
+}
diff --git a/src/gtksctree.h b/src/gtksctree.h
new file mode 100644
index 00000000..af836780
--- /dev/null
+++ b/src/gtksctree.h
@@ -0,0 +1,66 @@
+/* Mail Summary tree widget for Sylpheed */
+
+#ifndef __GTK_SCTREE_H__
+#define __GTK_SCTREE_H__
+
+#include <gtk/gtk.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtkctree.h>
+
+/* This code is based on "gtkflist.{h,c}" from mc-4.5.42 .*/
+
+#define TYPE_GTK_SCTREE (gtk_sctree_get_type ())
+#define GTK_SCTREE(obj) (GTK_CHECK_CAST ((obj), TYPE_GTK_SCTREE, GtkSCTree))
+#define GTK_SCTREE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_GTK_SCTREE, GtkSCTreeClass))
+#define GTK_IS_SCTREE(obj) (GTK_CHECK_TYPE ((obj), TYPE_GTK_SCTREE))
+#define GTK_IS_SCTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_GTK_SCTREE))
+
+
+typedef struct _GtkSCTree GtkSCTree;
+typedef struct _GtkSCTreeClass GtkSCTreeClass;
+
+struct _GtkSCTree {
+ GtkCTree ctree;
+
+ /* The anchor row for range selections */
+ GtkCTreeNode *anchor_row;
+
+ /* Mouse button and position saved on button press */
+ gint dnd_press_button;
+ gint dnd_press_x, dnd_press_y;
+
+ /* Delayed selection information */
+ gint dnd_select_pending;
+ guint dnd_select_pending_state;
+ gint dnd_select_pending_row;
+};
+
+struct _GtkSCTreeClass {
+ GtkCTreeClass parent_class;
+
+ /* Signal: invoke the popup menu for rows */
+ void (* row_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
+
+ /* Signal: invoke the popup menu for empty areas */
+ void (* empty_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
+
+ /* Signal: open the file in the selected row */
+ void (* open_row) (GtkSCTree *sctree);
+
+ /* Signal: initiate a drag and drop operation */
+ void (* start_drag) (GtkSCTree *sctree, gint button, GdkEvent *event);
+};
+
+
+GType gtk_sctree_get_type (void);
+GtkWidget *gtk_sctree_new_with_titles (gint columns,
+ gint tree_column,
+ gchar *titles[]);
+void gtk_sctree_select (GtkSCTree *sctree,
+ GtkCTreeNode *node);
+void gtk_sctree_unselect_all (GtkSCTree *sctree);
+
+void gtk_sctree_set_anchor_row (GtkSCTree *sctree,
+ GtkCTreeNode *node);
+
+#endif /* __GTK_SCTREE_H__ */
diff --git a/src/gtkshruler.c b/src/gtkshruler.c
new file mode 100644
index 00000000..1e350a58
--- /dev/null
+++ b/src/gtkshruler.c
@@ -0,0 +1,218 @@
+/* GtkSHRuler
+ *
+ * Copyright (C) 2000-2004 Alfons Hoogervorst & The Sylpheed Claws Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* I derived this class from hruler. S in HRuler could be read as
+ * Sylpheed (sylpheed.good-day.net), but also [S]ettable HRuler.
+ * I basically ripped apart the draw_ticks member of HRuler; it
+ * now draws the ticks at ruler->max_size. so gtk_ruler_set_range's
+ * last parameter has the distance between two ticks (which is
+ * the width of the fixed font character!
+ *
+ * -- Alfons
+ */
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtkhruler.h>
+#include "gtkshruler.h"
+
+#define RULER_HEIGHT 14
+#define MINIMUM_INCR 5
+#define MAXIMUM_SUBDIVIDE 5
+#define MAXIMUM_SCALES 10
+
+#define ROUND(x) ((int) ((x) + 0.5))
+
+static void gtk_shruler_class_init (GtkSHRulerClass *klass);
+static void gtk_shruler_init (GtkSHRuler *hruler);
+#if 0
+static gint gtk_shruler_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event);
+#endif
+static void gtk_shruler_draw_ticks (GtkRuler *ruler);
+#if 0
+static void gtk_shruler_draw_pos (GtkRuler *ruler);
+#endif
+
+GType
+gtk_shruler_get_type(void)
+{
+ static GType shruler_type = 0;
+
+ if ( !shruler_type ) {
+ static const GTypeInfo shruler_info = {
+ sizeof (GtkSHRulerClass),
+
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+
+ (GClassInitFunc) gtk_shruler_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+
+ sizeof (GtkSHRuler),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gtk_shruler_init,
+ };
+ /* inherit from GtkHRuler */
+ shruler_type = g_type_register_static ( GTK_TYPE_HRULER, "GtkSHRuler", &shruler_info, (GTypeFlags) 0 );
+ }
+ return shruler_type;
+}
+
+static void
+gtk_shruler_class_init(GtkSHRulerClass * klass)
+{
+ GtkWidgetClass * widget_class;
+ GtkRulerClass * hruler_class;
+
+ widget_class = (GtkWidgetClass*) klass;
+ hruler_class = (GtkRulerClass*) klass;
+
+ /* just neglect motion notify events */
+ widget_class->motion_notify_event = NULL /* gtk_shruler_motion_notify */;
+
+ /* we want the old ruler draw ticks... */
+ /* ruler_class->draw_ticks = gtk_hruler_draw_ticks; */
+ hruler_class->draw_ticks = gtk_shruler_draw_ticks;
+
+ /* unimplemented draw pos */
+ hruler_class->draw_pos = NULL;
+/*
+ hruler_class->draw_pos = gtk_shruler_draw_pos;
+*/
+}
+
+static void
+gtk_shruler_init (GtkSHRuler * shruler)
+{
+ GtkWidget * widget;
+
+ widget = GTK_WIDGET (shruler);
+ widget->requisition.width = widget->style->xthickness * 2 + 1;
+ widget->requisition.height = widget->style->ythickness * 2 + RULER_HEIGHT;
+}
+
+
+GtkWidget*
+gtk_shruler_new(void)
+{
+ return GTK_WIDGET( g_object_new( gtk_shruler_get_type(), NULL ) );
+}
+
+#if 0
+static gint
+gtk_shruler_motion_notify(GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ /* I could have perhaps set this to NULL */
+ return FALSE;
+}
+#endif
+
+static void
+gtk_shruler_draw_ticks(GtkRuler *ruler)
+{
+ GtkWidget *widget;
+ GdkGC *gc, *bg_gc;
+ GdkFont *font;
+ gint i;
+ gint width, height;
+ gint xthickness;
+ gint ythickness;
+ gint pos;
+
+ g_return_if_fail (ruler != NULL);
+ g_return_if_fail (GTK_IS_HRULER (ruler));
+
+ if (!GTK_WIDGET_DRAWABLE (ruler))
+ return;
+
+ widget = GTK_WIDGET (ruler);
+
+ gc = widget->style->fg_gc[GTK_STATE_NORMAL];
+ bg_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
+ font = gtk_style_get_font(widget->style);
+
+ xthickness = widget->style->xthickness;
+ ythickness = widget->style->ythickness;
+
+ width = widget->allocation.width;
+ height = widget->allocation.height - ythickness * 2;
+
+ gtk_paint_box (widget->style, ruler->backing_store,
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ NULL, widget, "hruler",
+ 0, 0,
+ widget->allocation.width, widget->allocation.height);
+
+#if 0
+ gdk_draw_line (ruler->backing_store, gc,
+ xthickness,
+ height + ythickness,
+ widget->allocation.width - xthickness,
+ height + ythickness);
+#endif
+
+ /* assume ruler->max_size has the char width */
+ /* i is increment of char_width, pos is label number */
+ for ( i = 0, pos = 0; i < widget->allocation.width - xthickness; i += ruler->max_size, pos++ ) {
+ int length = ythickness / 2;
+
+ if ( pos % 10 == 0 ) length = ( 4 * ythickness );
+ else if (pos % 5 == 0 ) length = ( 2 * ythickness );
+
+ gdk_draw_line(ruler->backing_store, gc,
+ i, height + ythickness,
+ i, height - length);
+
+ if ( pos % 10 == 0 ) {
+ char buf[8];
+ /* draw label */
+ sprintf(buf, "%d", (int) pos);
+ gdk_draw_string(ruler->backing_store, font, gc,
+ i + 2, ythickness + font->ascent - 1,
+ buf);
+ }
+ }
+}
+
+/* gtk_ruler_set_pos() - does not work yet, need to reimplement
+ * gtk_ruler_draw_pos(). */
+void
+gtk_shruler_set_pos(GtkSHRuler * ruler, gfloat pos)
+{
+ GtkRuler * ruler_;
+ g_return_if_fail( ruler != NULL );
+
+ ruler_ = GTK_RULER(ruler);
+
+ if ( pos < ruler_->lower )
+ pos = ruler_->lower;
+ if ( pos > ruler_->upper )
+ pos = ruler_->upper;
+
+ ruler_->position = pos;
+
+ /* Make sure the ruler has been allocated already */
+ if ( ruler_->backing_store != NULL )
+ gtk_ruler_draw_pos(ruler_);
+}
diff --git a/src/gtkshruler.h b/src/gtkshruler.h
new file mode 100644
index 00000000..bf7e0cde
--- /dev/null
+++ b/src/gtkshruler.h
@@ -0,0 +1,63 @@
+/* GTKSHRuler
+ * Copyright (C) 2000-2004 Alfons Hoogervorst & The Sylpheed Claws Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GTK_SHRULER_H__
+#define __GTK_SHRULER_H__
+
+
+#include <gdk/gdk.h>
+#include <gtk/gtkhruler.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define GTK_SHRULER(obj) (GTK_CHECK_CAST ((obj), gtk_shruler_get_type (), GtkSHRuler))
+#define GTK_SHRULER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), gtk_shruler_get_type (), GtkSHRulerClass))
+#define GTK_IS_SHRULER(obj) (GTK_CHECK_TYPE ((obj), gtk_shruler_get_type ()))
+
+
+typedef struct _GtkSHRuler GtkSHRuler;
+typedef struct _GtkSHRulerClass GtkSHRulerClass;
+
+struct _GtkSHRuler
+{
+ GtkHRuler ruler;
+};
+
+struct _GtkSHRulerClass
+{
+ GtkHRulerClass parent_class;
+};
+
+
+GType gtk_shruler_get_type (void);
+GtkWidget* gtk_shruler_new (void);
+void gtk_shruler_set_pos (GtkSHRuler *ruler,
+ gfloat pos);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __GTK_SHRULER_H__ */
diff --git a/src/gtkutils.c b/src/gtkutils.c
new file mode 100644
index 00000000..196b46ee
--- /dev/null
+++ b/src/gtkutils.c
@@ -0,0 +1,686 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkcombo.h>
+#include <gtk/gtkbindings.h>
+#include <gtk/gtkitemfactory.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#if (HAVE_WCTYPE_H && HAVE_WCHAR_H)
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+#include "intl.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "gtksctree.h"
+#include "codeconv.h"
+#include "menu.h"
+
+#warning FIXME_GTK2
+gboolean gtkut_get_font_size(GtkWidget *widget, gint *width, gint *height)
+{
+ PangoLayout *layout;
+ const gchar *str = "Abcdef";
+
+ g_return_val_if_fail(GTK_IS_WIDGET(widget), FALSE);
+
+ layout = gtk_widget_create_pango_layout(widget, str);
+ g_return_val_if_fail(layout, FALSE);
+ pango_layout_get_pixel_size(layout, width, height);
+ if (width)
+ *width = *width / g_utf8_strlen(str, -1);
+ g_object_unref(layout);
+
+ return TRUE;
+}
+
+void gtkut_convert_int_to_gdk_color(gint rgbvalue, GdkColor *color)
+{
+ g_return_if_fail(color != NULL);
+
+ color->pixel = 0L;
+ color->red = (int) (((gdouble)((rgbvalue & 0xff0000) >> 16) / 255.0) * 65535.0);
+ color->green = (int) (((gdouble)((rgbvalue & 0x00ff00) >> 8) / 255.0) * 65535.0);
+ color->blue = (int) (((gdouble) (rgbvalue & 0x0000ff) / 255.0) * 65535.0);
+}
+
+void gtkut_button_set_create(GtkWidget **bbox,
+ GtkWidget **button1, const gchar *label1,
+ GtkWidget **button2, const gchar *label2,
+ GtkWidget **button3, const gchar *label3)
+{
+ g_return_if_fail(bbox != NULL);
+ g_return_if_fail(button1 != NULL);
+
+ *bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(*bbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(*bbox), 5);
+
+ *button1 = gtk_button_new_with_label(label1);
+ GTK_WIDGET_SET_FLAGS(*button1, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(*bbox), *button1, TRUE, TRUE, 0);
+ gtk_widget_show(*button1);
+
+ if (button2) {
+ *button2 = gtk_button_new_with_label(label2);
+ GTK_WIDGET_SET_FLAGS(*button2, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(*bbox), *button2, TRUE, TRUE, 0);
+ gtk_widget_show(*button2);
+ }
+
+ if (button3) {
+ *button3 = gtk_button_new_with_label(label3);
+ GTK_WIDGET_SET_FLAGS(*button3, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(*bbox), *button3, TRUE, TRUE, 0);
+ gtk_widget_show(*button3);
+ }
+}
+
+static void combo_button_size_request(GtkWidget *widget,
+ GtkRequisition *requisition,
+ gpointer data)
+{
+ ComboButton *combo = (ComboButton *)data;
+
+ if (combo->arrow->allocation.height != requisition->height)
+ gtk_widget_set_size_request(combo->arrow,
+ -1, requisition->height);
+}
+
+static void combo_button_enter(GtkWidget *widget, gpointer data)
+{
+ ComboButton *combo = (ComboButton *)data;
+
+ if (GTK_WIDGET_STATE(combo->arrow) != GTK_STATE_PRELIGHT) {
+ gtk_widget_set_state(combo->arrow, GTK_STATE_PRELIGHT);
+ gtk_widget_queue_draw(combo->arrow);
+ }
+ if (GTK_WIDGET_STATE(combo->button) != GTK_STATE_PRELIGHT) {
+ gtk_widget_set_state(combo->button, GTK_STATE_PRELIGHT);
+ gtk_widget_queue_draw(combo->button);
+ }
+}
+
+static void combo_button_leave(GtkWidget *widget, gpointer data)
+{
+ ComboButton *combo = (ComboButton *)data;
+
+ if (GTK_WIDGET_STATE(combo->arrow) != GTK_STATE_NORMAL) {
+ gtk_widget_set_state(combo->arrow, GTK_STATE_NORMAL);
+ gtk_widget_queue_draw(combo->arrow);
+ }
+ if (GTK_WIDGET_STATE(combo->button) != GTK_STATE_NORMAL) {
+ gtk_widget_set_state(combo->button, GTK_STATE_NORMAL);
+ gtk_widget_queue_draw(combo->button);
+ }
+}
+
+static gint combo_button_arrow_pressed(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ ComboButton *combo = (ComboButton *)data;
+
+ if (!event) return FALSE;
+
+ gtk_menu_popup(GTK_MENU(combo->menu), NULL, NULL,
+ menu_button_position, combo->button,
+ event->button, event->time);
+
+ return TRUE;
+}
+
+static void combo_button_destroy(GtkWidget *widget, gpointer data)
+{
+ ComboButton *combo = (ComboButton *)data;
+
+ gtk_object_destroy(GTK_OBJECT(combo->factory));
+ g_free(combo);
+}
+
+ComboButton *gtkut_combo_button_create(GtkWidget *button,
+ GtkItemFactoryEntry *entries,
+ gint n_entries, const gchar *path,
+ gpointer data)
+{
+ ComboButton *combo;
+ GtkWidget *arrow;
+
+ combo = g_new0(ComboButton, 1);
+
+ combo->arrow = gtk_button_new();
+ arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(combo->arrow), arrow);
+ GTK_WIDGET_UNSET_FLAGS(combo->arrow, GTK_CAN_FOCUS);
+ gtk_widget_show_all(combo->arrow);
+
+ combo->button = button;
+ combo->menu = menu_create_items(entries, n_entries, path,
+ &combo->factory, data);
+ combo->data = data;
+
+ g_signal_connect(G_OBJECT(combo->button), "size_request",
+ G_CALLBACK(combo_button_size_request), combo);
+ g_signal_connect(G_OBJECT(combo->button), "enter",
+ G_CALLBACK(combo_button_enter), combo);
+ g_signal_connect(G_OBJECT(combo->button), "leave",
+ G_CALLBACK(combo_button_leave), combo);
+ g_signal_connect(G_OBJECT(combo->arrow), "enter",
+ G_CALLBACK(combo_button_enter), combo);
+ g_signal_connect(G_OBJECT(combo->arrow), "leave",
+ G_CALLBACK(combo_button_leave), combo);
+ g_signal_connect(G_OBJECT(combo->arrow), "button_press_event",
+ G_CALLBACK(combo_button_arrow_pressed), combo);
+ g_signal_connect(G_OBJECT(combo->arrow), "destroy",
+ G_CALLBACK(combo_button_destroy), combo);
+
+ return combo;
+}
+
+#define CELL_SPACING 1
+#define ROW_TOP_YPIXEL(clist, row) (((clist)->row_height * (row)) + \
+ (((row) + 1) * CELL_SPACING) + \
+ (clist)->voffset)
+#define ROW_FROM_YPIXEL(clist, y) (((y) - (clist)->voffset) / \
+ ((clist)->row_height + CELL_SPACING))
+
+void gtkut_ctree_node_move_if_on_the_edge(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ GtkCList *clist = GTK_CLIST(ctree);
+ gint row;
+ GtkVisibility row_visibility, prev_row_visibility, next_row_visibility;
+
+ g_return_if_fail(ctree != NULL);
+ g_return_if_fail(node != NULL);
+
+ row = g_list_position(clist->row_list, (GList *)node);
+ if (row < 0 || row >= clist->rows || clist->row_height == 0) return;
+ row_visibility = gtk_clist_row_is_visible(clist, row);
+ prev_row_visibility = gtk_clist_row_is_visible(clist, row - 1);
+ next_row_visibility = gtk_clist_row_is_visible(clist, row + 1);
+
+ if (row_visibility == GTK_VISIBILITY_NONE) {
+ gtk_clist_moveto(clist, row, -1, 0.5, 0);
+ return;
+ }
+ if (row_visibility == GTK_VISIBILITY_FULL &&
+ prev_row_visibility == GTK_VISIBILITY_FULL &&
+ next_row_visibility == GTK_VISIBILITY_FULL)
+ return;
+ if (prev_row_visibility != GTK_VISIBILITY_FULL &&
+ next_row_visibility != GTK_VISIBILITY_FULL)
+ return;
+
+ if (prev_row_visibility != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, row, -1, 0.2, 0);
+ return;
+ }
+ if (next_row_visibility != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, row, -1, 0.8, 0);
+ return;
+ }
+}
+
+#undef CELL_SPACING
+#undef ROW_TOP_YPIXEL
+#undef ROW_FROM_YPIXEL
+
+gint gtkut_ctree_get_nth_from_node(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ g_return_val_if_fail(ctree != NULL, -1);
+ g_return_val_if_fail(node != NULL, -1);
+
+ return g_list_position(GTK_CLIST(ctree)->row_list, (GList *)node);
+}
+
+/* get the next node, including the invisible one */
+GtkCTreeNode *gtkut_ctree_node_next(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ GtkCTreeNode *parent;
+
+ if (!node) return NULL;
+
+ if (GTK_CTREE_ROW(node)->children)
+ return GTK_CTREE_ROW(node)->children;
+
+ if (GTK_CTREE_ROW(node)->sibling)
+ return GTK_CTREE_ROW(node)->sibling;
+
+ for (parent = GTK_CTREE_ROW(node)->parent; parent != NULL;
+ parent = GTK_CTREE_ROW(parent)->parent) {
+ if (GTK_CTREE_ROW(parent)->sibling)
+ return GTK_CTREE_ROW(parent)->sibling;
+ }
+
+ return NULL;
+}
+
+/* get the previous node, including the invisible one */
+GtkCTreeNode *gtkut_ctree_node_prev(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ GtkCTreeNode *prev;
+ GtkCTreeNode *child;
+
+ if (!node) return NULL;
+
+ prev = GTK_CTREE_NODE_PREV(node);
+ if (prev == GTK_CTREE_ROW(node)->parent)
+ return prev;
+
+ child = prev;
+ while (GTK_CTREE_ROW(child)->children != NULL) {
+ child = GTK_CTREE_ROW(child)->children;
+ while (GTK_CTREE_ROW(child)->sibling != NULL)
+ child = GTK_CTREE_ROW(child)->sibling;
+ }
+
+ return child;
+}
+
+gboolean gtkut_ctree_node_is_selected(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ GtkCList *clist = GTK_CLIST(ctree);
+ GList *cur;
+
+ for (cur = clist->selection; cur != NULL; cur = cur->next) {
+ if (node == GTK_CTREE_NODE(cur->data))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+GtkCTreeNode *gtkut_ctree_find_collapsed_parent(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ if (!node) return NULL;
+
+ while ((node = GTK_CTREE_ROW(node)->parent) != NULL) {
+ if (!GTK_CTREE_ROW(node)->expanded)
+ return node;
+ }
+
+ return NULL;
+}
+
+void gtkut_ctree_expand_parent_all(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ while ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL)
+ gtk_ctree_expand(ctree, node);
+}
+
+void gtkut_ctree_set_focus_row(GtkCTree *ctree, GtkCTreeNode *node)
+{
+ gtkut_clist_set_focus_row(GTK_CLIST(ctree),
+ gtkut_ctree_get_nth_from_node(ctree, node));
+}
+
+void gtkut_clist_set_focus_row(GtkCList *clist, gint row)
+{
+ clist->focus_row = row;
+ GTKUT_CTREE_REFRESH(clist);
+}
+
+void gtkut_combo_set_items(GtkCombo *combo, const gchar *str1, ...)
+{
+ va_list args;
+ gchar *s;
+ GList *combo_items = NULL;
+
+ g_return_if_fail(str1 != NULL);
+
+ combo_items = g_list_append(combo_items, (gpointer)str1);
+ va_start(args, str1);
+ s = va_arg(args, gchar*);
+ while (s) {
+ combo_items = g_list_append(combo_items, (gpointer)s);
+ s = va_arg(args, gchar*);
+ }
+ va_end(args);
+
+ gtk_combo_set_popdown_strings(combo, combo_items);
+
+ g_list_free(combo_items);
+}
+
+gchar *gtkut_editable_get_selection(GtkEditable *editable)
+{
+ guint start_pos, end_pos;
+ gboolean found;
+
+ g_return_val_if_fail(GTK_IS_EDITABLE(editable), NULL);
+
+ found = gtk_editable_get_selection_bounds(editable,
+ &start_pos, &end_pos);
+ if (found)
+ return gtk_editable_get_chars(editable, start_pos, end_pos);
+ else
+ return NULL;
+}
+
+void gtkut_editable_disable_im(GtkEditable *editable)
+{
+ g_return_if_fail(editable != NULL);
+
+#if USE_XIM
+ if (editable->ic) {
+ gdk_ic_destroy(editable->ic);
+ editable->ic = NULL;
+ }
+ if (editable->ic_attr) {
+ gdk_ic_attr_destroy(editable->ic_attr);
+ editable->ic_attr = NULL;
+ }
+#endif
+}
+
+/*
+ * Walk through the widget tree and disclaim the selection from all currently
+ * realized GtkEditable widgets.
+ */
+static void gtkut_check_before_remove(GtkWidget *widget, gpointer unused)
+{
+ g_return_if_fail(widget != NULL);
+
+ if (!GTK_WIDGET_REALIZED(widget))
+ return; /* all nested widgets must be unrealized too */
+ if (GTK_IS_CONTAINER(widget))
+ gtk_container_forall(GTK_CONTAINER(widget),
+ gtkut_check_before_remove, NULL);
+#if 0
+ if (GTK_IS_EDITABLE(widget))
+ gtk_editable_claim_selection(GTK_EDITABLE(widget),
+ FALSE, GDK_CURRENT_TIME);
+#endif
+}
+
+/*
+ * Wrapper around gtk_container_remove to work around a bug in GtkText and
+ * GtkEntry (in all GTK+ versions up to and including at least 1.2.10).
+ *
+ * The problem is that unrealizing a GtkText or GtkEntry widget which has the
+ * active selection completely messes up selection handling, leading to
+ * non-working selections and crashes. Removing a widget from its container
+ * implies unrealizing it and all its child widgets; this triggers the bug if
+ * the removed widget or any of its children is GtkText or GtkEntry. As a
+ * workaround, this function walks through the widget subtree before removing
+ * and disclaims the selection from all GtkEditable widgets found.
+ *
+ * A similar workaround may be needed for gtk_widget_reparent(); currently it
+ * is not necessary because Sylpheed does not use gtk_widget_reparent() for
+ * GtkEditable widgets or containers holding such widgets.
+ */
+void gtkut_container_remove(GtkContainer *container, GtkWidget *widget)
+{
+ gtkut_check_before_remove(widget, NULL);
+ gtk_container_remove(container, widget);
+}
+
+#warning FIXME_GTK2
+gboolean gtkut_text_buffer_match_string(GtkTextBuffer *textbuf, gint pos,
+ gunichar *wcs, gint len,
+ gboolean case_sens)
+{
+ GtkTextIter start_iter, end_iter;
+ gchar *utf8str;
+ gint match_count = 0;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter, pos);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, pos + len);
+
+ utf8str = gtk_text_buffer_get_text(textbuf, &start_iter, &end_iter, FALSE);
+ if (!utf8str) return FALSE;
+
+ if ((gint)g_utf8_strlen(utf8str, -1) != len) {
+ g_free(utf8str);
+ return FALSE;
+ }
+
+ for (; match_count < len; pos++, match_count++) {
+ gchar *ptr;
+ gunichar ch;
+
+ ptr = g_utf8_offset_to_pointer(utf8str, match_count);
+ if (!ptr) break;
+ ch = g_utf8_get_char(ptr);
+
+ if (case_sens) {
+ if (ch != wcs[match_count])
+ break;
+ } else {
+ if (g_unichar_tolower(ch) !=
+ g_unichar_tolower(wcs[match_count]))
+ break;
+ }
+ }
+
+ g_free(utf8str);
+
+ if (match_count == len)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+guint gtkut_text_buffer_str_compare_n(GtkTextBuffer *textbuf,
+ guint pos1, guint pos2,
+ guint len, guint text_len)
+{
+ guint i;
+
+ for (i = 0; i < len && pos1 + i < text_len && pos2 + i < text_len; i++) {
+ GtkTextIter start_iter, end_iter;
+ gchar *utf8str1, *utf8str2;
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter,
+ pos1 + i);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
+ pos1 + i + 1);
+ utf8str1 = gtk_text_buffer_get_text(textbuf,
+ &start_iter,
+ &end_iter,
+ FALSE);
+
+ gtk_text_buffer_get_iter_at_offset(textbuf, &start_iter,
+ pos2 + i);
+ gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
+ pos2 + i + 1);
+ utf8str2 = gtk_text_buffer_get_text(textbuf,
+ &start_iter,
+ &end_iter,
+ FALSE);
+
+ if (!utf8str1 || !utf8str2 || strcmp(utf8str1, utf8str2) != 0) {
+ g_free(utf8str1);
+ g_free(utf8str2);
+ break;
+ }
+
+ g_free(utf8str1);
+ g_free(utf8str2);
+ }
+
+ return i;
+}
+
+guint gtkut_text_buffer_str_compare(GtkTextBuffer *textbuf,
+ guint start_pos, guint text_len,
+ const gchar *str)
+{
+ gunichar *wcs;
+ guint len = 0;
+ glong items_read = 0, items_written = 0;
+ gboolean result;
+ GError *error = NULL;
+
+ if (!str) return 0;
+
+ wcs = g_utf8_to_ucs4(str, -1, &items_read, &items_written, &error);
+ if (error != NULL) {
+ g_warning("An error occured while converting a string from UTF-8 to UCS-4: %s\n", error->message);
+ g_error_free(error);
+ }
+ if (!wcs || items_written <= 0) return 0;
+ len = (guint)items_written;
+
+ if (len > text_len - start_pos)
+ result = FALSE;
+ else
+ result = gtkut_text_buffer_match_string(textbuf, start_pos,
+ wcs, len, TRUE);
+
+ g_free(wcs);
+
+ return result ? len : 0;
+}
+
+gboolean gtkut_text_buffer_is_uri_string(GtkTextBuffer *textbuf,
+ guint start_pos, guint text_len)
+{
+ if (gtkut_text_buffer_str_compare
+ (textbuf, start_pos, text_len, "http://") ||
+ gtkut_text_buffer_str_compare
+ (textbuf, start_pos, text_len, "ftp://") ||
+ gtkut_text_buffer_str_compare
+ (textbuf, start_pos, text_len, "https://") ||
+ gtkut_text_buffer_str_compare
+ (textbuf, start_pos, text_len, "www."))
+ return TRUE;
+
+ return FALSE;
+}
+
+gchar *gtkut_text_view_get_selection(GtkTextView *textview)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start_iter, end_iter;
+ gboolean found;
+
+ g_return_val_if_fail(GTK_IS_TEXT_VIEW(textview), NULL);
+
+ buffer = gtk_text_view_get_buffer(textview);
+ found = gtk_text_buffer_get_selection_bounds(buffer,
+ &start_iter, &end_iter);
+ if (found)
+ return gtk_text_buffer_get_text(buffer, &start_iter, &end_iter,
+ FALSE);
+ else
+ return NULL;
+}
+
+void gtkut_window_popup(GtkWidget *window)
+{
+ gint x, y, sx, sy, new_x, new_y;
+
+ g_return_if_fail(window != NULL);
+ g_return_if_fail(window->window != NULL);
+
+ sx = gdk_screen_width();
+ sy = gdk_screen_height();
+
+ gdk_window_get_origin(window->window, &x, &y);
+ new_x = x % sx; if (new_x < 0) new_x = 0;
+ new_y = y % sy; if (new_y < 0) new_y = 0;
+ if (new_x != x || new_y != y)
+ gdk_window_move(window->window, new_x, new_y);
+
+ gdk_window_raise(window->window);
+ gdk_window_show(window->window);
+}
+
+void gtkut_widget_get_uposition(GtkWidget *widget, gint *px, gint *py)
+{
+ gint x, y;
+ gint sx, sy;
+
+ g_return_if_fail(widget != NULL);
+ g_return_if_fail(widget->window != NULL);
+
+ sx = gdk_screen_width();
+ sy = gdk_screen_height();
+
+ /* gdk_window_get_root_origin ever return *rootwindow*'s position */
+ gdk_window_get_root_origin(widget->window, &x, &y);
+
+ x %= sx; if (x < 0) x = 0;
+ y %= sy; if (y < 0) y = 0;
+ *px = x;
+ *py = y;
+}
+
+#warning FIXME_GTK2
+void gtkut_widget_wait_for_draw(GtkWidget *widget)
+{
+ if (!GTK_WIDGET_VISIBLE(widget) || !GTK_WIDGET_MAPPED(widget)) return;
+
+ while (gtk_events_pending())
+ gtk_main_iteration();
+}
+
+static void gtkut_clist_bindings_add(GtkWidget *clist)
+{
+ GtkBindingSet *binding_set;
+
+ binding_set = gtk_binding_set_by_class(GTK_CLIST_GET_CLASS(clist));
+
+ gtk_binding_entry_add_signal(binding_set, GDK_n, GDK_CONTROL_MASK,
+ "scroll_vertical", 2,
+ G_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD,
+ G_TYPE_FLOAT, 0.0);
+ gtk_binding_entry_add_signal(binding_set, GDK_p, GDK_CONTROL_MASK,
+ "scroll_vertical", 2,
+ G_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
+ G_TYPE_FLOAT, 0.0);
+}
+
+void gtkut_widget_init(void)
+{
+ GtkWidget *clist;
+
+ clist = gtk_clist_new(1);
+ g_object_ref(G_OBJECT(clist));
+ gtk_object_sink(GTK_OBJECT(clist));
+ gtkut_clist_bindings_add(clist);
+ g_object_unref(G_OBJECT(clist));
+
+ clist = gtk_ctree_new(1, 0);
+ g_object_ref(G_OBJECT(clist));
+ gtk_object_sink(GTK_OBJECT(clist));
+ gtkut_clist_bindings_add(clist);
+ g_object_unref(G_OBJECT(clist));
+
+ clist = gtk_sctree_new_with_titles(1, 0, NULL);
+ g_object_ref(G_OBJECT(clist));
+ gtk_object_sink(GTK_OBJECT(clist));
+ gtkut_clist_bindings_add(clist);
+ g_object_unref(G_OBJECT(clist));
+}
diff --git a/src/gtkutils.h b/src/gtkutils.h
new file mode 100644
index 00000000..23e7af51
--- /dev/null
+++ b/src/gtkutils.h
@@ -0,0 +1,166 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GTKUTILS_H__
+#define __GTKUTILS_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkcombo.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkitemfactory.h>
+#include <stdlib.h>
+#if HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+typedef struct _ComboButton ComboButton;
+
+struct _ComboButton
+{
+ GtkWidget *arrow;
+ GtkWidget *button;
+ GtkWidget *menu;
+ GtkItemFactory *factory;
+ gpointer data;
+};
+
+#define GTK_EVENTS_FLUSH() \
+{ \
+ while (gtk_events_pending()) \
+ gtk_main_iteration(); \
+}
+
+#define PIXMAP_CREATE(widget, pixmap, mask, xpm_d) \
+{ \
+ if (!pixmap) { \
+ GtkStyle *style = gtk_widget_get_style(widget); \
+ pixmap = gdk_pixmap_create_from_xpm_d \
+ (widget->window, &mask, \
+ &style->bg[GTK_STATE_NORMAL], xpm_d); \
+ } \
+}
+
+#define GTK_WIDGET_PTR(wid) (*(GtkWidget **)wid)
+
+#define GTKUT_CTREE_NODE_SET_ROW_DATA(node, d) \
+{ \
+ GTK_CTREE_ROW(node)->row.data = d; \
+}
+
+#define GTKUT_CTREE_NODE_GET_ROW_DATA(node) \
+ (GTK_CTREE_ROW(node)->row.data)
+
+#define GTKUT_CTREE_REFRESH(clist) \
+ GTK_CLIST_GET_CLASS(clist)->refresh(clist)
+
+gboolean gtkut_get_font_size (GtkWidget *widget,
+ gint *width,
+ gint *height);
+
+GdkFont *gtkut_font_load (const gchar *fontset_name);
+GdkFont *gtkut_font_load_from_fontset (const gchar *fontset_name);
+
+void gtkut_convert_int_to_gdk_color (gint rgbvalue,
+ GdkColor *color);
+
+void gtkut_button_set_create (GtkWidget **bbox,
+ GtkWidget **button1,
+ const gchar *label1,
+ GtkWidget **button2,
+ const gchar *label2,
+ GtkWidget **button3,
+ const gchar *label3);
+
+ComboButton *gtkut_combo_button_create (GtkWidget *button,
+ GtkItemFactoryEntry *entries,
+ gint n_entries,
+ const gchar *path,
+ gpointer data);
+
+void gtkut_ctree_node_move_if_on_the_edge
+ (GtkCTree *ctree,
+ GtkCTreeNode *node);
+gint gtkut_ctree_get_nth_from_node (GtkCTree *ctree,
+ GtkCTreeNode *node);
+GtkCTreeNode *gtkut_ctree_node_next (GtkCTree *ctree,
+ GtkCTreeNode *node);
+GtkCTreeNode *gtkut_ctree_node_prev (GtkCTree *ctree,
+ GtkCTreeNode *node);
+gboolean gtkut_ctree_node_is_selected (GtkCTree *ctree,
+ GtkCTreeNode *node);
+GtkCTreeNode *gtkut_ctree_find_collapsed_parent
+ (GtkCTree *ctree,
+ GtkCTreeNode *node);
+void gtkut_ctree_expand_parent_all (GtkCTree *ctree,
+ GtkCTreeNode *node);
+void gtkut_ctree_set_focus_row (GtkCTree *ctree,
+ GtkCTreeNode *node);
+
+void gtkut_clist_set_focus_row (GtkCList *clist,
+ gint row);
+
+void gtkut_combo_set_items (GtkCombo *combo,
+ const gchar *str1, ...);
+
+gchar *gtkut_editable_get_selection (GtkEditable *editable);
+void gtkut_editable_disable_im (GtkEditable *editable);
+
+void gtkut_container_remove (GtkContainer *container,
+ GtkWidget *widget);
+
+gboolean gtkut_text_buffer_match_string (GtkTextBuffer *text,
+ gint pos,
+ gunichar *wcs,
+ gint len,
+ gboolean case_sens);
+guint gtkut_text_buffer_str_compare_n (GtkTextBuffer *text,
+ guint pos1,
+ guint pos2,
+ guint len,
+ guint text_len);
+guint gtkut_text_buffer_str_compare (GtkTextBuffer *text,
+ guint start_pos,
+ guint text_len,
+ const gchar *str);
+gboolean gtkut_text_buffer_is_uri_string(GtkTextBuffer *text,
+ guint start_pos,
+ guint text_len);
+
+gchar *gtkut_text_view_get_selection (GtkTextView *textview);
+
+void gtkut_window_popup (GtkWidget *window);
+
+void gtkut_widget_get_uposition (GtkWidget *widget,
+ gint *px,
+ gint *py);
+//void gtkut_widget_disable_theme_engine (GtkWidget *widget);
+void gtkut_widget_wait_for_draw (GtkWidget *widget);
+void gtkut_widget_init (void);
+
+#endif /* __GTKUTILS_H__ */
diff --git a/src/headerview.c b/src/headerview.c
new file mode 100644
index 00000000..2a6d7369
--- /dev/null
+++ b/src/headerview.c
@@ -0,0 +1,348 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkstyle.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkpixmap.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#if HAVE_LIBCOMPFACE
+# include <compface.h>
+#endif
+
+#include "intl.h"
+#include "main.h"
+#include "headerview.h"
+#include "prefs_common.h"
+#include "codeconv.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+#define TR(str) (prefs_common.trans_hdr ? gettext(str) : str)
+
+#if 0
+ _("From:");
+ _("To:");
+ _("Newsgroups:");
+ _("Subject:");
+#endif
+
+#if HAVE_LIBCOMPFACE
+#define XPM_XFACE_HEIGHT (HEIGHT + 3) /* 3 = 1 header + 2 colors */
+
+static gchar *xpm_xface[XPM_XFACE_HEIGHT];
+
+static void headerview_show_xface (HeaderView *headerview,
+ MsgInfo *msginfo);
+static gint create_xpm_from_xface (gchar *xpm[],
+ const gchar *xface);
+#endif
+
+HeaderView *headerview_create(void)
+{
+ HeaderView *headerview;
+ GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *hbox1;
+ GtkWidget *hbox2;
+ GtkWidget *from_header_label;
+ GtkWidget *from_body_label;
+ GtkWidget *to_header_label;
+ GtkWidget *to_body_label;
+ GtkWidget *ng_header_label;
+ GtkWidget *ng_body_label;
+ GtkWidget *subject_header_label;
+ GtkWidget *subject_body_label;
+
+ debug_print(_("Creating header view...\n"));
+ headerview = g_new0(HeaderView, 1);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 2);
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+
+ hbox1 = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0);
+ hbox2 = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
+
+ from_header_label = gtk_label_new(TR("From:"));
+ from_body_label = gtk_label_new("");
+ to_header_label = gtk_label_new(TR("To:"));
+ to_body_label = gtk_label_new("");
+ ng_header_label = gtk_label_new(TR("Newsgroups:"));
+ ng_body_label = gtk_label_new("");
+ subject_header_label = gtk_label_new(TR("Subject:"));
+ subject_body_label = gtk_label_new("");
+
+ gtk_label_set_selectable(GTK_LABEL(from_body_label), TRUE);
+ gtk_label_set_selectable(GTK_LABEL(to_body_label), TRUE);
+ gtk_label_set_selectable(GTK_LABEL(ng_body_label), TRUE);
+ gtk_label_set_selectable(GTK_LABEL(subject_body_label), TRUE);
+
+ gtk_box_pack_start(GTK_BOX(hbox1), from_header_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox1), from_body_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox1), to_header_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox1), to_body_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox1), ng_header_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox1), ng_body_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), subject_header_label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), subject_body_label, FALSE, FALSE, 0);
+
+ headerview->hbox = hbox;
+ headerview->from_header_label = from_header_label;
+ headerview->from_body_label = from_body_label;
+ headerview->to_header_label = to_header_label;
+ headerview->to_body_label = to_body_label;
+ headerview->ng_header_label = ng_header_label;
+ headerview->ng_body_label = ng_body_label;
+ headerview->subject_header_label = subject_header_label;
+ headerview->subject_body_label = subject_body_label;
+ headerview->image = NULL;
+
+ gtk_widget_show_all(hbox);
+
+ return headerview;
+}
+
+void headerview_init(HeaderView *headerview)
+{
+ static PangoFontDescription *boldfont = NULL;
+
+ if (!boldfont && prefs_common.boldfont)
+ boldfont = pango_font_description_from_string
+ (prefs_common.boldfont);
+
+#define SET_FONT_STYLE(wid) \
+{ \
+ if (boldfont) \
+ gtk_widget_modify_font(headerview->wid, boldfont); \
+}
+
+ SET_FONT_STYLE(from_header_label);
+ SET_FONT_STYLE(to_header_label);
+ SET_FONT_STYLE(ng_header_label);
+ SET_FONT_STYLE(subject_header_label);
+
+ headerview_clear(headerview);
+ headerview_set_visibility(headerview, prefs_common.display_header_pane);
+
+#if HAVE_LIBCOMPFACE
+ {
+ gint i;
+
+ for (i = 0; i < XPM_XFACE_HEIGHT; i++) {
+ xpm_xface[i] = g_malloc(WIDTH + 1);
+ *xpm_xface[i] = '\0';
+ }
+ }
+#endif
+}
+
+void headerview_show(HeaderView *headerview, MsgInfo *msginfo)
+{
+ headerview_clear(headerview);
+
+ gtk_label_set_text(GTK_LABEL(headerview->from_body_label),
+ msginfo->from ? msginfo->from : _("(No From)"));
+ if (msginfo->to) {
+ gtk_label_set_text(GTK_LABEL(headerview->to_body_label),
+ msginfo->to);
+ gtk_widget_show(headerview->to_header_label);
+ gtk_widget_show(headerview->to_body_label);
+ }
+ if (msginfo->newsgroups) {
+ gtk_label_set_text(GTK_LABEL(headerview->ng_body_label),
+ msginfo->newsgroups);
+ gtk_widget_show(headerview->ng_header_label);
+ gtk_widget_show(headerview->ng_body_label);
+ }
+ gtk_label_set_text(GTK_LABEL(headerview->subject_body_label),
+ msginfo->subject ? msginfo->subject
+ : _("(No Subject)"));
+
+#if HAVE_LIBCOMPFACE
+ headerview_show_xface(headerview, msginfo);
+#endif
+}
+
+#if HAVE_LIBCOMPFACE
+static void headerview_show_xface(HeaderView *headerview, MsgInfo *msginfo)
+{
+ gchar xface[2048];
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+ GtkWidget *hbox = headerview->hbox;
+
+ if (!msginfo->xface || strlen(msginfo->xface) < 5) {
+ if (headerview->image &&
+ GTK_WIDGET_VISIBLE(headerview->image)) {
+ gtk_widget_hide(headerview->image);
+ gtk_widget_queue_resize(hbox);
+ }
+ return;
+ }
+ if (!GTK_WIDGET_VISIBLE(headerview->hbox)) return;
+
+ strncpy(xface, msginfo->xface, sizeof(xface));
+
+ if (uncompface(xface) < 0) {
+ g_warning("uncompface failed\n");
+ if (headerview->image)
+ gtk_widget_hide(headerview->image);
+ return;
+ }
+
+ create_xpm_from_xface(xpm_xface, xface);
+
+ pixmap = gdk_pixmap_create_from_xpm_d
+ (hbox->window, &mask, &hbox->style->white, xpm_xface);
+
+ if (!headerview->image) {
+ GtkWidget *image;
+
+ image = gtk_image_new_from_pixmap(pixmap, mask);
+ gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
+ gtk_widget_show(image);
+ headerview->image = image;
+ } else {
+ gtk_image_set_from_pixmap(GTK_IMAGE(headerview->image),
+ pixmap, mask);
+ gtk_widget_show(headerview->image);
+ }
+
+ gdk_pixmap_unref(pixmap);
+}
+#endif
+
+void headerview_clear(HeaderView *headerview)
+{
+ gtk_label_set_text(GTK_LABEL(headerview->from_body_label), "");
+ gtk_label_set_text(GTK_LABEL(headerview->to_body_label), "");
+ gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), "");
+ gtk_label_set_text(GTK_LABEL(headerview->subject_body_label), "");
+ gtk_widget_hide(headerview->to_header_label);
+ gtk_widget_hide(headerview->to_body_label);
+ gtk_widget_hide(headerview->ng_header_label);
+ gtk_widget_hide(headerview->ng_body_label);
+
+ if (headerview->image && GTK_WIDGET_VISIBLE(headerview->image)) {
+ gtk_widget_hide(headerview->image);
+ gtk_widget_queue_resize(headerview->hbox);
+ }
+}
+
+void headerview_set_visibility(HeaderView *headerview, gboolean visibility)
+{
+ if (visibility)
+ gtk_widget_show(headerview->hbox);
+ else
+ gtk_widget_hide(headerview->hbox);
+}
+
+void headerview_destroy(HeaderView *headerview)
+{
+ g_free(headerview);
+}
+
+#if HAVE_LIBCOMPFACE
+static gint create_xpm_from_xface(gchar *xpm[], const gchar *xface)
+{
+ static gchar *bit_pattern[] = {
+ "....",
+ "...#",
+ "..#.",
+ "..##",
+ ".#..",
+ ".#.#",
+ ".##.",
+ ".###",
+ "#...",
+ "#..#",
+ "#.#.",
+ "#.##",
+ "##..",
+ "##.#",
+ "###.",
+ "####"
+ };
+
+ static gchar *xface_header = "48 48 2 1";
+ static gchar *xface_black = "# c #000000";
+ static gchar *xface_white = ". c #ffffff";
+
+ gint i, line = 0;
+ const guchar *p;
+ gchar buf[WIDTH * 4 + 1]; /* 4 = strlen("0x0000") */
+
+ p = xface;
+
+ strcpy(xpm[line++], xface_header);
+ strcpy(xpm[line++], xface_black);
+ strcpy(xpm[line++], xface_white);
+
+ for (i = 0; i < HEIGHT; i++) {
+ gint col;
+
+ buf[0] = '\0';
+
+ for (col = 0; col < 3; col++) {
+ gint figure;
+
+ p += 2; /* skip '0x' */
+
+ for (figure = 0; figure < 4; figure++) {
+ gint n = 0;
+
+ if ('0' <= *p && *p <= '9') {
+ n = *p - '0';
+ } else if ('a' <= *p && *p <= 'f') {
+ n = *p - 'a' + 10;
+ } else if ('A' <= *p && *p <= 'F') {
+ n = *p - 'A' + 10;
+ }
+
+ strcat(buf, bit_pattern[n]);
+ p++; /* skip ',' */
+ }
+
+ p++; /* skip '\n' */
+ }
+
+ strcpy(xpm[line++], buf);
+ p++;
+ }
+
+ return 0;
+}
+#endif
diff --git a/src/headerview.h b/src/headerview.h
new file mode 100644
index 00000000..db7d810b
--- /dev/null
+++ b/src/headerview.h
@@ -0,0 +1,55 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __HEADERVIEW_H__
+#define __HEADERVIEW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+#include "procmsg.h"
+
+typedef struct _HeaderView HeaderView;
+
+struct _HeaderView
+{
+ GtkWidget *hbox;
+
+ GtkWidget *from_header_label;
+ GtkWidget *from_body_label;
+ GtkWidget *to_header_label;
+ GtkWidget *to_body_label;
+ GtkWidget *ng_header_label;
+ GtkWidget *ng_body_label;
+ GtkWidget *subject_header_label;
+ GtkWidget *subject_body_label;
+
+ GtkWidget *image;
+};
+
+HeaderView *headerview_create (void);
+void headerview_init (HeaderView *headerview);
+void headerview_show (HeaderView *headerview,
+ MsgInfo *msginfo);
+void headerview_clear (HeaderView *headerview);
+void headerview_set_visibility (HeaderView *headerview,
+ gboolean visibility);
+void headerview_destroy (HeaderView *headerview);
+
+#endif /* __HEADERVIEW_H__ */
diff --git a/src/html.c b/src/html.c
new file mode 100644
index 00000000..2c706c94
--- /dev/null
+++ b/src/html.c
@@ -0,0 +1,777 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "html.h"
+#include "codeconv.h"
+#include "utils.h"
+
+#define HTMLBUFSIZE 8192
+#define HR_STR "------------------------------------------------"
+
+typedef struct _HTMLSymbol HTMLSymbol;
+
+struct _HTMLSymbol
+{
+ gchar *const key;
+ gchar *const val;
+};
+
+static HTMLSymbol symbol_list[] = {
+ {"&lt;" , "<"},
+ {"&gt;" , ">"},
+ {"&amp;" , "&"},
+ {"&quot;" , "\""},
+ {"&nbsp;" , " "},
+ {"&trade;" , "(TM)"},
+
+ {"&#153;", "(TM)"},
+};
+
+static HTMLSymbol ascii_symbol_list[] = {
+ {"&iexcl;" , "^!"},
+ {"&brvbar;", "|"},
+ {"&copy;" , "(C)"},
+ {"&laquo;" , "<<"},
+ {"&reg;" , "(R)"},
+
+ {"&sup2;" , "^2"},
+ {"&sup3;" , "^3"},
+ {"&acute;" , "'"},
+ {"&cedil;" , ","},
+ {"&sup1;" , "^1"},
+ {"&raquo;" , ">>"},
+ {"&frac14;", "1/4"},
+ {"&frac12;", "1/2"},
+ {"&frac34;", "3/4"},
+ {"&iquest;", "^?"},
+
+ {"&Agrave;", "A`"},
+ {"&Aacute;", "A'"},
+ {"&Acirc;" , "A^"},
+ {"&Atilde;", "A~"},
+ {"&AElig;" , "AE"},
+ {"&Egrave;", "E`"},
+ {"&Eacute;", "E'"},
+ {"&Ecirc;" , "E^"},
+ {"&Igrave;", "I`"},
+ {"&Iacute;", "I'"},
+ {"&Icirc;" , "I^"},
+
+ {"&Ntilde;", "N~"},
+ {"&Ograve;", "O`"},
+ {"&Oacute;", "O'"},
+ {"&Ocirc;" , "O^"},
+ {"&Otilde;", "O~"},
+ {"&Ugrave;", "U`"},
+ {"&Uacute;", "U'"},
+ {"&Ucirc;" , "U^"},
+ {"&Yacute;", "Y'"},
+
+ {"&agrave;", "a`"},
+ {"&aacute;", "a'"},
+ {"&acirc;" , "a^"},
+ {"&atilde;", "a~"},
+ {"&aelig;" , "ae"},
+ {"&egrave;", "e`"},
+ {"&eacute;", "e'"},
+ {"&ecirc;" , "e^"},
+ {"&igrave;", "i`"},
+ {"&iacute;", "i'"},
+ {"&icirc;" , "i^"},
+
+ {"&ntilde;", "n~"},
+ {"&ograve;", "o`"},
+ {"&oacute;", "o'"},
+ {"&ocirc;" , "o^"},
+ {"&otilde;", "o~"},
+ {"&ugrave;", "u`"},
+ {"&uacute;", "u'"},
+ {"&ucirc;" , "u^"},
+ {"&yacute;", "y'"},
+};
+
+static HTMLSymbol eucjp_symbol_list[] = {
+ {"&iexcl;" , "^!"},
+ {"&cent;" , "\xa1\xf1"},
+ {"&pound;" , "\xa1\xf2"},
+ {"&yen;" , "\xa1\xef"},
+ {"&brvbar;", "|"},
+ {"&sect;" , "\xa1\xf8"},
+ {"&uml;" , "\xa1\xaf"},
+ {"&copy;" , "(C)"},
+ {"&laquo;" , "<<"},
+ {"&reg;" , "(R)"},
+
+ {"&deg;" , "\xa1\xeb"},
+ {"&plusmn;", "\xa1\xde"},
+ {"&sup2;" , "^2"},
+ {"&sup3;" , "^3"},
+ {"&acute;" , "'"},
+ {"&micro;" , "\xa6\xcc"},
+ {"&para;" , "\xa2\xf9"},
+ {"&middot;", "\xa1\xa6"},
+ {"&cedil;" , ","},
+ {"&sup1;" , "^1"},
+ {"&raquo;" , ">>"},
+ {"&frac14;", "1/4"},
+ {"&frac12;", "1/2"},
+ {"&frac34;", "3/4"},
+ {"&iquest;", "^?"},
+
+ {"&Agrave;", "A`"},
+ {"&Aacute;", "A'"},
+ {"&Acirc;" , "A^"},
+ {"&Atilde;", "A~"},
+ {"&Auml;" , "A\xa1\xaf"},
+ {"&Aring;" , "A\xa1\xeb"},
+ {"&AElig;" , "AE"},
+ {"&Egrave;", "E`"},
+ {"&Eacute;", "E'"},
+ {"&Ecirc;" , "E^"},
+ {"&Euml;" , "E\xa1\xaf"},
+ {"&Igrave;", "I`"},
+ {"&Iacute;", "I'"},
+ {"&Icirc;" , "I^"},
+ {"&Iuml;" , "I\xa1\xaf"},
+
+ {"&Ntilde;", "N~"},
+ {"&Ograve;", "O`"},
+ {"&Oacute;", "O'"},
+ {"&Ocirc;" , "O^"},
+ {"&Otilde;", "O~"},
+ {"&Ouml;" , "O\xa1\xaf"},
+ {"&times;" , "\xa1\xdf"},
+ {"&Ugrave;", "U`"},
+ {"&Uacute;", "U'"},
+ {"&Ucirc;" , "U^"},
+ {"&Uuml;" , "U\xa1\xaf"},
+ {"&Yacute;", "Y'"},
+
+ {"&agrave;", "a`"},
+ {"&aacute;", "a'"},
+ {"&acirc;" , "a^"},
+ {"&atilde;", "a~"},
+ {"&auml;" , "a\xa1\xaf"},
+ {"&aring;" , "a\xa1\xeb"},
+ {"&aelig;" , "ae"},
+ {"&egrave;", "e`"},
+ {"&eacute;", "e'"},
+ {"&ecirc;" , "e^"},
+ {"&euml;" , "e\xa1\xaf"},
+ {"&igrave;", "i`"},
+ {"&iacute;", "i'"},
+ {"&icirc;" , "i^"},
+ {"&iuml;" , "i\xa1\xaf"},
+
+ {"&eth;" , "\xa2\xdf"},
+ {"&ntilde;", "n~"},
+ {"&ograve;", "o`"},
+ {"&oacute;", "o'"},
+ {"&ocirc;" , "o^"},
+ {"&otilde;", "o~"},
+ {"&ouml;" , "o\xa1\xaf"},
+ {"&divide;", "\xa1\xe0"},
+ {"&ugrave;", "u`"},
+ {"&uacute;", "u'"},
+ {"&ucirc;" , "u^"},
+ {"&uuml;" , "u\xa1\xaf"},
+ {"&yacute;", "y'"},
+ {"&yuml;" , "y\xa1\xaf"},
+};
+
+static HTMLSymbol latin_symbol_list[] = {
+ {"&iexcl;" , "\xa1"},
+ {"&cent;" , "\xa2"},
+ {"&pound;" , "\xa3"},
+ {"&curren;", "\xa4"},
+ {"&yen;" , "\xa5"},
+ {"&brvbar;", "\xa6"},
+ {"&sect;" , "\xa7"},
+ {"&uml;" , "\xa8"},
+ {"&copy;" , "\xa9"},
+ {"&ordf;" , "\xaa"},
+ {"&laquo;" , "\xab"},
+ {"&not;" , "\xac"},
+ {"&shy;" , "\xad"},
+ {"&reg;" , "\xae"},
+ {"&macr;" , "\xaf"},
+
+ {"&deg;" , "\xb0"},
+ {"&plusmn;", "\xb1"},
+ {"&sup2;" , "\xb2"},
+ {"&sup3;" , "\xb3"},
+ {"&acute;" , "\xb4"},
+ {"&micro;" , "\xb5"},
+ {"&para;" , "\xb6"},
+ {"&middot;", "\xb7"},
+ {"&cedil;" , "\xb8"},
+ {"&sup1;" , "\xb9"},
+ {"&ordm;" , "\xba"},
+ {"&raquo;" , "\xbb"},
+ {"&frac14;", "\xbc"},
+ {"&frac12;", "\xbd"},
+ {"&frac34;", "\xbe"},
+ {"&iquest;", "\xbf"},
+
+ {"&Agrave;", "\xc0"},
+ {"&Aacute;", "\xc1"},
+ {"&Acirc;" , "\xc2"},
+ {"&Atilde;", "\xc3"},
+ {"&Auml;" , "\xc4"},
+ {"&Aring;" , "\xc5"},
+ {"&AElig;" , "\xc6"},
+ {"&Ccedil;", "\xc7"},
+ {"&Egrave;", "\xc8"},
+ {"&Eacute;", "\xc9"},
+ {"&Ecirc;" , "\xca"},
+ {"&Euml;" , "\xcb"},
+ {"&Igrave;", "\xcc"},
+ {"&Iacute;", "\xcd"},
+ {"&Icirc;" , "\xce"},
+ {"&Iuml;" , "\xcf"},
+
+ {"&ETH;" , "\xd0"},
+ {"&Ntilde;", "\xd1"},
+ {"&Ograve;", "\xd2"},
+ {"&Oacute;", "\xd3"},
+ {"&Ocirc;" , "\xd4"},
+ {"&Otilde;", "\xd5"},
+ {"&Ouml;" , "\xd6"},
+ {"&times;" , "\xd7"},
+ {"&Oslash;", "\xd8"},
+ {"&Ugrave;", "\xd9"},
+ {"&Uacute;", "\xda"},
+ {"&Ucirc;" , "\xdb"},
+ {"&Uuml;" , "\xdc"},
+ {"&Yacute;", "\xdd"},
+ {"&THORN;" , "\xde"},
+ {"&szlig;" , "\xdf"},
+
+ {"&agrave;", "\xe0"},
+ {"&aacute;", "\xe1"},
+ {"&acirc;" , "\xe2"},
+ {"&atilde;", "\xe3"},
+ {"&auml;" , "\xe4"},
+ {"&aring;" , "\xe5"},
+ {"&aelig;" , "\xe6"},
+ {"&ccedil;", "\xe7"},
+ {"&egrave;", "\xe8"},
+ {"&eacute;", "\xe9"},
+ {"&ecirc;" , "\xea"},
+ {"&euml;" , "\xeb"},
+ {"&igrave;", "\xec"},
+ {"&iacute;", "\xed"},
+ {"&icirc;" , "\xee"},
+ {"&iuml;" , "\xef"},
+
+ {"&eth;" , "\xf0"},
+ {"&ntilde;", "\xf1"},
+ {"&ograve;", "\xf2"},
+ {"&oacute;", "\xf3"},
+ {"&ocirc;" , "\xf4"},
+ {"&otilde;", "\xf5"},
+ {"&ouml;" , "\xf6"},
+ {"&divide;", "\xf7"},
+ {"&oslash;", "\xf8"},
+ {"&ugrave;", "\xf9"},
+ {"&uacute;", "\xfa"},
+ {"&ucirc;" , "\xfb"},
+ {"&uuml;" , "\xfc"},
+ {"&yacute;", "\xfd"},
+ {"&thorn;" , "\xfe"},
+ {"&yuml;" , "\xff"},
+};
+
+static GHashTable *default_symbol_table;
+static GHashTable *eucjp_symbol_table;
+static GHashTable *latin_symbol_table;
+
+static HTMLState html_read_line (HTMLParser *parser);
+static void html_append_char (HTMLParser *parser,
+ gchar ch);
+static void html_append_str (HTMLParser *parser,
+ const gchar *str,
+ gint len);
+static HTMLState html_parse_tag (HTMLParser *parser);
+static void html_parse_special (HTMLParser *parser);
+static void html_get_parenthesis (HTMLParser *parser,
+ gchar *buf,
+ gint len);
+
+
+HTMLParser *html_parser_new(FILE *fp, CodeConverter *conv)
+{
+ HTMLParser *parser;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+ g_return_val_if_fail(conv != NULL, NULL);
+
+ parser = g_new0(HTMLParser, 1);
+ parser->fp = fp;
+ parser->conv = conv;
+ parser->str = g_string_new(NULL);
+ parser->buf = g_string_new(NULL);
+ parser->bufp = parser->buf->str;
+ parser->state = HTML_NORMAL;
+ parser->href = NULL;
+ parser->newline = TRUE;
+ parser->empty_line = TRUE;
+ parser->space = FALSE;
+ parser->pre = FALSE;
+
+#define SYMBOL_TABLE_ADD(table, list) \
+{ \
+ gint i; \
+ \
+ for (i = 0; i < sizeof(list) / sizeof(list[0]); i++) \
+ g_hash_table_insert(table, list[i].key, list[i].val); \
+}
+
+ if (!default_symbol_table) {
+ default_symbol_table =
+ g_hash_table_new(g_str_hash, g_str_equal);
+ SYMBOL_TABLE_ADD(default_symbol_table, symbol_list);
+ SYMBOL_TABLE_ADD(default_symbol_table, ascii_symbol_list);
+ }
+ if (!eucjp_symbol_table) {
+ eucjp_symbol_table =
+ g_hash_table_new(g_str_hash, g_str_equal);
+ SYMBOL_TABLE_ADD(eucjp_symbol_table, symbol_list);
+ SYMBOL_TABLE_ADD(eucjp_symbol_table, eucjp_symbol_list);
+ }
+ if (!latin_symbol_table) {
+ latin_symbol_table =
+ g_hash_table_new(g_str_hash, g_str_equal);
+ SYMBOL_TABLE_ADD(latin_symbol_table, symbol_list);
+ SYMBOL_TABLE_ADD(latin_symbol_table, latin_symbol_list);
+ }
+
+#undef SYMBOL_TABLE_ADD
+
+ if (conv->charset == C_ISO_8859_1)
+ parser->symbol_table = latin_symbol_table;
+ else if ((conv->charset == C_ISO_2022_JP ||
+ conv->charset == C_ISO_2022_JP_2 ||
+ conv->charset == C_EUC_JP ||
+ conv->charset == C_SHIFT_JIS) &&
+ conv_get_locale_charset() == C_EUC_JP)
+ parser->symbol_table = eucjp_symbol_table;
+ else
+ parser->symbol_table = default_symbol_table;
+
+ return parser;
+}
+
+void html_parser_destroy(HTMLParser *parser)
+{
+ g_string_free(parser->str, TRUE);
+ g_string_free(parser->buf, TRUE);
+ g_free(parser->href);
+ g_free(parser);
+}
+
+gchar *html_parse(HTMLParser *parser)
+{
+ parser->state = HTML_NORMAL;
+ g_string_truncate(parser->str, 0);
+
+ if (*parser->bufp == '\0') {
+ g_string_truncate(parser->buf, 0);
+ parser->bufp = parser->buf->str;
+ if (html_read_line(parser) == HTML_EOF)
+ return NULL;
+ }
+
+ while (*parser->bufp != '\0') {
+ switch (*parser->bufp) {
+ case '<':
+ if (parser->str->len == 0)
+ html_parse_tag(parser);
+ else
+ return parser->str->str;
+ break;
+ case '&':
+ html_parse_special(parser);
+ break;
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ if (parser->bufp[0] == '\r' && parser->bufp[1] == '\n')
+ parser->bufp++;
+
+ if (!parser->pre) {
+ if (!parser->newline)
+ parser->space = TRUE;
+
+ parser->bufp++;
+ break;
+ }
+ /* fallthrough */
+ default:
+ html_append_char(parser, *parser->bufp++);
+ }
+ }
+
+ return parser->str->str;
+}
+
+static HTMLState html_read_line(HTMLParser *parser)
+{
+ gchar buf[HTMLBUFSIZE];
+ gchar buf2[HTMLBUFSIZE];
+ gint index;
+
+ if (fgets(buf, sizeof(buf), parser->fp) == NULL) {
+ parser->state = HTML_EOF;
+ return HTML_EOF;
+ }
+
+ if (conv_convert(parser->conv, buf2, sizeof(buf2), buf) < 0) {
+ index = parser->bufp - parser->buf->str;
+
+ conv_localetodisp(buf2, sizeof(buf2), buf);
+ g_string_append(parser->buf, buf2);
+
+ parser->bufp = parser->buf->str + index;
+
+ return HTML_CONV_FAILED;
+ }
+
+ index = parser->bufp - parser->buf->str;
+
+ g_string_append(parser->buf, buf2);
+
+ parser->bufp = parser->buf->str + index;
+
+ return HTML_NORMAL;
+}
+
+static void html_append_char(HTMLParser *parser, gchar ch)
+{
+ GString *str = parser->str;
+
+ if (!parser->pre && parser->space) {
+ g_string_append_c(str, ' ');
+ parser->space = FALSE;
+ }
+
+ g_string_append_c(str, ch);
+
+ parser->empty_line = FALSE;
+ if (ch == '\n') {
+ parser->newline = TRUE;
+ if (str->len > 1 && str->str[str->len - 2] == '\n')
+ parser->empty_line = TRUE;
+ } else
+ parser->newline = FALSE;
+}
+
+static void html_append_str(HTMLParser *parser, const gchar *str, gint len)
+{
+ GString *string = parser->str;
+
+ if (!parser->pre && parser->space) {
+ g_string_append_c(string, ' ');
+ parser->space = FALSE;
+ }
+
+ if (len == 0) return;
+ if (len < 0)
+ g_string_append(string, str);
+ else {
+ gchar *s;
+ Xstrndup_a(s, str, len, return);
+ g_string_append(string, s);
+ }
+
+ parser->empty_line = FALSE;
+ if (string->len > 0 && string->str[string->len - 1] == '\n') {
+ parser->newline = TRUE;
+ if (string->len > 1 && string->str[string->len - 2] == '\n')
+ parser->empty_line = TRUE;
+ } else
+ parser->newline = FALSE;
+}
+
+static HTMLTag *html_get_tag(const gchar *str)
+{
+ HTMLTag *tag;
+ gchar *tmp;
+ guchar *tmpp;
+
+ g_return_val_if_fail(str != NULL, NULL);
+
+ if (*str == '\0' || *str == '!') return NULL;
+
+ Xstrdup_a(tmp, str, return NULL);
+
+ tag = g_new0(HTMLTag, 1);
+
+ for (tmpp = tmp; *tmpp != '\0' && !isspace(*tmpp); tmpp++)
+ ;
+
+ if (*tmpp == '\0') {
+ g_strdown(tmp);
+ tag->name = g_strdup(tmp);
+ return tag;
+ } else {
+ *tmpp++ = '\0';
+ g_strdown(tmp);
+ tag->name = g_strdup(tmp);
+ }
+
+ while (*tmpp != '\0') {
+ HTMLAttr *attr;
+ gchar *attr_name;
+ gchar *attr_value;
+ gchar *p;
+ gchar quote;
+
+ while (isspace(*tmpp)) tmpp++;
+ attr_name = tmpp;
+
+ while (*tmpp != '\0' && !isspace(*tmpp) && *tmpp != '=') tmpp++;
+ if (*tmpp != '\0' && *tmpp != '=') {
+ *tmpp++ = '\0';
+ while (isspace(*tmpp)) tmpp++;
+ }
+
+ if (*tmpp == '=') {
+ *tmpp++ = '\0';
+ while (isspace(*tmpp)) tmpp++;
+
+ if (*tmpp == '"' || *tmpp == '\'') {
+ /* name="value" */
+ quote = *tmpp;
+ tmpp++;
+ attr_value = tmpp;
+ if ((p = strchr(attr_value, quote)) == NULL) {
+ g_warning("html_get_tag(): syntax error in tag: '%s'\n", str);
+ return tag;
+ }
+ tmpp = p;
+ *tmpp++ = '\0';
+ while (isspace(*tmpp)) tmpp++;
+ } else {
+ /* name=value */
+ attr_value = tmpp;
+ while (*tmpp != '\0' && !isspace(*tmpp)) tmpp++;
+ if (*tmpp != '\0')
+ *tmpp++ = '\0';
+ }
+ } else
+ attr_value = "";
+
+ g_strchomp(attr_name);
+ g_strdown(attr_name);
+ attr = g_new(HTMLAttr, 1);
+ attr->name = g_strdup(attr_name);
+ attr->value = g_strdup(attr_value);
+ tag->attr = g_list_append(tag->attr, attr);
+ }
+
+ return tag;
+}
+
+static void html_free_tag(HTMLTag *tag)
+{
+ if (!tag) return;
+
+ g_free(tag->name);
+ while (tag->attr != NULL) {
+ HTMLAttr *attr = (HTMLAttr *)tag->attr->data;
+ g_free(attr->name);
+ g_free(attr->value);
+ g_free(attr);
+ tag->attr = g_list_remove(tag->attr, tag->attr->data);
+ }
+ g_free(tag);
+}
+
+static HTMLState html_parse_tag(HTMLParser *parser)
+{
+ gchar buf[HTMLBUFSIZE];
+ HTMLTag *tag;
+
+ html_get_parenthesis(parser, buf, sizeof(buf));
+
+ tag = html_get_tag(buf);
+
+ parser->state = HTML_UNKNOWN;
+ if (!tag) return HTML_UNKNOWN;
+
+ if (!strcmp(tag->name, "br")) {
+ parser->space = FALSE;
+ html_append_char(parser, '\n');
+ parser->state = HTML_BR;
+ } else if (!strcmp(tag->name, "a")) {
+ if (tag->attr && tag->attr->data &&
+ !strcmp(((HTMLAttr *)tag->attr->data)->name, "href")) {
+ g_free(parser->href);
+ parser->href =
+ g_strdup(((HTMLAttr *)tag->attr->data)->value);
+ parser->state = HTML_HREF;
+ }
+ } else if (!strcmp(tag->name, "/a")) {
+ g_free(parser->href);
+ parser->href = NULL;
+ parser->state = HTML_NORMAL;
+ } else if (!strcmp(tag->name, "p")) {
+ parser->space = FALSE;
+ if (!parser->empty_line) {
+ parser->space = FALSE;
+ if (!parser->newline) html_append_char(parser, '\n');
+ html_append_char(parser, '\n');
+ }
+ parser->state = HTML_PAR;
+ } else if (!strcmp(tag->name, "pre")) {
+ parser->pre = TRUE;
+ parser->state = HTML_PRE;
+ } else if (!strcmp(tag->name, "/pre")) {
+ parser->pre = FALSE;
+ parser->state = HTML_NORMAL;
+ } else if (!strcmp(tag->name, "hr")) {
+ if (!parser->newline) {
+ parser->space = FALSE;
+ html_append_char(parser, '\n');
+ }
+ html_append_str(parser, HR_STR "\n", -1);
+ parser->state = HTML_HR;
+ } else if (!strcmp(tag->name, "div") ||
+ !strcmp(tag->name, "ul") ||
+ !strcmp(tag->name, "li") ||
+ !strcmp(tag->name, "table") ||
+ !strcmp(tag->name, "tr") ||
+ (tag->name[0] == 'h' && isdigit((guchar)tag->name[1]))) {
+ if (!parser->newline) {
+ parser->space = FALSE;
+ html_append_char(parser, '\n');
+ }
+ parser->state = HTML_NORMAL;
+ } else if (!strcmp(tag->name, "/table") ||
+ (tag->name[0] == '/' &&
+ tag->name[1] == 'h' &&
+ isdigit((guchar)tag->name[1]))) {
+ if (!parser->empty_line) {
+ parser->space = FALSE;
+ if (!parser->newline) html_append_char(parser, '\n');
+ html_append_char(parser, '\n');
+ }
+ parser->state = HTML_NORMAL;
+ } else if (!strcmp(tag->name, "/div") ||
+ !strcmp(tag->name, "/ul") ||
+ !strcmp(tag->name, "/li")) {
+ if (!parser->newline) {
+ parser->space = FALSE;
+ html_append_char(parser, '\n');
+ }
+ parser->state = HTML_NORMAL;
+ }
+
+ html_free_tag(tag);
+
+ return parser->state;
+}
+
+static void html_parse_special(HTMLParser *parser)
+{
+ gchar symbol_name[9];
+ gint n;
+ const gchar *val;
+
+ parser->state = HTML_UNKNOWN;
+ g_return_if_fail(*parser->bufp == '&');
+
+ /* &foo; */
+ for (n = 0; parser->bufp[n] != '\0' && parser->bufp[n] != ';'; n++)
+ ;
+ if (n > 7 || parser->bufp[n] != ';') {
+ /* output literal `&' */
+ html_append_char(parser, *parser->bufp++);
+ parser->state = HTML_NORMAL;
+ return;
+ }
+ strncpy2(symbol_name, parser->bufp, n + 2);
+ parser->bufp += n + 1;
+
+ if ((val = g_hash_table_lookup(parser->symbol_table, symbol_name))
+ != NULL) {
+ html_append_str(parser, val, -1);
+ parser->state = HTML_NORMAL;
+ return;
+ } else if (symbol_name[1] == '#' && isdigit((guchar)symbol_name[2])) {
+ gint ch;
+
+ ch = atoi(symbol_name + 2);
+ if ((ch > 0 && ch <= 127) ||
+ (ch >= 128 && ch <= 255 &&
+ parser->conv->charset == C_ISO_8859_1)) {
+ html_append_char(parser, ch);
+ parser->state = HTML_NORMAL;
+ return;
+ }
+ }
+
+ html_append_str(parser, symbol_name, -1);
+}
+
+static void html_get_parenthesis(HTMLParser *parser, gchar *buf, gint len)
+{
+ gchar *p;
+
+ buf[0] = '\0';
+ g_return_if_fail(*parser->bufp == '<');
+
+ /* ignore comment / CSS / script stuff */
+ if (!strncmp(parser->bufp, "<!--", 4)) {
+ parser->bufp += 4;
+ while ((p = strstr(parser->bufp, "-->")) == NULL)
+ if (html_read_line(parser) == HTML_EOF) return;
+ parser->bufp = p + 3;
+ return;
+ }
+ if (!g_strncasecmp(parser->bufp, "<style", 6)) {
+ parser->bufp += 6;
+ while ((p = strcasestr(parser->bufp, "</style>")) == NULL)
+ if (html_read_line(parser) == HTML_EOF) return;
+ parser->bufp = p + 8;
+ return;
+ }
+ if (!g_strncasecmp(parser->bufp, "<script", 7)) {
+ parser->bufp += 7;
+ while ((p = strcasestr(parser->bufp, "</script>")) == NULL)
+ if (html_read_line(parser) == HTML_EOF) return;
+ parser->bufp = p + 9;
+ return;
+ }
+
+ parser->bufp++;
+ while ((p = strchr(parser->bufp, '>')) == NULL)
+ if (html_read_line(parser) == HTML_EOF) return;
+
+ strncpy2(buf, parser->bufp, MIN(p - parser->bufp + 1, len));
+ g_strstrip(buf);
+ parser->bufp = p + 1;
+}
diff --git a/src/html.h b/src/html.h
new file mode 100644
index 00000000..7267c175
--- /dev/null
+++ b/src/html.h
@@ -0,0 +1,87 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __HTML_H__
+#define __HTML_H__
+
+#include <glib.h>
+#include <stdio.h>
+
+#include "codeconv.h"
+
+typedef enum
+{
+ HTML_NORMAL,
+ HTML_PAR,
+ HTML_BR,
+ HTML_HR,
+ HTML_HREF,
+ HTML_IMG,
+ HTML_FONT,
+ HTML_PRE,
+ HTML_UNKNOWN,
+ HTML_CONV_FAILED,
+ HTML_ERR,
+ HTML_EOF
+} HTMLState;
+
+typedef struct _HTMLParser HTMLParser;
+typedef struct _HTMLAttr HTMLAttr;
+typedef struct _HTMLTag HTMLTag;
+
+struct _HTMLParser
+{
+ FILE *fp;
+ CodeConverter *conv;
+
+ GHashTable *symbol_table;
+
+ GString *str;
+ GString *buf;
+
+ gchar *bufp;
+
+ HTMLState state;
+
+ gchar *href;
+
+ gboolean newline;
+ gboolean empty_line;
+ gboolean space;
+ gboolean pre;
+};
+
+struct _HTMLAttr
+{
+ gchar *name;
+ gchar *value;
+};
+
+struct _HTMLTag
+{
+ gchar *name;
+ GList *attr;
+};
+
+HTMLParser *html_parser_new (FILE *fp,
+ CodeConverter *conv);
+void html_parser_destroy (HTMLParser *parser);
+gchar *html_parse (HTMLParser *parser);
+
+#endif /* __HTML_H__ */
diff --git a/src/imageview.c b/src/imageview.c
new file mode 100644
index 00000000..c1dd68c0
--- /dev/null
+++ b/src/imageview.c
@@ -0,0 +1,251 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkimage.h>
+
+#if HAVE_GDK_PIXBUF
+# include <gdk-pixbuf/gdk-pixbuf.h>
+#endif /* HAVE_GDK_PIXBUF */
+
+#include "intl.h"
+#include "mainwindow.h"
+#include "prefs_common.h"
+#include "procmime.h"
+#include "imageview.h"
+#include "utils.h"
+
+static void get_resized_size (gint w,
+ gint h,
+ gint aw,
+ gint ah,
+ gint *sw,
+ gint *sh);
+
+static gint button_press_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+static void size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data);
+
+ImageView *imageview_create(void)
+{
+ ImageView *imageview;
+ GtkWidget *scrolledwin;
+
+ debug_print(_("Creating image view...\n"));
+ imageview = g_new0(ImageView, 1);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_size_request
+ (scrolledwin, prefs_common.mainview_width, -1);
+
+ g_signal_connect(G_OBJECT(scrolledwin), "button_press_event",
+ G_CALLBACK(button_press_cb), imageview);
+ g_signal_connect(G_OBJECT(scrolledwin), "size_allocate",
+ G_CALLBACK(size_allocate_cb), imageview);
+
+ gtk_widget_show_all(scrolledwin);
+
+ imageview->scrolledwin = scrolledwin;
+ imageview->image = NULL;
+ imageview->image_data = NULL;
+ imageview->resize = FALSE;
+ imageview->resizing = FALSE;
+
+ return imageview;
+}
+
+void imageview_init(ImageView *imageview)
+{
+}
+
+#if HAVE_GDK_PIXBUF
+void imageview_show_image(ImageView *imageview, MimeInfo *mimeinfo,
+ const gchar *file, gboolean resize)
+{
+ GdkPixbuf *pixbuf;
+ gint avail_width;
+ gint avail_height;
+ gint new_width;
+ gint new_height;
+ GError *error = NULL;
+
+ g_return_if_fail(imageview != NULL);
+
+ if (file) {
+ imageview_clear(imageview);
+ pixbuf = gdk_pixbuf_new_from_file(file, &error);
+ imageview->image_data = pixbuf;
+ } else {
+ pixbuf = (GdkPixbuf *)imageview->image_data;
+ }
+
+ if (error != NULL) {
+ g_warning("%s\n", error->message);
+ g_error_free(error);
+ }
+
+ if (!pixbuf) {
+ g_warning(_("Can't load the image."));
+ return;
+ }
+
+ imageview->resize = resize;
+
+ if (resize) {
+ GdkPixbuf *pixbuf_scaled;
+
+ avail_width = imageview->scrolledwin->parent->allocation.width;
+ avail_height = imageview->scrolledwin->parent->allocation.height;
+ if (avail_width > 8) avail_width -= 8;
+ if (avail_height > 8) avail_height -= 8;
+
+ get_resized_size(gdk_pixbuf_get_width(pixbuf),
+ gdk_pixbuf_get_height(pixbuf),
+ avail_width, avail_height,
+ &new_width, &new_height);
+
+ pixbuf_scaled = gdk_pixbuf_scale_simple
+ (pixbuf, new_width, new_height, GDK_INTERP_BILINEAR);
+ pixbuf = pixbuf_scaled;
+ } else
+ g_object_ref(pixbuf);
+
+ if (!imageview->image) {
+ imageview->image = gtk_image_new_from_pixbuf(pixbuf);
+
+ gtk_scrolled_window_add_with_viewport
+ (GTK_SCROLLED_WINDOW(imageview->scrolledwin),
+ imageview->image);
+ } else
+ gtk_image_set_from_pixbuf(GTK_IMAGE(imageview->image), pixbuf);
+
+ gdk_pixbuf_unref(pixbuf);
+
+ gtk_widget_show(imageview->image);
+}
+#else
+void imageview_show_image(ImageView *imageview, MimeInfo *mimeinfo,
+ const gchar *file, gboolean resize)
+{
+}
+#endif /* HAVE_GDK_PIXBUF */
+
+void imageview_clear(ImageView *imageview)
+{
+ GtkAdjustment *hadj, *vadj;
+
+ if (imageview->image)
+ gtk_image_set_from_pixmap(GTK_IMAGE(imageview->image),
+ NULL, NULL);
+ hadj = gtk_scrolled_window_get_hadjustment
+ (GTK_SCROLLED_WINDOW(imageview->scrolledwin));
+ gtk_adjustment_set_value(hadj, 0.0);
+ vadj = gtk_scrolled_window_get_vadjustment
+ (GTK_SCROLLED_WINDOW(imageview->scrolledwin));
+ gtk_adjustment_set_value(vadj, 0.0);
+
+ if (imageview->image_data) {
+#if HAVE_GDK_PIXBUF
+ gdk_pixbuf_unref((GdkPixbuf *)imageview->image_data);
+#endif
+ imageview->image_data = NULL;
+ }
+}
+
+void imageview_destroy(ImageView *imageview)
+{
+ imageview_clear(imageview);
+ g_free(imageview);
+}
+
+static void get_resized_size(gint w, gint h, gint aw, gint ah,
+ gint *sw, gint *sh)
+{
+ gfloat wratio = 1.0;
+ gfloat hratio = 1.0;
+ gfloat ratio = 1.0;
+
+ if (w <= aw && h <= ah) {
+ *sw = w;
+ *sh = h;
+ return;
+ }
+
+ if (w > aw)
+ wratio = (gfloat)aw / (gfloat)w;
+ if (h > ah)
+ hratio = (gfloat)ah / (gfloat)h;
+
+ ratio = (wratio > hratio) ? hratio : wratio;
+
+ *sw = (gint)(w * ratio);
+ *sh = (gint)(h * ratio);
+
+ /* restrict minimum size */
+ if (*sw < 16 || *sh < 16) {
+ wratio = 16.0 / (gfloat)w;
+ hratio = 16.0 / (gfloat)h;
+ ratio = (wratio > hratio) ? wratio : hratio;
+ if (ratio >= 1.0) {
+ *sw = w;
+ *sh = h;
+ } else {
+ *sw = (gint)(w * ratio);
+ *sh = (gint)(h * ratio);
+ }
+ }
+}
+
+static gint button_press_cb(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ ImageView *imageview = (ImageView *)data;
+
+ if (event->button == 1 && imageview->image) {
+ imageview_show_image(imageview, NULL, NULL, !imageview->resize);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void size_allocate_cb(GtkWidget *widget,GtkAllocation *allocation,
+ gpointer data)
+{
+ ImageView *imageview = (ImageView *)data;
+
+ if (imageview->resize) {
+ if (imageview->resizing) {
+ imageview->resizing = FALSE;
+ return;
+ }
+ imageview_show_image(imageview, NULL, NULL, TRUE);
+ imageview->resizing = TRUE;
+ }
+}
diff --git a/src/imageview.h b/src/imageview.h
new file mode 100644
index 00000000..52269e3e
--- /dev/null
+++ b/src/imageview.h
@@ -0,0 +1,52 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __IMAGEVIEW_H__
+#define __IMAGEVIEW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef struct _ImageView ImageView;
+
+#include "messageview.h"
+#include "procmime.h"
+
+struct _ImageView
+{
+ GtkWidget *scrolledwin;
+ GtkWidget *image;
+
+ gpointer image_data;
+ gboolean resize;
+ gboolean resizing;
+
+ MessageView *messageview;
+};
+
+ImageView *imageview_create (void);
+void imageview_init (ImageView *imageview);
+void imageview_show_image (ImageView *imageview,
+ MimeInfo *mimeinfo,
+ const gchar *file,
+ gboolean resize);
+void imageview_clear (ImageView *imageview);
+void imageview_destroy (ImageView *imageview);
+
+#endif /* __IMAGEVIEW_H__ */
diff --git a/src/imap.c b/src/imap.c
new file mode 100644
index 00000000..d038162f
--- /dev/null
+++ b/src/imap.c
@@ -0,0 +1,3976 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <time.h>
+#if HAVE_ICONV
+# include <iconv.h>
+#endif
+
+#include "intl.h"
+#include "imap.h"
+#include "socket.h"
+#include "ssl.h"
+#include "recv.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "folder.h"
+#include "prefs_account.h"
+#include "codeconv.h"
+#include "md5.h"
+#include "base64.h"
+#include "utils.h"
+#include "prefs_common.h"
+#include "inputdialog.h"
+
+#define IMAP4_PORT 143
+#if USE_SSL
+#define IMAPS_PORT 993
+#endif
+
+#define IMAP_CMD_LIMIT 1000
+
+#define QUOTE_IF_REQUIRED(out, str) \
+{ \
+ if (*str != '"' && strpbrk(str, " \t(){}%*") != NULL) { \
+ gchar *__tmp; \
+ gint len; \
+ \
+ len = strlen(str) + 3; \
+ Xalloca(__tmp, len, return IMAP_ERROR); \
+ g_snprintf(__tmp, len, "\"%s\"", str); \
+ out = __tmp; \
+ } else { \
+ Xstrdup_a(out, str, return IMAP_ERROR); \
+ } \
+}
+
+static GList *session_list = NULL;
+
+static void imap_folder_init (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+
+static Folder *imap_folder_new (const gchar *name,
+ const gchar *path);
+static void imap_folder_destroy (Folder *folder);
+
+static Session *imap_session_new (PrefsAccount *account);
+static void imap_session_destroy (Session *session);
+/* static void imap_session_destroy_all (void); */
+
+static gint imap_search_flags (IMAPSession *session,
+ GArray **uids,
+ GHashTable **flags_table);
+static gint imap_fetch_flags (IMAPSession *session,
+ GArray **uids,
+ GHashTable **flags_table);
+
+static GSList *imap_get_msg_list (Folder *folder,
+ FolderItem *item,
+ gboolean use_cache);
+static gchar *imap_fetch_msg (Folder *folder,
+ FolderItem *item,
+ gint uid);
+static MsgInfo *imap_get_msginfo (Folder *folder,
+ FolderItem *item,
+ gint uid);
+static gint imap_add_msg (Folder *folder,
+ FolderItem *dest,
+ const gchar *file,
+ MsgFlags *flags,
+ gboolean remove_source);
+static gint imap_add_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *file_list,
+ gboolean remove_source,
+ gint *first);
+
+static gint imap_move_msg (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+static gint imap_move_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+static gint imap_copy_msg (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+static gint imap_copy_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+
+static gint imap_remove_msg (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+static gint imap_remove_msgs (Folder *folder,
+ FolderItem *item,
+ GSList *msglist);
+static gint imap_remove_all_msg (Folder *folder,
+ FolderItem *item);
+
+static gboolean imap_is_msg_changed (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+
+static gint imap_close (Folder *folder,
+ FolderItem *item);
+
+static gint imap_scan_folder (Folder *folder,
+ FolderItem *item);
+static gint imap_scan_tree (Folder *folder);
+
+static gint imap_create_tree (Folder *folder);
+
+static FolderItem *imap_create_folder (Folder *folder,
+ FolderItem *parent,
+ const gchar *name);
+static gint imap_rename_folder (Folder *folder,
+ FolderItem *item,
+ const gchar *name);
+static gint imap_remove_folder (Folder *folder,
+ FolderItem *item);
+
+static IMAPSession *imap_session_get (Folder *folder);
+
+static gint imap_greeting (IMAPSession *session);
+static gint imap_auth (IMAPSession *session,
+ const gchar *user,
+ const gchar *pass,
+ IMAPAuthType type);
+
+static gint imap_scan_tree_recursive (IMAPSession *session,
+ FolderItem *item);
+static GSList *imap_parse_list (IMAPSession *session,
+ const gchar *real_path,
+ gchar *separator);
+
+static void imap_create_missing_folders (Folder *folder);
+static FolderItem *imap_create_special_folder
+ (Folder *folder,
+ SpecialFolderItemType stype,
+ const gchar *name);
+
+static gint imap_do_copy_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist,
+ gboolean remove_source);
+static gint imap_remove_msgs_by_seq_set (Folder *folder,
+ FolderItem *item,
+ GSList *seq_list);
+
+static GSList *imap_get_uncached_messages (IMAPSession *session,
+ FolderItem *item,
+ guint32 first_uid,
+ guint32 last_uid,
+ gboolean update_count);
+static void imap_delete_cached_message (FolderItem *item,
+ guint32 uid);
+static GSList *imap_delete_cached_messages (GSList *mlist,
+ FolderItem *item,
+ guint32 first_uid,
+ guint32 last_uid);
+static void imap_delete_all_cached_messages (FolderItem *item);
+
+#if USE_SSL
+static SockInfo *imap_open (const gchar *server,
+ gushort port,
+ SSLType ssl_type);
+#else
+static SockInfo *imap_open (const gchar *server,
+ gushort port);
+#endif
+
+static gint imap_msg_list_change_perm_flags (GSList *msglist,
+ MsgPermFlags flags,
+ gboolean is_set);
+static gchar *imap_get_flag_str (IMAPFlags flags);
+static gint imap_set_message_flags (IMAPSession *session,
+ const gchar *seq_set,
+ IMAPFlags flags,
+ gboolean is_set);
+static gint imap_select (IMAPSession *session,
+ IMAPFolder *folder,
+ const gchar *path,
+ gint *exists,
+ gint *recent,
+ gint *unseen,
+ guint32 *uid_validity);
+static gint imap_status (IMAPSession *session,
+ IMAPFolder *folder,
+ const gchar *path,
+ gint *messages,
+ gint *recent,
+ guint32 *uid_next,
+ guint32 *uid_validity,
+ gint *unseen);
+
+static void imap_parse_namespace (IMAPSession *session,
+ IMAPFolder *folder);
+static void imap_get_namespace_by_list (IMAPSession *session,
+ IMAPFolder *folder);
+static IMAPNameSpace *imap_find_namespace (IMAPFolder *folder,
+ const gchar *path);
+static gchar imap_get_path_separator (IMAPFolder *folder,
+ const gchar *path);
+static gchar *imap_get_real_path (IMAPFolder *folder,
+ const gchar *path);
+
+static gchar *imap_parse_atom (IMAPSession *session,
+ gchar *src,
+ gchar *dest,
+ gint dest_len,
+ GString *str);
+static MsgFlags imap_parse_flags (const gchar *flag_str);
+static IMAPFlags imap_parse_imap_flags (const gchar *flag_str);
+static MsgInfo *imap_parse_envelope (IMAPSession *session,
+ FolderItem *item,
+ GString *line_str);
+
+static gboolean imap_has_capability (IMAPSession *session,
+ const gchar *capability);
+static void imap_capability_free (IMAPSession *session);
+
+/* low-level IMAP4rev1 commands */
+static gint imap_cmd_capability (IMAPSession *session);
+static gint imap_cmd_authenticate
+ (IMAPSession *session,
+ const gchar *user,
+ const gchar *pass,
+ IMAPAuthType type);
+static gint imap_cmd_login (IMAPSession *session,
+ const gchar *user,
+ const gchar *pass);
+static gint imap_cmd_logout (IMAPSession *session);
+static gint imap_cmd_noop (IMAPSession *session);
+#if USE_SSL
+static gint imap_cmd_starttls (IMAPSession *session);
+#endif
+static gint imap_cmd_namespace (IMAPSession *session,
+ gchar **ns_str);
+static gint imap_cmd_list (IMAPSession *session,
+ const gchar *ref,
+ const gchar *mailbox,
+ GPtrArray *argbuf);
+static gint imap_cmd_do_select (IMAPSession *session,
+ const gchar *folder,
+ gboolean examine,
+ gint *exists,
+ gint *recent,
+ gint *unseen,
+ guint32 *uid_validity);
+static gint imap_cmd_select (IMAPSession *session,
+ const gchar *folder,
+ gint *exists,
+ gint *recent,
+ gint *unseen,
+ guint32 *uid_validity);
+static gint imap_cmd_examine (IMAPSession *session,
+ const gchar *folder,
+ gint *exists,
+ gint *recent,
+ gint *unseen,
+ guint32 *uid_validity);
+static gint imap_cmd_create (IMAPSession *session,
+ const gchar *folder);
+static gint imap_cmd_rename (IMAPSession *session,
+ const gchar *oldfolder,
+ const gchar *newfolder);
+static gint imap_cmd_delete (IMAPSession *session,
+ const gchar *folder);
+static gint imap_cmd_envelope (IMAPSession *session,
+ const gchar *seq_set);
+static gint imap_cmd_search (IMAPSession *session,
+ const gchar *criteria,
+ GArray **result);
+static gint imap_cmd_fetch (IMAPSession *session,
+ guint32 uid,
+ const gchar *filename);
+static gint imap_cmd_append (IMAPSession *session,
+ const gchar *destfolder,
+ const gchar *file,
+ IMAPFlags flags,
+ guint32 *new_uid);
+static gint imap_cmd_copy (IMAPSession *session,
+ const gchar *seq_set,
+ const gchar *destfolder);
+static gint imap_cmd_store (IMAPSession *session,
+ const gchar *seq_set,
+ const gchar *sub_cmd);
+static gint imap_cmd_expunge (IMAPSession *session);
+static gint imap_cmd_close (IMAPSession *session);
+
+static gint imap_cmd_ok (IMAPSession *session,
+ GPtrArray *argbuf);
+static void imap_cmd_gen_send (IMAPSession *session,
+ const gchar *format, ...);
+static gint imap_cmd_gen_recv (IMAPSession *session,
+ gchar **ret);
+
+/* misc utility functions */
+static gchar *strchr_cpy (const gchar *src,
+ gchar ch,
+ gchar *dest,
+ gint len);
+static gchar *get_quoted (const gchar *src,
+ gchar ch,
+ gchar *dest,
+ gint len);
+static gchar *search_array_contain_str (GPtrArray *array,
+ gchar *str);
+static gchar *search_array_str (GPtrArray *array,
+ gchar *str);
+static void imap_path_separator_subst (gchar *str,
+ gchar separator);
+
+static gchar *imap_modified_utf7_to_locale (const gchar *mutf7_str);
+static gchar *imap_locale_to_modified_utf7 (const gchar *from);
+
+static GSList *imap_get_seq_set_from_msglist (GSList *msglist);
+static void imap_seq_set_free (GSList *seq_list);
+
+static GHashTable *imap_get_uid_table (GArray *array);
+
+static gboolean imap_rename_folder_func (GNode *node,
+ gpointer data);
+
+static FolderClass imap_class =
+{
+ F_IMAP,
+
+ imap_folder_new,
+ imap_folder_destroy,
+
+ imap_scan_tree,
+ imap_create_tree,
+
+ imap_get_msg_list,
+ imap_fetch_msg,
+ imap_get_msginfo,
+ imap_add_msg,
+ imap_add_msgs,
+ imap_move_msg,
+ imap_move_msgs,
+ imap_copy_msg,
+ imap_copy_msgs,
+ imap_remove_msg,
+ imap_remove_msgs,
+ imap_remove_all_msg,
+ imap_is_msg_changed,
+ imap_close,
+ imap_scan_folder,
+
+ imap_create_folder,
+ imap_rename_folder,
+ imap_remove_folder
+};
+
+
+FolderClass *imap_get_class(void)
+{
+ return &imap_class;
+}
+
+static Folder *imap_folder_new(const gchar *name, const gchar *path)
+{
+ Folder *folder;
+
+ folder = (Folder *)g_new0(IMAPFolder, 1);
+ imap_folder_init(folder, name, path);
+
+ return folder;
+}
+
+static void imap_folder_destroy(Folder *folder)
+{
+ gchar *dir;
+
+ dir = folder_get_path(folder);
+ if (is_dir_exist(dir))
+ remove_dir_recursive(dir);
+ g_free(dir);
+
+ folder_remote_folder_destroy(REMOTE_FOLDER(folder));
+}
+
+static void imap_folder_init(Folder *folder, const gchar *name,
+ const gchar *path)
+{
+ folder->klass = imap_get_class();
+ folder_remote_folder_init(folder, name, path);
+}
+
+static IMAPSession *imap_session_get(Folder *folder)
+{
+ RemoteFolder *rfolder = REMOTE_FOLDER(folder);
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_IMAP, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+
+ if (!prefs_common.online_mode)
+ return NULL;
+
+ if (!rfolder->session) {
+ rfolder->session = imap_session_new(folder->account);
+ if (rfolder->session)
+ imap_parse_namespace(IMAP_SESSION(rfolder->session),
+ IMAP_FOLDER(folder));
+ return IMAP_SESSION(rfolder->session);
+ }
+
+ if (time(NULL) - rfolder->session->last_access_time <
+ SESSION_TIMEOUT_INTERVAL) {
+ return IMAP_SESSION(rfolder->session);
+ }
+
+ if (imap_cmd_noop(IMAP_SESSION(rfolder->session)) != IMAP_SUCCESS) {
+ log_warning(_("IMAP4 connection to %s has been"
+ " disconnected. Reconnecting...\n"),
+ folder->account->recv_server);
+ session_destroy(rfolder->session);
+ rfolder->session = imap_session_new(folder->account);
+ if (rfolder->session)
+ imap_parse_namespace(IMAP_SESSION(rfolder->session),
+ IMAP_FOLDER(folder));
+ }
+
+ return IMAP_SESSION(rfolder->session);
+}
+
+static gint imap_greeting(IMAPSession *session)
+{
+ gchar *greeting;
+ gint ok;
+
+ if ((ok = imap_cmd_gen_recv(session, &greeting)) != IMAP_SUCCESS)
+ return ok;
+
+ if (greeting[0] != '*' || greeting[1] != ' ')
+ ok = IMAP_ERROR;
+ else if (!strncmp(greeting + 2, "OK", 2))
+ ok = IMAP_SUCCESS;
+ else if (!strncmp(greeting + 2, "PREAUTH", 7)) {
+ session->authenticated = TRUE;
+ ok = IMAP_SUCCESS;
+ } else
+ ok = IMAP_ERROR;
+
+ g_free(greeting);
+ return ok;
+}
+
+static gint imap_auth(IMAPSession *session, const gchar *user,
+ const gchar *pass, IMAPAuthType type)
+{
+ gint ok;
+
+ if (type == 0 || type == IMAP_AUTH_LOGIN)
+ ok = imap_cmd_login(session, user, pass);
+ else
+ ok = imap_cmd_authenticate(session, user, pass, type);
+
+ if (ok == IMAP_SUCCESS)
+ session->authenticated = TRUE;
+
+ return ok;
+}
+
+static Session *imap_session_new(PrefsAccount *account)
+{
+ IMAPSession *session;
+ SockInfo *sock;
+ gchar *pass;
+ gushort port;
+
+ g_return_val_if_fail(account != NULL, NULL);
+ g_return_val_if_fail(account->recv_server != NULL, NULL);
+ g_return_val_if_fail(account->userid != NULL, NULL);
+
+ pass = account->passwd;
+ if (!pass) {
+ gchar *tmp_pass;
+ tmp_pass = input_dialog_query_password(account->recv_server,
+ account->userid);
+ if (!tmp_pass)
+ return NULL;
+ Xstrdup_a(pass, tmp_pass, {g_free(tmp_pass); return NULL;});
+ g_free(tmp_pass);
+ }
+
+#if USE_SSL
+ port = account->set_imapport ? account->imapport
+ : account->ssl_imap == SSL_TUNNEL ? IMAPS_PORT : IMAP4_PORT;
+#else
+ port = account->set_imapport ? account->imapport : IMAP4_PORT;
+#endif
+
+ log_message(_("creating IMAP4 connection to %s:%d ...\n"),
+ account->recv_server, port);
+
+#if USE_SSL
+ if ((sock = imap_open(account->recv_server, port,
+ account->ssl_imap)) == NULL)
+#else
+ if ((sock = imap_open(account->recv_server, port)) == NULL)
+#endif
+ return NULL;
+
+ session = g_new0(IMAPSession, 1);
+
+ session_init(SESSION(session));
+
+ SESSION(session)->type = SESSION_IMAP;
+ SESSION(session)->server = g_strdup(account->recv_server);
+ SESSION(session)->sock = sock;
+ SESSION(session)->last_access_time = time(NULL);
+ SESSION(session)->data = NULL;
+
+ SESSION(session)->destroy = imap_session_destroy;
+
+ session->authenticated = FALSE;
+ session->mbox = NULL;
+ session->cmd_count = 0;
+
+ session_list = g_list_append(session_list, session);
+
+ if (imap_greeting(session) != IMAP_SUCCESS) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+
+ if (imap_cmd_capability(session) != IMAP_SUCCESS) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ if (imap_has_capability(session, "UIDPLUS"))
+ session->uidplus = TRUE;
+
+#if USE_SSL
+ if (account->ssl_imap == SSL_STARTTLS &&
+ imap_has_capability(session, "STARTTLS")) {
+ gint ok;
+
+ ok = imap_cmd_starttls(session);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("Can't start TLS session.\n"));
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ if (!ssl_init_socket_with_method(sock, SSL_METHOD_TLSv1)) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ }
+#endif
+
+ if (!session->authenticated &&
+ imap_auth(session, account->userid, pass, account->imap_auth_type)
+ != IMAP_SUCCESS) {
+ imap_cmd_logout(session);
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+
+ return SESSION(session);
+}
+
+static void imap_session_destroy(Session *session)
+{
+ imap_capability_free(IMAP_SESSION(session));
+ g_free(IMAP_SESSION(session)->mbox);
+ session_list = g_list_remove(session_list, session);
+}
+
+#if 0
+static void imap_session_destroy_all(void)
+{
+ while (session_list != NULL) {
+ IMAPSession *session = (IMAPSession *)session_list->data;
+
+ imap_cmd_logout(session);
+ session_destroy(SESSION(session));
+ }
+}
+#endif
+
+#define THROW goto catch
+
+static gint imap_search_flags(IMAPSession *session, GArray **uids,
+ GHashTable **flags_table)
+{
+ gint ok;
+ gint i;
+ GArray *flag_uids;
+ GHashTable *unseen_table;
+ GHashTable *flagged_table;
+ GHashTable *answered_table;
+ guint32 uid;
+ IMAPFlags flags;
+
+ ok = imap_cmd_search(session, "ALL", uids);
+ if (ok != IMAP_SUCCESS) return ok;
+
+ ok = imap_cmd_search(session, "UNSEEN", &flag_uids);
+ if (ok != IMAP_SUCCESS) {
+ g_array_free(*uids, TRUE);
+ return ok;
+ }
+ unseen_table = imap_get_uid_table(flag_uids);
+ g_array_free(flag_uids, TRUE);
+ ok = imap_cmd_search(session, "FLAGGED", &flag_uids);
+ if (ok != IMAP_SUCCESS) {
+ g_hash_table_destroy(unseen_table);
+ g_array_free(*uids, TRUE);
+ return ok;
+ }
+ flagged_table = imap_get_uid_table(flag_uids);
+ g_array_free(flag_uids, TRUE);
+ ok = imap_cmd_search(session, "ANSWERED", &flag_uids);
+ if (ok != IMAP_SUCCESS) {
+ g_hash_table_destroy(flagged_table);
+ g_hash_table_destroy(unseen_table);
+ g_array_free(*uids, TRUE);
+ return ok;
+ }
+ answered_table = imap_get_uid_table(flag_uids);
+ g_array_free(flag_uids, TRUE);
+
+ *flags_table = g_hash_table_new(NULL, g_direct_equal);
+
+ for (i = 0; i < (*uids)->len; i++) {
+ uid = g_array_index(*uids, guint32, i);
+ flags = IMAP_FLAG_DRAFT;
+ if (!g_hash_table_lookup(unseen_table, GUINT_TO_POINTER(uid)))
+ flags |= IMAP_FLAG_SEEN;
+ if (g_hash_table_lookup(flagged_table, GUINT_TO_POINTER(uid)))
+ flags |= IMAP_FLAG_FLAGGED;
+ if (g_hash_table_lookup(answered_table, GUINT_TO_POINTER(uid)))
+ flags |= IMAP_FLAG_ANSWERED;
+ g_hash_table_insert(*flags_table, GUINT_TO_POINTER(uid),
+ GINT_TO_POINTER(flags));
+ }
+
+ g_hash_table_destroy(answered_table);
+ g_hash_table_destroy(flagged_table);
+ g_hash_table_destroy(unseen_table);
+
+ return IMAP_SUCCESS;
+}
+
+static gint imap_fetch_flags(IMAPSession *session, GArray **uids,
+ GHashTable **flags_table)
+{
+ gint ok;
+ gchar *tmp;
+ gchar *cur_pos;
+ gchar buf[IMAPBUFSIZE];
+ guint32 uid;
+ IMAPFlags flags;
+
+ imap_cmd_gen_send(session, "UID FETCH 1:* (UID FLAGS)");
+
+ *uids = g_array_new(FALSE, FALSE, sizeof(guint32));
+ *flags_table = g_hash_table_new(NULL, g_direct_equal);
+
+ while ((ok = imap_cmd_gen_recv(session, &tmp)) == IMAP_SUCCESS) {
+ if (tmp[0] != '*' || tmp[1] != ' ') {
+ g_free(tmp);
+ break;
+ }
+ cur_pos = tmp + 2;
+
+#define PARSE_ONE_ELEMENT(ch) \
+{ \
+ cur_pos = strchr_cpy(cur_pos, ch, buf, sizeof(buf)); \
+ if (cur_pos == NULL) { \
+ g_warning("cur_pos == NULL\n"); \
+ g_free(tmp); \
+ g_hash_table_destroy(*flags_table); \
+ g_array_free(*uids, TRUE); \
+ return IMAP_ERROR; \
+ } \
+}
+
+ PARSE_ONE_ELEMENT(' ');
+ PARSE_ONE_ELEMENT(' ');
+ if (strcmp(buf, "FETCH") != 0) {
+ g_free(tmp);
+ continue;
+ }
+ if (*cur_pos != '(') {
+ g_free(tmp);
+ continue;
+ }
+ cur_pos++;
+ uid = 0;
+ flags = 0;
+
+ while (*cur_pos != '\0' && *cur_pos != ')') {
+ while (*cur_pos == ' ') cur_pos++;
+
+ if (!strncmp(cur_pos, "UID ", 4)) {
+ cur_pos += 4;
+ uid = strtoul(cur_pos, &cur_pos, 10);
+ } else if (!strncmp(cur_pos, "FLAGS ", 6)) {
+ cur_pos += 6;
+ if (*cur_pos != '(') {
+ g_warning("*cur_pos != '('\n");
+ break;
+ }
+ cur_pos++;
+ PARSE_ONE_ELEMENT(')');
+ flags = imap_parse_imap_flags(buf);
+ flags |= IMAP_FLAG_DRAFT;
+ } else {
+ g_warning("invalid FETCH response: %s\n", cur_pos);
+ break;
+ }
+ }
+
+#undef PARSE_ONE_ELEMENT
+
+ if (uid > 0) {
+ g_array_append_val(*uids, uid);
+ g_hash_table_insert(*flags_table, GUINT_TO_POINTER(uid),
+ GINT_TO_POINTER(flags));
+ }
+
+ g_free(tmp);
+ }
+
+ if (ok != IMAP_SUCCESS) {
+ g_hash_table_destroy(*flags_table);
+ g_array_free(*uids, TRUE);
+ }
+
+ return ok;
+}
+
+static GSList *imap_get_msg_list(Folder *folder, FolderItem *item,
+ gboolean use_cache)
+{
+ GSList *mlist = NULL;
+ IMAPSession *session;
+ gint ok, exists = 0, recent = 0, unseen = 0;
+ guint32 uid_validity = 0;
+ guint32 first_uid = 0, last_uid = 0;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_IMAP, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+
+ item->new = item->unread = item->total = 0;
+
+ session = imap_session_get(folder);
+
+ if (!session) {
+ mlist = procmsg_read_cache(item, FALSE);
+ item->last_num = procmsg_get_last_num_in_msg_list(mlist);
+ procmsg_set_flags(mlist, item);
+ return mlist;
+ }
+
+ ok = imap_select(session, IMAP_FOLDER(folder), item->path,
+ &exists, &recent, &unseen, &uid_validity);
+ if (ok != IMAP_SUCCESS) THROW;
+
+ if (exists == 0) {
+ imap_delete_all_cached_messages(item);
+ return NULL;
+ }
+
+ /* invalidate current cache if UIDVALIDITY has been changed */
+ if (item->mtime != uid_validity) {
+ debug_print("imap_get_msg_list: "
+ "UIDVALIDITY has been changed.\n");
+ use_cache = FALSE;
+ }
+
+ if (use_cache) {
+ GArray *uids;
+ GHashTable *msg_table;
+ GHashTable *flags_table;
+ guint32 cache_last;
+ guint32 begin = 0;
+ GSList *cur, *next = NULL;
+ MsgInfo *msginfo;
+ IMAPFlags imap_flags;
+
+ /* get cache data */
+ mlist = procmsg_read_cache(item, FALSE);
+ procmsg_set_flags(mlist, item);
+ cache_last = procmsg_get_last_num_in_msg_list(mlist);
+
+ /* get all UID list and flags */
+ ok = imap_search_flags(session, &uids, &flags_table);
+ if (ok != IMAP_SUCCESS) {
+ if (ok == IMAP_SOCKET || ok == IMAP_IOERR) THROW;
+ ok = imap_fetch_flags(session, &uids, &flags_table);
+ if (ok != IMAP_SUCCESS) THROW;
+ }
+
+ if (uids->len > 0) {
+ first_uid = g_array_index(uids, guint32, 0);
+ last_uid = g_array_index(uids, guint32, uids->len - 1);
+ } else {
+ g_array_free(uids, TRUE);
+ g_hash_table_destroy(flags_table);
+ THROW;
+ }
+
+ /* sync message flags with server */
+ for (cur = mlist; cur != NULL; cur = next) {
+ msginfo = (MsgInfo *)cur->data;
+ next = cur->next;
+ imap_flags = GPOINTER_TO_INT(g_hash_table_lookup
+ (flags_table,
+ GUINT_TO_POINTER(msginfo->msgnum)));
+
+ if (imap_flags == 0) {
+ debug_print("imap_get_msg_list: "
+ "message %u has been deleted.\n",
+ msginfo->msgnum);
+ imap_delete_cached_message
+ (item, msginfo->msgnum);
+ if (MSG_IS_NEW(msginfo->flags))
+ item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ item->unread--;
+ item->total--;
+ mlist = g_slist_remove(mlist, msginfo);
+ procmsg_msginfo_free(msginfo);
+ continue;
+ }
+
+ if (!IMAP_IS_SEEN(imap_flags)) {
+ if (!MSG_IS_UNREAD(msginfo->flags)) {
+ item->unread++;
+ MSG_SET_PERM_FLAGS(msginfo->flags,
+ MSG_UNREAD);
+ }
+ } else {
+ if (MSG_IS_NEW(msginfo->flags))
+ item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ item->unread--;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags,
+ MSG_NEW|MSG_UNREAD);
+ }
+
+ if (IMAP_IS_FLAGGED(imap_flags)) {
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
+ } else {
+ MSG_UNSET_PERM_FLAGS(msginfo->flags,
+ MSG_MARKED);
+ }
+ if (IMAP_IS_ANSWERED(imap_flags)) {
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_REPLIED);
+ } else {
+ MSG_UNSET_PERM_FLAGS(msginfo->flags,
+ MSG_REPLIED);
+ }
+ }
+
+ /* check for the first new message */
+ msg_table = procmsg_msg_hash_table_create(mlist);
+ if (msg_table == NULL)
+ begin = first_uid;
+ else {
+ gint i;
+
+ for (i = 0; i < uids->len; i++) {
+ guint32 uid;
+
+ uid = g_array_index(uids, guint32, i);
+ if (g_hash_table_lookup
+ (msg_table, GUINT_TO_POINTER(uid))
+ == NULL) {
+ debug_print("imap_get_msg_list: "
+ "first new UID: %u\n", uid);
+ begin = uid;
+ break;
+ }
+ }
+ g_hash_table_destroy(msg_table);
+ }
+
+ g_array_free(uids, TRUE);
+ g_hash_table_destroy(flags_table);
+
+ /* remove ununsed caches */
+ if (first_uid > 0 && last_uid > 0) {
+ mlist = imap_delete_cached_messages
+ (mlist, item, 0, first_uid - 1);
+ mlist = imap_delete_cached_messages
+ (mlist, item, begin > 0 ? begin : last_uid + 1,
+ UINT_MAX);
+ }
+
+ if (begin > 0 && begin <= last_uid) {
+ GSList *newlist;
+ newlist = imap_get_uncached_messages(session, item,
+ begin, last_uid,
+ TRUE);
+ mlist = g_slist_concat(mlist, newlist);
+ }
+ } else {
+ imap_delete_all_cached_messages(item);
+ mlist = imap_get_uncached_messages(session, item, 0, 0, TRUE);
+ last_uid = procmsg_get_last_num_in_msg_list(mlist);
+ }
+
+ item->mtime = uid_validity;
+
+ mlist = procmsg_sort_msg_list(mlist, item->sort_key, item->sort_type);
+
+ item->last_num = last_uid;
+
+catch:
+ return mlist;
+}
+
+#undef THROW
+
+static gchar *imap_fetch_msg(Folder *folder, FolderItem *item, gint uid)
+{
+ gchar *path, *filename;
+ IMAPSession *session;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+
+ path = folder_item_get_path(item);
+ if (!is_dir_exist(path))
+ make_dir_hier(path);
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(uid), NULL);
+ g_free(path);
+
+ if (is_file_exist(filename)) {
+ debug_print("message %d has been already cached.\n", uid);
+ return filename;
+ }
+
+ session = imap_session_get(folder);
+ if (!session) {
+ g_free(filename);
+ return NULL;
+ }
+
+ ok = imap_select(session, IMAP_FOLDER(folder), item->path,
+ NULL, NULL, NULL, NULL);
+ if (ok != IMAP_SUCCESS) {
+ g_warning("can't select mailbox %s\n", item->path);
+ g_free(filename);
+ return NULL;
+ }
+
+ debug_print("getting message %d...\n", uid);
+ ok = imap_cmd_fetch(session, (guint32)uid, filename);
+
+ if (ok != IMAP_SUCCESS) {
+ g_warning("can't fetch message %d\n", uid);
+ g_free(filename);
+ return NULL;
+ }
+
+ return filename;
+}
+
+static MsgInfo *imap_get_msginfo(Folder *folder, FolderItem *item, gint uid)
+{
+ IMAPSession *session;
+ GSList *list;
+ MsgInfo *msginfo = NULL;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+
+ session = imap_session_get(folder);
+ g_return_val_if_fail(session != NULL, NULL);
+
+ list = imap_get_uncached_messages(session, item, uid, uid, FALSE);
+ if (list) {
+ msginfo = (MsgInfo *)list->data;
+ list->data = NULL;
+ }
+ procmsg_msg_list_free(list);
+
+ return msginfo;
+}
+
+static gint imap_add_msg(Folder *folder, FolderItem *dest, const gchar *file,
+ MsgFlags *flags, gboolean remove_source)
+{
+ GSList file_list;
+ MsgFileInfo fileinfo;
+
+ g_return_val_if_fail(file != NULL, -1);
+
+ fileinfo.file = (gchar *)file;
+ fileinfo.flags = flags;
+ file_list.data = &fileinfo;
+ file_list.next = NULL;
+
+ return imap_add_msgs(folder, dest, &file_list, remove_source, NULL);
+}
+
+static gint imap_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list,
+ gboolean remove_source, gint *first)
+{
+ gchar *destdir;
+ IMAPSession *session;
+ gint messages, recent, unseen;
+ guint32 uid_next, uid_validity;
+ guint32 last_uid = 0;
+ GSList *cur;
+ MsgFileInfo *fileinfo;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(file_list != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ ok = imap_status(session, IMAP_FOLDER(folder), dest->path,
+ &messages, &recent, &uid_next, &uid_validity, &unseen);
+ if (ok != IMAP_SUCCESS) {
+ g_warning("can't append messages\n");
+ return -1;
+ }
+
+ destdir = imap_get_real_path(IMAP_FOLDER(folder), dest->path);
+
+ if (!session->uidplus)
+ last_uid = uid_next - 1;
+ if (first)
+ *first = uid_next;
+
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ IMAPFlags iflags = 0;
+ guint32 new_uid = 0;
+
+ fileinfo = (MsgFileInfo *)cur->data;
+
+ if (fileinfo->flags) {
+ if (MSG_IS_MARKED(*fileinfo->flags))
+ iflags |= IMAP_FLAG_FLAGGED;
+ if (MSG_IS_REPLIED(*fileinfo->flags))
+ iflags |= IMAP_FLAG_ANSWERED;
+ if (!MSG_IS_UNREAD(*fileinfo->flags))
+ iflags |= IMAP_FLAG_SEEN;
+ }
+
+ if (dest->stype == F_OUTBOX ||
+ dest->stype == F_QUEUE ||
+ dest->stype == F_DRAFT ||
+ dest->stype == F_TRASH)
+ iflags |= IMAP_FLAG_SEEN;
+
+ ok = imap_cmd_append(session, destdir, fileinfo->file, iflags,
+ &new_uid);
+
+ if (ok != IMAP_SUCCESS) {
+ g_warning("can't append message %s\n", fileinfo->file);
+ g_free(destdir);
+ return -1;
+ }
+
+ if (!session->uidplus)
+ last_uid++;
+ else if (last_uid < new_uid)
+ last_uid = new_uid;
+
+ dest->last_num = last_uid;
+ dest->total++;
+ dest->updated = TRUE;
+
+ if (fileinfo->flags) {
+ if (MSG_IS_UNREAD(*fileinfo->flags))
+ dest->unread++;
+ } else
+ dest->unread++;
+ }
+
+ g_free(destdir);
+
+ if (remove_source) {
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ fileinfo = (MsgFileInfo *)cur->data;
+ if (unlink(fileinfo->file) < 0)
+ FILE_OP_ERROR(fileinfo->file, "unlink");
+ }
+ }
+
+ return last_uid;
+}
+
+static gint imap_do_copy_msgs(Folder *folder, FolderItem *dest, GSList *msglist,
+ gboolean remove_source)
+{
+ FolderItem *src;
+ gchar *destdir;
+ GSList *seq_list, *cur;
+ MsgInfo *msginfo;
+ IMAPSession *session;
+ gint ok = IMAP_SUCCESS;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ msginfo = (MsgInfo *)msglist->data;
+
+ src = msginfo->folder;
+ if (src == dest) {
+ g_warning("the src folder is identical to the dest.\n");
+ return -1;
+ }
+
+ ok = imap_select(session, IMAP_FOLDER(folder), src->path,
+ NULL, NULL, NULL, NULL);
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+ destdir = imap_get_real_path(IMAP_FOLDER(folder), dest->path);
+
+ seq_list = imap_get_seq_set_from_msglist(msglist);
+
+ for (cur = seq_list; cur != NULL; cur = cur->next) {
+ gchar *seq_set = (gchar *)cur->data;
+
+ if (remove_source)
+ debug_print("Moving message %s%c[%s] to %s ...\n",
+ src->path, G_DIR_SEPARATOR,
+ seq_set, destdir);
+ else
+ debug_print("Copying message %s%c[%s] to %s ...\n",
+ src->path, G_DIR_SEPARATOR,
+ seq_set, destdir);
+
+ ok = imap_cmd_copy(session, seq_set, destdir);
+ if (ok != IMAP_SUCCESS) {
+ imap_seq_set_free(seq_list);
+ return -1;
+ }
+ }
+
+ dest->updated = TRUE;
+
+ if (remove_source) {
+ imap_remove_msgs_by_seq_set(folder, src, seq_list);
+ if (ok != IMAP_SUCCESS) {
+ imap_seq_set_free(seq_list);
+ return ok;
+ }
+ }
+
+ imap_seq_set_free(seq_list);
+
+ for (cur = msglist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ dest->total++;
+ if (MSG_IS_NEW(msginfo->flags))
+ dest->new++;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ dest->unread++;
+
+ if (remove_source) {
+ src->total--;
+ if (MSG_IS_NEW(msginfo->flags))
+ src->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ src->unread--;
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_INVALID);
+ }
+ }
+
+ g_free(destdir);
+
+ if (ok == IMAP_SUCCESS)
+ return 0;
+ else
+ return -1;
+}
+
+static gint imap_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
+{
+ GSList msglist;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return imap_move_msgs(folder, dest, &msglist);
+}
+
+static gint imap_move_msgs(Folder *folder, FolderItem *dest, GSList *msglist)
+{
+ MsgInfo *msginfo;
+ GSList *file_list;
+ gint ret = 0;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ msginfo = (MsgInfo *)msglist->data;
+ g_return_val_if_fail(msginfo->folder != NULL, -1);
+
+ if (folder == msginfo->folder->folder)
+ return imap_do_copy_msgs(folder, dest, msglist, TRUE);
+
+ file_list = procmsg_get_message_file_list(msglist);
+ g_return_val_if_fail(file_list != NULL, -1);
+
+ ret = imap_add_msgs(folder, dest, file_list, FALSE, NULL);
+
+ procmsg_message_file_list_free(file_list);
+
+ if (ret != -1)
+ ret = folder_item_remove_msgs(msginfo->folder, msglist);
+
+ return ret;
+}
+
+static gint imap_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
+{
+ GSList msglist;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return imap_copy_msgs(folder, dest, &msglist);
+}
+
+static gint imap_copy_msgs(Folder *folder, FolderItem *dest, GSList *msglist)
+{
+ MsgInfo *msginfo;
+ GSList *file_list;
+ gint ret;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ msginfo = (MsgInfo *)msglist->data;
+ g_return_val_if_fail(msginfo->folder != NULL, -1);
+
+ if (folder == msginfo->folder->folder)
+ return imap_do_copy_msgs(folder, dest, msglist, FALSE);
+
+ file_list = procmsg_get_message_file_list(msglist);
+ g_return_val_if_fail(file_list != NULL, -1);
+
+ ret = imap_add_msgs(folder, dest, file_list, FALSE, NULL);
+
+ procmsg_message_file_list_free(file_list);
+
+ return ret;
+}
+
+static gint imap_remove_msgs_by_seq_set(Folder *folder, FolderItem *item,
+ GSList *seq_list)
+{
+ gint ok;
+ IMAPSession *session;
+ GSList *cur;
+
+ g_return_val_if_fail(seq_list != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ for (cur = seq_list; cur != NULL; cur = cur->next) {
+ gchar *seq_set = (gchar *)cur->data;
+
+ ok = imap_set_message_flags(session, seq_set, IMAP_FLAG_DELETED,
+ TRUE);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't set deleted flags: %s\n"),
+ seq_set);
+ return ok;
+ }
+ }
+
+ ok = imap_cmd_expunge(session);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("can't expunge\n"));
+
+ item->updated = TRUE;
+
+ return ok;
+}
+
+static gint imap_remove_msg(Folder *folder, FolderItem *item, MsgInfo *msginfo)
+{
+ GSList msglist;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return imap_remove_msgs(folder, item, &msglist);
+}
+
+static gint imap_remove_msgs(Folder *folder, FolderItem *item, GSList *msglist)
+{
+ gint ok;
+ IMAPSession *session;
+ GSList *seq_list, *cur;
+ gchar *dir;
+ gboolean dir_exist;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_IMAP, -1);
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ ok = imap_select(session, IMAP_FOLDER(folder), item->path,
+ NULL, NULL, NULL, NULL);
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+ seq_list = imap_get_seq_set_from_msglist(msglist);
+ ok = imap_remove_msgs_by_seq_set(folder, item, seq_list);
+ imap_seq_set_free(seq_list);
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+ dir = folder_item_get_path(item);
+ dir_exist = is_dir_exist(dir);
+ for (cur = msglist; cur != NULL; cur = cur->next) {
+ MsgInfo *msginfo = (MsgInfo *)cur->data;
+ guint32 uid = msginfo->msgnum;
+
+ if (dir_exist)
+ remove_numbered_files(dir, uid, uid);
+ item->total--;
+ if (MSG_IS_NEW(msginfo->flags))
+ item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ item->unread--;
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_INVALID);
+ }
+ g_free(dir);
+
+ return IMAP_SUCCESS;
+}
+
+static gint imap_remove_all_msg(Folder *folder, FolderItem *item)
+{
+ gint ok;
+ IMAPSession *session;
+ gchar *dir;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ ok = imap_select(session, IMAP_FOLDER(folder), item->path,
+ NULL, NULL, NULL, NULL);
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+ imap_cmd_gen_send(session, "STORE 1:* +FLAGS.SILENT (\\Deleted)");
+ ok = imap_cmd_ok(session, NULL);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't set deleted flags: 1:*\n"));
+ return ok;
+ }
+
+ ok = imap_cmd_expunge(session);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't expunge\n"));
+ return ok;
+ }
+
+ item->new = item->unread = item->total = 0;
+ item->updated = TRUE;
+
+ dir = folder_item_get_path(item);
+ if (is_dir_exist(dir))
+ remove_all_numbered_files(dir);
+ g_free(dir);
+
+ return IMAP_SUCCESS;
+}
+
+static gboolean imap_is_msg_changed(Folder *folder, FolderItem *item,
+ MsgInfo *msginfo)
+{
+ /* TODO: properly implement this method */
+ return FALSE;
+}
+
+static gint imap_close(Folder *folder, FolderItem *item)
+{
+ gint ok;
+ IMAPSession *session;
+
+ g_return_val_if_fail(folder != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ if (session->mbox) {
+ if (strcmp2(session->mbox, item->path) != 0) return -1;
+
+ ok = imap_cmd_close(session);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("can't close folder\n"));
+
+ g_free(session->mbox);
+ session->mbox = NULL;
+
+ return ok;
+ } else
+ return 0;
+}
+
+static gint imap_scan_folder(Folder *folder, FolderItem *item)
+{
+ IMAPSession *session;
+ gint messages, recent, unseen;
+ guint32 uid_next, uid_validity;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ ok = imap_status(session, IMAP_FOLDER(folder), item->path,
+ &messages, &recent, &uid_next, &uid_validity, &unseen);
+ if (ok != IMAP_SUCCESS) return -1;
+
+ item->new = unseen > 0 ? recent : 0;
+ item->unread = unseen;
+ item->total = messages;
+ item->last_num = (messages > 0 && uid_next > 0) ? uid_next - 1 : 0;
+ /* item->mtime = uid_validity; */
+ item->updated = TRUE;
+
+ return 0;
+}
+
+static gint imap_scan_tree(Folder *folder)
+{
+ FolderItem *item = NULL;
+ IMAPSession *session;
+ gchar *root_folder = NULL;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(folder->account != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) {
+ if (!folder->node) {
+ folder_tree_destroy(folder);
+ item = folder_item_new(folder->name, NULL);
+ item->folder = folder;
+ folder->node = item->node = g_node_new(item);
+ }
+ return -1;
+ }
+
+ if (folder->account->imap_dir && *folder->account->imap_dir) {
+ gchar *real_path;
+ GPtrArray *argbuf;
+ gint ok;
+
+ Xstrdup_a(root_folder, folder->account->imap_dir, return -1);
+ extract_quote(root_folder, '"');
+ subst_char(root_folder,
+ imap_get_path_separator(IMAP_FOLDER(folder),
+ root_folder),
+ '/');
+ strtailchomp(root_folder, '/');
+ real_path = imap_get_real_path
+ (IMAP_FOLDER(folder), root_folder);
+ debug_print("IMAP root directory: %s\n", real_path);
+
+ /* check if root directory exist */
+ argbuf = g_ptr_array_new();
+ ok = imap_cmd_list(session, NULL, real_path, argbuf);
+ if (ok != IMAP_SUCCESS ||
+ search_array_str(argbuf, "LIST ") == NULL) {
+ log_warning(_("root folder %s not exist\n"), real_path);
+ g_ptr_array_free(argbuf, TRUE);
+ g_free(real_path);
+ return -1;
+ }
+ g_ptr_array_free(argbuf, TRUE);
+ g_free(real_path);
+ }
+
+ if (folder->node)
+ item = FOLDER_ITEM(folder->node->data);
+ if (!item || ((item->path || root_folder) &&
+ strcmp2(item->path, root_folder) != 0)) {
+ folder_tree_destroy(folder);
+ item = folder_item_new(folder->name, root_folder);
+ item->folder = folder;
+ folder->node = item->node = g_node_new(item);
+ }
+
+ imap_scan_tree_recursive(session, FOLDER_ITEM(folder->node->data));
+ imap_create_missing_folders(folder);
+
+ return 0;
+}
+
+static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item)
+{
+ Folder *folder;
+ IMAPFolder *imapfolder;
+ FolderItem *new_item;
+ GSList *item_list, *cur;
+ GNode *node;
+ gchar *real_path;
+ gchar *wildcard_path;
+ gchar separator;
+ gchar wildcard[3];
+
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->folder != NULL, -1);
+ g_return_val_if_fail(item->no_sub == FALSE, -1);
+
+ folder = item->folder;
+ imapfolder = IMAP_FOLDER(folder);
+
+ separator = imap_get_path_separator(imapfolder, item->path);
+
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data);
+
+ if (item->path) {
+ wildcard[0] = separator;
+ wildcard[1] = '%';
+ wildcard[2] = '\0';
+ real_path = imap_get_real_path(imapfolder, item->path);
+ } else {
+ wildcard[0] = '%';
+ wildcard[1] = '\0';
+ real_path = g_strdup("");
+ }
+
+ Xstrcat_a(wildcard_path, real_path, wildcard,
+ {g_free(real_path); return IMAP_ERROR;});
+ QUOTE_IF_REQUIRED(wildcard_path, wildcard_path);
+
+ imap_cmd_gen_send(session, "LIST \"\" %s", wildcard_path);
+
+ strtailchomp(real_path, separator);
+ item_list = imap_parse_list(session, real_path, NULL);
+ g_free(real_path);
+
+ node = item->node->children;
+ while (node != NULL) {
+ FolderItem *old_item = FOLDER_ITEM(node->data);
+ GNode *next = node->next;
+
+ new_item = NULL;
+
+ for (cur = item_list; cur != NULL; cur = cur->next) {
+ FolderItem *cur_item = FOLDER_ITEM(cur->data);
+ if (!strcmp2(old_item->path, cur_item->path)) {
+ new_item = cur_item;
+ break;
+ }
+ }
+ if (!new_item) {
+ debug_print("folder '%s' not found. removing...\n",
+ old_item->path);
+ folder_item_remove(old_item);
+ } else {
+ old_item->no_sub = new_item->no_sub;
+ old_item->no_select = new_item->no_select;
+ if (old_item->no_select == TRUE)
+ old_item->new = old_item->unread =
+ old_item->total = 0;
+ if (old_item->no_sub == TRUE && node->children) {
+ debug_print("folder '%s' doesn't have "
+ "subfolders. removing...\n",
+ old_item->path);
+ folder_item_remove_children(old_item);
+ }
+ }
+
+ node = next;
+ }
+
+ for (cur = item_list; cur != NULL; cur = cur->next) {
+ FolderItem *cur_item = FOLDER_ITEM(cur->data);
+ new_item = NULL;
+ for (node = item->node->children; node != NULL;
+ node = node->next) {
+ if (!strcmp2(FOLDER_ITEM(node->data)->path,
+ cur_item->path)) {
+ new_item = FOLDER_ITEM(node->data);
+ folder_item_destroy(cur_item);
+ cur_item = NULL;
+ break;
+ }
+ }
+ if (!new_item) {
+ new_item = cur_item;
+ debug_print("new folder '%s' found.\n", new_item->path);
+ folder_item_append(item, new_item);
+ }
+
+ if (!strcmp(new_item->path, "INBOX")) {
+ new_item->stype = F_INBOX;
+ folder->inbox = new_item;
+ } else if (!item->parent || item->stype == F_INBOX) {
+ const gchar *base;
+
+ base = g_basename(new_item->path);
+
+ if (!folder->outbox && !strcasecmp(base, "Sent")) {
+ new_item->stype = F_OUTBOX;
+ folder->outbox = new_item;
+ } else if (!folder->draft && !strcasecmp(base, "Drafts")) {
+ new_item->stype = F_DRAFT;
+ folder->draft = new_item;
+ } else if (!folder->queue && !strcasecmp(base, "Queue")) {
+ new_item->stype = F_QUEUE;
+ folder->queue = new_item;
+ } else if (!folder->trash && !strcasecmp(base, "Trash")) {
+ new_item->stype = F_TRASH;
+ folder->trash = new_item;
+ }
+ }
+
+ if (new_item->no_select == FALSE)
+ imap_scan_folder(folder, new_item);
+ if (new_item->no_sub == FALSE)
+ imap_scan_tree_recursive(session, new_item);
+ }
+
+ g_slist_free(item_list);
+
+ return IMAP_SUCCESS;
+}
+
+static GSList *imap_parse_list(IMAPSession *session, const gchar *real_path,
+ gchar *separator)
+{
+ gchar buf[IMAPBUFSIZE];
+ gchar flags[256];
+ gchar separator_str[16];
+ gchar *p;
+ const gchar *name;
+ gchar *loc_name, *loc_path;
+ GSList *item_list = NULL;
+ GString *str;
+ FolderItem *new_item;
+
+ debug_print("getting list of %s ...\n",
+ *real_path ? real_path : "\"\"");
+
+ str = g_string_new(NULL);
+
+ for (;;) {
+ if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) <= 0) {
+ log_warning(_("error occurred while getting LIST.\n"));
+ break;
+ }
+ strretchomp(buf);
+ if (buf[0] != '*' || buf[1] != ' ') {
+ log_print("IMAP4< %s\n", buf);
+ if (sscanf(buf, "%*d %16s", buf) < 1 ||
+ strcmp(buf, "OK") != 0)
+ log_warning(_("error occurred while getting LIST.\n"));
+
+ break;
+ }
+ debug_print("IMAP4< %s\n", buf);
+
+ g_string_assign(str, buf);
+ p = str->str + 2;
+ if (strncmp(p, "LIST ", 5) != 0) continue;
+ p += 5;
+
+ if (*p != '(') continue;
+ p++;
+ p = strchr_cpy(p, ')', flags, sizeof(flags));
+ if (!p) continue;
+ while (*p == ' ') p++;
+
+ p = strchr_cpy(p, ' ', separator_str, sizeof(separator_str));
+ if (!p) continue;
+ extract_quote(separator_str, '"');
+ if (!strcmp(separator_str, "NIL"))
+ separator_str[0] = '\0';
+ if (separator)
+ *separator = separator_str[0];
+
+ buf[0] = '\0';
+ while (*p == ' ') p++;
+ if (*p == '{' || *p == '"')
+ p = imap_parse_atom(session, p, buf, sizeof(buf), str);
+ else
+ strncpy2(buf, p, sizeof(buf));
+ strtailchomp(buf, separator_str[0]);
+ if (buf[0] == '\0') continue;
+ if (!strcmp(buf, real_path)) continue;
+
+ if (separator_str[0] != '\0')
+ subst_char(buf, separator_str[0], '/');
+ name = g_basename(buf);
+ if (name[0] == '.') continue;
+
+ loc_name = imap_modified_utf7_to_locale(name);
+ loc_path = imap_modified_utf7_to_locale(buf);
+ new_item = folder_item_new(loc_name, loc_path);
+ if (strcasestr(flags, "\\Noinferiors") != NULL)
+ new_item->no_sub = TRUE;
+ if (strcmp(buf, "INBOX") != 0 &&
+ strcasestr(flags, "\\Noselect") != NULL)
+ new_item->no_select = TRUE;
+
+ item_list = g_slist_append(item_list, new_item);
+
+ debug_print("folder '%s' found.\n", loc_path);
+ g_free(loc_path);
+ g_free(loc_name);
+ }
+
+ g_string_free(str, TRUE);
+
+ return item_list;
+}
+
+static gint imap_create_tree(Folder *folder)
+{
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(folder->node != NULL, -1);
+ g_return_val_if_fail(folder->node->data != NULL, -1);
+ g_return_val_if_fail(folder->account != NULL, -1);
+
+ imap_scan_tree(folder);
+ imap_create_missing_folders(folder);
+
+ return 0;
+}
+
+static void imap_create_missing_folders(Folder *folder)
+{
+ g_return_if_fail(folder != NULL);
+
+ if (!folder->inbox)
+ folder->inbox = imap_create_special_folder
+ (folder, F_INBOX, "INBOX");
+#if 0
+ if (!folder->outbox)
+ folder->outbox = imap_create_special_folder
+ (folder, F_OUTBOX, "Sent");
+ if (!folder->draft)
+ folder->draft = imap_create_special_folder
+ (folder, F_DRAFT, "Drafts");
+ if (!folder->queue)
+ folder->queue = imap_create_special_folder
+ (folder, F_QUEUE, "Queue");
+#endif
+ if (!folder->trash)
+ folder->trash = imap_create_special_folder
+ (folder, F_TRASH, "Trash");
+}
+
+static FolderItem *imap_create_special_folder(Folder *folder,
+ SpecialFolderItemType stype,
+ const gchar *name)
+{
+ FolderItem *item;
+ FolderItem *new_item;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(folder->node != NULL, NULL);
+ g_return_val_if_fail(folder->node->data != NULL, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+ g_return_val_if_fail(name != NULL, NULL);
+
+ item = FOLDER_ITEM(folder->node->data);
+ new_item = imap_create_folder(folder, item, name);
+
+ if (!new_item) {
+ g_warning(_("Can't create '%s'\n"), name);
+ if (!folder->inbox) return NULL;
+
+ new_item = imap_create_folder(folder, folder->inbox, name);
+ if (!new_item)
+ g_warning(_("Can't create '%s' under INBOX\n"), name);
+ else
+ new_item->stype = stype;
+ } else
+ new_item->stype = stype;
+
+ return new_item;
+}
+
+static FolderItem *imap_create_folder(Folder *folder, FolderItem *parent,
+ const gchar *name)
+{
+ gchar *dirpath, *imap_path;
+ IMAPSession *session;
+ FolderItem *new_item;
+ gchar separator;
+ gchar *new_name;
+ const gchar *p;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+ g_return_val_if_fail(parent != NULL, NULL);
+ g_return_val_if_fail(name != NULL, NULL);
+
+ session = imap_session_get(folder);
+ if (!session) return NULL;
+
+ if (!parent->parent && strcmp(name, "INBOX") == 0)
+ dirpath = g_strdup(name);
+ else if (parent->path)
+ dirpath = g_strconcat(parent->path, "/", name, NULL);
+ else if ((p = strchr(name, '/')) != NULL && *(p + 1) != '\0')
+ dirpath = g_strdup(name);
+ else if (folder->account->imap_dir && *folder->account->imap_dir) {
+ gchar *imap_dir;
+
+ Xstrdup_a(imap_dir, folder->account->imap_dir, return NULL);
+ strtailchomp(imap_dir, '/');
+ dirpath = g_strconcat(imap_dir, "/", name, NULL);
+ } else
+ dirpath = g_strdup(name);
+
+ /* keep trailing directory separator to create a folder that contains
+ sub folder */
+ imap_path = imap_locale_to_modified_utf7(dirpath);
+ strtailchomp(dirpath, '/');
+ Xstrdup_a(new_name, name, {g_free(dirpath); return NULL;});
+ strtailchomp(new_name, '/');
+ separator = imap_get_path_separator(IMAP_FOLDER(folder), imap_path);
+ imap_path_separator_subst(imap_path, separator);
+ subst_char(new_name, '/', separator);
+
+ if (strcmp(name, "INBOX") != 0) {
+ GPtrArray *argbuf;
+ gint i;
+ gboolean exist = FALSE;
+
+ argbuf = g_ptr_array_new();
+ ok = imap_cmd_list(session, NULL, imap_path, argbuf);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't create mailbox: LIST failed\n"));
+ g_free(imap_path);
+ g_free(dirpath);
+ g_ptr_array_free(argbuf, TRUE);
+ return NULL;
+ }
+
+ for (i = 0; i < argbuf->len; i++) {
+ gchar *str;
+ str = g_ptr_array_index(argbuf, i);
+ if (!strncmp(str, "LIST ", 5)) {
+ exist = TRUE;
+ break;
+ }
+ }
+ g_ptr_array_free(argbuf, TRUE);
+
+ if (!exist) {
+ ok = imap_cmd_create(session, imap_path);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't create mailbox\n"));
+ g_free(imap_path);
+ g_free(dirpath);
+ return NULL;
+ }
+ }
+ }
+
+ new_item = folder_item_new(new_name, dirpath);
+ folder_item_append(parent, new_item);
+ g_free(imap_path);
+ g_free(dirpath);
+
+ dirpath = folder_item_get_path(new_item);
+ if (!is_dir_exist(dirpath))
+ make_dir_hier(dirpath);
+ g_free(dirpath);
+
+ return new_item;
+}
+
+static gint imap_rename_folder(Folder *folder, FolderItem *item,
+ const gchar *name)
+{
+ gchar *dirpath;
+ gchar *newpath;
+ gchar *real_oldpath;
+ gchar *real_newpath;
+ gchar *paths[2];
+ gchar *old_cache_dir;
+ gchar *new_cache_dir;
+ IMAPSession *session;
+ gchar separator;
+ gint ok;
+ gint exists, recent, unseen;
+ guint32 uid_validity;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->path != NULL, -1);
+ g_return_val_if_fail(name != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ real_oldpath = imap_get_real_path(IMAP_FOLDER(folder), item->path);
+
+ g_free(session->mbox);
+ session->mbox = NULL;
+ ok = imap_cmd_examine(session, "INBOX",
+ &exists, &recent, &unseen, &uid_validity);
+ if (ok != IMAP_SUCCESS) {
+ g_free(real_oldpath);
+ return -1;
+ }
+
+ separator = imap_get_path_separator(IMAP_FOLDER(folder), item->path);
+ if (strchr(item->path, G_DIR_SEPARATOR)) {
+ dirpath = g_dirname(item->path);
+ newpath = g_strconcat(dirpath, G_DIR_SEPARATOR_S, name, NULL);
+ g_free(dirpath);
+ } else
+ newpath = g_strdup(name);
+
+ real_newpath = imap_locale_to_modified_utf7(newpath);
+ imap_path_separator_subst(real_newpath, separator);
+
+ ok = imap_cmd_rename(session, real_oldpath, real_newpath);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't rename mailbox: %s to %s\n"),
+ real_oldpath, real_newpath);
+ g_free(real_oldpath);
+ g_free(newpath);
+ g_free(real_newpath);
+ return -1;
+ }
+
+ g_free(item->name);
+ item->name = g_strdup(name);
+
+ old_cache_dir = folder_item_get_path(item);
+
+ paths[0] = g_strdup(item->path);
+ paths[1] = newpath;
+ g_node_traverse(item->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ imap_rename_folder_func, paths);
+
+ if (is_dir_exist(old_cache_dir)) {
+ new_cache_dir = folder_item_get_path(item);
+ if (rename(old_cache_dir, new_cache_dir) < 0) {
+ FILE_OP_ERROR(old_cache_dir, "rename");
+ }
+ g_free(new_cache_dir);
+ }
+
+ g_free(old_cache_dir);
+ g_free(paths[0]);
+ g_free(newpath);
+ g_free(real_oldpath);
+ g_free(real_newpath);
+
+ return 0;
+}
+
+static gint imap_remove_folder(Folder *folder, FolderItem *item)
+{
+ gint ok;
+ IMAPSession *session;
+ gchar *path;
+ gchar *cache_dir;
+ gint exists, recent, unseen;
+ guint32 uid_validity;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->path != NULL, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ path = imap_get_real_path(IMAP_FOLDER(folder), item->path);
+
+ ok = imap_cmd_examine(session, "INBOX",
+ &exists, &recent, &unseen, &uid_validity);
+ if (ok != IMAP_SUCCESS) {
+ g_free(path);
+ return -1;
+ }
+
+ ok = imap_cmd_delete(session, path);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't delete mailbox\n"));
+ g_free(path);
+ return -1;
+ }
+
+ g_free(path);
+ cache_dir = folder_item_get_path(item);
+ if (is_dir_exist(cache_dir) && remove_dir_recursive(cache_dir) < 0)
+ g_warning("can't remove directory '%s'\n", cache_dir);
+ g_free(cache_dir);
+ folder_item_remove(item);
+
+ return 0;
+}
+
+static GSList *imap_get_uncached_messages(IMAPSession *session,
+ FolderItem *item,
+ guint32 first_uid, guint32 last_uid,
+ gboolean update_count)
+{
+ gchar *tmp;
+ GSList *newlist = NULL;
+ GSList *llast = NULL;
+ GString *str;
+ MsgInfo *msginfo;
+ gchar seq_set[22];
+
+ g_return_val_if_fail(session != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->folder != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(item->folder) == F_IMAP, NULL);
+ g_return_val_if_fail(first_uid <= last_uid, NULL);
+
+ if (first_uid == 0 && last_uid == 0)
+ strcpy(seq_set, "1:*");
+ else
+ g_snprintf(seq_set, sizeof(seq_set), "%u:%u",
+ first_uid, last_uid);
+ if (imap_cmd_envelope(session, seq_set) != IMAP_SUCCESS) {
+ log_warning(_("can't get envelope\n"));
+ return NULL;
+ }
+
+ str = g_string_new(NULL);
+
+ for (;;) {
+ if ((tmp = sock_getline(SESSION(session)->sock)) == NULL) {
+ log_warning(_("error occurred while getting envelope.\n"));
+ g_string_free(str, TRUE);
+ return newlist;
+ }
+ strretchomp(tmp);
+ if (tmp[0] != '*' || tmp[1] != ' ') {
+ log_print("IMAP4< %s\n", tmp);
+ g_free(tmp);
+ break;
+ }
+ if (strstr(tmp, "FETCH") == NULL) {
+ log_print("IMAP4< %s\n", tmp);
+ g_free(tmp);
+ continue;
+ }
+ log_print("IMAP4< %s\n", tmp);
+ g_string_assign(str, tmp);
+ g_free(tmp);
+
+ msginfo = imap_parse_envelope(session, item, str);
+ if (!msginfo) {
+ log_warning(_("can't parse envelope: %s\n"), str->str);
+ continue;
+ }
+ if (update_count) {
+ if (MSG_IS_NEW(msginfo->flags))
+ item->new++;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ item->unread++;
+ }
+ if (item->stype == F_QUEUE) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_QUEUED);
+ } else if (item->stype == F_DRAFT) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_DRAFT);
+ }
+
+ msginfo->folder = item;
+
+ if (!newlist)
+ llast = newlist = g_slist_append(newlist, msginfo);
+ else {
+ llast = g_slist_append(llast, msginfo);
+ llast = llast->next;
+ }
+
+ if (update_count)
+ item->total++;
+ }
+
+ g_string_free(str, TRUE);
+
+ session_set_access_time(SESSION(session));
+
+ return newlist;
+}
+
+static void imap_delete_cached_message(FolderItem *item, guint32 uid)
+{
+ gchar *dir;
+ gchar *file;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_IMAP);
+
+ dir = folder_item_get_path(item);
+ file = g_strdup_printf("%s%c%u", dir, G_DIR_SEPARATOR, uid);
+
+ debug_print("Deleting cached message: %s\n", file);
+
+ unlink(file);
+
+ g_free(file);
+ g_free(dir);
+}
+
+static GSList *imap_delete_cached_messages(GSList *mlist, FolderItem *item,
+ guint32 first_uid, guint32 last_uid)
+{
+ GSList *cur, *next;
+ MsgInfo *msginfo;
+ gchar *dir;
+
+ g_return_val_if_fail(item != NULL, mlist);
+ g_return_val_if_fail(item->folder != NULL, mlist);
+ g_return_val_if_fail(FOLDER_TYPE(item->folder) == F_IMAP, mlist);
+
+ if (first_uid == 0 && last_uid == 0)
+ return mlist;
+
+ debug_print("Deleting cached messages %u - %u ... ",
+ first_uid, last_uid);
+
+ dir = folder_item_get_path(item);
+ if (is_dir_exist(dir))
+ remove_numbered_files(dir, first_uid, last_uid);
+ g_free(dir);
+
+ for (cur = mlist; cur != NULL; ) {
+ next = cur->next;
+
+ msginfo = (MsgInfo *)cur->data;
+ if (msginfo != NULL && first_uid <= msginfo->msgnum &&
+ msginfo->msgnum <= last_uid) {
+ procmsg_msginfo_free(msginfo);
+ mlist = g_slist_remove(mlist, msginfo);
+ }
+
+ cur = next;
+ }
+
+ debug_print("done.\n");
+
+ return mlist;
+}
+
+static void imap_delete_all_cached_messages(FolderItem *item)
+{
+ gchar *dir;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_IMAP);
+
+ debug_print("Deleting all cached messages... ");
+
+ dir = folder_item_get_path(item);
+ if (is_dir_exist(dir))
+ remove_all_numbered_files(dir);
+ g_free(dir);
+
+ debug_print("done.\n");
+}
+
+#if USE_SSL
+static SockInfo *imap_open(const gchar *server, gushort port,
+ SSLType ssl_type)
+#else
+static SockInfo *imap_open(const gchar *server, gushort port)
+#endif
+{
+ SockInfo *sock;
+
+ if ((sock = sock_connect(server, port)) == NULL) {
+ log_warning(_("Can't connect to IMAP4 server: %s:%d\n"),
+ server, port);
+ return NULL;
+ }
+
+#if USE_SSL
+ if (ssl_type == SSL_TUNNEL && !ssl_init_socket(sock)) {
+ log_warning(_("Can't establish IMAP4 session with: %s:%d\n"),
+ server, port);
+ sock_close(sock);
+ return NULL;
+ }
+#endif
+
+ return sock;
+}
+
+static GList *imap_parse_namespace_str(gchar *str)
+{
+ guchar *p = str;
+ gchar *name;
+ gchar *separator;
+ IMAPNameSpace *namespace;
+ GList *ns_list = NULL;
+
+ while (*p != '\0') {
+ /* parse ("#foo" "/") */
+
+ while (*p && *p != '(') p++;
+ if (*p == '\0') break;
+ p++;
+
+ while (*p && *p != '"') p++;
+ if (*p == '\0') break;
+ p++;
+ name = p;
+
+ while (*p && *p != '"') p++;
+ if (*p == '\0') break;
+ *p = '\0';
+ p++;
+
+ while (*p && isspace(*p)) p++;
+ if (*p == '\0') break;
+ if (strncmp(p, "NIL", 3) == 0)
+ separator = NULL;
+ else if (*p == '"') {
+ p++;
+ separator = p;
+ while (*p && *p != '"') p++;
+ if (*p == '\0') break;
+ *p = '\0';
+ p++;
+ } else break;
+
+ while (*p && *p != ')') p++;
+ if (*p == '\0') break;
+ p++;
+
+ namespace = g_new(IMAPNameSpace, 1);
+ namespace->name = g_strdup(name);
+ namespace->separator = separator ? separator[0] : '\0';
+ ns_list = g_list_append(ns_list, namespace);
+ }
+
+ return ns_list;
+}
+
+static void imap_parse_namespace(IMAPSession *session, IMAPFolder *folder)
+{
+ gchar *ns_str;
+ gchar **str_array;
+
+ g_return_if_fail(session != NULL);
+ g_return_if_fail(folder != NULL);
+
+ if (folder->ns_personal != NULL ||
+ folder->ns_others != NULL ||
+ folder->ns_shared != NULL)
+ return;
+
+ if (imap_cmd_namespace(session, &ns_str) != IMAP_SUCCESS) {
+ log_warning(_("can't get namespace\n"));
+ imap_get_namespace_by_list(session, folder);
+ return;
+ }
+
+ str_array = strsplit_parenthesis(ns_str, '(', ')', 3);
+ if (str_array[0])
+ folder->ns_personal = imap_parse_namespace_str(str_array[0]);
+ if (str_array[0] && str_array[1])
+ folder->ns_others = imap_parse_namespace_str(str_array[1]);
+ if (str_array[0] && str_array[1] && str_array[2])
+ folder->ns_shared = imap_parse_namespace_str(str_array[2]);
+ g_strfreev(str_array);
+ g_free(ns_str);
+}
+
+static void imap_get_namespace_by_list(IMAPSession *session, IMAPFolder *folder)
+{
+ GSList *item_list, *cur;
+ gchar separator = '\0';
+ IMAPNameSpace *namespace;
+
+ g_return_if_fail(session != NULL);
+ g_return_if_fail(folder != NULL);
+
+ if (folder->ns_personal != NULL ||
+ folder->ns_others != NULL ||
+ folder->ns_shared != NULL)
+ return;
+
+ imap_cmd_gen_send(session, "LIST \"\" \"\"");
+ item_list = imap_parse_list(session, "", &separator);
+ for (cur = item_list; cur != NULL; cur = cur->next)
+ folder_item_destroy(FOLDER_ITEM(cur->data));
+ g_slist_free(item_list);
+
+ namespace = g_new(IMAPNameSpace, 1);
+ namespace->name = g_strdup("");
+ namespace->separator = separator;
+ folder->ns_personal = g_list_append(NULL, namespace);
+}
+
+static IMAPNameSpace *imap_find_namespace_from_list(GList *ns_list,
+ const gchar *path)
+{
+ IMAPNameSpace *namespace = NULL;
+ gchar *tmp_path, *name;
+
+ if (!path) path = "";
+
+ for (; ns_list != NULL; ns_list = ns_list->next) {
+ IMAPNameSpace *tmp_ns = ns_list->data;
+
+ Xstrcat_a(tmp_path, path, "/", return namespace);
+ Xstrdup_a(name, tmp_ns->name, return namespace);
+ if (tmp_ns->separator && tmp_ns->separator != '/') {
+ subst_char(tmp_path, tmp_ns->separator, '/');
+ subst_char(name, tmp_ns->separator, '/');
+ }
+ if (strncmp(tmp_path, name, strlen(name)) == 0)
+ namespace = tmp_ns;
+ }
+
+ return namespace;
+}
+
+static IMAPNameSpace *imap_find_namespace(IMAPFolder *folder,
+ const gchar *path)
+{
+ IMAPNameSpace *namespace;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+
+ namespace = imap_find_namespace_from_list(folder->ns_personal, path);
+ if (namespace) return namespace;
+ namespace = imap_find_namespace_from_list(folder->ns_others, path);
+ if (namespace) return namespace;
+ namespace = imap_find_namespace_from_list(folder->ns_shared, path);
+ if (namespace) return namespace;
+
+ return NULL;
+}
+
+static gchar imap_get_path_separator(IMAPFolder *folder, const gchar *path)
+{
+ IMAPNameSpace *namespace;
+ gchar separator = '/';
+
+ namespace = imap_find_namespace(folder, path);
+ if (namespace && namespace->separator)
+ separator = namespace->separator;
+
+ return separator;
+}
+
+static gchar *imap_get_real_path(IMAPFolder *folder, const gchar *path)
+{
+ gchar *real_path;
+ gchar separator;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(path != NULL, NULL);
+
+ real_path = imap_locale_to_modified_utf7(path);
+ separator = imap_get_path_separator(folder, path);
+ imap_path_separator_subst(real_path, separator);
+
+ return real_path;
+}
+
+static gchar *imap_parse_atom(IMAPSession *session, gchar *src,
+ gchar *dest, gint dest_len, GString *str)
+{
+ gchar *cur_pos = src;
+ gchar *nextline;
+
+ g_return_val_if_fail(str != NULL, cur_pos);
+
+ /* read the next line if the current response buffer is empty */
+ while (isspace(*(guchar *)cur_pos)) cur_pos++;
+ while (*cur_pos == '\0') {
+ if ((nextline = sock_getline(SESSION(session)->sock)) == NULL)
+ return cur_pos;
+ g_string_assign(str, nextline);
+ cur_pos = str->str;
+ strretchomp(nextline);
+ /* log_print("IMAP4< %s\n", nextline); */
+ debug_print("IMAP4< %s\n", nextline);
+ g_free(nextline);
+
+ while (isspace(*(guchar *)cur_pos)) cur_pos++;
+ }
+
+ if (!strncmp(cur_pos, "NIL", 3)) {
+ *dest = '\0';
+ cur_pos += 3;
+ } else if (*cur_pos == '\"') {
+ gchar *p;
+
+ p = get_quoted(cur_pos, '\"', dest, dest_len);
+ cur_pos = p ? p : cur_pos + 2;
+ } else if (*cur_pos == '{') {
+ gchar buf[32];
+ gint len;
+ gint line_len = 0;
+
+ cur_pos = strchr_cpy(cur_pos + 1, '}', buf, sizeof(buf));
+ len = atoi(buf);
+ g_return_val_if_fail(len >= 0, cur_pos);
+
+ g_string_truncate(str, 0);
+ cur_pos = str->str;
+
+ do {
+ if ((nextline = sock_getline(SESSION(session)->sock))
+ == NULL)
+ return cur_pos;
+ line_len += strlen(nextline);
+ g_string_append(str, nextline);
+ cur_pos = str->str;
+ strretchomp(nextline);
+ /* log_print("IMAP4< %s\n", nextline); */
+ debug_print("IMAP4< %s\n", nextline);
+ g_free(nextline);
+ } while (line_len < len);
+
+ memcpy(dest, cur_pos, MIN(len, dest_len - 1));
+ dest[MIN(len, dest_len - 1)] = '\0';
+ cur_pos += len;
+ }
+
+ return cur_pos;
+}
+
+static gchar *imap_get_header(IMAPSession *session, gchar *cur_pos,
+ gchar **headers, GString *str)
+{
+ gchar *nextline;
+ gchar buf[32];
+ gint len;
+ gint block_len = 0;
+
+ *headers = NULL;
+
+ g_return_val_if_fail(str != NULL, cur_pos);
+
+ while (isspace(*(guchar *)cur_pos)) cur_pos++;
+
+ g_return_val_if_fail(*cur_pos == '{', cur_pos);
+
+ cur_pos = strchr_cpy(cur_pos + 1, '}', buf, sizeof(buf));
+ len = atoi(buf);
+ g_return_val_if_fail(len >= 0, cur_pos);
+
+ g_string_truncate(str, 0);
+ cur_pos = str->str;
+
+ do {
+ if ((nextline = sock_getline(SESSION(session)->sock)) == NULL)
+ return cur_pos;
+ block_len += strlen(nextline);
+ g_string_append(str, nextline);
+ cur_pos = str->str;
+ strretchomp(nextline);
+ /* debug_print("IMAP4< %s\n", nextline); */
+ g_free(nextline);
+ } while (block_len < len);
+
+ debug_print("IMAP4< [contents of RFC822.HEADER]\n");
+
+ *headers = g_strndup(cur_pos, len);
+ cur_pos += len;
+
+ while (isspace(*(guchar *)cur_pos)) cur_pos++;
+ while (*cur_pos == '\0') {
+ if ((nextline = sock_getline(SESSION(session)->sock)) == NULL)
+ return cur_pos;
+ g_string_assign(str, nextline);
+ cur_pos = str->str;
+ strretchomp(nextline);
+ debug_print("IMAP4< %s\n", nextline);
+ g_free(nextline);
+
+ while (isspace(*(guchar *)cur_pos)) cur_pos++;
+ }
+
+ return cur_pos;
+}
+
+static MsgFlags imap_parse_flags(const gchar *flag_str)
+{
+ const gchar *p = flag_str;
+ MsgFlags flags = {0, 0};
+
+ flags.perm_flags = MSG_UNREAD;
+
+ while ((p = strchr(p, '\\')) != NULL) {
+ p++;
+
+ if (g_strncasecmp(p, "Recent", 6) == 0 && MSG_IS_UNREAD(flags)) {
+ MSG_SET_PERM_FLAGS(flags, MSG_NEW);
+ } else if (g_strncasecmp(p, "Seen", 4) == 0) {
+ MSG_UNSET_PERM_FLAGS(flags, MSG_NEW|MSG_UNREAD);
+ } else if (g_strncasecmp(p, "Deleted", 7) == 0) {
+ MSG_SET_PERM_FLAGS(flags, MSG_DELETED);
+ } else if (g_strncasecmp(p, "Flagged", 7) == 0) {
+ MSG_SET_PERM_FLAGS(flags, MSG_MARKED);
+ } else if (g_strncasecmp(p, "Answered", 8) == 0) {
+ MSG_SET_PERM_FLAGS(flags, MSG_REPLIED);
+ }
+ }
+
+ return flags;
+}
+
+static IMAPFlags imap_parse_imap_flags(const gchar *flag_str)
+{
+ const gchar *p = flag_str;
+ IMAPFlags flags = 0;
+
+ while ((p = strchr(p, '\\')) != NULL) {
+ p++;
+
+ if (g_strncasecmp(p, "Seen", 4) == 0) {
+ flags |= IMAP_FLAG_SEEN;
+ } else if (g_strncasecmp(p, "Deleted", 7) == 0) {
+ flags |= IMAP_FLAG_DELETED;
+ } else if (g_strncasecmp(p, "Flagged", 7) == 0) {
+ flags |= IMAP_FLAG_FLAGGED;
+ } else if (g_strncasecmp(p, "Answered", 8) == 0) {
+ flags |= IMAP_FLAG_ANSWERED;
+ }
+ }
+
+ return flags;
+}
+
+static MsgInfo *imap_parse_envelope(IMAPSession *session, FolderItem *item,
+ GString *line_str)
+{
+ gchar buf[IMAPBUFSIZE];
+ MsgInfo *msginfo = NULL;
+ gchar *cur_pos;
+ gint msgnum;
+ guint32 uid = 0;
+ size_t size = 0;
+ MsgFlags flags = {0, 0}, imap_flags = {0, 0};
+
+ g_return_val_if_fail(line_str != NULL, NULL);
+ g_return_val_if_fail(line_str->str[0] == '*' &&
+ line_str->str[1] == ' ', NULL);
+
+ MSG_SET_TMP_FLAGS(flags, MSG_IMAP);
+ if (item->stype == F_QUEUE) {
+ MSG_SET_TMP_FLAGS(flags, MSG_QUEUED);
+ } else if (item->stype == F_DRAFT) {
+ MSG_SET_TMP_FLAGS(flags, MSG_DRAFT);
+ }
+
+ cur_pos = line_str->str + 2;
+
+#define PARSE_ONE_ELEMENT(ch) \
+{ \
+ cur_pos = strchr_cpy(cur_pos, ch, buf, sizeof(buf)); \
+ if (cur_pos == NULL) { \
+ g_warning("cur_pos == NULL\n"); \
+ procmsg_msginfo_free(msginfo); \
+ return NULL; \
+ } \
+}
+
+ PARSE_ONE_ELEMENT(' ');
+ msgnum = atoi(buf);
+
+ PARSE_ONE_ELEMENT(' ');
+ g_return_val_if_fail(!strcmp(buf, "FETCH"), NULL);
+
+ g_return_val_if_fail(*cur_pos == '(', NULL);
+ cur_pos++;
+
+ while (*cur_pos != '\0' && *cur_pos != ')') {
+ while (*cur_pos == ' ') cur_pos++;
+
+ if (!strncmp(cur_pos, "UID ", 4)) {
+ cur_pos += 4;
+ uid = strtoul(cur_pos, &cur_pos, 10);
+ } else if (!strncmp(cur_pos, "FLAGS ", 6)) {
+ cur_pos += 6;
+ if (*cur_pos != '(') {
+ g_warning("*cur_pos != '('\n");
+ procmsg_msginfo_free(msginfo);
+ return NULL;
+ }
+ cur_pos++;
+ PARSE_ONE_ELEMENT(')');
+ imap_flags = imap_parse_flags(buf);
+ } else if (!strncmp(cur_pos, "RFC822.SIZE ", 12)) {
+ cur_pos += 12;
+ size = strtol(cur_pos, &cur_pos, 10);
+ } else if (!strncmp(cur_pos, "RFC822.HEADER ", 14)) {
+ gchar *headers;
+
+ cur_pos += 14;
+ cur_pos = imap_get_header(session, cur_pos, &headers,
+ line_str);
+ msginfo = procheader_parse_str(headers, flags, FALSE);
+ g_free(headers);
+ } else {
+ g_warning("invalid FETCH response: %s\n", cur_pos);
+ break;
+ }
+ }
+
+#undef PARSE_ONE_ELEMENT
+
+ if (msginfo) {
+ msginfo->msgnum = uid;
+ msginfo->size = size;
+ msginfo->flags.tmp_flags |= imap_flags.tmp_flags;
+ msginfo->flags.perm_flags = imap_flags.perm_flags;
+ }
+
+ return msginfo;
+}
+
+static gint imap_msg_list_change_perm_flags(GSList *msglist, MsgPermFlags flags,
+ gboolean is_set)
+{
+ Folder *folder;
+ IMAPSession *session;
+ IMAPFlags iflags = 0;
+ MsgInfo *msginfo;
+ GSList *seq_list, *cur;
+ gint ok = IMAP_SUCCESS;
+
+ if (msglist == NULL) return IMAP_SUCCESS;
+
+ msginfo = (MsgInfo *)msglist->data;
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ g_return_val_if_fail(MSG_IS_IMAP(msginfo->flags), -1);
+ g_return_val_if_fail(msginfo->folder != NULL, -1);
+ g_return_val_if_fail(msginfo->folder->folder != NULL, -1);
+
+ folder = msginfo->folder->folder;
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_IMAP, -1);
+
+ session = imap_session_get(folder);
+ if (!session) return -1;
+
+ ok = imap_select(session, IMAP_FOLDER(folder), msginfo->folder->path,
+ NULL, NULL, NULL, NULL);
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+ seq_list = imap_get_seq_set_from_msglist(msglist);
+
+ if (flags & MSG_MARKED) iflags |= IMAP_FLAG_FLAGGED;
+ if (flags & MSG_REPLIED) iflags |= IMAP_FLAG_ANSWERED;
+
+ for (cur = seq_list; cur != NULL; cur = cur->next) {
+ gchar *seq_set = (gchar *)cur->data;
+
+ if (iflags) {
+ ok = imap_set_message_flags(session, seq_set, iflags,
+ is_set);
+ if (ok != IMAP_SUCCESS) break;
+ }
+
+ if (flags & MSG_UNREAD) {
+ ok = imap_set_message_flags(session, seq_set,
+ IMAP_FLAG_SEEN, !is_set);
+ if (ok != IMAP_SUCCESS) break;
+ }
+ }
+
+ imap_seq_set_free(seq_list);
+
+ return ok;
+}
+
+gint imap_msg_set_perm_flags(MsgInfo *msginfo, MsgPermFlags flags)
+{
+ GSList msglist;
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return imap_msg_list_change_perm_flags(&msglist, flags, TRUE);
+}
+
+gint imap_msg_unset_perm_flags(MsgInfo *msginfo, MsgPermFlags flags)
+{
+ GSList msglist;
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return imap_msg_list_change_perm_flags(&msglist, flags, FALSE);
+}
+
+gint imap_msg_list_set_perm_flags(GSList *msglist, MsgPermFlags flags)
+{
+ return imap_msg_list_change_perm_flags(msglist, flags, TRUE);
+}
+
+gint imap_msg_list_unset_perm_flags(GSList *msglist, MsgPermFlags flags)
+{
+ return imap_msg_list_change_perm_flags(msglist, flags, FALSE);
+}
+
+static gchar *imap_get_flag_str(IMAPFlags flags)
+{
+ GString *str;
+ gchar *ret;
+
+ str = g_string_new(NULL);
+
+ if (IMAP_IS_SEEN(flags)) g_string_append(str, "\\Seen ");
+ if (IMAP_IS_ANSWERED(flags)) g_string_append(str, "\\Answered ");
+ if (IMAP_IS_FLAGGED(flags)) g_string_append(str, "\\Flagged ");
+ if (IMAP_IS_DELETED(flags)) g_string_append(str, "\\Deleted ");
+ if (IMAP_IS_DRAFT(flags)) g_string_append(str, "\\Draft");
+
+ if (str->len > 0 && str->str[str->len - 1] == ' ')
+ g_string_truncate(str, str->len - 1);
+
+ ret = str->str;
+ g_string_free(str, FALSE);
+
+ return ret;
+}
+
+static gint imap_set_message_flags(IMAPSession *session,
+ const gchar *seq_set,
+ IMAPFlags flags,
+ gboolean is_set)
+{
+ gchar *cmd;
+ gchar *flag_str;
+ gint ok;
+
+ flag_str = imap_get_flag_str(flags);
+ cmd = g_strconcat(is_set ? "+FLAGS.SILENT (" : "-FLAGS.SILENT (",
+ flag_str, ")", NULL);
+ g_free(flag_str);
+
+ ok = imap_cmd_store(session, seq_set, cmd);
+ g_free(cmd);
+
+ return ok;
+}
+
+static gint imap_select(IMAPSession *session, IMAPFolder *folder,
+ const gchar *path,
+ gint *exists, gint *recent, gint *unseen,
+ guint32 *uid_validity)
+{
+ gchar *real_path;
+ gint ok;
+ gint exists_, recent_, unseen_, uid_validity_;
+
+ if (!exists || !recent || !unseen || !uid_validity) {
+ if (session->mbox && strcmp(session->mbox, path) == 0)
+ return IMAP_SUCCESS;
+ exists = &exists_;
+ recent = &recent_;
+ unseen = &unseen_;
+ uid_validity = &uid_validity_;
+ }
+
+ g_free(session->mbox);
+ session->mbox = NULL;
+
+ real_path = imap_get_real_path(folder, path);
+ ok = imap_cmd_select(session, real_path,
+ exists, recent, unseen, uid_validity);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("can't select folder: %s\n"), real_path);
+ else
+ session->mbox = g_strdup(path);
+ g_free(real_path);
+
+ return ok;
+}
+
+#define THROW(err) { ok = err; goto catch; }
+
+static gint imap_status(IMAPSession *session, IMAPFolder *folder,
+ const gchar *path,
+ gint *messages, gint *recent,
+ guint32 *uid_next, guint32 *uid_validity,
+ gint *unseen)
+{
+ gchar *real_path;
+ gchar *real_path_;
+ gint ok;
+ GPtrArray *argbuf = NULL;
+ gchar *str;
+
+ if (messages && recent && uid_next && uid_validity && unseen) {
+ *messages = *recent = *uid_next = *uid_validity = *unseen = 0;
+ argbuf = g_ptr_array_new();
+ }
+
+ real_path = imap_get_real_path(folder, path);
+ QUOTE_IF_REQUIRED(real_path_, real_path);
+ imap_cmd_gen_send(session, "STATUS %s "
+ "(MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)",
+ real_path_);
+
+ ok = imap_cmd_ok(session, argbuf);
+ if (ok != IMAP_SUCCESS || !argbuf) THROW(ok);
+
+ str = search_array_str(argbuf, "STATUS");
+ if (!str) THROW(IMAP_ERROR);
+
+ str = strchr(str, '(');
+ if (!str) THROW(IMAP_ERROR);
+ str++;
+ while (*str != '\0' && *str != ')') {
+ while (*str == ' ') str++;
+
+ if (!strncmp(str, "MESSAGES ", 9)) {
+ str += 9;
+ *messages = strtol(str, &str, 10);
+ } else if (!strncmp(str, "RECENT ", 7)) {
+ str += 7;
+ *recent = strtol(str, &str, 10);
+ } else if (!strncmp(str, "UIDNEXT ", 8)) {
+ str += 8;
+ *uid_next = strtoul(str, &str, 10);
+ } else if (!strncmp(str, "UIDVALIDITY ", 12)) {
+ str += 12;
+ *uid_validity = strtoul(str, &str, 10);
+ } else if (!strncmp(str, "UNSEEN ", 7)) {
+ str += 7;
+ *unseen = strtol(str, &str, 10);
+ } else {
+ g_warning("invalid STATUS response: %s\n", str);
+ break;
+ }
+ }
+
+catch:
+ g_free(real_path);
+ if (argbuf) {
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+ }
+
+ return ok;
+}
+
+#undef THROW
+
+static gboolean imap_has_capability(IMAPSession *session,
+ const gchar *capability)
+{
+ gchar **p;
+
+ for (p = session->capability; *p != NULL; ++p) {
+ if (!g_strcasecmp(*p, capability))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void imap_capability_free(IMAPSession *session)
+{
+ g_strfreev(session->capability);
+ session->capability = NULL;
+}
+
+
+/* low-level IMAP4rev1 commands */
+
+#define THROW(err) { ok = err; goto catch; }
+
+static gint imap_cmd_capability(IMAPSession *session)
+{
+ gint ok;
+ GPtrArray *argbuf;
+ gchar *capability;
+
+ argbuf = g_ptr_array_new();
+
+ imap_cmd_gen_send(session, "CAPABILITY");
+ if ((ok = imap_cmd_ok(session, argbuf)) != IMAP_SUCCESS) THROW(ok);
+
+ capability = search_array_str(argbuf, "CAPABILITY ");
+ if (!capability) THROW(IMAP_ERROR);
+
+ capability += strlen("CAPABILITY ");
+
+ IMAP_SESSION(session)->capability = g_strsplit(capability, " ", -1);
+
+catch:
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+
+ return ok;
+}
+
+#undef THROW
+
+static gint imap_cmd_authenticate(IMAPSession *session, const gchar *user,
+ const gchar *pass, IMAPAuthType type)
+{
+ gchar *auth_type;
+ gint ok;
+ gchar *buf = NULL;
+ gchar *challenge;
+ gint challenge_len;
+ gchar hexdigest[33];
+ gchar *response;
+ gchar *response64;
+
+ g_return_val_if_fail(type == IMAP_AUTH_CRAM_MD5, IMAP_ERROR);
+
+ auth_type = "CRAM-MD5";
+
+ imap_cmd_gen_send(session, "AUTHENTICATE %s", auth_type);
+ ok = imap_cmd_gen_recv(session, &buf);
+ if (ok != IMAP_SUCCESS || buf[0] != '+' || buf[1] != ' ') {
+ g_free(buf);
+ return IMAP_ERROR;
+ }
+
+ challenge = g_malloc(strlen(buf + 2) + 1);
+ challenge_len = base64_decode(challenge, buf + 2, -1);
+ challenge[challenge_len] = '\0';
+ g_free(buf);
+ log_print("IMAP< [Decoded: %s]\n", challenge);
+
+ md5_hex_hmac(hexdigest, challenge, challenge_len, pass, strlen(pass));
+ g_free(challenge);
+
+ response = g_strdup_printf("%s %s", user, hexdigest);
+ log_print("IMAP> [Encoded: %s]\n", response);
+ response64 = g_malloc((strlen(response) + 3) * 2 + 1);
+ base64_encode(response64, response, strlen(response));
+ g_free(response);
+
+ log_print("IMAP> %s\n", response64);
+ sock_puts(SESSION(session)->sock, response64);
+ ok = imap_cmd_ok(session, NULL);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("IMAP4 authentication failed.\n"));
+
+ return ok;
+}
+
+static gint imap_cmd_login(IMAPSession *session,
+ const gchar *user, const gchar *pass)
+{
+ gchar *user_, *pass_;
+ gint ok;
+
+ QUOTE_IF_REQUIRED(user_, user);
+ QUOTE_IF_REQUIRED(pass_, pass);
+ imap_cmd_gen_send(session, "LOGIN %s %s", user_, pass_);
+
+ ok = imap_cmd_ok(session, NULL);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("IMAP4 login failed.\n"));
+
+ return ok;
+}
+
+static gint imap_cmd_logout(IMAPSession *session)
+{
+ imap_cmd_gen_send(session, "LOGOUT");
+ return imap_cmd_ok(session, NULL);
+}
+
+static gint imap_cmd_noop(IMAPSession *session)
+{
+ imap_cmd_gen_send(session, "NOOP");
+ return imap_cmd_ok(session, NULL);
+}
+
+#if USE_SSL
+static gint imap_cmd_starttls(IMAPSession *session)
+{
+ imap_cmd_gen_send(session, "STARTTLS");
+ return imap_cmd_ok(session, NULL);
+}
+#endif
+
+#define THROW(err) { ok = err; goto catch; }
+
+static gint imap_cmd_namespace(IMAPSession *session, gchar **ns_str)
+{
+ gint ok;
+ GPtrArray *argbuf;
+ gchar *str;
+
+ argbuf = g_ptr_array_new();
+
+ imap_cmd_gen_send(session, "NAMESPACE");
+ if ((ok = imap_cmd_ok(session, argbuf)) != IMAP_SUCCESS) THROW(ok);
+
+ str = search_array_str(argbuf, "NAMESPACE");
+ if (!str) THROW(IMAP_ERROR);
+
+ *ns_str = g_strdup(str);
+
+catch:
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+
+ return ok;
+}
+
+#undef THROW
+
+static gint imap_cmd_list(IMAPSession *session, const gchar *ref,
+ const gchar *mailbox, GPtrArray *argbuf)
+{
+ gchar *ref_, *mailbox_;
+
+ if (!ref) ref = "\"\"";
+ if (!mailbox) mailbox = "\"\"";
+
+ QUOTE_IF_REQUIRED(ref_, ref);
+ QUOTE_IF_REQUIRED(mailbox_, mailbox);
+ imap_cmd_gen_send(session, "LIST %s %s", ref_, mailbox_);
+
+ return imap_cmd_ok(session, argbuf);
+}
+
+#define THROW goto catch
+
+static gint imap_cmd_do_select(IMAPSession *session, const gchar *folder,
+ gboolean examine,
+ gint *exists, gint *recent, gint *unseen,
+ guint32 *uid_validity)
+{
+ gint ok;
+ gchar *resp_str;
+ GPtrArray *argbuf;
+ gchar *select_cmd;
+ gchar *folder_;
+ guint uid_validity_;
+
+ *exists = *recent = *unseen = *uid_validity = 0;
+ argbuf = g_ptr_array_new();
+
+ if (examine)
+ select_cmd = "EXAMINE";
+ else
+ select_cmd = "SELECT";
+
+ QUOTE_IF_REQUIRED(folder_, folder);
+ imap_cmd_gen_send(session, "%s %s", select_cmd, folder_);
+
+ if ((ok = imap_cmd_ok(session, argbuf)) != IMAP_SUCCESS) THROW;
+
+ resp_str = search_array_contain_str(argbuf, "EXISTS");
+ if (resp_str) {
+ if (sscanf(resp_str,"%d EXISTS", exists) != 1) {
+ g_warning("imap_cmd_select(): invalid EXISTS line.\n");
+ THROW;
+ }
+ }
+
+ resp_str = search_array_contain_str(argbuf, "RECENT");
+ if (resp_str) {
+ if (sscanf(resp_str, "%d RECENT", recent) != 1) {
+ g_warning("imap_cmd_select(): invalid RECENT line.\n");
+ THROW;
+ }
+ }
+
+ resp_str = search_array_contain_str(argbuf, "UIDVALIDITY");
+ if (resp_str) {
+ if (sscanf(resp_str, "OK [UIDVALIDITY %u] ", &uid_validity_)
+ != 1) {
+ g_warning("imap_cmd_select(): invalid UIDVALIDITY line.\n");
+ THROW;
+ }
+ *uid_validity = uid_validity_;
+ }
+
+ resp_str = search_array_contain_str(argbuf, "UNSEEN");
+ if (resp_str) {
+ if (sscanf(resp_str, "OK [UNSEEN %d] ", unseen) != 1) {
+ g_warning("imap_cmd_select(): invalid UNSEEN line.\n");
+ THROW;
+ }
+ }
+
+catch:
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+
+ return ok;
+}
+
+static gint imap_cmd_select(IMAPSession *session, const gchar *folder,
+ gint *exists, gint *recent, gint *unseen,
+ guint32 *uid_validity)
+{
+ return imap_cmd_do_select(session, folder, FALSE,
+ exists, recent, unseen, uid_validity);
+}
+
+static gint imap_cmd_examine(IMAPSession *session, const gchar *folder,
+ gint *exists, gint *recent, gint *unseen,
+ guint32 *uid_validity)
+{
+ return imap_cmd_do_select(session, folder, TRUE,
+ exists, recent, unseen, uid_validity);
+}
+
+#undef THROW
+
+static gint imap_cmd_create(IMAPSession *session, const gchar *folder)
+{
+ gchar *folder_;
+
+ QUOTE_IF_REQUIRED(folder_, folder);
+ imap_cmd_gen_send(session, "CREATE %s", folder_);
+
+ return imap_cmd_ok(session, NULL);
+}
+
+static gint imap_cmd_rename(IMAPSession *session, const gchar *old_folder,
+ const gchar *new_folder)
+{
+ gchar *old_folder_, *new_folder_;
+
+ QUOTE_IF_REQUIRED(old_folder_, old_folder);
+ QUOTE_IF_REQUIRED(new_folder_, new_folder);
+ imap_cmd_gen_send(session, "RENAME %s %s", old_folder_, new_folder_);
+
+ return imap_cmd_ok(session, NULL);
+}
+
+static gint imap_cmd_delete(IMAPSession *session, const gchar *folder)
+{
+ gchar *folder_;
+
+ QUOTE_IF_REQUIRED(folder_, folder);
+ imap_cmd_gen_send(session, "DELETE %s", folder_);
+
+ return imap_cmd_ok(session, NULL);
+}
+
+#define THROW(err) { ok = err; goto catch; }
+
+static gint imap_cmd_search(IMAPSession *session, const gchar *criteria,
+ GArray **result)
+{
+ gint ok;
+ GPtrArray *argbuf;
+ GArray *array;
+ gchar *str;
+ gchar *p, *ep;
+ guint32 uid;
+
+ g_return_val_if_fail(criteria != NULL, IMAP_ERROR);
+ g_return_val_if_fail(result != NULL, IMAP_ERROR);
+
+ argbuf = g_ptr_array_new();
+
+ imap_cmd_gen_send(session, "UID SEARCH %s", criteria);
+ if ((ok = imap_cmd_ok(session, argbuf)) != IMAP_SUCCESS) THROW(ok);
+
+ str = search_array_str(argbuf, "SEARCH");
+ if (!str) THROW(IMAP_ERROR);
+
+ array = g_array_new(FALSE, FALSE, sizeof(guint32));
+
+ p = str + strlen("SEARCH");
+
+ while (*p != '\0') {
+ uid = strtoul(p, &ep, 10);
+ if (p < ep && uid > 0) {
+ g_array_append_val(array, uid);
+ p = ep;
+ } else
+ break;
+ }
+
+ *result = array;
+
+catch:
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+
+ return ok;
+}
+
+static gint imap_cmd_fetch(IMAPSession *session, guint32 uid,
+ const gchar *filename)
+{
+ gint ok;
+ gchar *buf;
+ gchar *cur_pos;
+ gchar size_str[32];
+ glong size_num;
+
+ g_return_val_if_fail(filename != NULL, IMAP_ERROR);
+
+ imap_cmd_gen_send(session, "UID FETCH %d BODY.PEEK[]", uid);
+
+ while ((ok = imap_cmd_gen_recv(session, &buf)) == IMAP_SUCCESS) {
+ if (buf[0] != '*' || buf[1] != ' ') {
+ g_free(buf);
+ return IMAP_ERROR;
+ }
+ if (strstr(buf, "FETCH") != NULL) break;
+ g_free(buf);
+ }
+ if (ok != IMAP_SUCCESS)
+ return ok;
+
+#define RETURN_ERROR_IF_FAIL(cond) \
+ if (!(cond)) { \
+ g_free(buf); \
+ return IMAP_ERROR; \
+ }
+
+ cur_pos = strchr(buf, '{');
+ RETURN_ERROR_IF_FAIL(cur_pos != NULL);
+ cur_pos = strchr_cpy(cur_pos + 1, '}', size_str, sizeof(size_str));
+ RETURN_ERROR_IF_FAIL(cur_pos != NULL);
+ size_num = atol(size_str);
+ RETURN_ERROR_IF_FAIL(size_num >= 0);
+
+ RETURN_ERROR_IF_FAIL(*cur_pos == '\0');
+
+#undef RETURN_ERROR_IF_FAIL
+
+ g_free(buf);
+
+ if (recv_bytes_write_to_file(SESSION(session)->sock,
+ size_num, filename) != 0)
+ return IMAP_ERROR;
+
+ if (imap_cmd_gen_recv(session, &buf) != IMAP_SUCCESS)
+ return IMAP_ERROR;
+
+ if (buf[0] == '\0' || buf[strlen(buf) - 1] != ')') {
+ g_free(buf);
+ return IMAP_ERROR;
+ }
+ g_free(buf);
+
+ ok = imap_cmd_ok(session, NULL);
+
+ return ok;
+}
+
+static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
+ const gchar *file, IMAPFlags flags,
+ guint32 *new_uid)
+{
+ gint ok;
+ gint size;
+ gchar *destfolder_;
+ gchar *flag_str;
+ guint new_uid_;
+ gchar *ret = NULL;
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+ GPtrArray *argbuf;
+ gchar *resp_str;
+
+ g_return_val_if_fail(file != NULL, IMAP_ERROR);
+
+ size = get_file_size_as_crlf(file);
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+ QUOTE_IF_REQUIRED(destfolder_, destfolder);
+ flag_str = imap_get_flag_str(flags);
+ imap_cmd_gen_send(session, "APPEND %s (%s) {%d}",
+ destfolder_, flag_str, size);
+ g_free(flag_str);
+
+ ok = imap_cmd_gen_recv(session, &ret);
+ if (ok != IMAP_SUCCESS || ret[0] != '+' || ret[1] != ' ') {
+ log_warning(_("can't append %s to %s\n"), file, destfolder_);
+ g_free(ret);
+ fclose(fp);
+ return IMAP_ERROR;
+ }
+ g_free(ret);
+
+ log_print("IMAP4> %s\n", _("(sending file...)"));
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ if (sock_puts(SESSION(session)->sock, buf) < 0) {
+ fclose(fp);
+ return -1;
+ }
+ }
+
+ if (ferror(fp)) {
+ FILE_OP_ERROR(file, "fgets");
+ fclose(fp);
+ return -1;
+ }
+
+ sock_puts(SESSION(session)->sock, "");
+
+ fclose(fp);
+
+ if (new_uid != NULL)
+ *new_uid = 0;
+
+ if (new_uid != NULL && session->uidplus) {
+ argbuf = g_ptr_array_new();
+
+ ok = imap_cmd_ok(session, argbuf);
+ if (ok != IMAP_SUCCESS)
+ log_warning(_("can't append message to %s\n"),
+ destfolder_);
+ else if (argbuf->len > 0) {
+ resp_str = g_ptr_array_index(argbuf, argbuf->len - 1);
+ if (resp_str &&
+ sscanf(resp_str, "%*u OK [APPENDUID %*u %u]",
+ &new_uid_) == 1) {
+ *new_uid = new_uid_;
+ }
+ }
+
+ ptr_array_free_strings(argbuf);
+ g_ptr_array_free(argbuf, TRUE);
+ } else
+ ok = imap_cmd_ok(session, NULL);
+
+ return ok;
+}
+
+static gint imap_cmd_copy(IMAPSession *session, const gchar *seq_set,
+ const gchar *destfolder)
+{
+ gint ok;
+ gchar *destfolder_;
+
+ g_return_val_if_fail(destfolder != NULL, IMAP_ERROR);
+
+ QUOTE_IF_REQUIRED(destfolder_, destfolder);
+ imap_cmd_gen_send(session, "UID COPY %s %s", seq_set, destfolder_);
+
+ ok = imap_cmd_ok(session, NULL);
+ if (ok != IMAP_SUCCESS) {
+ log_warning(_("can't copy %s to %s\n"), seq_set, destfolder_);
+ return -1;
+ }
+
+ return ok;
+}
+
+gint imap_cmd_envelope(IMAPSession *session, const gchar *seq_set)
+{
+ imap_cmd_gen_send
+ (session, "UID FETCH %s (UID FLAGS RFC822.SIZE RFC822.HEADER)",
+ seq_set);
+
+ return IMAP_SUCCESS;
+}
+
+static gint imap_cmd_store(IMAPSession *session, const gchar *seq_set,
+ const gchar *sub_cmd)
+{
+ gint ok;
+
+ imap_cmd_gen_send(session, "UID STORE %s %s", seq_set, sub_cmd);
+
+ if ((ok = imap_cmd_ok(session, NULL)) != IMAP_SUCCESS) {
+ log_warning(_("error while imap command: STORE %s %s\n"),
+ seq_set, sub_cmd);
+ return ok;
+ }
+
+ return IMAP_SUCCESS;
+}
+
+static gint imap_cmd_expunge(IMAPSession *session)
+{
+ gint ok;
+
+ imap_cmd_gen_send(session, "EXPUNGE");
+ if ((ok = imap_cmd_ok(session, NULL)) != IMAP_SUCCESS) {
+ log_warning(_("error while imap command: EXPUNGE\n"));
+ return ok;
+ }
+
+ return IMAP_SUCCESS;
+}
+
+static gint imap_cmd_close(IMAPSession *session)
+{
+ gint ok;
+
+ imap_cmd_gen_send(session, "CLOSE");
+ if ((ok = imap_cmd_ok(session, NULL)) != IMAP_SUCCESS)
+ log_warning(_("error while imap command: CLOSE\n"));
+
+ return ok;
+}
+
+static gint imap_cmd_ok(IMAPSession *session, GPtrArray *argbuf)
+{
+ gint ok;
+ gchar *buf;
+ gint cmd_num;
+ gchar cmd_status[IMAPBUFSIZE + 1];
+
+ while ((ok = imap_cmd_gen_recv(session, &buf)) == IMAP_SUCCESS) {
+ if (buf[0] == '*' && buf[1] == ' ') {
+ if (argbuf) {
+ g_memmove(buf, buf + 2, strlen(buf + 2) + 1);
+ g_ptr_array_add(argbuf, buf);
+ } else
+ g_free(buf);
+ continue;
+ }
+
+ if (sscanf(buf, "%d %" Xstr(IMAPBUFSIZE) "s",
+ &cmd_num, cmd_status) < 2) {
+ g_free(buf);
+ return IMAP_ERROR;
+ } else if (cmd_num == session->cmd_count &&
+ !strcmp(cmd_status, "OK")) {
+ if (argbuf)
+ g_ptr_array_add(argbuf, buf);
+ else
+ g_free(buf);
+ return IMAP_SUCCESS;
+ } else {
+ g_free(buf);
+ return IMAP_ERROR;
+ }
+ }
+
+ return ok;
+}
+
+static void imap_cmd_gen_send(IMAPSession *session, const gchar *format, ...)
+{
+ gchar buf[IMAPBUFSIZE];
+ gchar tmp[IMAPBUFSIZE];
+ gchar *p;
+ va_list args;
+
+ va_start(args, format);
+ g_vsnprintf(tmp, sizeof(tmp), format, args);
+ va_end(args);
+
+ session->cmd_count++;
+
+ g_snprintf(buf, sizeof(buf), "%d %s\r\n", session->cmd_count, tmp);
+ if (!strncasecmp(tmp, "LOGIN ", 6) && (p = strchr(tmp + 6, ' '))) {
+ *p = '\0';
+ log_print("IMAP4> %d %s ********\n", session->cmd_count, tmp);
+ } else
+ log_print("IMAP4> %d %s\n", session->cmd_count, tmp);
+
+ sock_write_all(SESSION(session)->sock, buf, strlen(buf));
+}
+
+static gint imap_cmd_gen_recv(IMAPSession *session, gchar **ret)
+{
+ if ((*ret = sock_getline(SESSION(session)->sock)) == NULL)
+ return IMAP_SOCKET;
+
+ strretchomp(*ret);
+
+ log_print("IMAP4< %s\n", *ret);
+
+ session_set_access_time(SESSION(session));
+
+ return IMAP_SUCCESS;
+}
+
+
+/* misc utility functions */
+
+static gchar *strchr_cpy(const gchar *src, gchar ch, gchar *dest, gint len)
+{
+ gchar *tmp;
+
+ dest[0] = '\0';
+ tmp = strchr(src, ch);
+ if (!tmp)
+ return NULL;
+
+ memcpy(dest, src, MIN(tmp - src, len - 1));
+ dest[MIN(tmp - src, len - 1)] = '\0';
+
+ return tmp + 1;
+}
+
+static gchar *get_quoted(const gchar *src, gchar ch, gchar *dest, gint len)
+{
+ const gchar *p = src;
+ gint n = 0;
+
+ g_return_val_if_fail(*p == ch, NULL);
+
+ *dest = '\0';
+ p++;
+
+ while (*p != '\0' && *p != ch) {
+ if (n < len - 1) {
+ if (*p == '\\' && *(p + 1) != '\0')
+ p++;
+ *dest++ = *p++;
+ } else
+ p++;
+ n++;
+ }
+
+ *dest = '\0';
+ return (gchar *)(*p == ch ? p + 1 : p);
+}
+
+static gchar *search_array_contain_str(GPtrArray *array, gchar *str)
+{
+ gint i;
+
+ for (i = 0; i < array->len; i++) {
+ gchar *tmp;
+
+ tmp = g_ptr_array_index(array, i);
+ if (strstr(tmp, str) != NULL)
+ return tmp;
+ }
+
+ return NULL;
+}
+
+static gchar *search_array_str(GPtrArray *array, gchar *str)
+{
+ gint i;
+ gint len;
+
+ len = strlen(str);
+
+ for (i = 0; i < array->len; i++) {
+ gchar *tmp;
+
+ tmp = g_ptr_array_index(array, i);
+ if (!strncmp(tmp, str, len))
+ return tmp;
+ }
+
+ return NULL;
+}
+
+static void imap_path_separator_subst(gchar *str, gchar separator)
+{
+ gchar *p;
+ gboolean in_escape = FALSE;
+
+ if (!separator || separator == '/') return;
+
+ for (p = str; *p != '\0'; p++) {
+ if (*p == '/' && !in_escape)
+ *p = separator;
+ else if (*p == '&' && *(p + 1) != '-' && !in_escape)
+ in_escape = TRUE;
+ else if (*p == '-' && in_escape)
+ in_escape = FALSE;
+ }
+}
+
+static gchar *imap_modified_utf7_to_locale(const gchar *mutf7_str)
+{
+#if !HAVE_ICONV
+ const gchar *from_p;
+ gchar *to, *to_p;
+
+ to = g_malloc(strlen(mutf7_str) + 1);
+ to_p = to;
+
+ for (from_p = mutf7_str; *from_p != '\0'; from_p++) {
+ if (*from_p == '&' && *(from_p + 1) == '-') {
+ *to_p++ = '&';
+ from_p++;
+ } else
+ *to_p++ = *from_p;
+ }
+ *to_p = '\0';
+
+ return to;
+#else
+ static iconv_t cd = (iconv_t)-1;
+ static gboolean iconv_ok = TRUE;
+ GString *norm_utf7;
+ gchar *norm_utf7_p;
+ size_t norm_utf7_len;
+ const gchar *p;
+ gchar *to_str, *to_p;
+ size_t to_len;
+ gboolean in_escape = FALSE;
+
+ if (!iconv_ok) return g_strdup(mutf7_str);
+
+ if (cd == (iconv_t)-1) {
+ cd = iconv_open(conv_get_locale_charset_str(), "UTF-7");
+ if (cd == (iconv_t)-1) {
+ g_warning("iconv cannot convert UTF-7 to %s\n",
+ conv_get_locale_charset_str());
+ iconv_ok = FALSE;
+ return g_strdup(mutf7_str);
+ }
+ }
+
+ norm_utf7 = g_string_new(NULL);
+
+ for (p = mutf7_str; *p != '\0'; p++) {
+ /* replace: '&' -> '+',
+ "&-" -> '&',
+ escaped ',' -> '/' */
+ if (!in_escape && *p == '&') {
+ if (*(p + 1) != '-') {
+ g_string_append_c(norm_utf7, '+');
+ in_escape = TRUE;
+ } else {
+ g_string_append_c(norm_utf7, '&');
+ p++;
+ }
+ } else if (in_escape && *p == ',') {
+ g_string_append_c(norm_utf7, '/');
+ } else if (in_escape && *p == '-') {
+ g_string_append_c(norm_utf7, '-');
+ in_escape = FALSE;
+ } else {
+ g_string_append_c(norm_utf7, *p);
+ }
+ }
+
+ norm_utf7_p = norm_utf7->str;
+ norm_utf7_len = norm_utf7->len;
+ to_len = strlen(mutf7_str) * 5;
+ to_p = to_str = g_malloc(to_len + 1);
+
+ if (iconv(cd, (ICONV_CONST gchar **)&norm_utf7_p, &norm_utf7_len,
+ &to_p, &to_len) == -1) {
+ g_warning(_("iconv cannot convert UTF-7 to %s\n"),
+ conv_get_locale_charset_str());
+ g_string_free(norm_utf7, TRUE);
+ g_free(to_str);
+ return g_strdup(mutf7_str);
+ }
+
+ /* second iconv() call for flushing */
+ iconv(cd, NULL, NULL, &to_p, &to_len);
+ g_string_free(norm_utf7, TRUE);
+ *to_p = '\0';
+
+ return to_str;
+#endif /* !HAVE_ICONV */
+}
+
+static gchar *imap_locale_to_modified_utf7(const gchar *from)
+{
+#if !HAVE_ICONV
+ const gchar *from_p;
+ gchar *to, *to_p;
+
+ to = g_malloc(strlen(from) * 2 + 1);
+ to_p = to;
+
+ for (from_p = from; *from_p != '\0'; from_p++) {
+ if (*from_p == '&') {
+ *to_p++ = '&';
+ *to_p++ = '-';
+ } else
+ *to_p++ = *from_p;
+ }
+ *to_p = '\0';
+
+ return to;
+#else
+ static iconv_t cd = (iconv_t)-1;
+ static gboolean iconv_ok = TRUE;
+ gchar *norm_utf7, *norm_utf7_p;
+ size_t from_len, norm_utf7_len;
+ GString *to_str;
+ gchar *from_tmp, *to, *p;
+ gboolean in_escape = FALSE;
+
+ if (!iconv_ok) return g_strdup(from);
+
+ if (cd == (iconv_t)-1) {
+ cd = iconv_open("UTF-7", conv_get_locale_charset_str());
+ if (cd == (iconv_t)-1) {
+ g_warning(_("iconv cannot convert %s to UTF-7\n"),
+ conv_get_locale_charset_str());
+ iconv_ok = FALSE;
+ return g_strdup(from);
+ }
+ }
+
+ Xstrdup_a(from_tmp, from, return g_strdup(from));
+ from_len = strlen(from);
+ norm_utf7_len = from_len * 5;
+ Xalloca(norm_utf7, norm_utf7_len + 1, return g_strdup(from));
+ norm_utf7_p = norm_utf7;
+
+#define IS_PRINT(ch) (isprint(ch) && isascii(ch))
+
+ while (from_len > 0) {
+ if (*from_tmp == '+') {
+ *norm_utf7_p++ = '+';
+ *norm_utf7_p++ = '-';
+ norm_utf7_len -= 2;
+ from_tmp++;
+ from_len--;
+ } else if (IS_PRINT(*(guchar *)from_tmp)) {
+ /* printable ascii char */
+ *norm_utf7_p = *from_tmp;
+ norm_utf7_p++;
+ norm_utf7_len--;
+ from_tmp++;
+ from_len--;
+ } else {
+ size_t mb_len = 0, conv_len = 0;
+
+ /* unprintable char: convert to UTF-7 */
+ p = from_tmp;
+ while (!IS_PRINT(*(guchar *)p) && conv_len < from_len) {
+ mb_len = mblen(p, MB_LEN_MAX);
+ if (mb_len <= 0) {
+ g_warning("wrong multibyte sequence\n");
+ return g_strdup(from);
+ }
+ conv_len += mb_len;
+ p += mb_len;
+ }
+
+ from_len -= conv_len;
+ if (iconv(cd, (ICONV_CONST gchar **)&from_tmp,
+ &conv_len,
+ &norm_utf7_p, &norm_utf7_len) == -1) {
+ g_warning("iconv cannot convert %s to UTF-7\n",
+ conv_get_locale_charset_str());
+ return g_strdup(from);
+ }
+
+ /* second iconv() call for flushing */
+ iconv(cd, NULL, NULL, &norm_utf7_p, &norm_utf7_len);
+ }
+ }
+
+#undef IS_PRINT
+
+ *norm_utf7_p = '\0';
+ to_str = g_string_new(NULL);
+ for (p = norm_utf7; p < norm_utf7_p; p++) {
+ /* replace: '&' -> "&-",
+ '+' -> '&',
+ "+-" -> '+',
+ BASE64 '/' -> ',' */
+ if (!in_escape && *p == '&') {
+ g_string_append(to_str, "&-");
+ } else if (!in_escape && *p == '+') {
+ if (*(p + 1) == '-') {
+ g_string_append_c(to_str, '+');
+ p++;
+ } else {
+ g_string_append_c(to_str, '&');
+ in_escape = TRUE;
+ }
+ } else if (in_escape && *p == '/') {
+ g_string_append_c(to_str, ',');
+ } else if (in_escape && *p == '-') {
+ g_string_append_c(to_str, '-');
+ in_escape = FALSE;
+ } else {
+ g_string_append_c(to_str, *p);
+ }
+ }
+
+ if (in_escape) {
+ in_escape = FALSE;
+ g_string_append_c(to_str, '-');
+ }
+
+ to = to_str->str;
+ g_string_free(to_str, FALSE);
+
+ return to;
+#endif /* !HAVE_ICONV */
+}
+
+static GSList *imap_get_seq_set_from_msglist(GSList *msglist)
+{
+ GString *str;
+ GSList *sorted_list, *cur;
+ guint first, last, next;
+ gchar *ret_str;
+ GSList *ret_list = NULL;
+
+ if (msglist == NULL)
+ return NULL;
+
+ str = g_string_sized_new(256);
+
+ sorted_list = g_slist_copy(msglist);
+ sorted_list = procmsg_sort_msg_list(sorted_list, SORT_BY_NUMBER,
+ SORT_ASCENDING);
+
+ first = ((MsgInfo *)sorted_list->data)->msgnum;
+
+ for (cur = sorted_list; cur != NULL; cur = cur->next) {
+ last = ((MsgInfo *)cur->data)->msgnum;
+ if (cur->next)
+ next = ((MsgInfo *)cur->next->data)->msgnum;
+ else
+ next = 0;
+
+ if (last + 1 != next || next == 0) {
+ if (str->len > 0)
+ g_string_append_c(str, ',');
+ if (first == last)
+ g_string_sprintfa(str, "%u", first);
+ else
+ g_string_sprintfa(str, "%u:%u", first, last);
+
+ first = next;
+
+ if (str->len > IMAP_CMD_LIMIT) {
+ ret_str = g_strdup(str->str);
+ ret_list = g_slist_append(ret_list, ret_str);
+ g_string_truncate(str, 0);
+ }
+ }
+ }
+
+ if (str->len > 0) {
+ ret_str = g_strdup(str->str);
+ ret_list = g_slist_append(ret_list, ret_str);
+ }
+
+ g_slist_free(sorted_list);
+ g_string_free(str, TRUE);
+
+ return ret_list;
+}
+
+static void imap_seq_set_free(GSList *seq_list)
+{
+ slist_free_strings(seq_list);
+ g_slist_free(seq_list);
+}
+
+static GHashTable *imap_get_uid_table(GArray *array)
+{
+ GHashTable *table;
+ gint i;
+ guint32 uid;
+
+ g_return_val_if_fail(array != NULL, NULL);
+
+ table = g_hash_table_new(NULL, g_direct_equal);
+
+ for (i = 0; i < array->len; i++) {
+ uid = g_array_index(array, guint32, i);
+ g_hash_table_insert(table, GUINT_TO_POINTER(uid),
+ GINT_TO_POINTER(i + 1));
+ }
+
+ return table;
+}
+
+static gboolean imap_rename_folder_func(GNode *node, gpointer data)
+{
+ FolderItem *item = node->data;
+ gchar **paths = data;
+ const gchar *oldpath = paths[0];
+ const gchar *newpath = paths[1];
+ gchar *base;
+ gchar *new_itempath;
+ gint oldpathlen;
+
+ oldpathlen = strlen(oldpath);
+ if (strncmp(oldpath, item->path, oldpathlen) != 0) {
+ g_warning("path doesn't match: %s, %s\n", oldpath, item->path);
+ return TRUE;
+ }
+
+ base = item->path + oldpathlen;
+ while (*base == G_DIR_SEPARATOR) base++;
+ if (*base == '\0')
+ new_itempath = g_strdup(newpath);
+ else
+ new_itempath = g_strconcat(newpath, G_DIR_SEPARATOR_S, base,
+ NULL);
+ g_free(item->path);
+ item->path = new_itempath;
+
+ return FALSE;
+}
diff --git a/src/imap.h b/src/imap.h
new file mode 100644
index 00000000..c726c875
--- /dev/null
+++ b/src/imap.h
@@ -0,0 +1,114 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __IMAP_H__
+#define __IMAP_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <time.h>
+
+#include "folder.h"
+#include "session.h"
+#include "procmsg.h"
+
+typedef struct _IMAPFolder IMAPFolder;
+typedef struct _IMAPSession IMAPSession;
+typedef struct _IMAPNameSpace IMAPNameSpace;
+
+#define IMAP_FOLDER(obj) ((IMAPFolder *)obj)
+#define IMAP_SESSION(obj) ((IMAPSession *)obj)
+
+#include "prefs_account.h"
+
+typedef enum
+{
+ IMAP_AUTH_LOGIN = 1 << 0,
+ IMAP_AUTH_CRAM_MD5 = 1 << 1
+} IMAPAuthType;
+
+struct _IMAPFolder
+{
+ RemoteFolder rfolder;
+
+ /* list of IMAPNameSpace */
+ GList *ns_personal;
+ GList *ns_others;
+ GList *ns_shared;
+};
+
+struct _IMAPSession
+{
+ Session session;
+
+ gboolean authenticated;
+
+ gchar **capability;
+ gboolean uidplus;
+
+ gchar *mbox;
+ guint cmd_count;
+};
+
+struct _IMAPNameSpace
+{
+ gchar *name;
+ gchar separator;
+};
+
+#define IMAP_SUCCESS 0
+#define IMAP_SOCKET 2
+#define IMAP_AUTHFAIL 3
+#define IMAP_PROTOCOL 4
+#define IMAP_SYNTAX 5
+#define IMAP_IOERR 6
+#define IMAP_ERROR 7
+
+#define IMAPBUFSIZE 8192
+
+typedef enum
+{
+ IMAP_FLAG_SEEN = 1 << 0,
+ IMAP_FLAG_ANSWERED = 1 << 1,
+ IMAP_FLAG_FLAGGED = 1 << 2,
+ IMAP_FLAG_DELETED = 1 << 3,
+ IMAP_FLAG_DRAFT = 1 << 4
+} IMAPFlags;
+
+#define IMAP_IS_SEEN(flags) ((flags & IMAP_FLAG_SEEN) != 0)
+#define IMAP_IS_ANSWERED(flags) ((flags & IMAP_FLAG_ANSWERED) != 0)
+#define IMAP_IS_FLAGGED(flags) ((flags & IMAP_FLAG_FLAGGED) != 0)
+#define IMAP_IS_DELETED(flags) ((flags & IMAP_FLAG_DELETED) != 0)
+#define IMAP_IS_DRAFT(flags) ((flags & IMAP_FLAG_DRAFT) != 0)
+
+FolderClass *imap_get_class (void);
+
+gint imap_msg_set_perm_flags (MsgInfo *msginfo,
+ MsgPermFlags flags);
+gint imap_msg_unset_perm_flags (MsgInfo *msginfo,
+ MsgPermFlags flags);
+gint imap_msg_list_set_perm_flags (GSList *msglist,
+ MsgPermFlags flags);
+gint imap_msg_list_unset_perm_flags (GSList *msglist,
+ MsgPermFlags flags);
+
+#endif /* __IMAP_H__ */
diff --git a/src/import.c b/src/import.c
new file mode 100644
index 00000000..9bf2a883
--- /dev/null
+++ b/src/import.c
@@ -0,0 +1,268 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkfilesel.h>
+#include <gtk/gtksignal.h>
+
+#include "intl.h"
+#include "main.h"
+#include "inc.h"
+#include "mbox.h"
+#include "folderview.h"
+#include "filesel.h"
+#include "foldersel.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "folder.h"
+
+static GtkWidget *window;
+static GtkWidget *file_entry;
+static GtkWidget *dest_entry;
+static GtkWidget *file_button;
+static GtkWidget *dest_button;
+static GtkWidget *ok_button;
+static GtkWidget *cancel_button;
+static gboolean import_ack;
+
+static void import_create(void);
+static void import_ok_cb(GtkWidget *widget, gpointer data);
+static void import_cancel_cb(GtkWidget *widget, gpointer data);
+static void import_filesel_cb(GtkWidget *widget, gpointer data);
+static void import_destsel_cb(GtkWidget *widget, gpointer data);
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+
+gint import_mbox(FolderItem *default_dest)
+{
+ gint ok = 0;
+ gchar *dest_id = NULL;
+
+ if (!window)
+ import_create();
+ else
+ gtk_widget_show(window);
+
+ gtk_entry_set_text(GTK_ENTRY(file_entry), "");
+ if (default_dest && default_dest->path)
+ dest_id = folder_item_get_identifier(default_dest);
+
+ if (dest_id) {
+ gtk_entry_set_text(GTK_ENTRY(dest_entry), dest_id);
+ g_free(dest_id);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(dest_entry), "");
+ gtk_widget_grab_focus(file_entry);
+
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ gtk_main();
+
+ if (import_ack) {
+ const gchar *utf8filename, *destdir;
+ FolderItem *dest;
+
+ utf8filename = gtk_entry_get_text(GTK_ENTRY(file_entry));
+ destdir = gtk_entry_get_text(GTK_ENTRY(dest_entry));
+ if (utf8filename && *utf8filename) {
+ gchar *filename;
+
+ filename = g_filename_from_utf8
+ (utf8filename, -1, NULL, NULL, NULL);
+ if (!filename) {
+ g_warning("faild to convert character set\n");
+ filename = g_strdup(utf8filename);
+ }
+
+ if (!destdir || !*destdir) {
+ dest = folder_find_item_from_path(INBOX_DIR);
+ } else
+ dest = folder_find_item_from_identifier
+ (destdir);
+
+ if (!dest) {
+ g_warning("Can't find the folder.\n");
+ } else {
+ ok = proc_mbox(dest, filename, NULL);
+ folder_item_scan(dest);
+ folderview_update_item(dest, TRUE);
+ }
+
+ g_free(filename);
+ }
+ }
+
+ gtk_widget_hide(window);
+
+ return ok;
+}
+
+static void import_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *desc_label;
+ GtkWidget *table;
+ GtkWidget *file_label;
+ GtkWidget *dest_label;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Import"));
+ gtk_container_set_border_width(GTK_CONTAINER(window), 5);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
+
+ desc_label = gtk_label_new
+ (_("Specify target mbox file and destination folder."));
+ gtk_box_pack_start(GTK_BOX(hbox), desc_label, FALSE, FALSE, 0);
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 8);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+ gtk_widget_set_size_request(table, 420, -1);
+
+ file_label = gtk_label_new(_("Importing file:"));
+ gtk_table_attach(GTK_TABLE(table), file_label, 0, 1, 0, 1,
+ GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(file_label), 1, 0.5);
+
+ dest_label = gtk_label_new(_("Destination dir:"));
+ gtk_table_attach(GTK_TABLE(table), dest_label, 0, 1, 1, 2,
+ GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(dest_label), 1, 0.5);
+
+ file_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, 0, 1,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ dest_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), dest_entry, 1, 2, 1, 2,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ file_button = gtk_button_new_with_label(_(" Select... "));
+ gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 0, 1,
+ 0, 0, 0, 0);
+ g_signal_connect(G_OBJECT(file_button), "clicked",
+ G_CALLBACK(import_filesel_cb), NULL);
+
+ dest_button = gtk_button_new_with_label(_(" Select... "));
+ gtk_table_attach(GTK_TABLE(table), dest_button, 2, 3, 1, 2,
+ 0, 0, 0, 0);
+ g_signal_connect(G_OBJECT(dest_button), "clicked",
+ G_CALLBACK(import_destsel_cb), NULL);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_button, _("OK"),
+ &cancel_button, _("Cancel"),
+ NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(import_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(import_cancel_cb), NULL);
+
+ gtk_widget_show_all(window);
+}
+
+static void import_ok_cb(GtkWidget *widget, gpointer data)
+{
+ import_ack = TRUE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void import_cancel_cb(GtkWidget *widget, gpointer data)
+{
+ import_ack = FALSE;
+ if (gtk_main_level() > 1)
+ gtk_main_quit();
+}
+
+static void import_filesel_cb(GtkWidget *widget, gpointer data)
+{
+ const gchar *filename;
+ gchar *utf8_filename;
+
+ filename = filesel_select_file(_("Select importing file"), NULL);
+ if (!filename) return;
+
+ utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
+ if (!utf8_filename) {
+ g_warning("import_filesel_cb(): faild to convert characer set.");
+ utf8_filename = g_strdup(filename);
+ }
+ gtk_entry_set_text(GTK_ENTRY(file_entry), utf8_filename);
+ g_free(utf8_filename);
+}
+
+static void import_destsel_cb(GtkWidget *widget, gpointer data)
+{
+ FolderItem *dest;
+
+ dest = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL);
+ if (dest && dest->path)
+ gtk_entry_set_text(GTK_ENTRY(dest_entry), dest->path);
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ import_cancel_cb(NULL, NULL);
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ import_cancel_cb(NULL, NULL);
+ return FALSE;
+}
diff --git a/src/import.h b/src/import.h
new file mode 100644
index 00000000..64d8421f
--- /dev/null
+++ b/src/import.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __IMPORT_H__
+#define __IMPORT_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+gint import_mbox(FolderItem *default_dest);
+
+#endif /* __IMPORT_H__ */
diff --git a/src/importldif.c b/src/importldif.c
new file mode 100644
index 00000000..b7bfa5a0
--- /dev/null
+++ b/src/importldif.c
@@ -0,0 +1,846 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Edit VCard address book data.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "addrbook.h"
+#include "addressbook.h"
+#include "addressitem.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "prefs_common.h"
+#include "manage_window.h"
+#include "mgutils.h"
+#include "ldif.h"
+#include "utils.h"
+
+#define IMPORTLDIF_GUESS_NAME "LDIF Import"
+
+#define PAGE_FILE_INFO 0
+#define PAGE_ATTRIBUTES 1
+#define PAGE_FINISH 2
+
+#define IMPORTLDIF_WIDTH 380
+#define IMPORTLDIF_HEIGHT 300
+
+#define FIELDS_N_COLS 3
+#define FIELDS_COL_WIDTH_SELECT 10
+#define FIELDS_COL_WIDTH_FIELD 140
+#define FIELDS_COL_WIDTH_ATTRIB 140
+
+typedef enum {
+ FIELD_COL_SELECT = 0,
+ FIELD_COL_FIELD = 1,
+ FIELD_COL_ATTRIB = 2
+} ImpLdif_FieldColPos;
+
+static struct _ImpLdif_Dlg {
+ GtkWidget *window;
+ GtkWidget *notebook;
+ GtkWidget *file_entry;
+ GtkWidget *name_entry;
+ GtkWidget *clist_field;
+ GtkWidget *name_ldif;
+ GtkWidget *name_attrib;
+ GtkWidget *check_select;
+ GtkWidget *labelBook;
+ GtkWidget *labelFile;
+ GtkWidget *labelRecords;
+ GtkWidget *btnPrev;
+ GtkWidget *btnNext;
+ GtkWidget *btnCancel;
+ GtkWidget *statusbar;
+ gint status_cid;
+ gint rowIndSelect;
+ gint rowCount;
+ gchar *nameBook;
+ gchar *fileName;
+ gboolean cancelled;
+} impldif_dlg;
+
+static struct _AddressFileSelection _imp_ldif_file_selector_;
+static AddressBookFile *_importedBook_;
+static AddressIndex *_imp_addressIndex_;
+static LdifFile *_ldifFile_ = NULL;
+
+static GdkPixmap *markxpm;
+static GdkBitmap *markxpmmask;
+
+static void imp_ldif_status_show( gchar *msg ) {
+ if( impldif_dlg.statusbar != NULL ) {
+ gtk_statusbar_pop( GTK_STATUSBAR(impldif_dlg.statusbar), impldif_dlg.status_cid );
+ if( msg ) {
+ gtk_statusbar_push( GTK_STATUSBAR(impldif_dlg.statusbar), impldif_dlg.status_cid, msg );
+ }
+ }
+}
+
+static void imp_ldif_message( void ) {
+ gchar *sMsg = NULL;
+ gint pageNum;
+
+ pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) );
+ if( pageNum == PAGE_FILE_INFO ) {
+ sMsg = _( "Please specify address book name and file to import." );
+ }
+ else if( pageNum == PAGE_ATTRIBUTES ) {
+ sMsg = _( "Select and rename LDIF field names to import." );
+ }
+ else if( pageNum == PAGE_FINISH ) {
+ sMsg = _( "File imported." );
+ }
+ imp_ldif_status_show( sMsg );
+}
+
+static gchar *imp_ldif_guess_file( AddressBookFile *abf ) {
+ gchar *newFile = NULL;
+ GList *fileList = NULL;
+ gint fileNum = 1;
+ fileList = addrbook_get_bookfile_list( abf );
+ if( fileList ) {
+ fileNum = 1 + abf->maxValue;
+ }
+ newFile = addrbook_gen_new_file_name( fileNum );
+ g_list_free( fileList );
+ fileList = NULL;
+ return newFile;
+}
+
+static void imp_ldif_update_row( GtkCList *clist ) {
+ Ldif_FieldRec *rec;
+ gchar *text[ FIELDS_N_COLS ];
+ gint row;
+
+ if( impldif_dlg.rowIndSelect < 0 ) return;
+ row = impldif_dlg.rowIndSelect;
+
+ rec = gtk_clist_get_row_data( clist, row );
+ text[ FIELD_COL_SELECT ] = "";
+ text[ FIELD_COL_FIELD ] = rec->tagName;
+ text[ FIELD_COL_ATTRIB ] = rec->userName;
+
+ gtk_clist_freeze( clist );
+ gtk_clist_remove( clist, row );
+ if( row == impldif_dlg.rowCount - 1 ) {
+ gtk_clist_append( clist, text );
+ }
+ else {
+ gtk_clist_insert( clist, row, text );
+ }
+ if( rec->selected )
+ gtk_clist_set_pixmap( clist, row, FIELD_COL_SELECT, markxpm, markxpmmask );
+
+ gtk_clist_set_row_data( clist, row, rec );
+ gtk_clist_thaw( clist );
+}
+
+static void imp_ldif_load_fields( LdifFile *ldf ) {
+ GtkCList *clist = GTK_CLIST(impldif_dlg.clist_field);
+ GList *node, *list;
+ gchar *text[ FIELDS_N_COLS ];
+
+ impldif_dlg.rowIndSelect = -1;
+ impldif_dlg.rowCount = 0;
+ if( ! ldf->accessFlag ) return;
+ gtk_clist_clear( clist );
+ list = ldif_get_fieldlist( ldf );
+ node = list;
+ while( node ) {
+ Ldif_FieldRec *rec = node->data;
+ gint row;
+
+ if( ! rec->reserved ) {
+ text[ FIELD_COL_SELECT ] = "";
+ text[ FIELD_COL_FIELD ] = rec->tagName;
+ text[ FIELD_COL_ATTRIB ] = rec->userName;
+ row = gtk_clist_append( clist, text );
+ gtk_clist_set_row_data( clist, row, rec );
+ if( rec->selected )
+ gtk_clist_set_pixmap( clist, row, FIELD_COL_SELECT, markxpm, markxpmmask );
+ impldif_dlg.rowCount++;
+ }
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+ list = NULL;
+ ldif_set_accessed( ldf, FALSE );
+}
+
+static void imp_ldif_field_list_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
+ Ldif_FieldRec *rec = gtk_clist_get_row_data( clist, row );
+
+ impldif_dlg.rowIndSelect = row;
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_attrib), "" );
+ if( rec ) {
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.name_ldif), rec->tagName );
+ if( rec->userName )
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_attrib), rec->userName );
+ gtk_toggle_button_set_active(
+ GTK_TOGGLE_BUTTON( impldif_dlg.check_select),
+ rec->selected );
+ }
+ gtk_widget_grab_focus(impldif_dlg.name_attrib);
+}
+
+static gboolean imp_ldif_field_list_toggle( GtkCList *clist, GdkEventButton *event, gpointer data ) {
+ if( ! event ) return FALSE;
+ if( impldif_dlg.rowIndSelect < 0 ) return FALSE;
+ if( event->button == 1 ) {
+ if( event->type == GDK_2BUTTON_PRESS ) {
+ Ldif_FieldRec *rec = gtk_clist_get_row_data( clist, impldif_dlg.rowIndSelect );
+ if( rec ) {
+ rec->selected = ! rec->selected;
+ imp_ldif_update_row( clist );
+ }
+ }
+ }
+ return FALSE;
+}
+
+static void imp_ldif_modify_pressed( GtkWidget *widget, gpointer data ) {
+ GtkCList *clist = GTK_CLIST(impldif_dlg.clist_field);
+ Ldif_FieldRec *rec;
+ gint row;
+
+ if( impldif_dlg.rowIndSelect < 0 ) return;
+ row = impldif_dlg.rowIndSelect;
+ rec = gtk_clist_get_row_data( clist, impldif_dlg.rowIndSelect );
+
+ g_free( rec->userName );
+ rec->userName = gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.name_attrib), 0, -1 );
+ rec->selected = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( impldif_dlg.check_select) );
+ imp_ldif_update_row( clist );
+ gtk_clist_select_row( clist, row, 0 );
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.name_ldif), "" );
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_attrib), "" );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( impldif_dlg.check_select), FALSE );
+}
+
+/*
+* Move off fields page.
+* return: TRUE if OK to move off page.
+*/
+static gboolean imp_ldif_field_move() {
+ gboolean retVal = FALSE;
+ gchar *newFile;
+ AddressBookFile *abf = NULL;
+
+ if( _importedBook_ ) {
+ addrbook_free_book( _importedBook_ );
+ }
+
+ abf = addrbook_create_book();
+ addrbook_set_path( abf, _imp_addressIndex_->filePath );
+ addrbook_set_name( abf, impldif_dlg.nameBook );
+ newFile = imp_ldif_guess_file( abf );
+ addrbook_set_file( abf, newFile );
+ g_free( newFile );
+
+ /* Import data into file */
+ if( ldif_import_data( _ldifFile_, abf->addressCache ) == MGU_SUCCESS ) {
+ addrbook_save_data( abf );
+ abf->dirtyFlag = TRUE;
+ _importedBook_ = abf;
+ retVal = TRUE;
+ }
+ else {
+ addrbook_free_book( abf );
+ }
+
+ return retVal;
+}
+
+/*
+* Move off fields page.
+* return: TRUE if OK to move off page.
+*/
+static gboolean imp_ldif_file_move() {
+ gboolean retVal = FALSE;
+ gchar *sName;
+ gchar *sFile;
+ gchar *sMsg = NULL;
+ gboolean errFlag = FALSE;
+
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.file_entry), 0, -1 );
+ g_strchug( sFile ); g_strchomp( sFile );
+
+ sName = gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.name_entry), 0, -1 );
+ g_strchug( sName ); g_strchomp( sName );
+
+ g_free( impldif_dlg.nameBook );
+ g_free( impldif_dlg.fileName );
+ impldif_dlg.nameBook = sName;
+ impldif_dlg.fileName = sFile;
+
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.file_entry), sFile );
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_entry), sName );
+
+ if( *sFile == '\0'|| strlen( sFile ) < 1 ) {
+ sMsg = _( "Please select a file." );
+ gtk_widget_grab_focus(impldif_dlg.file_entry);
+ errFlag = TRUE;
+ }
+
+ if( *sName == '\0'|| strlen( sName ) < 1 ) {
+ if( ! errFlag ) sMsg = _( "Address book name must be supplied." );
+ gtk_widget_grab_focus(impldif_dlg.name_entry);
+ errFlag = TRUE;
+ }
+
+ if( ! errFlag ) {
+ /* Read attribute list */
+ ldif_set_file( _ldifFile_, sFile );
+ if( ldif_read_tags( _ldifFile_ ) == MGU_SUCCESS ) {
+ /* Load fields */
+ /* ldif_print_file( _ldifFile_, stdout ); */
+ imp_ldif_load_fields( _ldifFile_ );
+ retVal = TRUE;
+ }
+ else {
+ sMsg = _( "Error reading LDIF fields." );
+ }
+ }
+ imp_ldif_status_show( sMsg );
+
+ return retVal;
+}
+
+/*
+ * Display finish page.
+ */
+static void imp_ldif_finish_show() {
+ gchar *sMsg;
+ gchar *name;
+
+ name = gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.name_entry), 0, -1 );
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.labelBook), name );
+ g_free( name );
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.labelFile), _ldifFile_->path );
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.labelRecords), itos( _ldifFile_->importCount ) );
+ gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE );
+ gtk_widget_set_sensitive( impldif_dlg.btnNext, FALSE );
+ if( _ldifFile_->retVal == MGU_SUCCESS ) {
+ sMsg = _( "LDIF file imported successfully." );
+ }
+ else {
+ sMsg = mgu_error2string( _ldifFile_->retVal );
+ }
+ imp_ldif_status_show( sMsg );
+ gtk_widget_grab_focus(impldif_dlg.btnCancel);
+}
+
+static void imp_ldif_prev( GtkWidget *widget ) {
+ gint pageNum;
+
+ pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) );
+ if( pageNum == PAGE_ATTRIBUTES ) {
+ /* Goto file page stuff */
+ gtk_notebook_set_current_page(
+ GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FILE_INFO );
+ gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE );
+ }
+ imp_ldif_message();
+}
+
+static void imp_ldif_next( GtkWidget *widget ) {
+ gint pageNum;
+
+ pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) );
+ if( pageNum == PAGE_FILE_INFO ) {
+ /* Goto attributes stuff */
+ if( imp_ldif_file_move() ) {
+ gtk_notebook_set_current_page(
+ GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_ATTRIBUTES );
+ imp_ldif_message();
+ gtk_widget_set_sensitive( impldif_dlg.btnPrev, TRUE );
+ }
+ else {
+ gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE );
+ }
+ }
+ else if( pageNum == PAGE_ATTRIBUTES ) {
+ /* Goto finish stuff */
+ if( imp_ldif_field_move() ) {
+ gtk_notebook_set_current_page(
+ GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FINISH );
+ imp_ldif_finish_show();
+ }
+ }
+}
+
+static void imp_ldif_cancel( GtkWidget *widget, gpointer data ) {
+ gint pageNum;
+
+ pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(impldif_dlg.notebook) );
+ if( pageNum != PAGE_FINISH ) {
+ impldif_dlg.cancelled = TRUE;
+ }
+ gtk_main_quit();
+}
+
+static void imp_ldif_file_ok( GtkWidget *widget, gpointer data ) {
+ const gchar *sFile;
+ AddressFileSelection *afs;
+ GtkWidget *fileSel;
+
+ afs = ( AddressFileSelection * ) data;
+ fileSel = afs->fileSelector;
+ sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) );
+
+ afs->cancelled = FALSE;
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.file_entry), sFile );
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ gtk_widget_grab_focus( impldif_dlg.file_entry );
+}
+
+static void imp_ldif_file_cancel( GtkWidget *widget, gpointer data ) {
+ AddressFileSelection *afs = ( AddressFileSelection * ) data;
+ afs->cancelled = TRUE;
+ gtk_widget_hide( afs->fileSelector );
+ gtk_grab_remove( afs->fileSelector );
+ gtk_widget_grab_focus( impldif_dlg.file_entry );
+}
+
+static void imp_ldif_file_select_create( AddressFileSelection *afs ) {
+ GtkWidget *fileSelector;
+
+ fileSelector = gtk_file_selection_new( _("Select LDIF File") );
+ gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button),
+ "clicked", G_CALLBACK (imp_ldif_file_ok), ( gpointer ) afs );
+ g_signal_connect( G_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button),
+ "clicked", G_CALLBACK (imp_ldif_file_cancel), ( gpointer ) afs );
+ afs->fileSelector = fileSelector;
+ afs->cancelled = TRUE;
+}
+
+static void imp_ldif_file_select( void ) {
+ gchar *sFile;
+ if( ! _imp_ldif_file_selector_.fileSelector )
+ imp_ldif_file_select_create( & _imp_ldif_file_selector_ );
+
+ sFile = gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.file_entry), 0, -1 );
+ gtk_file_selection_set_filename(
+ GTK_FILE_SELECTION( _imp_ldif_file_selector_.fileSelector ),
+ sFile );
+ g_free( sFile );
+ gtk_widget_show( _imp_ldif_file_selector_.fileSelector );
+ gtk_grab_add( _imp_ldif_file_selector_.fileSelector );
+}
+
+static gint imp_ldif_delete_event( GtkWidget *widget, GdkEventAny *event, gpointer data ) {
+ imp_ldif_cancel( widget, data );
+ return TRUE;
+}
+
+static gboolean imp_ldif_key_pressed( GtkWidget *widget, GdkEventKey *event, gpointer data ) {
+ if (event && event->keyval == GDK_Escape) {
+ imp_ldif_cancel( widget, data );
+ }
+ return FALSE;
+}
+
+static void imp_ldif_page_file( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *file_entry;
+ GtkWidget *name_entry;
+ GtkWidget *file_btn;
+ gint top;
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add( GTK_CONTAINER( impldif_dlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( impldif_dlg.notebook ),
+ gtk_notebook_get_nth_page(
+ GTK_NOTEBOOK( impldif_dlg.notebook ), pageNum ),
+ label );
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Address Book"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, top, (top + 1),
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Second row */
+ top = 1;
+ label = gtk_label_new(_("File Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ file_entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, top, (top + 1),
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ file_btn = gtk_button_new_with_label( _(" ... "));
+ gtk_table_attach(GTK_TABLE(table), file_btn, 2, 3, top, (top + 1),
+ GTK_FILL, 0, 3, 0);
+
+ gtk_widget_show_all(vbox);
+
+ /* Button handler */
+ g_signal_connect(G_OBJECT(file_btn), "clicked",
+ G_CALLBACK(imp_ldif_file_select), NULL);
+
+ impldif_dlg.file_entry = file_entry;
+ impldif_dlg.name_entry = name_entry;
+}
+
+static void imp_ldif_page_fields( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *vboxt;
+ GtkWidget *vboxb;
+ GtkWidget *buttonMod;
+
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *clist_swin;
+ GtkWidget *clist_field;
+ GtkWidget *name_ldif;
+ GtkWidget *name_attrib;
+ GtkWidget *check_select;
+ gint top;
+
+ gchar *titles[ FIELDS_N_COLS ];
+ gint i;
+
+ titles[ FIELD_COL_SELECT ] = _("S");
+ titles[ FIELD_COL_FIELD ] = _("LDIF Field");
+ titles[ FIELD_COL_ATTRIB ] = _("Attribute Name");
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add( GTK_CONTAINER( impldif_dlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), 4 );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( impldif_dlg.notebook ),
+ gtk_notebook_get_nth_page(GTK_NOTEBOOK( impldif_dlg.notebook ), pageNum ),
+ label );
+
+ /* Upper area - Field list */
+ vboxt = gtk_vbox_new( FALSE, 4 );
+ gtk_container_add( GTK_CONTAINER( vbox ), vboxt );
+
+ clist_swin = gtk_scrolled_window_new( NULL, NULL );
+ gtk_container_add( GTK_CONTAINER(vboxt), clist_swin );
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ clist_field = gtk_clist_new_with_titles( FIELDS_N_COLS, titles );
+ gtk_container_add( GTK_CONTAINER(clist_swin), clist_field );
+ gtk_clist_set_selection_mode( GTK_CLIST(clist_field), GTK_SELECTION_BROWSE );
+ gtk_clist_set_column_width(
+ GTK_CLIST(clist_field), FIELD_COL_SELECT, FIELDS_COL_WIDTH_SELECT );
+ gtk_clist_set_column_width(
+ GTK_CLIST(clist_field), FIELD_COL_FIELD, FIELDS_COL_WIDTH_FIELD );
+ gtk_clist_set_column_width(
+ GTK_CLIST(clist_field), FIELD_COL_ATTRIB, FIELDS_COL_WIDTH_ATTRIB );
+
+ for( i = 0; i < FIELDS_N_COLS; i++ )
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_field)->column[i].button, GTK_CAN_FOCUS);
+
+ /* Lower area - Edit area */
+ vboxb = gtk_vbox_new( FALSE, 4 );
+ gtk_box_pack_end(GTK_BOX(vbox), vboxb, FALSE, FALSE, 2);
+
+ /* Data entry area */
+ table = gtk_table_new( 3, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(vboxb), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("LDIF Field"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_ldif = gtk_label_new( "" );
+ gtk_misc_set_alignment(GTK_MISC(name_ldif), 0.01, 0.5);
+ gtk_table_attach(GTK_TABLE(table), name_ldif, 1, 3, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Second row */
+ ++top;
+ label = gtk_label_new(_("Attribute"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ name_attrib = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), name_attrib, 1, 3, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ /* Next row */
+ ++top;
+ label = gtk_label_new(_("Select"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ check_select = gtk_check_button_new();
+ gtk_table_attach(GTK_TABLE(table), check_select, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+
+ buttonMod = gtk_button_new_with_label( _("Modify"));
+ gtk_table_attach(GTK_TABLE(table), buttonMod, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
+
+ gtk_widget_show_all(vbox);
+
+ /* Event handlers */
+ g_signal_connect( G_OBJECT(clist_field), "select_row",
+ G_CALLBACK(imp_ldif_field_list_selected), NULL );
+ g_signal_connect( G_OBJECT(clist_field), "button_press_event",
+ G_CALLBACK(imp_ldif_field_list_toggle), NULL );
+ g_signal_connect( G_OBJECT(buttonMod), "clicked",
+ G_CALLBACK(imp_ldif_modify_pressed), NULL );
+
+ impldif_dlg.clist_field = clist_field;
+ impldif_dlg.name_ldif = name_ldif;
+ impldif_dlg.name_attrib = name_attrib;
+ impldif_dlg.check_select = check_select;
+}
+
+static void imp_ldif_page_finish( gint pageNum, gchar *pageLbl ) {
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *label;
+ GtkWidget *labelBook;
+ GtkWidget *labelFile;
+ GtkWidget *labelRecs;
+ gint top;
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add( GTK_CONTAINER( impldif_dlg.notebook ), vbox );
+ gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
+
+ label = gtk_label_new( pageLbl );
+ gtk_widget_show( label );
+ gtk_notebook_set_tab_label(
+ GTK_NOTEBOOK( impldif_dlg.notebook ),
+ gtk_notebook_get_nth_page( GTK_NOTEBOOK( impldif_dlg.notebook ), pageNum ), label );
+
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
+
+ /* First row */
+ top = 0;
+ label = gtk_label_new(_("Address Book :"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ labelBook = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), labelBook, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(labelBook), 0, 0.5);
+
+ /* Second row */
+ top++;
+ label = gtk_label_new(_("File Name :"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ labelFile = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), labelFile, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(labelFile), 0, 0.5);
+
+ /* Third row */
+ top++;
+ label = gtk_label_new(_("Records :"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ labelRecs = gtk_label_new("");
+ gtk_table_attach(GTK_TABLE(table), labelRecs, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(labelRecs), 0, 0.5);
+
+ impldif_dlg.labelBook = labelBook;
+ impldif_dlg.labelFile = labelFile;
+ impldif_dlg.labelRecords = labelRecs;
+}
+
+static void imp_ldif_dialog_create() {
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *vnbox;
+ GtkWidget *notebook;
+ GtkWidget *hbbox;
+ GtkWidget *btnPrev;
+ GtkWidget *btnNext;
+ GtkWidget *btnCancel;
+ GtkWidget *hsbox;
+ GtkWidget *statusbar;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, IMPORTLDIF_WIDTH, IMPORTLDIF_HEIGHT );
+ gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
+ gtk_window_set_title( GTK_WINDOW(window), _("Import LDIF file into Address Book") );
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(imp_ldif_delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(imp_ldif_key_pressed), NULL);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ vnbox = gtk_vbox_new(FALSE, 4);
+ gtk_container_set_border_width(GTK_CONTAINER(vnbox), 4);
+ gtk_widget_show(vnbox);
+ gtk_box_pack_start(GTK_BOX(vbox), vnbox, TRUE, TRUE, 0);
+
+ /* Notebook */
+ notebook = gtk_notebook_new();
+ gtk_notebook_set_show_tabs( GTK_NOTEBOOK(notebook), FALSE );
+ gtk_widget_show(notebook);
+ gtk_box_pack_start(GTK_BOX(vnbox), notebook, TRUE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(notebook), 6);
+
+ /* Status line */
+ hsbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
+
+ /* Button panel */
+ gtkut_button_set_create(&hbbox, &btnPrev, _( "Prev" ),
+ &btnNext, _( "Next" ),
+ &btnCancel, _( "Cancel" ) );
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(hbbox), 2);
+ gtk_widget_grab_default(btnNext);
+
+ /* Button handlers */
+ g_signal_connect(G_OBJECT(btnPrev), "clicked",
+ G_CALLBACK(imp_ldif_prev), NULL);
+ g_signal_connect(G_OBJECT(btnNext), "clicked",
+ G_CALLBACK(imp_ldif_next), NULL);
+ g_signal_connect(G_OBJECT(btnCancel), "clicked",
+ G_CALLBACK(imp_ldif_cancel), NULL);
+
+ gtk_widget_show_all(vbox);
+
+ impldif_dlg.window = window;
+ impldif_dlg.notebook = notebook;
+ impldif_dlg.btnPrev = btnPrev;
+ impldif_dlg.btnNext = btnNext;
+ impldif_dlg.btnCancel = btnCancel;
+ impldif_dlg.statusbar = statusbar;
+ impldif_dlg.status_cid = gtk_statusbar_get_context_id(
+ GTK_STATUSBAR(statusbar), "Import LDIF Dialog" );
+
+}
+
+static void imp_ldif_create() {
+ imp_ldif_dialog_create();
+ imp_ldif_page_file( PAGE_FILE_INFO, _( "File Info" ) );
+ imp_ldif_page_fields( PAGE_ATTRIBUTES, _( "Attributes" ) );
+ imp_ldif_page_finish( PAGE_FINISH, _( "Finish" ) );
+ gtk_widget_show_all( impldif_dlg.window );
+}
+
+AddressBookFile *addressbook_imp_ldif( AddressIndex *addrIndex ) {
+ _importedBook_ = NULL;
+ _imp_addressIndex_ = addrIndex;
+
+ if( ! impldif_dlg.window )
+ imp_ldif_create();
+ impldif_dlg.cancelled = FALSE;
+ gtk_widget_show(impldif_dlg.window);
+ manage_window_set_transient(GTK_WINDOW(impldif_dlg.window));
+ gtk_widget_grab_default(impldif_dlg.btnNext);
+
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_entry), IMPORTLDIF_GUESS_NAME );
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.file_entry), "" );
+ gtk_label_set_text( GTK_LABEL(impldif_dlg.name_ldif), "" );
+ gtk_entry_set_text( GTK_ENTRY(impldif_dlg.name_attrib), "" );
+ gtk_clist_clear( GTK_CLIST(impldif_dlg.clist_field) );
+ gtk_notebook_set_current_page( GTK_NOTEBOOK(impldif_dlg.notebook), PAGE_FILE_INFO );
+ gtk_widget_set_sensitive( impldif_dlg.btnPrev, FALSE );
+ gtk_widget_set_sensitive( impldif_dlg.btnNext, TRUE );
+ stock_pixmap_gdk( impldif_dlg.window, STOCK_PIXMAP_MARK,
+ &markxpm, &markxpmmask );
+ imp_ldif_message();
+ gtk_widget_grab_focus(impldif_dlg.file_entry);
+
+ impldif_dlg.rowIndSelect = -1;
+ impldif_dlg.rowCount = 0;
+ g_free( impldif_dlg.nameBook );
+ g_free( impldif_dlg.fileName );
+ impldif_dlg.nameBook = NULL;
+ impldif_dlg.fileName = NULL;
+
+ _ldifFile_ = ldif_create();
+ gtk_main();
+ gtk_widget_hide(impldif_dlg.window);
+ ldif_free( _ldifFile_ );
+ _ldifFile_ = NULL;
+ _imp_addressIndex_ = NULL;
+
+ g_free( impldif_dlg.nameBook );
+ g_free( impldif_dlg.fileName );
+ impldif_dlg.nameBook = NULL;
+ impldif_dlg.fileName = NULL;
+
+ if( impldif_dlg.cancelled == TRUE ) return NULL;
+ return _importedBook_;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/importldif.h b/src/importldif.h
new file mode 100644
index 00000000..5e648b34
--- /dev/null
+++ b/src/importldif.h
@@ -0,0 +1,34 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Import LDIF data.
+ */
+
+#ifndef __IMPORT_LDIF_H__
+#define __IMPORT_LDIF_H__
+
+/* Function prototypes */
+AddressBookFile *addressbook_imp_ldif( AddressIndex *addrIndex );
+
+#endif /* __IMPORT_LDIF_H__ */
+
+/*
+* End of Source.
+*/
diff --git a/src/inc.c b/src/inc.c
new file mode 100644
index 00000000..d8ab5132
--- /dev/null
+++ b/src/inc.c
@@ -0,0 +1,1337 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkprogressbar.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "inc.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "summaryview.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "account.h"
+#include "procmsg.h"
+#include "socket.h"
+#include "ssl.h"
+#include "pop.h"
+#include "recv.h"
+#include "mbox.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "statusbar.h"
+#include "manage_window.h"
+#include "stock_pixmap.h"
+#include "progressdialog.h"
+#include "inputdialog.h"
+#include "alertpanel.h"
+#include "filter.h"
+#include "folder.h"
+
+static GList *inc_dialog_list = NULL;
+
+static guint inc_lock_count = 0;
+
+static GdkPixmap *currentxpm;
+static GdkBitmap *currentxpmmask;
+static GdkPixmap *errorxpm;
+static GdkBitmap *errorxpmmask;
+static GdkPixmap *okxpm;
+static GdkBitmap *okxpmmask;
+
+#define MSGBUFSIZE 8192
+
+static void inc_finished (MainWindow *mainwin,
+ gboolean new_messages);
+static gint inc_account_mail_real (MainWindow *mainwin,
+ PrefsAccount *account);
+
+static IncProgressDialog *inc_progress_dialog_create
+ (gboolean autocheck);
+static void inc_progress_dialog_set_list(IncProgressDialog *inc_dialog);
+static void inc_progress_dialog_destroy (IncProgressDialog *inc_dialog);
+
+static IncSession *inc_session_new (PrefsAccount *account);
+static void inc_session_destroy (IncSession *session);
+static gint inc_start (IncProgressDialog *inc_dialog);
+static IncState inc_pop3_session_do (IncSession *session);
+
+static void inc_progress_dialog_update (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+
+static void inc_progress_dialog_set_label
+ (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+static void inc_progress_dialog_set_progress
+ (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+
+static void inc_update_folderview (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+
+static void inc_progress_dialog_update_periodic
+ (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+static void inc_update_folderview_periodic
+ (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
+
+static gint inc_recv_data_progressive (Session *session,
+ guint cur_len,
+ guint total_len,
+ gpointer data);
+static gint inc_recv_data_finished (Session *session,
+ guint len,
+ gpointer data);
+static gint inc_recv_message (Session *session,
+ const gchar *msg,
+ gpointer data);
+static gint inc_drop_message (Pop3Session *session,
+ const gchar *file);
+
+static void inc_put_error (IncState istate,
+ const gchar *msg);
+
+static void inc_cancel_cb (GtkWidget *widget,
+ gpointer data);
+static gint inc_dialog_delete_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+
+static gint inc_spool (void);
+static gint get_spool (FolderItem *dest,
+ const gchar *mbox);
+
+static void inc_autocheck_timer_set_interval (guint interval);
+static gint inc_autocheck_func (gpointer data);
+
+/**
+ * inc_finished:
+ * @mainwin: Main window.
+ * @new_messages: TRUE if some messages have been received.
+ *
+ * Update the folder view and the summary view after receiving
+ * messages. If @new_messages is FALSE, this function avoids unneeded
+ * updating.
+ **/
+static void inc_finished(MainWindow *mainwin, gboolean new_messages)
+{
+ FolderItem *item;
+
+ if (prefs_common.scan_all_after_inc)
+ folderview_check_new(NULL);
+
+ if (!new_messages && !prefs_common.scan_all_after_inc) return;
+
+ if (prefs_common.open_inbox_on_inc) {
+ item = cur_account && cur_account->inbox
+ ? folder_find_item_from_identifier(cur_account->inbox)
+ : folder_get_default_inbox();
+ folderview_unselect(mainwin->folderview);
+ folderview_select(mainwin->folderview, item);
+ } else if (prefs_common.scan_all_after_inc) {
+ item = mainwin->summaryview->folder_item;
+ folderview_update_item(item, TRUE);
+ }
+}
+
+void inc_mail(MainWindow *mainwin)
+{
+ gint new_msgs = 0;
+
+ if (inc_lock_count) return;
+
+ if (!main_window_toggle_online_if_offline(mainwin))
+ return;
+
+ inc_autocheck_timer_remove();
+ summary_write_cache(mainwin->summaryview);
+ main_window_lock(mainwin);
+
+ if (prefs_common.use_extinc && prefs_common.extinc_cmd) {
+ /* external incorporating program */
+ if (execute_command_line(prefs_common.extinc_cmd, FALSE) != 0) {
+ main_window_unlock(mainwin);
+ inc_autocheck_timer_set();
+ return;
+ }
+
+ if (prefs_common.inc_local)
+ new_msgs = inc_spool();
+ } else {
+ if (prefs_common.inc_local) {
+ new_msgs = inc_spool();
+ if (new_msgs < 0)
+ new_msgs = 0;
+ }
+
+ new_msgs += inc_account_mail_real(mainwin, cur_account);
+ }
+
+ inc_finished(mainwin, new_msgs > 0);
+ main_window_unlock(mainwin);
+ inc_autocheck_timer_set();
+}
+
+static gint inc_account_mail_real(MainWindow *mainwin, PrefsAccount *account)
+{
+ IncProgressDialog *inc_dialog;
+ IncSession *session;
+
+ if (account->protocol == A_IMAP4 || account->protocol == A_NNTP) {
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ folderview_check_new(FOLDER(account->folder));
+ if (!prefs_common.scan_all_after_inc && item != NULL &&
+ FOLDER(account->folder) == item->folder)
+ folderview_update_item(item, TRUE);
+ return 1;
+ }
+
+ session = inc_session_new(account);
+ if (!session) return 0;
+
+ inc_dialog = inc_progress_dialog_create(FALSE);
+ inc_dialog->queue_list = g_list_append(inc_dialog->queue_list, session);
+ inc_dialog->mainwin = mainwin;
+ inc_progress_dialog_set_list(inc_dialog);
+
+ main_window_set_toolbar_sensitive(mainwin);
+ main_window_set_menu_sensitive(mainwin);
+
+ return inc_start(inc_dialog);
+}
+
+gint inc_account_mail(MainWindow *mainwin, PrefsAccount *account)
+{
+ gint new_msgs;
+
+ if (inc_lock_count) return 0;
+
+ if (!main_window_toggle_online_if_offline(mainwin))
+ return 0;
+
+ inc_autocheck_timer_remove();
+ summary_write_cache(mainwin->summaryview);
+ main_window_lock(mainwin);
+
+ new_msgs = inc_account_mail_real(mainwin, account);
+
+ inc_finished(mainwin, new_msgs > 0);
+ main_window_unlock(mainwin);
+ inc_autocheck_timer_set();
+
+ return new_msgs;
+}
+
+void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck)
+{
+ GList *list, *queue_list = NULL;
+ IncProgressDialog *inc_dialog;
+ gint new_msgs = 0;
+
+ if (inc_lock_count) return;
+
+ if (!main_window_toggle_online_if_offline(mainwin))
+ return;
+
+ inc_autocheck_timer_remove();
+ summary_write_cache(mainwin->summaryview);
+ main_window_lock(mainwin);
+
+ if (prefs_common.inc_local) {
+ new_msgs = inc_spool();
+ if (new_msgs < 0)
+ new_msgs = 0;
+ }
+
+ /* check IMAP4 / News folders */
+ for (list = account_get_list(); list != NULL; list = list->next) {
+ PrefsAccount *account = list->data;
+ if ((account->protocol == A_IMAP4 ||
+ account->protocol == A_NNTP) && account->recv_at_getall) {
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ folderview_check_new(FOLDER(account->folder));
+ if (!prefs_common.scan_all_after_inc && item != NULL &&
+ FOLDER(account->folder) == item->folder)
+ folderview_update_item(item, TRUE);
+ }
+ }
+
+ /* check POP3 accounts */
+ for (list = account_get_list(); list != NULL; list = list->next) {
+ IncSession *session;
+ PrefsAccount *account = list->data;
+
+ if (account->recv_at_getall) {
+ session = inc_session_new(account);
+ if (session)
+ queue_list = g_list_append(queue_list, session);
+ }
+ }
+
+ if (queue_list) {
+ inc_dialog = inc_progress_dialog_create(autocheck);
+ inc_dialog->queue_list = queue_list;
+ inc_dialog->mainwin = mainwin;
+ inc_progress_dialog_set_list(inc_dialog);
+
+ main_window_set_toolbar_sensitive(mainwin);
+ main_window_set_menu_sensitive(mainwin);
+
+ new_msgs += inc_start(inc_dialog);
+ }
+
+ inc_finished(mainwin, new_msgs > 0);
+ main_window_unlock(mainwin);
+ inc_autocheck_timer_set();
+}
+
+static IncProgressDialog *inc_progress_dialog_create(gboolean autocheck)
+{
+ IncProgressDialog *dialog;
+ ProgressDialog *progress;
+
+ dialog = g_new0(IncProgressDialog, 1);
+
+ progress = progress_dialog_create();
+ gtk_window_set_title(GTK_WINDOW(progress->window),
+ _("Retrieving new messages"));
+ g_signal_connect(G_OBJECT(progress->cancel_btn), "clicked",
+ G_CALLBACK(inc_cancel_cb), dialog);
+ g_signal_connect(G_OBJECT(progress->window), "delete_event",
+ G_CALLBACK(inc_dialog_delete_cb), dialog);
+ /* manage_window_set_transient(GTK_WINDOW(progress->window)); */
+
+ progress_dialog_set_value(progress, 0.0);
+
+ stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_COMPLETE,
+ &okxpm, &okxpmmask);
+ stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_CONTINUE,
+ &currentxpm, &currentxpmmask);
+ stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_ERROR,
+ &errorxpm, &errorxpmmask);
+
+ if (prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS ||
+ (prefs_common.recv_dialog_mode == RECV_DIALOG_MANUAL &&
+ !autocheck)) {
+ dialog->show_dialog = TRUE;
+ gtk_widget_show_now(progress->window);
+ }
+
+ dialog->dialog = progress;
+ gettimeofday(&dialog->progress_tv, NULL);
+ gettimeofday(&dialog->folder_tv, NULL);
+ dialog->queue_list = NULL;
+ dialog->cur_row = 0;
+
+ inc_dialog_list = g_list_append(inc_dialog_list, dialog);
+
+ return dialog;
+}
+
+static void inc_progress_dialog_set_list(IncProgressDialog *inc_dialog)
+{
+ GList *list;
+
+ for (list = inc_dialog->queue_list; list != NULL; list = list->next) {
+ IncSession *session = list->data;
+ Pop3Session *pop3_session = POP3_SESSION(session->session);
+ gchar *text[3];
+
+ session->data = inc_dialog;
+
+ text[0] = NULL;
+ text[1] = pop3_session->ac_prefs->account_name;
+ text[2] = _("Standby");
+ gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text);
+ }
+}
+
+static void inc_progress_dialog_clear(IncProgressDialog *inc_dialog)
+{
+ progress_dialog_set_value(inc_dialog->dialog, 0.0);
+ progress_dialog_set_label(inc_dialog->dialog, "");
+ main_window_progress_off(inc_dialog->mainwin);
+}
+
+static void inc_progress_dialog_destroy(IncProgressDialog *inc_dialog)
+{
+ g_return_if_fail(inc_dialog != NULL);
+
+ inc_dialog_list = g_list_remove(inc_dialog_list, inc_dialog);
+
+ main_window_progress_off(inc_dialog->mainwin);
+ progress_dialog_destroy(inc_dialog->dialog);
+
+ g_free(inc_dialog);
+}
+
+static IncSession *inc_session_new(PrefsAccount *account)
+{
+ IncSession *session;
+
+ g_return_val_if_fail(account != NULL, NULL);
+
+ if (account->protocol != A_POP3)
+ return NULL;
+ if (!account->recv_server || !account->userid)
+ return NULL;
+
+ session = g_new0(IncSession, 1);
+
+ session->session = pop3_session_new(account);
+ session->session->data = session;
+ POP3_SESSION(session->session)->drop_message = inc_drop_message;
+ session_set_recv_message_notify(session->session,
+ inc_recv_message, session);
+ session_set_recv_data_progressive_notify(session->session,
+ inc_recv_data_progressive,
+ session);
+ session_set_recv_data_notify(session->session,
+ inc_recv_data_finished, session);
+
+ session->folder_table = g_hash_table_new(NULL, NULL);
+ session->tmp_folder_table = g_hash_table_new(NULL, NULL);
+
+ return session;
+}
+
+static void inc_session_destroy(IncSession *session)
+{
+ g_return_if_fail(session != NULL);
+
+ session_destroy(session->session);
+ g_hash_table_destroy(session->folder_table);
+ g_hash_table_destroy(session->tmp_folder_table);
+ g_free(session);
+}
+
+static gint inc_start(IncProgressDialog *inc_dialog)
+{
+ IncSession *session;
+ GtkCList *clist = GTK_CLIST(inc_dialog->dialog->clist);
+ GList *qlist;
+ Pop3Session *pop3_session;
+ IncState inc_state;
+ gint error_num = 0;
+ gint new_msgs = 0;
+ gchar *msg;
+ gchar *fin_msg;
+
+ qlist = inc_dialog->queue_list;
+ while (qlist != NULL) {
+ GList *next = qlist->next;
+
+ session = qlist->data;
+ pop3_session = POP3_SESSION(session->session);
+ pop3_session->user = g_strdup(pop3_session->ac_prefs->userid);
+ if (pop3_session->ac_prefs->passwd)
+ pop3_session->pass =
+ g_strdup(pop3_session->ac_prefs->passwd);
+ else if (pop3_session->ac_prefs->tmp_pass)
+ pop3_session->pass =
+ g_strdup(pop3_session->ac_prefs->tmp_pass);
+ else {
+ gchar *pass;
+
+ if (inc_dialog->show_dialog)
+ manage_window_focus_in
+ (inc_dialog->dialog->window,
+ NULL, NULL);
+
+ pass = input_dialog_query_password
+ (pop3_session->ac_prefs->recv_server,
+ pop3_session->user);
+
+ if (inc_dialog->show_dialog)
+ manage_window_focus_out
+ (inc_dialog->dialog->window,
+ NULL, NULL);
+
+ if (pass) {
+ pop3_session->ac_prefs->tmp_pass =
+ g_strdup(pass);
+ pop3_session->pass = pass;
+ }
+ }
+
+ qlist = next;
+ }
+
+#define SET_PIXMAP_AND_TEXT(xpm, xpmmask, str) \
+{ \
+ gtk_clist_set_pixmap(clist, inc_dialog->cur_row, 0, xpm, xpmmask); \
+ gtk_clist_set_text(clist, inc_dialog->cur_row, 2, str); \
+}
+
+ for (; inc_dialog->queue_list != NULL; inc_dialog->cur_row++) {
+ session = inc_dialog->queue_list->data;
+ pop3_session = POP3_SESSION(session->session);
+
+ if (pop3_session->pass == NULL) {
+ SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, _("Cancelled"));
+ inc_session_destroy(session);
+ inc_dialog->queue_list =
+ g_list_remove(inc_dialog->queue_list, session);
+ continue;
+ }
+
+ inc_progress_dialog_clear(inc_dialog);
+ gtk_clist_moveto(clist, inc_dialog->cur_row, -1, 1.0, 0.0);
+
+ SET_PIXMAP_AND_TEXT(currentxpm, currentxpmmask,
+ _("Retrieving"));
+
+ /* begin POP3 session */
+ inc_state = inc_pop3_session_do(session);
+
+ switch (inc_state) {
+ case INC_SUCCESS:
+ if (pop3_session->cur_total_num > 0)
+ msg = g_strdup_printf
+ (_("Done (%d message(s) (%s) received)"),
+ pop3_session->cur_total_num,
+ to_human_readable(pop3_session->cur_total_recv_bytes));
+ else
+ msg = g_strdup_printf(_("Done (no new messages)"));
+ SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, msg);
+ g_free(msg);
+ break;
+ case INC_CONNECT_ERROR:
+ SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
+ _("Connection failed"));
+ break;
+ case INC_AUTH_FAILED:
+ SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
+ _("Auth failed"));
+ break;
+ case INC_LOCKED:
+ SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
+ _("Locked"));
+ break;
+ case INC_ERROR:
+ case INC_NO_SPACE:
+ case INC_IO_ERROR:
+ case INC_SOCKET_ERROR:
+ case INC_EOF:
+ SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask, _("Error"));
+ break;
+ case INC_TIMEOUT:
+ SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask, _("Timeout"));
+ break;
+ case INC_CANCEL:
+ SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, _("Cancelled"));
+ break;
+ default:
+ break;
+ }
+
+ new_msgs += pop3_session->cur_total_num;
+
+ if (!prefs_common.scan_all_after_inc) {
+ folder_item_scan_foreach(session->folder_table);
+ folderview_update_item_foreach
+ (session->folder_table,
+ !prefs_common.open_inbox_on_inc);
+ }
+
+ if (pop3_session->error_val == PS_AUTHFAIL &&
+ pop3_session->ac_prefs->tmp_pass) {
+ g_free(pop3_session->ac_prefs->tmp_pass);
+ pop3_session->ac_prefs->tmp_pass = NULL;
+ }
+
+ pop3_write_uidl_list(pop3_session);
+
+ if (inc_state != INC_SUCCESS && inc_state != INC_CANCEL) {
+ error_num++;
+ if (inc_dialog->show_dialog)
+ manage_window_focus_in
+ (inc_dialog->dialog->window,
+ NULL, NULL);
+ inc_put_error(inc_state, pop3_session->error_msg);
+ if (inc_dialog->show_dialog)
+ manage_window_focus_out
+ (inc_dialog->dialog->window,
+ NULL, NULL);
+ if (inc_state == INC_NO_SPACE ||
+ inc_state == INC_IO_ERROR)
+ break;
+ }
+
+ inc_session_destroy(session);
+ inc_dialog->queue_list =
+ g_list_remove(inc_dialog->queue_list, session);
+ }
+
+#undef SET_PIXMAP_AND_TEXT
+
+ if (new_msgs > 0)
+ fin_msg = g_strdup_printf(_("Finished (%d new message(s))"),
+ new_msgs);
+ else
+ fin_msg = g_strdup_printf(_("Finished (no new messages)"));
+
+ progress_dialog_set_label(inc_dialog->dialog, fin_msg);
+
+#if 0
+ if (error_num && !prefs_common.no_recv_err_panel) {
+ if (inc_dialog->show_dialog)
+ manage_window_focus_in(inc_dialog->dialog->window,
+ NULL, NULL);
+ alertpanel_error(_("Some errors occurred while getting mail."));
+ if (inc_dialog->show_dialog)
+ manage_window_focus_out(inc_dialog->dialog->window,
+ NULL, NULL);
+ }
+#endif
+
+ while (inc_dialog->queue_list != NULL) {
+ session = inc_dialog->queue_list->data;
+ inc_session_destroy(session);
+ inc_dialog->queue_list =
+ g_list_remove(inc_dialog->queue_list, session);
+ }
+
+ if (prefs_common.close_recv_dialog || !inc_dialog->show_dialog)
+ inc_progress_dialog_destroy(inc_dialog);
+ else {
+ gtk_window_set_title(GTK_WINDOW(inc_dialog->dialog->window),
+ fin_msg);
+ gtk_label_set_text(GTK_LABEL(GTK_BIN(inc_dialog->dialog->cancel_btn)->child),
+ _("Close"));
+ }
+
+ g_free(fin_msg);
+
+ return new_msgs;
+}
+
+static IncState inc_pop3_session_do(IncSession *session)
+{
+ Pop3Session *pop3_session = POP3_SESSION(session->session);
+ IncProgressDialog *inc_dialog = (IncProgressDialog *)session->data;
+ gchar *server;
+ gushort port;
+ gchar *buf;
+
+ debug_print(_("getting new messages of account %s...\n"),
+ pop3_session->ac_prefs->account_name);
+
+ buf = g_strdup_printf(_("%s: Retrieving new messages"),
+ pop3_session->ac_prefs->recv_server);
+ gtk_window_set_title(GTK_WINDOW(inc_dialog->dialog->window), buf);
+ g_free(buf);
+
+ server = pop3_session->ac_prefs->recv_server;
+#if USE_SSL
+ port = pop3_session->ac_prefs->set_popport ?
+ pop3_session->ac_prefs->popport :
+ pop3_session->ac_prefs->ssl_pop == SSL_TUNNEL ? 995 : 110;
+ SESSION(pop3_session)->ssl_type = pop3_session->ac_prefs->ssl_pop;
+ if (pop3_session->ac_prefs->ssl_pop != SSL_NONE)
+ SESSION(pop3_session)->nonblocking =
+ pop3_session->ac_prefs->use_nonblocking_ssl;
+#else
+ port = pop3_session->ac_prefs->set_popport ?
+ pop3_session->ac_prefs->popport : 110;
+#endif
+
+ buf = g_strdup_printf(_("Connecting to POP3 server: %s..."), server);
+ log_message("%s\n", buf);
+ progress_dialog_set_label(inc_dialog->dialog, buf);
+ g_free(buf);
+
+ session_set_timeout(SESSION(pop3_session),
+ prefs_common.io_timeout_secs * 1000);
+
+ if (session_connect(SESSION(pop3_session), server, port) < 0) {
+ log_warning(_("Can't connect to POP3 server: %s:%d\n"),
+ server, port);
+ session->inc_state = INC_CONNECT_ERROR;
+ statusbar_pop_all();
+ return INC_CONNECT_ERROR;
+ }
+
+ while (session_is_connected(SESSION(pop3_session)) &&
+ session->inc_state != INC_CANCEL)
+ gtk_main_iteration();
+
+ if (session->inc_state == INC_SUCCESS) {
+ switch (pop3_session->error_val) {
+ case PS_SUCCESS:
+ switch (SESSION(pop3_session)->state) {
+ case SESSION_ERROR:
+ if (pop3_session->state == POP3_READY)
+ session->inc_state = INC_CONNECT_ERROR;
+ else
+ session->inc_state = INC_ERROR;
+ break;
+ case SESSION_EOF:
+ session->inc_state = INC_EOF;
+ break;
+ case SESSION_TIMEOUT:
+ session->inc_state = INC_TIMEOUT;
+ break;
+ default:
+ session->inc_state = INC_SUCCESS;
+ break;
+ }
+ break;
+ case PS_AUTHFAIL:
+ session->inc_state = INC_AUTH_FAILED;
+ break;
+ case PS_IOERR:
+ session->inc_state = INC_IO_ERROR;
+ break;
+ case PS_SOCKET:
+ session->inc_state = INC_SOCKET_ERROR;
+ break;
+ case PS_LOCKBUSY:
+ session->inc_state = INC_LOCKED;
+ break;
+ default:
+ session->inc_state = INC_ERROR;
+ break;
+ }
+ }
+
+ session_disconnect(SESSION(pop3_session));
+ statusbar_pop_all();
+
+ return session->inc_state;
+}
+
+static void inc_progress_dialog_update(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ inc_progress_dialog_set_label(inc_dialog, inc_session);
+ inc_progress_dialog_set_progress(inc_dialog, inc_session);
+}
+
+static void inc_progress_dialog_set_label(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ ProgressDialog *dialog = inc_dialog->dialog;
+ Pop3Session *session;
+
+ g_return_if_fail(inc_session != NULL);
+
+ session = POP3_SESSION(inc_session->session);
+
+ switch (session->state) {
+ case POP3_GREETING:
+ break;
+ case POP3_GETAUTH_USER:
+ case POP3_GETAUTH_PASS:
+ case POP3_GETAUTH_APOP:
+ progress_dialog_set_label(dialog, _("Authenticating..."));
+ statusbar_print_all(_("Retrieving messages from %s..."),
+ SESSION(session)->server);
+ break;
+ case POP3_GETRANGE_STAT:
+ progress_dialog_set_label
+ (dialog, _("Getting the number of new messages (STAT)..."));
+ break;
+ case POP3_GETRANGE_LAST:
+ progress_dialog_set_label
+ (dialog, _("Getting the number of new messages (LAST)..."));
+ break;
+ case POP3_GETRANGE_UIDL:
+ progress_dialog_set_label
+ (dialog, _("Getting the number of new messages (UIDL)..."));
+ break;
+ case POP3_GETSIZE_LIST:
+ progress_dialog_set_label
+ (dialog, _("Getting the size of messages (LIST)..."));
+ break;
+ case POP3_RETR:
+ case POP3_RETR_RECV:
+ break;
+ case POP3_DELETE:
+#if 0
+ if (session->msg[session->cur_msg].recv_time <
+ session->current_time) {
+ gchar buf[MSGBUFSIZE];
+ g_snprintf(buf, sizeof(buf), _("Deleting message %d"),
+ session->cur_msg);
+ progress_dialog_set_label(dialog, buf);
+ }
+#endif
+ break;
+ case POP3_LOGOUT:
+ progress_dialog_set_label(dialog, _("Quitting"));
+ break;
+ default:
+ break;
+ }
+}
+
+static void inc_progress_dialog_set_progress(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ gchar buf[MSGBUFSIZE];
+ Pop3Session *pop3_session = POP3_SESSION(inc_session->session);
+ gchar *total_size_str;
+ gint cur_total;
+ gint total;
+
+ if (!pop3_session->new_msg_exist) return;
+
+ cur_total = inc_session->cur_total_bytes;
+ total = pop3_session->total_bytes;
+ if (pop3_session->state == POP3_RETR ||
+ pop3_session->state == POP3_RETR_RECV ||
+ pop3_session->state == POP3_DELETE) {
+ Xstrdup_a(total_size_str, to_human_readable(total), return);
+ g_snprintf(buf, sizeof(buf),
+ _("Retrieving message (%d / %d) (%s / %s)"),
+ pop3_session->cur_msg, pop3_session->count,
+ to_human_readable(cur_total), total_size_str);
+ progress_dialog_set_label(inc_dialog->dialog, buf);
+ }
+
+ progress_dialog_set_percentage
+ (inc_dialog->dialog,(gfloat)cur_total / (gfloat)total);
+
+ gtk_progress_set_show_text
+ (GTK_PROGRESS(inc_dialog->mainwin->progressbar), TRUE);
+ g_snprintf(buf, sizeof(buf), "%d / %d",
+ pop3_session->cur_msg, pop3_session->count);
+ gtk_progress_set_format_string
+ (GTK_PROGRESS(inc_dialog->mainwin->progressbar), buf);
+ gtk_progress_bar_update
+ (GTK_PROGRESS_BAR(inc_dialog->mainwin->progressbar),
+ (gfloat)cur_total / (gfloat)total);
+
+ if (pop3_session->cur_total_num > 0) {
+ g_snprintf(buf, sizeof(buf),
+ _("Retrieving (%d message(s) (%s) received)"),
+ pop3_session->cur_total_num,
+ to_human_readable
+ (pop3_session->cur_total_recv_bytes));
+ gtk_clist_set_text(GTK_CLIST(inc_dialog->dialog->clist),
+ inc_dialog->cur_row, 2, buf);
+ }
+}
+
+static gboolean hash_remove_func(gpointer key, gpointer value, gpointer data)
+{
+ return TRUE;
+}
+
+static void inc_update_folderview(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ if (g_hash_table_size(inc_session->tmp_folder_table) > 0) {
+ folderview_update_item_foreach(inc_session->tmp_folder_table,
+ FALSE);
+ g_hash_table_foreach_remove(inc_session->tmp_folder_table,
+ hash_remove_func, NULL);
+ }
+}
+
+static void inc_progress_dialog_update_periodic(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ struct timeval tv_cur;
+ struct timeval tv_result;
+ gint msec;
+
+ gettimeofday(&tv_cur, NULL);
+
+ tv_result.tv_sec = tv_cur.tv_sec - inc_dialog->progress_tv.tv_sec;
+ tv_result.tv_usec = tv_cur.tv_usec - inc_dialog->progress_tv.tv_usec;
+ if (tv_result.tv_usec < 0) {
+ tv_result.tv_sec--;
+ tv_result.tv_usec += 1000000;
+ }
+
+ msec = tv_result.tv_sec * 1000 + tv_result.tv_usec / 1000;
+ if (msec > PROGRESS_UPDATE_INTERVAL) {
+ inc_progress_dialog_update(inc_dialog, inc_session);
+ inc_dialog->progress_tv.tv_sec = tv_cur.tv_sec;
+ inc_dialog->progress_tv.tv_usec = tv_cur.tv_usec;
+ }
+}
+
+static void inc_update_folderview_periodic(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
+{
+ struct timeval tv_cur;
+ struct timeval tv_result;
+ gint msec;
+
+ gettimeofday(&tv_cur, NULL);
+
+ tv_result.tv_sec = tv_cur.tv_sec - inc_dialog->folder_tv.tv_sec;
+ tv_result.tv_usec = tv_cur.tv_usec - inc_dialog->folder_tv.tv_usec;
+ if (tv_result.tv_usec < 0) {
+ tv_result.tv_sec--;
+ tv_result.tv_usec += 1000000;
+ }
+
+ msec = tv_result.tv_sec * 1000 + tv_result.tv_usec / 1000;
+ if (msec > FOLDER_UPDATE_INTERVAL) {
+ inc_update_folderview(inc_dialog, inc_session);
+ inc_dialog->folder_tv.tv_sec = tv_cur.tv_sec;
+ inc_dialog->folder_tv.tv_usec = tv_cur.tv_usec;
+ }
+}
+
+static gint inc_recv_data_progressive(Session *session, guint cur_len,
+ guint total_len, gpointer data)
+{
+ IncSession *inc_session = (IncSession *)data;
+ Pop3Session *pop3_session = POP3_SESSION(session);
+ IncProgressDialog *inc_dialog;
+ gint cur_total;
+
+ g_return_val_if_fail(inc_session != NULL, -1);
+
+ if (pop3_session->state != POP3_RETR &&
+ pop3_session->state != POP3_RETR_RECV &&
+ pop3_session->state != POP3_DELETE &&
+ pop3_session->state != POP3_LOGOUT) return 0;
+
+ if (!pop3_session->new_msg_exist) return 0;
+
+ cur_total = pop3_session->cur_total_bytes + cur_len;
+ if (cur_total > pop3_session->total_bytes)
+ cur_total = pop3_session->total_bytes;
+ inc_session->cur_total_bytes = cur_total;
+
+ inc_dialog = (IncProgressDialog *)inc_session->data;
+ inc_progress_dialog_update_periodic(inc_dialog, inc_session);
+ inc_update_folderview_periodic(inc_dialog, inc_session);
+
+ return 0;
+}
+
+static gint inc_recv_data_finished(Session *session, guint len, gpointer data)
+{
+ IncSession *inc_session = (IncSession *)data;
+ IncProgressDialog *inc_dialog;
+
+ g_return_val_if_fail(inc_session != NULL, -1);
+
+ inc_dialog = (IncProgressDialog *)inc_session->data;
+
+ inc_recv_data_progressive(session, 0, 0, inc_session);
+
+ if (POP3_SESSION(session)->state == POP3_LOGOUT) {
+ inc_progress_dialog_update(inc_dialog, inc_session);
+ inc_update_folderview(inc_dialog, inc_session);
+ }
+
+ return 0;
+}
+
+static gint inc_recv_message(Session *session, const gchar *msg, gpointer data)
+{
+ IncSession *inc_session = (IncSession *)data;
+ IncProgressDialog *inc_dialog;
+
+ g_return_val_if_fail(inc_session != NULL, -1);
+
+ inc_dialog = (IncProgressDialog *)inc_session->data;
+
+ switch (POP3_SESSION(session)->state) {
+ case POP3_GETAUTH_USER:
+ case POP3_GETAUTH_PASS:
+ case POP3_GETAUTH_APOP:
+ case POP3_GETRANGE_STAT:
+ case POP3_GETRANGE_LAST:
+ case POP3_GETRANGE_UIDL:
+ case POP3_GETSIZE_LIST:
+ inc_progress_dialog_update(inc_dialog, inc_session);
+ break;
+ case POP3_RETR:
+ inc_recv_data_progressive(session, 0, 0, inc_session);
+ break;
+ case POP3_LOGOUT:
+ inc_progress_dialog_update(inc_dialog, inc_session);
+ inc_update_folderview(inc_dialog, inc_session);
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static gint inc_drop_message(Pop3Session *session, const gchar *file)
+{
+ FolderItem *inbox;
+ GSList *cur;
+ FilterInfo *fltinfo;
+ IncSession *inc_session = (IncSession *)(SESSION(session)->data);
+ gint val;
+
+ g_return_val_if_fail(inc_session != NULL, DROP_ERROR);
+
+ if (session->ac_prefs->inbox) {
+ inbox = folder_find_item_from_identifier
+ (session->ac_prefs->inbox);
+ if (!inbox)
+ inbox = folder_get_default_inbox();
+ } else
+ inbox = folder_get_default_inbox();
+ if (!inbox)
+ return DROP_ERROR;
+
+ fltinfo = filter_info_new();
+ fltinfo->account = session->ac_prefs;
+ fltinfo->flags.perm_flags = MSG_NEW|MSG_UNREAD;
+ fltinfo->flags.tmp_flags = MSG_RECEIVED;
+
+ if (session->ac_prefs->filter_on_recv)
+ filter_apply(prefs_common.fltlist, file, fltinfo);
+
+ if (!fltinfo->drop_done) {
+ if (folder_item_add_msg
+ (inbox, file, &fltinfo->flags, FALSE) < 0) {
+ filter_info_free(fltinfo);
+ return DROP_ERROR;
+ }
+ fltinfo->dest_list = g_slist_append(fltinfo->dest_list, inbox);
+ }
+
+ for (cur = fltinfo->dest_list; cur != NULL; cur = cur->next) {
+ FolderItem *drop_folder = (FolderItem *)cur->data;
+
+ val = GPOINTER_TO_INT(g_hash_table_lookup
+ (inc_session->folder_table, drop_folder));
+ if (val == 0) {
+ /* force updating */
+ if (FOLDER_IS_LOCAL(drop_folder->folder))
+ drop_folder->mtime = 0;
+ g_hash_table_insert(inc_session->folder_table, drop_folder,
+ GINT_TO_POINTER(1));
+ }
+ g_hash_table_insert(inc_session->tmp_folder_table, drop_folder,
+ GINT_TO_POINTER(1));
+ }
+
+ if (fltinfo->actions[FLT_ACTION_NOT_RECEIVE] == TRUE)
+ val = DROP_DONT_RECEIVE;
+ else if (fltinfo->actions[FLT_ACTION_DELETE] == TRUE)
+ val = DROP_DELETE;
+ else
+ val = DROP_OK;
+
+ filter_info_free(fltinfo);
+
+ return val;
+}
+
+static void inc_put_error(IncState istate, const gchar *msg)
+{
+ gchar *log_msg = NULL;
+ gchar *err_msg = NULL;
+ gboolean fatal_error = FALSE;
+
+ switch (istate) {
+ case INC_CONNECT_ERROR:
+ log_msg = _("Connection failed.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_ERROR:
+ log_msg = _("Error occurred while processing mail.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ if (msg)
+ err_msg = g_strdup_printf
+ (_("Error occurred while processing mail:\n%s"),
+ msg);
+ else
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_NO_SPACE:
+ log_msg = _("No disk space left.");
+ err_msg = g_strdup(log_msg);
+ fatal_error = TRUE;
+ break;
+ case INC_IO_ERROR:
+ log_msg = _("Can't write file.");
+ err_msg = g_strdup(log_msg);
+ fatal_error = TRUE;
+ break;
+ case INC_SOCKET_ERROR:
+ log_msg = _("Socket error.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_EOF:
+ log_msg = _("Connection closed by the remote host.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_LOCKED:
+ log_msg = _("Mailbox is locked.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ if (msg)
+ err_msg = g_strdup_printf(_("Mailbox is locked:\n%s"),
+ msg);
+ else
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_AUTH_FAILED:
+ log_msg = _("Authentication failed.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ if (msg)
+ err_msg = g_strdup_printf
+ (_("Authentication failed:\n%s"), msg);
+ else
+ err_msg = g_strdup(log_msg);
+ break;
+ case INC_TIMEOUT:
+ log_msg = _("Session timed out.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ err_msg = g_strdup(log_msg);
+ break;
+ default:
+ break;
+ }
+
+ if (log_msg) {
+ if (fatal_error)
+ log_error("%s\n", log_msg);
+ else
+ log_warning("%s\n", log_msg);
+ }
+ if (err_msg) {
+ alertpanel_error(err_msg);
+ g_free(err_msg);
+ }
+}
+
+static void inc_cancel(IncProgressDialog *dialog)
+{
+ IncSession *session;
+
+ g_return_if_fail(dialog != NULL);
+
+ if (dialog->queue_list == NULL) {
+ inc_progress_dialog_destroy(dialog);
+ return;
+ }
+
+ session = dialog->queue_list->data;
+
+ session->inc_state = INC_CANCEL;
+
+ log_message(_("Incorporation cancelled\n"));
+}
+
+gboolean inc_is_active(void)
+{
+ return (inc_dialog_list != NULL);
+}
+
+void inc_cancel_all(void)
+{
+ GList *cur;
+
+ for (cur = inc_dialog_list; cur != NULL; cur = cur->next)
+ inc_cancel((IncProgressDialog *)cur->data);
+}
+
+static void inc_cancel_cb(GtkWidget *widget, gpointer data)
+{
+ inc_cancel((IncProgressDialog *)data);
+}
+
+static gint inc_dialog_delete_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ IncProgressDialog *dialog = (IncProgressDialog *)data;
+
+ if (dialog->queue_list == NULL)
+ inc_progress_dialog_destroy(dialog);
+
+ return TRUE;
+}
+
+static gint inc_spool(void)
+{
+ gchar *spool_path;
+ gchar *mbox;
+ gint msgs;
+
+ spool_path = prefs_common.spool_path
+ ? prefs_common.spool_path : DEFAULT_SPOOL_PATH;
+ if (is_file_exist(spool_path))
+ mbox = g_strdup(spool_path);
+ else if (is_dir_exist(spool_path))
+ mbox = g_strconcat(spool_path, G_DIR_SEPARATOR_S,
+ g_get_user_name(), NULL);
+ else {
+ debug_print("%s: local mailbox not found.\n", spool_path);
+ return -1;
+ }
+
+ msgs = get_spool(folder_get_default_inbox(), mbox);
+ g_free(mbox);
+
+ return msgs;
+}
+
+static gint get_spool(FolderItem *dest, const gchar *mbox)
+{
+ gint msgs, size;
+ gint lockfd;
+ gchar tmp_mbox[MAXPATHLEN + 1];
+ GHashTable *folder_table = NULL;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(mbox != NULL, -1);
+
+ if (!is_file_exist(mbox) || (size = get_file_size(mbox)) == 0) {
+ debug_print("%s: no messages in local mailbox.\n", mbox);
+ return 0;
+ } else if (size < 0)
+ return -1;
+
+ if ((lockfd = lock_mbox(mbox, LOCK_FLOCK)) < 0)
+ return -1;
+
+ g_snprintf(tmp_mbox, sizeof(tmp_mbox), "%s%ctmpmbox.%p",
+ get_tmp_dir(), G_DIR_SEPARATOR, mbox);
+
+ if (copy_mbox(mbox, tmp_mbox) < 0) {
+ unlock_mbox(mbox, lockfd, LOCK_FLOCK);
+ return -1;
+ }
+
+ debug_print(_("Getting new messages from %s into %s...\n"),
+ mbox, dest->path);
+
+ if (prefs_common.filter_on_inc)
+ folder_table = g_hash_table_new(NULL, NULL);
+ msgs = proc_mbox(dest, tmp_mbox, folder_table);
+
+ unlink(tmp_mbox);
+ if (msgs >= 0) empty_mbox(mbox);
+ unlock_mbox(mbox, lockfd, LOCK_FLOCK);
+
+ if (folder_table) {
+ if (!prefs_common.scan_all_after_inc) {
+ folder_item_scan_foreach(folder_table);
+ folderview_update_item_foreach
+ (folder_table, !prefs_common.open_inbox_on_inc);
+ }
+ g_hash_table_destroy(folder_table);
+ } else if (!prefs_common.scan_all_after_inc) {
+ folder_item_scan(dest);
+ folderview_update_item(dest, TRUE);
+ }
+
+ return msgs;
+}
+
+void inc_lock(void)
+{
+ inc_lock_count++;
+}
+
+void inc_unlock(void)
+{
+ if (inc_lock_count > 0)
+ inc_lock_count--;
+}
+
+static guint autocheck_timer = 0;
+static gpointer autocheck_data = NULL;
+
+void inc_autocheck_timer_init(MainWindow *mainwin)
+{
+ autocheck_data = mainwin;
+ inc_autocheck_timer_set();
+}
+
+static void inc_autocheck_timer_set_interval(guint interval)
+{
+ inc_autocheck_timer_remove();
+
+ if (prefs_common.autochk_newmail && autocheck_data) {
+ autocheck_timer = gtk_timeout_add
+ (interval, inc_autocheck_func, autocheck_data);
+ debug_print("added timer = %d\n", autocheck_timer);
+ }
+}
+
+void inc_autocheck_timer_set(void)
+{
+ inc_autocheck_timer_set_interval(prefs_common.autochk_itv * 60000);
+}
+
+void inc_autocheck_timer_remove(void)
+{
+ if (autocheck_timer) {
+ debug_print("removed timer = %d\n", autocheck_timer);
+ gtk_timeout_remove(autocheck_timer);
+ autocheck_timer = 0;
+ }
+}
+
+static gint inc_autocheck_func(gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ if (inc_lock_count) {
+ debug_print("autocheck is locked.\n");
+ inc_autocheck_timer_set_interval(1000);
+ return FALSE;
+ }
+
+ inc_all_account_mail(mainwin, TRUE);
+
+ return FALSE;
+}
diff --git a/src/inc.h b/src/inc.h
new file mode 100644
index 00000000..8c2b406c
--- /dev/null
+++ b/src/inc.h
@@ -0,0 +1,103 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __INC_H__
+#define __INC_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include "mainwindow.h"
+#include "progressdialog.h"
+#include "prefs_account.h"
+#include "session.h"
+#include "pop.h"
+
+typedef struct _IncProgressDialog IncProgressDialog;
+typedef struct _IncSession IncSession;
+
+typedef enum
+{
+ INC_SUCCESS,
+ INC_CONNECT_ERROR,
+ INC_AUTH_FAILED,
+ INC_LOCKED,
+ INC_ERROR,
+ INC_NO_SPACE,
+ INC_IO_ERROR,
+ INC_SOCKET_ERROR,
+ INC_EOF,
+ INC_TIMEOUT,
+ INC_CANCEL
+} IncState;
+
+struct _IncProgressDialog
+{
+ ProgressDialog *dialog;
+
+ MainWindow *mainwin;
+
+ gboolean show_dialog;
+
+ struct timeval progress_tv;
+ struct timeval folder_tv;
+
+ GList *queue_list; /* list of IncSession */
+ gint cur_row;
+};
+
+struct _IncSession
+{
+ Session *session;
+ IncState inc_state;
+
+ GHashTable *folder_table; /* table of destination folders */
+ GHashTable *tmp_folder_table; /* for progressive update */
+
+ gint cur_total_bytes;
+
+ gpointer data;
+};
+
+#define TIMEOUT_ITV 200
+
+void inc_mail (MainWindow *mainwin);
+gint inc_account_mail (MainWindow *mainwin,
+ PrefsAccount *account);
+void inc_all_account_mail (MainWindow *mainwin,
+ gboolean autocheck);
+void inc_progress_update (Pop3Session *session);
+
+gboolean inc_is_active (void);
+
+void inc_cancel_all (void);
+
+void inc_lock (void);
+void inc_unlock (void);
+
+void inc_autocheck_timer_init (MainWindow *mainwin);
+void inc_autocheck_timer_set (void);
+void inc_autocheck_timer_remove (void);
+
+#endif /* __INC_H__ */
diff --git a/src/inputdialog.c b/src/inputdialog.c
new file mode 100644
index 00000000..6e5473c4
--- /dev/null
+++ b/src/inputdialog.c
@@ -0,0 +1,332 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkcombo.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkhbbox.h>
+
+#include "intl.h"
+#include "inputdialog.h"
+#include "manage_window.h"
+#include "inc.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+#define INPUT_DIALOG_WIDTH 420
+
+typedef enum
+{
+ INPUT_DIALOG_NORMAL,
+ INPUT_DIALOG_INVISIBLE,
+ INPUT_DIALOG_COMBO
+} InputDialogType;
+
+static gboolean ack;
+static gboolean fin;
+
+static InputDialogType type;
+
+static GtkWidget *dialog;
+static GtkWidget *msg_label;
+static GtkWidget *entry;
+static GtkWidget *combo;
+static GtkWidget *ok_button;
+
+static void input_dialog_create (void);
+static gchar *input_dialog_open (const gchar *title,
+ const gchar *message,
+ const gchar *default_string);
+static void input_dialog_set (const gchar *title,
+ const gchar *message,
+ const gchar *default_string);
+
+static void ok_clicked (GtkWidget *widget,
+ gpointer data);
+static void cancel_clicked (GtkWidget *widget,
+ gpointer data);
+static gint delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void entry_activated (GtkEditable *editable);
+static void combo_activated (GtkEditable *editable);
+
+
+gchar *input_dialog(const gchar *title, const gchar *message,
+ const gchar *default_string)
+{
+ if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL;
+
+ if (!dialog)
+ input_dialog_create();
+
+ type = INPUT_DIALOG_NORMAL;
+ gtk_widget_hide(combo);
+ gtk_widget_show(entry);
+ gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE);
+
+ return input_dialog_open(title, message, default_string);
+}
+
+gchar *input_dialog_with_invisible(const gchar *title, const gchar *message,
+ const gchar *default_string)
+{
+ if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL;
+
+ if (!dialog)
+ input_dialog_create();
+
+ type = INPUT_DIALOG_INVISIBLE;
+ gtk_widget_hide(combo);
+ gtk_widget_show(entry);
+ gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
+
+ return input_dialog_open(title, message, default_string);
+}
+
+gchar *input_dialog_combo(const gchar *title, const gchar *message,
+ const gchar *default_string, GList *list,
+ gboolean case_sensitive)
+{
+ if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL;
+
+ if (!dialog)
+ input_dialog_create();
+
+ type = INPUT_DIALOG_COMBO;
+ gtk_widget_hide(entry);
+ gtk_widget_show(combo);
+
+ if (!list) {
+ GList empty_list;
+
+ empty_list.data = (gpointer)"";
+ empty_list.next = NULL;
+ empty_list.prev = NULL;
+ gtk_combo_set_popdown_strings(GTK_COMBO(combo), &empty_list);
+ } else
+ gtk_combo_set_popdown_strings(GTK_COMBO(combo), list);
+
+ gtk_combo_set_case_sensitive(GTK_COMBO(combo), case_sensitive);
+
+ return input_dialog_open(title, message, default_string);
+}
+
+gchar *input_dialog_query_password(const gchar *server, const gchar *user)
+{
+ gchar *message;
+ gchar *pass;
+
+ message = g_strdup_printf(_("Input password for %s on %s:"),
+ user, server);
+ pass = input_dialog_with_invisible(_("Input password"), message, NULL);
+ g_free(message);
+
+ return pass;
+}
+
+static void input_dialog_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *confirm_area;
+ GtkWidget *cancel_button;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE);
+ gtk_widget_set_size_request(dialog, INPUT_DIALOG_WIDTH, -1);
+ gtk_container_set_border_width
+ (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(dialog), "delete_event",
+ G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(dialog), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog);
+
+ gtk_widget_realize(dialog);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ msg_label = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox), msg_label, FALSE, FALSE, 0);
+ gtk_label_set_justify(GTK_LABEL(msg_label), GTK_JUSTIFY_LEFT);
+
+ entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(entry), "activate",
+ G_CALLBACK(entry_activated), NULL);
+
+ combo = gtk_combo_new();
+ gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry), "activate",
+ G_CALLBACK(combo_activated), NULL);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_button, _("OK"),
+ &cancel_button, _("Cancel"),
+ NULL, NULL);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
+ confirm_area);
+ gtk_widget_grab_default(ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(ok_clicked), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(cancel_clicked), NULL);
+
+
+ gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
+}
+
+static gchar *input_dialog_open(const gchar *title, const gchar *message,
+ const gchar *default_string)
+{
+ gchar *str;
+
+ if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL;
+
+ if (!dialog)
+ input_dialog_create();
+
+ input_dialog_set(title, message, default_string);
+ gtk_widget_show(dialog);
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+ manage_window_set_transient(GTK_WINDOW(dialog));
+
+ ack = fin = FALSE;
+
+ inc_lock();
+
+ while (fin == FALSE)
+ gtk_main_iteration();
+
+ manage_window_focus_out(dialog, NULL, NULL);
+ gtk_widget_hide(dialog);
+
+ if (ack) {
+ GtkEditable *editable;
+
+ if (type == INPUT_DIALOG_COMBO)
+ editable = GTK_EDITABLE(GTK_COMBO(combo)->entry);
+ else
+ editable = GTK_EDITABLE(entry);
+
+ str = gtk_editable_get_chars(editable, 0, -1);
+ if (str && *str == '\0') {
+ g_free(str);
+ str = NULL;
+ }
+ } else
+ str = NULL;
+
+ GTK_EVENTS_FLUSH();
+
+ inc_unlock();
+
+ debug_print("return string = %s\n", str ? str : "(none)");
+ return str;
+}
+
+static void input_dialog_set(const gchar *title, const gchar *message,
+ const gchar *default_string)
+{
+ GtkWidget *entry_;
+
+ if (type == INPUT_DIALOG_COMBO)
+ entry_ = GTK_COMBO(combo)->entry;
+ else
+ entry_ = entry;
+
+ gtk_window_set_title(GTK_WINDOW(dialog), title);
+ gtk_label_set_text(GTK_LABEL(msg_label), message);
+ if (default_string && *default_string) {
+ gtk_entry_set_text(GTK_ENTRY(entry_), default_string);
+ gtk_entry_set_position(GTK_ENTRY(entry_), 0);
+ gtk_entry_select_region(GTK_ENTRY(entry_), 0, -1);
+ } else
+ gtk_entry_set_text(GTK_ENTRY(entry_), "");
+
+ gtk_widget_grab_focus(ok_button);
+ gtk_widget_grab_focus(entry_);
+}
+
+static void ok_clicked(GtkWidget *widget, gpointer data)
+{
+ ack = TRUE;
+ fin = TRUE;
+}
+
+static void cancel_clicked(GtkWidget *widget, gpointer data)
+{
+ ack = FALSE;
+ fin = TRUE;
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ ack = FALSE;
+ fin = TRUE;
+
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape) {
+ ack = FALSE;
+ fin = TRUE;
+ }
+
+ return FALSE;
+}
+
+static void entry_activated(GtkEditable *editable)
+{
+ ack = TRUE;
+ fin = TRUE;
+}
+
+static void combo_activated(GtkEditable *editable)
+{
+ ack = TRUE;
+ fin = TRUE;
+}
diff --git a/src/inputdialog.h b/src/inputdialog.h
new file mode 100644
index 00000000..0e9175a8
--- /dev/null
+++ b/src/inputdialog.h
@@ -0,0 +1,39 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __INPUTDIALOG_H__
+#define __INPUTDIALOG_H__
+
+#include <glib.h>
+
+gchar *input_dialog (const gchar *title,
+ const gchar *message,
+ const gchar *default_string);
+gchar *input_dialog_with_invisible (const gchar *title,
+ const gchar *message,
+ const gchar *default_string);
+gchar *input_dialog_combo (const gchar *title,
+ const gchar *message,
+ const gchar *default_string,
+ GList *list,
+ gboolean case_sensitive);
+gchar *input_dialog_query_password (const gchar *server,
+ const gchar *user);
+
+#endif /* __INPUTDIALOG_H__ */
diff --git a/src/intl.h b/src/intl.h
new file mode 100644
index 00000000..3cb08bf7
--- /dev/null
+++ b/src/intl.h
@@ -0,0 +1,22 @@
+#ifndef __INTL_H__
+#define __INTL_H__
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(String) gettext(String)
+# ifdef gettext_noop
+# define N_(String) gettext_noop(String)
+# else
+# define N_(String) (String)
+# endif /* gettext_noop */
+#else
+# define _(String) (String)
+# define N_(String) (String)
+# define textdomain(String) (String)
+# define gettext(String) (String)
+# define dgettext(Domain,String) (String)
+# define dcgettext(Domain,String,Type) (String)
+# define bindtextdomain(Domain,Directory) (Domain)
+#endif /* ENABLE_NLS */
+
+#endif /* __INTL_H__ */
diff --git a/src/jpilot.c b/src/jpilot.c
new file mode 100644
index 00000000..99f41c0d
--- /dev/null
+++ b/src/jpilot.c
@@ -0,0 +1,1732 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Functions necessary to access JPilot database files.
+ * JPilot is Copyright(c) by Judd Montgomery.
+ * Visit http://www.jpilot.org for more details.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_JPILOT
+
+#include <glib.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+/* #include <dlfcn.h> */
+#include <netinet/in.h>
+
+#ifdef HAVE_LIBPISOCK_PI_ARGS_H
+# include <libpisock/pi-args.h>
+# include <libpisock/pi-appinfo.h>
+# include <libpisock/pi-address.h>
+#else
+# include <pi-args.h>
+# include <pi-appinfo.h>
+# include <pi-address.h>
+#endif
+
+#include "mgutils.h"
+#include "addritem.h"
+#include "addrcache.h"
+#include "jpilot.h"
+#include "codeconv.h"
+
+#define JPILOT_DBHOME_DIR ".jpilot"
+#define JPILOT_DBHOME_FILE "AddressDB.pdb"
+#define PILOT_LINK_LIB_NAME "libpisock.so"
+
+#define IND_LABEL_LASTNAME 0 /* Index of last name in address data */
+#define IND_LABEL_FIRSTNAME 1 /* Index of first name in address data */
+#define IND_PHONE_EMAIL 4 /* Index of E-Mail address in phone labels */
+#define OFFSET_PHONE_LABEL 3 /* Offset to phone data in address data */
+#define IND_CUSTOM_LABEL 14 /* Offset to custom label names */
+#define NUM_CUSTOM_LABEL 4 /* Number of custom labels */
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct {
+ unsigned char db_name[32];
+ unsigned char flags[2];
+ unsigned char version[2];
+ unsigned char creation_time[4];
+ unsigned char modification_time[4];
+ unsigned char backup_time[4];
+ unsigned char modification_number[4];
+ unsigned char app_info_offset[4];
+ unsigned char sort_info_offset[4];
+ unsigned char type[4];/*Database ID */
+ unsigned char creator_id[4];/*Application ID */
+ unsigned char unique_id_seed[4];
+ unsigned char next_record_list_id[4];
+ unsigned char number_of_records[2];
+} RawDBHeader;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct {
+ char db_name[32];
+ unsigned int flags;
+ unsigned int version;
+ time_t creation_time;
+ time_t modification_time;
+ time_t backup_time;
+ unsigned int modification_number;
+ unsigned int app_info_offset;
+ unsigned int sort_info_offset;
+ char type[5];/*Database ID */
+ char creator_id[5];/*Application ID */
+ char unique_id_seed[5];
+ unsigned int next_record_list_id;
+ unsigned int number_of_records;
+} DBHeader;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct {
+ unsigned char Offset[4]; /*4 bytes offset from BOF to record */
+ unsigned char attrib;
+ unsigned char unique_ID[3];
+} record_header;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct mem_rec_header_s {
+ unsigned int rec_num;
+ unsigned int offset;
+ unsigned int unique_id;
+ unsigned char attrib;
+ struct mem_rec_header_s *next;
+} mem_rec_header;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+#define SPENT_PC_RECORD_BIT 256
+
+typedef enum {
+ PALM_REC = 100L,
+ MODIFIED_PALM_REC = 101L,
+ DELETED_PALM_REC = 102L,
+ NEW_PC_REC = 103L,
+ DELETED_PC_REC = SPENT_PC_RECORD_BIT + 104L,
+ DELETED_DELETED_PALM_REC = SPENT_PC_RECORD_BIT + 105L
+} PCRecType;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct {
+ PCRecType rt;
+ unsigned int unique_id;
+ unsigned char attrib;
+ void *buf;
+ int size;
+} buf_rec;
+
+/* Shamelessly copied from JPilot (libplugin.h) */
+typedef struct {
+ unsigned long header_len;
+ unsigned long header_version;
+ unsigned long rec_len;
+ unsigned long unique_id;
+ unsigned long rt; /* Record Type */
+ unsigned char attrib;
+} PC3RecordHeader;
+
+enum {
+ FAMILY_LAST = 0,
+ FAMILY_FIRST = 1
+} name_order;
+
+gboolean convert_charcode;
+
+/*
+* Create new pilot file object.
+*/
+JPilotFile *jpilot_create() {
+ JPilotFile *pilotFile;
+ pilotFile = g_new0( JPilotFile, 1 );
+ pilotFile->name = NULL;
+ pilotFile->file = NULL;
+ pilotFile->path = NULL;
+ pilotFile->addressCache = addrcache_create();
+ pilotFile->readMetadata = FALSE;
+ pilotFile->customLabels = NULL;
+ pilotFile->labelInd = NULL;
+ pilotFile->retVal = MGU_SUCCESS;
+ pilotFile->accessFlag = FALSE;
+ pilotFile->havePC3 = FALSE;
+ pilotFile->pc3ModifyTime = 0;
+ return pilotFile;
+}
+
+/*
+* Create new pilot file object for specified file.
+*/
+JPilotFile *jpilot_create_path( const gchar *path ) {
+ JPilotFile *pilotFile;
+ pilotFile = jpilot_create();
+ jpilot_set_file( pilotFile, path );
+ return pilotFile;
+}
+
+/*
+* Properties...
+*/
+void jpilot_set_name( JPilotFile* pilotFile, const gchar *value ) {
+ g_return_if_fail( pilotFile != NULL );
+ pilotFile->name = mgu_replace_string( pilotFile->name, value );
+}
+void jpilot_set_file( JPilotFile* pilotFile, const gchar *value ) {
+ g_return_if_fail( pilotFile != NULL );
+ addrcache_refresh( pilotFile->addressCache );
+ pilotFile->readMetadata = FALSE;
+ pilotFile->path = mgu_replace_string( pilotFile->path, value );
+}
+void jpilot_set_accessed( JPilotFile *pilotFile, const gboolean value ) {
+ g_return_if_fail( pilotFile != NULL );
+ pilotFile->accessFlag = value;
+}
+
+gint jpilot_get_status( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, -1 );
+ return pilotFile->retVal;
+}
+ItemFolder *jpilot_get_root_folder( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+ return addrcache_get_root_folder( pilotFile->addressCache );
+}
+gchar *jpilot_get_name( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+ return pilotFile->name;
+}
+
+/*
+* Test whether file was read.
+* Return: TRUE if file was read.
+*/
+gboolean jpilot_get_read_flag( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, FALSE );
+ return pilotFile->addressCache->dataRead;
+}
+
+/*
+* Free up custom label list.
+*/
+void jpilot_clear_custom_labels( JPilotFile *pilotFile ) {
+ GList *node;
+
+ g_return_if_fail( pilotFile != NULL );
+
+ /* Release custom labels */
+ mgu_free_dlist( pilotFile->customLabels );
+ pilotFile->customLabels = NULL;
+
+ /* Release indexes */
+ node = pilotFile->labelInd;
+ while( node ) {
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( pilotFile->labelInd );
+ pilotFile->labelInd = NULL;
+
+ /* Force a fresh read */
+ addrcache_refresh( pilotFile->addressCache );
+}
+
+/*
+* Append a custom label, representing an E-Mail address field to the
+* custom label list.
+*/
+void jpilot_add_custom_label( JPilotFile *pilotFile, const gchar *labelName ) {
+ g_return_if_fail( pilotFile != NULL );
+
+ if( labelName ) {
+ gchar *labelCopy = g_strdup( labelName );
+ g_strstrip( labelCopy );
+ if( *labelCopy == '\0' ) {
+ g_free( labelCopy );
+ }
+ else {
+ pilotFile->customLabels = g_list_append( pilotFile->customLabels, labelCopy );
+ /* Force a fresh read */
+ addrcache_refresh( pilotFile->addressCache );
+ }
+ }
+}
+
+/*
+* Get list of custom labels.
+* Return: List of labels. Must use g_free() when done.
+*/
+GList *jpilot_get_custom_labels( JPilotFile *pilotFile ) {
+ GList *retVal = NULL;
+ GList *node;
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ node = pilotFile->customLabels;
+ while( node ) {
+ retVal = g_list_append( retVal, g_strdup( node->data ) );
+ node = g_list_next( node );
+ }
+ return retVal;
+}
+
+/*
+* Return filespec of PC3 file corresponding to JPilot PDB file.
+* Note: Filespec should be g_free() when done.
+*/
+static gchar *jpilot_get_pc3_file( JPilotFile *pilotFile ) {
+ gchar *fileSpec, *r;
+ gint i, len, pos;
+
+ if( pilotFile == NULL ) return NULL;
+ if( pilotFile->path == NULL ) return NULL;
+
+ fileSpec = g_strdup( pilotFile->path );
+ len = strlen( fileSpec );
+ pos = -1;
+ r = NULL;
+ for( i = len; i > 0; i-- ) {
+ if( *(fileSpec + i) == '.' ) {
+ pos = i + 1;
+ r = fileSpec + pos;
+ break;
+ }
+ }
+ if( r ) {
+ if( len - pos == 3 ) {
+ *r++ = 'p'; *r++ = 'c'; *r = '3';
+ return fileSpec;
+ }
+ }
+ g_free( fileSpec );
+ return NULL;
+}
+
+/*
+* Save PC3 file time to cache.
+* return: TRUE if time marked.
+*/
+static gboolean jpilot_mark_files( JPilotFile *pilotFile ) {
+ gboolean retVal = FALSE;
+ struct stat filestat;
+ gchar *pcFile;
+
+ /* Mark PDB file cache */
+ retVal = addrcache_mark_file( pilotFile->addressCache, pilotFile->path );
+
+ /* Now mark PC3 file */
+ pilotFile->havePC3 = FALSE;
+ pilotFile->pc3ModifyTime = 0;
+ pcFile = jpilot_get_pc3_file( pilotFile );
+ if( pcFile == NULL ) return retVal;
+ if( 0 == lstat( pcFile, &filestat ) ) {
+ pilotFile->havePC3 = TRUE;
+ pilotFile->pc3ModifyTime = filestat.st_mtime;
+ retVal = TRUE;
+ }
+ g_free( pcFile );
+ return retVal;
+}
+
+/*
+* Check whether JPilot PDB or PC3 file has changed by comparing
+* with cached data.
+* return: TRUE if file has changed.
+*/
+static gboolean jpilot_check_files( JPilotFile *pilotFile ) {
+ gboolean retVal = TRUE;
+ struct stat filestat;
+ gchar *pcFile;
+
+ /* Check main file */
+ if( addrcache_check_file( pilotFile->addressCache, pilotFile->path ) )
+ return TRUE;
+
+ /* Test PC3 file */
+ if( ! pilotFile->havePC3 ) return FALSE;
+ pcFile = jpilot_get_pc3_file( pilotFile );
+ if( pcFile == NULL ) return FALSE;
+
+ if( 0 == lstat( pcFile, &filestat ) ) {
+ if( filestat.st_mtime == pilotFile->pc3ModifyTime ) retVal = FALSE;
+ }
+ g_free( pcFile );
+ return retVal;
+}
+
+/*
+* Test whether file was modified since last access.
+* Return: TRUE if file was modified.
+*/
+gboolean jpilot_get_modified( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, FALSE );
+ return jpilot_check_files( pilotFile );
+}
+gboolean jpilot_get_accessed( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, FALSE );
+ return pilotFile->accessFlag;
+}
+
+/*
+* Free up pilot file object by releasing internal memory.
+*/
+void jpilot_free( JPilotFile *pilotFile ) {
+ g_return_if_fail( pilotFile != NULL );
+
+ /* Free internal stuff */
+ g_free( pilotFile->path );
+
+ /* Release custom labels */
+ jpilot_clear_custom_labels( pilotFile );
+
+ /* Clear cache */
+ addrcache_clear( pilotFile->addressCache );
+ addrcache_free( pilotFile->addressCache );
+ pilotFile->addressCache = NULL;
+ pilotFile->readMetadata = FALSE;
+ pilotFile->accessFlag = FALSE;
+ pilotFile->havePC3 = FALSE;
+ pilotFile->pc3ModifyTime = 0;
+
+ /* Now release file object */
+ g_free( pilotFile );
+}
+
+/*
+* Refresh internal variables to force a file read.
+*/
+void jpilot_force_refresh( JPilotFile *pilotFile ) {
+ addrcache_refresh( pilotFile->addressCache );
+}
+
+/*
+* Print object to specified stream.
+*/
+void jpilot_print_file( JPilotFile *pilotFile, FILE *stream ) {
+ GList *node;
+
+ g_return_if_fail( pilotFile != NULL );
+
+ fprintf( stream, "JPilotFile:\n" );
+ fprintf( stream, "file spec: '%s'\n", pilotFile->path );
+ fprintf( stream, " metadata: %s\n", pilotFile->readMetadata ? "yes" : "no" );
+ fprintf( stream, " ret val: %d\n", pilotFile->retVal );
+
+ node = pilotFile->customLabels;
+ while( node ) {
+ fprintf( stream, " c label: %s\n", (gchar *)node->data );
+ node = g_list_next( node );
+ }
+
+ node = pilotFile->labelInd;
+ while( node ) {
+ fprintf( stream, " labelind: %d\n", GPOINTER_TO_INT(node->data) );
+ node = g_list_next( node );
+ }
+
+ addrcache_print( pilotFile->addressCache, stream );
+ fprintf( stream, " ret val: %d\n", pilotFile->retVal );
+ fprintf( stream, " have pc3: %s\n", pilotFile->havePC3 ? "yes" : "no" );
+ fprintf( stream, " pc3 time: %lu\n", pilotFile->pc3ModifyTime );
+ addritem_print_item_folder( pilotFile->addressCache->rootFolder, stream );
+}
+
+/*
+* Print summary of object to specified stream.
+*/
+void jpilot_print_short( JPilotFile *pilotFile, FILE *stream ) {
+ GList *node;
+ g_return_if_fail( pilotFile != NULL );
+ fprintf( stream, "JPilotFile:\n" );
+ fprintf( stream, "file spec: '%s'\n", pilotFile->path );
+ fprintf( stream, " metadata: %s\n", pilotFile->readMetadata ? "yes" : "no" );
+ fprintf( stream, " ret val: %d\n", pilotFile->retVal );
+
+ node = pilotFile->customLabels;
+ while( node ) {
+ fprintf( stream, " c label: %s\n", (gchar *)node->data );
+ node = g_list_next( node );
+ }
+
+ node = pilotFile->labelInd;
+ while( node ) {
+ fprintf( stream, " labelind: %d\n", GPOINTER_TO_INT(node->data) );
+ node = g_list_next( node );
+ }
+ addrcache_print( pilotFile->addressCache, stream );
+ fprintf( stream, " have pc3: %s\n", pilotFile->havePC3 ? "yes" : "no" );
+ fprintf( stream, " pc3 time: %lu\n", pilotFile->pc3ModifyTime );
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+static unsigned int bytes_to_bin(unsigned char *bytes, unsigned int num_bytes) {
+unsigned int i, n;
+ n=0;
+ for (i=0;i<num_bytes;i++) {
+ n = n*256+bytes[i];
+ }
+ return n;
+}
+
+/* Shamelessly copied from JPilot (utils.c) */
+/* These next 2 functions were copied from pi-file.c in the pilot-link app */
+/* Exact value of "Jan 1, 1970 0:00:00 GMT" - "Jan 1, 1904 0:00:00 GMT" */
+#define PILOT_TIME_DELTA (unsigned)(2082844800)
+
+time_t pilot_time_to_unix_time ( unsigned long raw_time ) {
+ return (time_t)(raw_time - PILOT_TIME_DELTA);
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+static int raw_header_to_header(RawDBHeader *rdbh, DBHeader *dbh) {
+ unsigned long temp;
+
+ strncpy(dbh->db_name, rdbh->db_name, 31);
+ dbh->db_name[31] = '\0';
+ dbh->flags = bytes_to_bin(rdbh->flags, 2);
+ dbh->version = bytes_to_bin(rdbh->version, 2);
+ temp = bytes_to_bin(rdbh->creation_time, 4);
+ dbh->creation_time = pilot_time_to_unix_time(temp);
+ temp = bytes_to_bin(rdbh->modification_time, 4);
+ dbh->modification_time = pilot_time_to_unix_time(temp);
+ temp = bytes_to_bin(rdbh->backup_time, 4);
+ dbh->backup_time = pilot_time_to_unix_time(temp);
+ dbh->modification_number = bytes_to_bin(rdbh->modification_number, 4);
+ dbh->app_info_offset = bytes_to_bin(rdbh->app_info_offset, 4);
+ dbh->sort_info_offset = bytes_to_bin(rdbh->sort_info_offset, 4);
+ strncpy(dbh->type, rdbh->type, 4);
+ dbh->type[4] = '\0';
+ strncpy(dbh->creator_id, rdbh->creator_id, 4);
+ dbh->creator_id[4] = '\0';
+ strncpy(dbh->unique_id_seed, rdbh->unique_id_seed, 4);
+ dbh->unique_id_seed[4] = '\0';
+ dbh->next_record_list_id = bytes_to_bin(rdbh->next_record_list_id, 4);
+ dbh->number_of_records = bytes_to_bin(rdbh->number_of_records, 2);
+ return 0;
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+/* returns 1 if found */
+/* 0 if eof */
+static int find_next_offset( mem_rec_header *mem_rh, long fpos,
+ unsigned int *next_offset, unsigned char *attrib, unsigned int *unique_id )
+{
+ mem_rec_header *temp_mem_rh;
+ unsigned char found = 0;
+ unsigned long found_at;
+
+ found_at=0xFFFFFF;
+ for (temp_mem_rh=mem_rh; temp_mem_rh; temp_mem_rh = temp_mem_rh->next) {
+ if ((temp_mem_rh->offset > fpos) && (temp_mem_rh->offset < found_at)) {
+ found_at = temp_mem_rh->offset;
+ /* *attrib = temp_mem_rh->attrib; */
+ /* *unique_id = temp_mem_rh->unique_id; */
+ }
+ if ((temp_mem_rh->offset == fpos)) {
+ found = 1;
+ *attrib = temp_mem_rh->attrib;
+ *unique_id = temp_mem_rh->unique_id;
+ }
+ }
+ *next_offset = found_at;
+ return found;
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+static void free_mem_rec_header(mem_rec_header **mem_rh) {
+ mem_rec_header *h, *next_h;
+ for (h=*mem_rh; h; h=next_h) {
+ next_h=h->next;
+ free(h);
+ }
+ *mem_rh = NULL;
+}
+
+#if 0
+/* Shamelessly copied from JPilot (libplugin.c) */
+static int jpilot_free_db_list( GList **br_list ) {
+ GList *temp_list, *first;
+ buf_rec *br;
+
+ /* Go to first entry in the list */
+ first=NULL;
+ for( temp_list = *br_list; temp_list; temp_list = temp_list->prev ) {
+ first = temp_list;
+ }
+ for (temp_list = first; temp_list; temp_list = temp_list->next) {
+ if (temp_list->data) {
+ br=temp_list->data;
+ if (br->buf) {
+ free(br->buf);
+ temp_list->data=NULL;
+ }
+ free(br);
+ }
+ }
+ g_list_free(*br_list);
+ *br_list=NULL;
+ return 0;
+}
+#endif
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+/* Read file size */
+static int jpilot_get_info_size( FILE *in, int *size ) {
+ RawDBHeader rdbh;
+ DBHeader dbh;
+ unsigned int offset;
+ record_header rh;
+
+ fseek(in, 0, SEEK_SET);
+ fread(&rdbh, sizeof(RawDBHeader), 1, in);
+ if (feof(in)) {
+ return MGU_EOF;
+ }
+
+ raw_header_to_header(&rdbh, &dbh);
+ if (dbh.app_info_offset==0) {
+ *size=0;
+ return MGU_SUCCESS;
+ }
+ if (dbh.sort_info_offset!=0) {
+ *size = dbh.sort_info_offset - dbh.app_info_offset;
+ return MGU_SUCCESS;
+ }
+ if (dbh.number_of_records==0) {
+ fseek(in, 0, SEEK_END);
+ *size=ftell(in) - dbh.app_info_offset;
+ return MGU_SUCCESS;
+ }
+
+ fread(&rh, sizeof(record_header), 1, in);
+ offset = ((rh.Offset[0]*256+rh.Offset[1])*256+rh.Offset[2])*256+rh.Offset[3];
+ *size=offset - dbh.app_info_offset;
+
+ return MGU_SUCCESS;
+}
+
+/*
+ * Read address file into address list. Based on JPilot's
+ * libplugin.c (jp_get_app_info)
+ */
+static gint jpilot_get_file_info( JPilotFile *pilotFile, unsigned char **buf, int *buf_size ) {
+ FILE *in;
+ int num;
+ unsigned int rec_size;
+ RawDBHeader rdbh;
+ DBHeader dbh;
+
+ if( ( !buf_size ) || ( ! buf ) ) {
+ return MGU_BAD_ARGS;
+ }
+
+ *buf = NULL;
+ *buf_size=0;
+
+ if( pilotFile->path ) {
+ in = fopen( pilotFile->path, "rb" );
+ if( !in ) {
+ return MGU_OPEN_FILE;
+ }
+ }
+ else {
+ return MGU_NO_FILE;
+ }
+
+ num = fread( &rdbh, sizeof( RawDBHeader ), 1, in );
+ if( num != 1 ) {
+ if( ferror(in) ) {
+ fclose(in);
+ return MGU_ERROR_READ;
+ }
+ }
+ if (feof(in)) {
+ fclose(in);
+ return MGU_EOF;
+ }
+
+ /* Convert header into something recognizable */
+ raw_header_to_header(&rdbh, &dbh);
+
+ num = jpilot_get_info_size(in, &rec_size);
+ if (num) {
+ fclose(in);
+ return MGU_ERROR_READ;
+ }
+
+ fseek(in, dbh.app_info_offset, SEEK_SET);
+ *buf = ( char * ) malloc(rec_size);
+ if (!(*buf)) {
+ fclose(in);
+ return MGU_OO_MEMORY;
+ }
+ num = fread(*buf, rec_size, 1, in);
+ if (num != 1) {
+ if (ferror(in)) {
+ fclose(in);
+ free(*buf);
+ return MGU_ERROR_READ;
+ }
+ }
+ fclose(in);
+
+ *buf_size = rec_size;
+
+ return MGU_SUCCESS;
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+static int unpack_header(PC3RecordHeader *header, unsigned char *packed_header) {
+ unsigned char *p;
+ unsigned long l;
+
+ p = packed_header;
+
+ memcpy(&l, p, sizeof(l));
+ header->header_len=ntohl(l);
+ p+=sizeof(l);
+
+ memcpy(&l, p, sizeof(l));
+ header->header_version=ntohl(l);
+ p+=sizeof(l);
+
+ memcpy(&l, p, sizeof(l));
+ header->rec_len=ntohl(l);
+ p+=sizeof(l);
+
+ memcpy(&l, p, sizeof(l));
+ header->unique_id=ntohl(l);
+ p+=sizeof(l);
+
+ memcpy(&l, p, sizeof(l));
+ header->rt=ntohl(l);
+ p+=sizeof(l);
+
+ memcpy(&(header->attrib), p, sizeof(unsigned char));
+ p+=sizeof(unsigned char);
+
+ return 0;
+}
+
+/* Shamelessly copied from JPilot (libplugin.c) */
+static int read_header(FILE *pc_in, PC3RecordHeader *header) {
+ unsigned long l, len;
+ unsigned char packed_header[256];
+ int num;
+
+ num = fread(&l, sizeof(l), 1, pc_in);
+ if (feof(pc_in)) {
+ return -1;
+ }
+ if (num!=1) {
+ return num;
+ }
+ memcpy(packed_header, &l, sizeof(l));
+ len=ntohl(l);
+ if (len > 255) {
+ return -1;
+ }
+ num = fread(packed_header+sizeof(l), len-sizeof(l), 1, pc_in);
+ if (feof(pc_in)) {
+ return -1;
+ }
+ if (num!=1) {
+ return num;
+ }
+ unpack_header(header, packed_header);
+ return 1;
+}
+
+/* Read next record from PC3 file. Based on JPilot's
+ * pc_read_next_rec (libplugin.c) */
+static gint jpilot_read_next_pc( FILE *in, buf_rec *br ) {
+ PC3RecordHeader header;
+ int rec_len, num;
+ char *record;
+
+ if(feof(in)) {
+ return MGU_EOF;
+ }
+ num = read_header(in, &header);
+ if (num < 1) {
+ if (ferror(in)) {
+ return MGU_ERROR_READ;
+ }
+ if (feof(in)) {
+ return MGU_EOF;
+ }
+ }
+ rec_len = header.rec_len;
+ record = malloc(rec_len);
+ if (!record) {
+ return MGU_OO_MEMORY;
+ }
+ num = fread(record, rec_len, 1, in);
+ if (num != 1) {
+ if (ferror(in)) {
+ free(record);
+ return MGU_ERROR_READ;
+ }
+ }
+ br->rt = header.rt;
+ br->unique_id = header.unique_id;
+ br->attrib = header.attrib;
+ br->buf = record;
+ br->size = rec_len;
+
+ return MGU_SUCCESS;
+}
+
+/*
+ * Read address file into a linked list. Based on JPilot's
+ * jp_read_DB_files (from libplugin.c)
+ */
+static gint jpilot_read_db_files( JPilotFile *pilotFile, GList **records ) {
+ FILE *in, *pc_in;
+ char *buf;
+ GList *temp_list;
+ int num_records, recs_returned, i, num, r;
+ unsigned int offset, prev_offset, next_offset, rec_size;
+ int out_of_order;
+ long fpos; /*file position indicator */
+ unsigned char attrib;
+ unsigned int unique_id;
+ mem_rec_header *mem_rh, *temp_mem_rh, *last_mem_rh;
+ record_header rh;
+ RawDBHeader rdbh;
+ DBHeader dbh;
+ buf_rec *temp_br;
+ gchar *pcFile;
+
+ mem_rh = last_mem_rh = NULL;
+ *records = NULL;
+ recs_returned = 0;
+
+ if( pilotFile->path == NULL ) {
+ return MGU_BAD_ARGS;
+ }
+
+ in = fopen( pilotFile->path, "rb" );
+ if (!in) {
+ return MGU_OPEN_FILE;
+ }
+
+ /* Read the database header */
+ num = fread(&rdbh, sizeof(RawDBHeader), 1, in);
+ if (num != 1) {
+ if (ferror(in)) {
+ fclose(in);
+ return MGU_ERROR_READ;
+ }
+ if (feof(in)) {
+ return MGU_EOF;
+ }
+ }
+ raw_header_to_header(&rdbh, &dbh);
+
+ /* Read each record entry header */
+ num_records = dbh.number_of_records;
+ out_of_order = 0;
+ prev_offset = 0;
+
+ for (i = 1; i < num_records + 1; i++) {
+ num = fread(&rh, sizeof(record_header), 1, in);
+ if (num != 1) {
+ if (ferror(in)) {
+ break;
+ }
+ if (feof(in)) {
+ return MGU_EOF;
+ }
+ }
+
+ offset = ((rh.Offset[0]*256+rh.Offset[1])*256+rh.Offset[2])*256+rh.Offset[3];
+ if (offset < prev_offset) {
+ out_of_order = 1;
+ }
+ prev_offset = offset;
+ temp_mem_rh = (mem_rec_header *)malloc(sizeof(mem_rec_header));
+ if (!temp_mem_rh) {
+ break;
+ }
+ temp_mem_rh->next = NULL;
+ temp_mem_rh->rec_num = i;
+ temp_mem_rh->offset = offset;
+ temp_mem_rh->attrib = rh.attrib;
+ temp_mem_rh->unique_id = (rh.unique_ID[0]*256+rh.unique_ID[1])*256+rh.unique_ID[2];
+ if (mem_rh == NULL) {
+ mem_rh = temp_mem_rh;
+ last_mem_rh = temp_mem_rh;
+ } else {
+ last_mem_rh->next = temp_mem_rh;
+ last_mem_rh = temp_mem_rh;
+ }
+ }
+
+ temp_mem_rh = mem_rh;
+
+ if (num_records) {
+ if (out_of_order) {
+ find_next_offset(mem_rh, 0, &next_offset, &attrib, &unique_id);
+ } else {
+ if (mem_rh) {
+ next_offset = mem_rh->offset;
+ attrib = mem_rh->attrib;
+ unique_id = mem_rh->unique_id;
+ }
+ }
+ fseek(in, next_offset, SEEK_SET);
+ while(!feof(in)) {
+ fpos = ftell(in);
+ if (out_of_order) {
+ find_next_offset(mem_rh, fpos, &next_offset, &attrib, &unique_id);
+ } else {
+ next_offset = 0xFFFFFF;
+ if (temp_mem_rh) {
+ attrib = temp_mem_rh->attrib;
+ unique_id = temp_mem_rh->unique_id;
+ if (temp_mem_rh->next) {
+ temp_mem_rh = temp_mem_rh->next;
+ next_offset = temp_mem_rh->offset;
+ }
+ }
+ }
+ rec_size = next_offset - fpos;
+ buf = malloc(rec_size);
+ if (!buf) break;
+ num = fread(buf, rec_size, 1, in);
+ if ((num != 1)) {
+ if (ferror(in)) {
+ free(buf);
+ break;
+ }
+ }
+
+ temp_br = malloc(sizeof(buf_rec));
+ if (!temp_br) {
+ break;
+ }
+ temp_br->rt = PALM_REC;
+ temp_br->unique_id = unique_id;
+ temp_br->attrib = attrib;
+ temp_br->buf = buf;
+ temp_br->size = rec_size;
+
+ *records = g_list_append(*records, temp_br);
+
+ recs_returned++;
+ }
+ }
+ fclose(in);
+ free_mem_rec_header(&mem_rh);
+
+ /* Read the PC3 file, if present */
+ pcFile = jpilot_get_pc3_file( pilotFile );
+ if( pcFile == NULL ) return MGU_SUCCESS;
+ pc_in = fopen( pcFile, "rb");
+ g_free( pcFile );
+
+ if( pc_in == NULL ) {
+ return MGU_SUCCESS;
+ }
+
+ while( ! feof( pc_in ) ) {
+ temp_br = malloc(sizeof(buf_rec));
+ if (!temp_br) {
+ break;
+ }
+ r = jpilot_read_next_pc( pc_in, temp_br );
+ if ( r != MGU_SUCCESS ) {
+ free(temp_br);
+ break;
+ }
+ if ((temp_br->rt!=DELETED_PC_REC)
+ &&(temp_br->rt!=DELETED_PALM_REC)
+ &&(temp_br->rt!=MODIFIED_PALM_REC)
+ &&(temp_br->rt!=DELETED_DELETED_PALM_REC)) {
+ *records = g_list_append(*records, temp_br);
+ recs_returned++;
+ }
+ if ((temp_br->rt==DELETED_PALM_REC) || (temp_br->rt==MODIFIED_PALM_REC)) {
+ temp_list=*records;
+ if (*records) {
+ while(temp_list->next) {
+ temp_list=temp_list->next;
+ }
+ }
+ for (; temp_list; temp_list=temp_list->prev) {
+ if (((buf_rec *)temp_list->data)->unique_id == temp_br->unique_id) {
+ ((buf_rec *)temp_list->data)->rt = temp_br->rt;
+ }
+ }
+ }
+ }
+ fclose(pc_in);
+
+ return MGU_SUCCESS;
+}
+
+#define FULLNAME_BUFSIZE 256
+#define EMAIL_BUFSIZE 256
+/*
+ * Unpack address, building new data inside cache.
+ */
+static void jpilot_load_address( JPilotFile *pilotFile, buf_rec *buf, ItemFolder *folderInd[] ) {
+ struct Address addr;
+ gchar **addrEnt;
+ gint num, k;
+ gint cat_id = 0;
+ guint unique_id;
+ guchar attrib;
+ gchar fullName[ FULLNAME_BUFSIZE ];
+ gchar bufEMail[ EMAIL_BUFSIZE ];
+ ItemPerson *person;
+ ItemEMail *email;
+ gint *indPhoneLbl;
+ gchar *labelEntry;
+ GList *node;
+ gchar* extID;
+ struct AddressAppInfo *ai;
+ gchar **firstName = NULL;
+ gchar **lastName = NULL;
+
+ /* Retrieve address */
+ num = unpack_Address( & addr, buf->buf, buf->size );
+ if( num > 0 ) {
+ addrEnt = addr.entry;
+ attrib = buf->attrib;
+ unique_id = buf->unique_id;
+ cat_id = attrib & 0x0F;
+
+ *fullName = *bufEMail = '\0';
+
+ if( addrEnt[ IND_LABEL_FIRSTNAME ] ) {
+ firstName = g_strsplit( addrEnt[ IND_LABEL_FIRSTNAME ], "\01", 2 );
+ }
+ if( addrEnt[ IND_LABEL_LASTNAME ] ) {
+ lastName = g_strsplit( addrEnt[ IND_LABEL_LASTNAME ], "\01", 2 );
+ }
+
+ if( name_order == FAMILY_LAST ) {
+ g_snprintf( fullName, FULLNAME_BUFSIZE, "%s %s",
+ firstName ? firstName[0] : "",
+ lastName ? lastName[0] : "" );
+ }
+ else {
+ g_snprintf( fullName, FULLNAME_BUFSIZE, "%s %s",
+ lastName ? lastName[0] : "",
+ firstName ? firstName[0] : "" );
+ }
+
+ if( firstName ) {
+ g_strfreev( firstName );
+ }
+ if( lastName ) {
+ g_strfreev( lastName );
+ }
+
+ g_strstrip( fullName );
+
+ if( convert_charcode ) {
+ gchar *nameConv;
+ nameConv = g_strdup( fullName );
+ conv_sjistoeuc( fullName, FULLNAME_BUFSIZE, nameConv );
+ g_free( nameConv );
+ }
+
+ person = addritem_create_item_person();
+ addritem_person_set_common_name( person, fullName );
+ addritem_person_set_first_name( person, addrEnt[ IND_LABEL_FIRSTNAME ] );
+ addritem_person_set_last_name( person, addrEnt[ IND_LABEL_LASTNAME ] );
+ addrcache_id_person( pilotFile->addressCache, person );
+
+ extID = g_strdup_printf( "%d", unique_id );
+ addritem_person_set_external_id( person, extID );
+ g_free( extID );
+ extID = NULL;
+
+ /* Pointer to address metadata. */
+ ai = & pilotFile->addrInfo;
+
+ /* Add entry for each email address listed under phone labels. */
+ indPhoneLbl = addr.phoneLabel;
+ for( k = 0; k < JPILOT_NUM_ADDR_PHONE; k++ ) {
+ gint ind;
+
+ ind = indPhoneLbl[k];
+ /*
+ * fprintf( stdout, "%d : %d : %20s : %s\n", k, ind,
+ * ai->phoneLabels[ind], addrEnt[3+k] );
+ */
+ if( indPhoneLbl[k] == IND_PHONE_EMAIL ) {
+ labelEntry = addrEnt[ OFFSET_PHONE_LABEL + k ];
+ if( labelEntry ) {
+ strcpy( bufEMail, labelEntry );
+ g_strchug( bufEMail );
+ g_strchomp( bufEMail );
+
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, bufEMail );
+ addrcache_id_email( pilotFile->addressCache, email );
+ addrcache_person_add_email
+ ( pilotFile->addressCache, person, email );
+ }
+ }
+ }
+
+ /* Add entry for each custom label */
+ node = pilotFile->labelInd;
+ while( node ) {
+ gchar convertBuff[ JPILOT_LEN_LABEL ];
+ gint ind;
+
+ ind = GPOINTER_TO_INT( node->data );
+ if( ind > -1 ) {
+ /*
+ * fprintf( stdout, "%d : %20s : %s\n", ind, ai->labels[ind],
+ * addrEnt[ind] );
+ */
+ labelEntry = addrEnt[ind];
+ if( labelEntry ) {
+ strcpy( bufEMail, labelEntry );
+ g_strchug( bufEMail );
+ g_strchomp( bufEMail );
+
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, bufEMail );
+
+ if( convert_charcode ) {
+ conv_sjistoeuc( convertBuff, JPILOT_LEN_LABEL, ai->labels[ind] );
+ addritem_email_set_remarks( email, convertBuff );
+ }
+ else {
+ addritem_email_set_remarks( email, ai->labels[ind] );
+ }
+
+ addrcache_id_email( pilotFile->addressCache, email );
+ addrcache_person_add_email
+ ( pilotFile->addressCache, person, email );
+ }
+ }
+
+ node = g_list_next( node );
+ }
+
+ if( person->listEMail ) {
+ if( cat_id > -1 && cat_id < JPILOT_NUM_CATEG ) {
+ /* Add to specified category */
+ addrcache_folder_add_person
+ ( pilotFile->addressCache, folderInd[cat_id], person );
+ }
+ else {
+ /* Add to root folder */
+ addrcache_add_person( pilotFile->addressCache, person );
+ }
+ }
+ else {
+ addritem_free_item_person( person );
+ person = NULL;
+ }
+ }
+}
+
+/*
+ * Free up address list.
+ */
+static void jpilot_free_addrlist( GList *records ) {
+ GList *node;
+ buf_rec *br;
+
+ node = records;
+ while( node ) {
+ br = node->data;
+ free( br );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+
+ /* Free up list */
+ g_list_free( records );
+}
+
+/*
+ * Read address file into address cache.
+ */
+static gint jpilot_read_file( JPilotFile *pilotFile ) {
+ gint retVal, i;
+ GList *records = NULL;
+ GList *node;
+ buf_rec *br;
+ ItemFolder *folderInd[ JPILOT_NUM_CATEG ];
+
+ retVal = jpilot_read_db_files( pilotFile, &records );
+ if( retVal != MGU_SUCCESS ) {
+ jpilot_free_addrlist( records );
+ return retVal;
+ }
+
+ /* Build array of pointers to categories */
+ i = 0;
+ node = addrcache_get_list_folder( pilotFile->addressCache );
+ while( node ) {
+ if( i < JPILOT_NUM_CATEG ) {
+ folderInd[i] = node->data;
+ }
+ node = g_list_next( node );
+ i++;
+ }
+
+ /* Load all addresses, free up old stuff as we go */
+ node = records;
+ while( node ) {
+ br = node->data;
+ if( ( br->rt != DELETED_PC_REC ) &&
+ ( br->rt != DELETED_PALM_REC ) &&
+ ( br->rt != MODIFIED_PALM_REC ) &&
+ ( br->rt != DELETED_DELETED_PALM_REC ) ) {
+ jpilot_load_address( pilotFile, br, folderInd );
+ }
+ free( br );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+
+ /* Free up list */
+ g_list_free( records );
+
+ return retVal;
+}
+
+
+/*
+* Read metadata from file.
+*/
+static gint jpilot_read_metadata( JPilotFile *pilotFile ) {
+ gint retVal;
+ unsigned int rec_size;
+ unsigned char *buf;
+ int num;
+
+ g_return_val_if_fail( pilotFile != NULL, -1 );
+
+ pilotFile->readMetadata = FALSE;
+ addrcache_clear( pilotFile->addressCache );
+
+ /* Read file info */
+ retVal = jpilot_get_file_info( pilotFile, &buf, &rec_size);
+ if( retVal != MGU_SUCCESS ) {
+ pilotFile->retVal = retVal;
+ return pilotFile->retVal;
+ }
+
+ num = unpack_AddressAppInfo( &pilotFile->addrInfo, buf, rec_size );
+ if( buf ) {
+ free(buf);
+ }
+ if( num <= 0 ) {
+ pilotFile->retVal = MGU_ERROR_READ;
+ return pilotFile->retVal;
+ }
+
+ pilotFile->readMetadata = TRUE;
+ pilotFile->retVal = MGU_SUCCESS;
+ return pilotFile->retVal;
+}
+
+/*
+* Setup labels and indexes from metadata.
+* Return: TRUE is setup successfully.
+*/
+static gboolean jpilot_setup_labels( JPilotFile *pilotFile ) {
+ gboolean retVal = FALSE;
+ struct AddressAppInfo *ai;
+ GList *node;
+
+ g_return_val_if_fail( pilotFile != NULL, -1 );
+
+ /* Release indexes */
+ node = pilotFile->labelInd;
+ while( node ) {
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ pilotFile->labelInd = NULL;
+
+ if( pilotFile->readMetadata ) {
+ ai = & pilotFile->addrInfo;
+ node = pilotFile->customLabels;
+ while( node ) {
+ gchar *lbl = node->data;
+ gint ind = -1;
+ gint i;
+ for( i = 0; i < JPILOT_NUM_LABELS; i++ ) {
+ gchar *labelName = ai->labels[i];
+ gchar convertBuff[ JPILOT_LEN_LABEL ];
+
+ if( convert_charcode ) {
+ conv_sjistoeuc( convertBuff, JPILOT_LEN_LABEL, labelName );
+ labelName = convertBuff;
+ }
+
+ if( g_strcasecmp( labelName, lbl ) == 0 ) {
+ ind = i;
+ break;
+ }
+ }
+ pilotFile->labelInd = g_list_append( pilotFile->labelInd, GINT_TO_POINTER(ind) );
+ node = g_list_next( node );
+ }
+ retVal = TRUE;
+ }
+ return retVal;
+}
+
+/*
+* Load list with character strings of label names.
+*/
+GList *jpilot_load_label( JPilotFile *pilotFile, GList *labelList ) {
+ int i;
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ if( pilotFile->readMetadata ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ for( i = 0; i < JPILOT_NUM_LABELS; i++ ) {
+ gchar *labelName = ai->labels[i];
+ gchar convertBuff[JPILOT_LEN_LABEL];
+
+ if( labelName ) {
+ if( convert_charcode ) {
+ conv_sjistoeuc( convertBuff, JPILOT_LEN_LABEL, labelName );
+ labelName = convertBuff;
+ }
+ labelList = g_list_append( labelList, g_strdup( labelName ) );
+ }
+ else {
+ labelList = g_list_append( labelList, g_strdup( "" ) );
+ }
+ }
+ }
+ return labelList;
+}
+
+/*
+* Return category name for specified category ID.
+* Enter: Category ID.
+* Return: Name, or empty string if not invalid ID. Name should be g_free() when done.
+*/
+gchar *jpilot_get_category_name( JPilotFile *pilotFile, gint catID ) {
+ gchar *catName = NULL;
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ if( pilotFile->readMetadata ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ struct CategoryAppInfo *cat = & ai->category;
+ if( catID < 0 || catID > JPILOT_NUM_CATEG ) {
+ }
+ else {
+ catName = g_strdup( cat->name[catID] );
+ }
+ }
+ if( ! catName ) catName = g_strdup( "" );
+ return catName;
+}
+
+/*
+* Load list with character strings of phone label names.
+*/
+GList *jpilot_load_phone_label( JPilotFile *pilotFile, GList *labelList ) {
+ gint i;
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ if( pilotFile->readMetadata ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ for( i = 0; i < JPILOT_NUM_PHONELABELS; i++ ) {
+ gchar *labelName = ai->phoneLabels[i];
+ if( labelName ) {
+ labelList = g_list_append( labelList, g_strdup( labelName ) );
+ }
+ else {
+ labelList = g_list_append( labelList, g_strdup( "" ) );
+ }
+ }
+ }
+ return labelList;
+}
+
+/*
+* Load list with character strings of label names. Only none blank names
+* are loaded.
+*/
+GList *jpilot_load_custom_label( JPilotFile *pilotFile, GList *labelList ) {
+ gint i;
+ char convertBuff[JPILOT_LEN_LABEL];
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ if( pilotFile->readMetadata ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ for( i = 0; i < NUM_CUSTOM_LABEL; i++ ) {
+ gchar *labelName = ai->labels[i+IND_CUSTOM_LABEL];
+ if( labelName ) {
+ g_strchomp( labelName );
+ g_strchug( labelName );
+ if( *labelName != '\0' ) {
+ if( convert_charcode ) {
+ conv_sjistoeuc( convertBuff, JPILOT_LEN_LABEL, labelName );
+ labelName = convertBuff;
+ }
+ labelList = g_list_append( labelList, g_strdup( labelName ) );
+ }
+ }
+ }
+ }
+ return labelList;
+}
+
+/*
+* Load list with character strings of category names.
+*/
+GList *jpilot_get_category_list( JPilotFile *pilotFile ) {
+ GList *catList = NULL;
+ gint i;
+
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+
+ if( pilotFile->readMetadata ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ struct CategoryAppInfo *cat = & ai->category;
+ for( i = 0; i < JPILOT_NUM_CATEG; i++ ) {
+ gchar *catName = cat->name[i];
+ if( catName ) {
+ catList = g_list_append( catList, g_strdup( catName ) );
+ }
+ else {
+ catList = g_list_append( catList, g_strdup( "" ) );
+ }
+ }
+ }
+ return catList;
+}
+
+/*
+* Build folder for each category.
+*/
+static void jpilot_build_category_list( JPilotFile *pilotFile ) {
+ struct AddressAppInfo *ai = & pilotFile->addrInfo;
+ struct CategoryAppInfo *cat = & ai->category;
+ gint i;
+
+ for( i = 0; i < JPILOT_NUM_CATEG; i++ ) {
+ ItemFolder *folder = addritem_create_item_folder();
+
+ if( convert_charcode ) {
+ gchar catName[ JPILOT_LEN_CATEG ];
+ conv_sjistoeuc( catName, JPILOT_LEN_CATEG, cat->name[i] );
+ addritem_folder_set_name( folder, catName );
+ }
+ else {
+ addritem_folder_set_name( folder, cat->name[i] );
+ }
+
+ addrcache_id_folder( pilotFile->addressCache, folder );
+ addrcache_add_folder( pilotFile->addressCache, folder );
+ }
+}
+
+/*
+* Remove empty folders (categories).
+*/
+static void jpilot_remove_empty( JPilotFile *pilotFile ) {
+ GList *listFolder;
+ GList *remList;
+ GList *node;
+ gint i = 0;
+
+ listFolder = addrcache_get_list_folder( pilotFile->addressCache );
+ node = listFolder;
+ remList = NULL;
+ while( node ) {
+ ItemFolder *folder = node->data;
+ if( ADDRITEM_NAME(folder) == NULL || *ADDRITEM_NAME(folder) == '\0' ) {
+ if( folder->listPerson ) {
+ /* Give name to folder */
+ gchar name[20];
+ sprintf( name, "? %d", i );
+ addritem_folder_set_name( folder, name );
+ }
+ else {
+ /* Mark for removal */
+ remList = g_list_append( remList, folder );
+ }
+ }
+ node = g_list_next( node );
+ i++;
+ }
+ node = remList;
+ while( node ) {
+ ItemFolder *folder = node->data;
+ addrcache_remove_folder( pilotFile->addressCache, folder );
+ node = g_list_next( node );
+ }
+ g_list_free( remList );
+}
+
+/*
+* ============================================================================================
+* Read file into list. Main entry point
+* Return: TRUE if file read successfully.
+* ============================================================================================
+*/
+gint jpilot_read_data( JPilotFile *pilotFile ) {
+ const gchar *cur_locale;
+
+ name_order = FAMILY_LAST;
+ convert_charcode = FALSE;
+
+ cur_locale = conv_get_current_locale();
+
+ if( g_strncasecmp( cur_locale, "ja", 2 ) == 0 ) {
+ name_order = FAMILY_FIRST;
+ }
+
+ if( conv_get_locale_charset() == C_EUC_JP ) {
+ convert_charcode = TRUE;
+ }
+
+ g_return_val_if_fail( pilotFile != NULL, -1 );
+
+ pilotFile->retVal = MGU_SUCCESS;
+ pilotFile->accessFlag = FALSE;
+
+ if( jpilot_check_files( pilotFile ) ) {
+ addrcache_clear( pilotFile->addressCache );
+ jpilot_read_metadata( pilotFile );
+ if( pilotFile->retVal == MGU_SUCCESS ) {
+ jpilot_setup_labels( pilotFile );
+ jpilot_build_category_list( pilotFile );
+ pilotFile->retVal = jpilot_read_file( pilotFile );
+ if( pilotFile->retVal == MGU_SUCCESS ) {
+ jpilot_remove_empty( pilotFile );
+ jpilot_mark_files( pilotFile );
+ pilotFile->addressCache->modified = FALSE;
+ pilotFile->addressCache->dataRead = TRUE;
+ }
+ }
+ }
+ return pilotFile->retVal;
+}
+
+/*
+* Return link list of persons.
+*/
+GList *jpilot_get_list_person( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+ return addrcache_get_list_person( pilotFile->addressCache );
+}
+
+/*
+* Return link list of folders. This is always NULL since there are
+* no folders in GnomeCard.
+* Return: NULL.
+*/
+GList *jpilot_get_list_folder( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+ return addrcache_get_list_folder( pilotFile->addressCache );
+}
+
+/*
+* Return link list of all persons. Note that the list contains references
+* to items. Do *NOT* attempt to use the addrbook_free_xxx() functions...
+* this will destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *jpilot_get_all_persons( JPilotFile *pilotFile ) {
+ g_return_val_if_fail( pilotFile != NULL, NULL );
+ return addrcache_get_all_persons( pilotFile->addressCache );
+}
+
+/*
+* Check label list for specified label.
+*/
+gint jpilot_check_label( struct AddressAppInfo *ai, gchar *lblCheck ) {
+ gint i;
+ gchar *lblName;
+
+ if( lblCheck == NULL ) return -1;
+ if( strlen( lblCheck ) < 1 ) return -1;
+ for( i = 0; i < JPILOT_NUM_LABELS; i++ ) {
+ lblName = ai->labels[i];
+ if( lblName ) {
+ if( strlen( lblName ) ) {
+ if( g_strcasecmp( lblName, lblCheck ) == 0 ) return i;
+ }
+ }
+ }
+ return -2;
+}
+
+/*
+* Validate that all parameters specified.
+* Return: TRUE if data is good.
+*/
+gboolean jpilot_validate( const JPilotFile *pilotFile ) {
+ gboolean retVal;
+
+ g_return_val_if_fail( pilotFile != NULL, FALSE );
+
+ retVal = TRUE;
+ if( pilotFile->path ) {
+ if( strlen( pilotFile->path ) < 1 ) retVal = FALSE;
+ }
+ else {
+ retVal = FALSE;
+ }
+ if( pilotFile->name ) {
+ if( strlen( pilotFile->name ) < 1 ) retVal = FALSE;
+ }
+ else {
+ retVal = FALSE;
+ }
+ return retVal;
+}
+
+#define WORK_BUFLEN 1024
+
+/*
+* Attempt to find a valid JPilot file.
+* Return: Filename, or home directory if not found, or empty string if
+* no home. Filename should be g_free() when done.
+*/
+gchar *jpilot_find_pilotdb( void ) {
+ gchar *homedir;
+ gchar str[ WORK_BUFLEN ];
+ gint len;
+ FILE *fp;
+
+ homedir = g_get_home_dir();
+ if( ! homedir ) return g_strdup( "" );
+
+ strcpy( str, homedir );
+ len = strlen( str );
+ if( len > 0 ) {
+ if( str[ len-1 ] != G_DIR_SEPARATOR ) {
+ str[ len ] = G_DIR_SEPARATOR;
+ str[ ++len ] = '\0';
+ }
+ }
+ strcat( str, JPILOT_DBHOME_DIR );
+ strcat( str, G_DIR_SEPARATOR_S );
+ strcat( str, JPILOT_DBHOME_FILE );
+
+ /* Attempt to open */
+ if( ( fp = fopen( str, "rb" ) ) != NULL ) {
+ fclose( fp );
+ }
+ else {
+ /* Truncate filename */
+ str[ len ] = '\0';
+ }
+ return g_strdup( str );
+}
+
+/*
+* Attempt to read file, testing for valid JPilot format.
+* Return: TRUE if file appears to be valid format.
+*/
+gint jpilot_test_read_file( const gchar *fileSpec ) {
+ JPilotFile *pilotFile;
+ gint retVal;
+
+ if( fileSpec ) {
+ pilotFile = jpilot_create_path( fileSpec );
+ retVal = jpilot_read_metadata( pilotFile );
+ jpilot_free( pilotFile );
+ pilotFile = NULL;
+ }
+ else {
+ retVal = MGU_NO_FILE;
+ }
+ return retVal;
+}
+
+/*
+* Check whether label is in custom labels.
+* Return: TRUE if found.
+*/
+gboolean jpilot_test_custom_label( JPilotFile *pilotFile, const gchar *labelName ) {
+ gboolean retVal;
+ GList *node;
+
+ g_return_val_if_fail( pilotFile != NULL, FALSE );
+
+ retVal = FALSE;
+ if( labelName ) {
+ node = pilotFile->customLabels;
+ while( node ) {
+ if( g_strcasecmp( labelName, node->data ) == 0 ) {
+ retVal = TRUE;
+ break;
+ }
+ node = g_list_next( node );
+ }
+ }
+ return retVal;
+}
+
+/*
+* Test whether pilot link library installed.
+* Return: TRUE if library available.
+*/
+#if 0
+gboolean jpilot_test_pilot_lib( void ) {
+ void *handle, *fun;
+
+ handle = dlopen( PILOT_LINK_LIB_NAME, RTLD_LAZY );
+ if( ! handle ) {
+ return FALSE;
+ }
+
+ /* Test for symbols we need */
+ fun = dlsym( handle, "unpack_Address" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+
+ fun = dlsym( handle, "unpack_AddressAppInfo" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+ dlclose( handle );
+ return TRUE;
+}
+#endif /* 0 */
+
+#endif /* USE_JPILOT */
+
+/*
+* End of Source.
+*/
diff --git a/src/jpilot.h b/src/jpilot.h
new file mode 100644
index 00000000..b1ddada3
--- /dev/null
+++ b/src/jpilot.h
@@ -0,0 +1,116 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions for accessing JPilot database files.
+ * JPilot is Copyright(c) by Judd Montgomery.
+ * Visit http://www.jpilot.org for more details.
+ */
+
+#ifndef __JPILOT_H__
+#define __JPILOT_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_JPILOT
+
+#include <glib.h>
+#include <stdio.h>
+
+#ifdef HAVE_LIBPISOCK_PI_ADDRESS_H
+# include <libpisock/pi-address.h>
+#else
+# include <pi-address.h>
+#endif
+
+#include "addritem.h"
+#include "addrcache.h"
+
+typedef struct _JPilotFile JPilotFile;
+
+struct _JPilotFile {
+ gchar *name;
+ FILE *file;
+ gchar *path;
+ AddressCache *addressCache;
+ struct AddressAppInfo addrInfo;
+ gboolean readMetadata;
+ GList *customLabels;
+ GList *labelInd;
+ gint retVal;
+ gboolean accessFlag;
+ gboolean havePC3;
+ time_t pc3ModifyTime;
+};
+
+/* Limits */
+#define JPILOT_NUM_LABELS 22 /* Number of labels */
+#define JPILOT_NUM_PHONELABELS 8 /* Number of phone number labels */
+#define JPILOT_NUM_CATEG 16 /* Number of categories */
+#define JPILOT_LEN_LABEL 15 /* Max length of label */
+#define JPILOT_LEN_CATEG 15 /* Max length of category */
+#define JPILOT_NUM_ADDR_PHONE 5 /* Number of phone entries a person
+ can have */
+
+/* Function prototypes */
+JPilotFile *jpilot_create ( void );
+JPilotFile *jpilot_create_path ( const gchar *path );
+void jpilot_set_name ( JPilotFile* pilotFile, const gchar *value );
+void jpilot_set_file ( JPilotFile* pilotFile, const gchar *value );
+void jpilot_free ( JPilotFile *pilotFile );
+gint jpilot_get_status ( JPilotFile *pilotFile );
+gboolean jpilot_get_modified ( JPilotFile *pilotFile );
+gboolean jpilot_get_accessed ( JPilotFile *pilotFile );
+void jpilot_set_accessed ( JPilotFile *pilotFile, const gboolean value );
+gboolean jpilot_get_read_flag ( JPilotFile *pilotFile );
+ItemFolder *jpilot_get_root_folder ( JPilotFile *pilotFile );
+gchar *jpilot_get_name ( JPilotFile *pilotFile );
+
+void jpilot_force_refresh ( JPilotFile *pilotFile );
+void jpilot_print_file ( JPilotFile *jpilotFile, FILE *stream );
+void jpilot_print_short ( JPilotFile *pilotFile, FILE *stream );
+gint jpilot_read_data ( JPilotFile *pilotFile );
+GList *jpilot_get_list_person ( JPilotFile *pilotFile );
+GList *jpilot_get_list_folder ( JPilotFile *pilotFile );
+GList *jpilot_get_all_persons ( JPilotFile *pilotFile );
+
+GList *jpilot_load_label ( JPilotFile *pilotFile, GList *labelList );
+GList *jpilot_get_category_list ( JPilotFile *pilotFile );
+gchar *jpilot_get_category_name ( JPilotFile *pilotFile, gint catID );
+GList *jpilot_load_phone_label ( JPilotFile *pilotFile, GList *labelList );
+GList *jpilot_load_custom_label ( JPilotFile *pilotFile, GList *labelList );
+
+gboolean jpilot_validate ( const JPilotFile *pilotFile );
+gchar *jpilot_find_pilotdb ( void );
+
+gint jpilot_test_read_file ( const gchar *fileSpec );
+
+void jpilot_clear_custom_labels ( JPilotFile *pilotFile );
+void jpilot_add_custom_label ( JPilotFile *pilotFile, const gchar *labelName );
+GList *jpilot_get_custom_labels ( JPilotFile *pilotFile );
+gboolean jpilot_test_custom_label ( JPilotFile *pilotFile, const gchar *labelName );
+/* gboolean jpilot_test_pilot_lib ( void ); */
+
+gint jpilot_read_modified ( JPilotFile *pilotFile );
+
+#endif /* USE_JPILOT */
+
+#endif /* __JPILOT_H__ */
diff --git a/src/ldif.c b/src/ldif.c
new file mode 100644
index 00000000..cae15b10
--- /dev/null
+++ b/src/ldif.c
@@ -0,0 +1,933 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Functions necessary to access LDIF files (LDAP Data Interchange Format
+ * files).
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "mgutils.h"
+#include "ldif.h"
+#include "addritem.h"
+#include "addrcache.h"
+
+#include "base64.h"
+
+/*
+* Create new object.
+*/
+LdifFile *ldif_create() {
+ LdifFile *ldifFile;
+ ldifFile = g_new0( LdifFile, 1 );
+ ldifFile->path = NULL;
+ ldifFile->file = NULL;
+ ldifFile->bufptr = ldifFile->buffer;
+ ldifFile->hashFields = g_hash_table_new( g_str_hash, g_str_equal );
+ ldifFile->tempList = NULL;
+ ldifFile->dirtyFlag = TRUE;
+ ldifFile->accessFlag = FALSE;
+ ldifFile->retVal = MGU_SUCCESS;
+ ldifFile->cbProgress = NULL;
+ ldifFile->importCount = 0;
+ return ldifFile;
+}
+
+/*
+* Properties...
+*/
+void ldif_set_file( LdifFile *ldifFile, const gchar *value ) {
+ g_return_if_fail( ldifFile != NULL );
+
+ if( ldifFile->path ) {
+ if( strcmp( ldifFile->path, value ) != 0 )
+ ldifFile->dirtyFlag = TRUE;
+ }
+ else {
+ ldifFile->dirtyFlag = TRUE;
+ }
+ ldifFile->path = mgu_replace_string( ldifFile->path, value );
+ g_strstrip( ldifFile->path );
+ ldifFile->importCount = 0;
+}
+void ldif_set_accessed( LdifFile *ldifFile, const gboolean value ) {
+ g_return_if_fail( ldifFile != NULL );
+ ldifFile->accessFlag = value;
+}
+
+/*
+* Register a callback function. When called, the function will be passed
+* the following arguments:
+* LdifFile object,
+* File size (long),
+* Current position (long)
+* This can be used for a progress indicator.
+*/
+void ldif_set_callback( LdifFile *ldifFile, void *func ) {
+ ldifFile->cbProgress = func;
+}
+
+/*
+* Create field record object.
+*/
+static Ldif_FieldRec *ldif_create_fieldrec( gchar *field ) {
+ Ldif_FieldRec *rec = g_new0( Ldif_FieldRec, 1 );
+ rec->tagName = g_strdup( field );
+ rec->userName = NULL;
+ rec->reserved = FALSE;
+ rec->selected = FALSE;
+ return rec;
+}
+
+/*
+* Free field record object.
+*/
+static void ldif_free_fieldrec( Ldif_FieldRec *rec ) {
+ if( rec ) {
+ g_free( rec->tagName );
+ g_free( rec->userName );
+ rec->tagName = NULL;
+ rec->userName = NULL;
+ rec->reserved = FALSE;
+ rec->selected = FALSE;
+ g_free( rec );
+ }
+}
+
+/*
+* Free hash table entry visitor function.
+*/
+static gint ldif_hash_free_vis( gpointer key, gpointer value, gpointer data ) {
+ ldif_free_fieldrec( ( Ldif_FieldRec * ) value );
+ value = NULL;
+ key = NULL;
+ return -1;
+}
+
+/*
+* Free up object by releasing internal memory.
+*/
+void ldif_free( LdifFile *ldifFile ) {
+ g_return_if_fail( ldifFile != NULL );
+
+ /* Close file */
+ if( ldifFile->file ) fclose( ldifFile->file );
+
+ /* Free internal stuff */
+ g_free( ldifFile->path );
+
+ /* Free field list */
+ g_hash_table_foreach_remove( ldifFile->hashFields, ldif_hash_free_vis, NULL );
+ g_hash_table_destroy( ldifFile->hashFields );
+ ldifFile->hashFields = NULL;
+
+ /* Clear pointers */
+ ldifFile->file = NULL;
+ ldifFile->path = NULL;
+ ldifFile->retVal = MGU_SUCCESS;
+ ldifFile->tempList = NULL;
+ ldifFile->dirtyFlag = FALSE;
+ ldifFile->accessFlag = FALSE;
+ ldifFile->cbProgress = NULL;
+
+ /* Now release file object */
+ g_free( ldifFile );
+}
+
+/*
+* Display field record.
+*/
+void ldif_print_fieldrec( Ldif_FieldRec *rec, FILE *stream ) {
+ fprintf( stream, "\ttag:\t%s", rec->reserved ? "yes" : "no" );
+ fprintf( stream, "\t%s", rec->selected ? "yes" : "no" );
+ fprintf( stream, "\t:%s:\t:%s:\n", rec->userName, rec->tagName );
+}
+
+/*
+* Display field record.
+ *
+*/
+static void ldif_print_file_vis( gpointer key, gpointer value, gpointer data ) {
+ Ldif_FieldRec *rec = value;
+ FILE *stream = data;
+ ldif_print_fieldrec( rec, stream );
+}
+
+/*
+* Display object to specified stream.
+*/
+void ldif_print_file( LdifFile *ldifFile, FILE *stream ) {
+ g_return_if_fail( ldifFile != NULL );
+ fprintf( stream, "LDIF File:\n" );
+ fprintf( stream, "file spec: '%s'\n", ldifFile->path );
+ fprintf( stream, " ret val: %d\n", ldifFile->retVal );
+ fprintf( stream, " fields: {\n" );
+ g_hash_table_foreach( ldifFile->hashFields, ldif_print_file_vis, stream );
+ fprintf( stream, "} ---\n" );
+}
+
+/*
+* Open file for read.
+* return: TRUE if file opened successfully.
+*/
+static gint ldif_open_file( LdifFile* ldifFile ) {
+ /* printf( "Opening file\n" ); */
+ if( ldifFile->path ) {
+ ldifFile->file = fopen( ldifFile->path, "rb" );
+ if( ! ldifFile->file ) {
+ /* printf( "can't open %s\n", ldifFile->path ); */
+ ldifFile->retVal = MGU_OPEN_FILE;
+ return ldifFile->retVal;
+ }
+ }
+ else {
+ /* printf( "file not specified\n" ); */
+ ldifFile->retVal = MGU_NO_FILE;
+ return ldifFile->retVal;
+ }
+
+ /* Setup a buffer area */
+ ldifFile->buffer[0] = '\0';
+ ldifFile->bufptr = ldifFile->buffer;
+ ldifFile->retVal = MGU_SUCCESS;
+ return ldifFile->retVal;
+}
+
+/*
+* Close file.
+*/
+static void ldif_close_file( LdifFile *ldifFile ) {
+ g_return_if_fail( ldifFile != NULL );
+ if( ldifFile->file ) fclose( ldifFile->file );
+ ldifFile->file = NULL;
+}
+
+/*
+* Read line of text from file.
+* Return: ptr to buffer where line starts.
+*/
+static gchar *ldif_get_line( LdifFile *ldifFile ) {
+ gchar buf[ LDIFBUFSIZE ];
+ gint ch;
+ gchar *ptr;
+
+ if( feof( ldifFile->file ) ) return NULL;
+
+ ptr = buf;
+ while( TRUE ) {
+ *ptr = '\0';
+ ch = fgetc( ldifFile->file );
+ if( ch == '\0' || ch == EOF ) {
+ if( *buf == '\0' ) return NULL;
+ break;
+ }
+#if HAVE_DOSISH_SYSTEM
+#else
+ if( ch == '\r' ) continue;
+#endif
+ if( ch == '\n' ) break;
+ *ptr = ch;
+ ptr++;
+ }
+
+ /* Return a copy of buffer */
+ return g_strdup( buf );
+}
+
+/*
+* Parse tag name from line buffer.
+* Enter: line Buffer.
+* flag64 Base-64 encoder flag.
+* Return: Buffer containing the tag name, or NULL if no delimiter char found.
+* If a double delimiter (::) is found, flag64 is set.
+*/
+static gchar *ldif_get_tagname( char* line, gboolean *flag64 ) {
+ gint len = 0;
+ gchar *tag = NULL;
+ gchar *lptr = line;
+ gchar *sptr = NULL;
+
+ while( *lptr++ ) {
+ /* Check for language tag */
+ if( *lptr == LDIF_LANG_TAG ) {
+ if( sptr == NULL ) sptr = lptr;
+ }
+
+ /* Check for delimiter */
+ if( *lptr == LDIF_SEP_TAG ) {
+ if( sptr ) {
+ len = sptr - line;
+ }
+ else {
+ len = lptr - line;
+ }
+
+ /* Base-64 encoding? */
+ if( * ++lptr == LDIF_SEP_TAG ) *flag64 = TRUE;
+
+ tag = g_strndup( line, len+1 );
+ tag[ len ] = '\0';
+ g_strdown( tag );
+ return tag;
+ }
+ }
+ return tag;
+}
+
+/*
+* Parse tag value from line buffer.
+* Enter: line Buffer.
+* Return: Buffer containing the tag value. Empty string is returned if
+* no delimiter char found.
+*/
+static gchar *ldif_get_tagvalue( gchar* line ) {
+ gchar *value = NULL;
+ gchar *start = NULL;
+ gchar *lptr;
+ gint len = 0;
+
+ for( lptr = line; *lptr; lptr++ ) {
+ if( *lptr == LDIF_SEP_TAG ) {
+ if( ! start )
+ start = lptr + 1;
+ }
+ }
+ if( start ) {
+ if( *start == LDIF_SEP_TAG ) start++;
+ len = lptr - start;
+ value = g_strndup( start, len+1 );
+ g_strstrip( value );
+ }
+ else {
+ /* Ensure that we get an empty string */
+ value = g_strndup( "", 1 );
+ }
+ value[ len ] = '\0';
+ return value;
+}
+
+#if 0
+/*
+* Dump linked lists of character strings (for debug).
+*/
+static void ldif_dump_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID, FILE *stream ) {
+ fprintf( stream, "dump name\n" );
+ fprintf( stream, "------------\n" );
+ mgu_print_list( listName, stdout );
+ fprintf( stream, "dump address\n" );
+ fprintf( stream, "------------\n" );
+ mgu_print_list( listAddr, stdout );
+ fprintf( stream, "dump remarks\n" );
+ fprintf( stdout, "------------\n" );
+ mgu_print_list( listRem, stdout );
+ fprintf( stream, "dump id\n" );
+ fprintf( stdout, "------------\n" );
+ mgu_print_list( listID, stdout );
+}
+#endif
+
+/*
+* Parsed address data.
+*/
+typedef struct _Ldif_ParsedRec_ Ldif_ParsedRec;
+struct _Ldif_ParsedRec_ {
+ GSList *listCName;
+ GSList *listFName;
+ GSList *listLName;
+ GSList *listNName;
+ GSList *listAddress;
+ GSList *listID;
+ GSList *userAttr;
+};
+
+/*
+* User attribute data.
+*/
+typedef struct _Ldif_UserAttr_ Ldif_UserAttr;
+struct _Ldif_UserAttr_ {
+ gchar *name;
+ gchar *value;
+};
+
+/*
+* Build an address list entry and append to list of address items. Name is formatted
+* as "<first-name> <last-name>".
+*/
+static void ldif_build_items( LdifFile *ldifFile, Ldif_ParsedRec *rec, AddressCache *cache ) {
+ GSList *nodeFirst;
+ GSList *nodeAddress;
+ GSList *nodeAttr;
+ gchar *firstName = NULL, *lastName = NULL, *fullName = NULL, *nickName = NULL;
+ gint iLen = 0, iLenT = 0;
+ ItemPerson *person;
+ ItemEMail *email;
+
+ nodeAddress = rec->listAddress;
+ if( nodeAddress == NULL ) return;
+
+ /* Find longest first name in list */
+ nodeFirst = rec->listFName;
+ while( nodeFirst ) {
+ if( firstName == NULL ) {
+ firstName = nodeFirst->data;
+ iLen = strlen( firstName );
+ }
+ else {
+ if( ( iLenT = strlen( nodeFirst->data ) ) > iLen ) {
+ firstName = nodeFirst->data;
+ iLen = iLenT;
+ }
+ }
+ nodeFirst = g_slist_next( nodeFirst );
+ }
+
+ /* Format name */
+ if( rec->listLName ) {
+ lastName = rec->listLName->data;
+ }
+
+ if( firstName ) {
+ if( lastName ) {
+ fullName = g_strdup_printf( "%s %s", firstName, lastName );
+ }
+ else {
+ fullName = g_strdup_printf( "%s", firstName );
+ }
+ }
+ else {
+ if( lastName ) {
+ fullName = g_strdup_printf( "%s", lastName );
+ }
+ }
+ if( fullName ) {
+ g_strchug( fullName ); g_strchomp( fullName );
+ }
+
+ if( rec->listNName ) {
+ nickName = rec->listNName->data;
+ }
+
+ person = addritem_create_item_person();
+ addritem_person_set_common_name( person, fullName );
+ addritem_person_set_first_name( person, firstName );
+ addritem_person_set_last_name( person, lastName );
+ addritem_person_set_nick_name( person, nickName );
+ addrcache_id_person( cache, person );
+ addrcache_add_person( cache, person );
+ ++ldifFile->importCount;
+
+ /* Add address item */
+ while( nodeAddress ) {
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, nodeAddress->data );
+ addrcache_id_email( cache, email );
+ addrcache_person_add_email( cache, person, email );
+ nodeAddress = g_slist_next( nodeAddress );
+ }
+ g_free( fullName );
+ fullName = firstName = lastName = NULL;
+
+ /* Add user attributes */
+ nodeAttr = rec->userAttr;
+ while( nodeAttr ) {
+ Ldif_UserAttr *attr = nodeAttr->data;
+ UserAttribute *attrib = addritem_create_attribute();
+ addritem_attrib_set_name( attrib, attr->name );
+ addritem_attrib_set_value( attrib, attr->value );
+ addritem_person_add_attribute( person, attrib );
+ nodeAttr = g_slist_next( nodeAttr );
+ }
+ nodeAttr = NULL;
+}
+
+/*
+* Add selected field as user attribute.
+*/
+static void ldif_add_user_attr( Ldif_ParsedRec *rec, gchar *tagName, gchar *tagValue, GHashTable *hashField ) {
+ Ldif_FieldRec *fld = NULL;
+ Ldif_UserAttr *attr = NULL;
+ gchar *name;
+
+ fld = g_hash_table_lookup( hashField, tagName );
+ if( fld ) {
+ if( fld->reserved ) return;
+ if( ! fld->selected ) return;
+
+ name = fld->tagName;
+ if( fld->userName ) {
+ name = fld->userName;
+ }
+ attr = g_new0( Ldif_UserAttr, 1 );
+ attr->name = g_strdup( name );
+ attr->value = g_strdup( tagValue );
+ rec->userAttr = g_slist_append( rec->userAttr, attr );
+ }
+}
+
+/*
+* Add value to parsed data.
+*/
+static void ldif_add_value( Ldif_ParsedRec *rec, gchar *tagName, gchar *tagValue, GHashTable *hashField ) {
+ gchar *nm, *val;
+
+ nm = g_strdup( tagName );
+ g_strdown( nm );
+ if( tagValue ) {
+ val = g_strdup( tagValue );
+ }
+ else {
+ val = g_strdup( "" );
+ }
+ g_strstrip( val );
+ if( g_strcasecmp( nm, LDIF_TAG_COMMONNAME ) == 0 ) {
+ rec->listCName = g_slist_append( rec->listCName, val );
+ }
+ else if( g_strcasecmp( nm, LDIF_TAG_FIRSTNAME ) == 0 ) {
+ rec->listFName = g_slist_append( rec->listFName, val );
+ }
+ else if( g_strcasecmp( nm, LDIF_TAG_LASTNAME ) == 0 ) {
+ rec->listLName = g_slist_append( rec->listLName, val );
+ }
+ else if( g_strcasecmp( nm, LDIF_TAG_NICKNAME ) == 0 ) {
+ rec->listNName = g_slist_append( rec->listNName, val );
+ }
+ else if( g_strcasecmp( nm, LDIF_TAG_EMAIL ) == 0 ) {
+ rec->listAddress = g_slist_append( rec->listAddress, val );
+ }
+ else {
+ /* Add field as user attribute */
+ ldif_add_user_attr( rec, tagName, tagValue, hashField );
+ }
+ g_free( nm );
+}
+
+/*
+* Clear parsed data.
+*/
+static void ldif_clear_rec( Ldif_ParsedRec *rec ) {
+ GSList *list;
+
+ /* Free up user attributes */
+ list = rec->userAttr;
+ while( list ) {
+ Ldif_UserAttr *attr = list->data;
+ g_free( attr->name );
+ g_free( attr->value );
+ g_free( attr );
+ list = g_slist_next( list );
+ }
+ g_slist_free( rec->userAttr );
+
+ g_slist_free( rec->listCName );
+ g_slist_free( rec->listFName );
+ g_slist_free( rec->listLName );
+ g_slist_free( rec->listNName );
+ g_slist_free( rec->listAddress );
+ g_slist_free( rec->listID );
+
+ rec->userAttr = NULL;
+ rec->listCName = NULL;
+ rec->listFName = NULL;
+ rec->listLName = NULL;
+ rec->listNName = NULL;
+ rec->listAddress = NULL;
+ rec->listID = NULL;
+}
+
+#if 0
+/*
+* Print parsed data.
+*/
+static void ldif_print_record( Ldif_ParsedRec *rec, FILE *stream ) {
+ GSList *list;
+
+ fprintf( stream, "LDIF Parsed Record:\n" );
+ fprintf( stream, "common name:" );
+ mgu_print_list( rec->listCName, stream );
+ if( ! rec->listCName ) fprintf( stream, "\n" );
+ fprintf( stream, "first name:" );
+ mgu_print_list( rec->listFName, stream );
+ if( ! rec->listFName ) fprintf( stream, "\n" );
+ fprintf( stream, "last name:" );
+ mgu_print_list( rec->listLName, stream );
+ if( ! rec->listLName ) fprintf( stream, "\n" );
+ fprintf( stream, "nick name:" );
+ mgu_print_list( rec->listNName, stream );
+ if( ! rec->listNName ) fprintf( stream, "\n" );
+ fprintf( stream, "address:" );
+ mgu_print_list( rec->listAddress, stream );
+ if( ! rec->listAddress ) fprintf( stream, "\n" );
+ fprintf( stream, "id:" );
+ mgu_print_list( rec->listID, stream );
+ if( ! rec->listID ) fprintf( stream, "\n" );
+
+ list = rec->userAttr;
+ while( list ) {
+ Ldif_UserAttr *attr = list->data;
+ fprintf( stream, "n/v:\t%s:\t:%s:\n", attr->name, attr->value );
+ list = g_slist_next( list );
+ }
+ list = NULL;
+}
+
+static void ldif_dump_b64( gchar *buf ) {
+ Base64Decoder *decoder = NULL;
+ gchar outBuf[8192];
+ gint len;
+
+ printf( "base-64 : inbuf : %s\n", buf );
+ decoder = base64_decoder_new();
+ len = base64_decoder_decode( decoder, buf, outBuf );
+ if (len < 0) {
+ printf( "base-64 : Bad BASE64 content\n" );
+ }
+ else {
+ outBuf[len] = '\0';
+ printf( "base-64 : %d : %s\n\n", len, outBuf );
+ }
+ base64_decoder_free( decoder );
+ decoder = NULL;
+}
+#endif
+
+/*
+* Read file data into address cache.
+* Note that one LDIF record identifies one entity uniquely with the
+* distinguished name (dn) tag. Each person can have multiple E-Mail
+* addresses. Also, each person can have many common name (cn) tags.
+*/
+static void ldif_read_file( LdifFile *ldifFile, AddressCache *cache ) {
+ gchar *tagName = NULL, *tagValue = NULL;
+ gchar *lastTag = NULL, *fullValue = NULL;
+ GSList *listValue = NULL;
+ gboolean flagEOF = FALSE, flagEOR = FALSE;
+ gboolean flag64 = FALSE, last64 = FALSE;
+ Ldif_ParsedRec *rec;
+ long posEnd = 0L;
+ long posCur = 0L;
+ GHashTable *hashField;
+
+ hashField = ldifFile->hashFields;
+ rec = g_new0( Ldif_ParsedRec, 1 );
+ ldif_clear_rec( rec );
+
+ /* Find EOF for progress indicator */
+ fseek( ldifFile->file, 0L, SEEK_END );
+ posEnd = ftell( ldifFile->file );
+ fseek( ldifFile->file, 0L, SEEK_SET );
+
+ while( ! flagEOF ) {
+ gchar *line = ldif_get_line( ldifFile );
+
+ posCur = ftell( ldifFile->file );
+ if( ldifFile->cbProgress ) {
+ /* Call progress indicator */
+ ( ldifFile->cbProgress ) ( ldifFile, & posEnd, & posCur );
+ }
+
+ flag64 = FALSE;
+ if( line == NULL ) {
+ flagEOF = flagEOR = TRUE;
+ }
+ else if( *line == '\0' ) {
+ flagEOR = TRUE;
+ }
+
+ if( flagEOR ) {
+ /* EOR, Output address data */
+ if( lastTag ) {
+ /* Save record */
+ fullValue = mgu_list_coalesce( listValue );
+
+ /* Base-64 encoded data */
+ /*
+ if( last64 ) {
+ ldif_dump_b64( fullValue );
+ }
+ */
+
+ ldif_add_value( rec, lastTag, fullValue, hashField );
+ /* ldif_print_record( rec, stdout ); */
+ ldif_build_items( ldifFile, rec, cache );
+ ldif_clear_rec( rec );
+ g_free( lastTag );
+ mgu_free_list( listValue );
+ lastTag = NULL;
+ listValue = NULL;
+ last64 = FALSE;
+ }
+ }
+ if( line ) {
+ flagEOR = FALSE;
+ if( *line == ' ' ) {
+ /* Continuation line */
+ listValue = g_slist_append( listValue, g_strdup( line+1 ) );
+ }
+ else if( *line == '=' ) {
+ /* Base-64 encoded continuation field */
+ listValue = g_slist_append( listValue, g_strdup( line ) );
+ }
+ else {
+ /* Parse line */
+ tagName = ldif_get_tagname( line, &flag64 );
+ if( tagName ) {
+ tagValue = ldif_get_tagvalue( line );
+ if( tagValue ) {
+ if( lastTag ) {
+ /* Save data */
+ fullValue = mgu_list_coalesce( listValue );
+ /* Base-64 encoded data */
+ /*
+ if( last64 ) {
+ ldif_dump_b64( fullValue );
+ }
+ */
+
+ ldif_add_value( rec, lastTag, fullValue, hashField );
+ g_free( lastTag );
+ mgu_free_list( listValue );
+ lastTag = NULL;
+ listValue = NULL;
+ last64 = FALSE;
+ }
+
+ lastTag = g_strdup( tagName );
+ listValue = g_slist_append( listValue, g_strdup( tagValue ) );
+ g_free( tagValue );
+ last64 = flag64;
+ }
+ g_free( tagName );
+ }
+ }
+ }
+ g_free( line );
+ }
+
+ /* Release data */
+ ldif_clear_rec( rec );
+ g_free( rec );
+ g_free( lastTag );
+ mgu_free_list( listValue );
+}
+
+/*
+* Add list of field names to hash table.
+*/
+static void ldif_hash_add_list( GHashTable *table, GSList *list ) {
+ GSList *node = list;
+
+ /* mgu_print_list( list, stdout ); */
+ while( node ) {
+ gchar *tag = node->data;
+ if( ! g_hash_table_lookup( table, tag ) ) {
+ Ldif_FieldRec *rec = NULL;
+ gchar *key = g_strdup( tag );
+
+ rec = ldif_create_fieldrec( tag );
+ if( g_strcasecmp( tag, LDIF_TAG_COMMONNAME ) == 0 ) {
+ rec->reserved = TRUE;
+ }
+ else if( g_strcasecmp( tag, LDIF_TAG_FIRSTNAME ) == 0 ) {
+ rec->reserved = TRUE;
+ }
+ else if( g_strcasecmp( tag, LDIF_TAG_LASTNAME ) == 0 ) {
+ rec->reserved = TRUE;
+ }
+ else if( g_strcasecmp( tag, LDIF_TAG_NICKNAME ) == 0 ) {
+ rec->reserved = TRUE;
+ }
+ else if( g_strcasecmp( tag, LDIF_TAG_EMAIL ) == 0 ) {
+ rec->reserved = TRUE;
+ }
+ g_hash_table_insert( table, key, rec );
+ }
+ node = g_slist_next( node );
+ }
+}
+
+/*
+* Sorted list comparison function.
+*/
+static int ldif_field_compare( gconstpointer ptr1, gconstpointer ptr2 ) {
+ const Ldif_FieldRec *rec1 = ptr1;
+ const Ldif_FieldRec *rec2 = ptr2;
+ return g_strcasecmp( rec1->tagName, rec2->tagName );
+}
+
+/*
+* Append hash table entry to list - visitor function.
+*/
+static void ldif_hash2list_vis( gpointer key, gpointer value, gpointer data ) {
+ LdifFile *ldf = data;
+ ldf->tempList = g_list_insert_sorted( ldf->tempList, value, ldif_field_compare );
+}
+
+/*
+* Read tag names for file data.
+*/
+static void ldif_read_tag_list( LdifFile *ldifFile ) {
+ gchar *tagName = NULL;
+ GSList *listTags = NULL;
+ gboolean flagEOF = FALSE, flagEOR = FALSE, flagMail = FALSE;
+ gboolean flag64 = FALSE;
+ long posEnd = 0L;
+ long posCur = 0L;
+
+ /* Clear hash table */
+ g_hash_table_foreach_remove( ldifFile->hashFields, ldif_hash_free_vis, NULL );
+
+ /* Find EOF for progress indicator */
+ fseek( ldifFile->file, 0L, SEEK_END );
+ posEnd = ftell( ldifFile->file );
+ fseek( ldifFile->file, 0L, SEEK_SET );
+
+ /* Process file */
+ while( ! flagEOF ) {
+ gchar *line = ldif_get_line( ldifFile );
+
+ posCur = ftell( ldifFile->file );
+ if( ldifFile->cbProgress ) {
+ /* Call progress indicator */
+ ( ldifFile->cbProgress ) ( ldifFile, & posEnd, & posCur );
+ }
+
+ flag64 = FALSE;
+ if( line == NULL ) {
+ flagEOF = flagEOR = TRUE;
+ }
+ else if( *line == '\0' ) {
+ flagEOR = TRUE;
+ }
+
+ if( flagEOR ) {
+ /* EOR, Output address data */
+ /* Save field list to hash table */
+ if( flagMail ) {
+ ldif_hash_add_list( ldifFile->hashFields, listTags );
+ }
+ mgu_free_list( listTags );
+ listTags = NULL;
+ flagMail = FALSE;
+ }
+ if( line ) {
+ flagEOR = FALSE;
+ if( *line == ' ' ) {
+ /* Continuation line */
+ }
+ else if( *line == '=' ) {
+ /* Base-64 encoded continuation field */
+ }
+ else {
+ /* Parse line */
+ tagName = ldif_get_tagname( line, &flag64 );
+ if( tagName ) {
+ /* Add tag to list */
+ listTags = g_slist_append( listTags, tagName );
+ if( g_strcasecmp( tagName, LDIF_TAG_EMAIL ) == 0 ) {
+ flagMail = TRUE;
+ }
+ }
+ }
+ }
+ g_free( line );
+ }
+
+ /* Release data */
+ mgu_free_list( listTags );
+ listTags = NULL;
+}
+
+/*
+* ============================================================================
+* Read file into list. Main entry point
+* Enter: ldifFile LDIF control data.
+* cache Address cache to load.
+* Return: Status code.
+* ============================================================================
+*/
+gint ldif_import_data( LdifFile *ldifFile, AddressCache *cache ) {
+ g_return_val_if_fail( ldifFile != NULL, MGU_BAD_ARGS );
+ ldifFile->retVal = MGU_SUCCESS;
+ addrcache_clear( cache );
+ cache->dataRead = FALSE;
+ ldif_open_file( ldifFile );
+ if( ldifFile->retVal == MGU_SUCCESS ) {
+ /* Read data into the cache */
+ ldif_read_file( ldifFile, cache );
+ ldif_close_file( ldifFile );
+
+ /* Mark cache */
+ cache->modified = FALSE;
+ cache->dataRead = TRUE;
+ }
+ return ldifFile->retVal;
+}
+
+/*
+* ============================================================================
+* Process entire file reading list of unique fields. List of fields may be
+* accessed with the ldif_get_fieldlist() function.
+* Enter: ldifFile LDIF control data.
+* Return: Status code.
+* ============================================================================
+*/
+gint ldif_read_tags( LdifFile *ldifFile ) {
+ g_return_val_if_fail( ldifFile != NULL, MGU_BAD_ARGS );
+ ldifFile->retVal = MGU_SUCCESS;
+ if( ldifFile->dirtyFlag ) {
+ ldif_open_file( ldifFile );
+ if( ldifFile->retVal == MGU_SUCCESS ) {
+ /* Read data into the cache */
+ ldif_read_tag_list( ldifFile );
+ ldif_close_file( ldifFile );
+ ldifFile->dirtyFlag = FALSE;
+ ldifFile->accessFlag = TRUE;
+ }
+ }
+ return ldifFile->retVal;
+}
+
+/*
+* Return list of fields for LDIF file.
+* Enter: ldifFile LdifFile object.
+* Return: Linked list of Ldif_FieldRec objects. This list may be g_free'd.
+* Note that the objects in the list should not be freed since they refer to
+* objects inside the internal cache. These objects will be freed when
+* LDIF file object is freed.
+*/
+GList *ldif_get_fieldlist( LdifFile *ldifFile ) {
+ GList *list = NULL;
+
+ g_return_val_if_fail( ldifFile != NULL, NULL );
+ if( ldifFile->hashFields ) {
+ ldifFile->tempList = NULL;
+ g_hash_table_foreach( ldifFile->hashFields, ldif_hash2list_vis, ldifFile );
+ list = ldifFile->tempList;
+ ldifFile->tempList = NULL;
+ }
+ return list;
+}
+
+/*
+* End of Source.
+*/
+
diff --git a/src/ldif.h b/src/ldif.h
new file mode 100644
index 00000000..5ec2643c
--- /dev/null
+++ b/src/ldif.h
@@ -0,0 +1,119 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions necessary to access LDIF files (LDAP Data Interchange Format
+ * files). These files are used to load LDAP servers and to interchange data
+ * between servers. They are also used by several E-Mail client programs and
+ * other programs as a means of interchange address book data.
+ */
+
+#ifndef __LDIF_H__
+#define __LDIF_H__
+
+#include <stdio.h>
+#include <glib.h>
+
+#include "addrcache.h"
+
+#define LDIFBUFSIZE 2048
+
+/* Reserved tag names - for address book import */
+#define LDIF_TAG_COMMONNAME "cn"
+#define LDIF_TAG_FIRSTNAME "givenname"
+#define LDIF_TAG_LASTNAME "sn"
+#define LDIF_TAG_NICKNAME "xmozillanickname"
+#define LDIF_TAG_EMAIL "mail"
+
+#define LDIF_SEP_TAG ':'
+#define LDIF_LANG_TAG ';'
+
+/*
+// Typical LDIF entry (similar to that generated by Netscape):
+//
+// dn: uid=axel, dc=axel, dc=com
+// cn: Axel Rose
+// sn: Rose
+// givenname: Arnold
+// xmozillanickname: Axel
+// mail: axel@axelrose.com
+// mail: axelrose@aol.com
+// mail: axel@netscape.net
+// mail: axel@hotmail.com
+// uid: axelrose
+// o: The Company
+// locality: Denver
+// st: CO
+// streetaddress: 777 Lexington Avenue
+// postalcode: 80298
+// countryname: USA
+// telephonenumber: 303-555-1234
+// homephone: 303-555-2345
+// cellphone: 303-555-3456
+// homeurl: http://www.axelrose.com
+// objectclass: top
+// objectclass: person
+//
+// Note that first entry is always dn. An empty line defines end of
+// record. Note that attribute names are case insensitive. There may
+// also be several occurrences of an attribute, for example, as
+// illustrated for "mail" and "objectclass" attributes. LDIF files
+// can also use binary data using base-64 encoding.
+//
+*/
+
+/* LDIF file object */
+typedef struct _LdifFile LdifFile;
+struct _LdifFile {
+ FILE *file;
+ gchar *path;
+ gchar *bufptr;
+ gchar buffer[ LDIFBUFSIZE ];
+ gint retVal;
+ GHashTable *hashFields;
+ GList *tempList;
+ gboolean dirtyFlag;
+ gboolean accessFlag;
+ void (*cbProgress)( void *, void *, void * );
+ gint importCount;
+};
+
+/* Field list structure */
+typedef struct _Ldif_FieldRec_ Ldif_FieldRec;
+struct _Ldif_FieldRec_ {
+ gchar *tagName;
+ gchar *userName;
+ gboolean reserved;
+ gboolean selected;
+};
+
+/* Function prototypes */
+LdifFile *ldif_create ( void );
+void ldif_set_file ( LdifFile* ldifFile, const gchar *value );
+void ldif_set_accessed ( LdifFile* ldifFile, const gboolean value );
+void ldif_set_callback ( LdifFile *ldifFile, void *func );
+void ldif_free ( LdifFile *ldifFile );
+void ldif_print_fieldrec ( Ldif_FieldRec *rec, FILE *stream );
+void ldif_print_file ( LdifFile *ldifFile, FILE *stream );
+gint ldif_import_data ( LdifFile *ldifFile, AddressCache *cache );
+gint ldif_read_tags ( LdifFile *ldifFile );
+GList *ldif_get_fieldlist ( LdifFile *ldifFile );
+
+#endif /* __LDIF_H__ */
+
diff --git a/src/logwindow.c b/src/logwindow.c
new file mode 100644
index 00000000..ffda7fd1
--- /dev/null
+++ b/src/logwindow.c
@@ -0,0 +1,221 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkstyle.h>
+
+#include "intl.h"
+#include "logwindow.h"
+#include "utils.h"
+#include "gtkutils.h"
+
+#define MAX_LINES 500
+#define TRIM_LINES 25
+
+static LogWindow *logwindow;
+
+static void hide_cb (GtkWidget *widget,
+ LogWindow *logwin);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ LogWindow *logwin);
+
+LogWindow *log_window_create(void)
+{
+ LogWindow *logwin;
+ GtkWidget *window;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ debug_print("Creating log window...\n");
+ logwin = g_new0(LogWindow, 1);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Protocol log"));
+ gtk_window_set_wmclass(GTK_WINDOW(window), "log_window", "Sylpheed");
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+ gtk_widget_set_size_request(window, 520, 400);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), logwin);
+ g_signal_connect(G_OBJECT(window), "hide",
+ G_CALLBACK(hide_cb), logwin);
+ gtk_widget_realize(window);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_container_add(GTK_CONTAINER(window), scrolledwin);
+ gtk_widget_show(scrolledwin);
+
+ text = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD);
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_create_mark(buffer, "end", &iter, FALSE);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+ gtk_widget_show(text);
+
+ logwin->window = window;
+ logwin->scrolledwin = scrolledwin;
+ logwin->text = text;
+ logwin->lines = 0;
+
+ logwindow = logwin;
+
+ return logwin;
+}
+
+void log_window_init(LogWindow *logwin)
+{
+ GtkTextBuffer *buffer;
+ GdkColormap *colormap;
+ GdkColor color[3] =
+ {{0, 0, 0xafff, 0}, {0, 0xefff, 0, 0}, {0, 0xefff, 0, 0}};
+ gboolean success[3];
+ gint i;
+
+ //gtkut_widget_disable_theme_engine(logwin->text);
+
+ logwin->msg_color = color[0];
+ logwin->warn_color = color[1];
+ logwin->error_color = color[2];
+
+ colormap = gdk_window_get_colormap(logwin->window->window);
+ gdk_colormap_alloc_colors(colormap, color, 3, FALSE, TRUE, success);
+
+ for (i = 0; i < 3; i++) {
+ if (success[i] == FALSE) {
+ GtkStyle *style;
+
+ g_warning("LogWindow: color allocation failed\n");
+ style = gtk_widget_get_style(logwin->window);
+ logwin->msg_color = logwin->warn_color =
+ logwin->error_color = style->black;
+ break;
+ }
+ }
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
+ gtk_text_buffer_create_tag(buffer, "message",
+ "foreground-gdk", &logwindow->msg_color,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "warn",
+ "foreground-gdk", &logwindow->warn_color,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "error",
+ "foreground-gdk", &logwindow->error_color,
+ NULL);
+}
+
+void log_window_show(LogWindow *logwin)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(logwin->text);
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ gtk_widget_hide(logwin->window);
+
+ mark = gtk_text_buffer_get_mark(buffer, "end");
+ gtk_text_view_scroll_mark_onscreen(text, mark);
+
+ gtk_widget_show(logwin->window);
+}
+
+void log_window_append(const gchar *str, LogType type)
+{
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ GdkColor *color = NULL;
+ gchar *head = NULL;
+ const gchar *tag;
+
+ g_return_if_fail(logwindow != NULL);
+
+ text = GTK_TEXT_VIEW(logwindow->text);
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1);
+
+ switch (type) {
+ case LOG_MSG:
+ color = &logwindow->msg_color;
+ tag = "message";
+ head = "* ";
+ break;
+ case LOG_WARN:
+ color = &logwindow->warn_color;
+ tag = "warn";
+ head = "** ";
+ break;
+ case LOG_ERROR:
+ color = &logwindow->error_color;
+ tag = "error";
+ head = "*** ";
+ break;
+ default:
+ tag = NULL;
+ break;
+ }
+
+ if (logwindow->lines == MAX_LINES) {
+ //
+ }
+
+ if (head)
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, head, -1, tag, NULL);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, str, -1, tag, NULL);
+
+ mark = gtk_text_buffer_get_mark(buffer, "end");
+ if (GTK_WIDGET_VISIBLE(text))
+ gtk_text_view_scroll_mark_onscreen(text, mark);
+
+ logwindow->lines++;
+}
+
+static void hide_cb(GtkWidget *widget, LogWindow *logwin)
+{
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ LogWindow *logwin)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(logwin->window);
+ return FALSE;
+}
diff --git a/src/logwindow.h b/src/logwindow.h
new file mode 100644
index 00000000..97a9159f
--- /dev/null
+++ b/src/logwindow.h
@@ -0,0 +1,55 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __LOGWINDOW_H__
+#define __LOGWINDOW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef struct _LogWindow LogWindow;
+
+typedef enum
+{
+ LOG_NORMAL,
+ LOG_MSG,
+ LOG_WARN,
+ LOG_ERROR
+} LogType;
+
+struct _LogWindow
+{
+ GtkWidget *window;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+
+ GdkColor msg_color;
+ GdkColor warn_color;
+ GdkColor error_color;
+
+ gint lines;
+};
+
+LogWindow *log_window_create(void);
+void log_window_init(LogWindow *logwin);
+void log_window_show(LogWindow *logwin);
+
+void log_window_append(const gchar *str, LogType type);
+
+#endif /* __LOGWINDOW_H__ */
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 00000000..0f46186a
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,721 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkrc.h>
+
+#if HAVE_GDK_IMLIB
+# include <gdk_imlib.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#if USE_GPGME
+# include <gpgme.h>
+#endif
+
+#include "intl.h"
+#include "main.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "summaryview.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "prefs_actions.h"
+#include "prefs_display_header.h"
+#include "account.h"
+#include "procmsg.h"
+#include "filter.h"
+#include "inc.h"
+#include "import.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+#include "statusbar.h"
+#include "addressbook.h"
+#include "compose.h"
+#include "folder.h"
+#include "setup.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "socket.h"
+
+#if USE_GPGME
+# include "rfc2015.h"
+#endif
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+#include "version.h"
+
+gchar *prog_version;
+gchar *startup_dir;
+gboolean debug_mode = FALSE;
+
+static gint lock_socket = -1;
+static gint lock_socket_tag = 0;
+
+static struct RemoteCmd {
+ gboolean receive;
+ gboolean receive_all;
+ gboolean compose;
+ const gchar *compose_mailto;
+ GPtrArray *attach_files;
+ gboolean status;
+ gboolean status_full;
+ GPtrArray *status_folders;
+ GPtrArray *status_full_folders;
+ gboolean send;
+} cmd;
+
+static void parse_cmd_opt(int argc, char *argv[]);
+
+#if USE_GPGME
+static void idle_function_for_gpgme(void);
+#endif /* USE_GPGME */
+
+static gint prohibit_duplicate_launch (void);
+static gint lock_socket_remove (void);
+static void lock_socket_input_cb (gpointer data,
+ gint source,
+ GdkInputCondition condition);
+static gchar *get_socket_name (void);
+
+static void open_compose_new (const gchar *address,
+ GPtrArray *attach_files);
+
+static void send_queue (void);
+
+#if 0
+/* for gettext */
+_("File `%s' already exists.\n"
+ "Can't create folder.")
+#endif
+
+#define MAKE_DIR_IF_NOT_EXIST(dir) \
+{ \
+ if (!is_dir_exist(dir)) { \
+ if (is_file_exist(dir)) { \
+ alertpanel_warning \
+ (_("File `%s' already exists.\n" \
+ "Can't create folder."), \
+ dir); \
+ return 1; \
+ } \
+ if (make_dir(dir) < 0) \
+ return 1; \
+ } \
+}
+
+int main(int argc, char *argv[])
+{
+ gchar *userrc;
+ MainWindow *mainwin;
+ FolderView *folderview;
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset(PACKAGE, CS_UTF_8);
+ textdomain(PACKAGE);
+
+ prog_version = PROG_VERSION;
+ startup_dir = g_get_current_dir();
+
+ parse_cmd_opt(argc, argv);
+
+ /* check and create unix domain socket for remote operation */
+ lock_socket = prohibit_duplicate_launch();
+ if (lock_socket < 0) return 0;
+
+ if (cmd.status || cmd.status_full) {
+ puts("0 Sylpheed not running.");
+ lock_socket_remove();
+ return 0;
+ }
+
+ gtk_set_locale();
+ gtk_init(&argc, &argv);
+
+ gdk_rgb_init();
+ gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
+ gtk_widget_set_default_visual(gdk_rgb_get_visual());
+
+#if USE_THREADS || USE_LDAP
+ g_thread_init(NULL);
+ if (!g_thread_supported())
+ g_error(_("g_thread is not supported by glib.\n"));
+#endif
+
+#if HAVE_GDK_IMLIB
+ gdk_imlib_init();
+ gtk_widget_push_visual(gdk_imlib_get_visual());
+ gtk_widget_push_colormap(gdk_imlib_get_colormap());
+#endif
+
+#if USE_SSL
+ ssl_init();
+#endif
+
+ srandom((gint)time(NULL));
+
+ /* parse gtkrc files */
+ userrc = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S, ".gtkrc-2.0",
+ NULL);
+ gtk_rc_parse(userrc);
+ g_free(userrc);
+ userrc = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S, ".gtk",
+ G_DIR_SEPARATOR_S, "gtkrc-2.0", NULL);
+ gtk_rc_parse(userrc);
+ g_free(userrc);
+ userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "gtkrc", NULL);
+ gtk_rc_parse(userrc);
+ g_free(userrc);
+
+ userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL);
+ gtk_accel_map_load(userrc);
+ g_free(userrc);
+
+ CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1);
+
+ /* backup if old rc file exists */
+ if (is_file_exist(RC_DIR)) {
+ if (rename(RC_DIR, RC_DIR ".bak") < 0)
+ FILE_OP_ERROR(RC_DIR, "rename");
+ }
+ MAKE_DIR_IF_NOT_EXIST(RC_DIR);
+ MAKE_DIR_IF_NOT_EXIST(get_imap_cache_dir());
+ MAKE_DIR_IF_NOT_EXIST(get_news_cache_dir());
+ MAKE_DIR_IF_NOT_EXIST(get_mime_tmp_dir());
+ MAKE_DIR_IF_NOT_EXIST(get_tmp_dir());
+ MAKE_DIR_IF_NOT_EXIST(RC_DIR G_DIR_SEPARATOR_S "uidl");
+
+ if (is_file_exist(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log")) {
+ if (rename(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log",
+ RC_DIR G_DIR_SEPARATOR_S "sylpheed.log.bak") < 0)
+ FILE_OP_ERROR("sylpheed.log", "rename");
+ }
+ set_log_file(RC_DIR G_DIR_SEPARATOR_S "sylpheed.log");
+
+ prefs_common_read_config();
+
+#if USE_GPGME
+ if (gpgme_check_engine()) { /* Also does some gpgme init */
+ rfc2015_disable_all();
+ debug_print("gpgme_engine_version:\n%s\n",
+ gpgme_get_engine_info());
+
+ if (prefs_common.gpg_warning) {
+ AlertValue val;
+
+ val = alertpanel_message_with_disable
+ (_("Warning"),
+ _("GnuPG is not installed properly, or its version is too old.\n"
+ "OpenPGP support disabled."),
+ ALERT_WARNING);
+ if (val & G_ALERTDISABLE)
+ prefs_common.gpg_warning = FALSE;
+ }
+ }
+ gpgme_register_idle(idle_function_for_gpgme);
+#endif
+
+ sock_set_io_timeout(prefs_common.io_timeout_secs);
+
+ prefs_filter_read_config();
+ prefs_actions_read_config();
+ prefs_display_header_read_config();
+
+ gtkut_widget_init();
+
+ mainwin = main_window_create
+ (prefs_common.sep_folder | prefs_common.sep_msg << 1);
+ folderview = mainwin->folderview;
+
+ /* register the callback of unix domain socket input */
+ lock_socket_tag = gdk_input_add(lock_socket,
+ GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
+ lock_socket_input_cb,
+ mainwin);
+
+ account_read_config_all();
+
+ if (folder_read_list() < 0) {
+ setup(mainwin);
+ folder_write_list();
+ }
+ if (!account_get_list()) {
+ account_edit_open();
+ account_add();
+ }
+
+ account_set_missing_folder();
+ folder_set_missing_folders();
+ folderview_set(folderview);
+
+ addressbook_read_file();
+
+ inc_autocheck_timer_init(mainwin);
+
+ /* ignore SIGPIPE signal for preventing sudden death of program */
+ signal(SIGPIPE, SIG_IGN);
+
+ if (cmd.receive_all)
+ inc_all_account_mail(mainwin, FALSE);
+ else if (prefs_common.chk_on_startup)
+ inc_all_account_mail(mainwin, TRUE);
+ else if (cmd.receive)
+ inc_mail(mainwin);
+ else
+ gtk_widget_grab_focus(folderview->ctree);
+
+ if (cmd.compose)
+ open_compose_new(cmd.compose_mailto, cmd.attach_files);
+ if (cmd.attach_files) {
+ ptr_array_free_strings(cmd.attach_files);
+ g_ptr_array_free(cmd.attach_files, TRUE);
+ cmd.attach_files = NULL;
+ }
+ if (cmd.send)
+ send_queue();
+ if (cmd.status_folders) {
+ g_ptr_array_free(cmd.status_folders, TRUE);
+ cmd.status_folders = NULL;
+ }
+ if (cmd.status_full_folders) {
+ g_ptr_array_free(cmd.status_full_folders, TRUE);
+ cmd.status_full_folders = NULL;
+ }
+
+ gtk_main();
+
+ return 0;
+}
+
+static void parse_cmd_opt(int argc, char *argv[])
+{
+ gint i;
+
+ for (i = 1; i < argc; i++) {
+ if (!strncmp(argv[i], "--debug", 7))
+ debug_mode = TRUE;
+ else if (!strncmp(argv[i], "--receive-all", 13))
+ cmd.receive_all = TRUE;
+ else if (!strncmp(argv[i], "--receive", 9))
+ cmd.receive = TRUE;
+ else if (!strncmp(argv[i], "--compose", 9)) {
+ const gchar *p = argv[i + 1];
+
+ cmd.compose = TRUE;
+ cmd.compose_mailto = NULL;
+ if (p && *p != '\0' && *p != '-') {
+ if (!strncmp(p, "mailto:", 7))
+ cmd.compose_mailto = p + 7;
+ else
+ cmd.compose_mailto = p;
+ i++;
+ }
+ } else if (!strncmp(argv[i], "--attach", 8)) {
+ const gchar *p = argv[i + 1];
+ gchar *file;
+
+ while (p && *p != '\0' && *p != '-') {
+ if (!cmd.attach_files)
+ cmd.attach_files = g_ptr_array_new();
+ if (*p != G_DIR_SEPARATOR)
+ file = g_strconcat(startup_dir,
+ G_DIR_SEPARATOR_S,
+ p, NULL);
+ else
+ file = g_strdup(p);
+ g_ptr_array_add(cmd.attach_files, file);
+ i++;
+ p = argv[i + 1];
+ }
+ } else if (!strncmp(argv[i], "--send", 6)) {
+ cmd.send = TRUE;
+ } else if (!strncmp(argv[i], "--version", 9)) {
+ puts("Sylpheed version " VERSION);
+ exit(0);
+ } else if (!strncmp(argv[i], "--status-full", 13)) {
+ const gchar *p = argv[i + 1];
+
+ cmd.status_full = TRUE;
+ while (p && *p != '\0' && *p != '-') {
+ if (!cmd.status_full_folders)
+ cmd.status_full_folders =
+ g_ptr_array_new();
+ g_ptr_array_add(cmd.status_full_folders,
+ g_strdup(p));
+ i++;
+ p = argv[i + 1];
+ }
+ } else if (!strncmp(argv[i], "--status", 8)) {
+ const gchar *p = argv[i + 1];
+
+ cmd.status = TRUE;
+ while (p && *p != '\0' && *p != '-') {
+ if (!cmd.status_folders)
+ cmd.status_folders = g_ptr_array_new();
+ g_ptr_array_add(cmd.status_folders,
+ g_strdup(p));
+ i++;
+ p = argv[i + 1];
+ }
+ } else if (!strncmp(argv[i], "--help", 6)) {
+ g_print(_("Usage: %s [OPTION]...\n"),
+ g_basename(argv[0]));
+
+ puts(_(" --compose [address] open composition window"));
+ puts(_(" --attach file1 [file2]...\n"
+ " open composition window with specified files\n"
+ " attached"));
+ puts(_(" --receive receive new messages"));
+ puts(_(" --receive-all receive new messages of all accounts"));
+ puts(_(" --send send all queued messages"));
+ puts(_(" --status [folder]... show the total number of messages"));
+ puts(_(" --status-full [folder]...\n"
+ " show the status of each folder"));
+ puts(_(" --debug debug mode"));
+ puts(_(" --help display this help and exit"));
+ puts(_(" --version output version information and exit"));
+
+ exit(1);
+ }
+ }
+
+ if (cmd.attach_files && cmd.compose == FALSE) {
+ cmd.compose = TRUE;
+ cmd.compose_mailto = NULL;
+ }
+}
+
+static gint get_queued_message_num(void)
+{
+ FolderItem *queue;
+
+ queue = folder_get_default_queue();
+ if (!queue) return -1;
+
+ folder_item_scan(queue);
+ return queue->total;
+}
+
+void app_will_exit(GtkWidget *widget, gpointer data)
+{
+ MainWindow *mainwin = data;
+ gchar *filename;
+
+ if (compose_get_compose_list()) {
+ if (alertpanel(_("Notice"),
+ _("Composing message exists. Really quit?"),
+ _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT)
+ return;
+ manage_window_focus_in(mainwin->window, NULL, NULL);
+ }
+
+ if (prefs_common.warn_queued_on_exit && get_queued_message_num() > 0) {
+ if (alertpanel(_("Queued messages"),
+ _("Some unsent messages are queued. Exit now?"),
+ _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT)
+ return;
+ manage_window_focus_in(mainwin->window, NULL, NULL);
+ }
+
+ inc_autocheck_timer_remove();
+
+ if (prefs_common.clean_on_exit)
+ main_window_empty_trash(mainwin, prefs_common.ask_on_clean);
+
+ /* save all state before exiting */
+ folder_write_list();
+ summary_write_cache(mainwin->summaryview);
+
+ main_window_get_size(mainwin);
+ main_window_get_position(mainwin);
+ prefs_common_write_config();
+ prefs_filter_write_config();
+ account_write_config_all();
+ addressbook_export_to_file();
+
+ filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL);
+ gtk_accel_map_save(filename);
+ g_free(filename);
+
+ /* delete temporary files */
+ remove_all_files(get_mime_tmp_dir());
+
+ close_log_file();
+ lock_socket_remove();
+
+#if USE_SSL
+ ssl_done();
+#endif
+
+ gtk_main_quit();
+}
+
+#if USE_GPGME
+static void idle_function_for_gpgme(void)
+{
+ while (gtk_events_pending())
+ gtk_main_iteration();
+}
+#endif /* USE_GPGME */
+
+static gchar *get_socket_name(void)
+{
+ static gchar *filename = NULL;
+
+ if (filename == NULL) {
+ filename = g_strdup_printf("%s%csylpheed-%d",
+ g_get_tmp_dir(), G_DIR_SEPARATOR,
+ getuid());
+ }
+
+ return filename;
+}
+
+static gint prohibit_duplicate_launch(void)
+{
+ gint uxsock;
+ gchar *path;
+
+ path = get_socket_name();
+ uxsock = fd_connect_unix(path);
+ if (uxsock < 0) {
+ unlink(path);
+ return fd_open_unix(path);
+ }
+
+ /* remote command mode */
+
+ debug_print(_("another Sylpheed is already running.\n"));
+
+ if (cmd.receive_all)
+ fd_write_all(uxsock, "receive_all\n", 12);
+ else if (cmd.receive)
+ fd_write_all(uxsock, "receive\n", 8);
+ else if (cmd.compose && cmd.attach_files) {
+ gchar *str, *compose_str;
+ gint i;
+
+ if (cmd.compose_mailto)
+ compose_str = g_strdup_printf("compose_attach %s\n",
+ cmd.compose_mailto);
+ else
+ compose_str = g_strdup("compose_attach\n");
+
+ fd_write_all(uxsock, compose_str, strlen(compose_str));
+ g_free(compose_str);
+
+ for (i = 0; i < cmd.attach_files->len; i++) {
+ str = g_ptr_array_index(cmd.attach_files, i);
+ fd_write_all(uxsock, str, strlen(str));
+ fd_write_all(uxsock, "\n", 1);
+ }
+
+ fd_write_all(uxsock, ".\n", 2);
+ } else if (cmd.compose) {
+ gchar *compose_str;
+
+ if (cmd.compose_mailto)
+ compose_str = g_strdup_printf
+ ("compose %s\n", cmd.compose_mailto);
+ else
+ compose_str = g_strdup("compose\n");
+
+ fd_write_all(uxsock, compose_str, strlen(compose_str));
+ g_free(compose_str);
+ } else if (cmd.send) {
+ fd_write_all(uxsock, "send\n", 5);
+ } else if (cmd.status || cmd.status_full) {
+ gchar buf[BUFFSIZE];
+ gint i;
+ const gchar *command;
+ GPtrArray *folders;
+ gchar *folder;
+
+ command = cmd.status_full ? "status-full\n" : "status\n";
+ folders = cmd.status_full ? cmd.status_full_folders :
+ cmd.status_folders;
+
+ fd_write_all(uxsock, command, strlen(command));
+ for (i = 0; folders && i < folders->len; ++i) {
+ folder = g_ptr_array_index(folders, i);
+ fd_write_all(uxsock, folder, strlen(folder));
+ fd_write_all(uxsock, "\n", 1);
+ }
+ fd_write_all(uxsock, ".\n", 2);
+ for (;;) {
+ fd_gets(uxsock, buf, sizeof(buf));
+ if (!strncmp(buf, ".\n", 2)) break;
+ fputs(buf, stdout);
+ }
+ } else
+ fd_write_all(uxsock, "popup\n", 6);
+
+ fd_close(uxsock);
+ return -1;
+}
+
+static gint lock_socket_remove(void)
+{
+ gchar *filename;
+
+ if (lock_socket < 0) return -1;
+
+ if (lock_socket_tag > 0)
+ gdk_input_remove(lock_socket_tag);
+ fd_close(lock_socket);
+ filename = get_socket_name();
+ unlink(filename);
+
+ return 0;
+}
+
+static GPtrArray *get_folder_item_list(gint sock)
+{
+ gchar buf[BUFFSIZE];
+ FolderItem *item;
+ GPtrArray *folders = NULL;
+
+ for (;;) {
+ fd_gets(sock, buf, sizeof(buf));
+ if (!strncmp(buf, ".\n", 2)) break;
+ strretchomp(buf);
+ if (!folders) folders = g_ptr_array_new();
+ item = folder_find_item_from_identifier(buf);
+ if (item)
+ g_ptr_array_add(folders, item);
+ else
+ g_warning("no such folder: %s\n", buf);
+ }
+
+ return folders;
+}
+
+static void lock_socket_input_cb(gpointer data,
+ gint source,
+ GdkInputCondition condition)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ gint sock;
+ gchar buf[BUFFSIZE];
+
+ sock = fd_accept(source);
+ fd_gets(sock, buf, sizeof(buf));
+
+ if (!strncmp(buf, "popup", 5)) {
+ main_window_popup(mainwin);
+ } else if (!strncmp(buf, "receive_all", 11)) {
+ main_window_popup(mainwin);
+ inc_all_account_mail(mainwin, FALSE);
+ } else if (!strncmp(buf, "receive", 7)) {
+ main_window_popup(mainwin);
+ inc_mail(mainwin);
+ } else if (!strncmp(buf, "compose_attach", 14)) {
+ GPtrArray *files;
+ gchar *mailto;
+
+ mailto = g_strdup(buf + strlen("compose_attach") + 1);
+ files = g_ptr_array_new();
+ while (fd_gets(sock, buf, sizeof(buf)) > 0) {
+ if (buf[0] == '.' && buf[1] == '\n') break;
+ strretchomp(buf);
+ g_ptr_array_add(files, g_strdup(buf));
+ }
+ open_compose_new(mailto, files);
+ ptr_array_free_strings(files);
+ g_ptr_array_free(files, TRUE);
+ g_free(mailto);
+ } else if (!strncmp(buf, "compose", 7)) {
+ open_compose_new(buf + strlen("compose") + 1, NULL);
+ } else if (!strncmp(buf, "send", 4)) {
+ send_queue();
+ } else if (!strncmp(buf, "status-full", 11) ||
+ !strncmp(buf, "status", 6)) {
+ gchar *status;
+ GPtrArray *folders;
+
+ folders = get_folder_item_list(sock);
+ status = folder_get_status
+ (folders, !strncmp(buf, "status-full", 11));
+ fd_write_all(sock, status, strlen(status));
+ fd_write_all(sock, ".\n", 2);
+ g_free(status);
+ if (folders) g_ptr_array_free(folders, TRUE);
+ }
+
+ fd_close(sock);
+}
+
+static void open_compose_new(const gchar *address, GPtrArray *attach_files)
+{
+ gchar *addr = NULL;
+
+ if (address) {
+ Xstrdup_a(addr, address, return);
+ g_strstrip(addr);
+ }
+
+ compose_new(NULL, NULL, addr, attach_files);
+}
+
+static void send_queue(void)
+{
+ GList *list;
+
+ if (!main_window_toggle_online_if_offline(main_window_get()))
+ return;
+
+ for (list = folder_get_list(); list != NULL; list = list->next) {
+ Folder *folder = list->data;
+
+ if (folder->queue) {
+ gint ret;
+
+ ret = procmsg_send_queue(folder->queue,
+ prefs_common.savemsg);
+ statusbar_pop_all();
+ if (ret > 0)
+ folder_item_scan(folder->queue);
+ }
+ }
+
+ folderview_update_all_updated(TRUE);
+}
diff --git a/src/main.h b/src/main.h
new file mode 100644
index 00000000..0fb8c56f
--- /dev/null
+++ b/src/main.h
@@ -0,0 +1,32 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+extern gchar *prog_version;
+extern gchar *startup_dir;
+extern gboolean debug_mode;
+
+void app_will_exit (GtkWidget *widget, gpointer data);
+
+#endif /* __MAIN_H__ */
diff --git a/src/mainwindow.c b/src/mainwindow.c
new file mode 100644
index 00000000..72d05fa2
--- /dev/null
+++ b/src/mainwindow.c
@@ -0,0 +1,3174 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtkstatusbar.h>
+#include <gtk/gtkprogressbar.h>
+#include <gtk/gtkhpaned.h>
+#include <gtk/gtkvpaned.h>
+#include <gtk/gtkcheckmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkhandlebox.h>
+#include <gtk/gtktoolbar.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtktooltips.h>
+#include <string.h>
+
+#include "intl.h"
+#include "main.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "foldersel.h"
+#include "summaryview.h"
+#include "summary_search.h"
+#include "messageview.h"
+#include "message_search.h"
+#include "headerview.h"
+#include "menu.h"
+#include "stock_pixmap.h"
+#include "folder.h"
+#include "inc.h"
+#include "compose.h"
+#include "procmsg.h"
+#include "import.h"
+#include "export.h"
+#include "prefs_common.h"
+#include "prefs_filter.h"
+#include "prefs_actions.h"
+#include "prefs_account.h"
+#include "prefs_summary_column.h"
+#include "prefs_template.h"
+#include "action.h"
+#include "account.h"
+#include "addressbook.h"
+#include "logwindow.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+#include "statusbar.h"
+#include "inputdialog.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "codeconv.h"
+#include "about.h"
+#include "manual.h"
+#include "version.h"
+
+#define AC_LABEL_WIDTH 240
+
+#define STATUSBAR_PUSH(mainwin, str) \
+{ \
+ gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->mainwin_cid, str); \
+ gtkut_widget_wait_for_draw(mainwin->hbox_stat); \
+}
+
+#define STATUSBAR_POP(mainwin) \
+{ \
+ gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->mainwin_cid); \
+}
+
+/* list of all instantiated MainWindow */
+static GList *mainwin_list = NULL;
+
+static GdkCursor *watch_cursor;
+
+static void main_window_menu_callback_block (MainWindow *mainwin);
+static void main_window_menu_callback_unblock (MainWindow *mainwin);
+
+static void main_window_show_cur_account (MainWindow *mainwin);
+
+static void main_window_set_widgets (MainWindow *mainwin,
+ SeparateType type);
+static void main_window_toolbar_create (MainWindow *mainwin,
+ GtkWidget *container);
+
+/* callback functions */
+static void toolbar_inc_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_inc_all_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_send_cb (GtkWidget *widget,
+ gpointer data);
+
+static void toolbar_compose_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_reply_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_reply_to_all_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_forward_cb (GtkWidget *widget,
+ gpointer data);
+
+static void toolbar_delete_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_exec_cb (GtkWidget *widget,
+ gpointer data);
+
+static void toolbar_next_unread_cb (GtkWidget *widget,
+ gpointer data);
+
+#if 0
+static void toolbar_prefs_cb (GtkWidget *widget,
+ gpointer data);
+static void toolbar_account_cb (GtkWidget *widget,
+ gpointer data);
+
+static void toolbar_account_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+#endif
+
+static void toolbar_child_attached (GtkWidget *widget,
+ GtkWidget *child,
+ gpointer data);
+static void toolbar_child_detached (GtkWidget *widget,
+ GtkWidget *child,
+ gpointer data);
+
+static void online_switch_clicked (GtkWidget *widget,
+ gpointer data);
+static void ac_label_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+static void ac_menu_popup_closed (GtkMenuShell *menu_shell,
+ gpointer data);
+
+static gint main_window_close_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gint folder_window_close_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gint message_window_close_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+
+static void main_window_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data);
+static void folder_window_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data);
+static void message_window_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data);
+
+static void new_folder_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void rename_folder_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void delete_folder_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void update_folderview_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void add_mailbox_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void remove_mailbox_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void rebuild_tree_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void import_mbox_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void export_mbox_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void empty_trash_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void save_as_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void print_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void toggle_offline_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void app_exit_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void search_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void toggle_folder_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void toggle_message_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void toggle_toolbar_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void toggle_statusbar_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void separate_widget_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void addressbook_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void log_window_show_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void inc_mail_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void inc_all_account_mail_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void inc_cancel_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void send_queue_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void reply_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void open_msg_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void view_source_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void show_all_header_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void move_to_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void copy_to_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void delete_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void mark_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void unmark_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void mark_as_unread_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void mark_as_read_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void mark_all_read_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void reedit_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void add_address_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void set_charset_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void thread_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void expand_threads_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void collapse_threads_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void set_display_item_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void sort_summary_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void sort_summary_type_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void attract_by_subject_cb(MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void delete_duplicated_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void filter_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void execute_summary_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void update_summary_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void prev_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void next_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void prev_unread_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void next_unread_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prev_new_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void next_new_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prev_marked_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void next_marked_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prev_labeled_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void next_labeled_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void goto_folder_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void copy_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void allsel_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void select_thread_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void create_filter_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void prefs_common_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prefs_filter_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prefs_template_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prefs_actions_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void prefs_account_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void new_account_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void account_selector_menu_cb (GtkMenuItem *menuitem,
+ gpointer data);
+static void account_receive_menu_cb (GtkMenuItem *menuitem,
+ gpointer data);
+
+static void manual_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void faq_open_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void scan_tree_func (Folder *folder,
+ FolderItem *item,
+ gpointer data);
+
+static GtkItemFactoryEntry mainwin_entries[] =
+{
+ {N_("/_File"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/_Folder"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/_Folder/Create _new folder..."),
+ NULL, new_folder_cb, 0, NULL},
+ {N_("/_File/_Folder/_Rename folder..."),NULL, rename_folder_cb, 0, NULL},
+ {N_("/_File/_Folder/_Delete folder"), NULL, delete_folder_cb, 0, NULL},
+ {N_("/_File/_Mailbox"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/_Mailbox/Add _mailbox..."), NULL, add_mailbox_cb, 0, NULL},
+ {N_("/_File/_Mailbox/_Remove mailbox"), NULL, remove_mailbox_cb, 0, NULL},
+ {N_("/_File/_Mailbox/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Mailbox/_Check for new messages"),
+ NULL, update_folderview_cb, 0, NULL},
+ {N_("/_File/_Mailbox/Check for new messages in _all mailboxes"),
+ NULL, update_folderview_cb, 1, NULL},
+ {N_("/_File/_Mailbox/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Mailbox/R_ebuild folder tree"),
+ NULL, rebuild_tree_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Import mbox file..."), NULL, import_mbox_cb, 0, NULL},
+ {N_("/_File/_Export to mbox file..."), NULL, export_mbox_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/Empty all _trash"), NULL, empty_trash_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Save as..."), "<control>S", save_as_cb, 0, NULL},
+ {N_("/_File/_Print..."), NULL, print_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Work offline"), NULL, toggle_offline_cb, 0, "<ToggleItem>"},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ /* {N_("/_File/_Close"), "<alt>W", app_exit_cb, 0, NULL}, */
+ {N_("/_File/E_xit"), "<control>Q", app_exit_cb, 0, NULL},
+
+ {N_("/_Edit"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Edit/_Copy"), "<control>C", copy_cb, 0, NULL},
+ {N_("/_Edit/Select _all"), "<control>A", allsel_cb, 0, NULL},
+ {N_("/_Edit/Select _thread"), NULL, select_thread_cb, 0, NULL},
+ {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit/_Find in current message..."),
+ "<control>F", search_cb, 0, NULL},
+ {N_("/_Edit/_Search messages..."), "<shift><control>F", search_cb, 1, NULL},
+
+ {N_("/_View"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Show or hi_de"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Show or hi_de/_Folder tree"),
+ NULL, toggle_folder_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Show or hi_de/_Message view"),
+ "V", toggle_message_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Show or hi_de/_Toolbar"),
+ NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Show or hi_de/_Toolbar/Icon _and text"),
+ NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"},
+ {N_("/_View/Show or hi_de/_Toolbar/_Icon"),
+ NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Show or hide/Toolbar/Icon and text"},
+ {N_("/_View/Show or hi_de/_Toolbar/_Text"),
+ NULL, toggle_toolbar_cb, TOOLBAR_TEXT, "/View/Show or hide/Toolbar/Icon and text"},
+ {N_("/_View/Show or hi_de/_Toolbar/_None"),
+ NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Show or hide/Toolbar/Icon and text"},
+ {N_("/_View/Show or hi_de/Status _bar"),
+ NULL, toggle_statusbar_cb, 0, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/Separate f_older tree"), NULL, separate_widget_cb, SEPARATE_FOLDER, "<ToggleItem>"},
+ {N_("/_View/Separate m_essage view"), NULL, separate_widget_cb, SEPARATE_MESSAGE, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Sort/by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, "<RadioItem>"},
+ {N_("/_View/_Sort/by s_ize"), NULL, sort_summary_cb, SORT_BY_SIZE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _date"), NULL, sort_summary_cb, SORT_BY_DATE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _from"), NULL, sort_summary_cb, SORT_BY_FROM, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _recipient"), NULL, sort_summary_cb, SORT_BY_TO, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _subject"), NULL, sort_summary_cb, SORT_BY_SUBJECT, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _color label"),
+ NULL, sort_summary_cb, SORT_BY_LABEL, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _mark"), NULL, sort_summary_cb, SORT_BY_MARK, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _unread"), NULL, sort_summary_cb, SORT_BY_UNREAD, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by a_ttachment"),
+ NULL, sort_summary_cb, SORT_BY_MIME, "/View/Sort/by number"},
+ {N_("/_View/_Sort/D_on't sort"), NULL, sort_summary_cb, SORT_BY_NONE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort/Ascending"), NULL, sort_summary_type_cb, SORT_ASCENDING, "<RadioItem>"},
+ {N_("/_View/_Sort/Descending"), NULL, sort_summary_type_cb, SORT_DESCENDING, "/View/Sort/Ascending"},
+ {N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort/_Attract by subject"),
+ NULL, attract_by_subject_cb, 0, NULL},
+ {N_("/_View/Th_read view"), "<control>T", thread_cb, 0, "<ToggleItem>"},
+ {N_("/_View/E_xpand all threads"), NULL, expand_threads_cb, 0, NULL},
+ {N_("/_View/Co_llapse all threads"), NULL, collapse_threads_cb, 0, NULL},
+ {N_("/_View/Set display _item..."), NULL, set_display_item_cb, 0, NULL},
+
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Go to/_Prev message"), "P", prev_cb, 0, NULL},
+ {N_("/_View/_Go to/_Next message"), "N", next_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/P_rev unread message"),
+ "<shift>P", prev_unread_cb, 0, NULL},
+ {N_("/_View/_Go to/N_ext unread message"),
+ "<shift>N", next_unread_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Prev ne_w message"), NULL, prev_new_cb, 0, NULL},
+ {N_("/_View/_Go to/Ne_xt new message"), NULL, next_new_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Prev _marked message"),
+ NULL, prev_marked_cb, 0, NULL},
+ {N_("/_View/_Go to/Next m_arked message"),
+ NULL, next_marked_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Prev _labeled message"),
+ NULL, prev_labeled_cb, 0, NULL},
+ {N_("/_View/_Go to/Next la_beled message"),
+ NULL, next_labeled_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Other _folder..."), "G", goto_folder_cb, 0, NULL},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+
+#define CODESET_SEPARATOR \
+ {N_("/_View/_Code set/---"), NULL, NULL, 0, "<Separator>"}
+#define CODESET_ACTION(action) \
+ NULL, set_charset_cb, action, "/View/Code set/Auto detect"
+
+ {N_("/_View/_Code set"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Code set/_Auto detect"),
+ NULL, set_charset_cb, C_AUTO, "<RadioItem>"},
+ {N_("/_View/_Code set/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Code set/7bit ascii (US-ASC_II)"),
+ CODESET_ACTION(C_US_ASCII)},
+
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Unicode (_UTF-8)"),
+ CODESET_ACTION(C_UTF_8)},
+ CODESET_SEPARATOR,
+#endif
+ {N_("/_View/_Code set/Western European (ISO-8859-_1)"),
+ CODESET_ACTION(C_ISO_8859_1)},
+ {N_("/_View/_Code set/Western European (ISO-8859-15)"),
+ CODESET_ACTION(C_ISO_8859_15)},
+ CODESET_SEPARATOR,
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Central European (ISO-8859-_2)"),
+ CODESET_ACTION(C_ISO_8859_2)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/_Baltic (ISO-8859-13)"),
+ CODESET_ACTION(C_ISO_8859_13)},
+ {N_("/_View/_Code set/Baltic (ISO-8859-_4)"),
+ CODESET_ACTION(C_ISO_8859_4)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Greek (ISO-8859-_7)"),
+ CODESET_ACTION(C_ISO_8859_7)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Turkish (ISO-8859-_9)"),
+ CODESET_ACTION(C_ISO_8859_9)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Cyrillic (ISO-8859-_5)"),
+ CODESET_ACTION(C_ISO_8859_5)},
+ {N_("/_View/_Code set/Cyrillic (KOI8-_R)"),
+ CODESET_ACTION(C_KOI8_R)},
+ {N_("/_View/_Code set/Cyrillic (KOI8-U)"),
+ CODESET_ACTION(C_KOI8_U)},
+ {N_("/_View/_Code set/Cyrillic (Windows-1251)"),
+ CODESET_ACTION(C_CP1251)},
+ CODESET_SEPARATOR,
+#endif
+ {N_("/_View/_Code set/Japanese (ISO-2022-_JP)"),
+ CODESET_ACTION(C_ISO_2022_JP)},
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Japanese (ISO-2022-JP-2)"),
+ CODESET_ACTION(C_ISO_2022_JP_2)},
+#endif
+ {N_("/_View/_Code set/Japanese (_EUC-JP)"),
+ CODESET_ACTION(C_EUC_JP)},
+ {N_("/_View/_Code set/Japanese (_Shift__JIS)"),
+ CODESET_ACTION(C_SHIFT_JIS)},
+#if HAVE_ICONV
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Simplified Chinese (_GB2312)"),
+ CODESET_ACTION(C_GB2312)},
+ {N_("/_View/_Code set/Traditional Chinese (_Big5)"),
+ CODESET_ACTION(C_BIG5)},
+ {N_("/_View/_Code set/Traditional Chinese (EUC-_TW)"),
+ CODESET_ACTION(C_EUC_TW)},
+ {N_("/_View/_Code set/Chinese (ISO-2022-_CN)"),
+ CODESET_ACTION(C_ISO_2022_CN)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Korean (EUC-_KR)"),
+ CODESET_ACTION(C_EUC_KR)},
+ {N_("/_View/_Code set/Korean (ISO-2022-KR)"),
+ CODESET_ACTION(C_ISO_2022_KR)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Thai (TIS-620)"),
+ CODESET_ACTION(C_TIS_620)},
+ {N_("/_View/_Code set/Thai (Windows-874)"),
+ CODESET_ACTION(C_WINDOWS_874)},
+#endif
+
+#undef CODESET_SEPARATOR
+#undef CODESET_ACTION
+
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/Open in new _window"), "<control><alt>N", open_msg_cb, 0, NULL},
+ {N_("/_View/Mess_age source"), "<control>U", view_source_cb, 0, NULL},
+ {N_("/_View/Show all _header"), "<control>H", show_all_header_cb, 0, "<ToggleItem>"},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Update summary"), "<control><alt>U", update_summary_cb, 0, NULL},
+
+ {N_("/_Message"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Message/Recei_ve"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Message/Recei_ve/Get from _current account"),
+ "<control>I", inc_mail_cb, 0, NULL},
+ {N_("/_Message/Recei_ve/Get from _all accounts"),
+ "<shift><control>I", inc_all_account_mail_cb, 0, NULL},
+ {N_("/_Message/Recei_ve/Cancel receivin_g"),
+ NULL, inc_cancel_cb, 0, NULL},
+ {N_("/_Message/Recei_ve/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Send queued messages"), NULL, send_queue_cb, 0, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/Compose _new message"), "<control>M", compose_cb, 0, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Reply"), "<control>R", reply_cb, COMPOSE_REPLY, NULL},
+ {N_("/_Message/Repl_y to"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Message/Repl_y to/_all"), "<shift><control>R", reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
+ {N_("/_Message/Repl_y to/_sender"), NULL, reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
+ {N_("/_Message/Repl_y to/mailing _list"),
+ "<control>L", reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Forward"), "<control><alt>F", reply_cb, COMPOSE_FORWARD, NULL},
+ {N_("/_Message/For_ward as attachment"),
+ "<shift><control><alt>F", reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
+ {N_("/_Message/Redirec_t"), NULL, reply_cb, COMPOSE_REDIRECT, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/M_ove..."), "<control>O", move_to_cb, 0, NULL},
+ {N_("/_Message/_Copy..."), "<shift><control>O", copy_to_cb, 0, NULL},
+ {N_("/_Message/_Delete"), "<control>D", delete_cb, 0, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Mark"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Message/_Mark/_Mark"), "<shift>asterisk", mark_cb, 0, NULL},
+ {N_("/_Message/_Mark/_Unmark"), "U", unmark_cb, 0, NULL},
+ {N_("/_Message/_Mark/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Mark/Mark as unr_ead"), "<shift>exclam", mark_as_unread_cb, 0, NULL},
+ {N_("/_Message/_Mark/Mark as rea_d"),
+ NULL, mark_as_read_cb, 0, NULL},
+ {N_("/_Message/_Mark/Mark all _read"), NULL, mark_all_read_cb, 0, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/Re-_edit"), NULL, reedit_cb, 0, NULL},
+
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/_Address book"), "<shift><control>A", addressbook_open_cb, 0, NULL},
+ {N_("/_Tools/Add sender to address boo_k"),
+ NULL, add_address_cb, 0, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/_Filter all messages in folder"),
+ NULL, filter_cb, 0, NULL},
+ {N_("/_Tools/Filter _selected messages"),
+ NULL, filter_cb, 1, NULL},
+ {N_("/_Tools/_Create filter rule"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/_Create filter rule/_Automatically"),
+ NULL, create_filter_cb, FILTER_BY_AUTO, NULL},
+ {N_("/_Tools/_Create filter rule/by _From"),
+ NULL, create_filter_cb, FILTER_BY_FROM, NULL},
+ {N_("/_Tools/_Create filter rule/by _To"),
+ NULL, create_filter_cb, FILTER_BY_TO, NULL},
+ {N_("/_Tools/_Create filter rule/by _Subject"),
+ NULL, create_filter_cb, FILTER_BY_SUBJECT, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Delete du_plicated messages"),
+ NULL, delete_duplicated_cb, 0, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/E_xecute"), "X", execute_summary_cb, 0, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/_Log window"), "<shift><control>L", log_window_show_cb, 0, NULL},
+
+ {N_("/_Configuration"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Configuration/_Common preferences..."),
+ NULL, prefs_common_open_cb, 0, NULL},
+ {N_("/_Configuration/_Filter setting..."),
+ NULL, prefs_filter_open_cb, 0, NULL},
+ {N_("/_Configuration/_Template..."), NULL, prefs_template_open_cb, 0, NULL},
+ {N_("/_Configuration/_Actions..."), NULL, prefs_actions_open_cb, 0, NULL},
+ {N_("/_Configuration/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Configuration/_Preferences for current account..."),
+ NULL, prefs_account_open_cb, 0, NULL},
+ {N_("/_Configuration/Create _new account..."),
+ NULL, new_account_cb, 0, NULL},
+ {N_("/_Configuration/_Edit accounts..."),
+ NULL, account_edit_open, 0, NULL},
+ {N_("/_Configuration/C_hange current account"),
+ NULL, NULL, 0, "<Branch>"},
+
+ {N_("/_Help"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Help/_Manual"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Help/_Manual/_English"), NULL, manual_open_cb, MANUAL_LANG_EN, NULL},
+ {N_("/_Help/_Manual/_Japanese"), NULL, manual_open_cb, MANUAL_LANG_JA, NULL},
+ {N_("/_Help/_FAQ"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Help/_FAQ/_English"), NULL, faq_open_cb, MANUAL_LANG_EN, NULL},
+ {N_("/_Help/_FAQ/_German"), NULL, faq_open_cb, MANUAL_LANG_DE, NULL},
+ {N_("/_Help/_FAQ/_Spanish"), NULL, faq_open_cb, MANUAL_LANG_ES, NULL},
+ {N_("/_Help/_FAQ/_French"), NULL, faq_open_cb, MANUAL_LANG_FR, NULL},
+ {N_("/_Help/_FAQ/_Italian"), NULL, faq_open_cb, MANUAL_LANG_IT, NULL},
+ {N_("/_Help/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Help/_About"), NULL, about_show, 0, NULL}
+};
+
+MainWindow *main_window_create(SeparateType type)
+{
+ MainWindow *mainwin;
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *menubar;
+ GtkWidget *handlebox;
+ GtkWidget *vbox_body;
+ GtkWidget *hbox_stat;
+ GtkWidget *statusbar;
+ GtkWidget *progressbar;
+ GtkWidget *statuslabel;
+ GtkWidget *online_hbox;
+ GtkWidget *online_switch;
+ GtkWidget *online_pixmap;
+ GtkWidget *offline_pixmap;
+ GtkTooltips *online_tip;
+ GtkWidget *ac_button;
+ GtkWidget *ac_label;
+
+ FolderView *folderview;
+ SummaryView *summaryview;
+ MessageView *messageview;
+ GdkColormap *colormap;
+ GdkColor color[3];
+ gboolean success[3];
+ guint n_menu_entries;
+ GtkItemFactory *ifactory;
+ GtkWidget *ac_menu;
+ GtkWidget *menuitem;
+ gint i;
+
+ static GdkGeometry geometry;
+
+ debug_print(_("Creating main window...\n"));
+ mainwin = g_new0(MainWindow, 1);
+
+ /* main window */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), PROG_VERSION);
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+ gtk_window_set_wmclass(GTK_WINDOW(window), "main_window", "Sylpheed");
+
+ if (!geometry.min_height) {
+ geometry.min_width = 320;
+ geometry.min_height = 200;
+ }
+ gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
+ GDK_HINT_MIN_SIZE);
+
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(main_window_close_cb), mainwin);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ /* menu bar */
+ n_menu_entries = sizeof(mainwin_entries) / sizeof(mainwin_entries[0]);
+ menubar = menubar_create(window, mainwin_entries,
+ n_menu_entries, "<Main>", mainwin);
+ gtk_widget_show(menubar);
+ gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+ ifactory = gtk_item_factory_from_widget(menubar);
+
+ handlebox = gtk_handle_box_new();
+ gtk_widget_show(handlebox);
+ gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(handlebox), "child_attached",
+ G_CALLBACK(toolbar_child_attached), mainwin);
+ g_signal_connect(G_OBJECT(handlebox), "child_detached",
+ G_CALLBACK(toolbar_child_detached), mainwin);
+
+ main_window_toolbar_create(mainwin, handlebox);
+
+ /* vbox that contains body */
+ vbox_body = gtk_vbox_new(FALSE, BORDER_WIDTH);
+ gtk_widget_show(vbox_body);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox_body), BORDER_WIDTH);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox_body, TRUE, TRUE, 0);
+
+ hbox_stat = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_end(GTK_BOX(vbox_body), hbox_stat, FALSE, FALSE, 0);
+
+ statusbar = statusbar_create();
+ gtk_box_pack_start(GTK_BOX(hbox_stat), statusbar, TRUE, TRUE, 0);
+
+ progressbar = gtk_progress_bar_new();
+ gtk_widget_set_size_request(progressbar, 120, 1);
+ gtk_box_pack_start(GTK_BOX(hbox_stat), progressbar, FALSE, FALSE, 0);
+
+ statuslabel = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox_stat), statuslabel, FALSE, FALSE, 0);
+
+ online_hbox = gtk_hbox_new(FALSE, 0);
+
+ online_pixmap = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_ONLINE);
+ offline_pixmap = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_OFFLINE);
+ gtk_box_pack_start(GTK_BOX(online_hbox), online_pixmap,
+ FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(online_hbox), offline_pixmap,
+ FALSE, FALSE, 0);
+
+ online_switch = gtk_button_new();
+ gtk_button_set_relief(GTK_BUTTON(online_switch), GTK_RELIEF_NONE);
+ GTK_WIDGET_UNSET_FLAGS(online_switch, GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(online_switch), online_hbox);
+ g_signal_connect(G_OBJECT(online_switch), "clicked",
+ G_CALLBACK(online_switch_clicked), mainwin);
+ gtk_box_pack_start(GTK_BOX(hbox_stat), online_switch, FALSE, FALSE, 0);
+
+ online_tip = gtk_tooltips_new();
+
+ ac_button = gtk_button_new();
+ gtk_button_set_relief(GTK_BUTTON(ac_button), GTK_RELIEF_NONE);
+ GTK_WIDGET_UNSET_FLAGS(ac_button, GTK_CAN_FOCUS);
+ gtk_widget_set_size_request(ac_button, -1, 1);
+ gtk_box_pack_end(GTK_BOX(hbox_stat), ac_button, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(ac_button), "button_press_event",
+ G_CALLBACK(ac_label_button_pressed), mainwin);
+
+ ac_label = gtk_label_new("");
+ gtk_container_add(GTK_CONTAINER(ac_button), ac_label);
+
+ gtk_widget_show_all(hbox_stat);
+
+ /* create views */
+ mainwin->folderview = folderview = folderview_create();
+ mainwin->summaryview = summaryview = summary_create();
+ mainwin->messageview = messageview = messageview_create();
+ mainwin->logwin = log_window_create();
+
+ folderview->mainwin = mainwin;
+ folderview->summaryview = summaryview;
+
+ summaryview->mainwin = mainwin;
+ summaryview->folderview = folderview;
+ summaryview->messageview = messageview;
+ summaryview->window = window;
+
+ messageview->statusbar = statusbar;
+ messageview->mainwin = mainwin;
+
+ mainwin->window = window;
+ mainwin->vbox = vbox;
+ mainwin->menubar = menubar;
+ mainwin->menu_factory = ifactory;
+ mainwin->handlebox = handlebox;
+ mainwin->vbox_body = vbox_body;
+ mainwin->hbox_stat = hbox_stat;
+ mainwin->statusbar = statusbar;
+ mainwin->progressbar = progressbar;
+ mainwin->statuslabel = statuslabel;
+ mainwin->online_switch = online_switch;
+ mainwin->online_pixmap = online_pixmap;
+ mainwin->offline_pixmap = offline_pixmap;
+ mainwin->online_tip = online_tip;
+ mainwin->ac_button = ac_button;
+ mainwin->ac_label = ac_label;
+
+ /* set context IDs for status bar */
+ mainwin->mainwin_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Main Window");
+ mainwin->folderview_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Folder View");
+ mainwin->summaryview_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Summary View");
+ mainwin->messageview_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Message View");
+
+ messageview->statusbar_cid = mainwin->messageview_cid;
+
+ /* allocate colors for summary view and folder view */
+ summaryview->color_marked.red = summaryview->color_marked.green = 0;
+ summaryview->color_marked.blue = (guint16)65535;
+
+ summaryview->color_dim.red = summaryview->color_dim.green =
+ summaryview->color_dim.blue = COLOR_DIM;
+
+ folderview->color_new.red = (guint16)55000;
+ folderview->color_new.green = folderview->color_new.blue = 15000;
+
+ folderview->color_noselect.red = folderview->color_noselect.green =
+ folderview->color_noselect.blue = COLOR_DIM;
+
+ color[0] = summaryview->color_marked;
+ color[1] = summaryview->color_dim;
+ color[2] = folderview->color_new;
+
+ colormap = gdk_window_get_colormap(window->window);
+ gdk_colormap_alloc_colors(colormap, color, 3, FALSE, TRUE, success);
+ for (i = 0; i < 3; i++) {
+ if (success[i] == FALSE)
+ g_warning(_("MainWindow: color allocation %d failed\n"), i);
+ }
+
+ messageview->visible = prefs_common.msgview_visible;
+
+ main_window_set_widgets(mainwin, type);
+
+ g_signal_connect(G_OBJECT(window), "size_allocate",
+ G_CALLBACK(main_window_size_allocate_cb), mainwin);
+
+ /* set menu items */
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Code set/Auto detect");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
+
+ switch (prefs_common.toolbar_style) {
+ case TOOLBAR_NONE:
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Toolbar/None");
+ break;
+ case TOOLBAR_ICON:
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Toolbar/Icon");
+ break;
+ case TOOLBAR_TEXT:
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Toolbar/Text");
+ break;
+ case TOOLBAR_BOTH:
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Toolbar/Icon and text");
+ }
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
+
+ gtk_widget_hide(mainwin->hbox_stat);
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Status bar");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ prefs_common.show_statusbar);
+
+ /* set account selection menu */
+ ac_menu = gtk_item_factory_get_widget
+ (ifactory, "/Configuration/Change current account");
+ g_signal_connect(G_OBJECT(ac_menu), "selection_done",
+ G_CALLBACK(ac_menu_popup_closed), mainwin);
+ mainwin->ac_menu = ac_menu;
+
+ main_window_set_toolbar_sensitive(mainwin);
+
+ /* create actions menu */
+ action_update_mainwin_menu(ifactory, mainwin);
+
+ /* initialize online switch */
+ prefs_common.online_mode = !prefs_common.online_mode;
+ online_switch_clicked(online_switch, mainwin);
+
+ /* show main window */
+ gtk_widget_show(mainwin->window);
+
+ /* initialize views */
+ folderview_init(folderview);
+ summary_init(summaryview);
+ messageview_init(messageview);
+ log_window_init(mainwin->logwin);
+
+ mainwin->lock_count = 0;
+ mainwin->menu_lock_count = 0;
+ mainwin->cursor_count = 0;
+
+ if (!watch_cursor)
+ watch_cursor = gdk_cursor_new(GDK_WATCH);
+
+ mainwin_list = g_list_append(mainwin_list, mainwin);
+
+ debug_print(_("done.\n"));
+
+ return mainwin;
+}
+
+void main_window_cursor_wait(MainWindow *mainwin)
+{
+
+ if (mainwin->cursor_count == 0)
+ gdk_window_set_cursor(mainwin->window->window, watch_cursor);
+
+ mainwin->cursor_count++;
+
+ gdk_flush();
+}
+
+void main_window_cursor_normal(MainWindow *mainwin)
+{
+ if (mainwin->cursor_count)
+ mainwin->cursor_count--;
+
+ if (mainwin->cursor_count == 0)
+ gdk_window_set_cursor(mainwin->window->window, NULL);
+
+ gdk_flush();
+}
+
+/* lock / unlock the user-interface */
+void main_window_lock(MainWindow *mainwin)
+{
+ if (mainwin->lock_count == 0)
+ gtk_widget_set_sensitive(mainwin->ac_button, FALSE);
+
+ mainwin->lock_count++;
+
+ main_window_set_menu_sensitive(mainwin);
+ main_window_set_toolbar_sensitive(mainwin);
+}
+
+void main_window_unlock(MainWindow *mainwin)
+{
+ if (mainwin->lock_count)
+ mainwin->lock_count--;
+
+ main_window_set_menu_sensitive(mainwin);
+ main_window_set_toolbar_sensitive(mainwin);
+
+ if (mainwin->lock_count == 0)
+ gtk_widget_set_sensitive(mainwin->ac_button, TRUE);
+}
+
+static void main_window_menu_callback_block(MainWindow *mainwin)
+{
+ mainwin->menu_lock_count++;
+}
+
+static void main_window_menu_callback_unblock(MainWindow *mainwin)
+{
+ if (mainwin->menu_lock_count)
+ mainwin->menu_lock_count--;
+}
+
+void main_window_reflect_prefs_all(void)
+{
+ GList *cur;
+ MainWindow *mainwin;
+
+ for (cur = mainwin_list; cur != NULL; cur = cur->next) {
+ mainwin = (MainWindow *)cur->data;
+
+ main_window_show_cur_account(mainwin);
+ main_window_set_menu_sensitive(mainwin);
+ main_window_set_toolbar_sensitive(mainwin);
+
+ if (prefs_common.immediate_exec)
+ gtk_widget_hide(mainwin->exec_btn);
+ else
+ gtk_widget_show(mainwin->exec_btn);
+
+ summary_redisplay_msg(mainwin->summaryview);
+ headerview_set_visibility(mainwin->messageview->headerview,
+ prefs_common.display_header_pane);
+ }
+}
+
+void main_window_set_summary_column(void)
+{
+ GList *cur;
+ MainWindow *mainwin;
+
+ for (cur = mainwin_list; cur != NULL; cur = cur->next) {
+ mainwin = (MainWindow *)cur->data;
+ summary_set_column_order(mainwin->summaryview);
+ }
+}
+
+static void main_window_set_account_selector_menu(MainWindow *mainwin,
+ GList *account_list)
+{
+ GList *cur_ac, *cur_item;
+ GtkWidget *menuitem;
+ PrefsAccount *ac_prefs;
+
+ /* destroy all previous menu item */
+ cur_item = GTK_MENU_SHELL(mainwin->ac_menu)->children;
+ while (cur_item != NULL) {
+ GList *next = cur_item->next;
+ gtk_widget_destroy(GTK_WIDGET(cur_item->data));
+ cur_item = next;
+ }
+
+ for (cur_ac = account_list; cur_ac != NULL; cur_ac = cur_ac->next) {
+ ac_prefs = (PrefsAccount *)cur_ac->data;
+
+ menuitem = gtk_menu_item_new_with_label
+ (ac_prefs->account_name
+ ? ac_prefs->account_name : _("Untitled"));
+ gtk_widget_show(menuitem);
+ gtk_menu_append(GTK_MENU(mainwin->ac_menu), menuitem);
+ g_signal_connect(G_OBJECT(menuitem), "activate",
+ G_CALLBACK(account_selector_menu_cb),
+ ac_prefs);
+ }
+}
+
+static void main_window_set_account_receive_menu(MainWindow *mainwin,
+ GList *account_list)
+{
+ GList *cur_ac, *cur_item;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ PrefsAccount *ac_prefs;
+
+ menu = gtk_item_factory_get_widget(mainwin->menu_factory,
+ "/Message/Receive");
+
+ /* search for separator */
+ for (cur_item = GTK_MENU_SHELL(menu)->children; cur_item != NULL;
+ cur_item = cur_item->next) {
+ if (GTK_BIN(cur_item->data)->child == NULL) {
+ cur_item = cur_item->next;
+ break;
+ }
+ }
+
+ /* destroy all previous menu item */
+ while (cur_item != NULL) {
+ GList *next = cur_item->next;
+ gtk_widget_destroy(GTK_WIDGET(cur_item->data));
+ cur_item = next;
+ }
+
+ for (cur_ac = account_list; cur_ac != NULL; cur_ac = cur_ac->next) {
+ ac_prefs = (PrefsAccount *)cur_ac->data;
+
+ menuitem = gtk_menu_item_new_with_label
+ (ac_prefs->account_name ? ac_prefs->account_name
+ : _("Untitled"));
+ gtk_widget_show(menuitem);
+ gtk_menu_append(GTK_MENU(menu), menuitem);
+ g_signal_connect(G_OBJECT(menuitem), "activate",
+ G_CALLBACK(account_receive_menu_cb),
+ ac_prefs);
+ }
+}
+
+void main_window_set_account_menu(GList *account_list)
+{
+ GList *cur;
+ MainWindow *mainwin;
+
+ for (cur = mainwin_list; cur != NULL; cur = cur->next) {
+ mainwin = (MainWindow *)cur->data;
+ main_window_set_account_selector_menu(mainwin, account_list);
+ main_window_set_account_receive_menu(mainwin, account_list);
+ }
+}
+
+static void main_window_show_cur_account(MainWindow *mainwin)
+{
+ gchar *buf;
+ gchar *ac_name;
+
+ ac_name = g_strdup(cur_account
+ ? (cur_account->account_name
+ ? cur_account->account_name : _("Untitled"))
+ : _("none"));
+
+ if (cur_account)
+ buf = g_strdup_printf("%s - %s", ac_name, PROG_VERSION);
+ else
+ buf = g_strdup(PROG_VERSION);
+ gtk_window_set_title(GTK_WINDOW(mainwin->window), buf);
+ g_free(buf);
+
+ gtk_label_set_text(GTK_LABEL(mainwin->ac_label), ac_name);
+ gtk_widget_queue_resize(mainwin->ac_button);
+
+ g_free(ac_name);
+}
+
+MainWindow *main_window_get(void)
+{
+ return (MainWindow *)mainwin_list->data;
+}
+
+GtkWidget *main_window_get_folder_window(MainWindow *mainwin)
+{
+ switch (mainwin->type) {
+ case SEPARATE_FOLDER:
+ return mainwin->win.sep_folder.folderwin;
+ case SEPARATE_BOTH:
+ return mainwin->win.sep_both.folderwin;
+ default:
+ return NULL;
+ }
+}
+
+GtkWidget *main_window_get_message_window(MainWindow *mainwin)
+{
+ switch (mainwin->type) {
+ case SEPARATE_MESSAGE:
+ return mainwin->win.sep_message.messagewin;
+ case SEPARATE_BOTH:
+ return mainwin->win.sep_both.messagewin;
+ default:
+ return NULL;
+ }
+}
+
+void main_window_separation_change(MainWindow *mainwin, SeparateType type)
+{
+ GtkWidget *folder_wid = GTK_WIDGET_PTR(mainwin->folderview);
+ GtkWidget *summary_wid = GTK_WIDGET_PTR(mainwin->summaryview);
+ GtkWidget *message_wid = GTK_WIDGET_PTR(mainwin->messageview);
+
+ debug_print(_("Changing window separation type from %d to %d\n"),
+ mainwin->type, type);
+
+ if (mainwin->type == type) return;
+
+ /* remove widgets from those containers */
+ gtk_widget_ref(folder_wid);
+ gtk_widget_ref(summary_wid);
+ gtk_widget_ref(message_wid);
+ gtkut_container_remove
+ (GTK_CONTAINER(folder_wid->parent), folder_wid);
+ gtkut_container_remove
+ (GTK_CONTAINER(summary_wid->parent), summary_wid);
+ gtkut_container_remove
+ (GTK_CONTAINER(message_wid->parent), message_wid);
+
+ /* clean containers */
+ switch (mainwin->type) {
+ case SEPARATE_NONE:
+ gtk_widget_destroy(mainwin->win.sep_none.hpaned);
+ break;
+ case SEPARATE_FOLDER:
+ gtk_widget_destroy(mainwin->win.sep_folder.vpaned);
+ gtk_widget_destroy(mainwin->win.sep_folder.folderwin);
+ break;
+ case SEPARATE_MESSAGE:
+ gtk_widget_destroy(mainwin->win.sep_message.hpaned);
+ gtk_widget_destroy(mainwin->win.sep_message.messagewin);
+ break;
+ case SEPARATE_BOTH:
+ gtk_widget_destroy(mainwin->win.sep_both.messagewin);
+ gtk_widget_destroy(mainwin->win.sep_both.folderwin);
+ break;
+ }
+
+ gtk_widget_hide(mainwin->window);
+ main_window_set_widgets(mainwin, type);
+ gtk_widget_show(mainwin->window);
+
+ gtk_widget_unref(folder_wid);
+ gtk_widget_unref(summary_wid);
+ gtk_widget_unref(message_wid);
+}
+
+void main_window_toggle_message_view(MainWindow *mainwin)
+{
+ SummaryView *summaryview = mainwin->summaryview;
+ union CompositeWin *cwin = &mainwin->win;
+ GtkWidget *vpaned = NULL;
+ GtkWidget *container = NULL;
+ GtkWidget *msgwin = NULL;
+
+ switch (mainwin->type) {
+ case SEPARATE_NONE:
+ vpaned = cwin->sep_none.vpaned;
+ container = cwin->sep_none.hpaned;
+ break;
+ case SEPARATE_FOLDER:
+ vpaned = cwin->sep_folder.vpaned;
+ container = mainwin->vbox_body;
+ break;
+ case SEPARATE_MESSAGE:
+ msgwin = mainwin->win.sep_message.messagewin;
+ break;
+ case SEPARATE_BOTH:
+ msgwin = mainwin->win.sep_both.messagewin;
+ break;
+ }
+
+ if (msgwin) {
+ if (GTK_WIDGET_VISIBLE(msgwin)) {
+ gtk_widget_hide(msgwin);
+ mainwin->messageview->visible = FALSE;
+ summaryview->displayed = NULL;
+ } else {
+ gtk_widget_show(msgwin);
+ mainwin->messageview->visible = TRUE;
+ }
+ } else if (vpaned->parent != NULL) {
+ mainwin->messageview->visible = FALSE;
+ summaryview->displayed = NULL;
+ gtk_widget_ref(vpaned);
+ gtkut_container_remove(GTK_CONTAINER(container), vpaned);
+ gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), container);
+ gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
+ GTK_ARROW_UP, GTK_SHADOW_OUT);
+ } else {
+ mainwin->messageview->visible = TRUE;
+ gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), vpaned);
+ gtk_container_add(GTK_CONTAINER(container), vpaned);
+ gtk_widget_unref(vpaned);
+ gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
+ GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ }
+
+ if (mainwin->messageview->visible == FALSE)
+ messageview_clear(mainwin->messageview);
+
+ main_window_set_menu_sensitive(mainwin);
+
+ prefs_common.msgview_visible = mainwin->messageview->visible;
+
+ gtk_widget_grab_focus(summaryview->ctree);
+}
+
+void main_window_get_size(MainWindow *mainwin)
+{
+ GtkAllocation *allocation;
+
+ allocation = &(GTK_WIDGET_PTR(mainwin->summaryview)->allocation);
+
+ if (allocation->width > 1 && allocation->height > 1) {
+ prefs_common.summaryview_width = allocation->width;
+
+ if ((mainwin->type == SEPARATE_NONE ||
+ mainwin->type == SEPARATE_FOLDER) &&
+ messageview_is_visible(mainwin->messageview))
+ prefs_common.summaryview_height = allocation->height;
+
+ prefs_common.mainview_width = allocation->width;
+ }
+
+ allocation = &mainwin->window->allocation;
+ if (allocation->width > 1 && allocation->height > 1) {
+ prefs_common.mainview_height = allocation->height;
+ prefs_common.mainwin_width = allocation->width;
+ prefs_common.mainwin_height = allocation->height;
+ }
+
+ allocation = &(GTK_WIDGET_PTR(mainwin->folderview)->allocation);
+ if (allocation->width > 1 && allocation->height > 1) {
+ prefs_common.folderview_width = allocation->width;
+ prefs_common.folderview_height = allocation->height;
+ }
+
+ allocation = &(GTK_WIDGET_PTR(mainwin->messageview)->allocation);
+ if (allocation->width > 1 && allocation->height > 1) {
+ prefs_common.msgview_width = allocation->width;
+ prefs_common.msgview_height = allocation->height;
+ }
+
+#if 0
+ debug_print("summaryview size: %d x %d\n",
+ prefs_common.summaryview_width,
+ prefs_common.summaryview_height);
+ debug_print("folderview size: %d x %d\n",
+ prefs_common.folderview_width,
+ prefs_common.folderview_height);
+ debug_print("messageview size: %d x %d\n",
+ prefs_common.msgview_width,
+ prefs_common.msgview_height);
+#endif
+}
+
+void main_window_get_position(MainWindow *mainwin)
+{
+ gint x, y;
+ GtkWidget *window;
+
+ gtkut_widget_get_uposition(mainwin->window, &x, &y);
+
+ prefs_common.mainview_x = x;
+ prefs_common.mainview_y = y;
+ prefs_common.mainwin_x = x;
+ prefs_common.mainwin_y = y;
+
+ debug_print("main window position: %d, %d\n", x, y);
+
+ window = main_window_get_folder_window(mainwin);
+ if (window) {
+ gtkut_widget_get_uposition(window, &x, &y);
+ prefs_common.folderwin_x = x;
+ prefs_common.folderwin_y = y;
+ debug_print("folder window position: %d, %d\n", x, y);
+ }
+ window = main_window_get_message_window(mainwin);
+ if (window) {
+ gtkut_widget_get_uposition(window, &x, &y);
+ prefs_common.main_msgwin_x = x;
+ prefs_common.main_msgwin_y = y;
+ debug_print("message window position: %d, %d\n", x, y);
+ }
+}
+
+void main_window_progress_on(MainWindow *mainwin)
+{
+ gtk_progress_set_show_text(GTK_PROGRESS(mainwin->progressbar), TRUE);
+ gtk_progress_set_format_string(GTK_PROGRESS(mainwin->progressbar), "");
+}
+
+void main_window_progress_off(MainWindow *mainwin)
+{
+ gtk_progress_set_show_text(GTK_PROGRESS(mainwin->progressbar), FALSE);
+ gtk_progress_bar_update(GTK_PROGRESS_BAR(mainwin->progressbar), 0.0);
+ gtk_progress_set_format_string(GTK_PROGRESS(mainwin->progressbar), "");
+}
+
+void main_window_progress_set(MainWindow *mainwin, gint cur, gint total)
+{
+ gchar buf[32];
+
+ g_snprintf(buf, sizeof(buf), "%d / %d", cur, total);
+ gtk_progress_set_format_string(GTK_PROGRESS(mainwin->progressbar), buf);
+ gtk_progress_bar_update(GTK_PROGRESS_BAR(mainwin->progressbar),
+ (cur == 0 && total == 0) ? 0 :
+ (gfloat)cur / (gfloat)total);
+}
+
+void main_window_toggle_online(MainWindow *mainwin, gboolean online)
+{
+ if (prefs_common.online_mode != online)
+ online_switch_clicked(mainwin->online_switch, mainwin);
+}
+
+gboolean main_window_toggle_online_if_offline(MainWindow *mainwin)
+{
+ if (!prefs_common.online_mode) {
+ if (alertpanel(_("Offline"),
+ _("You are offline. Go online?"),
+ _("Yes"), _("No"), NULL) == G_ALERTDEFAULT)
+ main_window_toggle_online(mainwin, TRUE);
+ }
+
+ return prefs_common.online_mode;
+}
+
+void main_window_empty_trash(MainWindow *mainwin, gboolean confirm)
+{
+ GList *list;
+
+ if (confirm) {
+ if (alertpanel(_("Empty all trash"),
+ _("Empty messages in all trash?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
+ return;
+ manage_window_focus_in(mainwin->window, NULL, NULL);
+ }
+
+ procmsg_empty_all_trash();
+ statusbar_pop_all();
+
+ for (list = folder_get_list(); list != NULL; list = list->next) {
+ Folder *folder;
+
+ folder = list->data;
+ if (folder->trash)
+ folderview_update_item(folder->trash, TRUE);
+ }
+
+ if (mainwin->summaryview->folder_item &&
+ mainwin->summaryview->folder_item->stype == F_TRASH)
+ gtk_widget_grab_focus(mainwin->folderview->ctree);
+}
+
+void main_window_add_mailbox(MainWindow *mainwin)
+{
+ gchar *path;
+ Folder *folder;
+
+ path = input_dialog(_("Add mailbox"),
+ _("Input the location of mailbox.\n"
+ "If the existing mailbox is specified, it will be\n"
+ "scanned automatically."),
+ "Mail");
+ if (!path) return;
+ if (folder_find_from_path(path)) {
+ alertpanel_error(_("The mailbox `%s' already exists."), path);
+ g_free(path);
+ return;
+ }
+ if (!strcmp(path, "Mail"))
+ folder = folder_new(F_MH, _("Mailbox"), path);
+ else
+ folder = folder_new(F_MH, g_basename(path), path);
+ g_free(path);
+
+ if (folder->klass->create_tree(folder) < 0) {
+ alertpanel_error(_("Creation of the mailbox failed.\n"
+ "Maybe some files already exist, or you don't have the permission to write there."));
+ folder_destroy(folder);
+ return;
+ }
+
+ folder_add(folder);
+ folder_set_ui_func(folder, scan_tree_func, mainwin);
+ folder->klass->scan_tree(folder);
+ folder_set_ui_func(folder, NULL, NULL);
+
+ folderview_set(mainwin->folderview);
+}
+
+typedef enum
+{
+ M_UNLOCKED = 1 << 0,
+ M_MSG_EXIST = 1 << 1,
+ M_TARGET_EXIST = 1 << 2,
+ M_SINGLE_TARGET_EXIST = 1 << 3,
+ M_EXEC = 1 << 4,
+ M_ALLOW_REEDIT = 1 << 5,
+ M_HAVE_ACCOUNT = 1 << 6,
+ M_THREADED = 1 << 7,
+ M_UNTHREADED = 1 << 8,
+ M_ALLOW_DELETE = 1 << 9,
+ M_INC_ACTIVE = 1 << 10,
+
+ M_FOLDER_NEWOK = 1 << 11,
+ M_FOLDER_RENOK = 1 << 12,
+ M_FOLDER_DELOK = 1 << 13,
+ M_MBOX_ADDOK = 1 << 14,
+ M_MBOX_RMOK = 1 << 15,
+ M_MBOX_CHKOK = 1 << 16,
+ M_MBOX_CHKALLOK = 1 << 17,
+ M_MBOX_REBUILDOK = 1 << 18
+} SensitiveCond;
+
+static SensitiveCond main_window_get_current_state(MainWindow *mainwin)
+{
+ SensitiveCond state = 0;
+ SummarySelection selection;
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ selection = summary_get_selection_type(mainwin->summaryview);
+
+ if (mainwin->lock_count == 0)
+ state |= M_UNLOCKED;
+ if (selection != SUMMARY_NONE)
+ state |= M_MSG_EXIST;
+ if (item && item->path && item->parent && !item->no_select) {
+ state |= M_EXEC;
+ if (item->threaded)
+ state |= M_THREADED;
+ else
+ state |= M_UNTHREADED;
+ if (FOLDER_TYPE(item->folder) != F_NEWS)
+ state |= M_ALLOW_DELETE;
+ }
+ if (selection == SUMMARY_SELECTED_SINGLE ||
+ selection == SUMMARY_SELECTED_MULTIPLE)
+ state |= M_TARGET_EXIST;
+ if (selection == SUMMARY_SELECTED_SINGLE)
+ state |= M_SINGLE_TARGET_EXIST;
+ if (selection == SUMMARY_SELECTED_SINGLE &&
+ (item &&
+ (item->stype == F_OUTBOX || item->stype == F_DRAFT ||
+ item->stype == F_QUEUE)))
+ state |= M_ALLOW_REEDIT;
+ if (cur_account)
+ state |= M_HAVE_ACCOUNT;
+
+ if (inc_is_active())
+ state |= M_INC_ACTIVE;
+
+ item = folderview_get_selected_item(mainwin->folderview);
+ if (item) {
+ state |= M_FOLDER_NEWOK;
+ if (item->parent == NULL) {
+ state |= M_MBOX_RMOK;
+ state |= M_MBOX_CHKOK;
+ }
+ if (FOLDER_IS_LOCAL(item->folder) ||
+ FOLDER_TYPE(item->folder) == F_IMAP) {
+ if (item->parent == NULL)
+ state |= M_MBOX_REBUILDOK;
+ else if (item->stype == F_NORMAL) {
+ state |= M_FOLDER_RENOK;
+ state |= M_FOLDER_DELOK;
+ }
+ } else if (FOLDER_TYPE(item->folder) == F_NEWS) {
+ if (item->parent != NULL)
+ state |= M_FOLDER_DELOK;
+ }
+ }
+ state |= M_MBOX_ADDOK;
+ state |= M_MBOX_CHKALLOK;
+
+ return state;
+}
+
+void main_window_set_toolbar_sensitive(MainWindow *mainwin)
+{
+ SensitiveCond state;
+ gboolean sensitive;
+ gint i = 0;
+
+ struct {
+ GtkWidget *widget;
+ SensitiveCond cond;
+ } entry[12];
+
+#define SET_WIDGET_COND(w, c) \
+{ \
+ entry[i].widget = w; \
+ entry[i].cond = c; \
+ i++; \
+}
+
+ SET_WIDGET_COND(mainwin->get_btn, M_HAVE_ACCOUNT|M_UNLOCKED);
+ SET_WIDGET_COND(mainwin->getall_btn, M_HAVE_ACCOUNT|M_UNLOCKED);
+ SET_WIDGET_COND(mainwin->compose_btn, M_HAVE_ACCOUNT);
+ SET_WIDGET_COND(mainwin->reply_btn,
+ M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
+ SET_WIDGET_COND(GTK_WIDGET_PTR(mainwin->reply_combo),
+ M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
+ SET_WIDGET_COND(mainwin->replyall_btn,
+ M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
+ SET_WIDGET_COND(mainwin->fwd_btn, M_HAVE_ACCOUNT|M_TARGET_EXIST);
+ SET_WIDGET_COND(GTK_WIDGET_PTR(mainwin->fwd_combo),
+ M_HAVE_ACCOUNT|M_TARGET_EXIST);
+#if 0
+ SET_WIDGET_COND(mainwin->prefs_btn, M_UNLOCKED);
+ SET_WIDGET_COND(mainwin->account_btn, M_UNLOCKED);
+#endif
+ SET_WIDGET_COND(mainwin->next_btn, M_MSG_EXIST);
+ SET_WIDGET_COND(mainwin->delete_btn,
+ M_TARGET_EXIST|M_ALLOW_DELETE);
+ SET_WIDGET_COND(mainwin->exec_btn, M_MSG_EXIST|M_EXEC);
+ SET_WIDGET_COND(NULL, 0);
+
+#undef SET_WIDGET_COND
+
+ state = main_window_get_current_state(mainwin);
+
+ for (i = 0; entry[i].widget != NULL; i++) {
+ sensitive = ((entry[i].cond & state) == entry[i].cond);
+ gtk_widget_set_sensitive(entry[i].widget, sensitive);
+ }
+}
+
+void main_window_set_menu_sensitive(MainWindow *mainwin)
+{
+ GtkItemFactory *ifactory = mainwin->menu_factory;
+ SensitiveCond state;
+ gboolean sensitive;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ FolderItem *item;
+ gchar *menu_path;
+ gint i;
+ GList *cur_item;
+
+ static const struct {
+ gchar *const entry;
+ SensitiveCond cond;
+ } entry[] = {
+ {"/File/Folder/Create new folder...", M_UNLOCKED|M_FOLDER_NEWOK},
+ {"/File/Folder/Rename folder..." , M_UNLOCKED|M_FOLDER_RENOK},
+ {"/File/Folder/Delete folder" , M_UNLOCKED|M_FOLDER_DELOK},
+ {"/File/Mailbox/Add mailbox..." , M_UNLOCKED|M_MBOX_ADDOK},
+ {"/File/Mailbox/Remove mailbox" , M_UNLOCKED|M_MBOX_RMOK},
+ {"/File/Mailbox/Check for new messages"
+ , M_UNLOCKED|M_MBOX_CHKOK},
+ {"/File/Mailbox/Check for new messages in all mailboxes"
+ , M_UNLOCKED|M_MBOX_CHKALLOK},
+ {"/File/Mailbox/Rebuild folder tree", M_UNLOCKED|M_MBOX_REBUILDOK},
+ {"/File/Import mbox file..." , M_UNLOCKED},
+ {"/File/Export to mbox file..." , M_UNLOCKED},
+ {"/File/Empty all trash" , M_UNLOCKED},
+
+ {"/File/Save as..." , M_SINGLE_TARGET_EXIST},
+ {"/File/Print..." , M_TARGET_EXIST},
+ {"/File/Work offline", M_UNLOCKED},
+ /* {"/File/Close" , M_UNLOCKED}, */
+ {"/File/Exit" , M_UNLOCKED},
+
+ {"/Edit/Select thread" , M_SINGLE_TARGET_EXIST},
+
+ {"/View/Sort" , M_EXEC},
+ {"/View/Thread view" , M_EXEC},
+ {"/View/Expand all threads" , M_MSG_EXIST},
+ {"/View/Collapse all threads" , M_MSG_EXIST},
+ {"/View/Go to/Prev message" , M_MSG_EXIST},
+ {"/View/Go to/Next message" , M_MSG_EXIST},
+ {"/View/Go to/Prev unread message" , M_MSG_EXIST},
+ {"/View/Go to/Next unread message" , M_MSG_EXIST},
+ {"/View/Go to/Prev new message" , M_MSG_EXIST},
+ {"/View/Go to/Next new message" , M_MSG_EXIST},
+ {"/View/Go to/Prev marked message" , M_MSG_EXIST},
+ {"/View/Go to/Next marked message" , M_MSG_EXIST},
+ {"/View/Go to/Prev labeled message", M_MSG_EXIST},
+ {"/View/Go to/Next labeled message", M_MSG_EXIST},
+ {"/View/Open in new window" , M_SINGLE_TARGET_EXIST},
+ {"/View/Show all header" , M_SINGLE_TARGET_EXIST},
+ {"/View/Message source" , M_SINGLE_TARGET_EXIST},
+
+ {"/Message/Receive/Get from current account"
+ , M_HAVE_ACCOUNT|M_UNLOCKED},
+ {"/Message/Receive/Get from all accounts"
+ , M_HAVE_ACCOUNT|M_UNLOCKED},
+ {"/Message/Receive/Cancel receiving"
+ , M_INC_ACTIVE},
+
+ {"/Message/Compose new message" , M_HAVE_ACCOUNT},
+ {"/Message/Reply" , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
+ {"/Message/Reply to" , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
+ {"/Message/Forward" , M_HAVE_ACCOUNT|M_TARGET_EXIST},
+ {"/Message/Forward as attachment", M_HAVE_ACCOUNT|M_TARGET_EXIST},
+ {"/Message/Redirect" , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
+ {"/Message/Move..." , M_TARGET_EXIST|M_ALLOW_DELETE},
+ {"/Message/Copy..." , M_TARGET_EXIST|M_EXEC},
+ {"/Message/Delete" , M_TARGET_EXIST|M_ALLOW_DELETE},
+ {"/Message/Mark" , M_TARGET_EXIST},
+ {"/Message/Re-edit" , M_HAVE_ACCOUNT|M_ALLOW_REEDIT},
+
+ {"/Tools/Add sender to address book" , M_SINGLE_TARGET_EXIST},
+ {"/Tools/Filter all messages in folder", M_MSG_EXIST|M_EXEC},
+ {"/Tools/Filter selected messages" , M_TARGET_EXIST|M_EXEC},
+ {"/Tools/Create filter rule" , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
+ {"/Tools/Actions" , M_TARGET_EXIST|M_UNLOCKED},
+ {"/Tools/Execute" , M_MSG_EXIST|M_EXEC},
+ {"/Tools/Delete duplicated messages" , M_MSG_EXIST|M_ALLOW_DELETE},
+
+ {"/Configuration", M_UNLOCKED},
+
+ {NULL, 0}
+ };
+
+ state = main_window_get_current_state(mainwin);
+
+ for (i = 0; entry[i].entry != NULL; i++) {
+ sensitive = ((entry[i].cond & state) == entry[i].cond);
+ menu_set_sensitive(ifactory, entry[i].entry, sensitive);
+ }
+
+ menu = gtk_item_factory_get_widget(ifactory, "/Message/Receive");
+
+ /* search for separator */
+ for (cur_item = GTK_MENU_SHELL(menu)->children; cur_item != NULL;
+ cur_item = cur_item->next) {
+ if (GTK_BIN(cur_item->data)->child == NULL) {
+ cur_item = cur_item->next;
+ break;
+ }
+ }
+
+ for (; cur_item != NULL; cur_item = cur_item->next) {
+ gtk_widget_set_sensitive(GTK_WIDGET(cur_item->data),
+ (M_UNLOCKED & state) != 0);
+ }
+
+ main_window_menu_callback_block(mainwin);
+
+#define SET_CHECK_MENU_ACTIVE(path, active) \
+{ \
+ menuitem = gtk_item_factory_get_widget(ifactory, path); \
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
+}
+
+ SET_CHECK_MENU_ACTIVE("/View/Show or hide/Message view",
+ messageview_is_visible(mainwin->messageview));
+
+ item = mainwin->summaryview->folder_item;
+ menu_path = "/View/Sort/Don't sort";
+ if (item) {
+ switch (item->sort_key) {
+ case SORT_BY_NUMBER:
+ menu_path = "/View/Sort/by number"; break;
+ case SORT_BY_SIZE:
+ menu_path = "/View/Sort/by size"; break;
+ case SORT_BY_DATE:
+ menu_path = "/View/Sort/by date"; break;
+ case SORT_BY_FROM:
+ menu_path = "/View/Sort/by from"; break;
+ case SORT_BY_TO:
+ menu_path = "/View/Sort/by recipient"; break;
+ case SORT_BY_SUBJECT:
+ menu_path = "/View/Sort/by subject"; break;
+ case SORT_BY_LABEL:
+ menu_path = "/View/Sort/by color label"; break;
+ case SORT_BY_MARK:
+ menu_path = "/View/Sort/by mark"; break;
+ case SORT_BY_UNREAD:
+ menu_path = "/View/Sort/by unread"; break;
+ case SORT_BY_MIME:
+ menu_path = "/View/Sort/by attachment"; break;
+ case SORT_BY_NONE:
+ default:
+ menu_path = "/View/Sort/Don't sort"; break;
+ }
+ }
+ SET_CHECK_MENU_ACTIVE(menu_path, TRUE);
+
+ if (!item || item->sort_type == SORT_ASCENDING) {
+ SET_CHECK_MENU_ACTIVE("/View/Sort/Ascending", TRUE);
+ } else {
+ SET_CHECK_MENU_ACTIVE("/View/Sort/Descending", TRUE);
+ }
+
+ if (item && item->sort_key != SORT_BY_NONE) {
+ menu_set_sensitive(ifactory, "/View/Sort/Ascending", TRUE);
+ menu_set_sensitive(ifactory, "/View/Sort/Descending", TRUE);
+ } else {
+ menu_set_sensitive(ifactory, "/View/Sort/Ascending", FALSE);
+ menu_set_sensitive(ifactory, "/View/Sort/Descending", FALSE);
+ }
+
+ SET_CHECK_MENU_ACTIVE("/View/Show all header",
+ mainwin->messageview->textview->show_all_headers);
+ SET_CHECK_MENU_ACTIVE("/View/Thread view", (state & M_THREADED) != 0);
+
+#undef SET_CHECK_MENU_ACTIVE
+
+ main_window_menu_callback_unblock(mainwin);
+}
+
+void main_window_popup(MainWindow *mainwin)
+{
+ gtkut_window_popup(mainwin->window);
+
+ switch (mainwin->type) {
+ case SEPARATE_FOLDER:
+ gtkut_window_popup(mainwin->win.sep_folder.folderwin);
+ break;
+ case SEPARATE_MESSAGE:
+ gtkut_window_popup(mainwin->win.sep_message.messagewin);
+ break;
+ case SEPARATE_BOTH:
+ gtkut_window_popup(mainwin->win.sep_both.folderwin);
+ gtkut_window_popup(mainwin->win.sep_both.messagewin);
+ break;
+ default:
+ break;
+ }
+}
+
+static void main_window_set_widgets(MainWindow *mainwin, SeparateType type)
+{
+ GtkWidget *folderwin = NULL;
+ GtkWidget *messagewin = NULL;
+ GtkWidget *hpaned;
+ GtkWidget *vpaned;
+ GtkWidget *vbox_body = mainwin->vbox_body;
+ GtkItemFactory *ifactory = mainwin->menu_factory;
+ GtkWidget *menuitem;
+
+ debug_print("Setting widgets... ");
+
+ /* create separated window(s) if needed */
+ if (type & SEPARATE_FOLDER) {
+ folderwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(folderwin),
+ _("Sylpheed - Folder View"));
+ gtk_window_set_wmclass(GTK_WINDOW(folderwin),
+ "folder_view", "Sylpheed");
+ gtk_window_set_policy(GTK_WINDOW(folderwin),
+ TRUE, TRUE, FALSE);
+ gtk_widget_set_uposition(folderwin, prefs_common.folderwin_x,
+ prefs_common.folderwin_y);
+ gtk_container_set_border_width(GTK_CONTAINER(folderwin),
+ BORDER_WIDTH);
+ g_signal_connect(G_OBJECT(folderwin), "delete_event",
+ G_CALLBACK(folder_window_close_cb), mainwin);
+ gtk_container_add(GTK_CONTAINER(folderwin),
+ GTK_WIDGET_PTR(mainwin->folderview));
+ gtk_widget_realize(folderwin);
+ if (prefs_common.folderview_visible)
+ gtk_widget_show(folderwin);
+ }
+ if (type & SEPARATE_MESSAGE) {
+ messagewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(messagewin),
+ _("Sylpheed - Message View"));
+ gtk_window_set_wmclass(GTK_WINDOW(messagewin),
+ "message_view", "Sylpheed");
+ gtk_window_set_policy(GTK_WINDOW(messagewin),
+ TRUE, TRUE, FALSE);
+ gtk_widget_set_uposition(messagewin, prefs_common.main_msgwin_x,
+ prefs_common.main_msgwin_y);
+ gtk_container_set_border_width(GTK_CONTAINER(messagewin),
+ BORDER_WIDTH);
+ g_signal_connect(G_OBJECT(messagewin), "delete_event",
+ G_CALLBACK(message_window_close_cb), mainwin);
+ gtk_container_add(GTK_CONTAINER(messagewin),
+ GTK_WIDGET_PTR(mainwin->messageview));
+ gtk_widget_realize(messagewin);
+ if (messageview_is_visible(mainwin->messageview))
+ gtk_widget_show(messagewin);
+ }
+
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->folderview),
+ prefs_common.folderview_width,
+ prefs_common.folderview_height);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->summaryview),
+ prefs_common.summaryview_width,
+ prefs_common.summaryview_height);
+ gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin->messageview),
+ prefs_common.msgview_width,
+ prefs_common.msgview_height);
+
+ switch (type) {
+ case SEPARATE_NONE:
+ hpaned = gtk_hpaned_new();
+ gtk_box_pack_start(GTK_BOX(vbox_body), hpaned, TRUE, TRUE, 0);
+ gtk_paned_add1(GTK_PANED(hpaned),
+ GTK_WIDGET_PTR(mainwin->folderview));
+ gtk_widget_show(hpaned);
+ gtk_widget_queue_resize(hpaned);
+
+ vpaned = gtk_vpaned_new();
+ if (messageview_is_visible(mainwin->messageview)) {
+ gtk_paned_add2(GTK_PANED(hpaned), vpaned);
+ gtk_paned_add1(GTK_PANED(vpaned),
+ GTK_WIDGET_PTR(mainwin->summaryview));
+ } else {
+ gtk_paned_add2(GTK_PANED(hpaned),
+ GTK_WIDGET_PTR(mainwin->summaryview));
+ gtk_widget_ref(vpaned);
+ }
+ gtk_paned_add2(GTK_PANED(vpaned),
+ GTK_WIDGET_PTR(mainwin->messageview));
+ gtk_widget_show(vpaned);
+ gtk_widget_queue_resize(vpaned);
+
+ mainwin->win.sep_none.hpaned = hpaned;
+ mainwin->win.sep_none.vpaned = vpaned;
+ break;
+ case SEPARATE_FOLDER:
+ vpaned = gtk_vpaned_new();
+ if (messageview_is_visible(mainwin->messageview)) {
+ gtk_box_pack_start(GTK_BOX(vbox_body), vpaned,
+ TRUE, TRUE, 0);
+ gtk_paned_add1(GTK_PANED(vpaned),
+ GTK_WIDGET_PTR(mainwin->summaryview));
+ } else {
+ gtk_box_pack_start(GTK_BOX(vbox_body),
+ GTK_WIDGET_PTR(mainwin->summaryview),
+ TRUE, TRUE, 0);
+ gtk_widget_ref(vpaned);
+ }
+ gtk_paned_add2(GTK_PANED(vpaned),
+ GTK_WIDGET_PTR(mainwin->messageview));
+ gtk_widget_show(vpaned);
+ gtk_widget_queue_resize(vpaned);
+
+ mainwin->win.sep_folder.folderwin = folderwin;
+ mainwin->win.sep_folder.vpaned = vpaned;
+
+ break;
+ case SEPARATE_MESSAGE:
+ hpaned = gtk_hpaned_new();
+ gtk_box_pack_start(GTK_BOX(vbox_body), hpaned, TRUE, TRUE, 0);
+ gtk_paned_add1(GTK_PANED(hpaned),
+ GTK_WIDGET_PTR(mainwin->folderview));
+ gtk_paned_add2(GTK_PANED(hpaned),
+ GTK_WIDGET_PTR(mainwin->summaryview));
+ gtk_widget_show(hpaned);
+ gtk_widget_queue_resize(hpaned);
+
+ mainwin->win.sep_message.messagewin = messagewin;
+ mainwin->win.sep_message.hpaned = hpaned;
+
+ break;
+ case SEPARATE_BOTH:
+ gtk_box_pack_start(GTK_BOX(vbox_body),
+ GTK_WIDGET_PTR(mainwin->summaryview),
+ TRUE, TRUE, 0);
+
+ mainwin->win.sep_both.folderwin = folderwin;
+ mainwin->win.sep_both.messagewin = messagewin;
+
+ break;
+ }
+
+ gtk_widget_set_uposition(mainwin->window,
+ prefs_common.mainwin_x,
+ prefs_common.mainwin_y);
+
+ gtk_widget_queue_resize(vbox_body);
+ gtk_widget_queue_resize(mainwin->vbox);
+ gtk_widget_queue_resize(mainwin->window);
+
+ mainwin->type = type;
+
+ /* toggle menu state */
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Folder tree");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ (type & SEPARATE_FOLDER) == 0 ? TRUE :
+ prefs_common.folderview_visible);
+ gtk_widget_set_sensitive(menuitem, ((type & SEPARATE_FOLDER) != 0));
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Show or hide/Message view");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ (type & SEPARATE_MESSAGE) == 0 ? TRUE :
+ prefs_common.msgview_visible);
+
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Separate folder tree");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ ((type & SEPARATE_FOLDER) != 0));
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Separate message view");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ ((type & SEPARATE_MESSAGE) != 0));
+
+ if (folderwin) {
+ g_signal_connect
+ (G_OBJECT(folderwin), "size_allocate",
+ G_CALLBACK(folder_window_size_allocate_cb), mainwin);
+ }
+ if (messagewin) {
+ g_signal_connect
+ (G_OBJECT(messagewin), "size_allocate",
+ G_CALLBACK(message_window_size_allocate_cb), mainwin);
+ }
+
+ debug_print("done.\n");
+}
+
+static GtkItemFactoryEntry reply_entries[] =
+{
+ {N_("/_Reply"), NULL, reply_cb, COMPOSE_REPLY, NULL},
+ {N_("/Reply to _all"), NULL, reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
+ {N_("/Reply to _sender"), NULL, reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
+ {N_("/Reply to mailing _list"), NULL, reply_cb, COMPOSE_REPLY_TO_LIST, NULL}
+};
+
+static GtkItemFactoryEntry forward_entries[] =
+{
+ {N_("/_Forward"), NULL, reply_cb, COMPOSE_FORWARD, NULL},
+ {N_("/For_ward as attachment"), NULL, reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
+ {N_("/Redirec_t"), NULL, reply_cb, COMPOSE_REDIRECT, NULL}
+};
+
+static void main_window_toolbar_create(MainWindow *mainwin,
+ GtkWidget *container)
+{
+ GtkWidget *toolbar;
+ GtkWidget *icon_wid;
+ GtkWidget *get_btn;
+ GtkWidget *getall_btn;
+ GtkWidget *send_btn;
+ GtkWidget *compose_btn;
+ GtkWidget *reply_btn;
+ ComboButton *reply_combo;
+ GtkWidget *replyall_btn;
+ GtkWidget *fwd_btn;
+ ComboButton *fwd_combo;
+#if 0
+ GtkWidget *prefs_btn;
+ GtkWidget *account_btn;
+#endif
+ GtkWidget *next_btn;
+ GtkWidget *delete_btn;
+ GtkWidget *exec_btn;
+
+ gint n_entries;
+
+ toolbar = gtk_toolbar_new();
+ gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar),
+ GTK_ORIENTATION_HORIZONTAL);
+ gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH);
+ gtk_container_add(GTK_CONTAINER(container), toolbar);
+ gtk_container_set_border_width(GTK_CONTAINER(container), 2);
+ //gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE);
+ //gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
+ // GTK_TOOLBAR_SPACE_LINE);
+ gtk_widget_set_size_request(toolbar, 1, -1);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE);
+ get_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Get"),
+ _("Incorporate new mail"),
+ "Get",
+ icon_wid,
+ G_CALLBACK(toolbar_inc_cb),
+ mainwin);
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE_ALL);
+ getall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Get all"),
+ _("Incorporate new mail of all accounts"),
+ "Get all",
+ icon_wid,
+ G_CALLBACK(toolbar_inc_all_cb),
+ mainwin);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND);
+ send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Send"),
+ _("Send queued message(s)"),
+ "Send",
+ icon_wid,
+ G_CALLBACK(toolbar_send_cb),
+ mainwin);
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_COMPOSE);
+ compose_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Compose"),
+ _("Compose new message"),
+ "New",
+ icon_wid,
+ G_CALLBACK(toolbar_compose_cb),
+ mainwin);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY);
+ reply_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Reply"),
+ _("Reply to the message"),
+ "Reply",
+ icon_wid,
+ G_CALLBACK(toolbar_reply_cb),
+ mainwin);
+
+ n_entries = sizeof(reply_entries) / sizeof(reply_entries[0]);
+ reply_combo = gtkut_combo_button_create(reply_btn,
+ reply_entries, n_entries,
+ "<Reply>", mainwin);
+ gtk_button_set_relief(GTK_BUTTON(reply_combo->arrow), GTK_RELIEF_NONE);
+ gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),
+ GTK_WIDGET_PTR(reply_combo),
+ _("Reply to the message"), "Reply");
+
+ icon_wid = stock_pixmap_widget
+ (container, STOCK_PIXMAP_MAIL_REPLY_TO_ALL);
+ replyall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Reply all"),
+ _("Reply to all"),
+ "Reply to all",
+ icon_wid,
+ G_CALLBACK(toolbar_reply_to_all_cb),
+ mainwin);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_FORWARD);
+ fwd_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Forward"),
+ _("Forward the message"),
+ "Fwd",
+ icon_wid,
+ G_CALLBACK(toolbar_forward_cb),
+ mainwin);
+
+ n_entries = sizeof(forward_entries) / sizeof(forward_entries[0]);
+ fwd_combo = gtkut_combo_button_create(fwd_btn,
+ forward_entries, n_entries,
+ "<Forward>", mainwin);
+ gtk_button_set_relief(GTK_BUTTON(fwd_combo->arrow), GTK_RELIEF_NONE);
+ gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),
+ GTK_WIDGET_PTR(fwd_combo),
+ _("Forward the message"), "Fwd");
+
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_CLOSE);
+ delete_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Delete"),
+ _("Delete the message"),
+ "Delete",
+ icon_wid,
+ G_CALLBACK(toolbar_delete_cb),
+ mainwin);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_EXEC);
+ exec_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Execute"),
+ _("Execute marked process"),
+ "Execute",
+ icon_wid,
+ G_CALLBACK(toolbar_exec_cb),
+ mainwin);
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_DOWN_ARROW);
+ next_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Next"),
+ _("Next unread message"),
+ "Next unread",
+ icon_wid,
+ G_CALLBACK(toolbar_next_unread_cb),
+ mainwin);
+
+#if 0
+ gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PREFERENCES);
+ prefs_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Prefs"),
+ _("Common preferences"),
+ "Prefs",
+ icon_wid,
+ G_CALLBACK(toolbar_prefs_cb),
+ mainwin);
+ icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PROPERTIES);
+ account_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Account"),
+ _("Account setting"),
+ "Account",
+ icon_wid,
+ G_CALLBACK(toolbar_account_cb),
+ mainwin);
+ g_signal_connect(G_OBJECT(account_btn), "button_press_event",
+ G_CALLBACK(toolbar_account_button_pressed), mainwin);
+#endif
+
+ mainwin->toolbar = toolbar;
+ mainwin->get_btn = get_btn;
+ mainwin->getall_btn = getall_btn;
+ mainwin->compose_btn = compose_btn;
+ mainwin->reply_btn = reply_btn;
+ mainwin->reply_combo = reply_combo;
+ mainwin->replyall_btn = replyall_btn;
+ mainwin->fwd_btn = fwd_btn;
+ mainwin->fwd_combo = fwd_combo;
+ mainwin->send_btn = send_btn;
+#if 0
+ mainwin->prefs_btn = prefs_btn;
+ mainwin->account_btn = account_btn;
+#endif
+ mainwin->next_btn = next_btn;
+ mainwin->delete_btn = delete_btn;
+ mainwin->exec_btn = exec_btn;
+
+ gtk_widget_show_all(toolbar);
+}
+
+/* callback functions */
+
+static void toolbar_inc_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ inc_mail_cb(mainwin, 0, NULL);
+}
+
+static void toolbar_inc_all_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ inc_all_account_mail_cb(mainwin, 0, NULL);
+}
+
+static void toolbar_send_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ send_queue_cb(mainwin, 0, NULL);
+}
+
+static void toolbar_compose_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ compose_cb(mainwin, 0, NULL);
+}
+
+static void toolbar_reply_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ if (prefs_common.default_reply_list)
+ reply_cb(mainwin, COMPOSE_REPLY_TO_LIST, NULL);
+ else
+ reply_cb(mainwin, COMPOSE_REPLY, NULL);
+}
+
+static void toolbar_reply_to_all_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ reply_cb(mainwin, COMPOSE_REPLY_TO_ALL, NULL);
+}
+
+static void toolbar_forward_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ reply_cb(mainwin, COMPOSE_FORWARD, NULL);
+}
+
+static void toolbar_delete_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ summary_delete(mainwin->summaryview);
+}
+
+static void toolbar_exec_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ summary_execute(mainwin->summaryview);
+}
+
+static void toolbar_next_unread_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ next_unread_cb(mainwin, 0, NULL);
+}
+
+#if 0
+static void toolbar_prefs_cb (GtkWidget *widget,
+ gpointer data)
+{
+ prefs_common_open();
+}
+
+static void toolbar_account_cb (GtkWidget *widget,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ prefs_account_open_cb(mainwin, 0, NULL);
+}
+
+static void toolbar_account_button_pressed(GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ if (!event) return;
+ if (event->button != 3) return;
+
+ gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+ g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", widget);
+
+ gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL,
+ menu_button_position, widget,
+ event->button, event->time);
+}
+#endif
+
+static void toolbar_child_attached(GtkWidget *widget, GtkWidget *child,
+ gpointer data)
+{
+ gtk_widget_set_size_request(child, 1, -1);
+}
+
+static void toolbar_child_detached(GtkWidget *widget, GtkWidget *child,
+ gpointer data)
+{
+ gtk_widget_set_size_request(child, -1, -1);
+}
+
+static void online_switch_clicked(GtkWidget *widget, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ GtkWidget *menuitem;
+
+ menuitem = gtk_item_factory_get_item(mainwin->menu_factory,
+ "/File/Work offline");
+
+ if (prefs_common.online_mode == TRUE) {
+ prefs_common.online_mode = FALSE;
+ gtk_widget_hide(mainwin->online_pixmap);
+ gtk_widget_show(mainwin->offline_pixmap);
+ gtk_tooltips_set_tip
+ (mainwin->online_tip, mainwin->online_switch,
+ _("You are offline. Click the icon to go online."),
+ NULL);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ TRUE);
+ inc_autocheck_timer_remove();
+ } else {
+ prefs_common.online_mode = TRUE;
+ gtk_widget_hide(mainwin->offline_pixmap);
+ gtk_widget_show(mainwin->online_pixmap);
+ gtk_tooltips_set_tip
+ (mainwin->online_tip, mainwin->online_switch,
+ _("You are online. Click the icon to go offline."),
+ NULL);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+ FALSE);
+ inc_autocheck_timer_set();
+ }
+}
+
+static void ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ if (!event) return;
+
+ gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+ g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", widget);
+
+ gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL,
+ menu_button_position, widget,
+ event->button, event->time);
+}
+
+static void ac_menu_popup_closed(GtkMenuShell *menu_shell, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ GtkWidget *button;
+
+ button = g_object_get_data(G_OBJECT(menu_shell), "menu_button");
+ if (!button) return;
+ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ g_object_set_data(G_OBJECT(mainwin->ac_menu), "menu_button", NULL);
+ manage_window_focus_in(mainwin->window, NULL, NULL);
+}
+
+static gint main_window_close_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ if (mainwin->lock_count == 0)
+ app_exit_cb(data, 0, widget);
+
+ return TRUE;
+}
+
+static gint folder_window_close_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ GtkWidget *menuitem;
+
+ menuitem = gtk_item_factory_get_item
+ (mainwin->menu_factory, "/View/Show or hide/Folder tree");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), FALSE);
+
+ return TRUE;
+}
+
+static gint message_window_close_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ GtkWidget *menuitem;
+
+ menuitem = gtk_item_factory_get_item
+ (mainwin->menu_factory, "/View/Show or hide/Message view");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), FALSE);
+
+ return TRUE;
+}
+
+static void main_window_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ main_window_get_size(mainwin);
+}
+
+static void folder_window_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ main_window_get_size(mainwin);
+}
+
+static void message_window_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+
+ main_window_get_size(mainwin);
+}
+
+static void new_folder_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ folderview_new_folder(mainwin->folderview);
+}
+
+static void rename_folder_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ folderview_rename_folder(mainwin->folderview);
+}
+
+static void delete_folder_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ folderview_delete_folder(mainwin->folderview);
+}
+
+static void add_mailbox_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ main_window_add_mailbox(mainwin);
+}
+
+static void remove_mailbox_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ folderview_remove_mailbox(mainwin->folderview);
+}
+
+static void update_folderview_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ if (action == 0)
+ folderview_check_new_selected(mainwin->folderview);
+ else
+ folderview_check_new_all();
+}
+
+static void rebuild_tree_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ folderview_rebuild_tree(mainwin->folderview);
+}
+
+static void import_mbox_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ import_mbox(mainwin->summaryview->folder_item);
+}
+
+static void export_mbox_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ export_mbox(mainwin->summaryview->folder_item);
+}
+
+static void empty_trash_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ main_window_empty_trash(mainwin, TRUE);
+}
+
+static void save_as_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_save_as(mainwin->summaryview);
+}
+
+static void print_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_print(mainwin->summaryview);
+}
+
+static void toggle_offline_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ main_window_toggle_online
+ (mainwin, !GTK_CHECK_MENU_ITEM(widget)->active);
+}
+
+static void app_exit_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ if (prefs_common.confirm_on_exit) {
+ if (alertpanel(_("Exit"), _("Exit this program?"),
+ _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT)
+ return;
+ manage_window_focus_in(mainwin->window, NULL, NULL);
+ }
+
+ app_will_exit(widget, mainwin);
+}
+
+static void search_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ if (action == 1)
+ summary_search(mainwin->summaryview);
+ else
+ message_search(mainwin->messageview);
+}
+
+static void toggle_folder_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ gboolean active;
+
+ active = GTK_CHECK_MENU_ITEM(widget)->active;
+
+ switch (mainwin->type) {
+ case SEPARATE_NONE:
+ case SEPARATE_MESSAGE:
+#if 0
+ if (active)
+ gtk_widget_show(GTK_WIDGET_PTR(mainwin->folderview));
+ else
+ gtk_widget_hide(GTK_WIDGET_PTR(mainwin->folderview));
+#endif
+ break;
+ case SEPARATE_FOLDER:
+ if (active)
+ gtk_widget_show(mainwin->win.sep_folder.folderwin);
+ else
+ gtk_widget_hide(mainwin->win.sep_folder.folderwin);
+ break;
+ case SEPARATE_BOTH:
+ if (active)
+ gtk_widget_show(mainwin->win.sep_both.folderwin);
+ else
+ gtk_widget_hide(mainwin->win.sep_both.folderwin);
+ break;
+ }
+
+ prefs_common.folderview_visible = active;
+}
+
+static void toggle_message_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ gboolean active;
+
+ active = GTK_CHECK_MENU_ITEM(widget)->active;
+
+ if (active != messageview_is_visible(mainwin->messageview))
+ summary_toggle_view(mainwin->summaryview);
+}
+
+static void toggle_toolbar_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ switch ((ToolbarStyle)action) {
+ case TOOLBAR_NONE:
+ gtk_widget_hide(mainwin->handlebox);
+ case TOOLBAR_ICON:
+ gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar),
+ GTK_TOOLBAR_ICONS);
+ break;
+ case TOOLBAR_TEXT:
+ gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar),
+ GTK_TOOLBAR_TEXT);
+ break;
+ case TOOLBAR_BOTH:
+ gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar),
+ GTK_TOOLBAR_BOTH);
+ break;
+ }
+
+ if (action != TOOLBAR_NONE) {
+ gtk_widget_show(mainwin->handlebox);
+ gtk_widget_queue_resize(mainwin->handlebox);
+ }
+
+ mainwin->toolbar_style = (ToolbarStyle)action;
+ prefs_common.toolbar_style = (ToolbarStyle)action;
+}
+
+static void toggle_statusbar_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ gtk_widget_show(mainwin->hbox_stat);
+ prefs_common.show_statusbar = TRUE;
+ } else {
+ gtk_widget_hide(mainwin->hbox_stat);
+ prefs_common.show_statusbar = FALSE;
+ }
+}
+
+static void separate_widget_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ SeparateType type;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active)
+ type = mainwin->type | action;
+ else
+ type = mainwin->type & ~action;
+
+ main_window_separation_change(mainwin, type);
+
+ prefs_common.sep_folder = (type & SEPARATE_FOLDER) != 0;
+ prefs_common.sep_msg = (type & SEPARATE_MESSAGE) != 0;
+}
+
+static void addressbook_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ addressbook_open(NULL);
+}
+
+static void log_window_show_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ log_window_show(mainwin->logwin);
+}
+
+static void inc_mail_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ inc_mail(mainwin);
+}
+
+static void inc_all_account_mail_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ inc_all_account_mail(mainwin, FALSE);
+}
+
+static void inc_cancel_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ inc_cancel_all();
+}
+
+static void send_queue_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ GList *list;
+
+ if (!main_window_toggle_online_if_offline(mainwin))
+ return;
+
+ for (list = folder_get_list(); list != NULL; list = list->next) {
+ Folder *folder = list->data;
+
+ if (folder->queue) {
+ gint ret;
+
+ ret = procmsg_send_queue(folder->queue,
+ prefs_common.savemsg);
+ statusbar_pop_all();
+ if (ret > 0)
+ folder_item_scan(folder->queue);
+ }
+ }
+
+ folderview_update_all_updated(TRUE);
+}
+
+static void compose_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ PrefsAccount *ac = NULL;
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ if (item) {
+ ac = account_find_from_item(item);
+ if (ac && ac->protocol == A_NNTP &&
+ FOLDER_TYPE(item->folder) == F_NEWS) {
+ compose_new(ac, item, item->path, NULL);
+ return;
+ }
+ }
+
+ compose_new(ac, item, NULL, NULL);
+}
+
+static void reply_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_reply(mainwin->summaryview, (ComposeMode)action);
+}
+
+static void move_to_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_move_to(mainwin->summaryview);
+}
+
+static void copy_to_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_copy_to(mainwin->summaryview);
+}
+
+static void delete_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_delete(mainwin->summaryview);
+}
+
+static void open_msg_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_open_msg(mainwin->summaryview);
+}
+
+static void view_source_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_view_source(mainwin->summaryview);
+}
+
+static void show_all_header_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ if (mainwin->menu_lock_count) return;
+ summary_display_msg_selected(mainwin->summaryview,
+ GTK_CHECK_MENU_ITEM(widget)->active);
+}
+
+static void mark_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_mark(mainwin->summaryview);
+}
+
+static void unmark_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_unmark(mainwin->summaryview);
+}
+
+static void mark_as_unread_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_mark_as_unread(mainwin->summaryview);
+}
+
+static void mark_as_read_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_mark_as_read(mainwin->summaryview);
+}
+
+static void mark_all_read_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_mark_all_read(mainwin->summaryview);
+}
+
+static void reedit_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_reedit(mainwin->summaryview);
+}
+
+static void add_address_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_add_address(mainwin->summaryview);
+}
+
+static void set_charset_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ const gchar *str;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ str = conv_get_charset_str((CharSet)action);
+ g_free(prefs_common.force_charset);
+ prefs_common.force_charset = str ? g_strdup(str) : NULL;
+
+ summary_redisplay_msg(mainwin->summaryview);
+
+ debug_print("forced charset: %s\n",
+ str ? str : "Auto-Detect");
+ }
+}
+
+static void thread_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ if (mainwin->menu_lock_count) return;
+ if (!mainwin->summaryview->folder_item) return;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ summary_thread_build(mainwin->summaryview);
+ mainwin->summaryview->folder_item->threaded = TRUE;
+ } else {
+ summary_unthread(mainwin->summaryview);
+ mainwin->summaryview->folder_item->threaded = FALSE;
+ }
+}
+
+static void expand_threads_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_expand_threads(mainwin->summaryview);
+}
+
+static void collapse_threads_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_collapse_threads(mainwin->summaryview);
+}
+
+static void set_display_item_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ prefs_summary_column_open();
+}
+
+static void sort_summary_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ FolderItem *item = mainwin->summaryview->folder_item;
+ GtkWidget *menuitem;
+
+ if (mainwin->menu_lock_count) return;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active && item) {
+ menuitem = gtk_item_factory_get_item
+ (mainwin->menu_factory, "/View/Sort/Ascending");
+ summary_sort(mainwin->summaryview, (FolderSortKey)action,
+ GTK_CHECK_MENU_ITEM(menuitem)->active
+ ? SORT_ASCENDING : SORT_DESCENDING);
+ }
+}
+
+static void sort_summary_type_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ if (mainwin->menu_lock_count) return;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active && item)
+ summary_sort(mainwin->summaryview,
+ item->sort_key, (FolderSortType)action);
+}
+
+static void attract_by_subject_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_attract_by_subject(mainwin->summaryview);
+}
+
+static void delete_duplicated_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_delete_duplicated(mainwin->summaryview);
+}
+
+static void filter_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_filter(mainwin->summaryview, (gboolean)action);
+}
+
+static void execute_summary_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_execute(mainwin->summaryview);
+}
+
+static void update_summary_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ FolderItem *fitem;
+ FolderView *folderview = mainwin->folderview;
+
+ if (!mainwin->summaryview->folder_item) return;
+ if (!folderview->opened) return;
+
+ fitem = gtk_ctree_node_get_row_data(GTK_CTREE(folderview->ctree),
+ folderview->opened);
+ if (!fitem) return;
+
+ summary_show(mainwin->summaryview, fitem, TRUE);
+}
+
+static void prev_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_step(mainwin->summaryview, GTK_SCROLL_STEP_BACKWARD);
+}
+
+static void next_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_step(mainwin->summaryview, GTK_SCROLL_STEP_FORWARD);
+}
+
+static void prev_unread_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_prev_unread(mainwin->summaryview);
+}
+
+static void next_unread_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_next_unread(mainwin->summaryview);
+}
+
+static void prev_new_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_select_prev_new(mainwin->summaryview);
+}
+
+static void next_new_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_select_next_new(mainwin->summaryview);
+}
+
+static void prev_marked_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_prev_marked(mainwin->summaryview);
+}
+
+static void next_marked_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_next_marked(mainwin->summaryview);
+}
+
+static void prev_labeled_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_prev_labeled(mainwin->summaryview);
+}
+
+static void next_labeled_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_next_labeled(mainwin->summaryview);
+}
+
+static void goto_folder_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ FolderItem *to_folder;
+
+ to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_ALL, NULL);
+
+ if (to_folder)
+ folderview_select(mainwin->folderview, to_folder);
+}
+
+static void copy_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ messageview_copy_clipboard(mainwin->messageview);
+}
+
+static void allsel_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ MessageView *msgview = mainwin->messageview;
+
+ if (GTK_WIDGET_HAS_FOCUS(mainwin->summaryview->ctree))
+ summary_select_all(mainwin->summaryview);
+ else if (messageview_is_visible(msgview) &&
+ (GTK_WIDGET_HAS_FOCUS(msgview->textview->text) ||
+ GTK_WIDGET_HAS_FOCUS(msgview->mimeview->textview->text)))
+ messageview_select_all(msgview);
+}
+
+static void select_thread_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_thread(mainwin->summaryview);
+}
+
+static void create_filter_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_filter_open(mainwin->summaryview, (PrefsFilterType)action);
+}
+
+static void prefs_common_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ prefs_common_open();
+}
+
+static void prefs_filter_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ prefs_filter_open(NULL, NULL);
+}
+
+static void prefs_template_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ prefs_template_open();
+}
+
+static void prefs_actions_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ prefs_actions_open(mainwin);
+}
+
+static void prefs_account_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ if (!cur_account) {
+ new_account_cb(mainwin, 0, widget);
+ } else {
+ account_open(cur_account);
+ }
+}
+
+static void new_account_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ account_edit_open();
+ if (!compose_get_compose_list()) account_add();
+}
+
+static void account_selector_menu_cb(GtkMenuItem *menuitem, gpointer data)
+{
+ cur_account = (PrefsAccount *)data;
+ main_window_reflect_prefs_all();
+}
+
+static void account_receive_menu_cb(GtkMenuItem *menuitem, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)mainwin_list->data;
+ PrefsAccount *account = (PrefsAccount *)data;
+
+ inc_account_mail(mainwin, account);
+}
+
+static void manual_open_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ manual_open((ManualLang)action);
+}
+
+static void faq_open_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ faq_open((ManualLang)action);
+}
+
+static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ gchar *str;
+
+ if (item->path)
+ str = g_strdup_printf(_("Scanning folder %s%c%s ..."),
+ LOCAL_FOLDER(folder)->rootpath,
+ G_DIR_SEPARATOR,
+ item->path);
+ else
+ str = g_strdup_printf(_("Scanning folder %s ..."),
+ LOCAL_FOLDER(folder)->rootpath);
+
+ STATUSBAR_PUSH(mainwin, str);
+ STATUSBAR_POP(mainwin);
+ g_free(str);
+}
diff --git a/src/mainwindow.h b/src/mainwindow.h
new file mode 100644
index 00000000..2993f0ce
--- /dev/null
+++ b/src/mainwindow.h
@@ -0,0 +1,177 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MAINWINDOW_H__
+#define __MAINWINDOW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtktooltips.h>
+
+typedef struct _MainWindow MainWindow;
+
+#include "folderview.h"
+#include "summaryview.h"
+#include "headerview.h"
+#include "messageview.h"
+#include "logwindow.h"
+#include "gtkutils.h"
+
+typedef enum
+{
+ SEPARATE_NONE = 0,
+ SEPARATE_FOLDER = 1 << 0,
+ SEPARATE_MESSAGE = 1 << 1,
+ SEPARATE_BOTH = (SEPARATE_FOLDER | SEPARATE_MESSAGE)
+} SeparateType;
+
+typedef enum
+{
+ TOOLBAR_NONE = 0,
+ TOOLBAR_ICON = 1,
+ TOOLBAR_TEXT = 2,
+ TOOLBAR_BOTH = 3
+} ToolbarStyle;
+
+struct _MainWindow
+{
+ SeparateType type;
+
+ union CompositeWin {
+ struct
+ {
+ GtkWidget *hpaned;
+ GtkWidget *vpaned;
+ } sep_none;
+ struct {
+ GtkWidget *folderwin;
+ GtkWidget *vpaned;
+ } sep_folder;
+ struct {
+ GtkWidget *messagewin;
+ GtkWidget *hpaned;
+ } sep_message;
+ struct {
+ GtkWidget *folderwin;
+ GtkWidget *messagewin;
+ } sep_both;
+ } win;
+
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *menubar;
+
+ GtkItemFactory *menu_factory;
+
+ /* toolbar */
+ GtkWidget *handlebox;
+ GtkWidget *toolbar;
+ GtkWidget *get_btn;
+ GtkWidget *getall_btn;
+ GtkWidget *compose_btn;
+ GtkWidget *reply_btn;
+ ComboButton *reply_combo;
+ GtkWidget *replyall_btn;
+ GtkWidget *fwd_btn;
+ ComboButton *fwd_combo;
+ GtkWidget *send_btn;
+ GtkWidget *prefs_btn;
+ GtkWidget *account_btn;
+ GtkWidget *next_btn;
+ GtkWidget *delete_btn;
+ GtkWidget *exec_btn;
+
+ /* body */
+ GtkWidget *vbox_body;
+ GtkWidget *hbox_stat;
+ GtkWidget *statusbar;
+ GtkWidget *progressbar;
+ GtkWidget *statuslabel;
+ GtkWidget *online_switch;
+ GtkWidget *online_pixmap;
+ GtkWidget *offline_pixmap;
+ GtkTooltips *online_tip;
+ GtkWidget *ac_button;
+ GtkWidget *ac_label;
+ GtkWidget *ac_menu;
+
+ /* context IDs for status bar */
+ gint mainwin_cid;
+ gint folderview_cid;
+ gint summaryview_cid;
+ gint messageview_cid;
+
+ ToolbarStyle toolbar_style;
+
+ guint lock_count;
+ guint menu_lock_count;
+ guint cursor_count;
+
+ FolderView *folderview;
+ SummaryView *summaryview;
+ MessageView *messageview;
+ LogWindow *logwin;
+};
+
+MainWindow *main_window_create (SeparateType type);
+
+void main_window_cursor_wait (MainWindow *mainwin);
+void main_window_cursor_normal (MainWindow *mainwin);
+
+void main_window_lock (MainWindow *mainwin);
+void main_window_unlock (MainWindow *mainwin);
+
+void main_window_reflect_prefs_all (void);
+void main_window_set_summary_column (void);
+void main_window_set_account_menu (GList *account_list);
+
+MainWindow *main_window_get (void);
+
+GtkWidget *main_window_get_folder_window (MainWindow *mainwin);
+GtkWidget *main_window_get_message_window (MainWindow *mainwin);
+
+void main_window_separation_change (MainWindow *mainwin,
+ SeparateType type);
+
+void main_window_toggle_message_view (MainWindow *mainwin);
+
+void main_window_get_size (MainWindow *mainwin);
+void main_window_get_position (MainWindow *mainwin);
+
+void main_window_progress_on (MainWindow *mainwin);
+void main_window_progress_off (MainWindow *mainwin);
+void main_window_progress_set (MainWindow *mainwin,
+ gint cur,
+ gint total);
+
+void main_window_toggle_online (MainWindow *mainwin,
+ gboolean online);
+gboolean main_window_toggle_online_if_offline (MainWindow *mainwin);
+
+void main_window_empty_trash (MainWindow *mainwin,
+ gboolean confirm);
+void main_window_add_mailbox (MainWindow *mainwin);
+
+void main_window_set_toolbar_sensitive (MainWindow *mainwin);
+void main_window_set_menu_sensitive (MainWindow *mainwin);
+
+void main_window_popup (MainWindow *mainwin);
+
+#endif /* __MAINWINDOW_H__ */
diff --git a/src/manage_window.c b/src/manage_window.c
new file mode 100644
index 00000000..e001c68d
--- /dev/null
+++ b/src/manage_window.c
@@ -0,0 +1,92 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+
+#include "manage_window.h"
+#include "utils.h"
+
+static GtkWidget *focus_window;
+
+gint manage_window_focus_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ /* debug_print("Focus in event: window: %p\n", widget); */
+
+ focus_window = widget;
+
+ return FALSE;
+}
+
+gint manage_window_focus_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ /* debug_print("Focused window: %p\n", focus_window); */
+ /* debug_print("Focus out event: window: %p\n", widget); */
+
+ if (focus_window == widget)
+ focus_window = NULL;
+
+ return FALSE;
+}
+
+gint manage_window_unmap(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ /* debug_print("unmap event: %p\n", widget); */
+
+ if (focus_window == widget)
+ focus_window = NULL;
+
+ return FALSE;
+}
+
+gint manage_window_delete(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ /* debug_print("delete event: %p\n", widget); */
+
+ if (focus_window == widget)
+ focus_window = NULL;
+
+ return FALSE;
+}
+
+void manage_window_destroy(GtkWidget *widget, gpointer data)
+{
+ /* debug_print("destroy event: %p\n", widget); */
+
+ if (focus_window == widget)
+ focus_window = NULL;
+}
+
+void manage_window_set_transient(GtkWindow *window)
+{
+ /* debug_print("manage_window_set_transient(): window = %p, focus_window = %p\n",
+ window, focus_window); */
+
+ if (window && focus_window)
+ gtk_window_set_transient_for(window, GTK_WINDOW(focus_window));
+}
+
+GtkWidget *manage_window_get_focus_window(void)
+{
+ return focus_window;
+}
diff --git a/src/manage_window.h b/src/manage_window.h
new file mode 100644
index 00000000..64d48617
--- /dev/null
+++ b/src/manage_window.h
@@ -0,0 +1,58 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MANAGE_WINDOW_H__
+#define __MANAGE_WINDOW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+
+#define MANAGE_WINDOW_SIGNALS_CONNECT(window) \
+{ \
+ g_signal_connect(G_OBJECT(window), "focus_in_event", \
+ G_CALLBACK(manage_window_focus_in), NULL); \
+ g_signal_connect(G_OBJECT(window), "focus_out_event", \
+ G_CALLBACK(manage_window_focus_out), NULL); \
+ g_signal_connect(G_OBJECT(window), "unmap_event", \
+ G_CALLBACK(manage_window_unmap), NULL); \
+ g_signal_connect(G_OBJECT(window), "destroy", \
+ G_CALLBACK(manage_window_destroy), NULL); \
+}
+
+gint manage_window_focus_in (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer data);
+gint manage_window_focus_out (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer data);
+gint manage_window_unmap (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+gint manage_window_delete (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+void manage_window_destroy (GtkWidget *widget,
+ gpointer data);
+
+void manage_window_set_transient (GtkWindow *window);
+
+GtkWidget *manage_window_get_focus_window (void);
+
+#endif /* __MANAGE_WINDOW_H__ */
diff --git a/src/manual.c b/src/manual.c
new file mode 100644
index 00000000..8afc4bdb
--- /dev/null
+++ b/src/manual.c
@@ -0,0 +1,85 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include "prefs_common.h"
+#include "manual.h"
+#include "utils.h"
+
+static gchar *get_lang_str(ManualLang lang);
+
+static gchar *get_lang_str(ManualLang lang)
+{
+ switch (lang) {
+ case MANUAL_LANG_DE:
+ return "de";
+ case MANUAL_LANG_EN:
+ return "en";
+ case MANUAL_LANG_ES:
+ return "es";
+ case MANUAL_LANG_FR:
+ return "fr";
+ case MANUAL_LANG_IT:
+ return "it";
+ case MANUAL_LANG_JA:
+ return "ja";
+ default:
+ return NULL;
+ }
+}
+
+void manual_open(ManualLang lang)
+{
+ gchar *lang_str;
+ gchar *file_uri;
+
+ lang_str = get_lang_str(lang);
+ if (!lang_str) return;
+
+ file_uri = g_strconcat("file://", MANUALDIR,
+ G_DIR_SEPARATOR_S, lang_str, G_DIR_SEPARATOR_S,
+ MANUAL_HTML_INDEX, NULL);
+ debug_print("Opening manual: %s\n", file_uri);
+ open_uri(file_uri, prefs_common.uri_cmd);
+ g_free(file_uri);
+}
+
+void faq_open(ManualLang lang)
+{
+ gchar *lang_str;
+ gchar *file_uri;
+
+ lang_str = get_lang_str(lang);
+ if (!lang_str) return;
+
+ file_uri = g_strconcat("file://", FAQDIR,
+ G_DIR_SEPARATOR_S, lang_str, G_DIR_SEPARATOR_S,
+ FAQ_HTML_INDEX, NULL);
+ debug_print("Opening FAQ: %s\n", file_uri);
+ open_uri(file_uri, prefs_common.uri_cmd);
+ g_free(file_uri);
+}
diff --git a/src/manual.h b/src/manual.h
new file mode 100644
index 00000000..6ae384f3
--- /dev/null
+++ b/src/manual.h
@@ -0,0 +1,36 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MANUAL_H__
+#define __MANUAL_H__
+
+typedef enum
+{
+ MANUAL_LANG_DE,
+ MANUAL_LANG_EN,
+ MANUAL_LANG_ES,
+ MANUAL_LANG_FR,
+ MANUAL_LANG_IT,
+ MANUAL_LANG_JA,
+} ManualLang;
+
+void manual_open(ManualLang lang);
+void faq_open (ManualLang lang);
+
+#endif /* __MANUAL_H__ */
diff --git a/src/mbox.c b/src/mbox.c
new file mode 100644
index 00000000..aaf9d663
--- /dev/null
+++ b/src/mbox.c
@@ -0,0 +1,455 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/file.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "intl.h"
+#include "mbox.h"
+#include "procmsg.h"
+#include "folder.h"
+#include "filter.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "account.h"
+#include "utils.h"
+
+#define MSGBUFSIZE 8192
+
+#define FPUTS_TO_TMP_ABORT_IF_FAIL(s) \
+{ \
+ if (fputs(s, tmp_fp) == EOF) { \
+ g_warning(_("can't write to temporary file\n")); \
+ fclose(tmp_fp); \
+ fclose(mbox_fp); \
+ unlink(tmp_file); \
+ g_free(tmp_file); \
+ return -1; \
+ } \
+}
+
+gint proc_mbox(FolderItem *dest, const gchar *mbox, GHashTable *folder_table)
+{
+ FILE *mbox_fp;
+ gchar buf[MSGBUFSIZE], from_line[MSGBUFSIZE];
+ gchar *tmp_file;
+ gint msgs = 0;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(mbox != NULL, -1);
+
+ debug_print(_("Getting messages from %s into %s...\n"), mbox, dest->path);
+
+ if ((mbox_fp = fopen(mbox, "rb")) == NULL) {
+ FILE_OP_ERROR(mbox, "fopen");
+ return -1;
+ }
+
+ /* ignore empty lines on the head */
+ do {
+ if (fgets(buf, sizeof(buf), mbox_fp) == NULL) {
+ g_warning(_("can't read mbox file.\n"));
+ fclose(mbox_fp);
+ return -1;
+ }
+ } while (buf[0] == '\n' || buf[0] == '\r');
+
+ if (strncmp(buf, "From ", 5) != 0) {
+ g_warning(_("invalid mbox format: %s\n"), mbox);
+ fclose(mbox_fp);
+ return -1;
+ }
+
+ strcpy(from_line, buf);
+ if (fgets(buf, sizeof(buf), mbox_fp) == NULL) {
+ g_warning(_("malformed mbox: %s\n"), mbox);
+ fclose(mbox_fp);
+ return -1;
+ }
+
+ tmp_file = get_tmp_file();
+
+ do {
+ FILE *tmp_fp;
+ GSList *cur;
+ gchar *startp, *endp, *rpath;
+ gint empty_line;
+ gboolean is_next_msg = FALSE;
+ FilterInfo *fltinfo;
+
+ if ((tmp_fp = fopen(tmp_file, "wb")) == NULL) {
+ FILE_OP_ERROR(tmp_file, "fopen");
+ g_warning(_("can't open temporary file\n"));
+ g_free(tmp_file);
+ fclose(mbox_fp);
+ return -1;
+ }
+ if (change_file_mode_rw(tmp_fp, tmp_file) < 0)
+ FILE_OP_ERROR(tmp_file, "chmod");
+
+ /* convert unix From into Return-Path */
+ startp = from_line + 5;
+ endp = strchr(startp, ' ');
+ if (endp == NULL)
+ rpath = g_strdup(startp);
+ else
+ rpath = g_strndup(startp, endp - startp);
+ g_strstrip(rpath);
+ g_snprintf(from_line, sizeof(from_line),
+ "Return-Path: %s\n", rpath);
+ g_free(rpath);
+
+ FPUTS_TO_TMP_ABORT_IF_FAIL(from_line);
+ FPUTS_TO_TMP_ABORT_IF_FAIL(buf);
+ from_line[0] = '\0';
+
+ empty_line = 0;
+
+ while (fgets(buf, sizeof(buf), mbox_fp) != NULL) {
+ if (buf[0] == '\n' || buf[0] == '\r') {
+ empty_line++;
+ buf[0] = '\0';
+ continue;
+ }
+
+ /* From separator */
+ while (!strncmp(buf, "From ", 5)) {
+ strcpy(from_line, buf);
+ if (fgets(buf, sizeof(buf), mbox_fp) == NULL) {
+ buf[0] = '\0';
+ break;
+ }
+
+ if (is_header_line(buf)) {
+ is_next_msg = TRUE;
+ break;
+ } else if (!strncmp(buf, "From ", 5)) {
+ continue;
+ } else if (!strncmp(buf, ">From ", 6)) {
+ g_memmove(buf, buf + 1, strlen(buf));
+ is_next_msg = TRUE;
+ break;
+ } else {
+ g_warning(_("unescaped From found:\n%s"),
+ from_line);
+ break;
+ }
+ }
+ if (is_next_msg) break;
+
+ if (empty_line > 0) {
+ while (empty_line--)
+ FPUTS_TO_TMP_ABORT_IF_FAIL("\n");
+ empty_line = 0;
+ }
+
+ if (from_line[0] != '\0') {
+ FPUTS_TO_TMP_ABORT_IF_FAIL(from_line);
+ from_line[0] = '\0';
+ }
+
+ if (buf[0] != '\0') {
+ if (!strncmp(buf, ">From ", 6)) {
+ FPUTS_TO_TMP_ABORT_IF_FAIL(buf + 1);
+ } else
+ FPUTS_TO_TMP_ABORT_IF_FAIL(buf);
+
+ buf[0] = '\0';
+ }
+ }
+
+ if (empty_line > 0) {
+ while (--empty_line)
+ FPUTS_TO_TMP_ABORT_IF_FAIL("\n");
+ }
+
+ if (fclose(tmp_fp) == EOF) {
+ FILE_OP_ERROR(tmp_file, "fclose");
+ g_warning(_("can't write to temporary file\n"));
+ unlink(tmp_file);
+ g_free(tmp_file);
+ fclose(mbox_fp);
+ return -1;
+ }
+
+ fltinfo = filter_info_new();
+ fltinfo->flags.perm_flags = MSG_NEW|MSG_UNREAD;
+ fltinfo->flags.tmp_flags = MSG_RECEIVED;
+
+ if (folder_table)
+ filter_apply(prefs_common.fltlist, tmp_file, fltinfo);
+
+ if (fltinfo->actions[FLT_ACTION_MOVE] == FALSE &&
+ fltinfo->actions[FLT_ACTION_DELETE] == FALSE) {
+ if (folder_item_add_msg(dest, tmp_file, &fltinfo->flags,
+ FALSE) < 0) {
+ filter_info_free(fltinfo);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ fclose(mbox_fp);
+ return -1;
+ }
+ fltinfo->dest_list = g_slist_append(fltinfo->dest_list,
+ dest);
+ }
+
+ for (cur = fltinfo->dest_list; cur != NULL; cur = cur->next) {
+ FolderItem *drop_folder = (FolderItem *)cur->data;
+ gint val = 0;
+
+ if (folder_table) {
+ val = GPOINTER_TO_INT(g_hash_table_lookup
+ (folder_table,
+ drop_folder));
+ }
+ if (val == 0) {
+ /* force updating */
+ if (FOLDER_IS_LOCAL(drop_folder->folder))
+ drop_folder->mtime = 0;
+ if (folder_table) {
+ g_hash_table_insert(folder_table,
+ drop_folder,
+ GINT_TO_POINTER(1));
+ }
+ }
+ }
+
+ filter_info_free(fltinfo);
+ unlink(tmp_file);
+
+ msgs++;
+ } while (from_line[0] != '\0');
+
+ g_free(tmp_file);
+ fclose(mbox_fp);
+ debug_print(_("%d messages found.\n"), msgs);
+
+ return msgs;
+}
+
+gint lock_mbox(const gchar *base, LockType type)
+{
+ gint retval = 0;
+
+ if (type == LOCK_FILE) {
+ gchar *lockfile, *locklink;
+ gint retry = 0;
+ FILE *lockfp;
+
+ lockfile = g_strdup_printf("%s.%d", base, getpid());
+ if ((lockfp = fopen(lockfile, "wb")) == NULL) {
+ FILE_OP_ERROR(lockfile, "fopen");
+ g_warning(_("can't create lock file %s\n"), lockfile);
+ g_warning(_("use 'flock' instead of 'file' if possible.\n"));
+ g_free(lockfile);
+ return -1;
+ }
+
+ fprintf(lockfp, "%d\n", getpid());
+ fclose(lockfp);
+
+ locklink = g_strconcat(base, ".lock", NULL);
+ while (link(lockfile, locklink) < 0) {
+ FILE_OP_ERROR(lockfile, "link");
+ if (retry >= 5) {
+ g_warning(_("can't create %s\n"), lockfile);
+ unlink(lockfile);
+ g_free(lockfile);
+ return -1;
+ }
+ if (retry == 0)
+ g_warning(_("mailbox is owned by another"
+ " process, waiting...\n"));
+ retry++;
+ sleep(5);
+ }
+ unlink(lockfile);
+ g_free(lockfile);
+ } else if (type == LOCK_FLOCK) {
+ gint lockfd;
+
+#if HAVE_FLOCK
+ if ((lockfd = open(base, O_RDONLY)) < 0) {
+#else
+ if ((lockfd = open(base, O_RDWR)) < 0) {
+#endif
+ FILE_OP_ERROR(base, "open");
+ return -1;
+ }
+#if HAVE_FLOCK
+ if (flock(lockfd, LOCK_EX|LOCK_NB) < 0) {
+ perror("flock");
+#else
+#if HAVE_LOCKF
+ if (lockf(lockfd, F_TLOCK, 0) < 0) {
+ perror("lockf");
+#else
+ {
+#endif
+#endif /* HAVE_FLOCK */
+ g_warning(_("can't lock %s\n"), base);
+ if (close(lockfd) < 0)
+ perror("close");
+ return -1;
+ }
+ retval = lockfd;
+ } else {
+ g_warning(_("invalid lock type\n"));
+ return -1;
+ }
+
+ return retval;
+}
+
+gint unlock_mbox(const gchar *base, gint fd, LockType type)
+{
+ if (type == LOCK_FILE) {
+ gchar *lockfile;
+
+ lockfile = g_strconcat(base, ".lock", NULL);
+ if (unlink(lockfile) < 0) {
+ FILE_OP_ERROR(lockfile, "unlink");
+ g_free(lockfile);
+ return -1;
+ }
+ g_free(lockfile);
+
+ return 0;
+ } else if (type == LOCK_FLOCK) {
+#if HAVE_FLOCK
+ if (flock(fd, LOCK_UN) < 0) {
+ perror("flock");
+#else
+#if HAVE_LOCKF
+ if (lockf(fd, F_ULOCK, 0) < 0) {
+ perror("lockf");
+#else
+ {
+#endif
+#endif /* HAVE_FLOCK */
+ g_warning(_("can't unlock %s\n"), base);
+ if (close(fd) < 0)
+ perror("close");
+ return -1;
+ }
+
+ if (close(fd) < 0) {
+ perror("close");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ g_warning(_("invalid lock type\n"));
+ return -1;
+}
+
+gint copy_mbox(const gchar *src, const gchar *dest)
+{
+ return copy_file(src, dest, TRUE);
+}
+
+void empty_mbox(const gchar *mbox)
+{
+ if (truncate(mbox, 0) < 0) {
+ FILE *fp;
+
+ FILE_OP_ERROR(mbox, "truncate");
+ if ((fp = fopen(mbox, "wb")) == NULL) {
+ FILE_OP_ERROR(mbox, "fopen");
+ g_warning(_("can't truncate mailbox to zero.\n"));
+ return;
+ }
+ fclose(fp);
+ }
+}
+
+/* read all messages in SRC, and store them into one MBOX file. */
+gint export_to_mbox(FolderItem *src, const gchar *mbox)
+{
+ GSList *mlist;
+ GSList *cur;
+ MsgInfo *msginfo;
+ FILE *msg_fp;
+ FILE *mbox_fp;
+ gchar buf[BUFFSIZE];
+
+ g_return_val_if_fail(src != NULL, -1);
+ g_return_val_if_fail(src->folder != NULL, -1);
+ g_return_val_if_fail(mbox != NULL, -1);
+
+ debug_print(_("Exporting messages from %s into %s...\n"),
+ src->path, mbox);
+
+ if ((mbox_fp = fopen(mbox, "wb")) == NULL) {
+ FILE_OP_ERROR(mbox, "fopen");
+ return -1;
+ }
+
+ mlist = folder_item_get_msg_list(src, TRUE);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+
+ msg_fp = procmsg_open_message(msginfo);
+ if (!msg_fp) {
+ procmsg_msginfo_free(msginfo);
+ continue;
+ }
+
+ strncpy2(buf,
+ msginfo->from ? msginfo->from :
+ cur_account && cur_account->address ?
+ cur_account->address : "unknown",
+ sizeof(buf));
+ extract_address(buf);
+
+ fprintf(mbox_fp, "From %s %s",
+ buf, ctime(&msginfo->date_t));
+
+ while (fgets(buf, sizeof(buf), msg_fp) != NULL) {
+ if (!strncmp(buf, "From ", 5))
+ fputc('>', mbox_fp);
+ fputs(buf, mbox_fp);
+ }
+ fputc('\n', mbox_fp);
+
+ fclose(msg_fp);
+ procmsg_msginfo_free(msginfo);
+ }
+
+ g_slist_free(mlist);
+
+ fclose(mbox_fp);
+
+ return 0;
+}
diff --git a/src/mbox.h b/src/mbox.h
new file mode 100644
index 00000000..3b210f0a
--- /dev/null
+++ b/src/mbox.h
@@ -0,0 +1,47 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MBOX_H__
+#define __MBOX_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+typedef enum {
+ LOCK_FILE,
+ LOCK_FLOCK
+} LockType;
+
+gint proc_mbox (FolderItem *dest,
+ const gchar *mbox,
+ GHashTable *folder_table);
+gint lock_mbox (const gchar *base,
+ LockType type);
+gint unlock_mbox (const gchar *base,
+ gint fd,
+ LockType type);
+gint copy_mbox (const gchar *src,
+ const gchar *dest);
+void empty_mbox (const gchar *mbox);
+
+gint export_to_mbox (FolderItem *src,
+ const gchar *mbox);
+
+#endif /* __MBOX_H__ */
diff --git a/src/md5.c b/src/md5.c
new file mode 100644
index 00000000..54585971
--- /dev/null
+++ b/src/md5.c
@@ -0,0 +1,433 @@
+/* md5.c - MD5 Message-Digest Algorithm
+ * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
+ *
+ * according to the definition of MD5 in RFC 1321 from April 1992.
+ * NOTE: This is *not* the same file as the one from glibc.
+ *
+ * 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 the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
+/* heavily modified for GnuPG by <werner.koch@guug.de> */
+/* modified again for Sylpheed by <wk@gnupg.org> 2001-02-11 */
+
+
+/* Test values:
+ * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
+ * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61
+ * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72
+ * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "utils.h"
+#include "md5.h"
+
+
+/****************
+ * Rotate a 32 bit integer by n bytes
+ */
+#if defined(__GNUC__) && defined(__i386__)
+static inline u32
+rol( u32 x, int n)
+{
+ __asm__("roll %%cl,%0"
+ :"=r" (x)
+ :"0" (x),"c" (n));
+ return x;
+}
+#else
+#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
+#endif
+
+
+void
+md5_init(MD5_CONTEXT *ctx)
+{
+ ctx->A = 0x67452301;
+ ctx->B = 0xefcdab89;
+ ctx->C = 0x98badcfe;
+ ctx->D = 0x10325476;
+
+ ctx->nblocks = 0;
+ ctx->count = 0;
+ ctx->finalized = 0;
+}
+
+/* These are the four functions used in the four steps of the MD5 algorithm
+ and defined in the RFC 1321. The first function is a little bit optimized
+ (as found in Colin Plumbs public domain implementation). */
+/* #define FF(b, c, d) ((b & c) | (~b & d)) */
+#define FF(b, c, d) (d ^ (b & (c ^ d)))
+#define FG(b, c, d) FF (d, b, c)
+#define FH(b, c, d) (b ^ c ^ d)
+#define FI(b, c, d) (c ^ (b | ~d))
+
+
+/****************
+ * transform n*64 bytes
+ */
+static void
+transform(MD5_CONTEXT *ctx, const unsigned char *data)
+{
+ u32 correct_words[16];
+ u32 A = ctx->A;
+ u32 B = ctx->B;
+ u32 C = ctx->C;
+ u32 D = ctx->D;
+ u32 *cwp = correct_words;
+
+#ifdef BIG_ENDIAN_HOST
+ {
+ int i;
+ unsigned char *p2, *p1;
+
+ for (i = 0, p1 = data, p2 = (unsigned char*)correct_words;
+ i < 16; i++, p2 += 4) {
+ p2[3] = *p1++;
+ p2[2] = *p1++;
+ p2[1] = *p1++;
+ p2[0] = *p1++;
+ }
+ }
+#else
+ memcpy(correct_words, data, 64);
+#endif
+
+
+#define OP(a, b, c, d, s, T) \
+ do { \
+ a += FF (b, c, d) + (*cwp++) + T; \
+ a = rol(a, s); \
+ a += b; \
+ } while (0)
+
+ /* Before we start, one word about the strange constants.
+ They are defined in RFC 1321 as
+
+ T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
+ */
+
+ /* Round 1. */
+ OP (A, B, C, D, 7, 0xd76aa478);
+ OP (D, A, B, C, 12, 0xe8c7b756);
+ OP (C, D, A, B, 17, 0x242070db);
+ OP (B, C, D, A, 22, 0xc1bdceee);
+ OP (A, B, C, D, 7, 0xf57c0faf);
+ OP (D, A, B, C, 12, 0x4787c62a);
+ OP (C, D, A, B, 17, 0xa8304613);
+ OP (B, C, D, A, 22, 0xfd469501);
+ OP (A, B, C, D, 7, 0x698098d8);
+ OP (D, A, B, C, 12, 0x8b44f7af);
+ OP (C, D, A, B, 17, 0xffff5bb1);
+ OP (B, C, D, A, 22, 0x895cd7be);
+ OP (A, B, C, D, 7, 0x6b901122);
+ OP (D, A, B, C, 12, 0xfd987193);
+ OP (C, D, A, B, 17, 0xa679438e);
+ OP (B, C, D, A, 22, 0x49b40821);
+
+#undef OP
+#define OP(f, a, b, c, d, k, s, T) \
+ do { \
+ a += f (b, c, d) + correct_words[k] + T; \
+ a = rol(a, s); \
+ a += b; \
+ } while (0)
+
+ /* Round 2. */
+ OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
+ OP (FG, D, A, B, C, 6, 9, 0xc040b340);
+ OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
+ OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
+ OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
+ OP (FG, D, A, B, C, 10, 9, 0x02441453);
+ OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
+ OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
+ OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
+ OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
+ OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
+ OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
+ OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
+ OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
+ OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
+ OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
+
+ /* Round 3. */
+ OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
+ OP (FH, D, A, B, C, 8, 11, 0x8771f681);
+ OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
+ OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
+ OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
+ OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
+ OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
+ OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
+ OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
+ OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
+ OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
+ OP (FH, B, C, D, A, 6, 23, 0x04881d05);
+ OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
+ OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
+ OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
+ OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
+
+ /* Round 4. */
+ OP (FI, A, B, C, D, 0, 6, 0xf4292244);
+ OP (FI, D, A, B, C, 7, 10, 0x432aff97);
+ OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
+ OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
+ OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
+ OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
+ OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
+ OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
+ OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
+ OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
+ OP (FI, C, D, A, B, 6, 15, 0xa3014314);
+ OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
+ OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
+ OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
+ OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
+ OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
+
+ /* Put checksum in context given as argument. */
+ ctx->A += A;
+ ctx->B += B;
+ ctx->C += C;
+ ctx->D += D;
+}
+
+
+
+/* The routine updates the message-digest context to
+ * account for the presence of each of the characters inBuf[0..inLen-1]
+ * in the message whose digest is being computed.
+ */
+void
+md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen)
+{
+ if (hd->count == 64) { /* flush the buffer */
+ transform( hd, hd->buf );
+ hd->count = 0;
+ hd->nblocks++;
+ }
+ if (!inbuf)
+ return;
+ if (hd->count) {
+ for (; inlen && hd->count < 64; inlen--)
+ hd->buf[hd->count++] = *inbuf++;
+ md5_update(hd, NULL, 0);
+ if (!inlen)
+ return;
+ }
+
+ while (inlen >= 64) {
+ transform(hd, inbuf);
+ hd->count = 0;
+ hd->nblocks++;
+ inlen -= 64;
+ inbuf += 64;
+ }
+
+ for (; inlen && hd->count < 64; inlen--)
+ hd->buf[hd->count++] = *inbuf++;
+}
+
+
+
+/* The routine final terminates the message-digest computation and
+ * ends with the desired message digest in mdContext->digest[0...15].
+ * The handle is prepared for a new MD5 cycle.
+ * Returns 16 bytes representing the digest.
+ */
+
+static void
+do_final(MD5_CONTEXT *hd)
+{
+ u32 t, msb, lsb;
+ unsigned char *p;
+
+ md5_update(hd, NULL, 0); /* flush */
+
+ msb = 0;
+ t = hd->nblocks;
+ if ((lsb = t << 6) < t) /* multiply by 64 to make a byte count */
+ msb++;
+ msb += t >> 26;
+ t = lsb;
+ if ((lsb = t + hd->count) < t) /* add the count */
+ msb++;
+ t = lsb;
+ if ((lsb = t << 3) < t) /* multiply by 8 to make a bit count */
+ msb++;
+ msb += t >> 29;
+
+ if (hd->count < 56) { /* enough room */
+ hd->buf[hd->count++] = 0x80; /* pad */
+ while(hd->count < 56)
+ hd->buf[hd->count++] = 0; /* pad */
+ } else { /* need one extra block */
+ hd->buf[hd->count++] = 0x80; /* pad character */
+ while (hd->count < 64)
+ hd->buf[hd->count++] = 0;
+ md5_update(hd, NULL, 0); /* flush */
+ memset(hd->buf, 0, 56); /* fill next block with zeroes */
+ }
+
+ /* append the 64 bit count */
+ hd->buf[56] = lsb ;
+ hd->buf[57] = lsb >> 8;
+ hd->buf[58] = lsb >> 16;
+ hd->buf[59] = lsb >> 24;
+ hd->buf[60] = msb ;
+ hd->buf[61] = msb >> 8;
+ hd->buf[62] = msb >> 16;
+ hd->buf[63] = msb >> 24;
+ transform(hd, hd->buf);
+
+ p = hd->buf;
+#ifdef BIG_ENDIAN_HOST
+#define X(a) do { *p++ = hd->a ; *p++ = hd->a >> 8; \
+ *p++ = hd->a >> 16; *p++ = hd->a >> 24; } while(0)
+#else /* little endian */
+ /*#define X(a) do { *(u32*)p = hd->##a ; p += 4; } while(0)*/
+ /* Unixware's cpp doesn't like the above construct so we do it his way:
+ * (reported by Allan Clark) */
+#define X(a) do { *(u32*)p = (*hd).a ; p += 4; } while(0)
+#endif
+ X(A);
+ X(B);
+ X(C);
+ X(D);
+#undef X
+ hd->finalized = 1;
+}
+
+void
+md5_final(unsigned char *digest, MD5_CONTEXT *ctx)
+{
+ if (!ctx->finalized)
+ do_final(ctx);
+ memcpy(digest, ctx->buf, 16);
+}
+
+/*
+ * Creates a MD5 digest in hex fomrat (lowercase letters) from the
+ * string S. hextdigest but be buffer of at lease 33 bytes!
+ */
+void
+md5_hex_digest(char *hexdigest, const unsigned char *s)
+{
+ int i;
+ MD5_CONTEXT context;
+ unsigned char digest[16];
+
+ md5_init(&context);
+ md5_update(&context, s, strlen(s));
+ md5_final(digest, &context);
+
+ for (i = 0; i < 16; i++)
+ sprintf(hexdigest + 2 * i, "%02x", digest[i]);
+}
+
+
+/*
+** Function: md5_hmac
+** taken from the file rfc2104.txt
+** written by Martin Schaaf <mascha@ma-scha.de>
+*/
+void
+md5_hmac(unsigned char *digest,
+ const unsigned char* text, int text_len,
+ const unsigned char* key, int key_len)
+{
+ MD5_CONTEXT context;
+ unsigned char k_ipad[64]; /* inner padding -
+ * key XORd with ipad
+ */
+ unsigned char k_opad[64]; /* outer padding -
+ * key XORd with opad
+ */
+ /* unsigned char tk[16]; */
+ int i;
+
+ /* start out by storing key in pads */
+ memset(k_ipad, 0, sizeof k_ipad);
+ memset(k_opad, 0, sizeof k_opad);
+ if (key_len > 64) {
+ /* if key is longer than 64 bytes reset it to key=MD5(key) */
+ MD5_CONTEXT tctx;
+
+ md5_init(&tctx);
+ md5_update(&tctx, key, key_len);
+ md5_final(k_ipad, &tctx);
+ md5_final(k_opad, &tctx);
+ } else {
+ memcpy(k_ipad, key, key_len);
+ memcpy(k_opad, key, key_len);
+ }
+
+ /*
+ * the HMAC_MD5 transform looks like:
+ *
+ * MD5(K XOR opad, MD5(K XOR ipad, text))
+ *
+ * where K is an n byte key
+ * ipad is the byte 0x36 repeated 64 times
+ * opad is the byte 0x5c repeated 64 times
+ * and text is the data being protected
+ */
+
+
+ /* XOR key with ipad and opad values */
+ for (i = 0; i < 64; i++) {
+ k_ipad[i] ^= 0x36;
+ k_opad[i] ^= 0x5c;
+ }
+
+ /*
+ * perform inner MD5
+ */
+ md5_init(&context); /* init context for 1st
+ * pass */
+ md5_update(&context, k_ipad, 64); /* start with inner pad */
+ md5_update(&context, text, text_len); /* then text of datagram */
+ md5_final(digest, &context); /* finish up 1st pass */
+ /*
+ * perform outer MD5
+ */
+ md5_init(&context); /* init context for 2nd
+ * pass */
+ md5_update(&context, k_opad, 64); /* start with outer pad */
+ md5_update(&context, digest, 16); /* then results of 1st
+ * hash */
+ md5_final(digest, &context); /* finish up 2nd pass */
+}
+
+
+void
+md5_hex_hmac(char *hexdigest,
+ const unsigned char* text, int text_len,
+ const unsigned char* key, int key_len)
+{
+ unsigned char digest[16];
+ int i;
+
+ md5_hmac(digest, text, text_len, key, key_len);
+ for (i = 0; i < 16; i++)
+ sprintf(hexdigest + 2 * i, "%02x", digest[i]);
+}
diff --git a/src/md5.h b/src/md5.h
new file mode 100644
index 00000000..84894b2c
--- /dev/null
+++ b/src/md5.h
@@ -0,0 +1,49 @@
+/* md5.h - MD5 Message-Digest Algorithm
+ * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
+ *
+ * according to the definition of MD5 in RFC 1321 from April 1992.
+ * NOTE: This is *not* the same file as the one from glibc
+ *
+ * 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 the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _MD5_HDR_
+#define _MD5_HDR_
+
+#include "utils.h"
+
+typedef struct { /* Hmm, should be private */
+ u32 A,B,C,D;
+ u32 nblocks;
+ unsigned char buf[64];
+ int count;
+ int finalized;
+} MD5_CONTEXT;
+
+void md5_init(MD5_CONTEXT *ctx);
+void md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen);
+void md5_final(unsigned char *digest, MD5_CONTEXT *ctx);
+
+void md5_hex_digest(char *hexdigest, const unsigned char *s);
+
+void md5_hmac(unsigned char *digest,
+ const unsigned char* text, int text_len,
+ const unsigned char* key, int key_len);
+void md5_hex_hmac(char *hexdigest,
+ const unsigned char* text, int text_len,
+ const unsigned char* key, int key_len);
+
+#endif /* _MD5_HDR_ */
+
diff --git a/src/menu.c b/src/menu.c
new file mode 100644
index 00000000..82c40cd5
--- /dev/null
+++ b/src/menu.c
@@ -0,0 +1,262 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenubar.h>
+#include <gtk/gtkcheckmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkwindow.h>
+
+#include "intl.h"
+#include "menu.h"
+#include "utils.h"
+
+static gchar *menu_translate(const gchar *path, gpointer data);
+
+GtkWidget *menubar_create(GtkWidget *window, GtkItemFactoryEntry *entries,
+ guint n_entries, const gchar *path, gpointer data)
+{
+ GtkItemFactory *factory;
+
+ factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, path, NULL);
+ gtk_item_factory_set_translate_func(factory, menu_translate,
+ NULL, NULL);
+ gtk_item_factory_create_items(factory, n_entries, entries, data);
+ gtk_window_add_accel_group(GTK_WINDOW(window), factory->accel_group);
+
+ return gtk_item_factory_get_widget(factory, path);
+}
+
+GtkWidget *menu_create_items(GtkItemFactoryEntry *entries,
+ guint n_entries, const gchar *path,
+ GtkItemFactory **factory, gpointer data)
+{
+ *factory = gtk_item_factory_new(GTK_TYPE_MENU, path, NULL);
+ gtk_item_factory_set_translate_func(*factory, menu_translate,
+ NULL, NULL);
+ gtk_item_factory_create_items(*factory, n_entries, entries, data);
+
+ return gtk_item_factory_get_widget(*factory, path);
+}
+
+static gchar *menu_translate(const gchar *path, gpointer data)
+{
+ gchar *retval;
+
+ retval = gettext(path);
+
+ return retval;
+}
+
+#warning FIXME_GTK2
+#if 0
+static void factory_print_func(gpointer data, gchar *string)
+{
+ GString *out_str = data;
+
+ g_string_append(out_str, string);
+ g_string_append_c(out_str, '\n');
+}
+
+GString *menu_factory_get_rc(const gchar *path)
+{
+ GString *string;
+ GtkPatternSpec *pspec;
+ gchar pattern[256];
+
+ pspec = g_new(GtkPatternSpec, 1);
+ g_snprintf(pattern, sizeof(pattern), "%s*", path);
+ gtk_pattern_spec_init(pspec, pattern);
+ string = g_string_new("");
+ gtk_item_factory_dump_items(pspec, FALSE, factory_print_func,
+ string);
+ gtk_pattern_spec_free_segs(pspec);
+
+ return string;
+}
+
+void menu_factory_clear_rc(const gchar *rc_str)
+{
+ GString *string;
+ gchar *p;
+ gchar *start, *end;
+ guint pos = 0;
+
+ string = g_string_new(rc_str);
+ while ((p = strstr(string->str + pos, "(menu-path \"")) != NULL) {
+ pos = p + 12 - string->str;
+ p = strchr(p + 12, '"');
+ if (!p) continue;
+ start = strchr(p + 1, '"');
+ if (!start) continue;
+ end = strchr(start + 1, '"');
+ if (!end) continue;
+ pos = start + 1 - string->str;
+ if (end > start + 1)
+ g_string_erase(string, pos, end - (start + 1));
+ }
+
+ gtk_item_factory_parse_rc_string(string->str);
+ g_string_free(string, TRUE);
+}
+
+void menu_factory_copy_rc(const gchar *src_path, const gchar *dest_path)
+{
+ GString *string;
+ gint src_path_len;
+ gint dest_path_len;
+ gchar *p;
+ guint pos = 0;
+
+ string = menu_factory_get_rc(src_path);
+ src_path_len = strlen(src_path);
+ dest_path_len = strlen(dest_path);
+
+ while ((p = strstr(string->str + pos, src_path)) != NULL) {
+ pos = p - string->str;
+ g_string_erase(string, pos, src_path_len);
+ g_string_insert(string, pos, dest_path);
+ pos += dest_path_len;
+ }
+
+ pos = 0;
+ while ((p = strchr(string->str + pos, ';')) != NULL) {
+ pos = p - string->str;
+ if (pos == 0 || *(p - 1) == '\n')
+ g_string_erase(string, pos, 1);
+ }
+
+ menu_factory_clear_rc(string->str);
+ gtk_item_factory_parse_rc_string(string->str);
+ g_string_free(string, TRUE);
+}
+#endif
+
+void menu_set_sensitive(GtkItemFactory *ifactory, const gchar *path,
+ gboolean sensitive)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail(ifactory != NULL);
+
+ widget = gtk_item_factory_get_item(ifactory, path);
+ gtk_widget_set_sensitive(widget, sensitive);
+}
+
+void menu_set_sensitive_all(GtkMenuShell *menu_shell, gboolean sensitive)
+{
+ GList *cur;
+
+ for (cur = menu_shell->children; cur != NULL; cur = cur->next)
+ gtk_widget_set_sensitive(GTK_WIDGET(cur->data), sensitive);
+}
+
+void menu_set_active(GtkItemFactory *ifactory, const gchar *path,
+ gboolean is_active)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail(ifactory != NULL);
+
+ widget = gtk_item_factory_get_item(ifactory, path);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), is_active);
+}
+
+void menu_button_position(GtkMenu *menu, gint *x, gint *y, gboolean *push_in,
+ gpointer user_data)
+{
+ GtkWidget *button;
+ GtkRequisition requisition;
+ gint button_xpos, button_ypos;
+ gint xpos, ypos;
+ gint width, height;
+ gint scr_width, scr_height;
+
+ g_return_if_fail(x != NULL && y != NULL);
+ g_return_if_fail(GTK_IS_BUTTON(user_data));
+
+ button = GTK_WIDGET(user_data);
+
+ gtk_widget_get_child_requisition(GTK_WIDGET(menu), &requisition);
+ width = requisition.width;
+ height = requisition.height;
+ gdk_window_get_origin(button->window, &button_xpos, &button_ypos);
+
+ xpos = button_xpos + button->allocation.x;
+ ypos = button_ypos + button->allocation.y + button->requisition.height;
+
+ scr_width = gdk_screen_width();
+ scr_height = gdk_screen_height();
+
+ if (xpos + width > scr_width)
+ xpos -= (xpos + width) - scr_width;
+ if (ypos + height > scr_height)
+ ypos = button->requisition.height + height;
+ if (xpos < 0)
+ xpos = 0;
+ if (ypos < 0)
+ ypos = 0;
+
+ *x = xpos;
+ *y = ypos;
+}
+
+gint menu_find_option_menu_index(GtkOptionMenu *optmenu, gpointer data,
+ GCompareFunc func)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gpointer menu_data;
+ GList *cur;
+ gint n;
+
+ menu = gtk_option_menu_get_menu(optmenu);
+
+ for (cur = GTK_MENU_SHELL(menu)->children, n = 0;
+ cur != NULL; cur = cur->next, n++) {
+ menuitem = GTK_WIDGET(cur->data);
+ menu_data = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+ if (func) {
+ if (func(menu_data, data) == 0)
+ return n;
+ } else if (menu_data == data)
+ return n;
+ }
+
+ return -1;
+}
+
+gint menu_get_option_menu_active_index(GtkOptionMenu *optmenu)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+
+ return GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
diff --git a/src/menu.h b/src/menu.h
new file mode 100644
index 00000000..eead2819
--- /dev/null
+++ b/src/menu.h
@@ -0,0 +1,90 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MENU_H__
+#define __MENU_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenushell.h>
+#include <gtk/gtkoptionmenu.h>
+
+#define MENU_VAL_ID "Sylpheed::Menu::ValueID"
+
+#define MENUITEM_ADD(menu, menuitem, label, data) \
+{ \
+ if (label) \
+ menuitem = gtk_menu_item_new_with_label(label); \
+ else { \
+ menuitem = gtk_menu_item_new(); \
+ gtk_widget_set_sensitive(menuitem, FALSE); \
+ } \
+ gtk_widget_show(menuitem); \
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); \
+ if (data) \
+ g_object_set_data(G_OBJECT(menuitem), \
+ MENU_VAL_ID, \
+ GINT_TO_POINTER(data)); \
+}
+
+#define menu_set_insensitive_all(menu_shell) \
+ menu_set_sensitive_all(menu_shell, FALSE);
+
+GtkWidget *menubar_create (GtkWidget *window,
+ GtkItemFactoryEntry *entries,
+ guint n_entries,
+ const gchar *path,
+ gpointer data);
+GtkWidget *menu_create_items (GtkItemFactoryEntry *entries,
+ guint n_entries,
+ const gchar *path,
+ GtkItemFactory **factory,
+ gpointer data);
+
+GString *menu_factory_get_rc (const gchar *path);
+void menu_factory_clear_rc (const gchar *rc_str);
+void menu_factory_copy_rc (const gchar *src_path,
+ const gchar *dest_path);
+
+void menu_set_sensitive (GtkItemFactory *ifactory,
+ const gchar *path,
+ gboolean sensitive);
+void menu_set_sensitive_all (GtkMenuShell *menu_shell,
+ gboolean sensitive);
+
+void menu_set_active (GtkItemFactory *ifactory,
+ const gchar *path,
+ gboolean is_active);
+
+void menu_button_position (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ gpointer user_data);
+
+gint menu_find_option_menu_index(GtkOptionMenu *optmenu,
+ gpointer data,
+ GCompareFunc func);
+
+gint menu_get_option_menu_active_index
+ (GtkOptionMenu *optmenu);
+
+#endif /* __MENU_H__ */
diff --git a/src/message_search.c b/src/message_search.c
new file mode 100644
index 00000000..e49daca1
--- /dev/null
+++ b/src/message_search.c
@@ -0,0 +1,226 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkctree.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "intl.h"
+#include "main.h"
+#include "message_search.h"
+#include "messageview.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+
+static GtkWidget *window;
+static GtkWidget *body_entry;
+static GtkWidget *case_checkbtn;
+static GtkWidget *backward_checkbtn;
+static GtkWidget *search_btn;
+static GtkWidget *clear_btn;
+static GtkWidget *close_btn;
+
+static void message_search_create(MessageView *summaryview);
+static void message_search_execute(GtkButton *button, gpointer data);
+static void message_search_clear(GtkButton *button, gpointer data);
+static void body_activated(void);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data);
+
+void message_search(MessageView *messageview)
+{
+ if (!window)
+ message_search_create(messageview);
+ else
+ gtk_widget_hide(window);
+
+ gtk_widget_grab_focus(search_btn);
+ gtk_widget_grab_focus(body_entry);
+ gtk_widget_show(window);
+}
+
+static void message_search_create(MessageView *messageview)
+{
+ GtkWidget *vbox1;
+ GtkWidget *hbox1;
+ GtkWidget *body_label;
+ GtkWidget *checkbtn_hbox;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window),
+ _("Find in current message"));
+ gtk_widget_set_size_request (window, 450, -1);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox1 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (window), vbox1);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
+
+ body_label = gtk_label_new (_("Find text:"));
+ gtk_widget_show (body_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), body_label, FALSE, FALSE, 0);
+
+ body_entry = gtk_entry_new ();
+ gtk_widget_show (body_entry);
+ gtk_box_pack_start (GTK_BOX (hbox1), body_entry, TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(body_entry), "activate",
+ G_CALLBACK(body_activated), messageview);
+
+ checkbtn_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (checkbtn_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8);
+
+ case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive"));
+ gtk_widget_show (case_checkbtn);
+ gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn,
+ FALSE, FALSE, 0);
+
+ backward_checkbtn =
+ gtk_check_button_new_with_label (_("Backward search"));
+ gtk_widget_show (backward_checkbtn);
+ gtk_box_pack_start (GTK_BOX (checkbtn_hbox), backward_checkbtn,
+ FALSE, FALSE, 0);
+
+ gtkut_button_set_create(&confirm_area,
+ &search_btn, _("Search"),
+ &clear_btn, _("Clear"),
+ &close_btn, _("Close"));
+ gtk_widget_show (confirm_area);
+ gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(search_btn);
+
+ g_signal_connect(G_OBJECT(search_btn), "clicked",
+ G_CALLBACK(message_search_execute), messageview);
+ g_signal_connect(G_OBJECT(clear_btn), "clicked",
+ G_CALLBACK(message_search_clear), messageview);
+ g_signal_connect_closure
+ (G_OBJECT(close_btn), "clicked",
+ g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide),
+ window, NULL),
+ FALSE);
+}
+
+static void message_search_execute(GtkButton *button, gpointer data)
+{
+ MessageView *messageview = data;
+ gboolean case_sens;
+ gboolean backward;
+ gboolean all_searched = FALSE;
+ const gchar *body_str;
+
+ body_str = gtk_entry_get_text(GTK_ENTRY(body_entry));
+ if (*body_str == '\0') return;
+
+ case_sens = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(case_checkbtn));
+ backward = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(backward_checkbtn));
+
+ for (;;) {
+ gchar *str;
+ AlertValue val;
+
+ if (backward) {
+ if (messageview_search_string_backward
+ (messageview, body_str, case_sens) == TRUE)
+ break;
+ } else {
+ if (messageview_search_string
+ (messageview, body_str, case_sens) == TRUE)
+ break;
+ }
+
+ if (all_searched) {
+ alertpanel_message
+ (_("Search failed"),
+ _("Search string not found."),
+ ALERT_WARNING);
+ break;
+ }
+
+ all_searched = TRUE;
+
+ if (backward)
+ str = _("Beginning of message reached; "
+ "continue from end?");
+ else
+ str = _("End of message reached; "
+ "continue from beginning?");
+
+ val = alertpanel(_("Search finished"), str,
+ _("Yes"), _("No"), NULL);
+ if (G_ALERTDEFAULT == val) {
+ manage_window_focus_in(window, NULL, NULL);
+ messageview_set_position(messageview,
+ backward ? -1 : 0);
+ } else
+ break;
+ }
+}
+
+static void message_search_clear(GtkButton *button, gpointer data)
+{
+ gtk_editable_delete_text(GTK_EDITABLE(body_entry), 0, -1);
+}
+
+static void body_activated(void)
+{
+ gtk_button_clicked(GTK_BUTTON(search_btn));
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(window);
+ return FALSE;
+}
diff --git a/src/message_search.h b/src/message_search.h
new file mode 100644
index 00000000..1ec45ede
--- /dev/null
+++ b/src/message_search.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MESSAGE_SEARCH_H__
+#define __MESSAGE_SEARCH_H__
+
+#include <glib.h>
+
+#include "messageview.h"
+
+void message_search (MessageView *messageview);
+
+#endif /* __MESSAGE_SEARCH_H__ */
diff --git a/src/messageview.c b/src/messageview.c
new file mode 100644
index 00000000..307ead0c
--- /dev/null
+++ b/src/messageview.c
@@ -0,0 +1,877 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "intl.h"
+#include "main.h"
+#include "messageview.h"
+#include "message_search.h"
+#include "headerview.h"
+#include "textview.h"
+#include "imageview.h"
+#include "mimeview.h"
+#include "menu.h"
+#include "about.h"
+#include "filesel.h"
+#include "sourcewindow.h"
+#include "addressbook.h"
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "manage_window.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "procmime.h"
+#include "account.h"
+#include "action.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "prefs_filter.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "rfc2015.h"
+
+static GList *messageview_list = NULL;
+
+static void messageview_change_view_type(MessageView *messageview,
+ MessageType type);
+static void messageview_destroy_cb (GtkWidget *widget,
+ MessageView *messageview);
+static void messageview_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ MessageView *messageview);
+
+static void save_as_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void print_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void close_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void copy_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void allsel_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void search_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void set_charset_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void view_source_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void show_all_header_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void compose_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void reply_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void reedit_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void addressbook_open_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void add_address_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void create_filter_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static void about_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
+static GtkItemFactoryEntry msgview_entries[] =
+{
+ {N_("/_File"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_File/_Save as..."), NULL, save_as_cb, 0, NULL},
+ {N_("/_File/_Print..."), NULL, print_cb, 0, NULL},
+ {N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_File/_Close"), NULL, close_cb, 0, NULL},
+
+ {N_("/_Edit"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Edit/_Copy"), NULL, copy_cb, 0, NULL},
+ {N_("/_Edit/Select _all"), NULL, allsel_cb, 0, NULL},
+ {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Edit/_Find in current message..."),
+ NULL, search_cb, 0, NULL},
+
+ {N_("/_View"), NULL, NULL, 0, "<Branch>"},
+
+#define CODESET_SEPARATOR \
+ {N_("/_View/_Code set/---"), NULL, NULL, 0, "<Separator>"}
+#define CODESET_ACTION(action) \
+ NULL, set_charset_cb, action, "/View/Code set/Auto detect"
+
+ {N_("/_View/_Code set"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Code set/_Auto detect"),
+ NULL, set_charset_cb, C_AUTO, "<RadioItem>"},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/7bit ascii (US-ASC_II)"),
+ CODESET_ACTION(C_US_ASCII)},
+
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Unicode (_UTF-8)"),
+ CODESET_ACTION(C_UTF_8)},
+ CODESET_SEPARATOR,
+#endif
+ {N_("/_View/_Code set/Western European (ISO-8859-_1)"),
+ CODESET_ACTION(C_ISO_8859_1)},
+ {N_("/_View/_Code set/Western European (ISO-8859-15)"),
+ CODESET_ACTION(C_ISO_8859_15)},
+ CODESET_SEPARATOR,
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Central European (ISO-8859-_2)"),
+ CODESET_ACTION(C_ISO_8859_2)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/_Baltic (ISO-8859-13)"),
+ CODESET_ACTION(C_ISO_8859_13)},
+ {N_("/_View/_Code set/Baltic (ISO-8859-_4)"),
+ CODESET_ACTION(C_ISO_8859_4)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Greek (ISO-8859-_7)"),
+ CODESET_ACTION(C_ISO_8859_7)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Turkish (ISO-8859-_9)"),
+ CODESET_ACTION(C_ISO_8859_9)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Cyrillic (ISO-8859-_5)"),
+ CODESET_ACTION(C_ISO_8859_5)},
+ {N_("/_View/_Code set/Cyrillic (KOI8-_R)"),
+ CODESET_ACTION(C_KOI8_R)},
+ {N_("/_View/_Code set/Cyrillic (KOI8-U)"),
+ CODESET_ACTION(C_KOI8_U)},
+ {N_("/_View/_Code set/Cyrillic (Windows-1251)"),
+ CODESET_ACTION(C_CP1251)},
+ CODESET_SEPARATOR,
+#endif
+ {N_("/_View/_Code set/Japanese (ISO-2022-_JP)"),
+ CODESET_ACTION(C_ISO_2022_JP)},
+#if HAVE_ICONV
+ {N_("/_View/_Code set/Japanese (ISO-2022-JP-2)"),
+ CODESET_ACTION(C_ISO_2022_JP_2)},
+#endif
+ {N_("/_View/_Code set/Japanese (_EUC-JP)"),
+ CODESET_ACTION(C_EUC_JP)},
+ {N_("/_View/_Code set/Japanese (_Shift__JIS)"),
+ CODESET_ACTION(C_SHIFT_JIS)},
+#if HAVE_ICONV
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Simplified Chinese (_GB2312)"),
+ CODESET_ACTION(C_GB2312)},
+ {N_("/_View/_Code set/Traditional Chinese (_Big5)"),
+ CODESET_ACTION(C_BIG5)},
+ {N_("/_View/_Code set/Traditional Chinese (EUC-_TW)"),
+ CODESET_ACTION(C_EUC_TW)},
+ {N_("/_View/_Code set/Chinese (ISO-2022-_CN)"),
+ CODESET_ACTION(C_ISO_2022_CN)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Korean (EUC-_KR)"),
+ CODESET_ACTION(C_EUC_KR)},
+ {N_("/_View/_Code set/Korean (ISO-2022-KR)"),
+ CODESET_ACTION(C_ISO_2022_KR)},
+ CODESET_SEPARATOR,
+ {N_("/_View/_Code set/Thai (TIS-620)"),
+ CODESET_ACTION(C_TIS_620)},
+ {N_("/_View/_Code set/Thai (Windows-874)"),
+ CODESET_ACTION(C_WINDOWS_874)},
+#endif
+
+#undef CODESET_SEPARATOR
+#undef CODESET_ACTION
+
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/Mess_age source"), NULL, view_source_cb, 0, NULL},
+ {N_("/_View/Show all _header"), NULL, show_all_header_cb, 0, "<ToggleItem>"},
+
+ {N_("/_Message"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Message/Compose _new message"),
+ NULL, compose_cb, 0, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Reply"), NULL, reply_cb, COMPOSE_REPLY, NULL},
+ {N_("/_Message/Repl_y to/_all"),
+ NULL, reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
+ {N_("/_Message/Repl_y to/_sender"),
+ NULL, reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
+ {N_("/_Message/Repl_y to/mailing _list"),
+ NULL, reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/_Forward"), NULL, reply_cb, COMPOSE_FORWARD, NULL},
+ {N_("/_Message/For_ward as attachment"),
+ NULL, reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
+ {N_("/_Message/Redirec_t"), NULL, reply_cb, COMPOSE_REDIRECT, NULL},
+ {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Message/Re-_edit"), NULL, reedit_cb, 0, NULL},
+
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/_Address book"), NULL, addressbook_open_cb, 0, NULL},
+ {N_("/_Tools/Add sender to address boo_k"),
+ NULL, add_address_cb, 0, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/_Create filter rule"),
+ NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/_Create filter rule/_Automatically"),
+ NULL, create_filter_cb, FILTER_BY_AUTO, NULL},
+ {N_("/_Tools/_Create filter rule/by _From"),
+ NULL, create_filter_cb, FILTER_BY_FROM, NULL},
+ {N_("/_Tools/_Create filter rule/by _To"),
+ NULL, create_filter_cb, FILTER_BY_TO, NULL},
+ {N_("/_Tools/_Create filter rule/by _Subject"),
+ NULL, create_filter_cb, FILTER_BY_SUBJECT, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
+
+ {N_("/_Help"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Help/_About"), NULL, about_cb, 0, NULL}
+};
+
+
+MessageView *messageview_create(void)
+{
+ MessageView *messageview;
+ GtkWidget *vbox;
+ HeaderView *headerview;
+ TextView *textview;
+ MimeView *mimeview;
+
+ debug_print(_("Creating message view...\n"));
+ messageview = g_new0(MessageView, 1);
+
+ messageview->type = MVIEW_TEXT;
+
+ headerview = headerview_create();
+
+ textview = textview_create();
+ textview->messageview = messageview;
+
+ mimeview = mimeview_create();
+ mimeview->textview = textview_create();
+ mimeview->textview->messageview = messageview;
+ mimeview->imageview = imageview_create();
+ mimeview->imageview->messageview = messageview;
+ mimeview->messageview = messageview;
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(headerview),
+ FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(textview),
+ TRUE, TRUE, 0);
+ gtk_widget_show(vbox);
+
+ /* to remove without destroyed */
+ gtk_widget_ref(GTK_WIDGET_PTR(textview));
+ gtk_widget_ref(GTK_WIDGET_PTR(mimeview));
+ gtk_widget_ref(GTK_WIDGET_PTR(mimeview->textview));
+ gtk_widget_ref(GTK_WIDGET_PTR(mimeview->imageview));
+
+ messageview->vbox = vbox;
+ messageview->new_window = FALSE;
+ messageview->window = NULL;
+ messageview->window_vbox = NULL;
+ messageview->headerview = headerview;
+ messageview->textview = textview;
+ messageview->mimeview = mimeview;
+
+ messageview->statusbar = NULL;
+ messageview->statusbar_cid = 0;
+
+ return messageview;
+}
+
+MessageView *messageview_create_with_new_window(void)
+{
+ MessageView *msgview;
+ GtkWidget *window;
+ GtkWidget *window_vbox;
+ GtkWidget *body_vbox;
+ GtkWidget *menubar;
+ GtkItemFactory *ifactory;
+ GtkWidget *statusbar;
+ guint n_menu_entries;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View"));
+ gtk_window_set_wmclass(GTK_WINDOW(window), "message_view", "Sylpheed");
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+ gtk_widget_set_size_request(window, prefs_common.msgwin_width,
+ prefs_common.msgwin_height);
+
+ msgview = messageview_create();
+
+ window_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), window_vbox);
+
+ g_signal_connect(G_OBJECT(window), "size_allocate",
+ G_CALLBACK(messageview_size_allocate_cb),
+ msgview);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(messageview_destroy_cb), msgview);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), msgview);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ n_menu_entries = sizeof(msgview_entries) / sizeof (msgview_entries[0]);
+ menubar = menubar_create(window, msgview_entries, n_menu_entries,
+ "<MessageView>", msgview);
+#warning FIXME_GTK2
+#if 0
+ menu_factory_copy_rc("<Main>", "<MessageView>");
+#endif
+ gtk_box_pack_start(GTK_BOX(window_vbox), menubar, FALSE, TRUE, 0);
+
+ body_vbox = gtk_vbox_new(FALSE, BORDER_WIDTH);
+ gtk_container_set_border_width(GTK_CONTAINER(body_vbox), BORDER_WIDTH);
+ gtk_box_pack_start(GTK_BOX(window_vbox), body_vbox, TRUE, TRUE, 0);
+
+ gtk_box_pack_start(GTK_BOX(body_vbox), GTK_WIDGET_PTR(msgview),
+ TRUE, TRUE, 0);
+ gtk_widget_grab_focus(msgview->textview->text);
+
+ statusbar = gtk_statusbar_new();
+ gtk_box_pack_end(GTK_BOX(body_vbox), statusbar, FALSE, FALSE, 0);
+ msgview->statusbar = statusbar;
+ msgview->statusbar_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Message View");
+
+ gtk_widget_show_all(window);
+
+ msgview->new_window = TRUE;
+ msgview->window = window;
+ msgview->window_vbox = window_vbox;
+ msgview->body_vbox = body_vbox;
+ msgview->visible = TRUE;
+
+ messageview_init(msgview);
+
+ ifactory = gtk_item_factory_from_widget(menubar);
+ action_update_msgview_menu(ifactory, msgview);
+
+ messageview_list = g_list_append(messageview_list, msgview);
+
+ return msgview;
+}
+
+void messageview_init(MessageView *messageview)
+{
+ headerview_init(messageview->headerview);
+ textview_init(messageview->textview);
+ mimeview_init(messageview->mimeview);
+ /* messageview_set_font(messageview); */
+}
+
+GList *messageview_get_window_list(void)
+{
+ return messageview_list;
+}
+
+gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
+ gboolean all_headers)
+{
+ gchar *file;
+ MimeInfo *mimeinfo;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ mimeinfo = procmime_scan_message(msginfo);
+ if (!mimeinfo) {
+ messageview_change_view_type(messageview, MVIEW_TEXT);
+ textview_show_error(messageview->textview);
+ return -1;
+ }
+
+ file = procmsg_get_message_file_path(msginfo);
+ if (!file) {
+ g_warning("can't get message file path.\n");
+ procmime_mimeinfo_free_all(mimeinfo);
+ messageview_change_view_type(messageview, MVIEW_TEXT);
+ textview_show_error(messageview->textview);
+ return -1;
+ }
+
+ if (messageview->msginfo != msginfo) {
+ procmsg_msginfo_free(messageview->msginfo);
+ messageview->msginfo = procmsg_msginfo_get_full_info(msginfo);
+ }
+ headerview_show(messageview->headerview, messageview->msginfo);
+
+ textview_set_all_headers(messageview->textview, all_headers);
+ textview_set_all_headers(messageview->mimeview->textview, all_headers);
+
+ if (mimeinfo->mime_type != MIME_TEXT &&
+ mimeinfo->mime_type != MIME_TEXT_HTML) {
+ messageview_change_view_type(messageview, MVIEW_MIME);
+ mimeview_show_message(messageview->mimeview, mimeinfo, file);
+ } else {
+ messageview_change_view_type(messageview, MVIEW_TEXT);
+ textview_show_message(messageview->textview, mimeinfo, file);
+ procmime_mimeinfo_free_all(mimeinfo);
+ }
+
+ g_free(file);
+
+ return 0;
+}
+
+static void messageview_change_view_type(MessageView *messageview,
+ MessageType type)
+{
+ TextView *textview = messageview->textview;
+ MimeView *mimeview = messageview->mimeview;
+
+ if (messageview->type == type) return;
+
+ if (type == MVIEW_MIME) {
+ gtkut_container_remove
+ (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)),
+ GTK_WIDGET_PTR(textview));
+ gtk_box_pack_start(GTK_BOX(messageview->vbox),
+ GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(mimeview->vbox),
+ GTK_WIDGET_PTR(textview));
+ } else if (type == MVIEW_TEXT) {
+ gtkut_container_remove
+ (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)),
+ GTK_WIDGET_PTR(mimeview));
+ mimeview_clear(mimeview);
+
+ if (mimeview->vbox == GTK_WIDGET_PTR(textview)->parent)
+ gtkut_container_remove(GTK_CONTAINER(mimeview->vbox),
+ GTK_WIDGET_PTR(textview));
+
+ gtk_box_pack_start(GTK_BOX(messageview->vbox),
+ GTK_WIDGET_PTR(textview), TRUE, TRUE, 0);
+ } else
+ return;
+
+ messageview->type = type;
+}
+
+void messageview_clear(MessageView *messageview)
+{
+ procmsg_msginfo_free(messageview->msginfo);
+ messageview->msginfo = NULL;
+ messageview_change_view_type(messageview, MVIEW_TEXT);
+ headerview_clear(messageview->headerview);
+ textview_clear(messageview->textview);
+ mimeview_clear(messageview->mimeview);
+}
+
+void messageview_destroy(MessageView *messageview)
+{
+ GtkWidget *textview = GTK_WIDGET_PTR(messageview->textview);
+ GtkWidget *imageview = GTK_WIDGET_PTR(messageview->mimeview->imageview);
+ GtkWidget *mimeview = GTK_WIDGET_PTR(messageview->mimeview);
+
+ messageview_list = g_list_remove(messageview_list, messageview);
+
+ headerview_destroy(messageview->headerview);
+ textview_destroy(messageview->textview);
+ mimeview_destroy(messageview->mimeview);
+
+ procmsg_msginfo_free(messageview->msginfo);
+
+ g_free(messageview);
+
+ gtk_widget_unref(textview);
+ gtk_widget_unref(imageview);
+ gtk_widget_unref(mimeview);
+}
+
+void messageview_quote_color_set(void)
+{
+}
+
+void messageview_set_font(MessageView *messageview)
+{
+ textview_set_font(messageview->textview, NULL);
+}
+
+TextView *messageview_get_current_textview(MessageView *messageview)
+{
+ TextView *text = NULL;
+
+ if (messageview->type == MVIEW_TEXT)
+ text = messageview->textview;
+ else if (messageview->type == MVIEW_MIME) {
+ if (gtk_notebook_get_current_page
+ (GTK_NOTEBOOK(messageview->mimeview->notebook)) == 0)
+ text = messageview->textview;
+ else if (messageview->mimeview->type == MIMEVIEW_TEXT)
+ text = messageview->mimeview->textview;
+ }
+
+ return text;
+}
+
+MimeInfo *messageview_get_selected_mime_part(MessageView *messageview)
+{
+ if (messageview->type == MVIEW_MIME)
+ return mimeview_get_selected_part(messageview->mimeview);
+
+ return NULL;
+}
+
+void messageview_copy_clipboard(MessageView *messageview)
+{
+ TextView *text;
+
+ text = messageview_get_current_textview(messageview);
+ if (text) {
+ GtkTextView *textview = GTK_TEXT_VIEW(text->text);
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer(textview);
+ clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ gtk_text_buffer_copy_clipboard(buffer, clipboard);
+ }
+}
+
+void messageview_select_all(MessageView *messageview)
+{
+ TextView *text;
+
+ text = messageview_get_current_textview(messageview);
+ if (text)
+ gtk_editable_select_region(GTK_EDITABLE(text->text), 0, -1);
+}
+
+void messageview_set_position(MessageView *messageview, gint pos)
+{
+ textview_set_position(messageview->textview, pos);
+}
+
+gboolean messageview_search_string(MessageView *messageview, const gchar *str,
+ gboolean case_sens)
+{
+ return textview_search_string(messageview->textview, str, case_sens);
+ return FALSE;
+}
+
+gboolean messageview_search_string_backward(MessageView *messageview,
+ const gchar *str,
+ gboolean case_sens)
+{
+ return textview_search_string_backward(messageview->textview,
+ str, case_sens);
+ return FALSE;
+}
+
+gboolean messageview_is_visible(MessageView *messageview)
+{
+ return messageview->visible;
+}
+
+void messageview_save_as(MessageView *messageview)
+{
+ gchar *filename = NULL;
+ MsgInfo *msginfo;
+ gchar *src, *dest;
+
+ if (!messageview->msginfo) return;
+ msginfo = messageview->msginfo;
+
+ if (msginfo->subject) {
+ Xstrdup_a(filename, msginfo->subject, return);
+ subst_for_filename(filename);
+ }
+ dest = filesel_select_file(_("Save as"), filename);
+ if (!dest) return;
+ if (is_file_exist(dest)) {
+ AlertValue aval;
+
+ aval = alertpanel(_("Overwrite"),
+ _("Overwrite existing file?"),
+ _("OK"), _("Cancel"), NULL);
+ if (G_ALERTDEFAULT != aval) return;
+ }
+
+ src = procmsg_get_message_file(msginfo);
+ if (copy_file(src, dest, TRUE) < 0) {
+ alertpanel_error(_("Can't save the file `%s'."),
+ g_basename(dest));
+ }
+ g_free(src);
+}
+
+static void messageview_destroy_cb(GtkWidget *widget, MessageView *messageview)
+{
+ messageview_destroy(messageview);
+}
+
+static void messageview_size_allocate_cb(GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ g_return_if_fail(allocation != NULL);
+
+ prefs_common.msgwin_width = allocation->width;
+ prefs_common.msgwin_height = allocation->height;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ MessageView *messageview)
+{
+ if (event && event->keyval == GDK_Escape && messageview->window)
+ gtk_widget_destroy(messageview->window);
+ return FALSE;
+}
+
+static void save_as_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview_save_as(messageview);
+}
+
+static void print_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ gchar *cmdline;
+ gchar *p;
+
+ if (!messageview->msginfo) return;
+
+ cmdline = input_dialog(_("Print"),
+ _("Enter the print command line:\n"
+ "(`%s' will be replaced with file name)"),
+ prefs_common.print_cmd);
+ if (!cmdline) return;
+ if (!(p = strchr(cmdline, '%')) || *(p + 1) != 's' ||
+ strchr(p + 2, '%')) {
+ alertpanel_error(_("Print command line is invalid:\n`%s'"),
+ cmdline);
+ g_free(cmdline);
+ return;
+ }
+
+ procmsg_print_message(messageview->msginfo, cmdline);
+ g_free(cmdline);
+}
+
+static void close_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ gtk_widget_destroy(messageview->window);
+}
+
+static void copy_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview_copy_clipboard(messageview);
+}
+
+static void allsel_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview_select_all(messageview);
+}
+
+static void search_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ message_search(messageview);
+}
+
+static void set_charset_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ const gchar *charset;
+
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ charset = conv_get_charset_str((CharSet)action);
+ g_free(messageview->forced_charset);
+ messageview->forced_charset = g_strdup(charset);
+ messageview_show(messageview, messageview->msginfo, FALSE);
+ }
+}
+
+static void view_source_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ SourceWindow *srcwin;
+
+ if (!messageview->msginfo) return;
+
+ srcwin = source_window_create();
+ source_window_show_msg(srcwin, messageview->msginfo);
+ source_window_show(srcwin);
+}
+
+static void show_all_header_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ MsgInfo *msginfo = messageview->msginfo;
+
+ if (!msginfo) return;
+ messageview->msginfo = NULL;
+ messageview_show(messageview, msginfo,
+ GTK_CHECK_MENU_ITEM(widget)->active);
+ procmsg_msginfo_free(msginfo);
+}
+
+static void compose_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ PrefsAccount *ac = NULL;
+ FolderItem *item = NULL;
+
+ if (messageview->msginfo)
+ item = messageview->msginfo->folder;
+
+ if (item) {
+ ac = account_find_from_item(item);
+ if (ac && ac->protocol == A_NNTP &&
+ FOLDER_TYPE(item->folder) == F_NEWS) {
+ compose_new(ac, item, item->path, NULL);
+ return;
+ }
+ }
+
+ compose_new(ac, item, NULL, NULL);
+}
+
+static void reply_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ GSList *mlist = NULL;
+ MsgInfo *msginfo;
+ gchar *text = NULL;
+ ComposeMode mode = (ComposeMode)action;
+
+ msginfo = messageview->msginfo;
+ mlist = g_slist_append(NULL, msginfo);
+
+ text = gtkut_editable_get_selection
+ (GTK_EDITABLE(messageview->textview->text));
+ if (text && *text == '\0') {
+ g_free(text);
+ text = NULL;
+ }
+
+ if (!COMPOSE_QUOTE_MODE(mode))
+ mode |= prefs_common.reply_with_quote
+ ? COMPOSE_WITH_QUOTE : COMPOSE_WITHOUT_QUOTE;
+
+ switch (COMPOSE_MODE(mode)) {
+ case COMPOSE_REPLY:
+ case COMPOSE_REPLY_TO_SENDER:
+ case COMPOSE_REPLY_TO_ALL:
+ case COMPOSE_REPLY_TO_LIST:
+ compose_reply(msginfo, msginfo->folder, mode, text);
+ break;
+ case COMPOSE_FORWARD:
+ compose_forward(mlist, msginfo->folder, FALSE, text);
+ break;
+ case COMPOSE_FORWARD_AS_ATTACH:
+ compose_forward(mlist, msginfo->folder, TRUE, NULL);
+ break;
+ case COMPOSE_REDIRECT:
+ compose_redirect(msginfo, msginfo->folder);
+ break;
+ default:
+ g_warning("messageview.c: reply_cb(): invalid mode: %d\n",
+ mode);
+ }
+
+ /* summary_set_marks_selected(summaryview); */
+ g_free(text);
+ g_slist_free(mlist);
+}
+
+static void reedit_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ MsgInfo *msginfo;
+
+ if (!messageview->msginfo) return;
+ msginfo = messageview->msginfo;
+ if (!msginfo->folder) return;
+ if (msginfo->folder->stype != F_OUTBOX &&
+ msginfo->folder->stype != F_DRAFT &&
+ msginfo->folder->stype != F_QUEUE) return;
+
+ compose_reedit(msginfo);
+}
+
+static void addressbook_open_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ addressbook_open(NULL);
+}
+
+static void add_address_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ MsgInfo *msginfo;
+ gchar *from;
+
+ if (!messageview->msginfo) return;
+ msginfo = messageview->msginfo;
+ Xstrdup_a(from, msginfo->from, return);
+ eliminate_address_comment(from);
+ extract_address(from);
+ addressbook_add_contact(msginfo->fromname, from, NULL);
+}
+
+static void create_filter_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ gchar *header = NULL;
+ gchar *key = NULL;
+
+ if (!messageview->msginfo) return;
+
+ procmsg_get_filter_keyword(messageview->msginfo, &header, &key,
+ (PrefsFilterType)action);
+ prefs_filter_open(messageview->msginfo, header);
+
+ g_free(header);
+ g_free(key);
+}
+
+static void about_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ about_show();
+}
diff --git a/src/messageview.h b/src/messageview.h
new file mode 100644
index 00000000..99c71631
--- /dev/null
+++ b/src/messageview.h
@@ -0,0 +1,96 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MESSAGEVIEW_H__
+#define __MESSAGEVIEW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef struct _MessageView MessageView;
+
+#include "mainwindow.h"
+#include "headerview.h"
+#include "textview.h"
+#include "mimeview.h"
+#include "procmsg.h"
+#include "procmime.h"
+
+typedef enum
+{
+ MVIEW_TEXT,
+ MVIEW_MIME
+} MessageType;
+
+struct _MessageView
+{
+ GtkWidget *vbox;
+
+ MessageType type;
+ gboolean new_window;
+ GtkWidget *window;
+ GtkWidget *window_vbox;
+ GtkWidget *body_vbox;
+
+ HeaderView *headerview;
+ TextView *textview;
+ MimeView *mimeview;
+
+ GtkWidget *statusbar;
+ gint statusbar_cid;
+
+ MainWindow *mainwin;
+
+ MsgInfo *msginfo;
+
+ gchar *forced_charset;
+
+ gboolean visible;
+};
+
+MessageView *messageview_create (void);
+MessageView *messageview_create_with_new_window (void);
+void messageview_init (MessageView *messageview);
+gint messageview_show (MessageView *messageview,
+ MsgInfo *msginfo,
+ gboolean all_headers);
+void messageview_clear (MessageView *messageview);
+void messageview_destroy (MessageView *messageview);
+
+void messageview_quote_color_set (void);
+void messageview_set_font (MessageView *messageview);
+
+TextView *messageview_get_current_textview (MessageView *messageview);
+MimeInfo *messageview_get_selected_mime_part (MessageView *messageview);
+
+void messageview_copy_clipboard (MessageView *messageview);
+void messageview_select_all (MessageView *messageview);
+void messageview_set_position (MessageView *messageview,
+ gint pos);
+
+gboolean messageview_search_string (MessageView *messageview,
+ const gchar *str,
+ gboolean case_sens);
+gboolean messageview_search_string_backward (MessageView *messageview,
+ const gchar *str,
+ gboolean case_sens);
+
+gboolean messageview_is_visible (MessageView *messageview);
+
+#endif /* __MESSAGEVIEW_H__ */
diff --git a/src/mgutils.c b/src/mgutils.c
new file mode 100644
index 00000000..45ba8f4d
--- /dev/null
+++ b/src/mgutils.c
@@ -0,0 +1,220 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General functions for create common address book entries.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "mgutils.h"
+
+/*
+* Dump linked list of character strings (for debug).
+*/
+void mgu_print_list( GSList *list, FILE *stream ) {
+ GSList *node = list;
+ while( node ) {
+ fprintf( stream, "\t- >%s<\n", (gchar *)node->data );
+ node = g_slist_next( node );
+ }
+}
+
+/*
+* Dump linked list of character strings (for debug).
+*/
+void mgu_print_dlist( GList *list, FILE *stream ) {
+ GList *node = list;
+ while( node ) {
+ fprintf( stream, "\t- >%s<\n", (gchar *)node->data );
+ node = g_list_next( node );
+ }
+}
+
+/*
+* Free linked list of character strings.
+*/
+void mgu_free_list( GSList *list ) {
+ GSList *node = list;
+ while( node ) {
+ g_free( node->data );
+ node->data = NULL;
+ node = g_slist_next( node );
+ }
+ g_slist_free( list );
+}
+
+/*
+* Free linked list of character strings.
+*/
+void mgu_free_dlist( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ g_free( node->data );
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+ g_list_free( list );
+}
+
+/*
+* Coalesce linked list of characaters into one long string.
+*/
+gchar *mgu_list_coalesce( GSList *list ) {
+ gchar *str = NULL;
+ gchar *buf = NULL;
+ gchar *start = NULL;
+ GSList *node = NULL;
+ gint len;
+
+ if( ! list ) return NULL;
+
+ /* Calculate maximum length of text */
+ len = 0;
+ node = list;
+ while( node ) {
+ str = node->data;
+ len += 1 + strlen( str );
+ node = g_slist_next( node );
+ }
+
+ /* Create new buffer. */
+ buf = g_new0( gchar, len+1 );
+ start = buf;
+ node = list;
+ while( node ) {
+ str = node->data;
+ len = strlen( str );
+ strcpy( start, str );
+ start += len;
+ node = g_slist_next( node );
+ }
+ return buf;
+}
+
+struct mgu_error_entry {
+ gint e_code;
+ gchar *e_reason;
+};
+
+static const struct mgu_error_entry mgu_error_list[] = {
+ { MGU_SUCCESS, "Success" },
+ { MGU_BAD_ARGS, "Bad arguments" },
+ { MGU_NO_FILE, "File not specified" },
+ { MGU_OPEN_FILE, "Error opening file" },
+ { MGU_ERROR_READ, "Error reading file" },
+ { MGU_EOF, "End of file encountered" },
+ { MGU_OO_MEMORY, "Error allocating memory" },
+ { MGU_BAD_FORMAT, "Bad file format" },
+ { MGU_LDAP_CONNECT, "Error connecting to LDAP server" },
+ { MGU_LDAP_INIT, "Error initializing LDAP" },
+ { MGU_LDAP_BIND, "Error binding to LDAP server" },
+ { MGU_LDAP_SEARCH, "Error searching LDAP database" },
+ { MGU_LDAP_TIMEOUT, "Timeout performing LDAP operation" },
+ { MGU_LDAP_CRITERIA, "Error in LDAP search criteria" },
+ { MGU_LDAP_CRITERIA, "Error in LDAP search criteria" },
+ { MGU_LDAP_NOENTRIES, "No LDAP entries found for search criteria" },
+ { MGU_ERROR_WRITE, "Error writing to file" },
+ { MGU_OPEN_DIRECTORY, "Error opening directory" },
+ { MGU_NO_PATH, "No path specified" },
+ { -999, NULL }
+};
+
+static const struct mgu_error_entry *mgu_error_find( gint err ) {
+ gint i;
+ for ( i = 0; mgu_error_list[i].e_code != -999; i++ ) {
+ if ( err == mgu_error_list[i].e_code )
+ return & mgu_error_list[i];
+ }
+ return NULL;
+}
+
+/*
+* Return error message for specified error code.
+*/
+gchar *mgu_error2string( gint err ) {
+ const struct mgu_error_entry *e;
+ e = mgu_error_find( err );
+ return ( e != NULL ) ? e->e_reason : "Unknown error";
+}
+
+/*
+* Replace existing string with new string.
+*/
+gchar *mgu_replace_string( gchar *str, const gchar *value ) {
+ if( str ) g_free( str );
+ if( value ) {
+ str = g_strdup( value );
+ g_strstrip( str );
+ }
+ else {
+ str = NULL;
+ }
+ return str;
+}
+
+/*
+* Clear a linked list by setting node data pointers to NULL. Note that
+* items are not freed.
+*/
+void mgu_clear_slist( GSList *list ) {
+ GSList *node = list;
+ while( node ) {
+ node->data = NULL;
+ node = g_slist_next( node );
+ }
+}
+
+/*
+* Clear a linked list by setting node data pointers to NULL. Note that
+* items are not freed.
+*/
+void mgu_clear_list( GList *list ) {
+ GList *node = list;
+ while( node ) {
+ node->data = NULL;
+ node = g_list_next( node );
+ }
+}
+
+/*
+* Test and reformat an email address.
+* Enter: address.
+* Return: Address, or NULL if address is empty.
+* Note: Leading and trailing white space is removed.
+*/
+gchar *mgu_email_check_empty( gchar *address ) {
+ gchar *retVal = NULL;
+ if( address ) {
+ retVal = g_strdup( address );
+ retVal = g_strchug( retVal );
+ retVal = g_strchomp( retVal );
+ if( *retVal == '\0' ) {
+ g_free( retVal );
+ retVal = NULL;
+ }
+ }
+ return retVal;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/mgutils.h b/src/mgutils.h
new file mode 100644
index 00000000..626bf75c
--- /dev/null
+++ b/src/mgutils.h
@@ -0,0 +1,62 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * General definitions for common address book entries.
+ */
+
+#ifndef __MGUTILS_H__
+#define __MGUTILS_H__
+
+#include <stdio.h>
+#include <glib.h>
+
+/* Error codes */
+#define MGU_SUCCESS 0
+#define MGU_BAD_ARGS -1
+#define MGU_NO_FILE -2
+#define MGU_OPEN_FILE -3
+#define MGU_ERROR_READ -4
+#define MGU_EOF -5
+#define MGU_OO_MEMORY -6
+#define MGU_BAD_FORMAT -7
+#define MGU_LDAP_CONNECT -8
+#define MGU_LDAP_INIT -9
+#define MGU_LDAP_BIND -10
+#define MGU_LDAP_SEARCH -11
+#define MGU_LDAP_TIMEOUT -12
+#define MGU_LDAP_CRITERIA -13
+#define MGU_LDAP_NOENTRIES -14
+#define MGU_ERROR_WRITE -15
+#define MGU_OPEN_DIRECTORY -16
+#define MGU_NO_PATH -17
+
+/* Function prototypes */
+void mgu_print_list ( GSList *list, FILE *stream );
+void mgu_print_dlist ( GList *list, FILE *stream );
+void mgu_free_list ( GSList *list );
+void mgu_free_dlist ( GList *list );
+gchar *mgu_list_coalesce ( GSList *list );
+gchar *mgu_error2string ( gint err );
+gchar *mgu_replace_string ( gchar *str, const gchar *value );
+void mgu_clear_slist ( GSList *list );
+void mgu_clear_list ( GList *list );
+gchar *mgu_email_check_empty ( gchar *address );
+
+#endif /* __MGUTILS_H__ */
diff --git a/src/mh.c b/src/mh.c
new file mode 100644
index 00000000..7c7e5bd3
--- /dev/null
+++ b/src/mh.c
@@ -0,0 +1,1282 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#undef MEASURE_TIME
+
+#ifdef MEASURE_TIME
+# include <sys/time.h>
+#endif
+
+#include "intl.h"
+#include "folder.h"
+#include "mh.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "utils.h"
+
+static void mh_folder_init (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+
+static Folder *mh_folder_new (const gchar *name,
+ const gchar *path);
+static void mh_folder_destroy (Folder *folder);
+
+static GSList *mh_get_msg_list (Folder *folder,
+ FolderItem *item,
+ gboolean use_cache);
+static gchar *mh_fetch_msg (Folder *folder,
+ FolderItem *item,
+ gint num);
+static MsgInfo *mh_get_msginfo (Folder *folder,
+ FolderItem *item,
+ gint num);
+static gint mh_add_msg (Folder *folder,
+ FolderItem *dest,
+ const gchar *file,
+ MsgFlags *flags,
+ gboolean remove_source);
+static gint mh_add_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *file_list,
+ gboolean remove_source,
+ gint *first);
+static gint mh_move_msg (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+static gint mh_move_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+static gint mh_copy_msg (Folder *folder,
+ FolderItem *dest,
+ MsgInfo *msginfo);
+static gint mh_copy_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+static gint mh_remove_msg (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+static gint mh_remove_all_msg (Folder *folder,
+ FolderItem *item);
+static gboolean mh_is_msg_changed (Folder *folder,
+ FolderItem *item,
+ MsgInfo *msginfo);
+static gint mh_close (Folder *folder,
+ FolderItem *item);
+
+static gint mh_scan_folder_full (Folder *folder,
+ FolderItem *item,
+ gboolean count_sum);
+static gint mh_scan_folder (Folder *folder,
+ FolderItem *item);
+static gint mh_scan_tree (Folder *folder);
+
+static gint mh_create_tree (Folder *folder);
+static FolderItem *mh_create_folder (Folder *folder,
+ FolderItem *parent,
+ const gchar *name);
+static gint mh_rename_folder (Folder *folder,
+ FolderItem *item,
+ const gchar *name);
+static gint mh_remove_folder (Folder *folder,
+ FolderItem *item);
+
+static gchar *mh_get_new_msg_filename (FolderItem *dest);
+
+static gint mh_do_move_msgs (Folder *folder,
+ FolderItem *dest,
+ GSList *msglist);
+
+static time_t mh_get_mtime (FolderItem *item);
+static GSList *mh_get_uncached_msgs (GHashTable *msg_table,
+ FolderItem *item);
+static MsgInfo *mh_parse_msg (const gchar *file,
+ FolderItem *item);
+static void mh_remove_missing_folder_items (Folder *folder);
+static void mh_scan_tree_recursive (FolderItem *item);
+
+static gboolean mh_rename_folder_func (GNode *node,
+ gpointer data);
+
+static FolderClass mh_class =
+{
+ F_MH,
+
+ mh_folder_new,
+ mh_folder_destroy,
+
+ mh_scan_tree,
+ mh_create_tree,
+
+ mh_get_msg_list,
+ mh_fetch_msg,
+ mh_get_msginfo,
+ mh_add_msg,
+ mh_add_msgs,
+ mh_move_msg,
+ mh_move_msgs,
+ mh_copy_msg,
+ mh_copy_msgs,
+ mh_remove_msg,
+ NULL,
+ mh_remove_all_msg,
+ mh_is_msg_changed,
+ mh_close,
+ mh_scan_folder,
+
+ mh_create_folder,
+ mh_rename_folder,
+ mh_remove_folder,
+};
+
+
+FolderClass *mh_get_class(void)
+{
+ return &mh_class;
+}
+
+static Folder *mh_folder_new(const gchar *name, const gchar *path)
+{
+ Folder *folder;
+
+ folder = (Folder *)g_new0(MHFolder, 1);
+ mh_folder_init(folder, name, path);
+
+ return folder;
+}
+
+static void mh_folder_destroy(Folder *folder)
+{
+ folder_local_folder_destroy(LOCAL_FOLDER(folder));
+}
+
+static void mh_folder_init(Folder *folder, const gchar *name, const gchar *path)
+{
+ folder->klass = mh_get_class();
+ folder_local_folder_init(folder, name, path);
+}
+
+static GSList *mh_get_msg_list(Folder *folder, FolderItem *item,
+ gboolean use_cache)
+{
+ GSList *mlist;
+ GHashTable *msg_table;
+ time_t cur_mtime;
+#ifdef MEASURE_TIME
+ struct timeval tv_before, tv_after, tv_result;
+
+ gettimeofday(&tv_before, NULL);
+#endif
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ cur_mtime = mh_get_mtime(item);
+
+ if (use_cache && item->mtime == cur_mtime) {
+ debug_print("Folder is not modified.\n");
+ mlist = procmsg_read_cache(item, FALSE);
+ if (!mlist)
+ mlist = mh_get_uncached_msgs(NULL, item);
+ } else if (use_cache) {
+ GSList *newlist;
+
+ mlist = procmsg_read_cache(item, TRUE);
+ msg_table = procmsg_msg_hash_table_create(mlist);
+
+ newlist = mh_get_uncached_msgs(msg_table, item);
+ if (msg_table)
+ g_hash_table_destroy(msg_table);
+
+ mlist = g_slist_concat(mlist, newlist);
+ } else
+ mlist = mh_get_uncached_msgs(NULL, item);
+
+ item->mtime = cur_mtime;
+
+ procmsg_set_flags(mlist, item);
+
+ mlist = procmsg_sort_msg_list(mlist, item->sort_key, item->sort_type);
+
+#ifdef MEASURE_TIME
+ gettimeofday(&tv_after, NULL);
+
+ timersub(&tv_after, &tv_before, &tv_result);
+ g_print("mh_get_msg_list: %s: elapsed time: %ld.%06ld sec\n",
+ item->path, tv_result.tv_sec, tv_result.tv_usec);
+#endif
+
+ return mlist;
+}
+
+static gchar *mh_fetch_msg(Folder *folder, FolderItem *item, gint num)
+{
+ gchar *path;
+ gchar *file;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(num > 0, NULL);
+
+ if (item->last_num < 0 || num > item->last_num) {
+ mh_scan_folder(folder, item);
+ if (item->last_num < 0) return NULL;
+ }
+
+ g_return_val_if_fail(num <= item->last_num, NULL);
+
+ path = folder_item_get_path(item);
+ file = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL);
+ g_free(path);
+ if (!is_file_exist(file)) {
+ g_free(file);
+ return NULL;
+ }
+
+ return file;
+}
+
+static MsgInfo *mh_get_msginfo(Folder *folder, FolderItem *item, gint num)
+{
+ MsgInfo *msginfo;
+ gchar *file;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(num > 0, NULL);
+
+ file = mh_fetch_msg(folder, item, num);
+ if (!file) return NULL;
+
+ msginfo = mh_parse_msg(file, item);
+ if (msginfo)
+ msginfo->msgnum = num;
+
+ g_free(file);
+
+ return msginfo;
+}
+
+static gchar *mh_get_new_msg_filename(FolderItem *dest)
+{
+ gchar *destfile;
+ gchar *destpath;
+
+ destpath = folder_item_get_path(dest);
+ g_return_val_if_fail(destpath != NULL, NULL);
+
+ if (!is_dir_exist(destpath))
+ make_dir_hier(destpath);
+
+ for (;;) {
+ destfile = g_strdup_printf("%s%c%d", destpath, G_DIR_SEPARATOR,
+ dest->last_num + 1);
+ if (is_file_entry_exist(destfile)) {
+ dest->last_num++;
+ g_free(destfile);
+ } else
+ break;
+ }
+
+ g_free(destpath);
+
+ return destfile;
+}
+
+#define SET_DEST_MSG_FLAGS(fp, dest, n, fl) \
+{ \
+ MsgInfo newmsginfo; \
+ \
+ newmsginfo.msgnum = n; \
+ newmsginfo.flags = fl; \
+ if (dest->stype == F_OUTBOX || \
+ dest->stype == F_QUEUE || \
+ dest->stype == F_DRAFT || \
+ dest->stype == F_TRASH) \
+ MSG_UNSET_PERM_FLAGS(newmsginfo.flags, \
+ MSG_NEW|MSG_UNREAD|MSG_DELETED); \
+ \
+ if (fp) \
+ procmsg_write_flags(&newmsginfo, fp); \
+ else if (dest->opened) \
+ procmsg_add_flags(dest, n, newmsginfo.flags); \
+}
+
+static gint mh_add_msg(Folder *folder, FolderItem *dest, const gchar *file,
+ MsgFlags *flags, gboolean remove_source)
+{
+ GSList file_list;
+ MsgFileInfo fileinfo;
+
+ g_return_val_if_fail(file != NULL, -1);
+
+ fileinfo.file = (gchar *)file;
+ fileinfo.flags = flags;
+ file_list.data = &fileinfo;
+ file_list.next = NULL;
+
+ return mh_add_msgs(folder, dest, &file_list, remove_source, NULL);
+}
+
+static gint mh_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list,
+ gboolean remove_source, gint *first)
+{
+ gchar *destfile;
+ GSList *cur;
+ MsgFileInfo *fileinfo;
+ gint first_ = 0;
+ FILE *fp;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(file_list != NULL, -1);
+
+ if (dest->last_num < 0) {
+ mh_scan_folder(folder, dest);
+ if (dest->last_num < 0) return -1;
+ }
+
+ if ((((MsgFileInfo *)file_list->data)->flags == NULL &&
+ file_list->next == NULL) || dest->opened)
+ fp = NULL;
+ else if ((fp = procmsg_open_mark_file(dest, DATA_APPEND)) == NULL)
+ g_warning("Can't open mark file.\n");
+
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ fileinfo = (MsgFileInfo *)cur->data;
+
+ destfile = mh_get_new_msg_filename(dest);
+ if (destfile == NULL) return -1;
+ if (first_ == 0 || first_ > dest->last_num + 1)
+ first_ = dest->last_num + 1;
+
+ if (link(fileinfo->file, destfile) < 0) {
+ if (copy_file(fileinfo->file, destfile, TRUE) < 0) {
+ g_warning(_("can't copy message %s to %s\n"),
+ fileinfo->file, destfile);
+ g_free(destfile);
+ return -1;
+ }
+ }
+
+ g_free(destfile);
+ dest->last_num++;
+ dest->total++;
+ dest->updated = TRUE;
+
+ if (fileinfo->flags) {
+ if (MSG_IS_RECEIVED(*fileinfo->flags)) {
+ if (dest->unmarked_num == 0)
+ dest->new = 0;
+ dest->unmarked_num++;
+ procmsg_add_mark_queue(dest, dest->last_num,
+ *fileinfo->flags);
+ } else {
+ SET_DEST_MSG_FLAGS(fp, dest, dest->last_num,
+ *fileinfo->flags);
+ }
+ if (MSG_IS_NEW(*fileinfo->flags))
+ dest->new++;
+ if (MSG_IS_UNREAD(*fileinfo->flags))
+ dest->unread++;
+ } else {
+ if (dest->unmarked_num == 0)
+ dest->new = 0;
+ dest->unmarked_num++;
+ dest->new++;
+ dest->unread++;
+ }
+ }
+
+ if (fp) fclose(fp);
+
+ if (first)
+ *first = first_;
+
+ if (remove_source) {
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ fileinfo = (MsgFileInfo *)cur->data;
+ if (unlink(fileinfo->file) < 0)
+ FILE_OP_ERROR(fileinfo->file, "unlink");
+ }
+ }
+
+ return dest->last_num;
+}
+
+static gint mh_do_move_msgs(Folder *folder, FolderItem *dest, GSList *msglist)
+{
+ FolderItem *src;
+ gchar *srcfile;
+ gchar *destfile;
+ FILE *fp;
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ if (dest->last_num < 0) {
+ mh_scan_folder(folder, dest);
+ if (dest->last_num < 0) return -1;
+ }
+
+ if (dest->opened)
+ fp = NULL;
+ else if ((fp = procmsg_open_mark_file(dest, DATA_APPEND)) == NULL)
+ g_warning(_("Can't open mark file.\n"));
+
+ for (cur = msglist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ src = msginfo->folder;
+
+ if (src == dest) {
+ g_warning(_("the src folder is identical to the dest.\n"));
+ continue;
+ }
+ debug_print("Moving message %s%c%d to %s ...\n",
+ src->path, G_DIR_SEPARATOR, msginfo->msgnum,
+ dest->path);
+
+ destfile = mh_get_new_msg_filename(dest);
+ if (!destfile) break;
+ srcfile = procmsg_get_message_file(msginfo);
+
+ if (move_file(srcfile, destfile, FALSE) < 0) {
+ g_free(srcfile);
+ g_free(destfile);
+ break;
+ }
+
+ g_free(srcfile);
+ g_free(destfile);
+ src->total--;
+ src->updated = TRUE;
+ dest->last_num++;
+ dest->total++;
+ dest->updated = TRUE;
+
+ if (fp) {
+ SET_DEST_MSG_FLAGS(fp, dest, dest->last_num,
+ msginfo->flags);
+ }
+
+ if (MSG_IS_NEW(msginfo->flags)) {
+ src->new--;
+ dest->new++;
+ }
+ if (MSG_IS_UNREAD(msginfo->flags)) {
+ src->unread--;
+ dest->unread++;
+ }
+
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_INVALID);
+ }
+
+ if (fp) fclose(fp);
+
+ return dest->last_num;
+}
+
+static gint mh_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
+{
+ GSList msglist;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return mh_move_msgs(folder, dest, &msglist);
+}
+
+static gint mh_move_msgs(Folder *folder, FolderItem *dest, GSList *msglist)
+{
+ MsgInfo *msginfo;
+ GSList *file_list;
+ gint ret = 0;
+ gint first;
+
+ msginfo = (MsgInfo *)msglist->data;
+ if (folder == msginfo->folder->folder)
+ return mh_do_move_msgs(folder, dest, msglist);
+
+ file_list = procmsg_get_message_file_list(msglist);
+ g_return_val_if_fail(file_list != NULL, -1);
+
+ ret = mh_add_msgs(folder, dest, file_list, FALSE, &first);
+
+ procmsg_message_file_list_free(file_list);
+
+ if (ret != -1)
+ ret = folder_item_remove_msgs(msginfo->folder, msglist);
+
+ return ret;
+}
+
+static gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
+{
+ GSList msglist;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+
+ msglist.data = msginfo;
+ msglist.next = NULL;
+
+ return mh_copy_msgs(folder, dest, &msglist);
+}
+
+static gint mh_copy_msgs(Folder *folder, FolderItem *dest, GSList *msglist)
+{
+ gchar *srcfile;
+ gchar *destfile;
+ FILE *fp;
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(msglist != NULL, -1);
+
+ if (dest->last_num < 0) {
+ mh_scan_folder(folder, dest);
+ if (dest->last_num < 0) return -1;
+ }
+
+ if (dest->opened)
+ fp = NULL;
+ else if ((fp = procmsg_open_mark_file(dest, DATA_APPEND)) == NULL)
+ g_warning(_("Can't open mark file.\n"));
+
+ for (cur = msglist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+
+ if (msginfo->folder == dest) {
+ g_warning(_("the src folder is identical to the dest.\n"));
+ continue;
+ }
+ debug_print(_("Copying message %s%c%d to %s ...\n"),
+ msginfo->folder->path, G_DIR_SEPARATOR,
+ msginfo->msgnum, dest->path);
+
+ destfile = mh_get_new_msg_filename(dest);
+ if (!destfile) break;
+ srcfile = procmsg_get_message_file(msginfo);
+
+ if (copy_file(srcfile, destfile, TRUE) < 0) {
+ FILE_OP_ERROR(srcfile, "copy");
+ g_free(srcfile);
+ g_free(destfile);
+ break;
+ }
+
+ g_free(srcfile);
+ g_free(destfile);
+ dest->last_num++;
+ dest->total++;
+ dest->updated = TRUE;
+
+ if (fp) {
+ SET_DEST_MSG_FLAGS(fp, dest, dest->last_num,
+ msginfo->flags);
+ }
+
+ if (MSG_IS_NEW(msginfo->flags))
+ dest->new++;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ dest->unread++;
+ }
+
+ if (fp) fclose(fp);
+
+ return dest->last_num;
+}
+
+static gint mh_remove_msg(Folder *folder, FolderItem *item, MsgInfo *msginfo)
+{
+ gchar *file;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ file = mh_fetch_msg(folder, item, msginfo->msgnum);
+ g_return_val_if_fail(file != NULL, -1);
+
+ if (unlink(file) < 0) {
+ FILE_OP_ERROR(file, "unlink");
+ g_free(file);
+ return -1;
+ }
+ g_free(file);
+
+ item->total--;
+ item->updated = TRUE;
+ if (MSG_IS_NEW(msginfo->flags))
+ item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ item->unread--;
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_INVALID);
+
+ if (msginfo->msgnum == item->last_num)
+ item->last_num = mh_scan_folder_full(folder, item, FALSE);
+
+ return 0;
+}
+
+static gint mh_remove_all_msg(Folder *folder, FolderItem *item)
+{
+ gchar *path;
+ gint val;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ path = folder_item_get_path(item);
+ g_return_val_if_fail(path != NULL, -1);
+ val = remove_all_numbered_files(path);
+ g_free(path);
+ if (val == 0) {
+ item->new = item->unread = item->total = 0;
+ item->last_num = 0;
+ item->updated = TRUE;
+ }
+
+ return val;
+}
+
+static gboolean mh_is_msg_changed(Folder *folder, FolderItem *item,
+ MsgInfo *msginfo)
+{
+ struct stat s;
+
+ if (stat(itos(msginfo->msgnum), &s) < 0 ||
+ msginfo->size != s.st_size ||
+ msginfo->mtime != s.st_mtime)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gint mh_close(Folder *folder, FolderItem *item)
+{
+ return 0;
+}
+
+static gint mh_scan_folder_full(Folder *folder, FolderItem *item,
+ gboolean count_sum)
+{
+ gchar *path;
+ DIR *dp;
+ struct dirent *d;
+ gint max = 0;
+ gint num;
+ gint n_msg = 0;
+
+ g_return_val_if_fail(item != NULL, -1);
+
+ debug_print("mh_scan_folder(): Scanning %s ...\n", item->path);
+
+ path = folder_item_get_path(item);
+ g_return_val_if_fail(path != NULL, -1);
+ if (change_dir(path) < 0) {
+ g_free(path);
+ return -1;
+ }
+ g_free(path);
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(item->path, "opendir");
+ return -1;
+ }
+
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data);
+
+ while ((d = readdir(dp)) != NULL) {
+ if ((num = to_number(d->d_name)) >= 0 &&
+ dirent_is_regular_file(d)) {
+ n_msg++;
+ if (max < num)
+ max = num;
+ }
+ }
+
+ closedir(dp);
+
+ if (n_msg == 0)
+ item->new = item->unread = item->total = 0;
+ else if (count_sum) {
+ gint new, unread, total, min, max_;
+
+ procmsg_get_mark_sum
+ (item, &new, &unread, &total, &min, &max_, 0);
+
+ if (n_msg > total) {
+ item->unmarked_num = new = n_msg - total;
+ unread += n_msg - total;
+ } else
+ item->unmarked_num = 0;
+
+ item->new = new;
+ item->unread = unread;
+ item->total = n_msg;
+ }
+
+ item->updated = TRUE;
+
+ debug_print(_("Last number in dir %s = %d\n"), item->path, max);
+ item->last_num = max;
+
+ return 0;
+}
+
+static gint mh_scan_folder(Folder *folder, FolderItem *item)
+{
+ return mh_scan_folder_full(folder, item, TRUE);
+}
+
+static gint mh_scan_tree(Folder *folder)
+{
+ FolderItem *item;
+ gchar *rootpath;
+
+ g_return_val_if_fail(folder != NULL, -1);
+
+ if (!folder->node) {
+ item = folder_item_new(folder->name, NULL);
+ item->folder = folder;
+ folder->node = item->node = g_node_new(item);
+ } else
+ item = FOLDER_ITEM(folder->node->data);
+
+ rootpath = folder_item_get_path(item);
+ if (change_dir(rootpath) < 0) {
+ g_free(rootpath);
+ return -1;
+ }
+ g_free(rootpath);
+
+ mh_create_tree(folder);
+ mh_remove_missing_folder_items(folder);
+ mh_scan_tree_recursive(item);
+
+ return 0;
+}
+
+#define MAKE_DIR_IF_NOT_EXIST(dir) \
+{ \
+ if (!is_dir_exist(dir)) { \
+ if (is_file_exist(dir)) { \
+ g_warning(_("File `%s' already exists.\n" \
+ "Can't create folder."), dir); \
+ return -1; \
+ } \
+ if (make_dir(dir) < 0) \
+ return -1; \
+ } \
+}
+
+static gint mh_create_tree(Folder *folder)
+{
+ gchar *rootpath;
+
+ g_return_val_if_fail(folder != NULL, -1);
+
+ CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), -1);
+ rootpath = LOCAL_FOLDER(folder)->rootpath;
+ MAKE_DIR_IF_NOT_EXIST(rootpath);
+ CHDIR_RETURN_VAL_IF_FAIL(rootpath, -1);
+ MAKE_DIR_IF_NOT_EXIST(INBOX_DIR);
+ MAKE_DIR_IF_NOT_EXIST(OUTBOX_DIR);
+ MAKE_DIR_IF_NOT_EXIST(QUEUE_DIR);
+ MAKE_DIR_IF_NOT_EXIST(DRAFT_DIR);
+ MAKE_DIR_IF_NOT_EXIST(TRASH_DIR);
+
+ return 0;
+}
+
+#undef MAKE_DIR_IF_NOT_EXIST
+
+static FolderItem *mh_create_folder(Folder *folder, FolderItem *parent,
+ const gchar *name)
+{
+ gchar *path;
+ gchar *fs_name;
+ gchar *fullpath;
+ FolderItem *new_item;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(parent != NULL, NULL);
+ g_return_val_if_fail(name != NULL, NULL);
+
+ path = folder_item_get_path(parent);
+ fs_name = g_filename_from_utf8(name, -1, NULL, NULL, NULL);
+ fullpath = g_strconcat(path, G_DIR_SEPARATOR_S,
+ fs_name ? fs_name : name, NULL);
+ g_free(fs_name);
+ g_free(path);
+
+ if (make_dir(fullpath) < 0) {
+ g_free(fullpath);
+ return NULL;
+ }
+
+ g_free(fullpath);
+
+ if (parent->path)
+ path = g_strconcat(parent->path, G_DIR_SEPARATOR_S, name,
+ NULL);
+ else
+ path = g_strdup(name);
+ new_item = folder_item_new(name, path);
+ folder_item_append(parent, new_item);
+ g_free(path);
+
+ return new_item;
+}
+
+static gint mh_rename_folder(Folder *folder, FolderItem *item,
+ const gchar *name)
+{
+ gchar *fs_name;
+ gchar *oldpath;
+ gchar *dirname;
+ gchar *newpath;
+ gchar *paths[2];
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->path != NULL, -1);
+ g_return_val_if_fail(name != NULL, -1);
+
+ oldpath = folder_item_get_path(item);
+ dirname = g_dirname(oldpath);
+ fs_name = g_filename_from_utf8(name, -1, NULL, NULL, NULL);
+ newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S,
+ fs_name ? fs_name : name, NULL);
+ g_free(fs_name);
+ g_free(dirname);
+
+ if (rename(oldpath, newpath) < 0) {
+ FILE_OP_ERROR(oldpath, "rename");
+ g_free(oldpath);
+ g_free(newpath);
+ return -1;
+ }
+
+ g_free(oldpath);
+ g_free(newpath);
+
+ if (strchr(item->path, G_DIR_SEPARATOR) != NULL) {
+ dirname = g_dirname(item->path);
+ newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, name, NULL);
+ g_free(dirname);
+ } else
+ newpath = g_strdup(name);
+
+ g_free(item->name);
+ item->name = g_strdup(name);
+
+ paths[0] = g_strdup(item->path);
+ paths[1] = newpath;
+ g_node_traverse(item->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ mh_rename_folder_func, paths);
+
+ g_free(paths[0]);
+ g_free(paths[1]);
+ return 0;
+}
+
+static gint mh_remove_folder(Folder *folder, FolderItem *item)
+{
+ gchar *path;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->path != NULL, -1);
+
+ path = folder_item_get_path(item);
+ if (remove_dir_recursive(path) < 0) {
+ g_warning("can't remove directory `%s'\n", path);
+ g_free(path);
+ return -1;
+ }
+
+ g_free(path);
+ folder_item_remove(item);
+ return 0;
+}
+
+
+static time_t mh_get_mtime(FolderItem *item)
+{
+ gchar *path;
+ struct stat s;
+
+ path = folder_item_get_path(item);
+ if (stat(path, &s) < 0) {
+ FILE_OP_ERROR(path, "stat");
+ return -1;
+ } else {
+ return MAX(s.st_mtime, s.st_ctime);
+ }
+}
+
+static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item)
+{
+ gchar *path;
+ DIR *dp;
+ struct dirent *d;
+ GSList *newlist = NULL;
+ GSList *last = NULL;
+ MsgInfo *msginfo;
+ gint n_newmsg = 0;
+ gint num;
+
+ g_return_val_if_fail(item != NULL, NULL);
+
+ path = folder_item_get_path(item);
+ g_return_val_if_fail(path != NULL, NULL);
+ if (change_dir(path) < 0) {
+ g_free(path);
+ return NULL;
+ }
+ g_free(path);
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(item->path, "opendir");
+ return NULL;
+ }
+
+ debug_print("Searching uncached messages...\n");
+
+ if (msg_table) {
+ while ((d = readdir(dp)) != NULL) {
+ if ((num = to_number(d->d_name)) < 0) continue;
+
+ msginfo = g_hash_table_lookup
+ (msg_table, GUINT_TO_POINTER(num));
+
+ if (!msginfo) {
+ /* not found in the cache (uncached message) */
+ msginfo = mh_parse_msg(d->d_name, item);
+ if (!msginfo) continue;
+
+ if (!newlist)
+ last = newlist =
+ g_slist_append(NULL, msginfo);
+ else {
+ last = g_slist_append(last, msginfo);
+ last = last->next;
+ }
+ n_newmsg++;
+ }
+ }
+ } else {
+ /* discard all previous cache */
+ while ((d = readdir(dp)) != NULL) {
+ if (to_number(d->d_name) < 0) continue;
+
+ msginfo = mh_parse_msg(d->d_name, item);
+ if (!msginfo) continue;
+
+ if (!newlist)
+ last = newlist = g_slist_append(NULL, msginfo);
+ else {
+ last = g_slist_append(last, msginfo);
+ last = last->next;
+ }
+ n_newmsg++;
+ }
+ }
+
+ closedir(dp);
+
+ if (n_newmsg)
+ debug_print("%d uncached message(s) found.\n", n_newmsg);
+ else
+ debug_print("done.\n");
+
+ /* sort new messages in numerical order */
+ if (newlist && item->sort_key == SORT_BY_NONE) {
+ debug_print("Sorting uncached messages in numerical order...\n");
+ newlist = g_slist_sort
+ (newlist, (GCompareFunc)procmsg_cmp_msgnum_for_sort);
+ debug_print("done.\n");
+ }
+
+ return newlist;
+}
+
+static MsgInfo *mh_parse_msg(const gchar *file, FolderItem *item)
+{
+ MsgInfo *msginfo;
+ MsgFlags flags;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(file != NULL, NULL);
+
+ flags.perm_flags = MSG_NEW|MSG_UNREAD;
+ flags.tmp_flags = 0;
+
+ if (item->stype == F_QUEUE) {
+ MSG_SET_TMP_FLAGS(flags, MSG_QUEUED);
+ } else if (item->stype == F_DRAFT) {
+ MSG_SET_TMP_FLAGS(flags, MSG_DRAFT);
+ }
+
+ msginfo = procheader_parse_file(file, flags, FALSE);
+ if (!msginfo) return NULL;
+
+ msginfo->msgnum = atoi(file);
+ msginfo->folder = item;
+
+ return msginfo;
+}
+
+#if 0
+static gboolean mh_is_maildir_one(const gchar *path, const gchar *dir)
+{
+ gchar *entry;
+ gboolean result;
+
+ entry = g_strconcat(path, G_DIR_SEPARATOR_S, dir, NULL);
+ result = is_dir_exist(entry);
+ g_free(entry);
+
+ return result;
+}
+
+/*
+ * check whether PATH is a Maildir style mailbox.
+ * This is the case if the 3 subdir: new, cur, tmp are existing.
+ * This functon assumes that entry is an directory
+ */
+static gboolean mh_is_maildir(const gchar *path)
+{
+ return mh_is_maildir_one(path, "new") &&
+ mh_is_maildir_one(path, "cur") &&
+ mh_is_maildir_one(path, "tmp");
+}
+#endif
+
+static gboolean mh_remove_missing_folder_items_func(GNode *node, gpointer data)
+{
+ FolderItem *item;
+ gchar *path;
+
+ g_return_val_if_fail(node->data != NULL, FALSE);
+
+ if (G_NODE_IS_ROOT(node))
+ return FALSE;
+
+ item = FOLDER_ITEM(node->data);
+
+ path = folder_item_get_path(item);
+ if (!is_dir_exist(path)) {
+ debug_print("folder '%s' not found. removing...\n", path);
+ folder_item_remove(item);
+ }
+ g_free(path);
+
+ return FALSE;
+}
+
+static void mh_remove_missing_folder_items(Folder *folder)
+{
+ g_return_if_fail(folder != NULL);
+
+ debug_print("searching missing folders...\n");
+
+ g_node_traverse(folder->node, G_POST_ORDER, G_TRAVERSE_ALL, -1,
+ mh_remove_missing_folder_items_func, folder);
+}
+
+static void mh_scan_tree_recursive(FolderItem *item)
+{
+ Folder *folder;
+ DIR *dp;
+ struct dirent *d;
+ struct stat s;
+ gchar *fs_path;
+ gchar *entry;
+ gchar *utf8entry;
+ gchar *utf8name;
+ gint n_msg = 0;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ folder = item->folder;
+
+ fs_path = item->path ?
+ g_filename_from_utf8(item->path, -1, NULL, NULL, NULL)
+ : g_strdup(".");
+ if (!fs_path)
+ fs_path = g_strdup(item->path);
+ dp = opendir(fs_path);
+ if (!dp) {
+ FILE_OP_ERROR(fs_path, "opendir");
+ g_free(fs_path);
+ return;
+ }
+ g_free(fs_path);
+
+ debug_print("scanning %s ...\n",
+ item->path ? item->path
+ : LOCAL_FOLDER(item->folder)->rootpath);
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data);
+
+ while ((d = readdir(dp)) != NULL) {
+ if (d->d_name[0] == '.') continue;
+
+ utf8name = g_filename_to_utf8(d->d_name, -1, NULL, NULL, NULL);
+ if (!utf8name)
+ utf8name = g_strdup(d->d_name);
+
+ if (item->path)
+ utf8entry = g_strconcat(item->path, G_DIR_SEPARATOR_S,
+ utf8name, NULL);
+ else
+ utf8entry = g_strdup(utf8name);
+ entry = g_filename_from_utf8(utf8entry, -1, NULL, NULL, NULL);
+ if (!entry)
+ entry = g_strdup(utf8entry);
+
+ if (
+#ifdef HAVE_DIRENT_D_TYPE
+ d->d_type == DT_DIR ||
+ (d->d_type == DT_UNKNOWN &&
+#endif
+ stat(entry, &s) == 0 && S_ISDIR(s.st_mode)
+#ifdef HAVE_DIRENT_D_TYPE
+ )
+#endif
+ ) {
+ FolderItem *new_item = NULL;
+ GNode *node;
+
+#if 0
+ if (mh_is_maildir(entry)) {
+ g_free(entry);
+ g_free(utf8entry);
+ g_free(utf8name);
+ continue;
+ }
+#endif
+
+ node = item->node;
+ for (node = node->children; node != NULL; node = node->next) {
+ FolderItem *cur_item = FOLDER_ITEM(node->data);
+ if (!strcmp2(cur_item->path, utf8entry)) {
+ new_item = cur_item;
+ break;
+ }
+ }
+ if (!new_item) {
+ debug_print("new folder '%s' found.\n", entry);
+ new_item = folder_item_new(utf8name, utf8entry);
+ folder_item_append(item, new_item);
+ }
+
+ if (!item->path) {
+ if (!folder->inbox &&
+ !strcmp(d->d_name, INBOX_DIR)) {
+ new_item->stype = F_INBOX;
+ folder->inbox = new_item;
+ } else if (!folder->outbox &&
+ !strcmp(d->d_name, OUTBOX_DIR)) {
+ new_item->stype = F_OUTBOX;
+ folder->outbox = new_item;
+ } else if (!folder->draft &&
+ !strcmp(d->d_name, DRAFT_DIR)) {
+ new_item->stype = F_DRAFT;
+ folder->draft = new_item;
+ } else if (!folder->queue &&
+ !strcmp(d->d_name, QUEUE_DIR)) {
+ new_item->stype = F_QUEUE;
+ folder->queue = new_item;
+ } else if (!folder->trash &&
+ !strcmp(d->d_name, TRASH_DIR)) {
+ new_item->stype = F_TRASH;
+ folder->trash = new_item;
+ }
+ }
+
+ mh_scan_tree_recursive(new_item);
+ } else if (to_number(d->d_name) != -1) n_msg++;
+
+ g_free(entry);
+ g_free(utf8entry);
+ g_free(utf8name);
+ }
+
+ closedir(dp);
+
+ if (item->path) {
+ gint new, unread, total, min, max;
+
+ procmsg_get_mark_sum
+ (item, &new, &unread, &total, &min, &max, 0);
+ if (n_msg > total) {
+ new += n_msg - total;
+ unread += n_msg - total;
+ }
+ item->new = new;
+ item->unread = unread;
+ item->total = n_msg;
+ item->updated = TRUE;
+ }
+}
+
+static gboolean mh_rename_folder_func(GNode *node, gpointer data)
+{
+ FolderItem *item = node->data;
+ gchar **paths = data;
+ const gchar *oldpath = paths[0];
+ const gchar *newpath = paths[1];
+ gchar *base;
+ gchar *new_itempath;
+ gint oldpathlen;
+
+ oldpathlen = strlen(oldpath);
+ if (strncmp(oldpath, item->path, oldpathlen) != 0) {
+ g_warning("path doesn't match: %s, %s\n", oldpath, item->path);
+ return TRUE;
+ }
+
+ base = item->path + oldpathlen;
+ while (*base == G_DIR_SEPARATOR) base++;
+ if (*base == '\0')
+ new_itempath = g_strdup(newpath);
+ else
+ new_itempath = g_strconcat(newpath, G_DIR_SEPARATOR_S, base,
+ NULL);
+ g_free(item->path);
+ item->path = new_itempath;
+
+ return FALSE;
+}
diff --git a/src/mh.h b/src/mh.h
new file mode 100644
index 00000000..160259c1
--- /dev/null
+++ b/src/mh.h
@@ -0,0 +1,38 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MH_H__
+#define __MH_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+typedef struct _MHFolder MHFolder;
+
+#define MH_FOLDER(obj) ((MHFolder *)obj)
+
+struct _MHFolder
+{
+ LocalFolder lfolder;
+};
+
+FolderClass *mh_get_class (void);
+
+#endif /* __MH_H__ */
diff --git a/src/mimeview.c b/src/mimeview.c
new file mode 100644
index 00000000..3d36c4f8
--- /dev/null
+++ b/src/mimeview.c
@@ -0,0 +1,998 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkvpaned.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkdnd.h>
+#include <gtk/gtkselection.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "intl.h"
+#include "main.h"
+#include "mimeview.h"
+#include "textview.h"
+#include "imageview.h"
+#include "procmime.h"
+#include "summaryview.h"
+#include "menu.h"
+#include "filesel.h"
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "prefs_common.h"
+#include "rfc2015.h"
+
+typedef enum
+{
+ COL_MIMETYPE = 0,
+ COL_SIZE = 1,
+ COL_NAME = 2
+} MimeViewColumnPos;
+
+#define N_MIMEVIEW_COLS 3
+
+static void mimeview_set_multipart_tree (MimeView *mimeview,
+ MimeInfo *mimeinfo,
+ GtkCTreeNode *parent);
+static GtkCTreeNode *mimeview_append_part (MimeView *mimeview,
+ MimeInfo *partinfo,
+ GtkCTreeNode *parent);
+static void mimeview_show_message_part (MimeView *mimeview,
+ MimeInfo *partinfo);
+static void mimeview_show_image_part (MimeView *mimeview,
+ MimeInfo *partinfo);
+static void mimeview_change_view_type (MimeView *mimeview,
+ MimeViewType type);
+
+static void mimeview_selected (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gint column,
+ MimeView *mimeview);
+static void mimeview_start_drag (GtkWidget *widget,
+ gint button,
+ GdkEvent *event,
+ MimeView *mimeview);
+static gint mimeview_button_pressed (GtkWidget *widget,
+ GdkEventButton *event,
+ MimeView *mimeview);
+static gint mimeview_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ MimeView *mimeview);
+
+static void mimeview_drag_data_get (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ MimeView *mimeview);
+
+static void mimeview_display_as_text (MimeView *mimeview);
+static void mimeview_save_as (MimeView *mimeview);
+static void mimeview_launch (MimeView *mimeview);
+static void mimeview_open_with (MimeView *mimeview);
+static void mimeview_view_file (const gchar *filename,
+ MimeInfo *partinfo,
+ const gchar *cmdline);
+#if USE_GPGME
+static void mimeview_check_signature (MimeView *mimeview);
+#endif
+
+static GtkItemFactoryEntry mimeview_popup_entries[] =
+{
+ {N_("/_Open"), NULL, mimeview_launch, 0, NULL},
+ {N_("/Open _with..."), NULL, mimeview_open_with, 0, NULL},
+ {N_("/_Display as text"), NULL, mimeview_display_as_text, 0, NULL},
+ {N_("/_Save as..."), NULL, mimeview_save_as, 0, NULL}
+#if USE_GPGME
+ ,
+ {N_("/_Check signature"), NULL, mimeview_check_signature, 0, NULL}
+#endif
+};
+
+static GtkTargetEntry mimeview_mime_types[] =
+{
+ {"text/uri-list", 0, 0}
+};
+
+MimeView *mimeview_create(void)
+{
+ MimeView *mimeview;
+
+ GtkWidget *notebook;
+ GtkWidget *vbox;
+ GtkWidget *paned;
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ GtkWidget *mime_vbox;
+ GtkWidget *popupmenu;
+ GtkItemFactory *popupfactory;
+ gchar *titles[N_MIMEVIEW_COLS];
+ gint n_entries;
+ gint i;
+
+ debug_print(_("Creating MIME view...\n"));
+ mimeview = g_new0(MimeView, 1);
+
+ titles[COL_MIMETYPE] = _("MIME Type");
+ titles[COL_SIZE] = _("Size");
+ titles[COL_NAME] = _("Name");
+
+ notebook = gtk_notebook_new();
+ gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(notebook), vbox);
+ gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook), vbox,
+ _("Text"));
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_widget_set_size_request(scrolledwin, -1, 80);
+
+ ctree = gtk_sctree_new_with_titles(N_MIMEVIEW_COLS, 0, titles);
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_NONE);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_SIZE,
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_MIMETYPE, 240);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), COL_SIZE, 64);
+ for (i = 0; i < N_MIMEVIEW_COLS; i++)
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button,
+ GTK_CAN_FOCUS);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+
+ g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(mimeview_selected), mimeview);
+ g_signal_connect(G_OBJECT(ctree), "button_press_event",
+ G_CALLBACK(mimeview_button_pressed), mimeview);
+ g_signal_connect(G_OBJECT(ctree), "key_press_event",
+ G_CALLBACK(mimeview_key_pressed), mimeview);
+ g_signal_connect(G_OBJECT (ctree),"start_drag",
+ G_CALLBACK (mimeview_start_drag), mimeview);
+ g_signal_connect(G_OBJECT(ctree), "drag_data_get",
+ G_CALLBACK(mimeview_drag_data_get), mimeview);
+
+ mime_vbox = gtk_vbox_new(FALSE, 0);
+
+ paned = gtk_vpaned_new();
+ gtk_paned_add1(GTK_PANED(paned), scrolledwin);
+ gtk_paned_add2(GTK_PANED(paned), mime_vbox);
+ gtk_container_add(GTK_CONTAINER(notebook), paned);
+ gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook), paned,
+ _("Attachments"));
+
+ gtk_widget_show_all(notebook);
+
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
+
+ n_entries = sizeof(mimeview_popup_entries) /
+ sizeof(mimeview_popup_entries[0]);
+ popupmenu = menu_create_items(mimeview_popup_entries, n_entries,
+ "<MimeView>", &popupfactory, mimeview);
+
+ mimeview->notebook = notebook;
+ mimeview->vbox = vbox;
+ mimeview->paned = paned;
+ mimeview->scrolledwin = scrolledwin;
+ mimeview->ctree = ctree;
+ mimeview->mime_vbox = mime_vbox;
+ mimeview->popupmenu = popupmenu;
+ mimeview->popupfactory = popupfactory;
+ mimeview->type = -1;
+
+ return mimeview;
+}
+
+void mimeview_init(MimeView *mimeview)
+{
+ textview_init(mimeview->textview);
+ imageview_init(mimeview->imageview);
+}
+
+/*
+ * Check whether the message is OpenPGP signed
+ */
+#if USE_GPGME
+static gboolean mimeview_is_signed(MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+
+ debug_print("mimeview_is signed of %p\n", mimeview);
+
+ if (!mimeview) return FALSE;
+ if (!mimeview->opened) return FALSE;
+
+ debug_print("mimeview_is_signed: open\n" );
+
+ if (!mimeview->file) return FALSE;
+
+ debug_print("mimeview_is_signed: file\n" );
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_val_if_fail(partinfo != NULL, FALSE);
+
+ /* walk the tree and see whether there is a signature somewhere */
+ do {
+ if (rfc2015_has_signature(partinfo))
+ return TRUE;
+ } while ((partinfo = partinfo->parent) != NULL);
+
+ debug_print("mimeview_is_signed: FALSE\n" );
+
+ return FALSE;
+}
+
+static void set_unchecked_signature(MimeInfo *mimeinfo)
+{
+ MimeInfo *sig_partinfo;
+
+ sig_partinfo = rfc2015_find_signature(mimeinfo);
+ if (sig_partinfo == NULL) return;
+
+ g_free(sig_partinfo->sigstatus);
+ sig_partinfo->sigstatus =
+ g_strdup(_("Select \"Check signature\" to check"));
+
+ g_free(sig_partinfo->sigstatus_full);
+ sig_partinfo->sigstatus_full = NULL;
+}
+#endif /* USE_GPGME */
+
+void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo,
+ const gchar *file)
+{
+ GtkCTree *ctree = GTK_CTREE(mimeview->ctree);
+ GtkCTreeNode *node;
+
+ mimeview_clear(mimeview);
+ textview_clear(mimeview->messageview->textview);
+
+ g_return_if_fail(file != NULL);
+ g_return_if_fail(mimeinfo != NULL);
+
+ mimeview->mimeinfo = mimeinfo;
+
+ mimeview->file = g_strdup(file);
+
+#if USE_GPGME
+ if (prefs_common.auto_check_signatures) {
+ FILE *fp;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return;
+ }
+ rfc2015_check_signature(mimeinfo, fp);
+ fclose(fp);
+ } else
+ set_unchecked_signature(mimeinfo);
+#endif
+
+ g_signal_handlers_block_by_func
+ (G_OBJECT(ctree), G_CALLBACK(mimeview_selected), mimeview);
+
+ mimeview_set_multipart_tree(mimeview, mimeinfo, NULL);
+
+ g_signal_handlers_unblock_by_func
+ (G_OBJECT(ctree), G_CALLBACK(mimeview_selected), mimeview);
+
+ /* search first text part */
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = GTK_CTREE_NODE_NEXT(node)) {
+ MimeInfo *partinfo;
+
+ partinfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (partinfo &&
+ (partinfo->mime_type == MIME_TEXT ||
+ partinfo->mime_type == MIME_TEXT_HTML))
+ break;
+ }
+ textview_show_message(mimeview->messageview->textview, mimeinfo, file);
+
+ if (!node)
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ if (node) {
+ gtk_ctree_select(ctree, node);
+ gtkut_ctree_set_focus_row(ctree, node);
+ gtk_widget_grab_focus(mimeview->ctree);
+ }
+}
+
+void mimeview_clear(MimeView *mimeview)
+{
+ GtkCList *clist = GTK_CLIST(mimeview->ctree);
+
+ procmime_mimeinfo_free_all(mimeview->mimeinfo);
+ mimeview->mimeinfo = NULL;
+
+ gtk_clist_clear(clist);
+ textview_clear(mimeview->textview);
+ imageview_clear(mimeview->imageview);
+
+ mimeview->opened = NULL;
+
+ g_free(mimeview->file);
+ mimeview->file = NULL;
+
+ /* gtk_notebook_set_page(GTK_NOTEBOOK(mimeview->notebook), 0); */
+}
+
+void mimeview_destroy(MimeView *mimeview)
+{
+ textview_destroy(mimeview->textview);
+ imageview_destroy(mimeview->imageview);
+ procmime_mimeinfo_free_all(mimeview->mimeinfo);
+ g_free(mimeview->file);
+ g_free(mimeview);
+}
+
+MimeInfo *mimeview_get_selected_part(MimeView *mimeview)
+{
+ if (gtk_notebook_get_current_page
+ (GTK_NOTEBOOK(mimeview->notebook)) == 0)
+ return NULL;
+
+ return gtk_ctree_node_get_row_data
+ (GTK_CTREE(mimeview->ctree), mimeview->opened);
+}
+
+static void mimeview_set_multipart_tree(MimeView *mimeview,
+ MimeInfo *mimeinfo,
+ GtkCTreeNode *parent)
+{
+ GtkCTreeNode *node;
+
+ g_return_if_fail(mimeinfo != NULL);
+
+ if (mimeinfo->children)
+ mimeinfo = mimeinfo->children;
+
+ while (mimeinfo != NULL) {
+ node = mimeview_append_part(mimeview, mimeinfo, parent);
+
+ if (mimeinfo->children)
+ mimeview_set_multipart_tree(mimeview, mimeinfo, node);
+ else if (mimeinfo->sub &&
+ mimeinfo->sub->mime_type != MIME_TEXT &&
+ mimeinfo->sub->mime_type != MIME_TEXT_HTML)
+ mimeview_set_multipart_tree(mimeview, mimeinfo->sub,
+ node);
+ mimeinfo = mimeinfo->next;
+ }
+}
+
+static gchar *get_part_name(MimeInfo *partinfo)
+{
+#if USE_GPGME
+ if (partinfo->sigstatus)
+ return partinfo->sigstatus;
+ else
+#endif
+ if (partinfo->name)
+ return partinfo->name;
+ else if (partinfo->filename)
+ return partinfo->filename;
+ else
+ return "";
+}
+
+static GtkCTreeNode *mimeview_append_part(MimeView *mimeview,
+ MimeInfo *partinfo,
+ GtkCTreeNode *parent)
+{
+ GtkCTree *ctree = GTK_CTREE(mimeview->ctree);
+ GtkCTreeNode *node;
+ gchar *str[N_MIMEVIEW_COLS];
+
+ str[COL_MIMETYPE] =
+ partinfo->content_type ? partinfo->content_type : "";
+ str[COL_SIZE] = to_human_readable(partinfo->size);
+ str[COL_NAME] = get_part_name(partinfo);
+
+ node = gtk_ctree_insert_node(ctree, parent, NULL, str, 0,
+ NULL, NULL, NULL, NULL,
+ FALSE, TRUE);
+ gtk_ctree_node_set_row_data(ctree, node, partinfo);
+
+ return node;
+}
+
+static void mimeview_show_message_part(MimeView *mimeview, MimeInfo *partinfo)
+{
+ FILE *fp;
+ const gchar *fname;
+#if USE_GPGME
+ MimeInfo *pi;
+#endif
+
+ if (!partinfo) return;
+
+#if USE_GPGME
+ for (pi = partinfo; pi && !pi->plaintextfile ; pi = pi->parent)
+ ;
+ fname = pi ? pi->plaintextfile : mimeview->file;
+#else
+ fname = mimeview->file;
+#endif /* USE_GPGME */
+ if (!fname) return;
+
+ if ((fp = fopen(fname, "rb")) == NULL) {
+ FILE_OP_ERROR(fname, "fopen");
+ return;
+ }
+
+ if (fseek(fp, partinfo->fpos, SEEK_SET) < 0) {
+ FILE_OP_ERROR(mimeview->file, "fseek");
+ fclose(fp);
+ return;
+ }
+
+ mimeview_change_view_type(mimeview, MIMEVIEW_TEXT);
+ textview_show_part(mimeview->textview, partinfo, fp);
+
+ fclose(fp);
+}
+
+static void mimeview_show_image_part(MimeView *mimeview, MimeInfo *partinfo)
+{
+ gchar *filename;
+
+ if (!partinfo) return;
+
+ filename = procmime_get_tmp_file_name(partinfo);
+
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0)
+ alertpanel_error
+ (_("Can't get the part of multipart message."));
+ else {
+ mimeview_change_view_type(mimeview, MIMEVIEW_IMAGE);
+ imageview_show_image(mimeview->imageview, partinfo, filename,
+ prefs_common.resize_image);
+ unlink(filename);
+ }
+
+ g_free(filename);
+}
+
+static void mimeview_change_view_type(MimeView *mimeview, MimeViewType type)
+{
+ TextView *textview = mimeview->textview;
+ ImageView *imageview = mimeview->imageview;
+ GList *children;
+
+ if (mimeview->type == type) return;
+
+ children = gtk_container_get_children
+ (GTK_CONTAINER(mimeview->mime_vbox));
+ if (children) {
+ gtkut_container_remove(GTK_CONTAINER(mimeview->mime_vbox),
+ GTK_WIDGET(children->data));
+ g_list_free(children);
+ }
+
+ switch (type) {
+ case MIMEVIEW_IMAGE:
+ gtk_container_add(GTK_CONTAINER(mimeview->mime_vbox),
+ GTK_WIDGET_PTR(imageview));
+ break;
+ case MIMEVIEW_TEXT:
+ gtk_container_add(GTK_CONTAINER(mimeview->mime_vbox),
+ GTK_WIDGET_PTR(textview));
+ break;
+ default:
+ return;
+ }
+
+ mimeview->type = type;
+}
+
+static void mimeview_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column,
+ MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+
+ if (mimeview->opened == node) return;
+ mimeview->opened = node;
+ gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0);
+
+ partinfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (!partinfo) return;
+
+ /* ungrab the mouse event */
+ if (GTK_WIDGET_HAS_GRAB(ctree)) {
+ gtk_grab_remove(GTK_WIDGET(ctree));
+ if (gdk_pointer_is_grabbed())
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ }
+
+ switch (partinfo->mime_type) {
+ case MIME_TEXT:
+ case MIME_TEXT_HTML:
+ case MIME_MESSAGE_RFC822:
+ case MIME_MULTIPART:
+ mimeview_show_message_part(mimeview, partinfo);
+ break;
+#if (HAVE_GDK_PIXBUF || HAVE_GDK_IMLIB)
+ case MIME_IMAGE:
+ mimeview_show_image_part(mimeview, partinfo);
+ break;
+#endif
+ default:
+ mimeview_change_view_type(mimeview, MIMEVIEW_TEXT);
+#if USE_GPGME
+ if (g_strcasecmp(partinfo->content_type,
+ "application/pgp-signature") == 0)
+ textview_show_signature_part(mimeview->textview,
+ partinfo);
+ else
+#endif
+ textview_show_mime_part(mimeview->textview, partinfo);
+ break;
+ }
+}
+
+static void mimeview_start_drag(GtkWidget *widget, gint button,
+ GdkEvent *event, MimeView *mimeview)
+{
+ GtkTargetList *list;
+ GdkDragContext *context;
+ MimeInfo *partinfo;
+
+ g_return_if_fail(mimeview != NULL);
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ if (partinfo->filename == NULL && partinfo->name == NULL) return;
+
+ list = gtk_target_list_new(mimeview_mime_types, 1);
+ context = gtk_drag_begin(widget, list,
+ GDK_ACTION_COPY, button, event);
+ gtk_drag_set_icon_default(context);
+}
+
+static gint mimeview_button_pressed(GtkWidget *widget, GdkEventButton *event,
+ MimeView *mimeview)
+{
+ GtkCList *clist = GTK_CLIST(widget);
+ MimeInfo *partinfo;
+ gint row, column;
+
+ if (!event) return FALSE;
+
+ if (event->button == 2 || event->button == 3) {
+ if (!gtk_clist_get_selection_info(clist, event->x, event->y,
+ &row, &column))
+ return FALSE;
+ gtk_clist_unselect_all(clist);
+ gtk_clist_select_row(clist, row, column);
+ gtkut_clist_set_focus_row(clist, row);
+ }
+
+ if (event->button == 2 ||
+ (event->button == 1 && event->type == GDK_2BUTTON_PRESS)) {
+ /* call external program for image, audio or html */
+ mimeview_launch(mimeview);
+ } else if (event->button == 3) {
+ partinfo = mimeview_get_selected_part(mimeview);
+ if (partinfo && (partinfo->mime_type == MIME_TEXT ||
+ partinfo->mime_type == MIME_TEXT_HTML ||
+ partinfo->mime_type == MIME_MESSAGE_RFC822 ||
+ partinfo->mime_type == MIME_IMAGE ||
+ partinfo->mime_type == MIME_MULTIPART))
+ menu_set_sensitive(mimeview->popupfactory,
+ "/Display as text", FALSE);
+ else
+ menu_set_sensitive(mimeview->popupfactory,
+ "/Display as text", TRUE);
+ if (partinfo &&
+ partinfo->mime_type == MIME_APPLICATION_OCTET_STREAM)
+ menu_set_sensitive(mimeview->popupfactory,
+ "/Open", FALSE);
+ else
+ menu_set_sensitive(mimeview->popupfactory,
+ "/Open", TRUE);
+#if USE_GPGME
+ menu_set_sensitive(mimeview->popupfactory,
+ "/Check signature",
+ mimeview_is_signed(mimeview));
+#endif
+
+ gtk_menu_popup(GTK_MENU(mimeview->popupmenu),
+ NULL, NULL, NULL, NULL,
+ event->button, event->time);
+ }
+
+#warning FIXME_GTK2 Is it correct?
+ return FALSE;
+}
+
+void mimeview_pass_key_press_event(MimeView *mimeview, GdkEventKey *event)
+{
+ mimeview_key_pressed(mimeview->ctree, event, mimeview);
+}
+
+#define BREAK_ON_MODIFIER_KEY() \
+ if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
+
+#warning FIXME_GTK2
+#if 0
+#define KEY_PRESS_EVENT_STOP() \
+ if (gtk_signal_n_emissions_by_name \
+ (G_OBJECT(ctree), "key_press_event") > 0) { \
+ gtk_signal_emit_stop_by_name(G_OBJECT(ctree), \
+ "key_press_event"); \
+ }
+#else
+#define KEY_PRESS_EVENT_STOP() \
+ g_signal_stop_emission_by_name(G_OBJECT(ctree), "key_press_event");
+#endif
+
+static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ MimeView *mimeview)
+{
+ SummaryView *summaryview;
+ GtkCTree *ctree = GTK_CTREE(widget);
+ GtkCTreeNode *node;
+
+ if (!event) return FALSE;
+ if (!mimeview->opened) return FALSE;
+
+ switch (event->keyval) {
+ case GDK_space:
+ if (textview_scroll_page(mimeview->textview, FALSE))
+ return TRUE;
+
+ node = GTK_CTREE_NODE_NEXT(mimeview->opened);
+ if (node) {
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ gtk_sctree_select(GTK_SCTREE(ctree), node);
+ return TRUE;
+ }
+ break;
+ case GDK_BackSpace:
+ textview_scroll_page(mimeview->textview, TRUE);
+ return TRUE;
+ case GDK_Return:
+ textview_scroll_one_line(mimeview->textview,
+ (event->state & GDK_MOD1_MASK) != 0);
+ return TRUE;
+ case GDK_n:
+ case GDK_N:
+ BREAK_ON_MODIFIER_KEY();
+ if (!GTK_CTREE_NODE_NEXT(mimeview->opened)) break;
+ KEY_PRESS_EVENT_STOP();
+
+ g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical",
+ GTK_SCROLL_STEP_FORWARD, 0.0);
+ return TRUE;
+ case GDK_p:
+ case GDK_P:
+ BREAK_ON_MODIFIER_KEY();
+ if (!GTK_CTREE_NODE_PREV(mimeview->opened)) break;
+ KEY_PRESS_EVENT_STOP();
+
+ g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical",
+ GTK_SCROLL_STEP_BACKWARD, 0.0);
+ return TRUE;
+ case GDK_y:
+ BREAK_ON_MODIFIER_KEY();
+ KEY_PRESS_EVENT_STOP();
+ mimeview_save_as(mimeview);
+ return TRUE;
+ case GDK_t:
+ BREAK_ON_MODIFIER_KEY();
+ KEY_PRESS_EVENT_STOP();
+ mimeview_display_as_text(mimeview);
+ return TRUE;
+ case GDK_l:
+ BREAK_ON_MODIFIER_KEY();
+ KEY_PRESS_EVENT_STOP();
+ mimeview_launch(mimeview);
+ return TRUE;
+ default:
+ break;
+ }
+
+ if (!mimeview->messageview->mainwin) return FALSE;
+ summaryview = mimeview->messageview->mainwin->summaryview;
+ summary_pass_key_press_event(summaryview, event);
+ return TRUE;
+}
+
+static void mimeview_drag_data_get(GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ MimeView *mimeview)
+{
+ gchar *filename, *uriname;
+ const gchar *bname;
+ MimeInfo *partinfo;
+
+ if (!mimeview->opened) return;
+ if (!mimeview->file) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ if (!partinfo) return;
+ if (!partinfo->filename && !partinfo->name) return;
+
+ filename = partinfo->filename ? partinfo->filename : partinfo->name;
+ bname = g_basename(filename);
+ if (*bname == '\0') return;
+
+ filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
+ bname, NULL);
+
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0)
+ alertpanel_error
+ (_("Can't save the part of multipart message."));
+
+ uriname = g_strconcat("file://", filename, NULL);
+ gtk_selection_data_set(selection_data, selection_data->target, 8,
+ uriname, strlen(uriname));
+
+ g_free(uriname);
+ g_free(filename);
+}
+
+static void mimeview_display_as_text(MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+
+ if (!mimeview->opened) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(partinfo != NULL);
+ mimeview_show_message_part(mimeview, partinfo);
+}
+
+static void mimeview_save_as(MimeView *mimeview)
+{
+ gchar *filename;
+ gchar *defname = NULL;
+ MimeInfo *partinfo;
+
+ if (!mimeview->opened) return;
+ if (!mimeview->file) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(partinfo != NULL);
+
+ if (partinfo->filename)
+ defname = partinfo->filename;
+ else if (partinfo->name) {
+ Xstrdup_a(defname, partinfo->name, return);
+ subst_for_filename(defname);
+ }
+
+ filename = filesel_select_file(_("Save as"), defname);
+ if (!filename) return;
+ if (is_file_exist(filename)) {
+ AlertValue aval;
+
+ aval = alertpanel(_("Overwrite"),
+ _("Overwrite existing file?"),
+ _("OK"), _("Cancel"), NULL);
+ if (G_ALERTDEFAULT != aval) return;
+ }
+
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0)
+ alertpanel_error
+ (_("Can't save the part of multipart message."));
+}
+
+static void mimeview_launch(MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+ gchar *filename;
+
+ if (!mimeview->opened) return;
+ if (!mimeview->file) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(partinfo != NULL);
+
+ filename = procmime_get_tmp_file_name(partinfo);
+
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0)
+ alertpanel_error
+ (_("Can't save the part of multipart message."));
+ else
+ mimeview_view_file(filename, partinfo, NULL);
+
+ g_free(filename);
+}
+
+static void mimeview_open_with(MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+ gchar *filename;
+ gchar *cmd;
+
+ if (!mimeview->opened) return;
+ if (!mimeview->file) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(partinfo != NULL);
+
+ filename = procmime_get_tmp_file_name(partinfo);
+
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0) {
+ alertpanel_error
+ (_("Can't save the part of multipart message."));
+ g_free(filename);
+ return;
+ }
+
+ if (!prefs_common.mime_open_cmd_history)
+ prefs_common.mime_open_cmd_history =
+ add_history(NULL, prefs_common.mime_open_cmd);
+
+ cmd = input_dialog_combo
+ (_("Open with"),
+ _("Enter the command line to open file:\n"
+ "(`%s' will be replaced with file name)"),
+ prefs_common.mime_open_cmd,
+ prefs_common.mime_open_cmd_history,
+ TRUE);
+ if (cmd) {
+ mimeview_view_file(filename, partinfo, cmd);
+ g_free(prefs_common.mime_open_cmd);
+ prefs_common.mime_open_cmd = cmd;
+ prefs_common.mime_open_cmd_history =
+ add_history(prefs_common.mime_open_cmd_history, cmd);
+ }
+
+ g_free(filename);
+}
+
+static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
+ const gchar *cmdline)
+{
+ static gchar *default_image_cmdline = "display '%s'";
+ static gchar *default_audio_cmdline = "play '%s'";
+ static gchar *default_html_cmdline = DEFAULT_BROWSER_CMD;
+ static gchar *mime_cmdline = "metamail -d -b -x -c %s '%s'";
+ gchar buf[1024];
+ gchar m_buf[1024];
+ const gchar *cmd;
+ const gchar *def_cmd;
+ const gchar *p;
+
+ if (cmdline) {
+ cmd = cmdline;
+ def_cmd = NULL;
+ } else if (MIME_APPLICATION_OCTET_STREAM == partinfo->mime_type) {
+ return;
+ } else if (MIME_IMAGE == partinfo->mime_type) {
+ cmd = prefs_common.mime_image_viewer;
+ def_cmd = default_image_cmdline;
+ } else if (MIME_AUDIO == partinfo->mime_type) {
+ cmd = prefs_common.mime_audio_player;
+ def_cmd = default_audio_cmdline;
+ } else if (MIME_TEXT_HTML == partinfo->mime_type) {
+ cmd = prefs_common.uri_cmd;
+ def_cmd = default_html_cmdline;
+ } else {
+ g_snprintf(m_buf, sizeof(m_buf), mime_cmdline,
+ partinfo->content_type, "%s");
+ cmd = m_buf;
+ def_cmd = NULL;
+ }
+
+ if (cmd && (p = strchr(cmd, '%')) && *(p + 1) == 's' &&
+ !strchr(p + 2, '%'))
+ g_snprintf(buf, sizeof(buf), cmd, filename);
+ else {
+ if (cmd)
+ g_warning(_("MIME viewer command line is invalid: `%s'"), cmd);
+ if (def_cmd)
+ g_snprintf(buf, sizeof(buf), def_cmd, filename);
+ else
+ return;
+ }
+
+ execute_command_line(buf, TRUE);
+}
+
+#if USE_GPGME
+static void update_node_name(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ MimeInfo *partinfo;
+ gchar *part_name;
+
+ partinfo = gtk_ctree_node_get_row_data(ctree, node);
+ g_return_if_fail(partinfo != NULL);
+
+ part_name = get_part_name(partinfo);
+ gtk_ctree_node_set_text(ctree, node, COL_NAME, part_name);
+}
+
+static void mimeview_update_names(MimeView *mimeview)
+{
+ GtkCTree *ctree = GTK_CTREE(mimeview->ctree);
+
+ gtk_ctree_pre_recursive(ctree, NULL, update_node_name, NULL);
+}
+
+static void mimeview_update_signature_info(MimeView *mimeview)
+{
+ MimeInfo *partinfo;
+
+ if (!mimeview) return;
+ if (!mimeview->opened) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ if (!partinfo) return;
+
+ if (g_strcasecmp(partinfo->content_type,
+ "application/pgp-signature") == 0) {
+ mimeview_change_view_type(mimeview, MIMEVIEW_TEXT);
+ textview_show_signature_part(mimeview->textview, partinfo);
+ }
+}
+
+static void mimeview_check_signature(MimeView *mimeview)
+{
+ MimeInfo *mimeinfo;
+ FILE *fp;
+
+ g_return_if_fail (mimeview_is_signed(mimeview));
+
+ mimeinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(mimeinfo != NULL);
+ g_return_if_fail(mimeview->file != NULL);
+
+ while (mimeinfo->parent)
+ mimeinfo = mimeinfo->parent;
+
+ if ((fp = fopen(mimeview->file, "rb")) == NULL) {
+ FILE_OP_ERROR(mimeview->file, "fopen");
+ return;
+ }
+
+ rfc2015_check_signature(mimeinfo, fp);
+ fclose(fp);
+
+ mimeview_update_names(mimeview);
+ mimeview_update_signature_info(mimeview);
+
+ textview_show_message(mimeview->messageview->textview, mimeinfo,
+ mimeview->file);
+}
+#endif /* USE_GPGME */
diff --git a/src/mimeview.h b/src/mimeview.h
new file mode 100644
index 00000000..e2dfb121
--- /dev/null
+++ b/src/mimeview.h
@@ -0,0 +1,81 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MIMEVIEW_H__
+#define __MIMEVIEW_H__
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkctree.h>
+
+typedef struct _MimeView MimeView;
+
+#include "textview.h"
+#include "imageview.h"
+#include "messageview.h"
+#include "procmime.h"
+
+typedef enum
+{
+ MIMEVIEW_TEXT,
+ MIMEVIEW_IMAGE
+} MimeViewType;
+
+struct _MimeView
+{
+ GtkWidget *notebook;
+ GtkWidget *vbox;
+
+ GtkWidget *paned;
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ GtkWidget *mime_vbox;
+
+ MimeViewType type;
+
+ GtkWidget *popupmenu;
+ GtkItemFactory *popupfactory;
+
+ GtkCTreeNode *opened;
+
+ TextView *textview;
+ ImageView *imageview;
+
+ MessageView *messageview;
+
+ MimeInfo *mimeinfo;
+
+ gchar *file;
+};
+
+MimeView *mimeview_create (void);
+void mimeview_init (MimeView *mimeview);
+void mimeview_show_message (MimeView *mimeview,
+ MimeInfo *mimeinfo,
+ const gchar *file);
+void mimeview_clear (MimeView *mimeview);
+void mimeview_destroy (MimeView *mimeview);
+
+MimeInfo *mimeview_get_selected_part (MimeView *mimeview);
+
+void mimeview_pass_key_press_event (MimeView *mimeview,
+ GdkEventKey *event);
+
+#endif /* __MIMEVIEW_H__ */
diff --git a/src/news.c b/src/news.c
new file mode 100644
index 00000000..521acec9
--- /dev/null
+++ b/src/news.c
@@ -0,0 +1,1056 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "intl.h"
+#include "news.h"
+#include "nntp.h"
+#include "socket.h"
+#include "recv.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "folder.h"
+#include "session.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "inputdialog.h"
+#include "alertpanel.h"
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+#define NNTP_PORT 119
+#if USE_SSL
+#define NNTPS_PORT 563
+#endif
+
+static void news_folder_init (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+
+static Folder *news_folder_new (const gchar *name,
+ const gchar *folder);
+static void news_folder_destroy (Folder *folder);
+
+static GSList *news_get_article_list (Folder *folder,
+ FolderItem *item,
+ gboolean use_cache);
+static gchar *news_fetch_msg (Folder *folder,
+ FolderItem *item,
+ gint num);
+static MsgInfo *news_get_msginfo (Folder *folder,
+ FolderItem *item,
+ gint num);
+
+static gint news_close (Folder *folder,
+ FolderItem *item);
+
+static gint news_scan_group (Folder *folder,
+ FolderItem *item);
+
+#if USE_SSL
+static Session *news_session_new (const gchar *server,
+ gushort port,
+ const gchar *userid,
+ const gchar *passwd,
+ SSLType ssl_type);
+#else
+static Session *news_session_new (const gchar *server,
+ gushort port,
+ const gchar *userid,
+ const gchar *passwd);
+#endif
+
+static gint news_get_article_cmd (NNTPSession *session,
+ const gchar *cmd,
+ gint num,
+ gchar *filename);
+static gint news_get_article (NNTPSession *session,
+ gint num,
+ gchar *filename);
+#if 0
+static gint news_get_header (NNTPSession *session,
+ gint num,
+ gchar *filename);
+#endif
+
+static gint news_select_group (NNTPSession *session,
+ const gchar *group,
+ gint *num,
+ gint *first,
+ gint *last);
+static GSList *news_get_uncached_articles(NNTPSession *session,
+ FolderItem *item,
+ gint cache_last,
+ gint *rfirst,
+ gint *rlast);
+static MsgInfo *news_parse_xover (const gchar *xover_str);
+static gchar *news_parse_xhdr (const gchar *xhdr_str,
+ MsgInfo *msginfo);
+static GSList *news_delete_old_articles (GSList *alist,
+ FolderItem *item,
+ gint first);
+static void news_delete_all_articles (FolderItem *item);
+static void news_delete_expired_caches (GSList *alist,
+ FolderItem *item);
+
+static FolderClass news_class =
+{
+ F_NEWS,
+
+ news_folder_new,
+ news_folder_destroy,
+
+ NULL,
+ NULL,
+
+ news_get_article_list,
+ news_fetch_msg,
+ news_get_msginfo,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ news_close,
+ news_scan_group,
+
+ NULL,
+ NULL,
+ NULL
+};
+
+
+FolderClass *news_get_class(void)
+{
+ return &news_class;
+}
+
+static Folder *news_folder_new(const gchar *name, const gchar *path)
+{
+ Folder *folder;
+
+ folder = (Folder *)g_new0(NewsFolder, 1);
+ news_folder_init(folder, name, path);
+
+ return folder;
+}
+
+static void news_folder_destroy(Folder *folder)
+{
+ gchar *dir;
+
+ dir = folder_get_path(folder);
+ if (is_dir_exist(dir))
+ remove_dir_recursive(dir);
+ g_free(dir);
+
+ folder_remote_folder_destroy(REMOTE_FOLDER(folder));
+}
+
+static void news_folder_init(Folder *folder, const gchar *name,
+ const gchar *path)
+{
+ folder->klass = news_get_class();
+ folder_remote_folder_init(folder, name, path);
+}
+
+#if USE_SSL
+static Session *news_session_new(const gchar *server, gushort port,
+ const gchar *userid, const gchar *passwd,
+ SSLType ssl_type)
+#else
+static Session *news_session_new(const gchar *server, gushort port,
+ const gchar *userid, const gchar *passwd)
+#endif
+{
+ gchar buf[NNTPBUFSIZE];
+ Session *session;
+
+ g_return_val_if_fail(server != NULL, NULL);
+
+ log_message(_("creating NNTP connection to %s:%d ...\n"), server, port);
+
+#if USE_SSL
+ session = nntp_session_new(server, port, buf, userid, passwd, ssl_type);
+#else
+ session = nntp_session_new(server, port, buf, userid, passwd);
+#endif
+
+ return session;
+}
+
+static Session *news_session_new_for_folder(Folder *folder)
+{
+ Session *session;
+ PrefsAccount *ac;
+ const gchar *userid = NULL;
+ gchar *passwd = NULL;
+ gushort port;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+
+ ac = folder->account;
+ if (ac->use_nntp_auth && ac->userid && ac->userid[0]) {
+ userid = ac->userid;
+ if (ac->passwd && ac->passwd[0])
+ passwd = g_strdup(ac->passwd);
+ else
+ passwd = input_dialog_query_password(ac->nntp_server,
+ userid);
+ }
+
+#if USE_SSL
+ port = ac->set_nntpport ? ac->nntpport
+ : ac->ssl_nntp ? NNTPS_PORT : NNTP_PORT;
+ session = news_session_new(ac->nntp_server, port, userid, passwd,
+ ac->ssl_nntp);
+#else
+ port = ac->set_nntpport ? ac->nntpport : NNTP_PORT;
+ session = news_session_new(ac->nntp_server, port, userid, passwd);
+#endif
+
+ g_free(passwd);
+
+ return session;
+}
+
+static NNTPSession *news_session_get(Folder *folder)
+{
+ RemoteFolder *rfolder = REMOTE_FOLDER(folder);
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+ g_return_val_if_fail(folder->account != NULL, NULL);
+
+ if (!prefs_common.online_mode)
+ return NULL;
+
+ if (!rfolder->session) {
+ rfolder->session = news_session_new_for_folder(folder);
+ return NNTP_SESSION(rfolder->session);
+ }
+
+ if (time(NULL) - rfolder->session->last_access_time <
+ SESSION_TIMEOUT_INTERVAL) {
+ return NNTP_SESSION(rfolder->session);
+ }
+
+ if (nntp_mode(NNTP_SESSION(rfolder->session), FALSE)
+ != NN_SUCCESS) {
+ log_warning(_("NNTP connection to %s:%d has been"
+ " disconnected. Reconnecting...\n"),
+ folder->account->nntp_server,
+ folder->account->set_nntpport ?
+ folder->account->nntpport : NNTP_PORT);
+ session_destroy(rfolder->session);
+ rfolder->session = news_session_new_for_folder(folder);
+ }
+
+ if (rfolder->session)
+ session_set_access_time(rfolder->session);
+
+ return NNTP_SESSION(rfolder->session);
+}
+
+static GSList *news_get_article_list(Folder *folder, FolderItem *item,
+ gboolean use_cache)
+{
+ GSList *alist;
+ NNTPSession *session;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+
+ session = news_session_get(folder);
+
+ if (!session) {
+ alist = procmsg_read_cache(item, FALSE);
+ item->last_num = procmsg_get_last_num_in_msg_list(alist);
+ } else if (use_cache) {
+ GSList *newlist;
+ gint cache_last;
+ gint first, last;
+
+ alist = procmsg_read_cache(item, FALSE);
+
+ cache_last = procmsg_get_last_num_in_msg_list(alist);
+ newlist = news_get_uncached_articles
+ (session, item, cache_last, &first, &last);
+ if (first == 0 && last == 0) {
+ news_delete_all_articles(item);
+ procmsg_msg_list_free(alist);
+ alist = NULL;
+ } else {
+ alist = news_delete_old_articles(alist, item, first);
+ news_delete_expired_caches(alist, item);
+ }
+
+ alist = g_slist_concat(alist, newlist);
+
+ item->last_num = last;
+ } else {
+ gint last;
+
+ alist = news_get_uncached_articles
+ (session, item, 0, NULL, &last);
+ news_delete_all_articles(item);
+ item->last_num = last;
+ }
+
+ procmsg_set_flags(alist, item);
+
+ alist = procmsg_sort_msg_list(alist, item->sort_key, item->sort_type);
+
+ return alist;
+}
+
+static gchar *news_fetch_msg(Folder *folder, FolderItem *item, gint num)
+{
+ gchar *path, *filename;
+ NNTPSession *session;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+
+ path = folder_item_get_path(item);
+ if (!is_dir_exist(path))
+ make_dir_hier(path);
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL);
+ g_free(path);
+
+ if (is_file_exist(filename)) {
+ debug_print(_("article %d has been already cached.\n"), num);
+ return filename;
+ }
+
+ session = news_session_get(folder);
+ if (!session) {
+ g_free(filename);
+ return NULL;
+ }
+
+ ok = news_select_group(session, item->path, NULL, NULL, NULL);
+ if (ok != NN_SUCCESS) {
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ }
+ g_free(filename);
+ return NULL;
+ }
+
+ debug_print(_("getting article %d...\n"), num);
+ ok = news_get_article(NNTP_SESSION(REMOTE_FOLDER(folder)->session),
+ num, filename);
+ if (ok != NN_SUCCESS) {
+ g_warning(_("can't read article %d\n"), num);
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ }
+ g_free(filename);
+ return NULL;
+ }
+
+ return filename;
+}
+
+static MsgInfo *news_get_msginfo(Folder *folder, FolderItem *item, gint num)
+{
+ MsgInfo *msginfo;
+ MsgFlags flags = {0, 0};
+ gchar *file;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+
+ file = news_fetch_msg(folder, item, num);
+ if (!file) return NULL;
+
+ msginfo = procheader_parse_file(file, flags, FALSE);
+
+ g_free(file);
+
+ return msginfo;
+}
+
+static gint news_close(Folder *folder, FolderItem *item)
+{
+ return 0;
+}
+
+static gint news_scan_group(Folder *folder, FolderItem *item)
+{
+ NNTPSession *session;
+ gint num = 0, first = 0, last = 0;
+ gint new = 0, unread = 0, total = 0;
+ gint min = 0, max = 0;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(item != NULL, -1);
+
+ session = news_session_get(folder);
+ if (!session) return -1;
+
+ ok = news_select_group(session, item->path, &num, &first, &last);
+ if (ok != NN_SUCCESS) {
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ }
+ return -1;
+ }
+
+ if (num == 0) {
+ item->new = item->unread = item->total = item->last_num = 0;
+ return 0;
+ }
+
+ procmsg_get_mark_sum(item, &new, &unread, &total, &min, &max, first);
+
+ if (max < first || last < min)
+ new = unread = total = num;
+ else {
+ if (min < first)
+ min = first;
+
+ if (last < max)
+ max = last;
+ else if (max < last) {
+ new += last - max;
+ unread += last - max;
+ }
+
+ if (new > num) new = num;
+ if (unread > num) unread = num;
+ }
+
+ item->new = new;
+ item->unread = unread;
+ item->total = num;
+ item->last_num = last;
+
+ return 0;
+}
+
+static NewsGroupInfo *news_group_info_new(const gchar *name,
+ gint first, gint last, gchar type)
+{
+ NewsGroupInfo *ginfo;
+
+ ginfo = g_new(NewsGroupInfo, 1);
+ ginfo->name = g_strdup(name);
+ ginfo->first = first;
+ ginfo->last = last;
+ ginfo->type = type;
+
+ return ginfo;
+}
+
+static void news_group_info_free(NewsGroupInfo *ginfo)
+{
+ g_free(ginfo->name);
+ g_free(ginfo);
+}
+
+static gint news_group_info_compare(NewsGroupInfo *ginfo1,
+ NewsGroupInfo *ginfo2)
+{
+ return g_strcasecmp(ginfo1->name, ginfo2->name);
+}
+
+GSList *news_get_group_list(Folder *folder)
+{
+ gchar *path, *filename;
+ FILE *fp;
+ GSList *list = NULL;
+ GSList *last = NULL;
+ gchar buf[NNTPBUFSIZE];
+
+ g_return_val_if_fail(folder != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+
+ path = folder_item_get_path(FOLDER_ITEM(folder->node->data));
+ if (!is_dir_exist(path))
+ make_dir_hier(path);
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S, NEWSGROUP_LIST, NULL);
+ g_free(path);
+
+ if ((fp = fopen(filename, "rb")) == NULL) {
+ NNTPSession *session;
+ gint ok;
+
+ session = news_session_get(folder);
+ if (!session) {
+ g_free(filename);
+ return NULL;
+ }
+
+ ok = nntp_list(session);
+ if (ok != NN_SUCCESS) {
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ }
+ g_free(filename);
+ return NULL;
+ }
+ if (recv_write_to_file(SESSION(session)->sock, filename) < 0) {
+ log_warning(_("can't retrieve newsgroup list\n"));
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ g_free(filename);
+ return NULL;
+ }
+
+ if ((fp = fopen(filename, "rb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ g_free(filename);
+ return NULL;
+ }
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ gchar *p = buf;
+ gchar *name;
+ gint last_num;
+ gint first_num;
+ gchar type;
+ NewsGroupInfo *ginfo;
+
+ p = strchr(p, ' ');
+ if (!p) continue;
+ *p = '\0';
+ p++;
+ name = buf;
+
+ if (sscanf(p, "%d %d %c", &last_num, &first_num, &type) < 3)
+ continue;
+
+ ginfo = news_group_info_new(name, first_num, last_num, type);
+
+ if (!last)
+ last = list = g_slist_append(NULL, ginfo);
+ else {
+ last = g_slist_append(last, ginfo);
+ last = last->next;
+ }
+ }
+
+ fclose(fp);
+ g_free(filename);
+
+ list = g_slist_sort(list, (GCompareFunc)news_group_info_compare);
+
+ return list;
+}
+
+void news_group_list_free(GSList *group_list)
+{
+ GSList *cur;
+
+ if (!group_list) return;
+
+ for (cur = group_list; cur != NULL; cur = cur->next)
+ news_group_info_free((NewsGroupInfo *)cur->data);
+ g_slist_free(group_list);
+}
+
+void news_remove_group_list_cache(Folder *folder)
+{
+ gchar *path, *filename;
+
+ g_return_if_fail(folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(folder) == F_NEWS);
+
+ path = folder_item_get_path(FOLDER_ITEM(folder->node->data));
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S, NEWSGROUP_LIST, NULL);
+ g_free(path);
+
+ if (is_file_exist(filename)) {
+ if (remove(filename) < 0)
+ FILE_OP_ERROR(filename, "remove");
+ }
+ g_free(filename);
+}
+
+gint news_post(Folder *folder, const gchar *file)
+{
+ FILE *fp;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, -1);
+ g_return_val_if_fail(file != NULL, -1);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ ok = news_post_stream(folder, fp);
+
+ fclose(fp);
+
+ return ok;
+}
+
+gint news_post_stream(Folder *folder, FILE *fp)
+{
+ NNTPSession *session;
+ gint ok;
+
+ g_return_val_if_fail(folder != NULL, -1);
+ g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, -1);
+ g_return_val_if_fail(fp != NULL, -1);
+
+ session = news_session_get(folder);
+ if (!session) return -1;
+
+ ok = nntp_post(session, fp);
+ if (ok != NN_SUCCESS) {
+ log_warning(_("can't post article.\n"));
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(folder)->session = NULL;
+ }
+ return -1;
+ }
+
+ return 0;
+}
+
+static gint news_get_article_cmd(NNTPSession *session, const gchar *cmd,
+ gint num, gchar *filename)
+{
+ gchar *msgid;
+ gint ok;
+
+ ok = nntp_get_article(session, cmd, num, &msgid);
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ debug_print("Message-Id = %s, num = %d\n", msgid, num);
+ g_free(msgid);
+
+ ok = recv_write_to_file(SESSION(session)->sock, filename);
+ if (ok < 0) {
+ log_warning(_("can't retrieve article %d\n"), num);
+ if (ok == -2)
+ return NN_SOCKET;
+ else
+ return NN_IOERR;
+ }
+
+ return NN_SUCCESS;
+}
+
+static gint news_get_article(NNTPSession *session, gint num, gchar *filename)
+{
+ return news_get_article_cmd(session, "ARTICLE", num, filename);
+}
+
+#if 0
+static gint news_get_header(NNTPSession *session, gint num, gchar *filename)
+{
+ return news_get_article_cmd(session, "HEAD", num, filename);
+}
+#endif
+
+/**
+ * news_select_group:
+ * @session: Active NNTP session.
+ * @group: Newsgroup name.
+ * @num: Estimated number of articles.
+ * @first: First article number.
+ * @last: Last article number.
+ *
+ * Select newsgroup @group with the GROUP command if it is not already
+ * selected in @session, or article numbers need to be returned.
+ *
+ * Return value: NNTP result code.
+ **/
+static gint news_select_group(NNTPSession *session, const gchar *group,
+ gint *num, gint *first, gint *last)
+{
+ gint ok;
+ gint num_, first_, last_;
+
+ if (!num || !first || !last) {
+ if (session->group && g_strcasecmp(session->group, group) == 0)
+ return NN_SUCCESS;
+ num = &num_;
+ first = &first_;
+ last = &last_;
+ }
+
+ g_free(session->group);
+ session->group = NULL;
+
+ ok = nntp_group(session, group, num, first, last);
+ if (ok == NN_SUCCESS)
+ session->group = g_strdup(group);
+ else
+ log_warning(_("can't select group: %s\n"), group);
+
+ return ok;
+}
+
+static GSList *news_get_uncached_articles(NNTPSession *session,
+ FolderItem *item, gint cache_last,
+ gint *rfirst, gint *rlast)
+{
+ gint ok;
+ gint num = 0, first = 0, last = 0, begin = 0, end = 0;
+ gchar buf[NNTPBUFSIZE];
+ GSList *newlist = NULL;
+ GSList *llast = NULL;
+ MsgInfo *msginfo;
+
+ if (rfirst) *rfirst = -1;
+ if (rlast) *rlast = -1;
+
+ g_return_val_if_fail(session != NULL, NULL);
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->folder != NULL, NULL);
+ g_return_val_if_fail(FOLDER_TYPE(item->folder) == F_NEWS, NULL);
+
+ ok = news_select_group(session, item->path, &num, &first, &last);
+ if (ok != NN_SUCCESS) {
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ }
+ return NULL;
+ }
+
+ /* calculate getting overview range */
+ if (first > last) {
+ log_warning(_("invalid article range: %d - %d\n"),
+ first, last);
+ return NULL;
+ }
+
+ if (rfirst) *rfirst = first;
+ if (rlast) *rlast = last;
+
+ if (cache_last < first)
+ begin = first;
+ else if (last < cache_last)
+ begin = first;
+ else if (last == cache_last) {
+ debug_print(_("no new articles.\n"));
+ return NULL;
+ } else
+ begin = cache_last + 1;
+ end = last;
+
+ if (prefs_common.max_articles > 0 &&
+ end - begin + 1 > prefs_common.max_articles)
+ begin = end - prefs_common.max_articles + 1;
+
+ log_message(_("getting xover %d - %d in %s...\n"),
+ begin, end, item->path);
+ ok = nntp_xover(session, begin, end);
+ if (ok != NN_SUCCESS) {
+ log_warning(_("can't get xover\n"));
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ }
+ return NULL;
+ }
+
+ for (;;) {
+ if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ log_warning(_("error occurred while getting xover.\n"));
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ return newlist;
+ }
+
+ if (buf[0] == '.' && buf[1] == '\r') break;
+
+ msginfo = news_parse_xover(buf);
+ if (!msginfo) {
+ log_warning(_("invalid xover line: %s\n"), buf);
+ continue;
+ }
+
+ msginfo->folder = item;
+ msginfo->flags.perm_flags = MSG_NEW|MSG_UNREAD;
+ msginfo->flags.tmp_flags = MSG_NEWS;
+ msginfo->newsgroups = g_strdup(item->path);
+
+ if (!newlist)
+ llast = newlist = g_slist_append(newlist, msginfo);
+ else {
+ llast = g_slist_append(llast, msginfo);
+ llast = llast->next;
+ }
+ }
+
+ ok = nntp_xhdr(session, "to", begin, end);
+ if (ok != NN_SUCCESS) {
+ log_warning(_("can't get xhdr\n"));
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ }
+ return newlist;
+ }
+
+ llast = newlist;
+
+ for (;;) {
+ if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ log_warning(_("error occurred while getting xhdr.\n"));
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ return newlist;
+ }
+
+ if (buf[0] == '.' && buf[1] == '\r') break;
+ if (!llast) {
+ g_warning("llast == NULL\n");
+ continue;
+ }
+
+ msginfo = (MsgInfo *)llast->data;
+ msginfo->to = news_parse_xhdr(buf, msginfo);
+
+ llast = llast->next;
+ }
+
+ ok = nntp_xhdr(session, "cc", begin, end);
+ if (ok != NN_SUCCESS) {
+ log_warning(_("can't get xhdr\n"));
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ }
+ return newlist;
+ }
+
+ llast = newlist;
+
+ for (;;) {
+ if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ log_warning(_("error occurred while getting xhdr.\n"));
+ session_destroy(SESSION(session));
+ REMOTE_FOLDER(item->folder)->session = NULL;
+ return newlist;
+ }
+
+ if (buf[0] == '.' && buf[1] == '\r') break;
+ if (!llast) {
+ g_warning("llast == NULL\n");
+ continue;
+ }
+
+ msginfo = (MsgInfo *)llast->data;
+ msginfo->cc = news_parse_xhdr(buf, msginfo);
+
+ llast = llast->next;
+ }
+
+ session_set_access_time(SESSION(session));
+
+ return newlist;
+}
+
+#define PARSE_ONE_PARAM(p, srcp) \
+{ \
+ p = strchr(srcp, '\t'); \
+ if (!p) return NULL; \
+ else \
+ *p++ = '\0'; \
+}
+
+static MsgInfo *news_parse_xover(const gchar *xover_str)
+{
+ MsgInfo *msginfo;
+ gchar buf[NNTPBUFSIZE];
+ gchar *subject, *sender, *size, *line, *date, *msgid, *ref, *tmp;
+ gchar *p;
+ gint num, size_int, line_int;
+ gchar *xover_buf;
+
+ Xstrdup_a(xover_buf, xover_str, return NULL);
+
+ PARSE_ONE_PARAM(subject, xover_buf);
+ PARSE_ONE_PARAM(sender, subject);
+ PARSE_ONE_PARAM(date, sender);
+ PARSE_ONE_PARAM(msgid, date);
+ PARSE_ONE_PARAM(ref, msgid);
+ PARSE_ONE_PARAM(size, ref);
+ PARSE_ONE_PARAM(line, size);
+
+ tmp = strchr(line, '\t');
+ if (!tmp) tmp = strchr(line, '\r');
+ if (!tmp) tmp = strchr(line, '\n');
+ if (tmp) *tmp = '\0';
+
+ num = atoi(xover_str);
+ size_int = atoi(size);
+ line_int = atoi(line);
+
+ /* set MsgInfo */
+ msginfo = g_new0(MsgInfo, 1);
+ msginfo->msgnum = num;
+ msginfo->size = size_int;
+
+ msginfo->date = g_strdup(date);
+ msginfo->date_t = procheader_date_parse(NULL, date, 0);
+
+ conv_unmime_header(buf, sizeof(buf), sender, NULL);
+ msginfo->from = g_strdup(buf);
+ msginfo->fromname = procheader_get_fromname(buf);
+
+ conv_unmime_header(buf, sizeof(buf), subject, NULL);
+ msginfo->subject = g_strdup(buf);
+
+ extract_parenthesis(msgid, '<', '>');
+ remove_space(msgid);
+ if (*msgid != '\0')
+ msginfo->msgid = g_strdup(msgid);
+
+ eliminate_parenthesis(ref, '(', ')');
+ if ((p = strrchr(ref, '<')) != NULL) {
+ extract_parenthesis(p, '<', '>');
+ remove_space(p);
+ if (*p != '\0')
+ msginfo->inreplyto = g_strdup(p);
+ }
+
+ return msginfo;
+}
+
+static gchar *news_parse_xhdr(const gchar *xhdr_str, MsgInfo *msginfo)
+{
+ gchar *p;
+ gchar *tmp;
+ gint num;
+
+ p = strchr(xhdr_str, ' ');
+ if (!p)
+ return NULL;
+ else
+ p++;
+
+ num = atoi(xhdr_str);
+ if (msginfo->msgnum != num) return NULL;
+
+ tmp = strchr(p, '\r');
+ if (!tmp) tmp = strchr(p, '\n');
+
+ if (tmp)
+ return g_strndup(p, tmp - p);
+ else
+ return g_strdup(p);
+}
+
+static GSList *news_delete_old_articles(GSList *alist, FolderItem *item,
+ gint first)
+{
+ GSList *cur, *next;
+ MsgInfo *msginfo;
+ gchar *dir;
+
+ g_return_val_if_fail(item != NULL, alist);
+ g_return_val_if_fail(item->folder != NULL, alist);
+ g_return_val_if_fail(FOLDER_TYPE(item->folder) == F_NEWS, alist);
+
+ if (first < 2) return alist;
+
+ debug_print("Deleting cached articles 1 - %d ...\n", first - 1);
+
+ dir = folder_item_get_path(item);
+ remove_numbered_files(dir, 1, first - 1);
+ g_free(dir);
+
+ for (cur = alist; cur != NULL; ) {
+ next = cur->next;
+
+ msginfo = (MsgInfo *)cur->data;
+ if (msginfo && msginfo->msgnum < first) {
+ procmsg_msginfo_free(msginfo);
+ alist = g_slist_remove(alist, msginfo);
+ }
+
+ cur = next;
+ }
+
+ return alist;
+}
+
+static void news_delete_all_articles(FolderItem *item)
+{
+ gchar *dir;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
+
+ debug_print("Deleting all cached articles...\n");
+
+ dir = folder_item_get_path(item);
+ remove_all_numbered_files(dir);
+ g_free(dir);
+}
+
+static void news_delete_expired_caches(GSList *alist, FolderItem *item)
+{
+ gchar *dir;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
+
+ debug_print("Deleting expired cached articles...\n");
+
+ dir = folder_item_get_path(item);
+ remove_expired_files(dir, 24 * 7);
+ g_free(dir);
+}
diff --git a/src/news.h b/src/news.h
new file mode 100644
index 00000000..31628113
--- /dev/null
+++ b/src/news.h
@@ -0,0 +1,59 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __NEWS_H__
+#define __NEWS_H__
+
+#include <glib.h>
+#include <stdio.h>
+
+#include "folder.h"
+
+typedef struct _NewsFolder NewsFolder;
+typedef struct _NewsGroupInfo NewsGroupInfo;
+
+#define NEWS_FOLDER(obj) ((NewsFolder *)obj)
+
+struct _NewsFolder
+{
+ RemoteFolder rfolder;
+
+ gboolean use_auth;
+};
+
+struct _NewsGroupInfo
+{
+ gchar *name;
+ guint first;
+ guint last;
+ gchar type;
+};
+
+FolderClass *news_get_class (void);
+
+GSList *news_get_group_list (Folder *folder);
+void news_group_list_free (GSList *group_list);
+void news_remove_group_list_cache (Folder *folder);
+
+gint news_post (Folder *folder,
+ const gchar *file);
+gint news_post_stream (Folder *folder,
+ FILE *fp);
+
+#endif /* __NEWS_H__ */
diff --git a/src/nntp.c b/src/nntp.c
new file mode 100644
index 00000000..54335ce9
--- /dev/null
+++ b/src/nntp.c
@@ -0,0 +1,431 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "intl.h"
+#include "nntp.h"
+#include "socket.h"
+#include "utils.h"
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+static gint verbose = 1;
+
+static void nntp_session_destroy(Session *session);
+
+static gint nntp_ok (SockInfo *sock,
+ gchar *argbuf);
+
+static gint nntp_gen_send (SockInfo *sock,
+ const gchar *format,
+ ...);
+static gint nntp_gen_recv (SockInfo *sock,
+ gchar *buf,
+ gint size);
+static gint nntp_gen_command (NNTPSession *session,
+ gchar *argbuf,
+ const gchar *format,
+ ...);
+
+
+#if USE_SSL
+Session *nntp_session_new(const gchar *server, gushort port, gchar *buf,
+ const gchar *userid, const gchar *passwd,
+ SSLType ssl_type)
+#else
+Session *nntp_session_new(const gchar *server, gushort port, gchar *buf,
+ const gchar *userid, const gchar *passwd)
+#endif
+{
+ NNTPSession *session;
+ SockInfo *sock;
+
+ if ((sock = sock_connect(server, port)) == NULL) {
+ log_warning(_("Can't connect to NNTP server: %s:%d\n"),
+ server, port);
+ return NULL;
+ }
+
+#if USE_SSL
+ if (ssl_type == SSL_TUNNEL && !ssl_init_socket(sock)) {
+ sock_close(sock);
+ return NULL;
+ }
+#endif
+
+ if (nntp_ok(sock, buf) != NN_SUCCESS) {
+ sock_close(sock);
+ return NULL;
+ }
+
+ session = g_new0(NNTPSession, 1);
+
+ session_init(SESSION(session));
+
+ SESSION(session)->type = SESSION_NEWS;
+ SESSION(session)->server = g_strdup(server);
+ SESSION(session)->sock = sock;
+ SESSION(session)->last_access_time = time(NULL);
+ SESSION(session)->data = NULL;
+
+ SESSION(session)->destroy = nntp_session_destroy;
+
+ session->group = NULL;
+
+ if (userid && passwd) {
+ gint ok;
+
+ session->userid = g_strdup(userid);
+ session->passwd = g_strdup(passwd);
+
+ ok = nntp_gen_send(sock, "AUTHINFO USER %s", session->userid);
+ if (ok != NN_SUCCESS) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ ok = nntp_ok(sock, NULL);
+ if (ok == NN_AUTHCONT) {
+ ok = nntp_gen_send(sock, "AUTHINFO PASS %s",
+ session->passwd);
+ if (ok != NN_SUCCESS) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ ok = nntp_ok(sock, NULL);
+ if (ok != NN_SUCCESS)
+ session->auth_failed = TRUE;
+ }
+ if (ok == NN_SOCKET) {
+ session_destroy(SESSION(session));
+ return NULL;
+ }
+ }
+
+ session_set_access_time(SESSION(session));
+
+ return SESSION(session);
+}
+
+static void nntp_session_destroy(Session *session)
+{
+ NNTPSession *nntp_session = NNTP_SESSION(session);
+
+ g_return_if_fail(session != NULL);
+
+ g_free(nntp_session->group);
+ g_free(nntp_session->userid);
+ g_free(nntp_session->passwd);
+}
+
+gint nntp_group(NNTPSession *session, const gchar *group,
+ gint *num, gint *first, gint *last)
+{
+ gint ok;
+ gint resp;
+ gchar buf[NNTPBUFSIZE];
+
+ ok = nntp_gen_command(session, buf, "GROUP %s", group);
+
+ if (ok != NN_SUCCESS && ok != NN_SOCKET && ok != NN_AUTHREQ) {
+ ok = nntp_mode(session, FALSE);
+ if (ok == NN_SUCCESS)
+ ok = nntp_gen_command(session, buf, "GROUP %s", group);
+ }
+
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ if (sscanf(buf, "%d %d %d %d", &resp, num, first, last)
+ != 4) {
+ log_warning(_("protocol error: %s\n"), buf);
+ return NN_PROTOCOL;
+ }
+
+ return NN_SUCCESS;
+}
+
+gint nntp_get_article(NNTPSession *session, const gchar *cmd, gint num,
+ gchar **msgid)
+{
+ gint ok;
+ gchar buf[NNTPBUFSIZE];
+
+ if (num > 0)
+ ok = nntp_gen_command(session, buf, "%s %d", cmd, num);
+ else
+ ok = nntp_gen_command(session, buf, cmd);
+
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ extract_parenthesis(buf, '<', '>');
+ if (buf[0] == '\0') {
+ log_warning(_("protocol error\n"));
+ *msgid = g_strdup("0");
+ } else
+ *msgid = g_strdup(buf);
+
+ return NN_SUCCESS;
+}
+
+gint nntp_article(NNTPSession *session, gint num, gchar **msgid)
+{
+ return nntp_get_article(session, "ARTICLE", num, msgid);
+}
+
+gint nntp_body(NNTPSession *session, gint num, gchar **msgid)
+{
+ return nntp_get_article(session, "BODY", num, msgid);
+}
+
+gint nntp_head(NNTPSession *session, gint num, gchar **msgid)
+{
+ return nntp_get_article(session, "HEAD", num, msgid);
+}
+
+gint nntp_stat(NNTPSession *session, gint num, gchar **msgid)
+{
+ return nntp_get_article(session, "STAT", num, msgid);
+}
+
+gint nntp_next(NNTPSession *session, gint *num, gchar **msgid)
+{
+ gint ok;
+ gint resp;
+ gchar buf[NNTPBUFSIZE];
+
+ ok = nntp_gen_command(session, buf, "NEXT");
+
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ if (sscanf(buf, "%d %d", &resp, num) != 2) {
+ log_warning(_("protocol error: %s\n"), buf);
+ return NN_PROTOCOL;
+ }
+
+ extract_parenthesis(buf, '<', '>');
+ if (buf[0] == '\0') {
+ log_warning(_("protocol error\n"));
+ return NN_PROTOCOL;
+ }
+ *msgid = g_strdup(buf);
+
+ return NN_SUCCESS;
+}
+
+gint nntp_xover(NNTPSession *session, gint first, gint last)
+{
+ gint ok;
+ gchar buf[NNTPBUFSIZE];
+
+ ok = nntp_gen_command(session, buf, "XOVER %d-%d", first, last);
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ return NN_SUCCESS;
+}
+
+gint nntp_xhdr(NNTPSession *session, const gchar *header, gint first, gint last)
+{
+ gint ok;
+ gchar buf[NNTPBUFSIZE];
+
+ ok = nntp_gen_command(session, buf, "XHDR %s %d-%d",
+ header, first, last);
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ return NN_SUCCESS;
+}
+
+gint nntp_list(NNTPSession *session)
+{
+ return nntp_gen_command(session, NULL, "LIST");
+}
+
+gint nntp_post(NNTPSession *session, FILE *fp)
+{
+ gint ok;
+ gchar buf[NNTPBUFSIZE];
+ gchar *msg;
+
+ ok = nntp_gen_command(session, buf, "POST");
+ if (ok != NN_SUCCESS)
+ return ok;
+
+ msg = get_outgoing_rfc2822_str(fp);
+ if (sock_write_all(SESSION(session)->sock, msg, strlen(msg)) < 0) {
+ log_warning(_("Error occurred while posting\n"));
+ g_free(msg);
+ return NN_SOCKET;
+ }
+ g_free(msg);
+
+ sock_write_all(SESSION(session)->sock, ".\r\n", 3);
+ if ((ok = nntp_ok(SESSION(session)->sock, buf)) != NN_SUCCESS)
+ return ok;
+
+ session_set_access_time(SESSION(session));
+
+ return NN_SUCCESS;
+}
+
+gint nntp_newgroups(NNTPSession *session)
+{
+ return NN_SUCCESS;
+}
+
+gint nntp_newnews(NNTPSession *session)
+{
+ return NN_SUCCESS;
+}
+
+gint nntp_mode(NNTPSession *session, gboolean stream)
+{
+ gint ok;
+
+ ok = nntp_gen_command(session, NULL, "MODE %s",
+ stream ? "STREAM" : "READER");
+
+ return ok;
+}
+
+static gint nntp_ok(SockInfo *sock, gchar *argbuf)
+{
+ gint ok;
+ gchar buf[NNTPBUFSIZE];
+
+ if ((ok = nntp_gen_recv(sock, buf, sizeof(buf))) == NN_SUCCESS) {
+ if (strlen(buf) < 3)
+ return NN_ERROR;
+
+ if ((buf[0] == '1' || buf[0] == '2' || buf[0] == '3') &&
+ (buf[3] == ' ' || buf[3] == '\0')) {
+ if (argbuf)
+ strcpy(argbuf, buf);
+
+ if (!strncmp(buf, "381", 3))
+ return NN_AUTHCONT;
+
+ return NN_SUCCESS;
+ } else if (!strncmp(buf, "480", 3))
+ return NN_AUTHREQ;
+ else
+ return NN_ERROR;
+ }
+
+ return ok;
+}
+
+static gint nntp_gen_send(SockInfo *sock, const gchar *format, ...)
+{
+ gchar buf[NNTPBUFSIZE];
+ va_list args;
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ if (verbose) {
+ if (!g_strncasecmp(buf, "AUTHINFO PASS", 13))
+ log_print("NNTP> AUTHINFO PASS ********\n");
+ else
+ log_print("NNTP> %s\n", buf);
+ }
+
+ strcat(buf, "\r\n");
+ if (sock_write_all(sock, buf, strlen(buf)) < 0) {
+ log_warning(_("Error occurred while sending command\n"));
+ return NN_SOCKET;
+ }
+
+ return NN_SUCCESS;
+}
+
+static gint nntp_gen_recv(SockInfo *sock, gchar *buf, gint size)
+{
+ if (sock_gets(sock, buf, size) == -1)
+ return NN_SOCKET;
+
+ strretchomp(buf);
+
+ if (verbose)
+ log_print("NNTP< %s\n", buf);
+
+ return NN_SUCCESS;
+}
+
+static gint nntp_gen_command(NNTPSession *session, gchar *argbuf,
+ const gchar *format, ...)
+{
+ gchar buf[NNTPBUFSIZE];
+ va_list args;
+ gint ok;
+ SockInfo *sock;
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ sock = SESSION(session)->sock;
+ ok = nntp_gen_send(sock, "%s", buf);
+ if (ok != NN_SUCCESS)
+ return ok;
+ ok = nntp_ok(sock, argbuf);
+ if (ok == NN_AUTHREQ) {
+ if (!session->userid || !session->passwd) {
+ session->auth_failed = TRUE;
+ return ok;
+ }
+
+ ok = nntp_gen_send(sock, "AUTHINFO USER %s", session->userid);
+ if (ok != NN_SUCCESS)
+ return ok;
+ ok = nntp_ok(sock, NULL);
+ if (ok == NN_AUTHCONT) {
+ ok = nntp_gen_send(sock, "AUTHINFO PASS %s",
+ session->passwd);
+ if (ok != NN_SUCCESS)
+ return ok;
+ ok = nntp_ok(sock, NULL);
+ }
+ if (ok != NN_SUCCESS) {
+ session->auth_failed = TRUE;
+ return ok;
+ }
+
+ ok = nntp_gen_send(sock, "%s", buf);
+ if (ok != NN_SUCCESS)
+ return ok;
+ ok = nntp_ok(sock, argbuf);
+ }
+
+ session_set_access_time(SESSION(session));
+
+ return ok;
+}
diff --git a/src/nntp.h b/src/nntp.h
new file mode 100644
index 00000000..46992e42
--- /dev/null
+++ b/src/nntp.h
@@ -0,0 +1,109 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __NNTP_H__
+#define __NNTP_H__
+
+#include "session.h"
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+typedef struct _NNTPSession NNTPSession;
+
+#define NNTP_SESSION(obj) ((NNTPSession *)obj)
+
+struct _NNTPSession
+{
+ Session session;
+
+ gchar *group;
+
+ gchar *userid;
+ gchar *passwd;
+ gboolean auth_failed;
+};
+
+#define NN_SUCCESS 0
+#define NN_SOCKET 2
+#define NN_AUTHFAIL 3
+#define NN_PROTOCOL 4
+#define NN_SYNTAX 5
+#define NN_IOERR 6
+#define NN_ERROR 7
+#define NN_AUTHREQ 8
+#define NN_AUTHCONT 9
+
+#define NNTPBUFSIZE 8192
+
+#if USE_SSL
+Session *nntp_session_new (const gchar *server,
+ gushort port,
+ gchar *buf,
+ const gchar *userid,
+ const gchar *passwd,
+ SSLType ssl_type);
+#else
+Session *nntp_session_new (const gchar *server,
+ gushort port,
+ gchar *buf,
+ const gchar *userid,
+ const gchar *passwd);
+#endif
+
+gint nntp_group (NNTPSession *session,
+ const gchar *group,
+ gint *num,
+ gint *first,
+ gint *last);
+gint nntp_get_article (NNTPSession *session,
+ const gchar *cmd,
+ gint num,
+ gchar **msgid);
+gint nntp_article (NNTPSession *session,
+ gint num,
+ gchar **msgid);
+gint nntp_body (NNTPSession *session,
+ gint num,
+ gchar **msgid);
+gint nntp_head (NNTPSession *session,
+ gint num,
+ gchar **msgid);
+gint nntp_stat (NNTPSession *session,
+ gint num,
+ gchar **msgid);
+gint nntp_next (NNTPSession *session,
+ gint *num,
+ gchar **msgid);
+gint nntp_xover (NNTPSession *session,
+ gint first,
+ gint last);
+gint nntp_xhdr (NNTPSession *session,
+ const gchar *header,
+ gint first,
+ gint last);
+gint nntp_list (NNTPSession *session);
+gint nntp_post (NNTPSession *session,
+ FILE *fp);
+gint nntp_newgroups (NNTPSession *session);
+gint nntp_newnews (NNTPSession *session);
+gint nntp_mode (NNTPSession *sessio,
+ gboolean stream);
+
+#endif /* __NNTP_H__ */
diff --git a/src/passphrase.c b/src/passphrase.c
new file mode 100644
index 00000000..445db517
--- /dev/null
+++ b/src/passphrase.c
@@ -0,0 +1,342 @@
+/* passphrase.c - GTK+ based passphrase callback
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if USE_GPGME
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#ifdef GDK_WINDOWING_X11
+# include <gdk/gdkx.h> /* GDK_DISPLAY() */
+#endif /* GDK_WINDOWING_X11 */
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkfilesel.h>
+#include <gtk/gtksignal.h>
+
+#include "intl.h"
+#include "passphrase.h"
+#include "prefs_common.h"
+#include "manage_window.h"
+#include "utils.h"
+
+static int grab_all = 0;
+
+static gboolean pass_ack;
+static gchar *last_pass = NULL;
+
+static void passphrase_ok_cb(GtkWidget *widget, gpointer data);
+static void passphrase_cancel_cb(GtkWidget *widget, gpointer data);
+static gint passphrase_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data);
+static gboolean passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data);
+static gchar* passphrase_mbox (const gchar *desc);
+
+
+static GtkWidget *create_description (const gchar *desc);
+
+void
+gpgmegtk_set_passphrase_grab (gint yes)
+{
+ grab_all = yes;
+}
+
+static gchar*
+passphrase_mbox (const gchar *desc)
+{
+ gchar *the_passphrase = NULL;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *pass_label;
+ GtkWidget *confirm_box;
+ GtkWidget *window;
+ GtkWidget *pass_entry;
+ GtkWidget *ok_button;
+ GtkWidget *cancel_button;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Passphrase"));
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 4);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(passphrase_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(passphrase_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ if (desc) {
+ GtkWidget *label;
+ label = create_description (desc);
+ gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0);
+ }
+
+ table = gtk_table_new(2, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 8);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 12);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+
+ pass_label = gtk_label_new("");
+ gtk_table_attach (GTK_TABLE(table), pass_label, 0, 1, 0, 1,
+ GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (pass_label), 1, 0.5);
+
+ pass_entry = gtk_entry_new();
+ gtk_table_attach (GTK_TABLE(table), pass_entry, 1, 2, 0, 1,
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
+ gtk_entry_set_visibility (GTK_ENTRY(pass_entry), FALSE);
+ gtk_widget_grab_focus (pass_entry);
+
+
+ confirm_box = gtk_hbutton_box_new ();
+ gtk_button_box_set_layout (GTK_BUTTON_BOX(confirm_box), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing (GTK_BOX(confirm_box), 5);
+
+ ok_button = gtk_button_new_with_label (_("OK"));
+ GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX(confirm_box), ok_button, TRUE, TRUE, 0);
+
+ cancel_button = gtk_button_new_with_label (_("Cancel"));
+ GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(confirm_box), cancel_button, TRUE, TRUE, 0);
+
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_box, FALSE, FALSE, 0);
+ gtk_widget_grab_default (ok_button);
+
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(passphrase_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(pass_entry), "activate",
+ G_CALLBACK(passphrase_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(passphrase_cancel_cb), NULL);
+
+ if (grab_all)
+ g_object_set (G_OBJECT(window), "type", GTK_WINDOW_POPUP, NULL);
+ gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ if (grab_all)
+ gtk_window_set_policy (GTK_WINDOW(window), FALSE, FALSE, TRUE);
+
+ gtk_widget_show_all(window);
+
+ /* don't use XIM on entering passphrase */
+ gtkut_editable_disable_im(GTK_EDITABLE(pass_entry));
+
+ if (grab_all) {
+#ifdef GDK_WINDOWING_X11
+ //XGrabServer(GDK_DISPLAY());
+#endif /* GDK_WINDOWING_X11 */
+ if ( gdk_pointer_grab ( window->window, TRUE, 0,
+ NULL, NULL, GDK_CURRENT_TIME)) {
+#ifdef GDK_WINDOWING_X11
+ //XUngrabServer ( GDK_DISPLAY() );
+#endif /* GDK_WINDOWING_X11 */
+ g_warning ("OOPS: Could not grab mouse\n");
+ gtk_widget_destroy (window);
+ return NULL;
+ }
+ if ( gdk_keyboard_grab( window->window, FALSE, GDK_CURRENT_TIME )) {
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+#ifdef GDK_WINDOWING_X11
+ //XUngrabServer ( GDK_DISPLAY() );
+#endif /* GDK_WINDOWING_X11 */
+ g_warning ("OOPS: Could not grab keyboard\n");
+ gtk_widget_destroy (window);
+ return NULL;
+ }
+ }
+
+ gtk_main();
+
+ if (grab_all) {
+#ifdef GDK_WINDOWING_X11
+ //XUngrabServer (GDK_DISPLAY());
+#endif /* GDK_WINDOWING_X11 */
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gdk_keyboard_ungrab (GDK_CURRENT_TIME);
+ gdk_flush();
+ }
+
+ manage_window_focus_out(window, NULL, NULL);
+
+ if (pass_ack) {
+ const gchar *entry_text;
+ entry_text = gtk_entry_get_text(GTK_ENTRY(pass_entry));
+ if (entry_text) /* Hmmm: Do we really need this? */
+ the_passphrase = g_strdup (entry_text);
+ }
+ gtk_widget_destroy (window);
+
+ return the_passphrase;
+}
+
+
+static void
+passphrase_ok_cb(GtkWidget *widget, gpointer data)
+{
+ pass_ack = TRUE;
+ gtk_main_quit();
+}
+
+static void
+passphrase_cancel_cb(GtkWidget *widget, gpointer data)
+{
+ pass_ack = FALSE;
+ gtk_main_quit();
+}
+
+
+static gint
+passphrase_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ passphrase_cancel_cb(NULL, NULL);
+ return TRUE;
+}
+
+
+static gboolean
+passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ passphrase_cancel_cb(NULL, NULL);
+ return FALSE;
+}
+
+static gint
+linelen (const gchar *s)
+{
+ gint i;
+
+ for (i = 0; *s && *s != '\n'; s++, i++)
+ ;
+
+ return i;
+}
+
+static GtkWidget *
+create_description (const gchar *desc)
+{
+ const gchar *cmd = NULL, *uid = NULL, *info = NULL;
+ gchar *buf;
+ GtkWidget *label;
+
+ cmd = desc;
+ uid = strchr (cmd, '\n');
+ if (uid) {
+ info = strchr (++uid, '\n');
+ if (info )
+ info++;
+ }
+
+ if (!uid)
+ uid = _("[no user id]");
+ if (!info)
+ info = "";
+
+ buf = g_strdup_printf (_("%sPlease enter the passphrase for:\n\n"
+ " %.*s \n"
+ "(%.*s)\n"),
+ !strncmp (cmd, "TRY_AGAIN", 9 ) ?
+ _("Bad passphrase! Try again...\n\n") : "",
+ linelen (uid), uid, linelen (info), info);
+
+ label = gtk_label_new (buf);
+ g_free (buf);
+
+ return label;
+}
+
+static int free_passphrase(gpointer _unused)
+{
+ if (last_pass != NULL) {
+ munlock(last_pass, strlen(last_pass));
+ g_free(last_pass);
+ last_pass = NULL;
+ debug_print("%% passphrase removed");
+ }
+
+ return FALSE;
+}
+
+const char*
+gpgmegtk_passphrase_cb (void *opaque, const char *desc, void **r_hd)
+{
+ struct passphrase_cb_info_s *info = opaque;
+ GpgmeCtx ctx = info ? info->c : NULL;
+ const char *pass;
+
+ if (!desc) {
+ /* FIXME: cleanup by looking at *r_hd */
+ return NULL;
+ }
+ if (prefs_common.store_passphrase && last_pass != NULL &&
+ strncmp(desc, "TRY_AGAIN", 9) != 0)
+ return g_strdup(last_pass);
+
+ gpgmegtk_set_passphrase_grab (prefs_common.passphrase_grab);
+ debug_print ("%% requesting passphrase for `%s': ", desc);
+ pass = passphrase_mbox (desc);
+ gpgmegtk_free_passphrase();
+ if (!pass) {
+ debug_print ("%% cancel passphrase entry");
+ gpgme_cancel (ctx);
+ }
+ else {
+ if (prefs_common.store_passphrase) {
+ last_pass = g_strdup(pass);
+ if (mlock(last_pass, strlen(last_pass)) == -1)
+ debug_print("%% locking passphrase failed");
+
+ if (prefs_common.store_passphrase_timeout > 0) {
+ gtk_timeout_add(prefs_common.store_passphrase_timeout*60*1000,
+ free_passphrase, NULL);
+ }
+ }
+ debug_print ("%% sending passphrase");
+ }
+
+ return pass;
+}
+
+void gpgmegtk_free_passphrase()
+{
+ (void)free_passphrase(NULL); // could be inline
+}
+
+#endif /* USE_GPGME */
diff --git a/src/passphrase.h b/src/passphrase.h
new file mode 100644
index 00000000..e33301d9
--- /dev/null
+++ b/src/passphrase.h
@@ -0,0 +1,34 @@
+/* passphrase.h - GTK+ based passphrase callback
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GPGMEGTK_PASSPHRASE_H
+#define GPGMEGTK_PASSPHRASE_H
+
+#include <glib.h>
+#include <gpgme.h>
+
+struct passphrase_cb_info_s {
+ GpgmeCtx c;
+ int did_it;
+};
+
+void gpgmegtk_set_passphrase_grab (gint yesno);
+const char* gpgmegtk_passphrase_cb(void *opaque, const char *desc, void **r_hd);
+void gpgmegtk_free_passphrase();
+
+#endif /* GPGMEGTK_PASSPHRASE_H */
diff --git a/src/pixmaps/address.xpm b/src/pixmaps/address.xpm
new file mode 100644
index 00000000..4105fb46
--- /dev/null
+++ b/src/pixmaps/address.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * address_xpm[] = {
+"16 16 4 1",
+" c None",
+". c #071FF9",
+"+ c #FFFFFF",
+"@ c #000000",
+" ",
+" ",
+" ...............",
+" .+++.+++++.+++.",
+" .++...+++...++.",
+" .+++++++++++++.",
+" .+++++++++++++.",
+" .+++@+@@@@+@@+.",
+" .+++++++++++++.",
+" .+++@@+@+@@@@+.",
+" .+++++++++++++.",
+" .+++@@+@@@+@@+.",
+" .+++++++++++++.",
+" ...............",
+" ",
+" "};
diff --git a/src/pixmaps/book.xpm b/src/pixmaps/book.xpm
new file mode 100644
index 00000000..5bd96517
--- /dev/null
+++ b/src/pixmaps/book.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * book_xpm[] = {
+"16 16 4 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #BE22A6",
+" ",
+" ... ... ",
+" .+++. .+++. ",
+" .+++++. .+++++.",
+" .++++++.++++++.",
+" .++.+++.+++.++.",
+" .++++.+.+.++++.",
+" .++++++.+++.++.",
+" .++.+++.+.++++.",
+" .++++.+.+++.++.",
+" .++++++.+.++++.",
+" .++++++.++++++.",
+" .+...++.++...+.",
+" ..@@@.+.+.@@@..",
+" .@ @...@ @.",
+" @ @.@ @"};
diff --git a/src/pixmaps/category.xpm b/src/pixmaps/category.xpm
new file mode 100644
index 00000000..fd16880f
--- /dev/null
+++ b/src/pixmaps/category.xpm
@@ -0,0 +1,35 @@
+/* XPM */
+static char * category_xpm[] = {
+"16 16 16 1",
+" c None",
+". c #000000",
+"+ c #2C7AD4",
+"@ c #3B98C5",
+"# c #2D5AD3",
+"$ c #01DFFF",
+"% c #BFEDE2",
+"& c #12BDEE",
+"* c #B8EADF",
+"= c #2ABAD6",
+"- c #039FFD",
+"; c #155DEB",
+"> c #271BD9",
+", c #3F18C1",
+"' c #1F1CE1",
+") c #3719C9",
+" ",
+" ",
+" .... ",
+" .+@+@. ",
+" .+#+#@+...... ",
+" .$$%$%&*%$==$.",
+" .=@&@&@=+=+-;.",
+" .$&@&@=+=+-+#.",
+" .=@&@=+=+-+->.",
+" .$&@=+=+-+-;#.",
+" .=@=+=+-+-;-,.",
+" .$=+=+-+-;-;>.",
+" .=';';';';)>,.",
+" ............ ",
+" ",
+" "};
diff --git a/src/pixmaps/checkbox_off.xpm b/src/pixmaps/checkbox_off.xpm
new file mode 100644
index 00000000..1b926b3b
--- /dev/null
+++ b/src/pixmaps/checkbox_off.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char * checkbox_off_xpm[] = {
+"13 13 4 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #DFDFDF",
+" ",
+" ........... ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .+++++++++@ ",
+" .@@@@@@@@@@ ",
+" "};
diff --git a/src/pixmaps/checkbox_on.xpm b/src/pixmaps/checkbox_on.xpm
new file mode 100644
index 00000000..e4fe1c7f
--- /dev/null
+++ b/src/pixmaps/checkbox_on.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char * checkbox_on_xpm[] = {
+"13 13 4 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #DFDFDF",
+" ",
+" ........... ",
+" .+++++++++@ ",
+" .+++++++.+@ ",
+" .++++++..+@ ",
+" .+.+++...+@ ",
+" .+..+...++@ ",
+" .+.....+++@ ",
+" .++...++++@ ",
+" .+++.+++++@ ",
+" .+++++++++@ ",
+" .@@@@@@@@@@ ",
+" "};
diff --git a/src/pixmaps/clip.xpm b/src/pixmaps/clip.xpm
new file mode 100644
index 00000000..c425d203
--- /dev/null
+++ b/src/pixmaps/clip.xpm
@@ -0,0 +1,17 @@
+/* XPM */
+static char * clip_xpm[] = {
+"6 12 2 1",
+" c None",
+". c #000000",
+" ... ",
+" . .",
+" . .",
+".. ..",
+".. ..",
+".. ..",
+".. ..",
+". .. .",
+". .",
+". .",
+" .... ",
+" "};
diff --git a/src/pixmaps/complete.xpm b/src/pixmaps/complete.xpm
new file mode 100644
index 00000000..69a9ad47
--- /dev/null
+++ b/src/pixmaps/complete.xpm
@@ -0,0 +1,17 @@
+/* XPM */
+static char * complete_xpm[] = {
+"10 10 4 1",
+" c None",
+". c #000000",
+"+ c #708C58",
+"@ c #88AC84",
+" ..",
+" .+.",
+" .++.",
+".. .+++.",
+".@. .+++. ",
+".@@.+++. ",
+".@@+++. ",
+" .@++. ",
+" .@. ",
+" . "};
diff --git a/src/pixmaps/continue.xpm b/src/pixmaps/continue.xpm
new file mode 100644
index 00000000..99b3c7f9
--- /dev/null
+++ b/src/pixmaps/continue.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * continue_xpm[] = {
+"10 10 29 1",
+" c None",
+". c #000000",
+"+ c #B1C7AC",
+"@ c #F6F9F6",
+"# c #E1EADF",
+"$ c #F7F9F6",
+"% c #F0F4EF",
+"& c #ECF2EB",
+"* c #E5EDE4",
+"= c #F4F7F4",
+"- c #EFF3EE",
+"; c #E4ECE3",
+"> c #E0E9DE",
+", c #8EB184",
+"' c #85AB7D",
+") c #84AA7C",
+"! c #82A678",
+"~ c #769C6C",
+"{ c #577550",
+"] c #2E4429",
+"^ c #8CB182",
+"/ c #83A879",
+"( c #7DA171",
+"_ c #608756",
+": c #30462B",
+"< c #7CA273",
+"[ c #52744A",
+"} c #2D4526",
+"| c #31472C",
+".. ",
+".+.. ",
+".@#+.. ",
+".$%&*+.. ",
+".=-&;>#+..",
+".,')!~{]..",
+".^/(_:.. ",
+".<[}.. ",
+".|.. ",
+".. "};
diff --git a/src/pixmaps/deleted.xpm b/src/pixmaps/deleted.xpm
new file mode 100644
index 00000000..988364b8
--- /dev/null
+++ b/src/pixmaps/deleted.xpm
@@ -0,0 +1,15 @@
+/* XPM */
+static char * deleted_xpm[] = {
+"10 10 2 1",
+" c None",
+". c #999999",
+" ",
+" . .. ",
+" .. ... ",
+" .... ",
+" .. ",
+" .... ",
+" ..... ",
+" .. ... ",
+" . . ",
+" "};
diff --git a/src/pixmaps/dir-close.xpm b/src/pixmaps/dir-close.xpm
new file mode 100644
index 00000000..f6092fb3
--- /dev/null
+++ b/src/pixmaps/dir-close.xpm
@@ -0,0 +1,100 @@
+/* XPM */
+static char * dir_close_xpm[] = {
+"16 16 81 1",
+" c None",
+". c #000000",
+"+ c #79A0D4",
+"@ c #92B8E3",
+"# c #7599D1",
+"$ c #8CB3DF",
+"% c #8AB0DF",
+"& c #9BBEE6",
+"* c #93B7E4",
+"= c #8BB1DF",
+"- c #789ED7",
+"; c #E6F2FA",
+"> c #E2EFF9",
+", c #E0EEF9",
+"' c #DFEDF8",
+") c #DAE9F6",
+"! c #CBDFF4",
+"~ c #C7DDF3",
+"{ c #C0D8F1",
+"] c #AFCCED",
+"^ c #DCECF8",
+"/ c #D1E6F5",
+"( c #CBE2F4",
+"_ c #CBE1F4",
+": c #C9DFF3",
+"< c #BFD8F0",
+"[ c #B2D0ED",
+"} c #ACCAED",
+"| c #A0C3E9",
+"1 c #8AAEDF",
+"2 c #DAEAF6",
+"3 c #C1DAF0",
+"4 c #BFD9F0",
+"5 c #BCD7F0",
+"6 c #B5D1ED",
+"7 c #ABCAEC",
+"8 c #A2C4EA",
+"9 c #9DBEE8",
+"0 c #8CB0E0",
+"a c #7397D3",
+"b c #D8E9F6",
+"c c #CAE0F3",
+"d c #BBD6EF",
+"e c #B0CFED",
+"f c #A8C8EB",
+"g c #9FC0E8",
+"h c #95B9E6",
+"i c #81A6DC",
+"j c #6788CC",
+"k c #D8EAF6",
+"l c #98BBE6",
+"m c #8CB0E2",
+"n c #799DD8",
+"o c #6484C4",
+"p c #C5DCF1",
+"q c #B8D4EE",
+"r c #AECDEC",
+"s c #A6C8EA",
+"t c #9BBDE8",
+"u c #80A3DD",
+"v c #7095D2",
+"w c #5E7DBE",
+"x c #D1E5F5",
+"y c #A0C2E7",
+"z c #97BAE6",
+"A c #91B4E3",
+"B c #8AAEE1",
+"C c #83A5DE",
+"D c #6F92D1",
+"E c #6384C7",
+"F c #5874B3",
+"G c #C0D9F1",
+"H c #94B7E3",
+"I c #7DA0DA",
+"J c #7B9ED8",
+"K c #7B9FD9",
+"L c #779BD8",
+"M c #7398D5",
+"N c #6E8ED0",
+"O c #6585C7",
+"P c #536BA3",
+" ",
+" ",
+" .... ",
+" .+@@#. ",
+" .$%&*=-...... ",
+" .;>,',',)!~{].",
+" .^/(_(_:<[}|1.",
+" .2_344567890a.",
+" .bc45def8ghij.",
+" .kc<def8glmno.",
+" .bpqrs|thmuvw.",
+" .x6yz*ABCnDEF.",
+" .GHIJKLMNOwFP.",
+" ............ ",
+" ",
+" "};
diff --git a/src/pixmaps/dir-noselect.xpm b/src/pixmaps/dir-noselect.xpm
new file mode 100644
index 00000000..177488d9
--- /dev/null
+++ b/src/pixmaps/dir-noselect.xpm
@@ -0,0 +1,94 @@
+/* XPM */
+static char * dir_noselect_xpm[] = {
+"16 16 75 1",
+" c None",
+". c #7F7F7F",
+"+ c #BCCFE9",
+"@ c #C8DBF1",
+"# c #BACCE8",
+"$ c #C5D9EF",
+"% c #C4D7EF",
+"& c #CDDEF2",
+"* c #C9DBF1",
+"= c #C5D8EF",
+"- c #BBCEEB",
+"; c #F2F8FC",
+"> c #F0F7FC",
+", c #EFF6FC",
+"' c #EFF6FB",
+") c #ECF4FA",
+"! c #E5EFF9",
+"~ c #E3EEF9",
+"{ c #DFEBF8",
+"] c #D7E5F6",
+"^ c #EDF5FB",
+"/ c #E8F2FA",
+"( c #E5F0F9",
+"_ c #E4EFF9",
+": c #DFEBF7",
+"< c #D8E7F6",
+"[ c #D5E4F6",
+"} c #CFE1F4",
+"| c #C4D6EF",
+"1 c #E0ECF7",
+"2 c #DFECF7",
+"3 c #DDEBF7",
+"4 c #DAE8F6",
+"5 c #D5E4F5",
+"6 c #D0E1F4",
+"7 c #CEDEF3",
+"8 c #C5D7EF",
+"9 c #B9CBE9",
+"0 c #EBF4FA",
+"a c #DDEAF7",
+"b c #D7E7F6",
+"c c #D3E3F5",
+"d c #CFDFF3",
+"e c #CADCF2",
+"f c #C0D2ED",
+"g c #B3C3E5",
+"h c #CBDDF2",
+"i c #C5D7F0",
+"j c #BCCEEB",
+"k c #B1C1E1",
+"l c #E2EDF8",
+"m c #DBE9F6",
+"n c #D6E6F5",
+"o c #D2E3F4",
+"p c #CDDEF3",
+"q c #BFD1EE",
+"r c #B7CAE8",
+"s c #AEBEDE",
+"t c #CFE0F3",
+"u c #CBDCF2",
+"v c #C8D9F1",
+"w c #C4D6F0",
+"x c #C1D2EE",
+"y c #B7C8E8",
+"z c #B1C1E3",
+"A c #ABB9D9",
+"B c #DFECF8",
+"C c #BECFEC",
+"D c #BDCEEB",
+"E c #BDCFEC",
+"F c #BBCDEB",
+"G c #B9CBEA",
+"H c #B6C6E7",
+"I c #B2C2E3",
+"J c #A9B5D1",
+" ",
+" ",
+" .... ",
+" .+@@#. ",
+" .$%&*=-...... ",
+" .;>,',',)!~{].",
+" .^/((((_:<[}|.",
+" .)(1223456789.",
+" .0_23abc6defg.",
+" .0_:abc6dhijk.",
+" .0lmno}peiqrs.",
+" ./4tu*vwxjyzA.",
+" .B*CDEFGHIsAJ.",
+" ............ ",
+" ",
+" "};
diff --git a/src/pixmaps/dir-open.xpm b/src/pixmaps/dir-open.xpm
new file mode 100644
index 00000000..19fd6cd6
--- /dev/null
+++ b/src/pixmaps/dir-open.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char * dir_open_xpm[] = {
+"16 16 64 1",
+" c None",
+". c #000000",
+"+ c #7EA4D8",
+"@ c #93B7E5",
+"# c #97BAE6",
+"$ c #779CD5",
+"% c #83A9DE",
+"& c #8EB5E4",
+"* c #8DB4E3",
+"= c #7FA4DC",
+"- c #7297D4",
+"; c #9BBCE8",
+"> c #87AEE2",
+", c #8CB1E4",
+"' c #8BAFE2",
+") c #7FA3DE",
+"! c #8DB2E3",
+"~ c #7DA1DD",
+"{ c #7598D9",
+"] c #789DDA",
+"^ c #80A4DF",
+"/ c #4F679E",
+"( c #5874B3",
+"_ c #6485CA",
+": c #DFEDF7",
+"< c #DBECF7",
+"[ c #D5E8F6",
+"} c #D4E7F5",
+"| c #D2E7F5",
+"1 c #CBE0F3",
+"2 c #A0C3E4",
+"3 c #485D8C",
+"4 c #546DA8",
+"5 c #BFD9EE",
+"6 c #C0D9EF",
+"7 c #C2DBF1",
+"8 c #BED9F1",
+"9 c #BDD9F0",
+"0 c #B7D3EE",
+"a c #8CB3DC",
+"b c #465883",
+"c c #4C6293",
+"d c #B4D2EE",
+"e c #B3D1ED",
+"f c #AECDEB",
+"g c #93B9E0",
+"h c #6185BD",
+"i c #475B8A",
+"j c #AFCFED",
+"k c #AFCEEC",
+"l c #A0C4E7",
+"m c #8EB7DD",
+"n c #455684",
+"o c #A6C8EA",
+"p c #A5C7E9",
+"q c #A3C6E9",
+"r c #85ABDA",
+"s c #5C7CB6",
+"t c #98BCE5",
+"u c #97BCE6",
+"v c #93B9E4",
+"w c #8CB4E0",
+"x c #8BB2DF",
+"y c #759ED5",
+" ",
+" ",
+" .... ",
+" .+@#$. ",
+" .$%&*=-...... ",
+" .;>,>')!~{{]^.",
+" .........../(_.",
+".:<[}}}}}|12.34.",
+".5678989890a.bc.",
+" .5ddeeeeefgh.i.",
+" .5jjkkkkkflm.n.",
+" .dopppppqlrs..",
+" .tuvvvvvvwxy..",
+" ............ ",
+" ",
+" "};
diff --git a/src/pixmaps/error.xpm b/src/pixmaps/error.xpm
new file mode 100644
index 00000000..e70ac53e
--- /dev/null
+++ b/src/pixmaps/error.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * error_xpm[] = {
+"10 10 32 1",
+" c None",
+". c #0B0402",
+"+ c #331516",
+"@ c #261B1C",
+"# c #272120",
+"$ c #3C1D1D",
+"% c #4B2727",
+"& c #462F2F",
+"* c #443A3B",
+"= c #573435",
+"- c #573E3E",
+"; c #524647",
+"> c #734647",
+", c #805353",
+"' c #786D6D",
+") c #826F72",
+"! c #A16A6D",
+"~ c #947273",
+"{ c #9B7376",
+"] c #877D7D",
+"^ c #B07E7E",
+"/ c #A48887",
+"( c #AF9291",
+"_ c #BB8D8F",
+": c #AF9FA1",
+"< c #C4A0A1",
+"[ c #C2A5A4",
+"} c #C3B4B5",
+"| c #D0B4B6",
+"1 c #D6B2B3",
+"2 c #E1D7D6",
+"3 c #EFE2E2",
+" #*;;&+ ",
+" ;:222|~% ",
+"@:3}23:1,+",
+"*2}#]]@/_%",
+";23]..'|<=",
+"-22]..)1_=",
+"&[:@')+{!%",
+"+~1(|1{^>+",
+" ={__^!,% ",
+" $===$+ "};
diff --git a/src/pixmaps/forwarded.xpm b/src/pixmaps/forwarded.xpm
new file mode 100644
index 00000000..a3cabada
--- /dev/null
+++ b/src/pixmaps/forwarded.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * forwarded_xpm[] = {
+"10 10 10 1",
+" c None",
+". c #000000",
+"+ c #B39C82",
+"@ c #BCA488",
+"# c #867561",
+"$ c #8F7D68",
+"% c #98856E",
+"& c #A18D75",
+"* c #AA947B",
+"= c #C5AC8F",
+" ",
+" .. ",
+" .+. ",
+"......+@. ",
+".#$%&*+@=.",
+".#$%&*+@=.",
+"......+@. ",
+" .+. ",
+" .. ",
+" "};
diff --git a/src/pixmaps/group.xpm b/src/pixmaps/group.xpm
new file mode 100644
index 00000000..0735a3cc
--- /dev/null
+++ b/src/pixmaps/group.xpm
@@ -0,0 +1,97 @@
+/* XPM */
+static char * group_xpm[] = {
+"16 16 78 1",
+" c None",
+". c #000000",
+"+ c #83D47A",
+"@ c #9EE393",
+"# c #7CD175",
+"$ c #99DF8D",
+"% c #95DF8B",
+"& c #A6E69C",
+"* c #9DE494",
+"= c #80D779",
+"- c #EBFAE6",
+"; c #E8F9E3",
+"> c #E7F9E1",
+", c #E6F8E0",
+"' c #E0F6DA",
+") c #D3F4CC",
+"! c #CEF3C7",
+"~ c #C9F1C1",
+"{ c #B8EDAF",
+"] c #E3F8DC",
+"^ c #DAF5D1",
+"/ c #D6F4CC",
+"( c #D5F4CC",
+"_ c #D1F3C9",
+": c #C9F0C0",
+"< c #BEEDB3",
+"[ c #B6EDAD",
+"} c #ABE9A1",
+"| c #93DF8B",
+"1 c #E1F6DA",
+"2 c #CCF0C2",
+"3 c #CAF0C0",
+"4 c #C6F0BC",
+"5 c #BEEDB5",
+"6 c #B5ECAC",
+"7 c #ACEAA2",
+"8 c #A7E89E",
+"9 c #94E08C",
+"0 c #78D373",
+"a c #DFF6D8",
+"b c #D4F3CB",
+"c c #C5EFBB",
+"d c #BCEDB1",
+"e c #B2EBA9",
+"f c #A9E8A0",
+"g c #A0E696",
+"h c #88DC82",
+"i c #68CC68",
+"j c #E0F6D8",
+"k c #A1E698",
+"l c #94E28C",
+"m c #7FD87A",
+"n c #64C464",
+"o c #CDF1C5",
+"p c #C2EEB8",
+"q c #B8ECAE",
+"r c #B1EAA6",
+"s c #A5E89C",
+"t c #86DD81",
+"u c #75D270",
+"v c #5EBE5E",
+"w c #ABE7A1",
+"x c #99E391",
+"y c #93E18B",
+"z c #88DE84",
+"A c #71D16F",
+"B c #63C763",
+"C c #59B35B",
+"D c #CAF1C1",
+"E c #9EE395",
+"F c #82DA7E",
+"G c #80D87C",
+"H c #80D97B",
+"I c #7CD878",
+"J c #78D573",
+"K c #6ED06E",
+"L c #65C765",
+"M c #53A355",
+" ",
+" ",
+" .... ",
+" .+@@#. ",
+" .$%&*%=...... ",
+" .-;>,>,>')!~{.",
+" .]^/(/(_:<[}|.",
+" .1(2334567890.",
+" .ab34cde7fghi.",
+" .jb:cde7fklmn.",
+" .aopqr}sgltuv.",
+" .^5wk*xyzmABC.",
+" .DEFGHIJKLvCM.",
+" ............ ",
+" ",
+" "};
diff --git a/src/pixmaps/inbox.xpm b/src/pixmaps/inbox.xpm
new file mode 100644
index 00000000..321776e4
--- /dev/null
+++ b/src/pixmaps/inbox.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * inbox_xpm[] = {
+"16 16 6 1",
+" c None",
+". c #020204",
+"+ c #A9A9AA",
+"@ c #F3F3F1",
+"# c #636364",
+"$ c #920A0C",
+" $ ",
+" $$$ . ",
+" $$$ ..+. ",
+" $$$+$+@. ",
+" ..$$$$#@@. ",
+"..+++$$$+#@@. ",
+".@.+$$$$@@#@@. ",
+".@@.++@@@@@#@@. ",
+".@@@.++@@@@@#@+.",
+" .@@@.+++@@@@#@.",
+" .@@@.++@@@@+#.",
+" .@@@.++@++++.",
+" .@@+#++++.. ",
+" .@@.++.. ",
+" .@... ",
+" .. "};
diff --git a/src/pixmaps/interface.xpm b/src/pixmaps/interface.xpm
new file mode 100644
index 00000000..8a4158ec
--- /dev/null
+++ b/src/pixmaps/interface.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static char * interface_xpm[] = {
+"16 16 5 1",
+" c None",
+". c #B6B6B6",
+"+ c #000000",
+"@ c #726B6B",
+"# c #FEF925",
+" . ",
+" + @@",
+" + @ ",
+" + @ ",
+" + +++++ @ ",
+" + +#.#.+ @ ",
+" + ++++.#.#.+ @ ",
+" + +#.#.#+ @ ",
+" + +.#.#.+@ ",
+" + +#.#.#+ ",
+" + ++++.#.#.+ ",
+" + +#.#.+ ",
+" + +++++ ",
+" + ",
+" + ",
+" "};
diff --git a/src/pixmaps/jpilot.xpm b/src/pixmaps/jpilot.xpm
new file mode 100644
index 00000000..b72225cf
--- /dev/null
+++ b/src/pixmaps/jpilot.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * jpilot_xpm[] = {
+"16 16 6 1",
+" c None",
+". c #000000",
+"+ c #848587",
+"@ c #34991E",
+"# c #F8FAF6",
+"$ c #97989B",
+" ",
+" ........... ",
+" .+++++++++. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+@@@@@@@+. ",
+" .+++++++++. ",
+" .++++#++++. ",
+" .+#+#$#+#+. ",
+" .++++#++++. ",
+" ........... ",
+" "};
diff --git a/src/pixmaps/ldap.xpm b/src/pixmaps/ldap.xpm
new file mode 100644
index 00000000..c1e61e44
--- /dev/null
+++ b/src/pixmaps/ldap.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * ldap_xpm[] = {
+"16 16 6 1",
+" c None",
+". c #000000",
+"+ c #E3DAB1",
+"@ c #606060",
+"# c #A0A0A0",
+"$ c #F6210A",
+" ",
+" . ........ ",
+" . .++++++. ",
+" . .@#@#@#. ",
+" . .#@#@#@. ",
+" . .++++++. ",
+" @.@ .++++++. ",
+" @......++++++. ",
+" @.@ .++++++. ",
+" . .++++++. ",
+" . .++++++. ",
+" . .+++$$+. ",
+" . .+++$$+. ",
+" . .++++++. ",
+" . ........ ",
+" "};
diff --git a/src/pixmaps/linewrap.xpm b/src/pixmaps/linewrap.xpm
new file mode 100644
index 00000000..bce4af2b
--- /dev/null
+++ b/src/pixmaps/linewrap.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * linewrap_xpm[] = {
+"24 24 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ............ . ",
+" . . ",
+" ............ .... ",
+" . ",
+" ............ ",
+" ",
+" ..... ",
+" ",
+" ............ . ",
+" . . ",
+" ............ .... ",
+" . ",
+" ..... ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/mail.xpm b/src/pixmaps/mail.xpm
new file mode 100644
index 00000000..bf4766c0
--- /dev/null
+++ b/src/pixmaps/mail.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * mail_xpm[] = {
+"13 10 28 1",
+" c None",
+". c #000000",
+"+ c #474747",
+"@ c #F5F5F5",
+"# c #323232",
+"$ c #F4F4F4",
+"% c #C1C1C1",
+"& c #EAEAEA",
+"* c #EBEBEB",
+"= c #AAAAAA",
+"- c #3D3D3D",
+"; c #EFEFEF",
+"> c #F3F3F3",
+", c #3F3F3F",
+"' c #464646",
+") c #BDBDBD",
+"! c #D6D6D6",
+"~ c #A0A0A0",
+"{ c #F2F2F2",
+"] c #BABABA",
+"^ c #E9E9E9",
+"/ c #8C8C8C",
+"( c #BFBFBF",
+"_ c #DADADA",
+": c #CDCDCD",
+"< c #A7A7A7",
+"[ c #D3D3D3",
+"} c #282828",
+" ........... ",
+".+@@@@@@@@@#.",
+".@+@@@$@$$+%.",
+".@&+@@$@$+*=.",
+".@@@+@@@-;**.",
+".>@;+,@'+@>).",
+".@$+@@+@>+!~.",
+".@+$@@{$>]#^.",
+".+~~/(]_:<[}.",
+" ........... "};
diff --git a/src/pixmaps/mark.xpm b/src/pixmaps/mark.xpm
new file mode 100644
index 00000000..de17d9c9
--- /dev/null
+++ b/src/pixmaps/mark.xpm
@@ -0,0 +1,16 @@
+/* XPM */
+static char * mark_xpm[] = {
+"10 10 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ..",
+" .+.",
+" .++.",
+".. .+++.",
+".+. .+++. ",
+".++.+++. ",
+".+++++. ",
+" .+++. ",
+" .+. ",
+" . "};
diff --git a/src/pixmaps/new.xpm b/src/pixmaps/new.xpm
new file mode 100644
index 00000000..74992613
--- /dev/null
+++ b/src/pixmaps/new.xpm
@@ -0,0 +1,62 @@
+/* XPM */
+static char * new_xpm[] = {
+"13 10 49 1",
+" c None",
+". c #000000",
+"+ c #D52828",
+"@ c #F5CECD",
+"# c #F5CFCE",
+"$ c #F4CECB",
+"% c #F4CDCB",
+"& c #9C1D1D",
+"* c #F4CDC9",
+"= c #F3C8C2",
+"- c #F3C8C4",
+"; c #F4CAC7",
+"> c #E5837C",
+", c #EFB6AE",
+"' c #F3CCC6",
+") c #F3CAC2",
+"! c #F3CBC6",
+"~ c #F3CBC4",
+"{ c #EFB7B0",
+"] c #E06F63",
+"^ c #F5CECE",
+"/ c #F0BFB7",
+"( c #F3C7C2",
+"_ c #F0C0B5",
+": c #F3CCC4",
+"< c #F2C6BF",
+"[ c #E37E70",
+"} c #F4CDC7",
+"| c #F3CBC2",
+"1 c #F2CAC1",
+"2 c #F1C6BA",
+"3 c #E89789",
+"4 c #DE6255",
+"5 c #F3CAC4",
+"6 c #F0C3B7",
+"7 c #F2C7BF",
+"8 c #E27A69",
+"9 c #A61F1F",
+"0 c #EEB4AD",
+"a c #DF685C",
+"b c #DE6559",
+"c c #DA5345",
+"d c #E37F6E",
+"e c #E17968",
+"f c #E89C8D",
+"g c #E58C7E",
+"h c #DF6A5A",
+"i c #E8968B",
+"j c #771616",
+" ........... ",
+".+@#@$%@@@%&.",
+".@+$*#=$-;+>.",
+".%,+*')!~+{].",
+".^%*+$'*+/{{.",
+".(@_++:++)<[.",
+".@=+}|+12+34.",
+".@+5'~677890.",
+".+abcdefghij.",
+" ........... "};
diff --git a/src/pixmaps/offline.xpm b/src/pixmaps/offline.xpm
new file mode 100644
index 00000000..baa36a49
--- /dev/null
+++ b/src/pixmaps/offline.xpm
@@ -0,0 +1,228 @@
+/* XPM */
+static char * offline_xpm[] = {
+"26 12 213 2",
+" c None",
+". c #FFFFFF",
+"+ c #FFFFCC",
+"@ c #FFFF99",
+"# c #FFFF66",
+"$ c #FFFF33",
+"% c #FFFF00",
+"& c #FFCCFF",
+"* c #FFCCCC",
+"= c #FFCC99",
+"- c #FFCC66",
+"; c #FFCC33",
+"> c #FFCC00",
+", c #FF99FF",
+"' c #FF99CC",
+") c #FF9999",
+"! c #FF9966",
+"~ c #FF9933",
+"{ c #FF9900",
+"] c #FF66FF",
+"^ c #FF66CC",
+"/ c #FF6699",
+"( c #FF6666",
+"_ c #FF6633",
+": c #FF6600",
+"< c #FF33FF",
+"[ c #FF33CC",
+"} c #FF3399",
+"| c #FF3366",
+"1 c #FF3333",
+"2 c #FF3300",
+"3 c #FF00FF",
+"4 c #FF00CC",
+"5 c #FF0099",
+"6 c #FF0066",
+"7 c #FF0033",
+"8 c #FF0000",
+"9 c #CCFFFF",
+"0 c #CCFFCC",
+"a c #CCFF99",
+"b c #CCFF66",
+"c c #CCFF33",
+"d c #CCFF00",
+"e c #CCCCFF",
+"f c #CCCCCC",
+"g c #CCCC99",
+"h c #CCCC66",
+"i c #CCCC33",
+"j c #CCCC00",
+"k c #CC99FF",
+"l c #CC99CC",
+"m c #CC9999",
+"n c #CC9966",
+"o c #CC9933",
+"p c #CC9900",
+"q c #CC66FF",
+"r c #CC66CC",
+"s c #CC6699",
+"t c #CC6666",
+"u c #CC6633",
+"v c #CC6600",
+"w c #CC33FF",
+"x c #CC33CC",
+"y c #CC3399",
+"z c #CC3366",
+"A c #CC3333",
+"B c #CC3300",
+"C c #CC00FF",
+"D c #CC00CC",
+"E c #CC0099",
+"F c #CC0066",
+"G c #CC0033",
+"H c #CC0000",
+"I c #99FFFF",
+"J c #99FFCC",
+"K c #99FF99",
+"L c #99FF66",
+"M c #99FF33",
+"N c #99FF00",
+"O c #99CCFF",
+"P c #99CCCC",
+"Q c #99CC99",
+"R c #99CC66",
+"S c #99CC33",
+"T c #99CC00",
+"U c #9999FF",
+"V c #9999CC",
+"W c #999999",
+"X c #999966",
+"Y c #999933",
+"Z c #999900",
+"` c #9966FF",
+" . c #9966CC",
+".. c #996699",
+"+. c #996666",
+"@. c #996633",
+"#. c #996600",
+"$. c #9933FF",
+"%. c #9933CC",
+"&. c #993399",
+"*. c #993366",
+"=. c #993333",
+"-. c #993300",
+";. c #9900FF",
+">. c #9900CC",
+",. c #990099",
+"'. c #990066",
+"). c #990033",
+"!. c #990000",
+"~. c #66FFFF",
+"{. c #66FFCC",
+"]. c #66FF99",
+"^. c #66FF66",
+"/. c #66FF33",
+"(. c #66FF00",
+"_. c #66CCFF",
+":. c #66CCCC",
+"<. c #66CC99",
+"[. c #66CC66",
+"}. c #66CC33",
+"|. c #66CC00",
+"1. c #6699FF",
+"2. c #6699CC",
+"3. c #669999",
+"4. c #669966",
+"5. c #669933",
+"6. c #669900",
+"7. c #6666FF",
+"8. c #6666CC",
+"9. c #666699",
+"0. c #666666",
+"a. c #666633",
+"b. c #666600",
+"c. c #6633FF",
+"d. c #6633CC",
+"e. c #663399",
+"f. c #663366",
+"g. c #663333",
+"h. c #663300",
+"i. c #6600FF",
+"j. c #6600CC",
+"k. c #660099",
+"l. c #660066",
+"m. c #660033",
+"n. c #660000",
+"o. c #33FFFF",
+"p. c #33FFCC",
+"q. c #33FF99",
+"r. c #33FF66",
+"s. c #33FF33",
+"t. c #33FF00",
+"u. c #33CCFF",
+"v. c #33CCCC",
+"w. c #33CC99",
+"x. c #33CC66",
+"y. c #33CC33",
+"z. c #33CC00",
+"A. c #3399FF",
+"B. c #3399CC",
+"C. c #339999",
+"D. c #339966",
+"E. c #339933",
+"F. c #339900",
+"G. c #3366FF",
+"H. c #3366CC",
+"I. c #336699",
+"J. c #336666",
+"K. c #336633",
+"L. c #336600",
+"M. c #3333FF",
+"N. c #3333CC",
+"O. c #333399",
+"P. c #333366",
+"Q. c #333333",
+"R. c #333300",
+"S. c #3300FF",
+"T. c #3300CC",
+"U. c #330099",
+"V. c #330066",
+"W. c #330033",
+"X. c #330000",
+"Y. c #00FFFF",
+"Z. c #00FFCC",
+"`. c #00FF99",
+" + c #00FF66",
+".+ c #00FF33",
+"++ c #00FF00",
+"@+ c #00CCFF",
+"#+ c #00CCCC",
+"$+ c #00CC99",
+"%+ c #00CC66",
+"&+ c #00CC33",
+"*+ c #00CC00",
+"=+ c #0099FF",
+"-+ c #0099CC",
+";+ c #009999",
+">+ c #009966",
+",+ c #009933",
+"'+ c #009900",
+")+ c #0066FF",
+"!+ c #0066CC",
+"~+ c #006699",
+"{+ c #006666",
+"]+ c #006633",
+"^+ c #006600",
+"/+ c #0033FF",
+"(+ c #0033CC",
+"_+ c #003399",
+":+ c #003366",
+"<+ c #003333",
+"[+ c #003300",
+"}+ c #0000FF",
+"|+ c #0000CC",
+" ",
+" P.P.P.P.P. ",
+" P.. e |+e |+ P.P.P.P. ",
+" P.e U P.8.|+ P.. U P. ",
+" P.P.U U P.e |+ P.|+e U P.P. ",
+"P.P.P.P.P.e P.U U P.8.|+ |+U U P.e P.P.P.P.",
+"U U U U P.U P.U U P.e |+ P.|+U U P.U P.8.8.8.",
+"P.P.P.P.P.8.P.U U P.8.|+ |+U U P.8.P.P.P.P.",
+" P.P.U U P.e |+ P.|+U U P.P. ",
+" P.U U P.P.|+ P.8.8.P. ",
+" P.8.8.P.W P. P.P.P.P. ",
+" P.P.P.P.P. "};
diff --git a/src/pixmaps/online.xpm b/src/pixmaps/online.xpm
new file mode 100644
index 00000000..ed508651
--- /dev/null
+++ b/src/pixmaps/online.xpm
@@ -0,0 +1,232 @@
+/* XPM */
+static char * online_xpm[] = {
+"26 12 217 2",
+" c None",
+". c #FFFFFF",
+"+ c #FFFFCC",
+"@ c #FFFF99",
+"# c #FFFF66",
+"$ c #FFFF33",
+"% c #FFFF00",
+"& c #FFCCFF",
+"* c #FFCCCC",
+"= c #FFCC99",
+"- c #FFCC66",
+"; c #FFCC33",
+"> c #FFCC00",
+", c #FF99FF",
+"' c #FF99CC",
+") c #FF9999",
+"! c #FF9966",
+"~ c #FF9933",
+"{ c #FF9900",
+"] c #FF66FF",
+"^ c #FF66CC",
+"/ c #FF6699",
+"( c #FF6666",
+"_ c #FF6633",
+": c #FF6600",
+"< c #FF33FF",
+"[ c #FF33CC",
+"} c #FF3399",
+"| c #FF3366",
+"1 c #FF3333",
+"2 c #FF3300",
+"3 c #FF00FF",
+"4 c #FF00CC",
+"5 c #FF0099",
+"6 c #FF0066",
+"7 c #FF0033",
+"8 c #FF0000",
+"9 c #CCFFFF",
+"0 c #CCFFCC",
+"a c #CCFF99",
+"b c #CCFF66",
+"c c #CCFF33",
+"d c #CCFF00",
+"e c #CCCCFF",
+"f c #CCCCCC",
+"g c #CCCC99",
+"h c #CCCC66",
+"i c #CCCC33",
+"j c #CCCC00",
+"k c #CC99FF",
+"l c #CC99CC",
+"m c #CC9999",
+"n c #CC9966",
+"o c #CC9933",
+"p c #CC9900",
+"q c #CC66FF",
+"r c #CC66CC",
+"s c #CC6699",
+"t c #CC6666",
+"u c #CC6633",
+"v c #CC6600",
+"w c #CC33FF",
+"x c #CC33CC",
+"y c #CC3399",
+"z c #CC3366",
+"A c #CC3333",
+"B c #CC3300",
+"C c #CC00FF",
+"D c #CC00CC",
+"E c #CC0099",
+"F c #CC0066",
+"G c #CC0033",
+"H c #CC0000",
+"I c #99FFFF",
+"J c #99FFCC",
+"K c #99FF99",
+"L c #99FF66",
+"M c #99FF33",
+"N c #99FF00",
+"O c #99CCFF",
+"P c #99CCCC",
+"Q c #99CC99",
+"R c #99CC66",
+"S c #99CC33",
+"T c #99CC00",
+"U c #9999FF",
+"V c #9999CC",
+"W c #999999",
+"X c #999966",
+"Y c #999933",
+"Z c #999900",
+"` c #9966FF",
+" . c #9966CC",
+".. c #996699",
+"+. c #996666",
+"@. c #996633",
+"#. c #996600",
+"$. c #9933FF",
+"%. c #9933CC",
+"&. c #993399",
+"*. c #993366",
+"=. c #993333",
+"-. c #993300",
+";. c #9900FF",
+">. c #9900CC",
+",. c #990099",
+"'. c #990066",
+"). c #990033",
+"!. c #990000",
+"~. c #66FFFF",
+"{. c #66FFCC",
+"]. c #66FF99",
+"^. c #66FF66",
+"/. c #66FF33",
+"(. c #66FF00",
+"_. c #66CCFF",
+":. c #66CCCC",
+"<. c #66CC99",
+"[. c #66CC66",
+"}. c #66CC33",
+"|. c #66CC00",
+"1. c #6699FF",
+"2. c #6699CC",
+"3. c #669999",
+"4. c #669966",
+"5. c #669933",
+"6. c #669900",
+"7. c #6666FF",
+"8. c #6666CC",
+"9. c #666699",
+"0. c #666666",
+"a. c #666633",
+"b. c #666600",
+"c. c #6633FF",
+"d. c #6633CC",
+"e. c #663399",
+"f. c #663366",
+"g. c #663333",
+"h. c #663300",
+"i. c #6600FF",
+"j. c #6600CC",
+"k. c #660099",
+"l. c #660066",
+"m. c #660033",
+"n. c #660000",
+"o. c #33FFFF",
+"p. c #33FFCC",
+"q. c #33FF99",
+"r. c #33FF66",
+"s. c #33FF33",
+"t. c #33FF00",
+"u. c #33CCFF",
+"v. c #33CCCC",
+"w. c #33CC99",
+"x. c #33CC66",
+"y. c #33CC33",
+"z. c #33CC00",
+"A. c #3399FF",
+"B. c #3399CC",
+"C. c #339999",
+"D. c #339966",
+"E. c #339933",
+"F. c #339900",
+"G. c #3366FF",
+"H. c #3366CC",
+"I. c #336699",
+"J. c #336666",
+"K. c #336633",
+"L. c #336600",
+"M. c #3333FF",
+"N. c #3333CC",
+"O. c #333399",
+"P. c #333366",
+"Q. c #333333",
+"R. c #333300",
+"S. c #3300FF",
+"T. c #3300CC",
+"U. c #330099",
+"V. c #330066",
+"W. c #330033",
+"X. c #330000",
+"Y. c #00FFFF",
+"Z. c #00FFCC",
+"`. c #00FF99",
+" + c #00FF66",
+".+ c #00FF33",
+"++ c #00FF00",
+"@+ c #00CCFF",
+"#+ c #00CCCC",
+"$+ c #00CC99",
+"%+ c #00CC66",
+"&+ c #00CC33",
+"*+ c #00CC00",
+"=+ c #0099FF",
+"-+ c #0099CC",
+";+ c #009999",
+">+ c #009966",
+",+ c #009933",
+"'+ c #009900",
+")+ c #0066FF",
+"!+ c #0066CC",
+"~+ c #006699",
+"{+ c #006666",
+"]+ c #006633",
+"^+ c #006600",
+"/+ c #0033FF",
+"(+ c #0033CC",
+"_+ c #003399",
+":+ c #003366",
+"<+ c #003333",
+"[+ c #003300",
+"}+ c #0000FF",
+"|+ c #0000CC",
+"1+ c #000099",
+"2+ c #000066",
+"3+ c #000033",
+"4+ c #000000",
+" ",
+" 8.P.P. ",
+" 8.. e P.8.8.P. ",
+" 8.U e }+e . e P. ",
+" P.P.U e }+U U U P.P. ",
+"8.8.8.8.8.8.8.8.8.e P.U e }+U U U P.e 4+P.P.P.P.P.P.",
+"e e U e U U U U P.U P.U e }+U U U P.U P.U U U U U U ",
+"P.P.P.P.P.P.P.P.P.8.P.U e }+U U U P.8.P.P.P.P.P.P.P.",
+" P.P.U e }+8.8.8.P.P. ",
+" P.U 8.}+8.8.8.P. ",
+" 4+8.8.P.P.P.P. ",
+" P.P.P. "};
diff --git a/src/pixmaps/outbox.xpm b/src/pixmaps/outbox.xpm
new file mode 100644
index 00000000..70944f13
--- /dev/null
+++ b/src/pixmaps/outbox.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * outbox_xpm[] = {
+"16 16 8 1",
+" c None",
+". c #020204",
+"+ c #99999B",
+"@ c #E5E5E3",
+"# c #024A6C",
+"$ c #626263",
+"% c #FDFDFB",
+"& c #B4B4B4",
+" ",
+" . ####",
+" ..+. ###",
+" ..+++%. ####",
+" ..++++$%%### #",
+"..++++$$&$### ",
+".%.+$$&@@###%. ",
+".%%.+&@@@@#$%%. ",
+".%%%.&&@@@@@$%+.",
+" .%%%.&&@@@@@$@.",
+" .%%%.&&@@@@&$.",
+" .%%%.&@@&&&+.",
+" .%%+$&&&+.. ",
+" .%@.&+.. ",
+" .%... ",
+" .. "};
diff --git a/src/pixmaps/replied.xpm b/src/pixmaps/replied.xpm
new file mode 100644
index 00000000..e16ab028
--- /dev/null
+++ b/src/pixmaps/replied.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static char * replied_xpm[] = {
+"10 10 11 1",
+" c None",
+". c #000000",
+"+ c #E0D8B0",
+"@ c #B39C82",
+"# c #BCA488",
+"$ c #C5AC8F",
+"% c #AA947B",
+"& c #A18D75",
+"* c #98856E",
+"= c #8F7D68",
+"- c #867561",
+" . ",
+" .. .+. ",
+" .@..+++.",
+" .#@......",
+".$#@%&*=-.",
+".$#@%&*=. ",
+" .#@.... ",
+" .@. ",
+" .. ",
+" "};
diff --git a/src/pixmaps/stock_add_16.xpm b/src/pixmaps/stock_add_16.xpm
new file mode 100644
index 00000000..f068b153
--- /dev/null
+++ b/src/pixmaps/stock_add_16.xpm
@@ -0,0 +1,35 @@
+/* XPM */
+static char * stock_add_16_xpm[] = {
+"16 16 16 1",
+" c None",
+". c #000100",
+"+ c #4D6076",
+"@ c #5C6E85",
+"# c #5F7289",
+"$ c #607794",
+"% c #6B829F",
+"& c #7689A1",
+"* c #7890AD",
+"= c #859CB9",
+"- c #939EAC",
+"; c #93A6BE",
+"> c #A0AFC2",
+", c #A9B7C8",
+"' c #B9C4D2",
+") c #C9D4DF",
+" ... ",
+" .)'-. ",
+" .'*#. ",
+" .'*#. ",
+" .'*#. ",
+" .....'*@..... ",
+".,>>>>;*=,'''-. ",
+".)***********$. ",
+".&####**%#####. ",
+" .....=*$..... ",
+" .'*#. ",
+" .'*#. ",
+" .'*#. ",
+" .>#+. ",
+" ... ",
+" "};
diff --git a/src/pixmaps/stock_close.xpm b/src/pixmaps/stock_close.xpm
new file mode 100644
index 00000000..88c28568
--- /dev/null
+++ b/src/pixmaps/stock_close.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * stock_close_xpm[] = {
+"24 24 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . .. ",
+" .. .... ",
+" .. ... ",
+" ..... ",
+" ... ",
+" .... ",
+" ...... ",
+" .. .... ",
+" .. .... ",
+" . .. ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_dialog_error_48.xpm b/src/pixmaps/stock_dialog_error_48.xpm
new file mode 100644
index 00000000..521bf278
--- /dev/null
+++ b/src/pixmaps/stock_dialog_error_48.xpm
@@ -0,0 +1,115 @@
+/* XPM */
+static char * stock_dialog_error_48_xpm[] = {
+"48 48 64 1",
+" c None",
+". c #590304",
+"+ c #371515",
+"@ c #750002",
+"# c #471514",
+"$ c #6C0904",
+"% c #800100",
+"& c #58150E",
+"* c #66140D",
+"= c #950702",
+"- c #A40204",
+"; c #5D231F",
+"> c #522824",
+", c #463736",
+"' c #A90E08",
+") c #662C1F",
+"! c #8B1F0C",
+"~ c #AF1604",
+"{ c #A91C0A",
+"] c #6C3530",
+"^ c #543F3D",
+"/ c #B9160A",
+"( c #B31C07",
+"_ c #683B35",
+": c #863022",
+"< c #B12411",
+"[ c #C01F10",
+"} c #C52514",
+"| c #774840",
+"1 c #BF2E14",
+"2 c #CA2B10",
+"3 c #6E5149",
+"4 c #D13216",
+"5 c #CB371A",
+"6 c #795D58",
+"7 c #D8391B",
+"8 c #835C54",
+"9 c #706562",
+"0 c #95584D",
+"a c #BE463E",
+"b c #DD3D1E",
+"c c #DF3F18",
+"d c #D8482A",
+"e c #886C68",
+"f c #CE513C",
+"g c #936D66",
+"h c #C65951",
+"i c #AF6C5B",
+"j c #C56456",
+"k c #E55F3F",
+"l c #A6786F",
+"m c #D46F63",
+"n c #A6837A",
+"o c #E66D50",
+"p c #C37F6F",
+"q c #E5725B",
+"r c #C08877",
+"s c #E5836D",
+"t c #C0C2BE",
+"u c #DADCD9",
+"v c #E2E4E1",
+"w c #EBEDEA",
+"x c #F0F2EF",
+"y c #F4F6F3",
+" ",
+" ",
+" ",
+" ",
+" ",
+" l8|||||8g ",
+" l||8imssmmj00]| ",
+" l38psokdd777bddf:)| ",
+" 38pskbb777774444251:&g ",
+" r3lskccbc777444444222}<*| ",
+" n3pqbccb7777744444}22}2}1$_ ",
+" r3rkbcc77777444444222}2}}[($| ",
+" 3roccc77774444442}22}}}}[1[<$e ",
+" 6locbbb7777444444222}}2}1[[[[{. ",
+" n8scbb777774444442}2}}}}[[[[(/(=_ ",
+" 3pbbb777744444452222}}2[[[[(///'$ ",
+" neocbb777444444}2}2}}}}[[[[[/((//=_ ",
+" 6pbb77777444422222}2}}[1[[[/(/((/{* ",
+" 6ob777774444422}2}21[[[[[[/(/((/~'%e ",
+" ngb777511111<111<<<<<<{{{{{{{{'(<~~=_ ",
+" gi77771twwvvvvvvvvvuvuuuvuuuuv<~~''{) ",
+" 6j77775uyyyyyyyyyyyyyxxxxxxxwya'~~'{* ",
+" 6f74445uyyyyyyyyyyxxxxxxxwxwwyh''''-$ ",
+" 6d74445uyyyyyyyxyxxxxxwwwwwwwyh''''-@ ",
+" 8574442uyyyyyxxxxxxxwwwwwwwwwxh~''-=$ ",
+" 8144441uyyyxxxxxwxwwwwwwwwwwwyh'''-=* ",
+" 8<44425vyyyyyyyyyyxyxxxxxxxxxxa'''=%; ",
+" g:444}5fqmsmmmmmmmmmhmhjhhhhha'''-=@> ",
+" :44222}}}}1[[[(//((((~'~'''''----%$^ ",
+" )1222}21}[[[([(/(((//~'~~'''---{=%.9 ",
+" 8!2}}2}[[1[([(/((//~~~~'''''----%@+ ",
+" *12}1}[[[([/(//((~'~''''''--{-=%$, ",
+" |!2}}[1[[[(/(/((/~~'''''-----=%@# ",
+" &<[1[1[1//(/((~~''''''------=%., ",
+" g*<[[[//(////~'~~''''------=%$+ ",
+" |$((//(///(~''~''''{-----=%$+ ",
+" _$</(/<(/'~~'''''------=@$+ ",
+" _${/(//'~''~'''--{--=%@.+ ",
+" e.='/'~~''''------=%$.+ ",
+" _$='''''''----=%$.#, ",
+" n_*%%=---==%$$.+, ",
+" 6_;&...&&#^9 ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_dialog_info_48.xpm b/src/pixmaps/stock_dialog_info_48.xpm
new file mode 100644
index 00000000..5440906d
--- /dev/null
+++ b/src/pixmaps/stock_dialog_info_48.xpm
@@ -0,0 +1,115 @@
+/* XPM */
+static char * stock_dialog_info_48_xpm[] = {
+"48 48 64 1",
+" c None",
+". c #171815",
+"+ c #262724",
+"@ c #323332",
+"# c #3A341C",
+"$ c #3E403F",
+"% c #4C4C4A",
+"& c #5A595A",
+"* c #70643B",
+"= c #686968",
+"- c #85794B",
+"; c #787978",
+"> c #908252",
+", c #838587",
+"' c #A49356",
+") c #A5976D",
+"! c #96989E",
+"~ c #979B97",
+"{ c #BBA763",
+"] c #A5A7AF",
+"^ c #A7AAA7",
+"/ c #B3B196",
+"( c #C2B077",
+"_ c #BFB38B",
+": c #C9B56C",
+"< c #B4B3BB",
+"[ c #B9B9B6",
+"} c #D9C776",
+"| c #C1C5D3",
+"1 c #D2C6A7",
+"2 c #C7C7C1",
+"3 c #D4C79E",
+"4 c #D6C895",
+"5 c #C7C6CA",
+"6 c #CAC9B9",
+"7 c #CCCAB4",
+"8 c #DBCB91",
+"9 c #D2D6D0",
+"0 c #D5D5E0",
+"a c #EBDA91",
+"b c #D2DAF0",
+"c c #D9DADE",
+"d c #EDDEA3",
+"e c #D8DCEC",
+"f c #D3DFED",
+"g c #D5E0E8",
+"h c #E8DEC0",
+"i c #DEDBED",
+"j c #EFE3B6",
+"k c #D2EAE9",
+"l c #D8E7EA",
+"m c #DCE5EE",
+"n c #E0E3F3",
+"o c #F0E5C5",
+"p c #E9E4E2",
+"q c #E5E6F1",
+"r c #E6EAEB",
+"s c #F4EBD2",
+"t c #EBECF7",
+"u c #F1EEF3",
+"v c #F6F3F8",
+"w c #F9F6EA",
+"x c #FBFAFE",
+"y c #FEFFFC",
+" ",
+" 9[]~!~!^[ ",
+" [!]50qne0<!;, ",
+" [!5tttqqnnnnni<=; ",
+" ~<ttututtqqqnniie!% ",
+" !0uvvxxvttqqnnneiii|% ",
+" !cuvxxxxvttttqnnieeii|% ",
+" ~cvvxxyxxvuttqqqnnneeee|@ ",
+" [[vvxxxxxxtuuttqqineeeeie]% ",
+" !tvxxxxyxvvtttttqnieieebeb& ",
+" [5vvxxxxxyxvvttttnqnieeeeeb]% ",
+" ^uvvxxxxxxvvvvvttqnnnieeeebb$ ",
+" p^uvvxxxyyxyxvvvutttnneeeeeee,; ",
+" 55tvvxxxxxxxxvvvvuutqnqeeeeee]& ",
+" [quvvvxxxxxxxxvvvvuttqneeeffb|@ ",
+" <tuvvvxxyxxxyxxxvvvtttqnnffebi+ ",
+" <ttutvxxxxxxyxxyxyvvttnnfgffeb+ ",
+" ^qttuvxvxxyyxyvyvxyrptqqmmgfbb+ ",
+" <0ttttvvvrxxyvyvyvvvutqqlllfe|@ ",
+" 5<tttturvvrvvvvvvtuptqqmlllgf<$ ",
+" 9!ttttuuvv5vvvtutttpqqmllklff,= ",
+" ,qqmttrtt5ttuttttu9qmmlkklff@ ",
+" !|qmrrrutrttqqtqqm^qllkkklf]+ ",
+" ;qqmrrrmr9mmqmmmm^mlkkkkff% ",
+" ~]qqrlllr^mmmggg26glkkkgf!+ ",
+" &0nmllll^mggggm6glkkkgf|. ",
+" &0nnmmm69mlmgl~gkkkgfb@ ",
+" %|eeegg^9999l~lgggf|@ ",
+" %]e0<[6[2677672cf!. ",
+" =&7[<[[5266666/%+ ",
+" ,o11622267113'+ ",
+" ^dowwwssssj4{*+ ",
+" ^dddddaa}}}:'>+ ",
+" <wsd44((:{(_4'+ ",
+" ^ajwyysojjh3{-+ ",
+" ]j8djdda}}::)>+ ",
+" ^soj43_({{'14>+ ",
+" ]ajwywwsohh4{-+ ",
+" ^j8jjd8}:::{'*+ ",
+" <ssh33({{''__>+ ",
+" [-8swwoojh3('.$ ",
+" %(84d8:::{'#. ",
+" +%)))>-*##. ",
+" @+,;+.. ",
+" $==+. ",
+" &@@ ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_dialog_question_48.xpm b/src/pixmaps/stock_dialog_question_48.xpm
new file mode 100644
index 00000000..45b24a9e
--- /dev/null
+++ b/src/pixmaps/stock_dialog_question_48.xpm
@@ -0,0 +1,115 @@
+/* XPM */
+static char * stock_dialog_question_48_xpm[] = {
+"48 48 64 1",
+" c None",
+". c #161715",
+"+ c #1B1C1A",
+"@ c #272826",
+"# c #382621",
+"$ c #492A23",
+"% c #4E291F",
+"& c #333432",
+"* c #572A20",
+"= c #5B3429",
+"- c #423E3C",
+"; c #643125",
+"> c #573730",
+", c #773B2D",
+"' c #724136",
+") c #4F4F4C",
+"! c #7F3C30",
+"~ c #664740",
+"{ c #6D453C",
+"] c #85402F",
+"^ c #8C4635",
+"/ c #964936",
+"( c #5D5F5C",
+"_ c #78554C",
+": c #6E5953",
+"< c #8D4E3F",
+"[ c #875244",
+"} c #A14F3C",
+"| c #6B6B68",
+"1 c #AA5341",
+"2 c #7F6963",
+"3 c #856760",
+"4 c #AC5B46",
+"5 c #767572",
+"6 c #A06558",
+"7 c #B1604E",
+"8 c #967169",
+"9 c #B36855",
+"0 c #907B78",
+"a c #868582",
+"b c #B87262",
+"c c #A17F77",
+"d c #B67D70",
+"e c #969592",
+"f c #AE9089",
+"g c #AC9693",
+"h c #C28E82",
+"i c #A3A4A1",
+"j c #B79F96",
+"k c #C9A59C",
+"l c #B4B6B3",
+"m c #C8AFA7",
+"n c #C2C3C0",
+"o c #D7BDB5",
+"p c #C9CBC8",
+"q c #D1D3D0",
+"r c #DECEC9",
+"s c #D9DBD8",
+"t c #DFE1DE",
+"u c #E4E6E3",
+"v c #E8EAE7",
+"w c #ECEEEB",
+"x c #F1F3F0",
+"y c #F9FBF8",
+" ",
+" ",
+" ",
+" 8__>%*=>>===%___ ",
+" 8~=~__666bbb977444^^^,;*=~ ",
+" f={'6db94444711111111}1111}/,;%~ ",
+" 8>[6bdb4}<]],,]]]^^///}11111111}/,*> ",
+" {{6b97/]],]68fgjnnnnnnjmohh1111111}/,* ",
+" {[bb4/]][30nquwxyyyxxxxxxxxxxrod11111}/% ",
+" _[b9}]'3itxyyyxxxxxyxxxxxxxxxxxxxxob111}/% ",
+" >b7},8awyyxxxyxxxxxxxxxxxxxxxxxxwxwxrb1}/! ",
+" c_4},5lyxyxxxxxxxyyyyyyyxxxxwxxwwwwwwww71}]~ ",
+" _84][axxxxxxxxxxyxl)@++.@sxxwwwwwwwwwwvk11]{ ",
+" _d4]8nxxxxxxxxxxya+.+@&@.+lwwwwwwvwvwvvo11/* ",
+" 3d4,jpxxxxxwxxxyi&.@(|(&&+@twvvwvwvvvvvo41}% ",
+" 3d7,kpxxxwxxwxwy(++(wwwq-++(tvvvvvvvvvwk41^~ ",
+" 364,dpwwxxwwwwwy(+.5vwwx(++(qvvvvvvuuvwh11]~ ",
+" 8[7]<nwwwwwwwwwy(&.(vvwx|++(nvvuuuuuuvv711,: ",
+" g{7/,iwwwwwwvvvxl-.)vvxp).+5lvuuuuuutvo711,2 ",
+" =b1]fswvwvvvvvvwi5qvwx5@.)iquuttvtttvd91}; ",
+" >64]6nvvvvvvvvvuuuuwxe).+|itttvttttuv911]> ",
+" 3'7/!guvvvvvuuuuvuwxq)+.)etttttttttvo911,: ",
+" =b1,cnvuuuuuuuuutxt(&.&eptttttttstvd71/* ",
+" =64^[isuuuuttttttxi-.+eittttsttsstr911]> ",
+" 2{91,hivtttvtttttx5@.)astssssssssuhb1/;: ",
+" %61^[iptttttttttwa+..assssssssstrb71,$ ",
+" _{41,fitttttsttsst|@@isssssssssvhb1};) ",
+" %61/<inststsssssvneinsssssssstrd71]$ ",
+" 3{71]cisssssssssvxppqsqssqsssud91/,- ",
+" $61},epsssssssuw)&)lpqqqqsstm941]$ ",
+" 2{91^[iqsssssswe..@(lqqqqstr941/;- ",
+" $[11,cissqsqsve...(lqqqqsrd41/,# ",
+" %b11,0nqsqsqss)+-alqqqsth711,% ",
+" :;911[anqqqqqqnlelqqqstk911];& ",
+" ~'71}[anqqqqqnlnqpqttmb11/;# ",
+" $<711<0lqpnppqpqstsdb41/,# ",
+" $<711^8iqqqqqqstrbb41/,$ ",
+" $<411}<clqsssrh9b11},$ ",
+" $<111}/7cmmd97411},$ ",
+" >,}111111111111/;$ ",
+" 2*^}11111111},*> ",
+" :;^/}11}/]=> ",
+" :~*,;$>~ ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_dialog_warning_48.xpm b/src/pixmaps/stock_dialog_warning_48.xpm
new file mode 100644
index 00000000..d5b7f02a
--- /dev/null
+++ b/src/pixmaps/stock_dialog_warning_48.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char * stock_dialog_warning_48_xpm[] = {
+"48 48 32 1",
+" c None",
+". c #000100",
+"+ c #1C1406",
+"@ c #211806",
+"# c #1B1C1A",
+"$ c #2A2A26",
+"% c #372A0D",
+"& c #3E3E3A",
+"* c #533E13",
+"= c #565755",
+"- c #70561F",
+"; c #715F3A",
+"> c #7E611A",
+", c #717270",
+"' c #967122",
+") c #967B44",
+"! c #8B8D8A",
+"~ c #B58A2A",
+"{ c #B6944A",
+"] c #B09762",
+"^ c #CC9C2D",
+"/ c #CDA547",
+"( c #DEA833",
+"_ c #EAB039",
+": c #DCBB70",
+"< c #F5B939",
+"[ c #FABC34",
+"} c #F9C44F",
+"| c #F9CD6A",
+"1 c #FCD177",
+"2 c #F8D586",
+"3 c #F4D695",
+" ",
+" ",
+" ",
+" !=...#= ",
+" ,.........#! ",
+" .............# ",
+" &................ ",
+" #......+;{{*.......= ",
+" #.....+)221||~-......= ",
+" #.....)22}}<<[(^^%.....= ",
+" #....+:2|<<<[[<[_^(*.....! ",
+" =....+2|<[<[<[<[[[[(~'..... ",
+" ,....+:|<<[<}|||<<[<[_~-....# ",
+" .....]|<<[[<1322}[<[<[_~*....& ",
+" #....)|}<[<[|3;..-<[<[[<^~+....! ",
+" !....%2}<[<[<2;....-_<[<[<^'..... ",
+" .....:|<[<[[}3......(<<[<[<~*....& ",
+" ,....;1[[<[<<|3......^_[<[[<_~+.... ",
+" ....$2}<<[<[[|3......~_<[[<[[^'....& ",
+" ,....]}<[[[<[<|1......~<[<[<[<<^%.... ",
+" ....$1<[<<[[[<|1......^<[<<[[<[_'....& ",
+" !....]}[[<[<<[<}1%....%^<[[[<<[<[(%.... ",
+" #...@2<<[[[[[<[}|-....-([<<[[<[<[(~....= ",
+" ....;|[<[<<<[<[<|~....~(<[[<[<[[<<^%.... ",
+" ,....:}<[<[[[<[<<}|+..+^<<[<<[[<<<[('.... ",
+" #...%1<[[<<<<[[[[<}>..-^[[<[[[<[[<[(~....= ",
+" ....)|[[<[[[[[<<<[<<**^<<<[<[<[<<[<[_*.... ",
+" ....:}<[<[<<[<[[[<}}}(<<[[[<[[<[[<[<<'.... ",
+",...+2<<[<[[[<[<[<}|222}[<[<[<<[<[[<[<(.... ",
+"=...*|[[<[<[<[[<[<|:%.%~<[[<[[[<[<<[<[_*...= ",
+"=...)|<<[[<[<[<[<<2%...%^_<[<<<[[[<[[<_*...= ",
+"=...{}[[<<[<[<[[<<1.....^_[[[[[<<[<[<[_'...# ",
+"=...)}<<[[<[<[<[<<|%...%~<<[<[<[[<[<[[(>.... ",
+"=...%}[[<[<[<[[<[[</%.%'^[[<[<[<[[<[<<'*...& ",
+"!....{<<[[<[[<[[<<[<}(^(<<<[<[<[[<[[_~'+...& ",
+" .....>(_<[[<[<<[[<[<[[<[<[[[<[[<[_^''%...., ",
+" $.....+-~(<[<[[<[<[[<[[<[<<<[[<_^~>%...... ",
+" #.......%>'__<<<<<<<<<<(_((((~>%........, ",
+" #..........%*->>~^^^^^''>**...........= ",
+" =..................................#= ",
+" ,#.............................$=! ",
+" =#......................#$=, ",
+" &&$..........$$$== ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_down_arrow.xpm b/src/pixmaps/stock_down_arrow.xpm
new file mode 100644
index 00000000..e6adb7db
--- /dev/null
+++ b/src/pixmaps/stock_down_arrow.xpm
@@ -0,0 +1,100 @@
+/* XPM */
+static char * stock_down_arrow_xpm[] = {
+"24 24 73 1",
+" c None",
+". c #000000",
+"+ c #607C53",
+"@ c #688559",
+"# c #729063",
+"$ c #739364",
+"% c #739264",
+"& c #BEC2BB",
+"* c #BEC2BA",
+"= c #BFC3BB",
+"- c #BDC1B8",
+"; c #BBBFB7",
+"> c #B9BEB5",
+", c #718E62",
+"' c #89A67C",
+") c #8BAB7E",
+"! c #90AE83",
+"~ c #8FAE81",
+"{ c #E7E7E7",
+"] c #EAE9E9",
+"^ c #ECEBEB",
+"/ c #E5E4E3",
+"( c #D9D9D7",
+"_ c #69875B",
+": c #8AA67F",
+"< c #8DAD7F",
+"[ c #8AAC7A",
+"} c #8AAD7A",
+"| c #F4F0F4",
+"1 c #F5F1F5",
+"2 c #F2EFF2",
+"3 c #EFECEF",
+"4 c #E2E1E1",
+"5 c #7A956D",
+"6 c #8EAA81",
+"7 c #8BAD7B",
+"8 c #8BAE7B",
+"9 c #F6F2F6",
+"0 c #F1EDF0",
+"a c #ECEAEB",
+"b c #859F76",
+"c c #90AE81",
+"d c #91B182",
+"e c #F3EFF2",
+"f c #EFECEE",
+"g c #E4E3E3",
+"h c #759267",
+"i c #92AE85",
+"j c #95B487",
+"k c #F3EFF3",
+"l c #F0EEF0",
+"m c #EBEAEA",
+"n c #010101",
+"o c #678458",
+"p c #91AA85",
+"q c #99B48C",
+"r c #F0ECF0",
+"s c #EEECEE",
+"t c #E3E2E2",
+"u c #8CA480",
+"v c #9DB591",
+"w c #EAE9EA",
+"x c #E9E8E8",
+"y c #030303",
+"z c #6A875B",
+"A c #97B08D",
+"B c #E2E0E0",
+"C c #92AB87",
+"D c #DCDDDA",
+"E c #060606",
+"F c #94A989",
+"G c #D6D9D5",
+"H c #1D1D1D",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .............. ",
+" .+@#$%%&*=-;>. ",
+" .,')!~{]^/(. ",
+" ._:<[}|1234. ",
+" .56789|0a. ",
+" .@bcd9efg. ",
+" .hijklmn ",
+" .opqrst. ",
+" .uvwxy ",
+" .zAtB. ",
+" .CD. ",
+" EFGH ",
+" .. ",
+" .. ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_exec.xpm b/src/pixmaps/stock_exec.xpm
new file mode 100644
index 00000000..777b17d6
--- /dev/null
+++ b/src/pixmaps/stock_exec.xpm
@@ -0,0 +1,107 @@
+/* XPM */
+static char * stock_exec_xpm[] = {
+"24 24 80 1",
+" c None",
+". c #000000",
+"+ c #B2A97E",
+"@ c #B6AD81",
+"# c #7A7356",
+"$ c #B0A77C",
+"% c #B5AC80",
+"& c #BAB184",
+"* c #BBB284",
+"= c #B6AD80",
+"- c #ADA57B",
+"; c #B7AE81",
+"> c #BDB486",
+", c #837C5C",
+"' c #B4AC80",
+") c #7C7557",
+"! c #C0B687",
+"~ c #BEB586",
+"{ c #B1A87D",
+"] c #B9B082",
+"^ c #C0B788",
+"/ c #AFA67B",
+"( c #AFA77C",
+"_ c #BAB183",
+": c #BBB285",
+"< c #BCB385",
+"[ c #C4BB8B",
+"} c #C6BC8C",
+"| c #C7BD8D",
+"1 c #C7BE8D",
+"2 c #C8BF8E",
+"3 c #C8BE8D",
+"4 c #C5BC8B",
+"5 c #C1B788",
+"6 c #B9B083",
+"7 c #CDC391",
+"8 c #D0C693",
+"9 c #D1C794",
+"0 c #D3C995",
+"a c #CDC491",
+"b c #C2B889",
+"c c #CAC18F",
+"d c #D5CB97",
+"e c #D6CC97",
+"f c #D6CC98",
+"g c #D7CD98",
+"h c #CEC491",
+"i c #C2B98A",
+"j c #CBC18F",
+"k c #C1B889",
+"l c #8A8261",
+"m c #D4CA96",
+"n c #C0B787",
+"o c #80785A",
+"p c #B9B183",
+"q c #827C5B",
+"r c #CFC592",
+"s c #C7BD8C",
+"t c #C3BA8A",
+"u c #CAC08F",
+"v c #D0C793",
+"w c #7C7657",
+"x c #D2C894",
+"y c #D2C995",
+"z c #CCC290",
+"A c #C4BA8A",
+"B c #D1C793",
+"C c #CEC592",
+"D c #C5BC8C",
+"E c #CFC693",
+"F c #C1B888",
+"G c #BEB486",
+"H c #C8BF8D",
+"I c #C9C08F",
+"J c #C9BF8E",
+"K c #C5BB8B",
+"L c #B2A97D",
+"M c #C2B989",
+"N c #BFB687",
+"O c #B3AA7E",
+" ",
+" ",
+" ",
+" .... ",
+" .+.@#. ",
+" .$%&*=-. ",
+" ..;>,$.. ",
+" .-')!~@. ... ",
+" ..{]~^.. ./({. . ",
+" .#._#._..&:<..@. ",
+" . ..>[}|1232456. ",
+" .2789009a2. ",
+" .bc9defge0h.. ",
+" .]ij9ekl1gm83n. ",
+" .*ic9dopqgmrs~. ",
+" .<tu8mvwuxyzA*. ",
+" ..3ax0rBxC3.. ",
+" .DuhE8rz3F. ",
+" .Gt}HIJ1K^*L. ",
+" .~..MbN..O. ",
+" . .*_;. . ",
+" ... ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_mail.xpm b/src/pixmaps/stock_mail.xpm
new file mode 100644
index 00000000..0e27ce4b
--- /dev/null
+++ b/src/pixmaps/stock_mail.xpm
@@ -0,0 +1,143 @@
+/* XPM */
+static char * stock_mail_xpm[] = {
+"24 24 116 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #BCBCB7",
+">. c #CDCCC6",
+",. c #959490",
+"'. c #ECEBE5",
+"). c #61615E",
+"!. c #E9E8E0",
+"~. c #CECDC7",
+"{. c #797875",
+"]. c #969590",
+"^. c #CFCEC8",
+"/. c #AEADA8",
+"(. c #585754",
+"_. c #7B7A76",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.t ;.F G x y #.K >.,.. . . ",
+" . '.).G !.Q ~.H . . . ",
+" . {.].^./.. . . ",
+" . (._.. . ",
+" . . ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_mail_attach.xpm b/src/pixmaps/stock_mail_attach.xpm
new file mode 100644
index 00000000..dc14e6d3
--- /dev/null
+++ b/src/pixmaps/stock_mail_attach.xpm
@@ -0,0 +1,134 @@
+/* XPM */
+static char * stock_mail_attach_xpm[] = {
+"24 24 107 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F6F6F3",
+"{ c #F5F5F2",
+"] c #F2F1ED",
+"^ c #F1F0EC",
+"/ c #F0EFEA",
+"( c #EFEEE9",
+"_ c #4F4F4D",
+": c #BDBCB8",
+"< c #A7A6A3",
+"[ c #C6C6C4",
+"} c #7C7C7B",
+"| c #525251",
+"1 c #F5F4F1",
+"2 c #F4F3F0",
+"3 c #999894",
+"4 c #62625F",
+"5 c #BCBCB6",
+"6 c #EBE9E3",
+"7 c #838381",
+"8 c #D7D6D4",
+"9 c #A8A8A6",
+"0 c #7E7D7C",
+"a c #DAD9D5",
+"b c #EFEEE8",
+"c c #EEEDE7",
+"d c #4F4E4C",
+"e c #BCBBB6",
+"f c #EBE9E2",
+"g c #EAE8E1",
+"h c #F6F5F2",
+"i c #B5B4B1",
+"j c #9B9A97",
+"k c #92918E",
+"l c #EEEDE8",
+"m c #EDECE6",
+"n c #4E4E4C",
+"o c #797976",
+"p c #797874",
+"q c #E9E8E1",
+"r c #E8E7DF",
+"s c #B4B3AF",
+"t c #D0D0CD",
+"u c #BEBDB9",
+"v c #7A7A77",
+"w c #979691",
+"x c #EAE9E2",
+"y c #959590",
+"z c #787773",
+"A c #B8B7B0",
+"B c #E6E4DC",
+"C c #A9A9A6",
+"D c #626260",
+"E c #ECEBE4",
+"F c #EBEAE3",
+"G c #E9E7E0",
+"H c #E8E6DF",
+"I c #E7E5DD",
+"J c #777671",
+"K c #93918C",
+"L c #BEBDB8",
+"M c #989793",
+"N c #ECEAE4",
+"O c #E8E6DE",
+"P c #E6E4DB",
+"Q c #E4E3DA",
+"R c #75746F",
+"S c #91908A",
+"T c #EEECE7",
+"U c #62615F",
+"V c #EBEAE4",
+"W c #E7E6DE",
+"X c #E6E5DC",
+"Y c #E5E4DB",
+"Z c #E4E2DA",
+"` c #CCCBC4",
+" . c #A3A29D",
+".. c #B6B5B2",
+"+. c #BCBCB7",
+"@. c #CDCCC6",
+"#. c #959490",
+"$. c #ECEBE5",
+"%. c #61615E",
+"&. c #E9E8E0",
+"*. c #CECDC7",
+"=. c #797875",
+"-. c #969590",
+";. c #CFCEC8",
+">. c #AEADA8",
+",. c #585754",
+"'. c #7B7A76",
+" ",
+" . . . . ",
+" . . . ",
+" . . . . ",
+" . . . . ",
+" . . . . . . . . ",
+" . . . . . . . + @ # $ . ",
+" . . . . . % . & * = - ; > , . ",
+" . ' ) ! . ~ { . * ] ^ / ( _ : < . ",
+" . [ } | . 1 2 . ] # / ( 3 4 5 6 . ",
+" . 7 8 9 . 0 a . # / b c d e f g . ",
+" . h 1 . i j . k l m n o p q r s . ",
+" . t * . ^ ; . u v n w x y z A B . ",
+" . C ] ^ . . D m E F g G H I J K . ",
+" . # / b L M N 6 g G O I P Q R S . ",
+" . ; b T U V x q r W X Y Z ` .. . ",
+" . ..m +.w x q r W B @.#.. . . ",
+" . $.%.x &.H *.y . . . ",
+" . =.-.;.>.. . . ",
+" . ,.'.. . ",
+" . . ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_mail_compose.xpm b/src/pixmaps/stock_mail_compose.xpm
new file mode 100644
index 00000000..77da55df
--- /dev/null
+++ b/src/pixmaps/stock_mail_compose.xpm
@@ -0,0 +1,144 @@
+/* XPM */
+static char * stock_mail_compose_xpm[] = {
+"24 24 117 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #D8BE6A",
+"M c #A9A9A6",
+"N c #626260",
+"O c #ECEBE4",
+"P c #EBEAE3",
+"Q c #E9E7E0",
+"R c #E8E6DF",
+"S c #E7E5DD",
+"T c #777671",
+"U c #93918C",
+"V c #8E7D45",
+"W c #BEBDB8",
+"X c #989793",
+"Y c #ECEAE4",
+"Z c #E8E6DE",
+"` c #E6E4DB",
+" . c #E4E3DA",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #B6B5B2",
+"=. c #BCBCB7",
+"-. c #CDCCC6",
+";. c #959490",
+">. c #ECEBE5",
+",. c #61615E",
+"'. c #E9E8E0",
+"). c #CECDC7",
+"!. c #797875",
+"~. c #969590",
+"{. c #CFCEC8",
+"]. c #AEADA8",
+"^. c #585754",
+"/. c #7B7A76",
+"(. c #AD8E30",
+"_. c #756020",
+":. c #060605",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . . ",
+" . A * B ( ; C D E u F G H I J K . . L . ",
+" . M / ( _ : N t O P l Q R S T U . L V . ",
+" . # _ g W X Y 0 l Q Z S ` .. L V . ",
+" . ; g ..+.@.G x y #.$.%.&.. L V . ",
+" . *.t =.F G x y #.K -.;.. L V . ",
+" . >.,.G '.R ).H . . . L V . ",
+" . !.~.{.].. . . . L V . ",
+" . ^./.. . . L V . ",
+" . . . L V . ",
+" (._.. . ",
+" :.. ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_mail_forward.xpm b/src/pixmaps/stock_mail_forward.xpm
new file mode 100644
index 00000000..5d12c8f7
--- /dev/null
+++ b/src/pixmaps/stock_mail_forward.xpm
@@ -0,0 +1,153 @@
+/* XPM */
+static char * stock_mail_forward_xpm[] = {
+"24 24 126 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #BCBCB7",
+">. c #CDCCC6",
+",. c #959490",
+"'. c #ECEBE5",
+"). c #61615E",
+"!. c #E9E8E0",
+"~. c #CECDC7",
+"{. c #797875",
+"]. c #969590",
+"^. c #CFCEC8",
+"/. c #AEADA8",
+"(. c #585754",
+"_. c #7B7A76",
+":. c #B39C82",
+"<. c #BCA488",
+"[. c #746554",
+"}. c #7D6D5B",
+"|. c #867561",
+"1. c #8F7D68",
+"2. c #98856E",
+"3. c #A18D75",
+"4. c #AA947B",
+"5. c #C5AC8F",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.t ;.F G x y #.K >.,.. . . ",
+" . '.).G !.Q ~.H . . . ",
+" . {.].^./.. . . ",
+" . (._.. . . . ",
+" . . . :.. ",
+" . . . . . . . . :.<.. ",
+" . [.}.|.1.2.3.4.:.<.5.. ",
+" . [.}.|.1.2.3.4.:.<.5.. ",
+" . . . . . . . . :.<.. ",
+" . :.. ",
+" . . "};
diff --git a/src/pixmaps/stock_mail_receive.xpm b/src/pixmaps/stock_mail_receive.xpm
new file mode 100644
index 00000000..5ad326eb
--- /dev/null
+++ b/src/pixmaps/stock_mail_receive.xpm
@@ -0,0 +1,175 @@
+/* XPM */
+static char * stock_mail_receive_xpm[] = {
+"24 24 148 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #BCBCB7",
+">. c #CDCCC6",
+",. c #959490",
+"'. c #ECEBE5",
+"). c #61615E",
+"!. c #E9E8E0",
+"~. c #CECDC7",
+"{. c #7C6D5A",
+"]. c #797875",
+"^. c #969590",
+"/. c #CFCEC8",
+"(. c #AEADA8",
+"_. c #8A7A65",
+":. c #8F7D68",
+"<. c #93816B",
+"[. c #585754",
+"}. c #7B7A76",
+"|. c #9D8A72",
+"1. c #A18E76",
+"2. c #A69179",
+"3. c #AB977D",
+"4. c #B09A80",
+"5. c #B49E83",
+"6. c #B8A286",
+"7. c #BDA689",
+"8. c #BEA78A",
+"9. c #C2AB8E",
+"0. c #C7AE91",
+"a. c #CBB294",
+"b. c #CFB697",
+"c. c #8F7E68",
+"d. c #CCB395",
+"e. c #D1B798",
+"f. c #D5BB9B",
+"g. c #D9BF9E",
+"h. c #DEC3A1",
+"i. c #E2C6A5",
+"j. c #E6CAA8",
+"k. c #A79379",
+"l. c #897963",
+"m. c #E8CBA9",
+"n. c #ECCFAC",
+"o. c #F0D3AF",
+"p. c #93826B",
+"q. c #D7BC9C",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.t ;.F G x y #.K >.,.. . . ",
+" . '.).G !.Q ~.H . . . . {.. ",
+" . ].^./.(.. . . . _.:.<.. ",
+" . [.}.. . . |.1.2.. ",
+" . . . 3.4.5.6.7.. ",
+" . . . 8.9.0.a.b.. . . ",
+" . c.d.e.f.g.h.i.j.k.. ",
+" . . l.m.n.o.p.. . ",
+" . . q.. . ",
+" . ",
+" "};
diff --git a/src/pixmaps/stock_mail_receive_all.xpm b/src/pixmaps/stock_mail_receive_all.xpm
new file mode 100644
index 00000000..c74d97bc
--- /dev/null
+++ b/src/pixmaps/stock_mail_receive_all.xpm
@@ -0,0 +1,181 @@
+/* XPM */
+static char * stock_mail_receive_all_xpm[] = {
+"24 24 154 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #0C0C0B",
+">. c #090909",
+",. c #070707",
+"'. c #CDCCC6",
+"). c #959490",
+"!. c #0C0B0B",
+"~. c #71685B",
+"{. c #0B0B0B",
+"]. c #E9E8E0",
+"^. c #CECDC7",
+"/. c #7C6D5A",
+"(. c #897965",
+"_. c #8F7E6A",
+":. c #96846F",
+"<. c #403F3D",
+"[. c #8A7A65",
+"}. c #8F7D68",
+"|. c #93816B",
+"1. c #998770",
+"2. c #9F8C76",
+"3. c #9D8972",
+"4. c #9D8A72",
+"5. c #A18E76",
+"6. c #A69179",
+"7. c #AB977D",
+"8. c #A79279",
+"9. c #AA957C",
+"0. c #B8A286",
+"a. c #BDA689",
+"b. c #B09A80",
+"c. c #B49E83",
+"d. c #BEA78A",
+"e. c #C2AB8E",
+"f. c #C7AE91",
+"g. c #CBB294",
+"h. c #CFB697",
+"i. c #8F7E68",
+"j. c #CCB395",
+"k. c #D1B798",
+"l. c #D5BB9B",
+"m. c #D9BF9E",
+"n. c #DEC3A1",
+"o. c #E2C6A5",
+"p. c #E6CAA8",
+"q. c #A79379",
+"r. c #897963",
+"s. c #E8CBA9",
+"t. c #ECCFAC",
+"u. c #F0D3AF",
+"v. c #93826B",
+"w. c #D7BC9C",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.;.>.,.G x y #.K '.).. . . ",
+" . !.~.{.].Q ^.H . . . . /.. ",
+" . (._.:.<.. . . . [.}.|.. ",
+" . 1.2.3.. . 4.5.6.. ",
+" . 7.8.9.0.a.. . 7.b.c.0.a.. ",
+" . . . d.e.f.g.h.. . . . . d.e.f.g.h.. . . ",
+" . i.j.k.l.m.n.o.p.q.. i.j.k.l.m.n.o.p.q.. ",
+" . . r.s.t.u.v.. . . . r.s.t.u.v.. . ",
+" . . w.. . . . w.. . ",
+" . . ",
+" "};
diff --git a/src/pixmaps/stock_mail_reply.xpm b/src/pixmaps/stock_mail_reply.xpm
new file mode 100644
index 00000000..94905b81
--- /dev/null
+++ b/src/pixmaps/stock_mail_reply.xpm
@@ -0,0 +1,154 @@
+/* XPM */
+static char * stock_mail_reply_xpm[] = {
+"24 24 127 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #BCBCB7",
+">. c #CDCCC6",
+",. c #959490",
+"'. c #ECEBE5",
+"). c #61615E",
+"!. c #E9E8E0",
+"~. c #CECDC7",
+"{. c #797875",
+"]. c #969590",
+"^. c #CFCEC8",
+"/. c #AEADA8",
+"(. c #E0D8B0",
+"_. c #585754",
+":. c #7B7A76",
+"<. c #B39C82",
+"[. c #BCA488",
+"}. c #C5AC8F",
+"|. c #AA947B",
+"1. c #A18D75",
+"2. c #98856E",
+"3. c #8F7D68",
+"4. c #867561",
+"5. c #7D6D5B",
+"6. c #746554",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.t ;.F G x y #.K >.,.. . . ",
+" . '.).G !.Q ~.H . . . . ",
+" . {.].^./.. . . . (.. ",
+" . _.:.. . . . . (.(.(.. ",
+" . . . <.. . (.(.(.. ",
+" . [.<.. . . . . . . . ",
+" . }.[.<.|.1.2.3.4.5.6.. ",
+" . }.[.<.|.1.2.3.4.5.. ",
+" . [.<.. . . . . . ",
+" . <.. ",
+" . . "};
diff --git a/src/pixmaps/stock_mail_reply_to_all.xpm b/src/pixmaps/stock_mail_reply_to_all.xpm
new file mode 100644
index 00000000..6086a860
--- /dev/null
+++ b/src/pixmaps/stock_mail_reply_to_all.xpm
@@ -0,0 +1,126 @@
+/* XPM */
+static char * stock_mail_reply_to_all_xpm[] = {
+"24 24 99 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #E0D8B0",
+"b c #838381",
+"c c #D7D6D4",
+"d c #A8A8A6",
+"e c #515150",
+"f c #7E7D7C",
+"g c #DAD9D5",
+"h c #EFEEE8",
+"i c #EEEDE7",
+"j c #EBE9E2",
+"k c #F6F5F2",
+"l c #F4F3EF",
+"m c #B5B4B1",
+"n c #9B9A97",
+"o c #646361",
+"p c #92918E",
+"q c #EEEDE8",
+"r c #EDECE6",
+"s c #B39C82",
+"t c #E9E8E1",
+"u c #E8E7DF",
+"v c #D0D0CD",
+"w c #F2F2ED",
+"x c #BFBEBA",
+"y c #BEBDB9",
+"z c #7A7A77",
+"A c #BCA488",
+"B c #A9A9A6",
+"C c #626260",
+"D c #C5AC8F",
+"E c #AA947B",
+"F c #A18D75",
+"G c #98856E",
+"H c #8F7D68",
+"I c #867561",
+"J c #7D6D5B",
+"K c #746554",
+"L c #BEBDB8",
+"M c #989793",
+"N c #ECEAE4",
+"O c #EEECE7",
+"P c #62615F",
+"Q c #EBEAE4",
+"R c #EAE9E2",
+"S c #B6B5B2",
+"T c #BCBCB7",
+"U c #979691",
+"V c #E7E6DE",
+"W c #ECEBE5",
+"X c #61615E",
+"Y c #E9E8E0",
+"Z c #E8E6DF",
+"` c #CECDC7",
+" . c #959590",
+".. c #797875",
+"+. c #969590",
+"@. c #CFCEC8",
+"#. c #AEADA8",
+"$. c #585754",
+"%. c #7B7A76",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . a . ",
+" . b c d e f g / # _ h i . . j . a a a . ",
+" . k 4 l m n o p q r . s . t u . a a a . ",
+" . v * w ( ; x y z . A s . . . . . . . . ",
+" . B / ( _ : C r . D A s E F G H I J K . ",
+" . # _ h L M N . D A s E F G H I J . ",
+" . ; h O P Q R t . A s . . . . . . ",
+" . S r T U R t u V . s . . . . ",
+" . W X R Y Z ` .. . . . ",
+" . ..+.@.#.. . . . a . ",
+" . $.%.. . . . . a a a . ",
+" . . . s . . a a a . ",
+" . A s . . . . . . . . ",
+" . D A s E F G H I J K . ",
+" . D A s E F G H I J . ",
+" . A s . . . . . . ",
+" . s . ",
+" . . "};
diff --git a/src/pixmaps/stock_mail_send.xpm b/src/pixmaps/stock_mail_send.xpm
new file mode 100644
index 00000000..f53bfa8e
--- /dev/null
+++ b/src/pixmaps/stock_mail_send.xpm
@@ -0,0 +1,162 @@
+/* XPM */
+static char * stock_mail_send_xpm[] = {
+"24 24 135 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #D0D0CD",
+"B c #F2F2ED",
+"C c #BFBEBA",
+"D c #BEBDB9",
+"E c #7A7A77",
+"F c #979691",
+"G c #EAE9E2",
+"H c #959590",
+"I c #787773",
+"J c #B8B7B0",
+"K c #E6E4DC",
+"L c #A9A9A6",
+"M c #626260",
+"N c #ECEBE4",
+"O c #EBEAE3",
+"P c #E9E7E0",
+"Q c #E8E6DF",
+"R c #E7E5DD",
+"S c #777671",
+"T c #93918C",
+"U c #BEBDB8",
+"V c #989793",
+"W c #ECEAE4",
+"X c #E8E6DE",
+"Y c #E6E4DB",
+"Z c #E4E3DA",
+"` c #75746F",
+" . c #91908A",
+".. c #EEECE7",
+"+. c #62615F",
+"@. c #EBEAE4",
+"#. c #E7E6DE",
+"$. c #E6E5DC",
+"%. c #E5E4DB",
+"&. c #E4E2DA",
+"*. c #CCCBC4",
+"=. c #A3A29D",
+"-. c #B6B5B2",
+";. c #BCBCB7",
+">. c #CDCCC6",
+",. c #959490",
+"'. c #ECEBE5",
+"). c #61615E",
+"!. c #E9E8E0",
+"~. c #CECDC7",
+"{. c #797875",
+"]. c #969590",
+"^. c #CFCEC8",
+"/. c #AEADA8",
+"(. c #282828",
+"_. c #6D675E",
+":. c #786F64",
+"<. c #585754",
+"[. c #7B7A76",
+"}. c #736A5B",
+"|. c #908570",
+"1. c #928875",
+"2. c #665C4E",
+"3. c #8C816F",
+"4. c #9B907F",
+"5. c #0F0E0B",
+"6. c #AB9A87",
+"7. c #A8967F",
+"8. c #998873",
+"9. c #B6A38A",
+"0. c #8C7C69",
+"a. c #C8B298",
+"b. c #B7A38A",
+"c. c #DAC2A5",
+"d. c #B49E84",
+" ",
+" ",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" . A * B ( ; C D E u F G H I J K . ",
+" . L / ( _ : M t N O l P Q R S T . ",
+" . # _ g U V W 0 l P X R Y Z ` .. ",
+" . ; g ..+.@.G x y #.$.%.&.*.=.. . ",
+" . -.t ;.F G x y #.K >.,.. . . ",
+" . '.).G !.Q ~.H . . . . . ",
+" . {.].^./.. . . (._.:.. ",
+" . <.[.. . . }.|.1.2.. ",
+" . . . . . 3.4.. 5.. ",
+" . 6.7.. ",
+" . 8.9.9.0.. ",
+" . a.a.a.a.. ",
+" . b.c.c.c.c.d.. ",
+" . . . . . . . . ",
+" "};
diff --git a/src/pixmaps/stock_mail_send_queue.xpm b/src/pixmaps/stock_mail_send_queue.xpm
new file mode 100644
index 00000000..97e40138
--- /dev/null
+++ b/src/pixmaps/stock_mail_send_queue.xpm
@@ -0,0 +1,244 @@
+/* XPM */
+static char * stock_mail_send_queue_xpm[] = {
+"24 24 217 2",
+" c None",
+". c #000000",
+"+ c #7B7B78",
+"@ c #C7C7C3",
+"# c #F1F0EB",
+"$ c #BFBFBC",
+"% c #5F5E5E",
+"& c #E3E3DF",
+"* c #F3F3EF",
+"= c #F2F2EE",
+"- c #F1F1EC",
+"; c #F0EFEB",
+"> c #D2D2CD",
+", c #969592",
+"' c #616060",
+") c #B5B5B4",
+"! c #F8F8F6",
+"~ c #F7F7F5",
+"{ c #F6F6F3",
+"] c #F5F5F2",
+"^ c #F4F4F0",
+"/ c #F2F1ED",
+"( c #F1F0EC",
+"_ c #F0EFEA",
+": c #EFEEE9",
+"< c #4F4F4D",
+"[ c #BDBCB8",
+"} c #A7A6A3",
+"| c #C6C6C4",
+"1 c #7C7C7B",
+"2 c #525251",
+"3 c #DBDBD9",
+"4 c #F5F4F1",
+"5 c #F4F3F0",
+"6 c #F3F2EE",
+"7 c #999894",
+"8 c #62625F",
+"9 c #BCBCB6",
+"0 c #EBE9E3",
+"a c #838381",
+"b c #D7D6D4",
+"c c #A8A8A6",
+"d c #515150",
+"e c #7E7D7C",
+"f c #DAD9D5",
+"g c #EFEEE8",
+"h c #EEEDE7",
+"i c #4F4E4C",
+"j c #BCBBB6",
+"k c #EBE9E2",
+"l c #EAE8E1",
+"m c #F6F5F2",
+"n c #F4F3EF",
+"o c #B5B4B1",
+"p c #9B9A97",
+"q c #646361",
+"r c #92918E",
+"s c #EEEDE8",
+"t c #EDECE6",
+"u c #4E4E4C",
+"v c #797976",
+"w c #797874",
+"x c #E9E8E1",
+"y c #E8E7DF",
+"z c #B4B3AF",
+"A c #3F3F3F",
+"B c #0E0E0E",
+"C c #1E1E1D",
+"D c #6B6B69",
+"E c #BFBEBA",
+"F c #BEBDB9",
+"G c #7A7A77",
+"H c #979691",
+"I c #EAE9E2",
+"J c #959590",
+"K c #787773",
+"L c #B8B7B0",
+"M c #E6E4DC",
+"N c #101010",
+"O c #D5D5D5",
+"P c #FFFFFF",
+"Q c #B1B1B1",
+"R c #1D1D1D",
+"S c #626260",
+"T c #ECEBE4",
+"U c #EBEAE3",
+"V c #E9E7E0",
+"W c #E8E6DF",
+"X c #E7E5DD",
+"Y c #777671",
+"Z c #93918C",
+"` c #ECEAE4",
+" . c #E8E6DE",
+".. c #E6E4DB",
+"+. c #E4E3DA",
+"@. c #75746F",
+"#. c #91908A",
+"$. c #EBEBE9",
+"%. c #B4B5B0",
+"&. c #A0A29B",
+"*. c #9FA099",
+"=. c #AAACA5",
+"-. c #C6C7C2",
+";. c #F5F6F4",
+">. c #E7E6DE",
+",. c #E6E5DC",
+"'. c #E5E4DB",
+"). c #E4E2DA",
+"!. c #CCCBC4",
+"~. c #A3A29D",
+"{. c #D1D2CF",
+"]. c #979890",
+"^. c #9FA199",
+"/. c #A8A9A1",
+"(. c #ADAFA6",
+"_. c #B2B3AB",
+":. c #B6B8B0",
+"<. c #BABCB4",
+"[. c #11110F",
+"}. c #1D1D1C",
+"|. c #CDCCC6",
+"1. c #959490",
+"2. c #ECECEA",
+"3. c #989991",
+"4. c #A1A39B",
+"5. c #B0B1A9",
+"6. c #BBBCB5",
+"7. c #BFC0B8",
+"8. c #C2C4BC",
+"9. c #C1C2BA",
+"0. c #D1D1D0",
+"a. c #DEDEDE",
+"b. c #9C9E96",
+"c. c #C5C7BF",
+"d. c #CBCCC5",
+"e. c #CDCEC6",
+"f. c #C5C7BE",
+"g. c #DEDFDA",
+"h. c #939393",
+"i. c #2F2F2F",
+"j. c #282828",
+"k. c #6D675E",
+"l. c #786F64",
+"m. c #9E9F98",
+"n. c #A1A29A",
+"o. c #B5B7AF",
+"p. c #CFD1C8",
+"q. c #D0D2CA",
+"r. c #CCCEC6",
+"s. c #D1D3CB",
+"t. c #736A5B",
+"u. c #908570",
+"v. c #928875",
+"w. c #665C4E",
+"x. c #9A9B93",
+"y. c #A6A8A0",
+"z. c #C8CAC1",
+"A. c #D6D7D0",
+"B. c #D5D7CF",
+"C. c #D4D5CD",
+"D. c #D3D5CD",
+"E. c #8C816F",
+"F. c #9B907F",
+"G. c #0F0E0B",
+"H. c #A5A69F",
+"I. c #A8A9A2",
+"J. c #BABBB3",
+"K. c #C9CAC2",
+"L. c #94958E",
+"M. c #D6D8D0",
+"N. c #D7D9D1",
+"O. c #DBDCD5",
+"P. c #AB9A87",
+"Q. c #A8967F",
+"R. c #BFC0BB",
+"S. c #A8AAA2",
+"T. c #C4C5BD",
+"U. c #B0B2AA",
+"V. c #D7D8D0",
+"W. c #E6E7E2",
+"X. c #998873",
+"Y. c #B6A38A",
+"Z. c #8C7C69",
+"`. c #F2F2F1",
+" + c #ADAEA6",
+".+ c #B1B3AB",
+"++ c #BCBDB5",
+"@+ c #C6C8C0",
+"#+ c #CFD0C9",
+"$+ c #D4D6CE",
+"%+ c #D5D6CE",
+"&+ c #D6D7CF",
+"*+ c #C8B298",
+"=+ c #E4E4E1",
+"-+ c #B3B4AC",
+";+ c #B7B8B0",
+">+ c #BCBEB6",
+",+ c #C4C6BE",
+"'+ c #C9CBC3",
+")+ c #CBCCC4",
+"!+ c #D0D1C9",
+"~+ c #D4D5D2",
+"{+ c #B7A38A",
+"]+ c #DAC2A5",
+"^+ c #B49E84",
+"/+ c #B9B9B9",
+"(+ c #F5F5F4",
+"_+ c #CFD0CB",
+":+ c #C0C2BB",
+"<+ c #C0C2BA",
+"[+ c #C8C9C2",
+"}+ c #D9DAD5",
+"|+ c #D9D9D8",
+"1+ c #D3D3D3",
+"2+ c #0D0D0D",
+"3+ c #7A7A7A",
+"4+ c #343434",
+" . . . . ",
+" . . . . . + @ # $ . ",
+" . . . . . % $ & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ",
+" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ",
+" . a b c d e f / # _ g h i j k l . ",
+" . m 4 n o p q r s t u v w x y z . ",
+" A B . C D ( ; E F G u H I J K L M . ",
+" N . O P P O Q . R S t T U l V W X Y Z . ",
+" . O P P P P P P O Q . ` 0 l V .X ..+.@.#.. ",
+" . O P $.%.&.*.=.-.;.O O . x y >.,.'.).!.~.. . ",
+"N Q P {.].^./.(._.:.<.[.O Q }.>.M |.1.. . . ",
+". O 2.3.4.5.6.7.8.9.. . 0.O . J . . . . . ",
+"Q a.%.b.. . c.d.e.. . f.g.O h.i. j.k.l.. ",
+"O P m.n.o.. . p.. . q.r.s.O h.N . t.u.v.w.. ",
+"a.P x.y.6.z.. . . A.B.C.D.O h.. . . . E.F.. G.. ",
+"O P H.I.J.K.L.. 3.M.N.N.O.O h.N . P.Q.. ",
+"Q a.R.S.o.T.r.U.V.M.N.N.W.O h.A . X.Y.Y.Z.. ",
+". O `. +.+++@+#+$+%+&+N.0.O . . *+*+*+*+. ",
+"N Q a.=+-+;+>+,+'+)+!+~+O Q N . {+]+]+]+]+^+. ",
+" . /+a.(+_+:+<+[+}+|+O Q . . . . . . . . . ",
+" 1+. /+a.a.P P a.O Q h.. ",
+" 2+. Q /+/+Q 3+. N ",
+" 4+2+. . A "};
diff --git a/src/pixmaps/stock_paste.xpm b/src/pixmaps/stock_paste.xpm
new file mode 100644
index 00000000..81072cf8
--- /dev/null
+++ b/src/pixmaps/stock_paste.xpm
@@ -0,0 +1,132 @@
+/* XPM */
+static char * stock_paste_xpm[] = {
+"24 24 105 2",
+" c None",
+". c #000000",
+"+ c #CFCDBE",
+"@ c #CFCCBD",
+"# c #CFCBBC",
+"$ c #D0CFBE",
+"% c #CFCEBE",
+"& c #CECABB",
+"* c #D1CFBE",
+"= c #7E7E74",
+"- c #2F2F2B",
+"; c #595855",
+"> c #A09F9C",
+", c #CCC9BB",
+"' c #595956",
+") c #DDDDDA",
+"! c #ACABA5",
+"~ c #7E7C72",
+"{ c #3E3C38",
+"] c #CDC9BB",
+"^ c #CCC9BA",
+"/ c #4D4D4B",
+"( c #7E7C73",
+"_ c #CDCABB",
+": c #CBC9BA",
+"< c #CAC8B9",
+"[ c #73736E",
+"} c #4D4C46",
+"| c #A4A195",
+"1 c #CAC7B8",
+"2 c #CFCDBD",
+"3 c #CFCCBC",
+"4 c #CFCBBB",
+"5 c #CAC9B9",
+"6 c #CAC8B8",
+"7 c #C9C6B8",
+"8 c #D1D1BC",
+"9 c #919182",
+"0 c #CBC9B9",
+"a c #272727",
+"b c #AEAEA8",
+"c c #B7B7A5",
+"d c #D4D4BE",
+"e c #D8D8C2",
+"f c #EAEAE2",
+"g c #707070",
+"h c #B3B3AC",
+"i c #D7D7C1",
+"j c #DBDBC4",
+"k c #ACAC9B",
+"l c #DDDDD9",
+"m c #42423A",
+"n c #A5A595",
+"o c #DADAC3",
+"p c #DEDEC7",
+"q c #E2E2CA",
+"r c #C9C7B8",
+"s c #C9C5B6",
+"t c #616156",
+"u c #A5A594",
+"v c #D9D9C3",
+"w c #DDDDC6",
+"x c #E1E1C9",
+"y c #E4E4CD",
+"z c #B4B4A1",
+"A c #C7C5B5",
+"B c #C5C1B1",
+"C c #C0BEAB",
+"D c #BBBBA7",
+"E c #DCDCC5",
+"F c #E0E0C9",
+"G c #E3E3CC",
+"H c #E7E7CF",
+"I c #EBEBD3",
+"J c #A3A391",
+"K c #C3C0AF",
+"L c #C3BFAE",
+"M c #C2BEAE",
+"N c #C1BDAC",
+"O c #BAB8A5",
+"P c #929284",
+"Q c #DFDFC8",
+"R c #E2E2CB",
+"S c #E6E6CF",
+"T c #EAEAD2",
+"U c #EEEED5",
+"V c #F2F2D9",
+"W c #C0BBAA",
+"X c #BCB9A6",
+"Y c #B8B4A1",
+"Z c #B7B3A0",
+"` c #E5E5CE",
+" . c #E9E9D1",
+".. c #EDEDD5",
+"+. c #F1F1D8",
+"@. c #F5F5DC",
+"#. c #A7A796",
+"$. c #B9B5A1",
+"%. c #B8B4A0",
+"&. c #AEAE9C",
+"*. c #E8E8D0",
+"=. c #ECECD4",
+"-. c #F0F0D7",
+";. c #A6A696",
+">. c #9F9F8F",
+" ",
+" ",
+" ",
+" . . . ",
+" . . + @ # . . ",
+" . . $ % @ # & . . . . . . ",
+" . . * $ = - ; > & , . . . . . . ",
+" . * * * ' ) ! ~ { ] ^ . . ",
+" . * * $ / ! ( { _ , : < . ",
+" . $ % [ } | _ , : < 1 . . . ",
+" . % 2 3 4 & ] : 5 6 7 . . 8 9 . ",
+" . @ # & _ ^ 0 6 . a b c d e . ",
+" . # & _ , : < 1 . f g h i j k . ",
+" . & , : 5 1 7 . l m n o p q . ",
+" . ] ^ 5 6 r s . t u v w x y z . ",
+" . : 1 A B C . D e E F G H I J . ",
+" . K L M N O . P j Q R S T U V . ",
+" . W X Y Z . . p q ` ...+.@.#.. ",
+" . $.%.. . . &.y *.=.-.;.. . ",
+" . . . H I J . . ",
+" . >.. . ",
+" . ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_preferences.xpm b/src/pixmaps/stock_preferences.xpm
new file mode 100644
index 00000000..d68760dc
--- /dev/null
+++ b/src/pixmaps/stock_preferences.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char * stock_preferences_xpm[] = {
+"24 24 53 1",
+" c None",
+". c #000000",
+"+ c #E5E5E5",
+"@ c #CECECE",
+"# c #CDCDCD",
+"$ c #DCCB94",
+"% c #DCDCDC",
+"& c #C7C7C7",
+"* c #8E7D45",
+"= c #CFCFCF",
+"- c #C1C1C1",
+"; c #AB5959",
+"> c #D9D9D9",
+", c #878787",
+"' c #DBDBDB",
+") c #D4D4D4",
+"! c #A84F4F",
+"~ c #A7A7A7",
+"{ c #9B9B9B",
+"] c #F5F5F5",
+"^ c #F3F3F3",
+"/ c #A65757",
+"( c #6E6E6E",
+"_ c #DACACA",
+": c #AC5757",
+"< c #C48B8B",
+"[ c #AA6C6C",
+"} c #E9DDDD",
+"| c #A65353",
+"1 c #C6C6C6",
+"2 c #D4C38D",
+"3 c #E4E4E4",
+"4 c #D6D6D0",
+"5 c #C0C0BB",
+"6 c #828279",
+"7 c #AD8E30",
+"8 c #756020",
+"9 c #C5C5BF",
+"0 c #A7A79A",
+"a c #818174",
+"b c #DFE1E1",
+"c c #D6E1E0",
+"d c #060605",
+"e c #A3A395",
+"f c #C8C8C8",
+"g c #8B8B7D",
+"h c #7E7E71",
+"i c #B2B9B6",
+"j c #D9D9D2",
+"k c #D9D9D3",
+"l c #DADAD4",
+"m c #DADAD9",
+"n c #DADADA",
+" ",
+" ",
+" ",
+" .. ",
+" ..+@. . ",
+" ..#+++. .$. ",
+" ...%+++++&. .$*. ",
+" ..#++++=+-++. .$*. ",
+" .%++++;+>+=,+'.$*. ",
+" .)++++!~+{,++.$*. ",
+" .++]^/+(+++.$*. ",
+" .%_:<[++++.$*.>. ",
+" .+}|/+++.$*.=+1. ",
+" .)+++++.2*.>3456. ",
+" .+++]78..90000a. ",
+" .%+bcd.ee0000f. ",
+" .+0ghijkl+m.. ",
+" .)+++++++f. ",
+" .++++++.. ",
+" .%+++f. ",
+" .+n.. ",
+" .. ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_properties.xpm b/src/pixmaps/stock_properties.xpm
new file mode 100644
index 00000000..c13d7ae8
--- /dev/null
+++ b/src/pixmaps/stock_properties.xpm
@@ -0,0 +1,140 @@
+/* XPM */
+static char * stock_properties_xpm[] = {
+"24 24 113 2",
+" c None",
+". c #000000",
+"+ c #ADAD9C",
+"@ c #959585",
+"# c #DCDCC5",
+"$ c #DFDFC8",
+"% c #242424",
+"& c #A7A796",
+"* c #D7D7C1",
+"= c #D9D9C3",
+"- c #DCDCC4",
+"; c #DDDDC7",
+"> c #E1E1CA",
+", c #D8BE6A",
+"' c #A6A694",
+") c #D6D6BF",
+"! c #D8D8C2",
+"~ c #DBDBC4",
+"{ c #A2A291",
+"] c #E3E3CB",
+"^ c #B2B29F",
+"/ c #8E7D45",
+"( c #7C7C7C",
+"_ c #646464",
+": c #D5D5BD",
+"< c #D5D5BF",
+"[ c #D7D7C0",
+"} c #9E9E8D",
+"| c #ABAB98",
+"1 c #E1E1C9",
+"2 c #E5E5CD",
+"3 c #E9E9D1",
+"4 c #343434",
+"5 c #E7E7E7",
+"6 c #373736",
+"7 c #B8B8A6",
+"8 c #D3D3BC",
+"9 c #909081",
+"0 c #9F9F8E",
+"a c #DDDDC5",
+"b c #E0E0C8",
+"c c #A2A292",
+"d c #ECECD4",
+"e c #EEEED5",
+"f c #ECECEC",
+"g c #EDEDED",
+"h c #3D3D37",
+"i c #8A8A7A",
+"j c #E6E6CE",
+"k c #9A9A8A",
+"l c #EAEAD2",
+"m c #EEEEE5",
+"n c #3C3C3C",
+"o c #8F8F80",
+"p c #D0D0B9",
+"q c #999988",
+"r c #ECECD3",
+"s c #EFEFD6",
+"t c #EEEEE6",
+"u c #505050",
+"v c #929282",
+"w c #D1D1B9",
+"x c #969686",
+"y c #E7E7CF",
+"z c #EBEBD2",
+"A c #F5F5DC",
+"B c #D2D2BC",
+"C c #E9E9D0",
+"D c #EDEDD4",
+"E c #E3E3DC",
+"F c #797973",
+"G c #D8D8C1",
+"H c #919182",
+"I c #949484",
+"J c #EAEAD1",
+"K c #D9D9CC",
+"L c #BFBFB0",
+"M c #ACACA5",
+"N c #9F9F93",
+"O c #98988F",
+"P c #E4E4CC",
+"Q c #AD8E30",
+"R c #756020",
+"S c #C4C4B0",
+"T c #9D9D8D",
+"U c #818174",
+"V c #DFDFC7",
+"W c #E2E2CA",
+"X c #060605",
+"Y c #9B9B8B",
+"Z c #9C9C8C",
+"` c #BEBEAE",
+" . c #8B8B7D",
+".. c #7E7E71",
+"+. c #C0C0AC",
+"@. c #C2C2AE",
+"#. c #C3C3AF",
+"$. c #DADAC3",
+"%. c #4E4E4E",
+"&. c #E8E8D0",
+"*. c #A0A090",
+"=. c #F2F2D9",
+"-. c #F3F3DA",
+";. c #F4F4DB",
+">. c #828274",
+",. c #EBEBD3",
+"'. c #F1F1D8",
+"). c #F0F0D7",
+"!. c #A5A594",
+"~. c #BBBBA8",
+"{. c #CDCDB8",
+"]. c #4D4D45",
+"^. c #A6A696",
+" ",
+" ",
+" . ",
+" . . + . ",
+" . . @ # $ % . ",
+" . . & * = - ; > . . , . ",
+" . . ' ) * * ! ~ { ] ^ . . , / . ",
+" . ( _ ) : < [ } | 1 2 3 4 . , / . ",
+" . 5 6 7 8 9 0 a b 2 c d e . , / . ",
+" . f g h i < ~ b j k l e . , / . ",
+" . m m n o p b q q r s . , / . ",
+" . t u v w - x y z e . , / . A . ",
+" . . x B ~ x ] C D . , / . A A E . ",
+" . F G H I > y J . , / . A K L M N . ",
+" . O ~ # $ P y Q R . . S T T T T U . ",
+" . V b W 2 3 X . Y Z T T T T . . ",
+" . ` 2 2 T ...+.@.#.S A $.. ",
+" %.&.*.l D s =.-.;.=.>.. ",
+" . ,.d D s '.=.=.$.. ",
+" . s ).'.=.3 !.. ",
+" . ~.=.-.{.].. ",
+" . -.^.. ",
+" . . ",
+" "};
diff --git a/src/pixmaps/stock_remove_16.xpm b/src/pixmaps/stock_remove_16.xpm
new file mode 100644
index 00000000..a1903d6a
--- /dev/null
+++ b/src/pixmaps/stock_remove_16.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * stock_remove_16_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #5E738B",
+"@ c #617891",
+"# c #7589A0",
+"$ c #7590AE",
+"% c #93A0AD",
+"& c #ADBCCE",
+"* c #C4CEDC",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ............. ",
+".&***********%. ",
+".*$$$$$$$$$$$@. ",
+".#++++++++++++. ",
+" ............. ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_search.xpm b/src/pixmaps/stock_search.xpm
new file mode 100644
index 00000000..645eff5c
--- /dev/null
+++ b/src/pixmaps/stock_search.xpm
@@ -0,0 +1,155 @@
+/* XPM */
+static char * stock_search_xpm[] = {
+"24 24 128 2",
+" c None",
+". c #000000",
+"+ c #ADAD9C",
+"@ c #959585",
+"# c #DCDCC5",
+"$ c #DFDFC8",
+"% c #242424",
+"& c #A7A796",
+"* c #D7D7C1",
+"= c #D9D9C3",
+"- c #DCDCC4",
+"; c #DDDDC7",
+"> c #E1E1CA",
+", c #A6A694",
+"' c #D6D6BF",
+") c #D8D8C2",
+"! c #DBDBC4",
+"~ c #DFDFC7",
+"{ c #E3E3CB",
+"] c #B2B29F",
+"^ c #7C7C7C",
+"/ c #646464",
+"( c #D5D5BD",
+"_ c #D5D5BF",
+": c #D7D7C0",
+"< c #DADAC3",
+"[ c #DEDEC6",
+"} c #E1E1C9",
+"| c #E5E5CD",
+"1 c #E9E9D1",
+"2 c #343434",
+"3 c #E7E7E7",
+"4 c #373736",
+"5 c #B8B8A6",
+"6 c #D3D3BC",
+"7 c #D9D9C2",
+"8 c #DDDDC5",
+"9 c #E0E0C8",
+"0 c #E8E8D0",
+"a c #ECECD4",
+"b c #EEEED5",
+"c c #ECECEC",
+"d c #EDEDED",
+"e c #3D3D37",
+"f c #CECEB7",
+"g c #E6E6CE",
+"h c #EAEAD2",
+"i c #F1F1D8",
+"j c #A5A594",
+"k c #EEEEE5",
+"l c #3C3C3C",
+"m c #8F8F80",
+"n c #D0D0B9",
+"o c #B4B4A0",
+"p c #46463E",
+"q c #090908",
+"r c #4A4A42",
+"s c #C1C1AD",
+"t c #F2F2D9",
+"u c #F3F3DA",
+"v c #EEEEE6",
+"w c #505050",
+"x c #929282",
+"y c #D1D1B9",
+"z c #B0B09D",
+"A c #33332D",
+"B c #9D9D8D",
+"C c #CFCFB9",
+"D c #C4C4AF",
+"E c #8D8D7F",
+"F c #34342F",
+"G c #C3C3AF",
+"H c #F4F4DB",
+"I c #F5F5DC",
+"J c #969686",
+"K c #D2D2BC",
+"L c #45453E",
+"M c #9C9C8C",
+"N c #E2E2D0",
+"O c #EDEDE5",
+"P c #C0C0AC",
+"Q c #828274",
+"R c #4B4B43",
+"S c #BEBEAB",
+"T c #797973",
+"U c #D8D8C1",
+"V c #DDDDC6",
+"W c #080807",
+"X c #FBFBFA",
+"Y c #C3C3AE",
+"Z c #B5B5A2",
+"` c #A6A695",
+" . c #959586",
+".. c #98988F",
+"+. c #080808",
+"@. c #CACAB5",
+"#. c #DDDDD0",
+"$. c #B7B7A4",
+"%. c #AAAA98",
+"&. c #9B9B8B",
+"*. c #8C8C7D",
+"=. c #818174",
+"-. c #E2E2CA",
+";. c #46463F",
+">. c #929283",
+",. c #BABAA7",
+"'. c #ADAD9B",
+"). c #9F9F8E",
+"!. c #909081",
+"~. c #727266",
+"{. c #4B4B44",
+"]. c #BEBEAE",
+"^. c #33332E",
+"/. c #878779",
+"(. c #A0A090",
+"_. c #737367",
+":. c #4E4E4E",
+"<. c #BEBEAA",
+"[. c #404040",
+"}. c #6F6F6F",
+"|. c #EBEBD3",
+"1. c #EDEDD4",
+"2. c #EFEFD6",
+"3. c #F0F0D7",
+"4. c #BBBBA8",
+"5. c #CDCDB8",
+"6. c #4D4D45",
+"7. c #A6A696",
+" ",
+" ",
+" . ",
+" . . + . ",
+" . . @ # $ % ",
+" . . & * = - ; > . ",
+" . . , ' * * ) ! ~ { ] . ",
+" . ^ / ' ( _ : < [ } | 1 2 ",
+" . 3 4 5 6 * 7 8 9 | 0 a b . ",
+" . c d e f _ ! 9 g 0 h b i j . ",
+" . k k l m n o p q q r s t u . ",
+" . v w x y z A B C D E F G H I . ",
+" . . J K ! L M N O P ] Q R I I S . ",
+" . T U 7 V W _ X Y Z ` .q I I I ) . ",
+" . ..! # $ +.@.#.$.%.&.*.q I I I =.. ",
+" . ~ 9 -.;.>.,.'.).!.~.{.I I . . ",
+" . ].| | ,.^./.(.>._.. . < . ",
+" :.0 1 h <.r q q [.}.. . ",
+" . |.a 1.2.i t t < . . . . ",
+" . 2.3.i t 1 j . . . . ",
+" . 4.t u 5.6.. . . . ",
+" . u 7.. . . ",
+" . . ",
+" "};
diff --git a/src/pixmaps/stock_trash.xpm b/src/pixmaps/stock_trash.xpm
new file mode 100644
index 00000000..11c9ebcc
--- /dev/null
+++ b/src/pixmaps/stock_trash.xpm
@@ -0,0 +1,112 @@
+/* XPM */
+static char * stock_trash_xpm[] = {
+"24 24 85 1",
+" c None",
+". c #000000",
+"+ c #252525",
+"@ c #A8BA9E",
+"# c #B4C1AB",
+"$ c #E1E7DD",
+"% c #838A7D",
+"& c #909F86",
+"* c #484E43",
+"= c #A0AD94",
+"- c #9EAB91",
+"; c #B6C4AD",
+"> c #BFCCB7",
+", c #A7B69B",
+"' c #BEC9B5",
+") c #656F5E",
+"! c #2B2E28",
+"~ c #353931",
+"{ c #242622",
+"] c #9BAA8F",
+"^ c #9AA78E",
+"/ c #98A58C",
+"( c #96A58D",
+"_ c #D7DED2",
+": c #A4B398",
+"< c #A2B196",
+"[ c #A0B095",
+"} c #97A38A",
+"| c #7C9674",
+"1 c #B0C0AB",
+"2 c #CED6C8",
+"3 c #DAE1D6",
+"4 c #BBC4B1",
+"5 c #5B6B57",
+"6 c #637354",
+"7 c #748C6B",
+"8 c #94AA8D",
+"9 c #8FA58A",
+"0 c #6F8668",
+"a c #667961",
+"b c #5D6E58",
+"c c #4D5A4B",
+"d c #485245",
+"e c #738B6E",
+"f c #687B63",
+"g c #5E6F5A",
+"h c #576452",
+"i c #495345",
+"j c #4F5B4B",
+"k c #3F453D",
+"l c #687D63",
+"m c #B9C6B4",
+"n c #65785F",
+"o c #9BAE97",
+"p c #525F4F",
+"q c #728A6D",
+"r c #4F5C4C",
+"s c #6E8468",
+"t c #4D5849",
+"u c #9BAD96",
+"v c #6E8368",
+"w c #080808",
+"x c #6E8367",
+"y c #B7C6B4",
+"z c #9AAD96",
+"A c #525F4E",
+"B c #4D5848",
+"C c #687A63",
+"D c #B7C5B4",
+"E c #6D8367",
+"F c #4C5848",
+"G c #809A78",
+"H c #A0B29A",
+"I c #60725C",
+"J c #728A6B",
+"K c #4F5B4C",
+"L c #586853",
+"M c #677A61",
+"N c #7D9775",
+"O c #7A9472",
+"P c #788F71",
+"Q c #748D6E",
+"R c #6F8568",
+"S c #6D8267",
+"T c #697D64",
+" ",
+" ",
+" ",
+" ",
+" ........ ",
+" +.@#$%&*=-.. ",
+" .;>,')!~{-]^/. ",
+" .(_':<[=-]^/}. ",
+" .|1234=-]^/|5. ",
+" .67899||0abcd. ",
+" .+effghijk+. ",
+" .l++++++++f. ",
+" .lmnopqrstf. ",
+" .lmnupqrvtf.www ",
+" .lmnupqrxtf.wwww ",
+" .lynzAqrxBC.wwww ",
+" .lDnzAqrEFC.wwww ",
+" .GHnzIJKELM.www ",
+" .NOPQJRST.ww ",
+" ........w ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/stock_up_arrow.xpm b/src/pixmaps/stock_up_arrow.xpm
new file mode 100644
index 00000000..bb5c3195
--- /dev/null
+++ b/src/pixmaps/stock_up_arrow.xpm
@@ -0,0 +1,100 @@
+/* XPM */
+static char * stock_up_arrow_xpm[] = {
+"24 24 73 1",
+" c None",
+". c #000000",
+"+ c #1D1D1D",
+"@ c #D6D9D5",
+"# c #94A989",
+"$ c #060606",
+"% c #DCDDDA",
+"& c #92AB87",
+"* c #E2E0E0",
+"= c #E3E2E2",
+"- c #97B08D",
+"; c #6A875B",
+"> c #030303",
+", c #E9E8E8",
+"' c #EAE9EA",
+") c #9DB591",
+"! c #8CA480",
+"~ c #EEECEE",
+"{ c #F0ECF0",
+"] c #99B48C",
+"^ c #91AA85",
+"/ c #678458",
+"( c #010101",
+"_ c #EBEAEA",
+": c #F0EEF0",
+"< c #F3EFF3",
+"[ c #95B487",
+"} c #92AE85",
+"| c #759267",
+"1 c #E4E3E3",
+"2 c #EFECEE",
+"3 c #F3EFF2",
+"4 c #F6F2F6",
+"5 c #91B182",
+"6 c #90AE81",
+"7 c #859F76",
+"8 c #688559",
+"9 c #ECEAEB",
+"0 c #F1EDF0",
+"a c #F4F0F4",
+"b c #8BAE7B",
+"c c #8BAD7B",
+"d c #8EAA81",
+"e c #7A956D",
+"f c #E2E1E1",
+"g c #EFECEF",
+"h c #F2EFF2",
+"i c #F5F1F5",
+"j c #8AAD7A",
+"k c #8AAC7A",
+"l c #8DAD7F",
+"m c #8AA67F",
+"n c #69875B",
+"o c #D9D9D7",
+"p c #E5E4E3",
+"q c #ECEBEB",
+"r c #EAE9E9",
+"s c #E7E7E7",
+"t c #8FAE81",
+"u c #90AE83",
+"v c #8BAB7E",
+"w c #89A67C",
+"x c #718E62",
+"y c #B9BEB5",
+"z c #BBBFB7",
+"A c #BDC1B8",
+"B c #BFC3BB",
+"C c #BEC2BA",
+"D c #BEC2BB",
+"E c #739264",
+"F c #739364",
+"G c #729063",
+"H c #607C53",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .. ",
+" .. ",
+" +@#$ ",
+" .%&. ",
+" .*=-;. ",
+" >,')!. ",
+" .=~{]^/. ",
+" (_:<[}|. ",
+" .12345678. ",
+" .90a4bcde. ",
+" .fghiajklmn. ",
+" .opqrstuvwx. ",
+" .yzABCDEEFG8H. ",
+" .............. ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/sylpheed-logo.xpm b/src/pixmaps/sylpheed-logo.xpm
new file mode 100644
index 00000000..d727c392
--- /dev/null
+++ b/src/pixmaps/sylpheed-logo.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char * sylpheed_logo_xpm[] = {
+"128 40 10 1",
+" c None",
+". c #969696",
+"+ c #808080",
+"@ c #404040",
+"# c #565656",
+"$ c #ABABAB",
+"% c #000000",
+"& c #161616",
+"* c #2B2B2B",
+"= c #6B6B6B",
+" .+@@@#++$ $ ",
+" $#%%%%%%%%%%%&@@@@@&$ ",
+" #%%*@@@@%%%%%%%%%&@+ ",
+" $&@. ..",
+" *+ + += +%$",
+" =# $@* $=%= $#*%@ ",
+" @ .*%%+ .&%%& $%%. ",
+" @ $%& %%= +%* ",
+" + =%= .%& @%+ ",
+" + ++@++ *%$ *%= %& ",
+" # =#+.+#%&= .%# .%& =%= ",
+" #$ $+ $&%@ *%. *%= *% ",
+" # $ $&%# .%* $%%$ .%# ",
+" $# .$ =%%. *%. #%# *%$ ",
+" ==++==$ $%%@ $%* $%%$ .%# ",
+" %%% $$ $ #%= .+. #%@ +. +. $+$*%. ",
+" %%% #%@ =%# $%& $*@ =&%%%+ $%%. $=&%# .=@@&%= .=@@&%= +#=. .%* ",
+" %%% .@%%. &%. #%= +&%@ $&%@@&%@ #%* $##.&%= +$ $&%= +$ $&%= $#*. *%. ",
+" +%%% $..%* =%* $%& .+ @%+$*= @%@ $%%.=#$ $%% $# +%% $# +%% +&+ .%* ",
+" ++++$ =%%@ *%. &%. #%= %&$#$ %%= #%&#$ #%# $*$ %% $*$ %% #&$ *%= ",
+" =%%%%%%*= *%%+ .%* =%* $%%$ +%#= .%%$ &%@ %%$ *= =%# *= =%# @%$ +%& ",
+" @%&=+++#*%&= .%%& *%. &%+ #%# @%@$ #%@ =%* =%# =% =*#$ =% =*#$ +%= $&%= ",
+"+%&$ +@&. *%%+ =%* =%& &%$ %%. $%%$ &%. &%$ ** .=#. ** .=#. $%* @%& ",
+"+%$ $## #%%# &%+ &%= =%# +%@ *%+ =%* #%# %@ $$ %@ $$ #%= #&%# ",
+".@ +# +%%@ =%& $&%& &%. *%$ @%+ &%. $%%$ %& %& $%%$ #+%%$ ",
+" #$ $# @%%+ &%= .#&%= =%* $%# @%+ =%* @%@ %%. %%. =%% @+*%# $ ",
+" #$ #%%*$ +%& +=.%& &%.$= #%. $**$ &%. .%%.$+ #%& +$ #%& +$ @%%$ =&+$%%$+. ",
+" =#$ .#&%@= +%* +@+ *%= +%%@# $%* $#*. +%* @%%@+ $&%&+$.==$ $&%&+$.==$ #%%*@%&$ +%%*$ ",
+" +##@+@@@&@@=$ + $#%&#$ .%& +%&+ .+@%##@=. @%. @%*$ $@%%%*. $@%%%*. $&%%*= +%# ",
+" + *%= + +%*+$ ",
+" . .%& .%= ",
+" *%= *& ",
+" .%& .%= ",
+" .#@*@#=%%# *& ",
+" .*%=$ .%&$+$ .%# ",
+" .%&$ &%. &%$ ",
+" *%. @%+ =%# ",
+" %% @&+ &%$ ",
+" @%+ =&#$ =%* ",
+" +=@=+ $%%. "};
diff --git a/src/pixmaps/tb_address_book.xpm b/src/pixmaps/tb_address_book.xpm
new file mode 100644
index 00000000..289be56f
--- /dev/null
+++ b/src/pixmaps/tb_address_book.xpm
@@ -0,0 +1,56 @@
+/* XPM */
+static char * tb_address_book_xpm[] = {
+"24 24 29 1",
+" c None",
+". c #000000",
+"+ c #4B6772",
+"@ c #70929F",
+"# c #668B99",
+"$ c #5E808D",
+"% c #B6B6B5",
+"& c #52707B",
+"* c #23393F",
+"= c #A6A7A4",
+"- c #888D82",
+"; c #577782",
+"> c #5B7D8A",
+", c #9E6769",
+"' c #3C4035",
+") c #54594B",
+"! c #4E6A75",
+"~ c #91948E",
+"{ c #AE8182",
+"] c #E1D5D2",
+"^ c #F1F0EC",
+"/ c #AAAAA7",
+"( c #636361",
+"_ c #C2C2C0",
+": c #14090A",
+"< c #85A3AE",
+"[ c #CCCDC4",
+"} c #7697A3",
+"| c #999D91",
+" ",
+" ",
+" ",
+" ",
+" .......... ",
+" .+@#$$$$$$. ",
+" .@#$$$$$$.% ",
+" .&@$$*$$$$.% ",
+" .@#$**$$$.%% ",
+" .@#$*$*$$$.%=. ",
+" .&@$****$$.%%-. ",
+" .@#*$$$*$$.%=. ",
+" .;@$$$$$*$.%%-. ",
+" .>#$$$$$$$.%=. ",
+" .,...')!$$.%%~. ",
+" .{]^^^/(...%=. ",
+" .,]^^^^^^^_%~. ",
+" :..<[^^^^_=. ",
+" ...}[^|-. ",
+" ...$. ",
+" .. ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/trash.xpm b/src/pixmaps/trash.xpm
new file mode 100644
index 00000000..a201902b
--- /dev/null
+++ b/src/pixmaps/trash.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * trash_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #A1B7E7",
+"@ c #7B92CE",
+"# c #3B4766",
+"$ c #272A42",
+"% c #1B1C2E",
+"& c #5D6CAD",
+"* c #D2DEFB",
+"= c #52617C",
+" ",
+" ...... ",
+" ..++@#@@.. ",
+".@+++$%@@@&. ",
+".&+**@@@@&=. ",
+".=&@@&&==##. ",
+" .%&==##$%. ",
+" .=%%%%%%=. ",
+" .=+#@#&#=.... ",
+" .=+#@#&#=..... ",
+" .=+#@#&#=..... ",
+" .&+#@#&#=.... ",
+" .&&&=&=... ",
+" ....... ",
+" ",
+" "};
diff --git a/src/pixmaps/unread.xpm b/src/pixmaps/unread.xpm
new file mode 100644
index 00000000..b3c31e4f
--- /dev/null
+++ b/src/pixmaps/unread.xpm
@@ -0,0 +1,50 @@
+/* XPM */
+static char * unread_xpm[] = {
+"13 10 37 1",
+" c None",
+". c #000000",
+"+ c #3D81C1",
+"@ c #D4E3F0",
+"# c #D5E3F1",
+"$ c #2A5984",
+"% c #D1E0EF",
+"& c #D1E1EF",
+"* c #D2E2F0",
+"= c #94B9DC",
+"- c #C0D5EA",
+"; c #D4E2F0",
+"> c #C2D5EA",
+", c #80AAD6",
+"' c #346FA6",
+") c #C9D9ED",
+"! c #CFDEEF",
+"~ c #C9DBED",
+"{ c #3673AC",
+"] c #3B7EBD",
+"^ c #D2E1F0",
+"/ c #8EB0DA",
+"( c #A6C1E2",
+"_ c #77A0D3",
+": c #CCDCEE",
+"< c #D1DFEF",
+"[ c #8CAFDA",
+"} c #295883",
+"| c #BFD4E9",
+"1 c #7AA9D4",
+"2 c #6B9CCF",
+"3 c #91B4DB",
+"4 c #ABC4E3",
+"5 c #9DBCDF",
+"6 c #7DA6D5",
+"7 c #A4C0E0",
+"8 c #1E4060",
+" ........... ",
+".+@##@@##@@$.",
+".@+@@#%@&*+=.",
+".@-+#@*;*+>,.",
+".#@@+#@#')>>.",
+".!#~+{@]+^!/.",
+".#%+@;+^!+(_.",
+".@+&@;:<![}|.",
+".+1123[45678.",
+" ........... "};
diff --git a/src/pixmaps/vcard.xpm b/src/pixmaps/vcard.xpm
new file mode 100644
index 00000000..7b1aeec4
--- /dev/null
+++ b/src/pixmaps/vcard.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * vcard_xpm[] = {
+"16 16 6 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #4D4D4D",
+"# c #CFBF7A",
+"$ c #858585",
+" ",
+" ",
+" ...............",
+" .+++++++++++++.",
+" .+++++++++++++.",
+" .+@@@+++++++++.",
+" .+@#@+.+.+.+.+.",
+" .+@@@+++++++++.",
+" .+#@#+.+..+..+.",
+" .+@#@+++++++++.",
+" .+@$@+..+..+.+.",
+" .+@$@+++++++++.",
+" .+++++++++++++.",
+" ...............",
+" ",
+" "};
diff --git a/src/pop.c b/src/pop.c
new file mode 100644
index 00000000..483a076f
--- /dev/null
+++ b/src/pop.c
@@ -0,0 +1,862 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <time.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "pop.h"
+#include "md5.h"
+#include "prefs_account.h"
+#include "utils.h"
+#include "recv.h"
+
+static gint pop3_greeting_recv (Pop3Session *session,
+ const gchar *msg);
+static gint pop3_getauth_user_send (Pop3Session *session);
+static gint pop3_getauth_pass_send (Pop3Session *session);
+static gint pop3_getauth_apop_send (Pop3Session *session);
+#if USE_SSL
+static gint pop3_stls_send (Pop3Session *session);
+static gint pop3_stls_recv (Pop3Session *session);
+#endif
+static gint pop3_getrange_stat_send (Pop3Session *session);
+static gint pop3_getrange_stat_recv (Pop3Session *session,
+ const gchar *msg);
+static gint pop3_getrange_last_send (Pop3Session *session);
+static gint pop3_getrange_last_recv (Pop3Session *session,
+ const gchar *msg);
+static gint pop3_getrange_uidl_send (Pop3Session *session);
+static gint pop3_getrange_uidl_recv (Pop3Session *session,
+ const gchar *data,
+ guint len);
+static gint pop3_getsize_list_send (Pop3Session *session);
+static gint pop3_getsize_list_recv (Pop3Session *session,
+ const gchar *data,
+ guint len);
+static gint pop3_retr_send (Pop3Session *session);
+static gint pop3_retr_recv (Pop3Session *session,
+ const gchar *data,
+ guint len);
+static gint pop3_delete_send (Pop3Session *session);
+static gint pop3_delete_recv (Pop3Session *session);
+static gint pop3_logout_send (Pop3Session *session);
+
+static void pop3_gen_send (Pop3Session *session,
+ const gchar *format, ...);
+
+static void pop3_session_destroy (Session *session);
+
+static gint pop3_write_msg_to_file (const gchar *file,
+ const gchar *data,
+ guint len);
+
+static Pop3State pop3_lookup_next (Pop3Session *session);
+static Pop3ErrorValue pop3_ok (Pop3Session *session,
+ const gchar *msg);
+
+static gint pop3_session_recv_msg (Session *session,
+ const gchar *msg);
+static gint pop3_session_recv_data_finished (Session *session,
+ guchar *data,
+ guint len);
+
+
+static gint pop3_greeting_recv(Pop3Session *session, const gchar *msg)
+{
+ session->state = POP3_GREETING;
+
+ session->greeting = g_strdup(msg);
+ return PS_SUCCESS;
+}
+
+#if USE_SSL
+static gint pop3_stls_send(Pop3Session *session)
+{
+ session->state = POP3_STLS;
+ pop3_gen_send(session, "STLS");
+ return PS_SUCCESS;
+}
+
+static gint pop3_stls_recv(Pop3Session *session)
+{
+ if (session_start_tls(SESSION(session)) < 0) {
+ session->error_val = PS_SOCKET;
+ return -1;
+ }
+ return PS_SUCCESS;
+}
+#endif /* USE_SSL */
+
+static gint pop3_getauth_user_send(Pop3Session *session)
+{
+ g_return_val_if_fail(session->user != NULL, -1);
+
+ session->state = POP3_GETAUTH_USER;
+ pop3_gen_send(session, "USER %s", session->user);
+ return PS_SUCCESS;
+}
+
+static gint pop3_getauth_pass_send(Pop3Session *session)
+{
+ g_return_val_if_fail(session->pass != NULL, -1);
+
+ session->state = POP3_GETAUTH_PASS;
+ pop3_gen_send(session, "PASS %s", session->pass);
+ return PS_SUCCESS;
+}
+
+static gint pop3_getauth_apop_send(Pop3Session *session)
+{
+ gchar *start, *end;
+ gchar *apop_str;
+ gchar md5sum[33];
+
+ g_return_val_if_fail(session->user != NULL, -1);
+ g_return_val_if_fail(session->pass != NULL, -1);
+
+ session->state = POP3_GETAUTH_APOP;
+
+ if ((start = strchr(session->greeting, '<')) == NULL) {
+ log_warning(_("Required APOP timestamp not found "
+ "in greeting\n"));
+ session->error_val = PS_PROTOCOL;
+ return -1;
+ }
+
+ if ((end = strchr(start, '>')) == NULL || end == start + 1) {
+ log_warning(_("Timestamp syntax error in greeting\n"));
+ session->error_val = PS_PROTOCOL;
+ return -1;
+ }
+
+ *(end + 1) = '\0';
+
+ apop_str = g_strconcat(start, session->pass, NULL);
+ md5_hex_digest(md5sum, apop_str);
+ g_free(apop_str);
+
+ pop3_gen_send(session, "APOP %s %s", session->user, md5sum);
+
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_stat_send(Pop3Session *session)
+{
+ session->state = POP3_GETRANGE_STAT;
+ pop3_gen_send(session, "STAT");
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_stat_recv(Pop3Session *session, const gchar *msg)
+{
+ if (sscanf(msg, "%d %d", &session->count, &session->total_bytes) != 2) {
+ log_warning(_("POP3 protocol error\n"));
+ session->error_val = PS_PROTOCOL;
+ return -1;
+ } else {
+ if (session->count == 0) {
+ session->uidl_is_valid = TRUE;
+ } else {
+ session->msg = g_new0(Pop3MsgInfo, session->count + 1);
+ session->cur_msg = 1;
+ }
+ }
+
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_last_send(Pop3Session *session)
+{
+ session->state = POP3_GETRANGE_LAST;
+ pop3_gen_send(session, "LAST");
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_last_recv(Pop3Session *session, const gchar *msg)
+{
+ gint last;
+
+ if (sscanf(msg, "%d", &last) == 0) {
+ log_warning(_("POP3 protocol error\n"));
+ session->error_val = PS_PROTOCOL;
+ return -1;
+ } else {
+ if (session->count > last) {
+ session->new_msg_exist = TRUE;
+ session->cur_msg = last + 1;
+ } else
+ session->cur_msg = 0;
+ }
+
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_uidl_send(Pop3Session *session)
+{
+ session->state = POP3_GETRANGE_UIDL;
+ pop3_gen_send(session, "UIDL");
+ return PS_SUCCESS;
+}
+
+static gint pop3_getrange_uidl_recv(Pop3Session *session, const gchar *data,
+ guint len)
+{
+ gchar id[IDLEN + 1];
+ gchar buf[POPBUFSIZE];
+ gint buf_len;
+ gint num;
+ time_t recv_time;
+ const gchar *p = data;
+ const gchar *lastp = data + len;
+ const gchar *newline;
+
+ while (p < lastp) {
+ if ((newline = memchr(p, '\r', lastp - p)) == NULL)
+ return -1;
+ buf_len = MIN(newline - p, sizeof(buf) - 1);
+ memcpy(buf, p, buf_len);
+ buf[buf_len] = '\0';
+
+ p = newline + 1;
+ if (p < lastp && *p == '\n') p++;
+
+ if (sscanf(buf, "%d %" Xstr(IDLEN) "s", &num, id) != 2 ||
+ num <= 0 || num > session->count) {
+ log_warning(_("invalid UIDL response: %s\n"), buf);
+ continue;
+ }
+
+ session->msg[num].uidl = g_strdup(id);
+
+ recv_time = (time_t)g_hash_table_lookup(session->uidl_table, id);
+ session->msg[num].recv_time = recv_time;
+
+ if (!session->ac_prefs->getall && recv_time != RECV_TIME_NONE)
+ session->msg[num].received = TRUE;
+
+ if (!session->new_msg_exist &&
+ (session->ac_prefs->getall || recv_time == RECV_TIME_NONE ||
+ session->ac_prefs->rmmail)) {
+ session->cur_msg = num;
+ session->new_msg_exist = TRUE;
+ }
+ }
+
+ session->uidl_is_valid = TRUE;
+ return PS_SUCCESS;
+}
+
+static gint pop3_getsize_list_send(Pop3Session *session)
+{
+ session->state = POP3_GETSIZE_LIST;
+ pop3_gen_send(session, "LIST");
+ return PS_SUCCESS;
+}
+
+static gint pop3_getsize_list_recv(Pop3Session *session, const gchar *data,
+ guint len)
+{
+ gchar buf[POPBUFSIZE];
+ gint buf_len;
+ guint num, size;
+ const gchar *p = data;
+ const gchar *lastp = data + len;
+ const gchar *newline;
+
+ while (p < lastp) {
+ if ((newline = memchr(p, '\r', lastp - p)) == NULL)
+ return -1;
+ buf_len = MIN(newline - p, sizeof(buf) - 1);
+ memcpy(buf, p, buf_len);
+ buf[buf_len] = '\0';
+
+ p = newline + 1;
+ if (p < lastp && *p == '\n') p++;
+
+ if (sscanf(buf, "%u %u", &num, &size) != 2) {
+ session->error_val = PS_PROTOCOL;
+ return -1;
+ }
+
+ if (num > 0 && num <= session->count)
+ session->msg[num].size = size;
+ if (num > 0 && num < session->cur_msg)
+ session->cur_total_bytes += size;
+ }
+
+ return PS_SUCCESS;
+}
+
+static gint pop3_retr_send(Pop3Session *session)
+{
+ session->state = POP3_RETR;
+ pop3_gen_send(session, "RETR %d", session->cur_msg);
+ return PS_SUCCESS;
+}
+
+static gint pop3_retr_recv(Pop3Session *session, const gchar *data, guint len)
+{
+ gchar *file;
+ gint drop_ok;
+
+ file = get_tmp_file();
+ if (pop3_write_msg_to_file(file, data, len) < 0) {
+ g_free(file);
+ session->error_val = PS_IOERR;
+ return -1;
+ }
+
+ drop_ok = session->drop_message(session, file);
+ unlink(file);
+ g_free(file);
+ if (drop_ok < 0) {
+ session->error_val = PS_IOERR;
+ return -1;
+ }
+
+ session->cur_total_bytes += session->msg[session->cur_msg].size;
+ session->cur_total_recv_bytes += session->msg[session->cur_msg].size;
+ session->cur_total_num++;
+
+ session->msg[session->cur_msg].received = TRUE;
+ session->msg[session->cur_msg].recv_time =
+ drop_ok == DROP_DONT_RECEIVE ? RECV_TIME_KEEP
+ : drop_ok == DROP_DELETE ? RECV_TIME_DELETE
+ : session->current_time;
+
+ return PS_SUCCESS;
+}
+
+static gint pop3_delete_send(Pop3Session *session)
+{
+ session->state = POP3_DELETE;
+ pop3_gen_send(session, "DELE %d", session->cur_msg);
+ return PS_SUCCESS;
+}
+
+static gint pop3_delete_recv(Pop3Session *session)
+{
+ session->msg[session->cur_msg].deleted = TRUE;
+ return PS_SUCCESS;
+}
+
+static gint pop3_logout_send(Pop3Session *session)
+{
+ session->state = POP3_LOGOUT;
+ pop3_gen_send(session, "QUIT");
+ return PS_SUCCESS;
+}
+
+static void pop3_gen_send(Pop3Session *session, const gchar *format, ...)
+{
+ gchar buf[POPBUFSIZE + 1];
+ va_list args;
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf) - 2, format, args);
+ va_end(args);
+
+ if (!strncasecmp(buf, "PASS ", 5))
+ log_print("POP3> PASS ********\n");
+ else
+ log_print("POP3> %s\n", buf);
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+}
+
+Session *pop3_session_new(PrefsAccount *account)
+{
+ Pop3Session *session;
+
+ g_return_val_if_fail(account != NULL, NULL);
+
+ session = g_new0(Pop3Session, 1);
+
+ session_init(SESSION(session));
+
+ SESSION(session)->type = SESSION_POP3;
+
+ SESSION(session)->recv_msg = pop3_session_recv_msg;
+ SESSION(session)->recv_data_finished = pop3_session_recv_data_finished;
+ SESSION(session)->send_data_finished = NULL;
+
+ SESSION(session)->destroy = pop3_session_destroy;
+
+ session->state = POP3_READY;
+ session->ac_prefs = account;
+ session->uidl_table = pop3_get_uidl_table(account);
+ session->current_time = time(NULL);
+ session->error_val = PS_SUCCESS;
+ session->error_msg = NULL;
+
+ return SESSION(session);
+}
+
+static void pop3_session_destroy(Session *session)
+{
+ Pop3Session *pop3_session = POP3_SESSION(session);
+ gint n;
+
+ g_return_if_fail(session != NULL);
+
+ for (n = 1; n <= pop3_session->count; n++)
+ g_free(pop3_session->msg[n].uidl);
+ g_free(pop3_session->msg);
+
+ if (pop3_session->uidl_table) {
+ hash_free_strings(pop3_session->uidl_table);
+ g_hash_table_destroy(pop3_session->uidl_table);
+ }
+
+ g_free(pop3_session->greeting);
+ g_free(pop3_session->user);
+ g_free(pop3_session->pass);
+ g_free(pop3_session->error_msg);
+}
+
+GHashTable *pop3_get_uidl_table(PrefsAccount *ac_prefs)
+{
+ GHashTable *table;
+ gchar *path;
+ FILE *fp;
+ gchar buf[POPBUFSIZE];
+ gchar uidl[POPBUFSIZE];
+ time_t recv_time;
+ time_t now;
+
+ table = g_hash_table_new(g_str_hash, g_str_equal);
+
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ "uidl", G_DIR_SEPARATOR_S, ac_prefs->recv_server,
+ "-", ac_prefs->userid, NULL);
+ if ((fp = fopen(path, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ "uidl-", ac_prefs->recv_server,
+ "-", ac_prefs->userid, NULL);
+ if ((fp = fopen(path, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+ return table;
+ }
+ }
+ g_free(path);
+
+ now = time(NULL);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ recv_time = RECV_TIME_NONE;
+ if (sscanf(buf, "%s\t%ld", uidl, &recv_time) != 2) {
+ if (sscanf(buf, "%s", uidl) != 1)
+ continue;
+ else
+ recv_time = now;
+ }
+ if (recv_time == RECV_TIME_NONE)
+ recv_time = RECV_TIME_RECEIVED;
+ g_hash_table_insert(table, g_strdup(uidl),
+ GINT_TO_POINTER(recv_time));
+ }
+
+ fclose(fp);
+ return table;
+}
+
+gint pop3_write_uidl_list(Pop3Session *session)
+{
+ gchar *path;
+ FILE *fp;
+ Pop3MsgInfo *msg;
+ gint n;
+
+ if (!session->uidl_is_valid) return 0;
+
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ "uidl", G_DIR_SEPARATOR_S,
+ session->ac_prefs->recv_server,
+ "-", session->ac_prefs->userid, NULL);
+ if ((fp = fopen(path, "wb")) == NULL) {
+ FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+ return -1;
+ }
+
+ for (n = 1; n <= session->count; n++) {
+ msg = &session->msg[n];
+ if (msg->uidl && msg->received && !msg->deleted)
+ fprintf(fp, "%s\t%ld\n", msg->uidl, msg->recv_time);
+ }
+
+ if (fclose(fp) == EOF) FILE_OP_ERROR(path, "fclose");
+ g_free(path);
+
+ return 0;
+}
+
+static gint pop3_write_msg_to_file(const gchar *file, const gchar *data,
+ guint len)
+{
+ FILE *fp;
+ const gchar *prev, *cur;
+
+ g_return_val_if_fail(file != NULL, -1);
+
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ if (change_file_mode_rw(fp, file) < 0)
+ FILE_OP_ERROR(file, "chmod");
+
+ /* +------------------+----------------+--------------------------+ *
+ * ^data ^prev ^cur data+len-1^ */
+
+ prev = data;
+ while ((cur = (gchar *)my_memmem(prev, len - (prev - data), "\r\n", 2))
+ != NULL) {
+ if ((cur > prev && fwrite(prev, cur - prev, 1, fp) < 1) ||
+ fputc('\n', fp) == EOF) {
+ FILE_OP_ERROR(file, "fwrite");
+ g_warning("can't write to file: %s\n", file);
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+
+ if (cur == data + len - 1) {
+ prev = cur + 1;
+ break;
+ }
+
+ if (*(cur + 1) == '\n')
+ prev = cur + 2;
+ else
+ prev = cur + 1;
+
+ if (prev - data < len - 1 && *prev == '.' && *(prev + 1) == '.')
+ prev++;
+
+ if (prev - data >= len)
+ break;
+ }
+
+ if (prev - data < len &&
+ fwrite(prev, len - (prev - data), 1, fp) < 1) {
+ FILE_OP_ERROR(file, "fwrite");
+ g_warning("can't write to file: %s\n", file);
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+ if (data[len - 1] != '\r' && data[len - 1] != '\n') {
+ if (fputc('\n', fp) == EOF) {
+ FILE_OP_ERROR(file, "fputc");
+ g_warning("can't write to file: %s\n", file);
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+ }
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ unlink(file);
+ return -1;
+ }
+
+ return 0;
+}
+
+static Pop3State pop3_lookup_next(Pop3Session *session)
+{
+ Pop3MsgInfo *msg;
+ PrefsAccount *ac = session->ac_prefs;
+ gint size;
+ gboolean size_limit_over;
+
+ for (;;) {
+ msg = &session->msg[session->cur_msg];
+ size = msg->size;
+ size_limit_over =
+ (ac->enable_size_limit &&
+ ac->size_limit > 0 &&
+ size > ac->size_limit * 1024);
+
+ if (msg->recv_time == RECV_TIME_DELETE ||
+ (ac->rmmail &&
+ msg->recv_time != RECV_TIME_NONE &&
+ msg->recv_time != RECV_TIME_KEEP &&
+ session->current_time - msg->recv_time >=
+ ac->msg_leave_time * 24 * 60 * 60)) {
+ log_print(_("POP3: Deleting expired message %d\n"),
+ session->cur_msg);
+ pop3_delete_send(session);
+ return POP3_DELETE;
+ }
+
+ if (size_limit_over)
+ log_print
+ (_("POP3: Skipping message %d (%d bytes)\n"),
+ session->cur_msg, size);
+
+ if (size == 0 || msg->received || size_limit_over) {
+ session->cur_total_bytes += size;
+ if (session->cur_msg == session->count) {
+ pop3_logout_send(session);
+ return POP3_LOGOUT;
+ } else
+ session->cur_msg++;
+ } else
+ break;
+ }
+
+ pop3_retr_send(session);
+ return POP3_RETR;
+}
+
+static Pop3ErrorValue pop3_ok(Pop3Session *session, const gchar *msg)
+{
+ Pop3ErrorValue ok;
+
+ log_print("POP3< %s\n", msg);
+
+ if (!strncmp(msg, "+OK", 3))
+ ok = PS_SUCCESS;
+ else if (!strncmp(msg, "-ERR", 4)) {
+ if (strstr(msg + 4, "lock") ||
+ strstr(msg + 4, "Lock") ||
+ strstr(msg + 4, "LOCK") ||
+ strstr(msg + 4, "wait")) {
+ log_warning(_("mailbox is locked\n"));
+ ok = PS_LOCKBUSY;
+ } else if (strcasestr(msg + 4, "timeout")) {
+ log_warning(_("session timeout\n"));
+ ok = PS_ERROR;
+ } else {
+ switch (session->state) {
+#if USE_SSL
+ case POP3_STLS:
+ log_warning(_("can't start TLS session\n"));
+ ok = PS_ERROR;
+ break;
+#endif
+ case POP3_GETAUTH_USER:
+ case POP3_GETAUTH_PASS:
+ case POP3_GETAUTH_APOP:
+ log_warning(_("error occurred on authentication\n"));
+ ok = PS_AUTHFAIL;
+ break;
+ case POP3_GETRANGE_LAST:
+ case POP3_GETRANGE_UIDL:
+ log_warning(_("command not supported\n"));
+ ok = PS_NOTSUPPORTED;
+ break;
+ default:
+ log_warning(_("error occurred on POP3 session\n"));
+ ok = PS_ERROR;
+ }
+ }
+
+ g_free(session->error_msg);
+ session->error_msg = g_strdup(msg);
+ fprintf(stderr, "POP3: %s\n", msg);
+ } else
+ ok = PS_PROTOCOL;
+
+ session->error_val = ok;
+ return ok;
+}
+
+static gint pop3_session_recv_msg(Session *session, const gchar *msg)
+{
+ Pop3Session *pop3_session = POP3_SESSION(session);
+ Pop3ErrorValue val = PS_SUCCESS;
+ const guchar *body;
+
+ body = msg;
+ if (pop3_session->state != POP3_GETRANGE_UIDL_RECV &&
+ pop3_session->state != POP3_GETSIZE_LIST_RECV) {
+ val = pop3_ok(pop3_session, msg);
+ if (val != PS_SUCCESS) {
+ if (val != PS_NOTSUPPORTED) {
+ pop3_session->state = POP3_ERROR;
+ return -1;
+ }
+ }
+
+ if (*body == '+' || *body == '-')
+ body++;
+ while (isalpha(*body))
+ body++;
+ while (isspace(*body))
+ body++;
+ }
+
+ switch (pop3_session->state) {
+ case POP3_READY:
+ case POP3_GREETING:
+ pop3_greeting_recv(pop3_session, body);
+#if USE_SSL
+ if (pop3_session->ac_prefs->ssl_pop == SSL_STARTTLS)
+ pop3_stls_send(pop3_session);
+ else
+#endif
+ if (pop3_session->ac_prefs->use_apop_auth)
+ pop3_getauth_apop_send(pop3_session);
+ else
+ pop3_getauth_user_send(pop3_session);
+ break;
+#if USE_SSL
+ case POP3_STLS:
+ if (pop3_stls_recv(pop3_session) != PS_SUCCESS)
+ return -1;
+ if (pop3_session->ac_prefs->use_apop_auth)
+ pop3_getauth_apop_send(pop3_session);
+ else
+ pop3_getauth_user_send(pop3_session);
+ break;
+#endif
+ case POP3_GETAUTH_USER:
+ pop3_getauth_pass_send(pop3_session);
+ break;
+ case POP3_GETAUTH_PASS:
+ case POP3_GETAUTH_APOP:
+ pop3_getrange_stat_send(pop3_session);
+ break;
+ case POP3_GETRANGE_STAT:
+ if (pop3_getrange_stat_recv(pop3_session, body) < 0)
+ return -1;
+ if (pop3_session->count > 0)
+ pop3_getrange_uidl_send(pop3_session);
+ else
+ pop3_logout_send(pop3_session);
+ break;
+ case POP3_GETRANGE_LAST:
+ if (val == PS_NOTSUPPORTED)
+ pop3_session->error_val = PS_SUCCESS;
+ else if (pop3_getrange_last_recv(pop3_session, body) < 0)
+ return -1;
+ if (pop3_session->cur_msg > 0)
+ pop3_getsize_list_send(pop3_session);
+ else
+ pop3_logout_send(pop3_session);
+ break;
+ case POP3_GETRANGE_UIDL:
+ if (val == PS_NOTSUPPORTED) {
+ pop3_session->error_val = PS_SUCCESS;
+ pop3_getrange_last_send(pop3_session);
+ } else {
+ pop3_session->state = POP3_GETRANGE_UIDL_RECV;
+ session_recv_data(session, 0, ".\r\n");
+ }
+ break;
+ case POP3_GETSIZE_LIST:
+ pop3_session->state = POP3_GETSIZE_LIST_RECV;
+ session_recv_data(session, 0, ".\r\n");
+ break;
+ case POP3_RETR:
+ pop3_session->state = POP3_RETR_RECV;
+ session_recv_data(session, 0, ".\r\n");
+ break;
+ case POP3_DELETE:
+ pop3_delete_recv(pop3_session);
+ if (pop3_session->cur_msg == pop3_session->count)
+ pop3_logout_send(pop3_session);
+ else {
+ pop3_session->cur_msg++;
+ if (pop3_lookup_next(pop3_session) == POP3_ERROR)
+ return -1;
+ }
+ break;
+ case POP3_LOGOUT:
+ session_disconnect(session);
+ break;
+ case POP3_ERROR:
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
+static gint pop3_session_recv_data_finished(Session *session, guchar *data,
+ guint len)
+{
+ Pop3Session *pop3_session = POP3_SESSION(session);
+ Pop3ErrorValue val = PS_SUCCESS;
+
+ switch (pop3_session->state) {
+ case POP3_GETRANGE_UIDL_RECV:
+ val = pop3_getrange_uidl_recv(pop3_session, data, len);
+ if (val == PS_SUCCESS) {
+ if (pop3_session->new_msg_exist)
+ pop3_getsize_list_send(pop3_session);
+ else
+ pop3_logout_send(pop3_session);
+ } else
+ return -1;
+ break;
+ case POP3_GETSIZE_LIST_RECV:
+ val = pop3_getsize_list_recv(pop3_session, data, len);
+ if (val == PS_SUCCESS) {
+ if (pop3_lookup_next(pop3_session) == POP3_ERROR)
+ return -1;
+ } else
+ return -1;
+ break;
+ case POP3_RETR_RECV:
+ if (pop3_retr_recv(pop3_session, data, len) < 0)
+ return -1;
+
+ if (pop3_session->msg[pop3_session->cur_msg].recv_time
+ == RECV_TIME_DELETE ||
+ (pop3_session->ac_prefs->rmmail &&
+ pop3_session->ac_prefs->msg_leave_time == 0 &&
+ pop3_session->msg[pop3_session->cur_msg].recv_time
+ != RECV_TIME_KEEP))
+ pop3_delete_send(pop3_session);
+ else if (pop3_session->cur_msg == pop3_session->count)
+ pop3_logout_send(pop3_session);
+ else {
+ pop3_session->cur_msg++;
+ if (pop3_lookup_next(pop3_session) == POP3_ERROR)
+ return -1;
+ }
+ break;
+ case POP3_ERROR:
+ default:
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/pop.h b/src/pop.h
new file mode 100644
index 00000000..515bc61b
--- /dev/null
+++ b/src/pop.h
@@ -0,0 +1,153 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __POP_H__
+#define __POP_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <time.h>
+
+#include "session.h"
+#include "prefs_account.h"
+
+typedef struct _Pop3MsgInfo Pop3MsgInfo;
+typedef struct _Pop3Session Pop3Session;
+
+#define POP3_SESSION(obj) ((Pop3Session *)obj)
+
+typedef enum {
+ POP3_READY,
+ POP3_GREETING,
+#if USE_SSL
+ POP3_STLS,
+#endif
+ POP3_GETAUTH_USER,
+ POP3_GETAUTH_PASS,
+ POP3_GETAUTH_APOP,
+ POP3_GETRANGE_STAT,
+ POP3_GETRANGE_LAST,
+ POP3_GETRANGE_UIDL,
+ POP3_GETRANGE_UIDL_RECV,
+ POP3_GETSIZE_LIST,
+ POP3_GETSIZE_LIST_RECV,
+ POP3_RETR,
+ POP3_RETR_RECV,
+ POP3_DELETE,
+ POP3_LOGOUT,
+ POP3_ERROR,
+
+ N_POP3_STATE
+} Pop3State;
+
+typedef enum {
+ PS_SUCCESS = 0, /* command successful */
+ PS_NOMAIL = 1, /* no mail available */
+ PS_SOCKET = 2, /* socket I/O woes */
+ PS_AUTHFAIL = 3, /* user authorization failed */
+ PS_PROTOCOL = 4, /* protocol violation */
+ PS_SYNTAX = 5, /* command-line syntax error */
+ PS_IOERR = 6, /* file I/O error */
+ PS_ERROR = 7, /* protocol error */
+ PS_EXCLUDE = 8, /* client-side exclusion error */
+ PS_LOCKBUSY = 9, /* server responded lock busy */
+ PS_SMTP = 10, /* SMTP error */
+ PS_DNS = 11, /* fatal DNS error */
+ PS_BSMTP = 12, /* output batch could not be opened */
+ PS_MAXFETCH = 13, /* poll ended by fetch limit */
+
+ PS_NOTSUPPORTED = 14, /* command not supported */
+
+ /* leave space for more codes */
+
+ PS_CONTINUE = 128 /* more responses may follow */
+} Pop3ErrorValue;
+
+typedef enum {
+ RECV_TIME_NONE = 0,
+ RECV_TIME_RECEIVED = 1,
+ RECV_TIME_KEEP = 2,
+ RECV_TIME_DELETE = 3
+} RecvTime;
+
+typedef enum {
+ DROP_OK = 0,
+ DROP_DONT_RECEIVE = 1,
+ DROP_DELETE = 2,
+ DROP_ERROR = -1
+} Pop3DropValue;
+
+struct _Pop3MsgInfo
+{
+ gint size;
+ gchar *uidl;
+ time_t recv_time;
+ guint received : 1;
+ guint deleted : 1;
+};
+
+struct _Pop3Session
+{
+ Session session;
+
+ Pop3State state;
+
+ PrefsAccount *ac_prefs;
+
+ gchar *greeting;
+ gchar *user;
+ gchar *pass;
+ gint count;
+ gint total_bytes;
+ gint cur_msg;
+ gint cur_total_num;
+ gint cur_total_bytes;
+ gint cur_total_recv_bytes;
+
+ Pop3MsgInfo *msg;
+
+ GHashTable *uidl_table;
+
+ gboolean new_msg_exist;
+ gboolean uidl_is_valid;
+
+ time_t current_time;
+
+ Pop3ErrorValue error_val;
+ gchar *error_msg;
+
+ gpointer data;
+
+ /* virtual method to drop message */
+ gint (*drop_message) (Pop3Session *session,
+ const gchar *file);
+};
+
+#define POPBUFSIZE 512
+/* #define IDLEN 128 */
+#define IDLEN POPBUFSIZE
+
+Session *pop3_session_new (PrefsAccount *account);
+GHashTable *pop3_get_uidl_table (PrefsAccount *account);
+gint pop3_write_uidl_list (Pop3Session *session);
+
+#endif /* __POP_H__ */
diff --git a/src/prefs.c b/src/prefs.c
new file mode 100644
index 00000000..d9972b57
--- /dev/null
+++ b/src/prefs.c
@@ -0,0 +1,817 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "gtkutils.h"
+
+typedef enum
+{
+ DUMMY_PARAM
+} DummyEnum;
+
+void prefs_read_config(PrefParam *param, const gchar *label,
+ const gchar *rcfile)
+{
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ gchar *rcpath;
+ gchar *block_label;
+
+ g_return_if_fail(param != NULL);
+ g_return_if_fail(label != NULL);
+ g_return_if_fail(rcfile != NULL);
+
+ debug_print(_("Reading configuration...\n"));
+
+ prefs_set_default(param);
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ block_label = g_strdup_printf("[%s]", label);
+
+ /* search aiming block */
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ gint val;
+
+ val = strncmp(buf, block_label, strlen(block_label));
+ if (val == 0) {
+ debug_print(_("Found %s\n"), block_label);
+ break;
+ }
+ }
+ g_free(block_label);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ /* reached next block */
+ if (buf[0] == '[') break;
+
+ prefs_config_parse_one_line(param, buf);
+ }
+
+ debug_print(_("Finished reading configuration.\n"));
+ fclose(fp);
+}
+
+void prefs_config_parse_one_line(PrefParam *param, const gchar *buf)
+{
+ gint i;
+ gint name_len;
+ const gchar *value;
+
+ for (i = 0; param[i].name != NULL; i++) {
+ name_len = strlen(param[i].name);
+ if (strncasecmp(buf, param[i].name, name_len))
+ continue;
+ if (buf[name_len] != '=')
+ continue;
+ value = buf + name_len + 1;
+ /* debug_print("%s = %s\n", param[i].name, value); */
+
+ switch (param[i].type) {
+ case P_STRING:
+ g_free(*((gchar **)param[i].data));
+ *((gchar **)param[i].data) =
+ *value ? g_strdup(value) : NULL;
+ break;
+ case P_INT:
+ *((gint *)param[i].data) =
+ (gint)atoi(value);
+ break;
+ case P_BOOL:
+ *((gboolean *)param[i].data) =
+ (*value == '0' || *value == '\0')
+ ? FALSE : TRUE;
+ break;
+ case P_ENUM:
+ *((DummyEnum *)param[i].data) =
+ (DummyEnum)atoi(value);
+ break;
+ case P_USHORT:
+ *((gushort *)param[i].data) =
+ (gushort)atoi(value);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+#define TRY(func) \
+if (!(func)) \
+{ \
+ g_warning(_("failed to write configuration to file\n")); \
+ if (orig_fp) fclose(orig_fp); \
+ prefs_file_close_revert(pfile); \
+ g_free(rcpath); \
+ g_free(block_label); \
+ return; \
+} \
+
+void prefs_write_config(PrefParam *param, const gchar *label,
+ const gchar *rcfile)
+{
+ FILE *orig_fp;
+ PrefFile *pfile;
+ gchar *rcpath;
+ gchar buf[PREFSBUFSIZE];
+ gchar *block_label = NULL;
+ gboolean block_matched = FALSE;
+
+ g_return_if_fail(param != NULL);
+ g_return_if_fail(label != NULL);
+ g_return_if_fail(rcfile != NULL);
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL);
+ if ((orig_fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ }
+
+ if ((pfile = prefs_file_open(rcpath)) == NULL) {
+ g_warning(_("failed to write configuration to file\n"));
+ if (orig_fp) fclose(orig_fp);
+ g_free(rcpath);
+ return;
+ }
+
+ block_label = g_strdup_printf("[%s]", label);
+
+ /* search aiming block */
+ if (orig_fp) {
+ while (fgets(buf, sizeof(buf), orig_fp) != NULL) {
+ gint val;
+
+ val = strncmp(buf, block_label, strlen(block_label));
+ if (val == 0) {
+ debug_print(_("Found %s\n"), block_label);
+ block_matched = TRUE;
+ break;
+ } else
+ TRY(fputs(buf, pfile->fp) != EOF);
+ }
+ }
+
+ TRY(fprintf(pfile->fp, "%s\n", block_label) > 0);
+ g_free(block_label);
+ block_label = NULL;
+
+ /* write all param data to file */
+ TRY(prefs_file_write_param(pfile, param) == 0);
+
+ if (block_matched) {
+ while (fgets(buf, sizeof(buf), orig_fp) != NULL) {
+ /* next block */
+ if (buf[0] == '[') {
+ TRY(fputc('\n', pfile->fp) != EOF &&
+ fputs(buf, pfile->fp) != EOF);
+ break;
+ }
+ }
+ while (fgets(buf, sizeof(buf), orig_fp) != NULL)
+ TRY(fputs(buf, pfile->fp) != EOF);
+ }
+
+ if (orig_fp) fclose(orig_fp);
+ if (prefs_file_close(pfile) < 0)
+ g_warning(_("failed to write configuration to file\n"));
+ g_free(rcpath);
+
+ debug_print(_("Configuration is saved.\n"));
+}
+
+gint prefs_file_write_param(PrefFile *pfile, PrefParam *param)
+{
+ gint i;
+ gchar buf[PREFSBUFSIZE];
+
+ for (i = 0; param[i].name != NULL; i++) {
+ switch (param[i].type) {
+ case P_STRING:
+ g_snprintf(buf, sizeof(buf), "%s=%s\n", param[i].name,
+ *((gchar **)param[i].data) ?
+ *((gchar **)param[i].data) : "");
+ break;
+ case P_INT:
+ g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name,
+ *((gint *)param[i].data));
+ break;
+ case P_BOOL:
+ g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name,
+ *((gboolean *)param[i].data));
+ break;
+ case P_ENUM:
+ g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name,
+ *((DummyEnum *)param[i].data));
+ break;
+ case P_USHORT:
+ g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name,
+ *((gushort *)param[i].data));
+ break;
+ default:
+ buf[0] = '\0';
+ }
+
+ if (buf[0] != '\0') {
+ if (fputs(buf, pfile->fp) == EOF) {
+ perror("fputs");
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+PrefFile *prefs_file_open(const gchar *path)
+{
+ PrefFile *pfile;
+ gchar *tmppath;
+ FILE *fp;
+
+ g_return_val_if_fail(path != NULL, NULL);
+
+ tmppath = g_strconcat(path, ".tmp", NULL);
+ if ((fp = fopen(tmppath, "wb")) == NULL) {
+ FILE_OP_ERROR(tmppath, "fopen");
+ g_free(tmppath);
+ return NULL;
+ }
+
+ if (change_file_mode_rw(fp, tmppath) < 0)
+ FILE_OP_ERROR(tmppath, "chmod");
+
+ g_free(tmppath);
+
+ pfile = g_new(PrefFile, 1);
+ pfile->fp = fp;
+ pfile->path = g_strdup(path);
+
+ return pfile;
+}
+
+gint prefs_file_close(PrefFile *pfile)
+{
+ FILE *fp;
+ gchar *path;
+ gchar *tmppath;
+ gchar *bakpath = NULL;
+
+ g_return_val_if_fail(pfile != NULL, -1);
+
+ fp = pfile->fp;
+ path = pfile->path;
+ g_free(pfile);
+
+ tmppath = g_strconcat(path, ".tmp", NULL);
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(tmppath, "fclose");
+ unlink(tmppath);
+ g_free(path);
+ g_free(tmppath);
+ return -1;
+ }
+
+ if (is_file_exist(path)) {
+ bakpath = g_strconcat(path, ".bak", NULL);
+ if (rename(path, bakpath) < 0) {
+ FILE_OP_ERROR(path, "rename");
+ unlink(tmppath);
+ g_free(path);
+ g_free(tmppath);
+ g_free(bakpath);
+ return -1;
+ }
+ }
+
+ if (rename(tmppath, path) < 0) {
+ FILE_OP_ERROR(tmppath, "rename");
+ unlink(tmppath);
+ g_free(path);
+ g_free(tmppath);
+ g_free(bakpath);
+ return -1;
+ }
+
+ g_free(path);
+ g_free(tmppath);
+ g_free(bakpath);
+ return 0;
+}
+
+gint prefs_file_close_revert(PrefFile *pfile)
+{
+ gchar *tmppath;
+
+ g_return_val_if_fail(pfile != NULL, -1);
+
+ tmppath = g_strconcat(pfile->path, ".tmp", NULL);
+ fclose(pfile->fp);
+ if (unlink(tmppath) < 0) FILE_OP_ERROR(tmppath, "unlink");
+ g_free(tmppath);
+ g_free(pfile->path);
+ g_free(pfile);
+
+ return 0;
+}
+
+void prefs_set_default(PrefParam *param)
+{
+ gint i;
+
+ g_return_if_fail(param != NULL);
+
+ for (i = 0; param[i].name != NULL; i++) {
+ if (!param[i].data) continue;
+
+ switch (param[i].type) {
+ case P_STRING:
+ if (param[i].defval != NULL) {
+ if (!strncasecmp(param[i].defval, "ENV_", 4)) {
+ const gchar *envstr;
+ gchar *tmp = NULL;
+
+ envstr = g_getenv(param[i].defval + 4);
+ if (envstr) {
+ tmp = conv_codeset_strdup
+ (envstr,
+ conv_get_locale_charset_str(),
+ CS_UTF_8);
+ if (!tmp) {
+ g_warning("failed to convert character set.");
+ tmp = g_strdup(envstr);
+ }
+ }
+ *((gchar **)param[i].data) = tmp;
+ } else if (param[i].defval[0] == '~')
+ *((gchar **)param[i].data) =
+ g_strconcat(get_home_dir(),
+ param[i].defval + 1,
+ NULL);
+ else if (param[i].defval[0] != '\0')
+ *((gchar **)param[i].data) =
+ g_strdup(param[i].defval);
+ else
+ *((gchar **)param[i].data) = NULL;
+ } else
+ *((gchar **)param[i].data) = NULL;
+ break;
+ case P_INT:
+ if (param[i].defval != NULL)
+ *((gint *)param[i].data) =
+ (gint)atoi(param[i].defval);
+ else
+ *((gint *)param[i].data) = 0;
+ break;
+ case P_BOOL:
+ if (param[i].defval != NULL) {
+ if (!strcasecmp(param[i].defval, "TRUE"))
+ *((gboolean *)param[i].data) = TRUE;
+ else
+ *((gboolean *)param[i].data) =
+ atoi(param[i].defval) ? TRUE : FALSE;
+ } else
+ *((gboolean *)param[i].data) = FALSE;
+ break;
+ case P_ENUM:
+ if (param[i].defval != NULL)
+ *((DummyEnum*)param[i].data) =
+ (DummyEnum)atoi(param[i].defval);
+ else
+ *((DummyEnum *)param[i].data) = 0;
+ break;
+ case P_USHORT:
+ if (param[i].defval != NULL)
+ *((gushort *)param[i].data) =
+ (gushort)atoi(param[i].defval);
+ else
+ *((gushort *)param[i].data) = 0;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void prefs_free(PrefParam *param)
+{
+ gint i;
+
+ g_return_if_fail(param != NULL);
+
+ for (i = 0; param[i].name != NULL; i++) {
+ if (!param[i].data) continue;
+
+ switch (param[i].type) {
+ case P_STRING:
+ g_free(*((gchar **)param[i].data));
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void prefs_dialog_create(PrefsDialog *dialog)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *notebook;
+
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *apply_btn;
+
+ g_return_if_fail(dialog != NULL);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gtk_window_set_policy (GTK_WINDOW(window), FALSE, TRUE, FALSE);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show(vbox);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ notebook = gtk_notebook_new ();
+ gtk_widget_show(notebook);
+ gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
+ /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
+ gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
+
+ gtkut_button_set_create(&confirm_area,
+ &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"),
+ &apply_btn, _("Apply"));
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ dialog->window = window;
+ dialog->notebook = notebook;
+ dialog->ok_btn = ok_btn;
+ dialog->cancel_btn = cancel_btn;
+ dialog->apply_btn = apply_btn;
+}
+
+void prefs_dialog_destroy(PrefsDialog *dialog)
+{
+ gtk_widget_destroy(dialog->window);
+ dialog->window = NULL;
+ dialog->notebook = NULL;
+ dialog->ok_btn = NULL;
+ dialog->cancel_btn = NULL;
+ dialog->apply_btn = NULL;
+}
+
+void prefs_button_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
+{
+ gboolean is_active;
+
+ is_active = gtk_toggle_button_get_active(toggle_btn);
+ gtk_widget_set_sensitive(widget, is_active);
+}
+
+void prefs_set_dialog(PrefParam *param)
+{
+ gint i;
+
+ for (i = 0; param[i].name != NULL; i++) {
+ if (param[i].widget_set_func)
+ param[i].widget_set_func(&param[i]);
+ }
+}
+
+void prefs_set_data_from_dialog(PrefParam *param)
+{
+ gint i;
+
+ for (i = 0; param[i].name != NULL; i++) {
+ if (param[i].data_set_func)
+ param[i].data_set_func(&param[i]);
+ }
+}
+
+void prefs_set_dialog_to_default(PrefParam *param)
+{
+ gint i;
+ PrefParam tmpparam;
+ gchar *str_data = NULL;
+ gint int_data;
+ gushort ushort_data;
+ gboolean bool_data;
+ DummyEnum enum_data;
+
+ for (i = 0; param[i].name != NULL; i++) {
+ if (!param[i].widget_set_func) continue;
+
+ tmpparam = param[i];
+
+ switch (tmpparam.type) {
+ case P_STRING:
+#warning FIXME_GTK2
+ if (tmpparam.defval) {
+ if (!strncasecmp(tmpparam.defval, "ENV_", 4)) {
+ str_data = g_strdup(g_getenv(param[i].defval + 4));
+ tmpparam.data = &str_data;
+ break;
+ } else if (tmpparam.defval[0] == '~') {
+ str_data =
+ g_strconcat(get_home_dir(),
+ param[i].defval + 1,
+ NULL);
+ tmpparam.data = &str_data;
+ break;
+ }
+ }
+ tmpparam.data = &tmpparam.defval;
+ break;
+ case P_INT:
+ if (tmpparam.defval)
+ int_data = atoi(tmpparam.defval);
+ else
+ int_data = 0;
+ tmpparam.data = &int_data;
+ break;
+ case P_USHORT:
+ if (tmpparam.defval)
+ ushort_data = atoi(tmpparam.defval);
+ else
+ ushort_data = 0;
+ tmpparam.data = &ushort_data;
+ break;
+ case P_BOOL:
+ if (tmpparam.defval) {
+ if (!strcasecmp(tmpparam.defval, "TRUE"))
+ bool_data = TRUE;
+ else
+ bool_data = atoi(tmpparam.defval)
+ ? TRUE : FALSE;
+ } else
+ bool_data = FALSE;
+ tmpparam.data = &bool_data;
+ break;
+ case P_ENUM:
+ if (tmpparam.defval)
+ enum_data = (DummyEnum)atoi(tmpparam.defval);
+ else
+ enum_data = 0;
+ tmpparam.data = &enum_data;
+ break;
+ case P_OTHER:
+ break;
+ }
+ tmpparam.widget_set_func(&tmpparam);
+ g_free(str_data);
+ str_data = NULL;
+ }
+}
+
+void prefs_set_data_from_entry(PrefParam *pparam)
+{
+ gchar **str;
+ const gchar *entry_str;
+
+ g_return_if_fail(*pparam->widget != NULL);
+
+ entry_str = gtk_entry_get_text(GTK_ENTRY(*pparam->widget));
+
+ switch (pparam->type) {
+ case P_STRING:
+ str = (gchar **)pparam->data;
+ g_free(*str);
+ *str = entry_str[0] ? g_strdup(entry_str) : NULL;
+ break;
+ case P_USHORT:
+ *((gushort *)pparam->data) = atoi(entry_str);
+ break;
+ case P_INT:
+ *((gint *)pparam->data) = atoi(entry_str);
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkEntry widget: %d\n",
+ pparam->type);
+ }
+}
+
+void prefs_set_entry(PrefParam *pparam)
+{
+ gchar **str;
+
+ g_return_if_fail(*pparam->widget != NULL);
+
+ switch (pparam->type) {
+ case P_STRING:
+ str = (gchar **)pparam->data;
+ gtk_entry_set_text(GTK_ENTRY(*pparam->widget),
+ *str ? *str : "");
+ break;
+ case P_INT:
+ gtk_entry_set_text(GTK_ENTRY(*pparam->widget),
+ itos(*((gint *)pparam->data)));
+ break;
+ case P_USHORT:
+ gtk_entry_set_text(GTK_ENTRY(*pparam->widget),
+ itos(*((gushort *)pparam->data)));
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkEntry widget: %d\n",
+ pparam->type);
+ }
+}
+
+void prefs_set_data_from_text(PrefParam *pparam)
+{
+ gchar **str;
+ gchar *text = NULL, *tp = NULL;
+ gchar *tmp, *tmpp;
+
+ g_return_if_fail(*pparam->widget != NULL);
+ g_return_if_fail(GTK_IS_EDITABLE(*pparam->widget) ||
+ GTK_IS_TEXT_VIEW(*pparam->widget));
+
+ switch (pparam->type) {
+ case P_STRING:
+ str = (gchar **)pparam->data;
+ g_free(*str);
+ if (GTK_IS_EDITABLE(*pparam->widget)) {
+ tp = text = gtk_editable_get_chars
+ (GTK_EDITABLE(*pparam->widget), 0, -1);
+ } else if (GTK_IS_TEXT_VIEW(*pparam->widget)) {
+ GtkTextView *textview = GTK_TEXT_VIEW(*pparam->widget);
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+
+ buffer = gtk_text_view_get_buffer(textview);
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
+ tp = text = gtk_text_buffer_get_text
+ (buffer, &start, &end, FALSE);
+ }
+
+ g_return_if_fail(tp != NULL && text != NULL);
+
+ if (text[0] == '\0') {
+ *str = NULL;
+ g_free(text);
+ break;
+ }
+
+ Xalloca(tmpp = tmp, strlen(text) * 2 + 1,
+ { *str = NULL; break; });
+ while (*tp) {
+ if (*tp == '\n') {
+ *tmpp++ = '\\';
+ *tmpp++ = 'n';
+ tp++;
+ } else
+ *tmpp++ = *tp++;
+ }
+ *tmpp = '\0';
+ *str = g_strdup(tmp);
+ g_free(text);
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkTextView widget: %d\n",
+ pparam->type);
+ }
+}
+
+void prefs_set_text(PrefParam *pparam)
+{
+ gchar *buf, *sp, *bufp;
+ gchar **str;
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ g_return_if_fail(*pparam->widget != NULL);
+
+ switch (pparam->type) {
+ case P_STRING:
+ str = (gchar **)pparam->data;
+ if (*str) {
+ bufp = buf = alloca(strlen(*str) + 1);
+ if (!buf) buf = "";
+ else {
+ sp = *str;
+ while (*sp) {
+ if (*sp == '\\' && *(sp + 1) == 'n') {
+ *bufp++ = '\n';
+ sp += 2;
+ } else
+ *bufp++ = *sp++;
+ }
+ *bufp = '\0';
+ }
+ } else
+ buf = "";
+
+ text = GTK_TEXT_VIEW(*pparam->widget);
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_set_text(buffer, "", 0);
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_insert(buffer, &iter, buf, -1);
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkTextView widget: %d\n",
+ pparam->type);
+ }
+}
+
+void prefs_set_data_from_toggle(PrefParam *pparam)
+{
+ g_return_if_fail(pparam->type == P_BOOL);
+ g_return_if_fail(*pparam->widget != NULL);
+
+ *((gboolean *)pparam->data) =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*pparam->widget));
+}
+
+void prefs_set_toggle(PrefParam *pparam)
+{
+ g_return_if_fail(pparam->type == P_BOOL);
+ g_return_if_fail(*pparam->widget != NULL);
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(*pparam->widget),
+ *((gboolean *)pparam->data));
+}
+
+void prefs_set_data_from_spinbtn(PrefParam *pparam)
+{
+ g_return_if_fail(*pparam->widget != NULL);
+
+ switch (pparam->type) {
+ case P_INT:
+ *((gint *)pparam->data) =
+ gtk_spin_button_get_value_as_int
+ (GTK_SPIN_BUTTON(*pparam->widget));
+ break;
+ case P_USHORT:
+ *((gushort *)pparam->data) =
+ (gushort)gtk_spin_button_get_value_as_int
+ (GTK_SPIN_BUTTON(*pparam->widget));
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkSpinButton widget: %d\n",
+ pparam->type);
+ }
+}
+
+void prefs_set_spinbtn(PrefParam *pparam)
+{
+ g_return_if_fail(*pparam->widget != NULL);
+
+ switch (pparam->type) {
+ case P_INT:
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pparam->widget),
+ (gfloat)*((gint *)pparam->data));
+ break;
+ case P_USHORT:
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pparam->widget),
+ (gfloat)*((gushort *)pparam->data));
+ break;
+ default:
+ g_warning("Invalid PrefType for GtkSpinButton widget: %d\n",
+ pparam->type);
+ }
+}
diff --git a/src/prefs.h b/src/prefs.h
new file mode 100644
index 00000000..987269b0
--- /dev/null
+++ b/src/prefs.h
@@ -0,0 +1,169 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_H__
+#define __PREFS_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkbox.h>
+#include <stdio.h>
+
+typedef struct _PrefParam PrefParam;
+typedef struct _PrefFile PrefFile;
+typedef struct _PrefsDialog PrefsDialog;
+
+#include "account.h"
+
+#define VSPACING 10
+#define VSPACING_NARROW 4
+#define VSPACING_NARROW_2 2
+#define VBOX_BORDER 16
+#define DEFAULT_ENTRY_WIDTH 80
+#define PREFSBUFSIZE 1024
+
+typedef enum
+{
+ P_STRING,
+ P_INT,
+ P_BOOL,
+ P_ENUM,
+ P_USHORT,
+ P_OTHER
+} PrefType;
+
+typedef void (*DataSetFunc) (PrefParam *pparam);
+typedef void (*WidgetSetFunc) (PrefParam *pparam);
+
+struct _PrefParam {
+ gchar *name;
+ gchar *defval;
+ gpointer data;
+ PrefType type;
+ GtkWidget **widget;
+ DataSetFunc data_set_func;
+ WidgetSetFunc widget_set_func;
+};
+
+struct _PrefFile {
+ FILE *fp;
+ gchar *path;
+};
+
+struct _PrefsDialog
+{
+ GtkWidget *window;
+ GtkWidget *notebook;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *apply_btn;
+};
+
+#define SET_NOTEBOOK_LABEL(notebook, str, page_num) \
+{ \
+ GtkWidget *label; \
+ \
+ label = gtk_label_new (str); \
+ gtk_widget_show (label); \
+ gtk_notebook_set_tab_label \
+ (GTK_NOTEBOOK (notebook), \
+ gtk_notebook_get_nth_page \
+ (GTK_NOTEBOOK (notebook), page_num), \
+ label); \
+}
+
+#define PACK_CHECK_BUTTON(box, chkbtn, label) \
+{ \
+ chkbtn = gtk_check_button_new_with_label(label); \
+ gtk_widget_show(chkbtn); \
+ gtk_box_pack_start(GTK_BOX(box), chkbtn, FALSE, TRUE, 0); \
+}
+
+#define PACK_END_CHECK_BUTTON(box, chkbtn, label) \
+{ \
+ chkbtn = gtk_check_button_new_with_label(label); \
+ gtk_widget_show(chkbtn); \
+ gtk_box_pack_end(GTK_BOX(box), chkbtn, FALSE, TRUE, 0); \
+}
+
+#define PACK_FRAME(box, frame, label) \
+{ \
+ frame = gtk_frame_new(label); \
+ gtk_widget_show(frame); \
+ gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); \
+ gtk_frame_set_label_align(GTK_FRAME(frame), 0.01, 0.5); \
+}
+
+#define PACK_VSPACER(box, vbox, spacing) \
+{ \
+ vbox = gtk_vbox_new(FALSE, 0); \
+ gtk_widget_show(vbox); \
+ gtk_box_pack_start(GTK_BOX(box), vbox, FALSE, TRUE, spacing); \
+}
+
+#define SET_TOGGLE_SENSITIVITY(togglewid, targetwid) \
+{ \
+ gtk_widget_set_sensitive(targetwid, FALSE); \
+ g_signal_connect(G_OBJECT(togglewid), "toggled", \
+ G_CALLBACK(prefs_button_toggled), targetwid); \
+}
+
+void prefs_read_config (PrefParam *param,
+ const gchar *label,
+ const gchar *rcfile);
+void prefs_config_parse_one_line(PrefParam *param,
+ const gchar *buf);
+void prefs_write_config (PrefParam *param,
+ const gchar *label,
+ const gchar *rcfile);
+
+PrefFile *prefs_file_open (const gchar *path);
+gint prefs_file_write_param (PrefFile *pfile,
+ PrefParam *param);
+gint prefs_file_close (PrefFile *pfile);
+gint prefs_file_close_revert (PrefFile *pfile);
+
+void prefs_set_default (PrefParam *param);
+void prefs_free (PrefParam *param);
+
+void prefs_dialog_create (PrefsDialog *dialog);
+void prefs_dialog_destroy (PrefsDialog *dialog);
+
+void prefs_button_toggled (GtkToggleButton *toggle_btn,
+ GtkWidget *widget);
+
+void prefs_set_dialog (PrefParam *param);
+void prefs_set_data_from_dialog (PrefParam *param);
+void prefs_set_dialog_to_default(PrefParam *param);
+
+void prefs_set_data_from_entry (PrefParam *pparam);
+void prefs_set_entry (PrefParam *pparam);
+void prefs_set_data_from_text (PrefParam *pparam);
+void prefs_set_text (PrefParam *pparam);
+void prefs_set_data_from_toggle (PrefParam *pparam);
+void prefs_set_toggle (PrefParam *pparam);
+void prefs_set_data_from_spinbtn(PrefParam *pparam);
+void prefs_set_spinbtn (PrefParam *pparam);
+
+#endif /* __PREFS_H__ */
diff --git a/src/prefs_account.c b/src/prefs_account.c
new file mode 100644
index 00000000..bcad14b9
--- /dev/null
+++ b/src/prefs_account.c
@@ -0,0 +1,2295 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_account.h"
+#include "prefs_customheader.h"
+#include "account.h"
+#include "mainwindow.h"
+#include "manage_window.h"
+#include "foldersel.h"
+#include "inc.h"
+#include "menu.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "alertpanel.h"
+#include "smtp.h"
+#include "imap.h"
+
+static gboolean cancelled;
+
+static PrefsAccount tmp_ac_prefs;
+
+static PrefsDialog dialog;
+
+static struct Basic {
+ GtkWidget *acname_entry;
+ GtkWidget *default_chkbtn;
+
+ GtkWidget *name_entry;
+ GtkWidget *addr_entry;
+ GtkWidget *org_entry;
+
+ GtkWidget *serv_frame;
+ GtkWidget *serv_table;
+ GtkWidget *protocol_optmenu;
+ GtkWidget *recvserv_label;
+ GtkWidget *smtpserv_label;
+ GtkWidget *nntpserv_label;
+ GtkWidget *recvserv_entry;
+ GtkWidget *smtpserv_entry;
+ GtkWidget *nntpserv_entry;
+ GtkWidget *nntpauth_chkbtn;
+ GtkWidget *uid_label;
+ GtkWidget *pass_label;
+ GtkWidget *uid_entry;
+ GtkWidget *pass_entry;
+} basic;
+
+static struct Receive {
+ GtkWidget *pop3_frame;
+ GtkWidget *use_apop_chkbtn;
+ GtkWidget *rmmail_chkbtn;
+ GtkWidget *leave_time_entry;
+ GtkWidget *getall_chkbtn;
+ GtkWidget *size_limit_chkbtn;
+ GtkWidget *size_limit_entry;
+ GtkWidget *filter_on_recv_chkbtn;
+ GtkWidget *inbox_label;
+ GtkWidget *inbox_entry;
+ GtkWidget *inbox_btn;
+
+ GtkWidget *imap_frame;
+ GtkWidget *imap_auth_type_optmenu;
+
+ GtkWidget *recvatgetall_chkbtn;
+} receive;
+
+static struct Send {
+ GtkWidget *date_chkbtn;
+ GtkWidget *msgid_chkbtn;
+
+ GtkWidget *customhdr_chkbtn;
+
+ GtkWidget *smtp_auth_chkbtn;
+ GtkWidget *smtp_auth_type_optmenu;
+ GtkWidget *smtp_uid_entry;
+ GtkWidget *smtp_pass_entry;
+ /* GtkWidget *pop_bfr_smtp_chkbtn; */
+} p_send;
+
+static struct Compose {
+ GtkWidget *sigfile_radiobtn;
+ GtkWidget *sigpath_entry;
+
+ GtkWidget *autocc_chkbtn;
+ GtkWidget *autocc_entry;
+ GtkWidget *autobcc_chkbtn;
+ GtkWidget *autobcc_entry;
+ GtkWidget *autoreplyto_chkbtn;
+ GtkWidget *autoreplyto_entry;
+} compose;
+
+#if USE_GPGME
+static struct Privacy {
+ GtkWidget *default_encrypt_chkbtn;
+ GtkWidget *default_sign_chkbtn;
+ GtkWidget *ascii_armored_chkbtn;
+ GtkWidget *clearsign_chkbtn;
+ GtkWidget *defaultkey_radiobtn;
+ GtkWidget *emailkey_radiobtn;
+ GtkWidget *customkey_radiobtn;
+ GtkWidget *customkey_entry;
+} privacy;
+#endif /* USE_GPGME */
+
+#if USE_SSL
+static struct SSLPrefs {
+ GtkWidget *pop_frame;
+ GtkWidget *pop_nossl_radiobtn;
+ GtkWidget *pop_ssltunnel_radiobtn;
+ GtkWidget *pop_starttls_radiobtn;
+
+ GtkWidget *imap_frame;
+ GtkWidget *imap_nossl_radiobtn;
+ GtkWidget *imap_ssltunnel_radiobtn;
+ GtkWidget *imap_starttls_radiobtn;
+
+ GtkWidget *nntp_frame;
+ GtkWidget *nntp_nossl_radiobtn;
+ GtkWidget *nntp_ssltunnel_radiobtn;
+
+ GtkWidget *send_frame;
+ GtkWidget *smtp_nossl_radiobtn;
+ GtkWidget *smtp_ssltunnel_radiobtn;
+ GtkWidget *smtp_starttls_radiobtn;
+
+ GtkWidget *use_nonblocking_ssl_chkbtn;
+} ssl;
+#endif /* USE_SSL */
+
+static struct Advanced {
+ GtkWidget *smtpport_chkbtn;
+ GtkWidget *smtpport_entry;
+ GtkWidget *popport_hbox;
+ GtkWidget *popport_chkbtn;
+ GtkWidget *popport_entry;
+ GtkWidget *imapport_hbox;
+ GtkWidget *imapport_chkbtn;
+ GtkWidget *imapport_entry;
+ GtkWidget *nntpport_hbox;
+ GtkWidget *nntpport_chkbtn;
+ GtkWidget *nntpport_entry;
+ GtkWidget *domain_chkbtn;
+ GtkWidget *domain_entry;
+
+ GtkWidget *imap_frame;
+ GtkWidget *imapdir_entry;
+
+ GtkWidget *sent_folder_chkbtn;
+ GtkWidget *sent_folder_entry;
+ GtkWidget *draft_folder_chkbtn;
+ GtkWidget *draft_folder_entry;
+ GtkWidget *trash_folder_chkbtn;
+ GtkWidget *trash_folder_entry;
+} advanced;
+
+static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam);
+static void prefs_account_protocol_set_optmenu (PrefParam *pparam);
+static void prefs_account_protocol_activated (GtkMenuItem *menuitem);
+
+static void prefs_account_imap_auth_type_set_data_from_optmenu
+ (PrefParam *pparam);
+static void prefs_account_imap_auth_type_set_optmenu (PrefParam *pparam);
+static void prefs_account_smtp_auth_type_set_data_from_optmenu
+ (PrefParam *pparam);
+static void prefs_account_smtp_auth_type_set_optmenu (PrefParam *pparam);
+
+static void prefs_account_enum_set_data_from_radiobtn (PrefParam *pparam);
+static void prefs_account_enum_set_radiobtn (PrefParam *pparam);
+
+#if USE_GPGME
+static void prefs_account_ascii_armored_warning (GtkWidget *widget);
+#endif /* USE_GPGME */
+
+static PrefParam param[] = {
+ /* Basic */
+ {"account_name", NULL, &tmp_ac_prefs.account_name, P_STRING,
+ &basic.acname_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"is_default", "FALSE", &tmp_ac_prefs.is_default, P_BOOL,
+ &basic.default_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"name", NULL, &tmp_ac_prefs.name, P_STRING,
+ &basic.name_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"address", NULL, &tmp_ac_prefs.address, P_STRING,
+ &basic.addr_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"organization", NULL, &tmp_ac_prefs.organization, P_STRING,
+ &basic.org_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"protocol", NULL, &tmp_ac_prefs.protocol, P_ENUM,
+ &basic.protocol_optmenu,
+ prefs_account_protocol_set_data_from_optmenu,
+ prefs_account_protocol_set_optmenu},
+
+ {"receive_server", NULL, &tmp_ac_prefs.recv_server, P_STRING,
+ &basic.recvserv_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"smtp_server", NULL, &tmp_ac_prefs.smtp_server, P_STRING,
+ &basic.smtpserv_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"nntp_server", NULL, &tmp_ac_prefs.nntp_server, P_STRING,
+ &basic.nntpserv_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"use_nntp_auth", "FALSE", &tmp_ac_prefs.use_nntp_auth, P_BOOL,
+ &basic.nntpauth_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"user_id", "ENV_USER", &tmp_ac_prefs.userid, P_STRING,
+ &basic.uid_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"password", NULL, &tmp_ac_prefs.passwd, P_STRING,
+ &basic.pass_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"inbox", "inbox", &tmp_ac_prefs.inbox, P_STRING,
+ &receive.inbox_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ /* Receive */
+ {"use_apop_auth", "FALSE", &tmp_ac_prefs.use_apop_auth, P_BOOL,
+ &receive.use_apop_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"remove_mail", "TRUE", &tmp_ac_prefs.rmmail, P_BOOL,
+ &receive.rmmail_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"message_leave_time", "0", &tmp_ac_prefs.msg_leave_time, P_INT,
+ &receive.leave_time_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"get_all_mail", "FALSE", &tmp_ac_prefs.getall, P_BOOL,
+ &receive.getall_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"enable_size_limit", "FALSE", &tmp_ac_prefs.enable_size_limit, P_BOOL,
+ &receive.size_limit_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"size_limit", "1024", &tmp_ac_prefs.size_limit, P_INT,
+ &receive.size_limit_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"filter_on_receive", "TRUE", &tmp_ac_prefs.filter_on_recv, P_BOOL,
+ &receive.filter_on_recv_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"imap_auth_method", "0", &tmp_ac_prefs.imap_auth_type, P_ENUM,
+ &receive.imap_auth_type_optmenu,
+ prefs_account_imap_auth_type_set_data_from_optmenu,
+ prefs_account_imap_auth_type_set_optmenu},
+
+ {"receive_at_get_all", "TRUE", &tmp_ac_prefs.recv_at_getall, P_BOOL,
+ &receive.recvatgetall_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ /* Send */
+ {"add_date", "TRUE", &tmp_ac_prefs.add_date, P_BOOL,
+ &p_send.date_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"generate_msgid", "TRUE", &tmp_ac_prefs.gen_msgid, P_BOOL,
+ &p_send.msgid_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL,
+ &p_send.customhdr_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"use_smtp_auth", "FALSE", &tmp_ac_prefs.use_smtp_auth, P_BOOL,
+ &p_send.smtp_auth_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"smtp_auth_method", "0", &tmp_ac_prefs.smtp_auth_type, P_ENUM,
+ &p_send.smtp_auth_type_optmenu,
+ prefs_account_smtp_auth_type_set_data_from_optmenu,
+ prefs_account_smtp_auth_type_set_optmenu},
+
+ {"smtp_user_id", NULL, &tmp_ac_prefs.smtp_userid, P_STRING,
+ &p_send.smtp_uid_entry, prefs_set_data_from_entry, prefs_set_entry},
+ {"smtp_password", NULL, &tmp_ac_prefs.smtp_passwd, P_STRING,
+ &p_send.smtp_pass_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"pop_before_smtp", "FALSE", &tmp_ac_prefs.pop_before_smtp, P_BOOL,
+ NULL, NULL, NULL},
+#if 0
+ &p_send.pop_bfr_smtp_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+#endif
+
+ /* Compose */
+ {"signature_type", "0", &tmp_ac_prefs.sig_type, P_ENUM,
+ &compose.sigfile_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+ {"signature_path", "~/"DEFAULT_SIGNATURE, &tmp_ac_prefs.sig_path, P_STRING,
+ &compose.sigpath_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_autocc", "FALSE", &tmp_ac_prefs.set_autocc, P_BOOL,
+ &compose.autocc_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"auto_cc", NULL, &tmp_ac_prefs.auto_cc, P_STRING,
+ &compose.autocc_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_autobcc", "FALSE", &tmp_ac_prefs.set_autobcc, P_BOOL,
+ &compose.autobcc_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"auto_bcc", NULL, &tmp_ac_prefs.auto_bcc, P_STRING,
+ &compose.autobcc_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_autoreplyto", "FALSE", &tmp_ac_prefs.set_autoreplyto, P_BOOL,
+ &compose.autoreplyto_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"auto_replyto", NULL, &tmp_ac_prefs.auto_replyto, P_STRING,
+ &compose.autoreplyto_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+#if USE_GPGME
+ /* Privacy */
+ {"default_encrypt", "FALSE", &tmp_ac_prefs.default_encrypt, P_BOOL,
+ &privacy.default_encrypt_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"default_sign", "FALSE", &tmp_ac_prefs.default_sign, P_BOOL,
+ &privacy.default_sign_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"ascii_armored", "FALSE", &tmp_ac_prefs.ascii_armored, P_BOOL,
+ &privacy.ascii_armored_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"clearsign", "FALSE", &tmp_ac_prefs.clearsign, P_BOOL,
+ &privacy.clearsign_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"sign_key", NULL, &tmp_ac_prefs.sign_key, P_ENUM,
+ &privacy.defaultkey_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+ {"sign_key_id", NULL, &tmp_ac_prefs.sign_key_id, P_STRING,
+ &privacy.customkey_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+#endif /* USE_GPGME */
+
+#if USE_SSL
+ /* SSL */
+ {"ssl_pop", "0", &tmp_ac_prefs.ssl_pop, P_ENUM,
+ &ssl.pop_nossl_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+ {"ssl_imap", "0", &tmp_ac_prefs.ssl_imap, P_ENUM,
+ &ssl.imap_nossl_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+ {"ssl_nntp", "0", &tmp_ac_prefs.ssl_nntp, P_ENUM,
+ &ssl.nntp_nossl_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+ {"ssl_smtp", "0", &tmp_ac_prefs.ssl_smtp, P_ENUM,
+ &ssl.smtp_nossl_radiobtn,
+ prefs_account_enum_set_data_from_radiobtn,
+ prefs_account_enum_set_radiobtn},
+
+ {"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
+ &ssl.use_nonblocking_ssl_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+#endif /* USE_SSL */
+
+ /* Advanced */
+ {"set_smtpport", "FALSE", &tmp_ac_prefs.set_smtpport, P_BOOL,
+ &advanced.smtpport_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"smtp_port", "25", &tmp_ac_prefs.smtpport, P_USHORT,
+ &advanced.smtpport_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_popport", "FALSE", &tmp_ac_prefs.set_popport, P_BOOL,
+ &advanced.popport_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"pop_port", "110", &tmp_ac_prefs.popport, P_USHORT,
+ &advanced.popport_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_imapport", "FALSE", &tmp_ac_prefs.set_imapport, P_BOOL,
+ &advanced.imapport_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"imap_port", "143", &tmp_ac_prefs.imapport, P_USHORT,
+ &advanced.imapport_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_nntpport", "FALSE", &tmp_ac_prefs.set_nntpport, P_BOOL,
+ &advanced.nntpport_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"nntp_port", "119", &tmp_ac_prefs.nntpport, P_USHORT,
+ &advanced.nntpport_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_domain", "FALSE", &tmp_ac_prefs.set_domain, P_BOOL,
+ &advanced.domain_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"domain", NULL, &tmp_ac_prefs.domain, P_STRING,
+ &advanced.domain_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING,
+ &advanced.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_sent_folder", "FALSE", &tmp_ac_prefs.set_sent_folder, P_BOOL,
+ &advanced.sent_folder_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"sent_folder", NULL, &tmp_ac_prefs.sent_folder, P_STRING,
+ &advanced.sent_folder_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_draft_folder", "FALSE", &tmp_ac_prefs.set_draft_folder, P_BOOL,
+ &advanced.draft_folder_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"draft_folder", NULL, &tmp_ac_prefs.draft_folder, P_STRING,
+ &advanced.draft_folder_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"set_trash_folder", "FALSE", &tmp_ac_prefs.set_trash_folder, P_BOOL,
+ &advanced.trash_folder_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"trash_folder", NULL, &tmp_ac_prefs.trash_folder, P_STRING,
+ &advanced.trash_folder_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
+};
+
+static gint prefs_account_get_new_id (void);
+
+static void prefs_account_create (void);
+static void prefs_account_basic_create (void);
+static void prefs_account_receive_create (void);
+static void prefs_account_send_create (void);
+static void prefs_account_compose_create (void);
+#if USE_GPGME
+static void prefs_account_privacy_create (void);
+#endif /* USE_GPGME */
+#if USE_SSL
+static void prefs_account_ssl_create (void);
+#endif /* USE_SSL */
+static void prefs_account_advanced_create (void);
+
+static void prefs_account_select_folder_cb (GtkWidget *widget,
+ gpointer data);
+static void prefs_account_edit_custom_header (void);
+
+static gint prefs_account_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_account_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_account_ok (void);
+static gint prefs_account_apply (void);
+static void prefs_account_cancel (void);
+
+PrefsAccount *prefs_account_new(void)
+{
+ PrefsAccount *ac_prefs;
+
+ ac_prefs = g_new0(PrefsAccount, 1);
+ memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount));
+ prefs_set_default(param);
+ *ac_prefs = tmp_ac_prefs;
+ ac_prefs->account_id = prefs_account_get_new_id();
+
+ return ac_prefs;
+}
+
+void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
+{
+ const guchar *p = label;
+ gint id;
+
+ g_return_if_fail(ac_prefs != NULL);
+ g_return_if_fail(label != NULL);
+
+ memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount));
+ prefs_read_config(param, label, ACCOUNT_RC);
+ *ac_prefs = tmp_ac_prefs;
+ while (*p && !isdigit(*p)) p++;
+ id = atoi(p);
+ if (id < 0) g_warning("wrong account id: %d\n", id);
+ ac_prefs->account_id = id;
+
+ if (ac_prefs->protocol == A_APOP) {
+ debug_print("converting protocol A_APOP to new prefs.\n");
+ ac_prefs->protocol = A_POP3;
+ ac_prefs->use_apop_auth = TRUE;
+ }
+
+ prefs_custom_header_read_config(ac_prefs);
+}
+
+void prefs_account_write_config_all(GList *account_list)
+{
+ GList *cur;
+ gchar *rcpath;
+ PrefFile *pfile;
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL);
+ if ((pfile = prefs_file_open(rcpath)) == NULL) {
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ tmp_ac_prefs = *(PrefsAccount *)cur->data;
+ if (fprintf(pfile->fp, "[Account: %d]\n",
+ tmp_ac_prefs.account_id) <= 0 ||
+ prefs_file_write_param(pfile, param) < 0) {
+ g_warning(_("failed to write configuration to file\n"));
+ prefs_file_close_revert(pfile);
+ return;
+ }
+ if (cur->next) {
+ if (fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputc");
+ prefs_file_close_revert(pfile);
+ return;
+ }
+ }
+ }
+
+ if (prefs_file_close(pfile) < 0)
+ g_warning(_("failed to write configuration to file\n"));
+}
+
+void prefs_account_free(PrefsAccount *ac_prefs)
+{
+ if (!ac_prefs) return;
+
+ tmp_ac_prefs = *ac_prefs;
+ prefs_free(param);
+}
+
+static gint prefs_account_get_new_id(void)
+{
+ GList *ac_list;
+ PrefsAccount *ac;
+ static gint last_id = 0;
+
+ for (ac_list = account_get_list(); ac_list != NULL;
+ ac_list = ac_list->next) {
+ ac = (PrefsAccount *)ac_list->data;
+ if (last_id < ac->account_id)
+ last_id = ac->account_id;
+ }
+
+ return last_id + 1;
+}
+
+PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs)
+{
+ gboolean new_account = FALSE;
+
+ debug_print(_("Opening account preferences window...\n"));
+
+ inc_lock();
+
+ cancelled = FALSE;
+
+ if (!ac_prefs) {
+ ac_prefs = prefs_account_new();
+ new_account = TRUE;
+ }
+
+ if (!dialog.window) {
+ prefs_account_create();
+ }
+
+ manage_window_set_transient(GTK_WINDOW(dialog.window));
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
+ gtk_widget_grab_focus(dialog.ok_btn);
+
+ tmp_ac_prefs = *ac_prefs;
+
+ if (new_account) {
+ PrefsAccount *def_ac;
+ gchar *buf;
+
+ prefs_set_dialog_to_default(param);
+ buf = g_strdup_printf(_("Account%d"), ac_prefs->account_id);
+ gtk_entry_set_text(GTK_ENTRY(basic.acname_entry), buf);
+ g_free(buf);
+ def_ac = account_get_default();
+ if (def_ac) {
+ gtk_entry_set_text(GTK_ENTRY(basic.name_entry),
+ def_ac->name ? def_ac->name : "");
+ gtk_entry_set_text(GTK_ENTRY(basic.addr_entry),
+ def_ac->address ? def_ac->address : "");
+ gtk_entry_set_text(GTK_ENTRY(basic.org_entry),
+ def_ac->organization ? def_ac->organization : "");
+ }
+ menu_set_sensitive_all
+ (GTK_MENU_SHELL
+ (gtk_option_menu_get_menu
+ (GTK_OPTION_MENU
+ (basic.protocol_optmenu))),
+ TRUE);
+ gtk_window_set_title(GTK_WINDOW(dialog.window),
+ _("Preferences for new account"));
+ gtk_widget_hide(dialog.apply_btn);
+ } else {
+ prefs_set_dialog(param);
+ gtk_window_set_title(GTK_WINDOW(dialog.window),
+ _("Account preferences"));
+ gtk_widget_show(dialog.apply_btn);
+ }
+
+ gtk_widget_show(dialog.window);
+ gtk_main();
+ gtk_widget_hide(dialog.window);
+
+ inc_unlock();
+
+ if (cancelled && new_account) {
+ g_free(ac_prefs);
+ return NULL;
+ } else {
+ *ac_prefs = tmp_ac_prefs;
+ return ac_prefs;
+ }
+}
+
+static void prefs_account_create(void)
+{
+ gint page = 0;
+
+ debug_print(_("Creating account preferences window...\n"));
+
+ /* create dialog */
+ prefs_dialog_create(&dialog);
+ g_signal_connect(G_OBJECT(dialog.window), "delete_event",
+ G_CALLBACK(prefs_account_deleted), NULL);
+ g_signal_connect(G_OBJECT(dialog.window), "key_press_event",
+ G_CALLBACK(prefs_account_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
+
+ g_signal_connect(G_OBJECT(dialog.ok_btn), "clicked",
+ G_CALLBACK(prefs_account_ok), NULL);
+ g_signal_connect(G_OBJECT(dialog.apply_btn), "clicked",
+ G_CALLBACK(prefs_account_apply), NULL);
+ g_signal_connect(G_OBJECT(dialog.cancel_btn), "clicked",
+ G_CALLBACK(prefs_account_cancel), NULL);
+
+ prefs_account_basic_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Basic"), page++);
+ prefs_account_receive_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
+ prefs_account_send_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
+ prefs_account_compose_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
+#if USE_GPGME
+ prefs_account_privacy_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
+#endif /* USE_GPGME */
+#if USE_SSL
+ prefs_account_ssl_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("SSL"), page++);
+#endif /* USE_SSL */
+ prefs_account_advanced_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++);
+}
+
+#define SET_ACTIVATE(menuitem) \
+{ \
+ g_signal_connect(G_OBJECT(menuitem), "activate", \
+ G_CALLBACK(prefs_account_protocol_activated), NULL); \
+}
+
+static void prefs_account_basic_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *acname_entry;
+ GtkWidget *default_chkbtn;
+ GtkWidget *frame1;
+ GtkWidget *table1;
+ GtkWidget *name_entry;
+ GtkWidget *addr_entry;
+ GtkWidget *org_entry;
+
+ GtkWidget *serv_frame;
+ GtkWidget *vbox2;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *serv_table;
+ GtkWidget *recvserv_label;
+ GtkWidget *smtpserv_label;
+ GtkWidget *nntpserv_label;
+ GtkWidget *recvserv_entry;
+ GtkWidget *smtpserv_entry;
+ GtkWidget *nntpserv_entry;
+ GtkWidget *nntpauth_chkbtn;
+ GtkWidget *uid_label;
+ GtkWidget *pass_label;
+ GtkWidget *uid_entry;
+ GtkWidget *pass_entry;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Name of this account"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ acname_entry = gtk_entry_new ();
+ gtk_widget_show (acname_entry);
+ gtk_widget_set_size_request (acname_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0);
+
+ default_chkbtn = gtk_check_button_new_with_label (_("Set as default"));
+ gtk_widget_show (default_chkbtn);
+ gtk_box_pack_end (GTK_BOX (hbox), default_chkbtn, FALSE, FALSE, 0);
+
+ PACK_FRAME (vbox1, frame1, _("Personal information"));
+
+ table1 = gtk_table_new (3, 2, FALSE);
+ gtk_widget_show (table1);
+ gtk_container_add (GTK_CONTAINER (frame1), table1);
+ gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), VSPACING_NARROW);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ label = gtk_label_new (_("Full name"));
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+ label = gtk_label_new (_("Mail address"));
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+ label = gtk_label_new (_("Organization"));
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+ name_entry = gtk_entry_new ();
+ gtk_widget_show (name_entry);
+ gtk_table_attach (GTK_TABLE (table1), name_entry, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ addr_entry = gtk_entry_new ();
+ gtk_widget_show (addr_entry);
+ gtk_table_attach (GTK_TABLE (table1), addr_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ org_entry = gtk_entry_new ();
+ gtk_widget_show (org_entry);
+ gtk_table_attach (GTK_TABLE (table1), org_entry, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ PACK_FRAME (vbox1, serv_frame, _("Server information"));
+
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (serv_frame), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Protocol"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ optmenu = gtk_option_menu_new ();
+ gtk_widget_show (optmenu);
+ gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new ();
+
+ MENUITEM_ADD (optmenu_menu, menuitem, _("POP3"), A_POP3);
+ SET_ACTIVATE (menuitem);
+ MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4);
+ SET_ACTIVATE (menuitem);
+ MENUITEM_ADD (optmenu_menu, menuitem, _("News (NNTP)"), A_NNTP);
+ SET_ACTIVATE (menuitem);
+ MENUITEM_ADD (optmenu_menu, menuitem, _("None (local)"), A_LOCAL);
+ SET_ACTIVATE (menuitem);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+
+ serv_table = gtk_table_new (6, 4, FALSE);
+ gtk_widget_show (serv_table);
+ gtk_box_pack_start (GTK_BOX (vbox2), serv_table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings (GTK_TABLE (serv_table), VSPACING_NARROW);
+ gtk_table_set_row_spacing (GTK_TABLE (serv_table), 3, 0);
+ gtk_table_set_col_spacings (GTK_TABLE (serv_table), 8);
+
+ nntpauth_chkbtn = gtk_check_button_new_with_label
+ (_("This server requires authentication"));
+ gtk_widget_show (nntpauth_chkbtn);
+ gtk_table_attach (GTK_TABLE (serv_table), nntpauth_chkbtn, 0, 4, 4, 5,
+ GTK_FILL, 0, 0, 0);
+
+ nntpserv_entry = gtk_entry_new ();
+ gtk_widget_show (nntpserv_entry);
+ gtk_table_attach (GTK_TABLE (serv_table), nntpserv_entry, 1, 4, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+ gtk_table_set_row_spacing (GTK_TABLE (serv_table), 0, 0);
+
+ recvserv_entry = gtk_entry_new ();
+ gtk_widget_show (recvserv_entry);
+ gtk_table_attach (GTK_TABLE (serv_table), recvserv_entry, 1, 4, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ smtpserv_entry = gtk_entry_new ();
+ gtk_widget_show (smtpserv_entry);
+ gtk_table_attach (GTK_TABLE (serv_table), smtpserv_entry, 1, 4, 2, 3,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ uid_entry = gtk_entry_new ();
+ gtk_widget_show (uid_entry);
+ gtk_widget_set_size_request (uid_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 5, 6,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ pass_entry = gtk_entry_new ();
+ gtk_widget_show (pass_entry);
+ gtk_widget_set_size_request (pass_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_table_attach (GTK_TABLE (serv_table), pass_entry, 3, 4, 5, 6,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+ gtk_entry_set_visibility (GTK_ENTRY (pass_entry), FALSE);
+
+ nntpserv_label = gtk_label_new (_("News server"));
+ gtk_widget_show (nntpserv_label);
+ gtk_table_attach (GTK_TABLE (serv_table), nntpserv_label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (nntpserv_label), 1, 0.5);
+
+ recvserv_label = gtk_label_new (_("Server for receiving"));
+ gtk_widget_show (recvserv_label);
+ gtk_table_attach (GTK_TABLE (serv_table), recvserv_label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (recvserv_label), 1, 0.5);
+
+ smtpserv_label = gtk_label_new (_("SMTP server (send)"));
+ gtk_widget_show (smtpserv_label);
+ gtk_table_attach (GTK_TABLE (serv_table), smtpserv_label, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (smtpserv_label), 1, 0.5);
+ gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0);
+
+ uid_label = gtk_label_new (_("User ID"));
+ gtk_widget_show (uid_label);
+ gtk_table_attach (GTK_TABLE (serv_table), uid_label, 0, 1, 5, 6,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (uid_label), 1, 0.5);
+
+ pass_label = gtk_label_new (_("Password"));
+ gtk_widget_show (pass_label);
+ gtk_table_attach (GTK_TABLE (serv_table), pass_label, 2, 3, 5, 6,
+ 0, 0, 0, 0);
+
+ SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_label);
+ SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_label);
+ SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_entry);
+ SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_entry);
+
+ basic.acname_entry = acname_entry;
+ basic.default_chkbtn = default_chkbtn;
+
+ basic.name_entry = name_entry;
+ basic.addr_entry = addr_entry;
+ basic.org_entry = org_entry;
+
+ basic.serv_frame = serv_frame;
+ basic.serv_table = serv_table;
+ basic.protocol_optmenu = optmenu;
+ basic.recvserv_label = recvserv_label;
+ basic.recvserv_entry = recvserv_entry;
+ basic.smtpserv_label = smtpserv_label;
+ basic.smtpserv_entry = smtpserv_entry;
+ basic.nntpserv_label = nntpserv_label;
+ basic.nntpserv_entry = nntpserv_entry;
+ basic.nntpauth_chkbtn = nntpauth_chkbtn;
+ basic.uid_label = uid_label;
+ basic.pass_label = pass_label;
+ basic.uid_entry = uid_entry;
+ basic.pass_entry = pass_entry;
+}
+
+static void prefs_account_receive_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *frame1;
+ GtkWidget *vbox2;
+ GtkWidget *use_apop_chkbtn;
+ GtkWidget *rmmail_chkbtn;
+ GtkWidget *hbox_spc;
+ GtkWidget *leave_time_label;
+ GtkWidget *leave_time_entry;
+ GtkWidget *getall_chkbtn;
+ GtkWidget *hbox1;
+ GtkWidget *size_limit_chkbtn;
+ GtkWidget *size_limit_entry;
+ GtkWidget *label;
+ GtkWidget *filter_on_recv_chkbtn;
+ GtkWidget *vbox3;
+ GtkWidget *inbox_label;
+ GtkWidget *inbox_entry;
+ GtkWidget *inbox_btn;
+ GtkWidget *imap_frame;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *recvatgetall_chkbtn;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME (vbox1, frame1, _("POP3"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame1), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON (vbox2, use_apop_chkbtn,
+ _("Use secure authentication (APOP)"));
+
+ PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
+ _("Remove messages on server when received"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ leave_time_label = gtk_label_new (_("Remove after"));
+ gtk_widget_show (leave_time_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
+
+ leave_time_entry = gtk_entry_new ();
+ gtk_widget_show (leave_time_entry);
+ gtk_widget_set_size_request (leave_time_entry, 64, -1);
+ gtk_box_pack_start (GTK_BOX (hbox1), leave_time_entry, FALSE, FALSE, 0);
+
+ leave_time_label = gtk_label_new (_("days"));
+ gtk_widget_show (leave_time_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
+
+ SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ leave_time_label = gtk_label_new (_("(0 days: remove immediately)"));
+ gtk_widget_show (leave_time_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
+
+ SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
+
+ PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
+ _("Download all messages on server"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox1, size_limit_chkbtn, _("Receive size limit"));
+
+ size_limit_entry = gtk_entry_new ();
+ gtk_widget_show (size_limit_entry);
+ gtk_widget_set_size_request (size_limit_entry, 64, -1);
+ gtk_box_pack_start (GTK_BOX (hbox1), size_limit_entry, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("KB"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ SET_TOGGLE_SENSITIVITY (size_limit_chkbtn, size_limit_entry);
+
+ PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn,
+ _("Filter messages on receiving"));
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ inbox_label = gtk_label_new (_("Default inbox"));
+ gtk_widget_show (inbox_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), inbox_label, FALSE, FALSE, 0);
+
+ inbox_entry = gtk_entry_new ();
+ gtk_widget_show (inbox_entry);
+ gtk_widget_set_size_request (inbox_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_box_pack_start (GTK_BOX (hbox1), inbox_entry, TRUE, TRUE, 0);
+
+ inbox_btn = gtk_button_new_with_label (_(" Select... "));
+ gtk_widget_show (inbox_btn);
+ gtk_box_pack_start (GTK_BOX (hbox1), inbox_btn, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (inbox_btn), "clicked",
+ G_CALLBACK (prefs_account_select_folder_cb),
+ inbox_entry);
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new
+ (_("(Unfiltered messages will be stored in this folder)"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (imap_frame), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Authentication method"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ optmenu = gtk_option_menu_new ();
+ gtk_widget_show (optmenu);
+ gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new ();
+
+ MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
+ MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", IMAP_AUTH_LOGIN);
+ MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+
+ PACK_CHECK_BUTTON
+ (vbox1, recvatgetall_chkbtn,
+ _("`Get all' checks for new messages on this account"));
+
+ receive.pop3_frame = frame1;
+ receive.use_apop_chkbtn = use_apop_chkbtn;
+ receive.rmmail_chkbtn = rmmail_chkbtn;
+ receive.leave_time_entry = leave_time_entry;
+ receive.getall_chkbtn = getall_chkbtn;
+ receive.size_limit_chkbtn = size_limit_chkbtn;
+ receive.size_limit_entry = size_limit_entry;
+ receive.filter_on_recv_chkbtn = filter_on_recv_chkbtn;
+ receive.inbox_label = inbox_label;
+ receive.inbox_entry = inbox_entry;
+ receive.inbox_btn = inbox_btn;
+
+ receive.imap_frame = imap_frame;
+ receive.imap_auth_type_optmenu = optmenu;
+
+ receive.recvatgetall_chkbtn = recvatgetall_chkbtn;
+}
+
+static void prefs_account_send_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *frame;
+ GtkWidget *date_chkbtn;
+ GtkWidget *msgid_chkbtn;
+ GtkWidget *hbox;
+ GtkWidget *customhdr_chkbtn;
+ GtkWidget *customhdr_edit_btn;
+ GtkWidget *vbox3;
+ GtkWidget *smtp_auth_chkbtn;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *vbox4;
+ GtkWidget *hbox_spc;
+ GtkWidget *label;
+ GtkWidget *smtp_uid_entry;
+ GtkWidget *smtp_pass_entry;
+ GtkWidget *vbox_spc;
+ /* GtkWidget *pop_bfr_smtp_chkbtn; */
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME (vbox1, frame, _("Header"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON (vbox2, date_chkbtn, _("Add Date header field"));
+ PACK_CHECK_BUTTON (vbox2, msgid_chkbtn, _("Generate Message-ID"));
+
+ hbox = gtk_hbox_new (FALSE, 12);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox, customhdr_chkbtn,
+ _("Add user-defined header"));
+
+ customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... "));
+ gtk_widget_show (customhdr_edit_btn);
+ gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn,
+ FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (customhdr_edit_btn), "clicked",
+ G_CALLBACK (prefs_account_edit_custom_header),
+ NULL);
+
+ SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn);
+
+ PACK_FRAME (vbox1, frame, _("Authentication"));
+
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox3);
+ gtk_container_add (GTK_CONTAINER (frame), vbox3);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
+ PACK_CHECK_BUTTON (vbox3, smtp_auth_chkbtn,
+ _("SMTP Authentication (SMTP AUTH)"));
+
+ vbox4 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox4);
+ gtk_box_pack_start (GTK_BOX (vbox3), vbox4, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ label = gtk_label_new (_("Authentication method"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ optmenu = gtk_option_menu_new ();
+ gtk_widget_show (optmenu);
+ gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new ();
+
+ MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
+ MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", SMTPAUTH_LOGIN);
+ MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", SMTPAUTH_CRAM_MD5);
+ MENUITEM_ADD (optmenu_menu, menuitem, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5);
+ gtk_widget_set_sensitive (menuitem, FALSE);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+
+ PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ label = gtk_label_new (_("User ID"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ smtp_uid_entry = gtk_entry_new ();
+ gtk_widget_show (smtp_uid_entry);
+ gtk_widget_set_size_request (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_box_pack_start (GTK_BOX (hbox), smtp_uid_entry, TRUE, TRUE, 0);
+
+ label = gtk_label_new (_("Password"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ smtp_pass_entry = gtk_entry_new ();
+ gtk_widget_show (smtp_pass_entry);
+ gtk_widget_set_size_request (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1);
+ gtk_box_pack_start (GTK_BOX (hbox), smtp_pass_entry, TRUE, TRUE, 0);
+ gtk_entry_set_visibility (GTK_ENTRY (smtp_pass_entry), FALSE);
+
+ PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ label = gtk_label_new
+ (_("If you leave these entries empty, the same\n"
+ "user ID and password as receiving will be used."));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ SET_TOGGLE_SENSITIVITY (smtp_auth_chkbtn, vbox4);
+
+#if 0
+ PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn,
+ _("Authenticate with POP3 before sending"));
+ gtk_widget_set_sensitive(pop_bfr_smtp_chkbtn, FALSE);
+#endif
+
+ p_send.date_chkbtn = date_chkbtn;
+ p_send.msgid_chkbtn = msgid_chkbtn;
+ p_send.customhdr_chkbtn = customhdr_chkbtn;
+
+ p_send.smtp_auth_chkbtn = smtp_auth_chkbtn;
+ p_send.smtp_auth_type_optmenu = optmenu;
+ p_send.smtp_uid_entry = smtp_uid_entry;
+ p_send.smtp_pass_entry = smtp_pass_entry;
+ /* p_send.pop_bfr_smtp_chkbtn = pop_bfr_smtp_chkbtn; */
+}
+
+static void prefs_account_compose_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *sig_vbox;
+ GtkWidget *sig_hbox;
+ GtkWidget *sigfile_radiobtn;
+ GtkWidget *sigcmd_radiobtn;
+ GtkWidget *sigpath_entry;
+ GtkWidget *frame;
+ GtkWidget *table;
+ GtkWidget *autocc_chkbtn;
+ GtkWidget *autocc_entry;
+ GtkWidget *autobcc_chkbtn;
+ GtkWidget *autobcc_entry;
+ GtkWidget *autoreplyto_chkbtn;
+ GtkWidget *autoreplyto_entry;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME (vbox1, frame, _("Signature"));
+
+ sig_vbox = gtk_vbox_new (FALSE, VSPACING_NARROW_2);
+ gtk_widget_show (sig_vbox);
+ gtk_container_add (GTK_CONTAINER (frame), sig_vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (sig_vbox), 8);
+
+ sig_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (sig_hbox);
+ gtk_box_pack_start (GTK_BOX (sig_vbox), sig_hbox, FALSE, FALSE, 0);
+
+ sigfile_radiobtn = gtk_radio_button_new_with_label (NULL, _("File"));
+ gtk_widget_show (sigfile_radiobtn);
+ gtk_box_pack_start (GTK_BOX (sig_hbox), sigfile_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (sigfile_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SIG_FILE));
+
+ sigcmd_radiobtn = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON(sigfile_radiobtn), _("Command output"));
+ gtk_widget_show (sigcmd_radiobtn);
+ gtk_box_pack_start (GTK_BOX (sig_hbox), sigcmd_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (sigcmd_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SIG_COMMAND));
+
+ sigpath_entry = gtk_entry_new ();
+ gtk_widget_show (sigpath_entry);
+ gtk_box_pack_start (GTK_BOX (sig_vbox), sigpath_entry, TRUE, TRUE, 0);
+
+ PACK_FRAME (vbox1, frame, _("Automatically set the following addresses"));
+
+ table = gtk_table_new (3, 2, FALSE);
+ gtk_widget_show (table);
+ gtk_container_add (GTK_CONTAINER (frame), table);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 8);
+
+ autocc_chkbtn = gtk_check_button_new_with_label (_("Cc"));
+ gtk_widget_show (autocc_chkbtn);
+ gtk_table_attach (GTK_TABLE (table), autocc_chkbtn, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+
+ autocc_entry = gtk_entry_new ();
+ gtk_widget_show (autocc_entry);
+ gtk_table_attach (GTK_TABLE (table), autocc_entry, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ SET_TOGGLE_SENSITIVITY (autocc_chkbtn, autocc_entry);
+
+ autobcc_chkbtn = gtk_check_button_new_with_label (_("Bcc"));
+ gtk_widget_show (autobcc_chkbtn);
+ gtk_table_attach (GTK_TABLE (table), autobcc_chkbtn, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+
+ autobcc_entry = gtk_entry_new ();
+ gtk_widget_show (autobcc_entry);
+ gtk_table_attach (GTK_TABLE (table), autobcc_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ SET_TOGGLE_SENSITIVITY (autobcc_chkbtn, autobcc_entry);
+
+ autoreplyto_chkbtn = gtk_check_button_new_with_label (_("Reply-To"));
+ gtk_widget_show (autoreplyto_chkbtn);
+ gtk_table_attach (GTK_TABLE (table), autoreplyto_chkbtn, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+
+ autoreplyto_entry = gtk_entry_new ();
+ gtk_widget_show (autoreplyto_entry);
+ gtk_table_attach (GTK_TABLE (table), autoreplyto_entry, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry);
+
+
+ compose.sigfile_radiobtn = sigfile_radiobtn;
+ compose.sigpath_entry = sigpath_entry;
+
+ compose.autocc_chkbtn = autocc_chkbtn;
+ compose.autocc_entry = autocc_entry;
+ compose.autobcc_chkbtn = autobcc_chkbtn;
+ compose.autobcc_entry = autobcc_entry;
+ compose.autoreplyto_chkbtn = autoreplyto_chkbtn;
+ compose.autoreplyto_entry = autoreplyto_entry;
+}
+
+#if USE_GPGME
+static void prefs_account_privacy_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *frame1;
+ GtkWidget *vbox2;
+ GtkWidget *hbox1;
+ GtkWidget *label;
+ GtkWidget *default_encrypt_chkbtn;
+ GtkWidget *default_sign_chkbtn;
+ GtkWidget *ascii_armored_chkbtn;
+ GtkWidget *clearsign_chkbtn;
+ GtkWidget *defaultkey_radiobtn;
+ GtkWidget *emailkey_radiobtn;
+ GtkWidget *customkey_radiobtn;
+ GtkWidget *customkey_entry;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (vbox2, default_encrypt_chkbtn,
+ _("Encrypt message by default"));
+ PACK_CHECK_BUTTON (vbox2, default_sign_chkbtn,
+ _("Sign message by default"));
+ PACK_CHECK_BUTTON (vbox2, ascii_armored_chkbtn,
+ _("Use ASCII-armored format for encryption"));
+ PACK_CHECK_BUTTON (vbox2, clearsign_chkbtn,
+ _("Use clear text signature"));
+ g_signal_connect (G_OBJECT (ascii_armored_chkbtn), "toggled",
+ G_CALLBACK (prefs_account_ascii_armored_warning),
+ NULL);
+
+ PACK_FRAME (vbox1, frame1, _("Sign key"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame1), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ defaultkey_radiobtn = gtk_radio_button_new_with_label
+ (NULL, _("Use default GnuPG key"));
+ gtk_widget_show (defaultkey_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (defaultkey_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SIGN_KEY_DEFAULT));
+
+ emailkey_radiobtn = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (defaultkey_radiobtn),
+ _("Select key by your email address"));
+ gtk_widget_show (emailkey_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (emailkey_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SIGN_KEY_BY_FROM));
+
+ customkey_radiobtn = gtk_radio_button_new_with_label_from_widget
+ (GTK_RADIO_BUTTON (defaultkey_radiobtn),
+ _("Specify key manually"));
+ gtk_widget_show (customkey_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (customkey_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SIGN_KEY_CUSTOM));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new ("");
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (label, 16, -1);
+
+ label = gtk_label_new (_("User or key ID:"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ customkey_entry = gtk_entry_new ();
+ gtk_widget_show (customkey_entry);
+ gtk_box_pack_start (GTK_BOX (hbox1), customkey_entry,
+ TRUE, TRUE, 0);
+
+ SET_TOGGLE_SENSITIVITY (customkey_radiobtn, customkey_entry);
+
+ privacy.default_encrypt_chkbtn = default_encrypt_chkbtn;
+ privacy.default_sign_chkbtn = default_sign_chkbtn;
+ privacy.ascii_armored_chkbtn = ascii_armored_chkbtn;
+ privacy.clearsign_chkbtn = clearsign_chkbtn;
+ privacy.defaultkey_radiobtn = defaultkey_radiobtn;
+ privacy.emailkey_radiobtn = emailkey_radiobtn;
+ privacy.customkey_radiobtn = customkey_radiobtn;
+ privacy.customkey_entry = customkey_entry;
+}
+#endif /* USE_GPGME */
+
+#if USE_SSL
+
+#define CREATE_RADIO_BUTTON(box, btn, btn_p, label, data) \
+{ \
+ btn = gtk_radio_button_new_with_label_from_widget \
+ (GTK_RADIO_BUTTON (btn_p), label); \
+ gtk_widget_show (btn); \
+ gtk_box_pack_start (GTK_BOX (box), btn, FALSE, FALSE, 0); \
+ g_object_set_data (G_OBJECT (btn), MENU_VAL_ID, \
+ GINT_TO_POINTER (data)); \
+}
+
+#define CREATE_RADIO_BUTTONS(box, \
+ btn1, btn1_label, btn1_data, \
+ btn2, btn2_label, btn2_data, \
+ btn3, btn3_label, btn3_data) \
+{ \
+ btn1 = gtk_radio_button_new_with_label(NULL, btn1_label); \
+ gtk_widget_show (btn1); \
+ gtk_box_pack_start (GTK_BOX (box), btn1, FALSE, FALSE, 0); \
+ g_object_set_data (G_OBJECT (btn1), MENU_VAL_ID, \
+ GINT_TO_POINTER (btn1_data)); \
+ \
+ CREATE_RADIO_BUTTON(box, btn2, btn1, btn2_label, btn2_data); \
+ CREATE_RADIO_BUTTON(box, btn3, btn1, btn3_label, btn3_data); \
+}
+
+static void prefs_account_ssl_create(void)
+{
+ GtkWidget *vbox1;
+
+ GtkWidget *pop_frame;
+ GtkWidget *vbox2;
+ GtkWidget *pop_nossl_radiobtn;
+ GtkWidget *pop_ssltunnel_radiobtn;
+ GtkWidget *pop_starttls_radiobtn;
+
+ GtkWidget *imap_frame;
+ GtkWidget *vbox3;
+ GtkWidget *imap_nossl_radiobtn;
+ GtkWidget *imap_ssltunnel_radiobtn;
+ GtkWidget *imap_starttls_radiobtn;
+
+ GtkWidget *nntp_frame;
+ GtkWidget *vbox4;
+ GtkWidget *nntp_nossl_radiobtn;
+ GtkWidget *nntp_ssltunnel_radiobtn;
+
+ GtkWidget *send_frame;
+ GtkWidget *vbox5;
+ GtkWidget *smtp_nossl_radiobtn;
+ GtkWidget *smtp_ssltunnel_radiobtn;
+ GtkWidget *smtp_starttls_radiobtn;
+
+ GtkWidget *vbox6;
+ GtkWidget *use_nonblocking_ssl_chkbtn;
+ GtkWidget *hbox;
+ GtkWidget *hbox_spc;
+ GtkWidget *label;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME (vbox1, pop_frame, _("POP3"));
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (pop_frame), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ CREATE_RADIO_BUTTONS(vbox2,
+ pop_nossl_radiobtn,
+ _("Don't use SSL"),
+ SSL_NONE,
+ pop_ssltunnel_radiobtn,
+ _("Use SSL for POP3 connection"),
+ SSL_TUNNEL,
+ pop_starttls_radiobtn,
+ _("Use STARTTLS command to start SSL session"),
+ SSL_STARTTLS);
+
+ PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox3);
+ gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
+ CREATE_RADIO_BUTTONS(vbox3,
+ imap_nossl_radiobtn,
+ _("Don't use SSL"),
+ SSL_NONE,
+ imap_ssltunnel_radiobtn,
+ _("Use SSL for IMAP4 connection"),
+ SSL_TUNNEL,
+ imap_starttls_radiobtn,
+ _("Use STARTTLS command to start SSL session"),
+ SSL_STARTTLS);
+
+ PACK_FRAME (vbox1, nntp_frame, _("NNTP"));
+ vbox4 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox4);
+ gtk_container_add (GTK_CONTAINER (nntp_frame), vbox4);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox4), 8);
+
+ nntp_nossl_radiobtn =
+ gtk_radio_button_new_with_label (NULL, _("Don't use SSL"));
+ gtk_widget_show (nntp_nossl_radiobtn);
+ gtk_box_pack_start (GTK_BOX (vbox4), nntp_nossl_radiobtn,
+ FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (nntp_nossl_radiobtn), MENU_VAL_ID,
+ GINT_TO_POINTER (SSL_NONE));
+
+ CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn,
+ _("Use SSL for NNTP connection"), SSL_TUNNEL);
+
+ PACK_FRAME (vbox1, send_frame, _("Send (SMTP)"));
+ vbox5 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox5);
+ gtk_container_add (GTK_CONTAINER (send_frame), vbox5);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox5), 8);
+
+ CREATE_RADIO_BUTTONS(vbox5,
+ smtp_nossl_radiobtn,
+ _("Don't use SSL"),
+ SSL_NONE,
+ smtp_ssltunnel_radiobtn,
+ _("Use SSL for SMTP connection"),
+ SSL_TUNNEL,
+ smtp_starttls_radiobtn,
+ _("Use STARTTLS command to start SSL session"),
+ SSL_STARTTLS);
+
+ vbox6 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox6);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox6, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON(vbox6, use_nonblocking_ssl_chkbtn,
+ _("Use non-blocking SSL"));
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox6), hbox, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 16, -1);
+
+ label = gtk_label_new
+ (_("(Turn this off if you have problems in SSL connection)"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ ssl.pop_frame = pop_frame;
+ ssl.pop_nossl_radiobtn = pop_nossl_radiobtn;
+ ssl.pop_ssltunnel_radiobtn = pop_ssltunnel_radiobtn;
+ ssl.pop_starttls_radiobtn = pop_starttls_radiobtn;
+
+ ssl.imap_frame = imap_frame;
+ ssl.imap_nossl_radiobtn = imap_nossl_radiobtn;
+ ssl.imap_ssltunnel_radiobtn = imap_ssltunnel_radiobtn;
+ ssl.imap_starttls_radiobtn = imap_starttls_radiobtn;
+
+ ssl.nntp_frame = nntp_frame;
+ ssl.nntp_nossl_radiobtn = nntp_nossl_radiobtn;
+ ssl.nntp_ssltunnel_radiobtn = nntp_ssltunnel_radiobtn;
+
+ ssl.send_frame = send_frame;
+ ssl.smtp_nossl_radiobtn = smtp_nossl_radiobtn;
+ ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn;
+ ssl.smtp_starttls_radiobtn = smtp_starttls_radiobtn;
+
+ ssl.use_nonblocking_ssl_chkbtn = use_nonblocking_ssl_chkbtn;
+}
+
+#undef CREATE_RADIO_BUTTONS
+#undef CREATE_RADIO_BUTTON
+
+#endif /* USE_SSL */
+
+static void prefs_account_advanced_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *hbox1;
+ GtkWidget *checkbtn_smtpport;
+ GtkWidget *entry_smtpport;
+ GtkWidget *hbox_popport;
+ GtkWidget *checkbtn_popport;
+ GtkWidget *entry_popport;
+ GtkWidget *hbox_imapport;
+ GtkWidget *checkbtn_imapport;
+ GtkWidget *entry_imapport;
+ GtkWidget *hbox_nntpport;
+ GtkWidget *checkbtn_nntpport;
+ GtkWidget *entry_nntpport;
+ GtkWidget *checkbtn_domain;
+ GtkWidget *entry_domain;
+ GtkWidget *imap_frame;
+ GtkWidget *imapdir_label;
+ GtkWidget *imapdir_entry;
+ GtkWidget *folder_frame;
+ GtkWidget *vbox3;
+ GtkWidget *table;
+ GtkWidget *sent_folder_chkbtn;
+ GtkWidget *sent_folder_entry;
+ GtkWidget *draft_folder_chkbtn;
+ GtkWidget *draft_folder_entry;
+ GtkWidget *trash_folder_chkbtn;
+ GtkWidget *trash_folder_entry;
+
+#define PACK_HBOX(hbox) \
+{ \
+ hbox = gtk_hbox_new (FALSE, 8); \
+ gtk_widget_show (hbox); \
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); \
+}
+
+#define PACK_PORT_ENTRY(box, entry) \
+{ \
+ entry = gtk_entry_new (); \
+ gtk_entry_set_max_length (GTK_ENTRY(entry), 5); \
+ gtk_widget_show (entry); \
+ gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \
+ gtk_widget_set_size_request (entry, 64, -1); \
+}
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW_2);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ PACK_HBOX (hbox1);
+ PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port"));
+ PACK_PORT_ENTRY (hbox1, entry_smtpport);
+ SET_TOGGLE_SENSITIVITY (checkbtn_smtpport, entry_smtpport);
+
+ PACK_HBOX (hbox_popport);
+ PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport,
+ _("Specify POP3 port"));
+ PACK_PORT_ENTRY (hbox_popport, entry_popport);
+ SET_TOGGLE_SENSITIVITY (checkbtn_popport, entry_popport);
+
+ PACK_HBOX (hbox_imapport);
+ PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport,
+ _("Specify IMAP4 port"));
+ PACK_PORT_ENTRY (hbox_imapport, entry_imapport);
+ SET_TOGGLE_SENSITIVITY (checkbtn_imapport, entry_imapport);
+
+ PACK_HBOX (hbox_nntpport);
+ PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport,
+ _("Specify NNTP port"));
+ PACK_PORT_ENTRY (hbox_nntpport, entry_nntpport);
+ SET_TOGGLE_SENSITIVITY (checkbtn_nntpport, entry_nntpport);
+
+ PACK_HBOX (hbox1);
+ PACK_CHECK_BUTTON (hbox1, checkbtn_domain, _("Specify domain name"));
+
+ entry_domain = gtk_entry_new ();
+ gtk_widget_show (entry_domain);
+ gtk_box_pack_start (GTK_BOX (hbox1), entry_domain, TRUE, TRUE, 0);
+ SET_TOGGLE_SENSITIVITY (checkbtn_domain, entry_domain);
+
+ PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
+
+ vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox3);
+ gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
+
+ imapdir_label = gtk_label_new (_("IMAP server directory"));
+ gtk_widget_show (imapdir_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
+
+ imapdir_entry = gtk_entry_new();
+ gtk_widget_show (imapdir_entry);
+ gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0);
+
+#undef PACK_HBOX
+#undef PACK_PORT_ENTRY
+
+ /* special folder setting (maybe these options are redundant) */
+
+ PACK_FRAME (vbox1, folder_frame, _("Folder"));
+
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox3);
+ gtk_container_add (GTK_CONTAINER (folder_frame), vbox3);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
+ table = gtk_table_new (3, 3, FALSE);
+ gtk_widget_show (table);
+ gtk_container_add (GTK_CONTAINER (vbox3), table);
+ gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+
+#define SET_CHECK_BTN_AND_ENTRY(label, chkbtn, entry, n) \
+{ \
+ GtkWidget *button; \
+ \
+ chkbtn = gtk_check_button_new_with_label (label); \
+ gtk_widget_show (chkbtn); \
+ gtk_table_attach (GTK_TABLE (table), chkbtn, \
+ 0, 1, n, n + 1, GTK_FILL, 0, 0, 0); \
+ \
+ entry = gtk_entry_new (); \
+ gtk_widget_show (entry); \
+ gtk_table_attach (GTK_TABLE (table), entry, 1, 2, n, n + 1, \
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, \
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); \
+ \
+ button = gtk_button_new_with_label (_(" ... ")); \
+ gtk_widget_show (button); \
+ gtk_table_attach (GTK_TABLE (table), button, \
+ 2, 3, n, n + 1, GTK_FILL, 0, 0, 0); \
+ g_signal_connect \
+ (G_OBJECT (button), "clicked", \
+ G_CALLBACK (prefs_account_select_folder_cb), \
+ entry); \
+ \
+ SET_TOGGLE_SENSITIVITY (chkbtn, entry); \
+ SET_TOGGLE_SENSITIVITY (chkbtn, button); \
+}
+
+ SET_CHECK_BTN_AND_ENTRY(_("Put sent messages in"),
+ sent_folder_chkbtn, sent_folder_entry, 0);
+ SET_CHECK_BTN_AND_ENTRY(_("Put draft messages in"),
+ draft_folder_chkbtn, draft_folder_entry, 1);
+ SET_CHECK_BTN_AND_ENTRY(_("Put deleted messages in"),
+ trash_folder_chkbtn, trash_folder_entry, 2);
+
+ advanced.smtpport_chkbtn = checkbtn_smtpport;
+ advanced.smtpport_entry = entry_smtpport;
+ advanced.popport_hbox = hbox_popport;
+ advanced.popport_chkbtn = checkbtn_popport;
+ advanced.popport_entry = entry_popport;
+ advanced.imapport_hbox = hbox_imapport;
+ advanced.imapport_chkbtn = checkbtn_imapport;
+ advanced.imapport_entry = entry_imapport;
+ advanced.nntpport_hbox = hbox_nntpport;
+ advanced.nntpport_chkbtn = checkbtn_nntpport;
+ advanced.nntpport_entry = entry_nntpport;
+ advanced.domain_chkbtn = checkbtn_domain;
+ advanced.domain_entry = entry_domain;
+
+ advanced.imap_frame = imap_frame;
+ advanced.imapdir_entry = imapdir_entry;
+
+ advanced.sent_folder_chkbtn = sent_folder_chkbtn;
+ advanced.sent_folder_entry = sent_folder_entry;
+ advanced.draft_folder_chkbtn = draft_folder_chkbtn;
+ advanced.draft_folder_entry = draft_folder_entry;
+ advanced.trash_folder_chkbtn = trash_folder_chkbtn;
+ advanced.trash_folder_entry = trash_folder_entry;
+}
+
+static gint prefs_account_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_account_cancel();
+ return TRUE;
+}
+
+static gboolean prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_account_cancel();
+ return FALSE;
+}
+
+static void prefs_account_ok(void)
+{
+ if (prefs_account_apply() == 0)
+ gtk_main_quit();
+}
+
+static gint prefs_account_apply(void)
+{
+ RecvProtocol protocol;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ protocol = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+
+ if (*gtk_entry_get_text(GTK_ENTRY(basic.acname_entry)) == '\0') {
+ alertpanel_error(_("Account name is not entered."));
+ return -1;
+ }
+ if (*gtk_entry_get_text(GTK_ENTRY(basic.addr_entry)) == '\0') {
+ alertpanel_error(_("Mail address is not entered."));
+ return -1;
+ }
+ if ((protocol == A_POP3 || protocol == A_LOCAL) &&
+ *gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') {
+ alertpanel_error(_("SMTP server is not entered."));
+ return -1;
+ }
+ if ((protocol == A_POP3 || protocol == A_IMAP4) &&
+ *gtk_entry_get_text(GTK_ENTRY(basic.uid_entry)) == '\0') {
+ alertpanel_error(_("User ID is not entered."));
+ return -1;
+ }
+ if (protocol == A_POP3 &&
+ *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
+ alertpanel_error(_("POP3 server is not entered."));
+ return -1;
+ }
+ if (protocol == A_IMAP4 &&
+ *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
+ alertpanel_error(_("IMAP4 server is not entered."));
+ return -1;
+ }
+ if (protocol == A_NNTP &&
+ *gtk_entry_get_text(GTK_ENTRY(basic.nntpserv_entry)) == '\0') {
+ alertpanel_error(_("NNTP server is not entered."));
+ return -1;
+ }
+
+ prefs_set_data_from_dialog(param);
+ return 0;
+}
+
+static void prefs_account_cancel(void)
+{
+ cancelled = TRUE;
+ gtk_main_quit();
+}
+
+static void prefs_account_select_folder_cb(GtkWidget *widget, gpointer data)
+{
+ FolderItem *item;
+ gchar *id;
+
+ item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL);
+ if (item && item->path) {
+ id = folder_item_get_identifier(item);
+ if (id) {
+ gtk_entry_set_text(GTK_ENTRY(data), id);
+ g_free(id);
+ }
+ }
+}
+
+static void prefs_account_edit_custom_header(void)
+{
+ prefs_custom_header_open(&tmp_ac_prefs);
+}
+
+static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam)
+{
+ GtkRadioButton *radiobtn;
+ GSList *group;
+
+ radiobtn = GTK_RADIO_BUTTON (*pparam->widget);
+ group = gtk_radio_button_get_group (radiobtn);
+ while (group != NULL) {
+ GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data);
+ if (gtk_toggle_button_get_active (btn)) {
+ *((gint *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data (G_OBJECT (btn),
+ MENU_VAL_ID));
+ break;
+ }
+ group = group->next;
+ }
+}
+
+static void prefs_account_enum_set_radiobtn(PrefParam *pparam)
+{
+ GtkRadioButton *radiobtn;
+ GSList *group;
+ gpointer data;
+
+ data = GINT_TO_POINTER (*((gint *)pparam->data));
+ radiobtn = GTK_RADIO_BUTTON (*pparam->widget);
+ group = gtk_radio_button_get_group (radiobtn);
+ while (group != NULL) {
+ GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data);
+ gpointer data1;
+
+ data1 = g_object_get_data (G_OBJECT (btn), MENU_VAL_ID);
+ if (data1 == data) {
+ gtk_toggle_button_set_active (btn, TRUE);
+ break;
+ }
+ group = group->next;
+ }
+}
+
+
+#if USE_GPGME
+static void prefs_account_ascii_armored_warning(GtkWidget *widget)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) &&
+ gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook)) > 0)
+ alertpanel_warning
+ (_("It's not recommended to use the old style ASCII-armored\n"
+ "mode for encrypted messages. It doesn't comply with the\n"
+ "RFC 3156 - MIME Security with OpenPGP."));
+}
+#endif /* USE_GPGME */
+
+static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
+
+static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
+{
+ RecvProtocol protocol;
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gint index;
+
+ protocol = *((RecvProtocol *)pparam->data);
+ index = menu_find_option_menu_index
+ (optmenu, GINT_TO_POINTER(protocol), NULL);
+ if (index < 0) return;
+ gtk_option_menu_set_history(optmenu, index);
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menu_set_insensitive_all(GTK_MENU_SHELL(menu));
+
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ gtk_widget_set_sensitive(menuitem, TRUE);
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+}
+
+static void prefs_account_imap_auth_type_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
+
+static void prefs_account_imap_auth_type_set_optmenu(PrefParam *pparam)
+{
+ IMAPAuthType type = *((IMAPAuthType *)pparam->data);
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ switch (type) {
+ case IMAP_AUTH_LOGIN:
+ gtk_option_menu_set_history(optmenu, 1);
+ break;
+ case IMAP_AUTH_CRAM_MD5:
+ gtk_option_menu_set_history(optmenu, 2);
+ break;
+ case 0:
+ default:
+ gtk_option_menu_set_history(optmenu, 0);
+ }
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+}
+
+static void prefs_account_smtp_auth_type_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
+
+static void prefs_account_smtp_auth_type_set_optmenu(PrefParam *pparam)
+{
+ SMTPAuthType type = *((SMTPAuthType *)pparam->data);
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ switch (type) {
+ case SMTPAUTH_LOGIN:
+ gtk_option_menu_set_history(optmenu, 1);
+ break;
+ case SMTPAUTH_CRAM_MD5:
+ gtk_option_menu_set_history(optmenu, 2);
+ break;
+ case SMTPAUTH_DIGEST_MD5:
+ gtk_option_menu_set_history(optmenu, 3);
+ break;
+ case 0:
+ default:
+ gtk_option_menu_set_history(optmenu, 0);
+ }
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+}
+
+static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
+{
+ RecvProtocol protocol;
+ gboolean active;
+
+ protocol = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+
+ switch(protocol) {
+ case A_NNTP:
+ gtk_widget_show(basic.nntpserv_label);
+ gtk_widget_show(basic.nntpserv_entry);
+ gtk_widget_show(basic.nntpauth_chkbtn);
+ gtk_widget_hide(basic.recvserv_label);
+ gtk_widget_hide(basic.recvserv_entry);
+ gtk_widget_hide(basic.smtpserv_label);
+ gtk_widget_hide(basic.smtpserv_entry);
+ active = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn));
+ gtk_widget_set_sensitive(basic.uid_label, active);
+ gtk_widget_set_sensitive(basic.pass_label, active);
+ gtk_widget_set_sensitive(basic.uid_entry, active);
+ gtk_widget_set_sensitive(basic.pass_entry, active);
+ gtk_widget_hide(receive.pop3_frame);
+ gtk_widget_hide(receive.imap_frame);
+ gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+
+ if (!tmp_ac_prefs.account_name) {
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+ FALSE);
+ }
+
+#if USE_SSL
+ gtk_widget_hide(ssl.pop_frame);
+ gtk_widget_hide(ssl.imap_frame);
+ gtk_widget_show(ssl.nntp_frame);
+ gtk_widget_hide(ssl.send_frame);
+#endif
+ gtk_widget_hide(advanced.popport_hbox);
+ gtk_widget_hide(advanced.imapport_hbox);
+ gtk_widget_show(advanced.nntpport_hbox);
+ gtk_widget_hide(advanced.imap_frame);
+ break;
+ case A_LOCAL:
+ gtk_widget_hide(basic.nntpserv_label);
+ gtk_widget_hide(basic.nntpserv_entry);
+ gtk_widget_hide(basic.nntpauth_chkbtn);
+ gtk_widget_set_sensitive(basic.recvserv_label, FALSE);
+ gtk_widget_set_sensitive(basic.recvserv_entry, FALSE);
+ gtk_widget_show(basic.recvserv_label);
+ gtk_widget_show(basic.recvserv_entry);
+ gtk_widget_show(basic.smtpserv_label);
+ gtk_widget_show(basic.smtpserv_entry);
+ gtk_widget_set_sensitive(basic.uid_label, FALSE);
+ gtk_widget_set_sensitive(basic.pass_label, FALSE);
+ gtk_widget_set_sensitive(basic.uid_entry, FALSE);
+ gtk_widget_set_sensitive(basic.pass_entry, FALSE);
+ gtk_widget_hide(receive.pop3_frame);
+ gtk_widget_hide(receive.imap_frame);
+ gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, FALSE);
+
+ if (!tmp_ac_prefs.account_name) {
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+ TRUE);
+ }
+
+#if USE_SSL
+ gtk_widget_hide(ssl.pop_frame);
+ gtk_widget_hide(ssl.imap_frame);
+ gtk_widget_hide(ssl.nntp_frame);
+ gtk_widget_show(ssl.send_frame);
+#endif
+ gtk_widget_hide(advanced.popport_hbox);
+ gtk_widget_hide(advanced.imapport_hbox);
+ gtk_widget_hide(advanced.nntpport_hbox);
+ gtk_widget_hide(advanced.imap_frame);
+ break;
+ case A_IMAP4:
+ gtk_widget_hide(basic.nntpserv_label);
+ gtk_widget_hide(basic.nntpserv_entry);
+ gtk_widget_hide(basic.nntpauth_chkbtn);
+ gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
+ gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
+ gtk_widget_show(basic.recvserv_label);
+ gtk_widget_show(basic.recvserv_entry);
+ gtk_widget_show(basic.smtpserv_label);
+ gtk_widget_show(basic.smtpserv_entry);
+ gtk_widget_set_sensitive(basic.uid_label, TRUE);
+ gtk_widget_set_sensitive(basic.pass_label, TRUE);
+ gtk_widget_set_sensitive(basic.uid_entry, TRUE);
+ gtk_widget_set_sensitive(basic.pass_entry, TRUE);
+ gtk_widget_hide(receive.pop3_frame);
+ gtk_widget_show(receive.imap_frame);
+ gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+
+ if (!tmp_ac_prefs.account_name) {
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+ FALSE);
+ }
+
+#if USE_SSL
+ gtk_widget_hide(ssl.pop_frame);
+ gtk_widget_show(ssl.imap_frame);
+ gtk_widget_hide(ssl.nntp_frame);
+ gtk_widget_show(ssl.send_frame);
+#endif
+ gtk_widget_hide(advanced.popport_hbox);
+ gtk_widget_show(advanced.imapport_hbox);
+ gtk_widget_hide(advanced.nntpport_hbox);
+ gtk_widget_show(advanced.imap_frame);
+ break;
+ case A_POP3:
+ default:
+ gtk_widget_hide(basic.nntpserv_label);
+ gtk_widget_hide(basic.nntpserv_entry);
+ gtk_widget_hide(basic.nntpauth_chkbtn);
+ gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
+ gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
+ gtk_widget_show(basic.recvserv_label);
+ gtk_widget_show(basic.recvserv_entry);
+ gtk_widget_show(basic.smtpserv_label);
+ gtk_widget_show(basic.smtpserv_entry);
+ gtk_widget_set_sensitive(basic.uid_label, TRUE);
+ gtk_widget_set_sensitive(basic.pass_label, TRUE);
+ gtk_widget_set_sensitive(basic.uid_entry, TRUE);
+ gtk_widget_set_sensitive(basic.pass_entry, TRUE);
+ gtk_widget_show(receive.pop3_frame);
+ gtk_widget_hide(receive.imap_frame);
+ gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
+
+ if (!tmp_ac_prefs.account_name) {
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
+ TRUE);
+ }
+
+#if USE_SSL
+ gtk_widget_show(ssl.pop_frame);
+ gtk_widget_hide(ssl.imap_frame);
+ gtk_widget_hide(ssl.nntp_frame);
+ gtk_widget_show(ssl.send_frame);
+#endif
+ gtk_widget_show(advanced.popport_hbox);
+ gtk_widget_hide(advanced.imapport_hbox);
+ gtk_widget_hide(advanced.nntpport_hbox);
+ gtk_widget_hide(advanced.imap_frame);
+ break;
+ }
+
+ gtk_widget_queue_resize(basic.serv_frame);
+}
diff --git a/src/prefs_account.h b/src/prefs_account.h
new file mode 100644
index 00000000..efa659f8
--- /dev/null
+++ b/src/prefs_account.h
@@ -0,0 +1,175 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_ACCOUNT_H__
+#define __PREFS_ACCOUNT_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+typedef struct _PrefsAccount PrefsAccount;
+
+#include "folder.h"
+#include "smtp.h"
+
+typedef enum {
+ A_POP3,
+ A_APOP, /* deprecated */
+ A_RPOP, /* deprecated */
+ A_IMAP4,
+ A_NNTP,
+ A_LOCAL
+} RecvProtocol;
+
+typedef enum {
+ SIG_FILE,
+ SIG_COMMAND,
+ SIG_DIRECT
+} SigType;
+
+#if USE_GPGME
+typedef enum {
+ SIGN_KEY_DEFAULT,
+ SIGN_KEY_BY_FROM,
+ SIGN_KEY_CUSTOM
+} SignKeyType;
+#endif /* USE_GPGME */
+
+struct _PrefsAccount
+{
+ gchar *account_name;
+
+ /* Personal info */
+ gchar *name;
+ gchar *address;
+ gchar *organization;
+
+ /* Server info */
+ RecvProtocol protocol;
+ gchar *recv_server;
+ gchar *smtp_server;
+ gchar *nntp_server;
+ gboolean use_nntp_auth;
+ gchar *userid;
+ gchar *passwd;
+
+#if USE_SSL
+ /* SSL */
+ SSLType ssl_pop;
+ SSLType ssl_imap;
+ SSLType ssl_nntp;
+ SSLType ssl_smtp;
+ gboolean use_nonblocking_ssl;
+#endif /* USE_SSL */
+
+ /* Temporarily preserved password */
+ gchar *tmp_pass;
+
+ /* Receive */
+ gboolean use_apop_auth;
+ gboolean rmmail;
+ gint msg_leave_time;
+ gboolean getall;
+ gboolean recv_at_getall;
+ gboolean enable_size_limit;
+ gint size_limit;
+ gboolean filter_on_recv;
+ gchar *inbox;
+
+ gint imap_auth_type;
+
+ /* Send */
+ gboolean add_date;
+ gboolean gen_msgid;
+ gboolean add_customhdr;
+ gboolean use_smtp_auth;
+ SMTPAuthType smtp_auth_type;
+ gchar *smtp_userid;
+ gchar *smtp_passwd;
+
+ /* Temporarily preserved password */
+ gchar *tmp_smtp_pass;
+
+ gboolean pop_before_smtp;
+
+ GSList *customhdr_list;
+
+ /* Compose */
+ SigType sig_type;
+ gchar *sig_path;
+ gboolean set_autocc;
+ gchar *auto_cc;
+ gboolean set_autobcc;
+ gchar *auto_bcc;
+ gboolean set_autoreplyto;
+ gchar *auto_replyto;
+
+#if USE_GPGME
+ /* Privacy */
+ gboolean default_encrypt;
+ gboolean default_sign;
+ gboolean ascii_armored;
+ gboolean clearsign;
+ SignKeyType sign_key;
+ gchar *sign_key_id;
+#endif /* USE_GPGME */
+
+ /* Advanced */
+ gboolean set_smtpport;
+ gushort smtpport;
+ gboolean set_popport;
+ gushort popport;
+ gboolean set_imapport;
+ gushort imapport;
+ gboolean set_nntpport;
+ gushort nntpport;
+ gboolean set_domain;
+ gchar *domain;
+
+ gchar *imap_dir;
+
+ gboolean set_sent_folder;
+ gchar *sent_folder;
+ gboolean set_draft_folder;
+ gchar *draft_folder;
+ gboolean set_trash_folder;
+ gchar *trash_folder;
+
+ /* Default or not */
+ gboolean is_default;
+ /* Unique account ID */
+ gint account_id;
+
+ RemoteFolder *folder;
+};
+
+PrefsAccount *prefs_account_new (void);
+
+void prefs_account_read_config (PrefsAccount *ac_prefs,
+ const gchar *label);
+void prefs_account_write_config_all (GList *account_list);
+
+void prefs_account_free (PrefsAccount *ac_prefs);
+
+PrefsAccount *prefs_account_open (PrefsAccount *ac_prefs);
+
+#endif /* __PREFS_ACCOUNT_H__ */
diff --git a/src/prefs_actions.c b/src/prefs_actions.c
new file mode 100644
index 00000000..22e7c4e2
--- /dev/null
+++ b/src/prefs_actions.c
@@ -0,0 +1,666 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "prefs.h"
+#include "inc.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "mainwindow.h"
+#include "prefs_common.h"
+#include "alertpanel.h"
+#include "prefs_actions.h"
+#include "action.h"
+
+static struct Actions
+{
+ GtkWidget *window;
+
+ GtkWidget *ok_btn;
+
+ GtkWidget *name_entry;
+ GtkWidget *cmd_entry;
+
+ GtkWidget *actions_clist;
+} actions;
+
+/* widget creating functions */
+static void prefs_actions_create (MainWindow *mainwin);
+static void prefs_actions_set_dialog (void);
+static gint prefs_actions_clist_set_row (gint row);
+
+/* callback functions */
+static void prefs_actions_help_cb (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_register_cb (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_substitute_cb (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_delete_cb (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_up (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_down (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_select (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event);
+static void prefs_actions_row_move (GtkCList *clist,
+ gint source_row,
+ gint dest_row);
+static gint prefs_actions_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer *data);
+static gboolean prefs_actions_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_actions_cancel (GtkWidget *w,
+ gpointer data);
+static void prefs_actions_ok (GtkWidget *w,
+ gpointer data);
+
+
+void prefs_actions_open(MainWindow *mainwin)
+{
+ inc_lock();
+
+ if (!actions.window)
+ prefs_actions_create(mainwin);
+
+ manage_window_set_transient(GTK_WINDOW(actions.window));
+ gtk_widget_grab_focus(actions.ok_btn);
+
+ prefs_actions_set_dialog();
+
+ gtk_widget_show(actions.window);
+}
+
+static void prefs_actions_create(MainWindow *mainwin)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *confirm_area;
+
+ GtkWidget *vbox1;
+
+ GtkWidget *entry_vbox;
+ GtkWidget *hbox;
+ GtkWidget *name_label;
+ GtkWidget *name_entry;
+ GtkWidget *cmd_label;
+ GtkWidget *cmd_entry;
+
+ GtkWidget *reg_hbox;
+ GtkWidget *btn_hbox;
+ GtkWidget *arrow;
+ GtkWidget *reg_btn;
+ GtkWidget *subst_btn;
+ GtkWidget *del_btn;
+
+ GtkWidget *cond_hbox;
+ GtkWidget *cond_scrolledwin;
+ GtkWidget *cond_clist;
+
+ GtkWidget *help_vbox;
+ GtkWidget *help_label;
+ GtkWidget *help_toggle;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ gchar *title[1];
+
+ debug_print("Creating actions configuration window...\n");
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_container_set_border_width(GTK_CONTAINER (window), 8);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 400, -1);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ gtk_window_set_title(GTK_WINDOW(window), _("Actions configuration"));
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_actions_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_actions_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_actions_ok), mainwin);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_actions_cancel), NULL);
+
+ vbox1 = gtk_vbox_new(FALSE, 8);
+ gtk_widget_show(vbox1);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox1, TRUE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox1), 2);
+
+ entry_vbox = gtk_vbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(vbox1), entry_vbox, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(entry_vbox), hbox, FALSE, FALSE, 0);
+
+ name_label = gtk_label_new(_("Menu name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), name_label, FALSE, FALSE, 0);
+
+ name_entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox), name_entry, TRUE, TRUE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(entry_vbox), hbox, TRUE, TRUE, 0);
+
+ cmd_label = gtk_label_new(_("Command line:"));
+ gtk_box_pack_start(GTK_BOX(hbox), cmd_label, FALSE, FALSE, 0);
+
+ cmd_entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox), cmd_entry, TRUE, TRUE, 0);
+
+ gtk_widget_show_all(entry_vbox);
+
+ help_vbox = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox1), help_vbox, FALSE, FALSE, 0);
+
+ help_label = gtk_label_new
+ (_("Menu name:\n"
+ " Use / in menu name to make submenus.\n"
+ "Command line:\n"
+ " Begin with:\n"
+ " | to send message body or selection to command\n"
+ " > to send user provided text to command\n"
+ " * to send user provided hidden text to command\n"
+ " End with:\n"
+ " | to replace message body or selection with command output\n"
+ " > to insert command's output without replacing old text\n"
+ " & to run command asynchronously\n"
+ " Use:\n"
+ " %f for message file name\n"
+ " %F for the list of the file names of selected messages\n"
+ " %p for the selected message part\n"
+ " %u for a user provided argument\n"
+ " %h for a user provided hidden argument\n"
+ " %s for the text selection"));
+ gtk_misc_set_alignment(GTK_MISC(help_label), 0, 0.5);
+ gtk_label_set_justify(GTK_LABEL(help_label), GTK_JUSTIFY_LEFT);
+ gtk_widget_show(help_label);
+ gtk_box_pack_start(GTK_BOX(help_vbox), help_label, FALSE, FALSE, 0);
+ gtk_widget_hide(help_vbox);
+
+ /* register / substitute / delete */
+
+ reg_hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(reg_hbox);
+ gtk_box_pack_start(GTK_BOX(vbox1), reg_hbox, FALSE, FALSE, 0);
+
+ arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show(arrow);
+ gtk_box_pack_start(GTK_BOX(reg_hbox), arrow, FALSE, FALSE, 0);
+ gtk_widget_set_size_request(arrow, -1, 16);
+
+ btn_hbox = gtk_hbox_new(TRUE, 4);
+ gtk_widget_show(btn_hbox);
+ gtk_box_pack_start(GTK_BOX(reg_hbox), btn_hbox, FALSE, FALSE, 0);
+
+ reg_btn = gtk_button_new_with_label(_("Add"));
+ gtk_widget_show(reg_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), reg_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(reg_btn), "clicked",
+ G_CALLBACK(prefs_actions_register_cb), NULL);
+
+ subst_btn = gtk_button_new_with_label(_(" Replace "));
+ gtk_widget_show(subst_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), subst_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(subst_btn), "clicked",
+ G_CALLBACK(prefs_actions_substitute_cb), NULL);
+
+ del_btn = gtk_button_new_with_label(_("Delete"));
+ gtk_widget_show(del_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), del_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_actions_delete_cb), NULL);
+
+ help_toggle = gtk_toggle_button_new_with_label(_(" Syntax help "));
+ gtk_widget_show(help_toggle);
+ gtk_box_pack_end(GTK_BOX(reg_hbox), help_toggle, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(help_toggle), "toggled",
+ G_CALLBACK(prefs_actions_help_cb), help_vbox);
+
+ cond_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(cond_hbox);
+ gtk_box_pack_start(GTK_BOX(vbox1), cond_hbox, TRUE, TRUE, 0);
+
+ cond_scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(cond_scrolledwin);
+ gtk_widget_set_size_request(cond_scrolledwin, -1, 150);
+ gtk_box_pack_start(GTK_BOX(cond_hbox), cond_scrolledwin,
+ TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (cond_scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Registered actions");
+ cond_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show(cond_clist);
+ gtk_container_add(GTK_CONTAINER (cond_scrolledwin), cond_clist);
+ gtk_clist_set_column_width(GTK_CLIST (cond_clist), 0, 80);
+ gtk_clist_set_selection_mode(GTK_CLIST (cond_clist),
+ GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(cond_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect(G_OBJECT(cond_clist), "select_row",
+ G_CALLBACK(prefs_actions_select), NULL);
+ g_signal_connect_after(G_OBJECT(cond_clist), "row_move",
+ G_CALLBACK(prefs_actions_row_move), NULL);
+
+ btn_vbox = gtk_vbox_new(FALSE, 8);
+ gtk_widget_show(btn_vbox);
+ gtk_box_pack_start(GTK_BOX(cond_hbox), btn_vbox, FALSE, FALSE, 0);
+
+ up_btn = gtk_button_new_with_label(_("Up"));
+ gtk_widget_show(up_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), up_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(up_btn), "clicked",
+ G_CALLBACK(prefs_actions_up), NULL);
+
+ down_btn = gtk_button_new_with_label(_("Down"));
+ gtk_widget_show(down_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), down_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(down_btn), "clicked",
+ G_CALLBACK(prefs_actions_down), NULL);
+
+ gtk_widget_show(window);
+
+ actions.window = window;
+ actions.ok_btn = ok_btn;
+
+ actions.name_entry = name_entry;
+ actions.cmd_entry = cmd_entry;
+
+ actions.actions_clist = cond_clist;
+}
+
+static void prefs_actions_help_cb(GtkWidget *w, gpointer data)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+ gtk_widget_show(GTK_WIDGET(data));
+ else
+ gtk_widget_hide(GTK_WIDGET(data));
+}
+
+void prefs_actions_read_config(void)
+{
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ gchar *act;
+
+ debug_print("Reading actions configurations...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACTIONS_RC, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ while (prefs_common.actions_list != NULL) {
+ act = (gchar *)prefs_common.actions_list->data;
+ prefs_common.actions_list =
+ g_slist_remove(prefs_common.actions_list, act);
+ g_free(act);
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strchomp(buf);
+ act = strstr(buf, ": ");
+ if (act && act[2] &&
+ action_get_type(&act[2]) != ACTION_ERROR)
+ prefs_common.actions_list =
+ g_slist_append(prefs_common.actions_list,
+ g_strdup(buf));
+ }
+ fclose(fp);
+}
+
+void prefs_actions_write_config(void)
+{
+ gchar *rcpath;
+ PrefFile *pfile;
+ GSList *cur;
+
+ debug_print("Writing actions configuration...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACTIONS_RC, NULL);
+ if ((pfile= prefs_file_open(rcpath)) == NULL) {
+ g_warning("failed to write configuration to file\n");
+ g_free(rcpath);
+ return;
+ }
+
+ for (cur = prefs_common.actions_list; cur != NULL; cur = cur->next) {
+ gchar *act = (gchar *)cur->data;
+ if (fputs(act, pfile->fp) == EOF ||
+ fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputs || fputc");
+ prefs_file_close_revert(pfile);
+ g_free(rcpath);
+ return;
+ }
+ }
+
+ g_free(rcpath);
+
+ if (prefs_file_close(pfile) < 0) {
+ g_warning("failed to write configuration to file\n");
+ return;
+ }
+}
+
+static void prefs_actions_set_dialog(void)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ GSList *cur;
+ gchar *action_str[1];
+ gint row;
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ action_str[0] = _("(New)");
+ row = gtk_clist_append(clist, action_str);
+ gtk_clist_set_row_data(clist, row, NULL);
+
+ for (cur = prefs_common.actions_list; cur != NULL; cur = cur->next) {
+ gchar *action[1];
+
+ action[0] = (gchar *)cur->data;
+ row = gtk_clist_append(clist, action);
+ gtk_clist_set_row_data(clist, row, action[0]);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+static void prefs_actions_set_list(void)
+{
+ gint row = 1;
+ gchar *action;
+
+ g_slist_free(prefs_common.actions_list);
+ prefs_common.actions_list = NULL;
+
+ while ((action = (gchar *)gtk_clist_get_row_data
+ (GTK_CLIST(actions.actions_clist), row)) != NULL) {
+ prefs_common.actions_list =
+ g_slist_append(prefs_common.actions_list, action);
+ row++;
+ }
+}
+
+#define GET_ENTRY(entry) \
+ entry_text = gtk_entry_get_text(GTK_ENTRY(entry))
+
+static gint prefs_actions_clist_set_row(gint row)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ const gchar *entry_text;
+ gint len;
+ gchar action[PREFSBUFSIZE];
+ gchar *buf[1];
+
+ g_return_val_if_fail(row != 0, -1);
+
+ GET_ENTRY(actions.name_entry);
+ if (entry_text[0] == '\0') {
+ alertpanel_error(_("Menu name is not set."));
+ return -1;
+ }
+
+ if (strchr(entry_text, ':')) {
+ alertpanel_error(_("Colon ':' is not allowed in the menu name."));
+ return -1;
+ }
+
+ strncpy(action, entry_text, PREFSBUFSIZE - 1);
+ g_strstrip(action);
+
+ /* Keep space for the ': ' delimiter */
+ len = strlen(action) + 2;
+ if (len >= PREFSBUFSIZE - 1) {
+ alertpanel_error(_("Menu name is too long."));
+ return -1;
+ }
+
+ strcat(action, ": ");
+
+ GET_ENTRY(actions.cmd_entry);
+
+ if (entry_text[0] == '\0') {
+ alertpanel_error(_("Command line not set."));
+ return -1;
+ }
+
+ if (len + strlen(entry_text) >= PREFSBUFSIZE - 1) {
+ alertpanel_error(_("Menu name and command are too long."));
+ return -1;
+ }
+
+ if (action_get_type(entry_text) == ACTION_ERROR) {
+ alertpanel_error(_("The command\n%s\nhas a syntax error."),
+ entry_text);
+ return -1;
+ }
+
+ strcat(action, entry_text);
+
+ buf[0] = action;
+ if (row < 0)
+ row = gtk_clist_append(clist, buf);
+ else {
+ gchar *old_action;
+ gtk_clist_set_text(clist, row, 0, action);
+ old_action = (gchar *) gtk_clist_get_row_data(clist, row);
+ if (old_action)
+ g_free(old_action);
+ }
+
+ buf[0] = g_strdup(action);
+
+ gtk_clist_set_row_data(clist, row, buf[0]);
+
+ prefs_actions_set_list();
+
+ return 0;
+}
+
+/* callback functions */
+
+static void prefs_actions_register_cb(GtkWidget *w, gpointer data)
+{
+ prefs_actions_clist_set_row(-1);
+}
+
+static void prefs_actions_substitute_cb(GtkWidget *w, gpointer data)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ gchar *action;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ action = gtk_clist_get_row_data(clist, row);
+ if (!action) return;
+
+ prefs_actions_clist_set_row(row);
+}
+
+static void prefs_actions_delete_cb(GtkWidget *w, gpointer data)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ gchar *action;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ if (alertpanel(_("Delete action"),
+ _("Do you really want to delete this action?"),
+ _("Yes"), _("No"), NULL) == G_ALERTALTERNATE)
+ return;
+
+ action = gtk_clist_get_row_data(clist, row);
+ g_free(action);
+ gtk_clist_remove(clist, row);
+ prefs_common.actions_list = g_slist_remove(prefs_common.actions_list,
+ action);
+}
+
+static void prefs_actions_up(GtkWidget *w, gpointer data)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 1)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void prefs_actions_down(GtkWidget *w, gpointer data)
+{
+ GtkCList *clist = GTK_CLIST(actions.actions_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0 && row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+#define ENTRY_SET_TEXT(entry, str) \
+ gtk_entry_set_text(GTK_ENTRY(entry), str ? str : "")
+
+static void prefs_actions_select(GtkCList *clist, gint row, gint column,
+ GdkEvent *event)
+{
+ gchar *action;
+ gchar *cmd;
+ gchar buf[PREFSBUFSIZE];
+ action = gtk_clist_get_row_data(clist, row);
+
+ if (!action) {
+ ENTRY_SET_TEXT(actions.name_entry, "");
+ ENTRY_SET_TEXT(actions.cmd_entry, "");
+ return;
+ }
+
+ strncpy(buf, action, PREFSBUFSIZE - 1);
+ buf[PREFSBUFSIZE - 1] = 0x00;
+ cmd = strstr(buf, ": ");
+
+ if (cmd && cmd[2])
+ ENTRY_SET_TEXT(actions.cmd_entry, &cmd[2]);
+ else
+ return;
+
+ *cmd = 0x00;
+ ENTRY_SET_TEXT(actions.name_entry, buf);
+}
+
+static void prefs_actions_row_move(GtkCList *clist,
+ gint source_row, gint dest_row)
+{
+ prefs_actions_set_list();
+ if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, dest_row, -1,
+ source_row < dest_row ? 1.0 : 0.0, 0.0);
+ }
+}
+
+static gint prefs_actions_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer *data)
+{
+ prefs_actions_cancel(widget, data);
+ return TRUE;
+}
+
+static gboolean prefs_actions_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_actions_cancel(widget, data);
+ return FALSE;
+}
+
+static void prefs_actions_cancel(GtkWidget *w, gpointer data)
+{
+ prefs_actions_read_config();
+ gtk_widget_hide(actions.window);
+ inc_unlock();
+}
+
+static void prefs_actions_ok(GtkWidget *widget, gpointer data)
+{
+ GtkItemFactory *ifactory;
+ MainWindow *mainwin = (MainWindow *)data;
+
+ prefs_actions_write_config();
+ ifactory = gtk_item_factory_from_widget(mainwin->menubar);
+ action_update_mainwin_menu(ifactory, mainwin);
+ gtk_widget_hide(actions.window);
+ inc_unlock();
+}
+
diff --git a/src/prefs_actions.h b/src/prefs_actions.h
new file mode 100644
index 00000000..f20f6230
--- /dev/null
+++ b/src/prefs_actions.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto & The Sylpheed Claws 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_ACTIONS_H__
+#define __PREFS_ACTIONS_H__
+
+#include "mainwindow.h"
+
+void prefs_actions_read_config (void);
+void prefs_actions_write_config (void);
+void prefs_actions_open (MainWindow *mainwin);
+
+#endif /* __PREFS_ACTIONS_H__ */
diff --git a/src/prefs_common.c b/src/prefs_common.c
new file mode 100644
index 00000000..51c2e6ba
--- /dev/null
+++ b/src/prefs_common.c
@@ -0,0 +1,3545 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_common.h"
+#include "prefs_display_header.h"
+#include "prefs_summary_column.h"
+#include "mainwindow.h"
+#include "summaryview.h"
+#include "messageview.h"
+#include "manage_window.h"
+#include "inc.h"
+#include "menu.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "alertpanel.h"
+#include "folder.h"
+#include "socket.h"
+
+PrefsCommon prefs_common;
+
+static PrefsDialog dialog;
+
+static struct Receive {
+ GtkWidget *checkbtn_incext;
+ GtkWidget *entry_incext;
+ GtkWidget *button_incext;
+
+ GtkWidget *checkbtn_local;
+ GtkWidget *checkbtn_filter_on_inc;
+ GtkWidget *entry_spool;
+
+ GtkWidget *checkbtn_autochk;
+ GtkWidget *spinbtn_autochk;
+ GtkObject *spinbtn_autochk_adj;
+
+ GtkWidget *checkbtn_chkonstartup;
+ GtkWidget *checkbtn_scan_after_inc;
+
+ GtkWidget *spinbtn_maxarticle;
+ GtkObject *spinbtn_maxarticle_adj;
+} receive;
+
+static struct Send {
+ GtkWidget *checkbtn_extsend;
+ GtkWidget *entry_extsend;
+ GtkWidget *button_extsend;
+
+ GtkWidget *checkbtn_savemsg;
+
+ GtkWidget *optmenu_charset;
+ GtkWidget *optmenu_encoding_method;
+} p_send;
+
+static struct Compose {
+ GtkWidget *checkbtn_autosig;
+ GtkWidget *entry_sigsep;
+
+ GtkWidget *checkbtn_autoextedit;
+ GtkWidget *spinbtn_undolevel;
+ GtkObject *spinbtn_undolevel_adj;
+ GtkWidget *spinbtn_linewrap;
+ GtkObject *spinbtn_linewrap_adj;
+ GtkWidget *checkbtn_wrapquote;
+ GtkWidget *checkbtn_autowrap;
+ GtkWidget *checkbtn_wrapatsend;
+
+ GtkWidget *checkbtn_reply_account_autosel;
+ GtkWidget *checkbtn_quote;
+ GtkWidget *checkbtn_default_reply_list;
+} compose;
+
+static struct Quote {
+ GtkWidget *entry_quotemark;
+ GtkWidget *text_quotefmt;
+
+ GtkWidget *entry_fw_quotemark;
+ GtkWidget *text_fw_quotefmt;
+} quote;
+
+static struct Display {
+ GtkWidget *entry_textfont;
+ GtkWidget *button_textfont;
+
+ GtkWidget *chkbtn_folder_unread;
+ GtkWidget *entry_ng_abbrev_len;
+ GtkWidget *spinbtn_ng_abbrev_len;
+ GtkObject *spinbtn_ng_abbrev_len_adj;
+
+ GtkWidget *chkbtn_transhdr;
+
+ GtkWidget *chkbtn_swapfrom;
+ GtkWidget *chkbtn_expand_thread;
+ GtkWidget *entry_datefmt;
+} display;
+
+static struct Message {
+ GtkWidget *chkbtn_enablecol;
+ GtkWidget *button_edit_col;
+ GtkWidget *chkbtn_mbalnum;
+ GtkWidget *chkbtn_disphdrpane;
+ GtkWidget *chkbtn_disphdr;
+ GtkWidget *spinbtn_linespc;
+ GtkObject *spinbtn_linespc_adj;
+ GtkWidget *chkbtn_headspc;
+
+ GtkWidget *chkbtn_smoothscroll;
+ GtkWidget *spinbtn_scrollstep;
+ GtkObject *spinbtn_scrollstep_adj;
+ GtkWidget *chkbtn_halfpage;
+
+ GtkWidget *chkbtn_resize_image;
+} message;
+
+#if USE_GPGME
+static struct Privacy {
+ GtkWidget *checkbtn_auto_check_signatures;
+ GtkWidget *checkbtn_gpg_signature_popup;
+ GtkWidget *checkbtn_store_passphrase;
+ GtkWidget *spinbtn_store_passphrase;
+ GtkObject *spinbtn_store_passphrase_adj;
+ GtkWidget *checkbtn_passphrase_grab;
+ GtkWidget *checkbtn_gpg_warning;
+} privacy;
+#endif
+
+static struct Interface {
+ GtkWidget *checkbtn_always_show_msg;
+ GtkWidget *checkbtn_openunread;
+ GtkWidget *checkbtn_mark_as_read_on_newwin;
+ GtkWidget *checkbtn_openinbox;
+ GtkWidget *checkbtn_immedexec;
+ GtkWidget *optmenu_recvdialog;
+ GtkWidget *checkbtn_no_recv_err_panel;
+ GtkWidget *checkbtn_close_recv_dialog;
+} interface;
+
+static struct Other {
+ GtkWidget *uri_combo;
+ GtkWidget *uri_entry;
+ GtkWidget *printcmd_entry;
+ GtkWidget *exteditor_combo;
+ GtkWidget *exteditor_entry;
+
+ GtkWidget *checkbtn_addaddrbyclick;
+ GtkWidget *checkbtn_confonexit;
+ GtkWidget *checkbtn_cleanonexit;
+ GtkWidget *checkbtn_askonclean;
+ GtkWidget *checkbtn_warnqueued;
+
+ GtkWidget *spinbtn_iotimeout;
+ GtkObject *spinbtn_iotimeout_adj;
+} other;
+
+static struct MessageColorButtons {
+ GtkWidget *quote_level1_btn;
+ GtkWidget *quote_level2_btn;
+ GtkWidget *quote_level3_btn;
+ GtkWidget *uri_btn;
+} color_buttons;
+
+static struct KeybindDialog {
+ GtkWidget *window;
+ GtkWidget *combo;
+} keybind;
+
+static GtkWidget *quote_desc_win;
+static GtkWidget *font_sel_win;
+static GtkWidget *quote_color_win;
+static GtkWidget *color_dialog;
+
+static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
+static void prefs_common_charset_set_optmenu (PrefParam *pparam);
+static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
+static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
+static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
+static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
+
+/*
+ parameter name, default value, pointer to the prefs variable, data type,
+ pointer to the widget pointer,
+ pointer to the function for data setting,
+ pointer to the function for widget setting
+ */
+
+static PrefParam param[] = {
+ /* Receive */
+ {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
+ &receive.checkbtn_incext,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
+ &receive.entry_incext,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"inc_local", "FALSE", &prefs_common.inc_local, P_BOOL,
+ &receive.checkbtn_local,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"filter_on_inc_local", "TRUE", &prefs_common.filter_on_inc, P_BOOL,
+ &receive.checkbtn_filter_on_inc,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
+ &receive.entry_spool,
+ prefs_set_data_from_entry, prefs_set_entry},
+
+ {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
+ &receive.checkbtn_autochk,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
+ &receive.spinbtn_autochk,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+ {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
+ &receive.checkbtn_chkonstartup,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
+ P_BOOL, &receive.checkbtn_scan_after_inc,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
+ &receive.spinbtn_maxarticle,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+
+ /* Send */
+ {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
+ &p_send.checkbtn_extsend,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
+ &prefs_common.extsend_cmd, P_STRING,
+ &p_send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
+ {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
+ &p_send.checkbtn_savemsg,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
+ &p_send.optmenu_charset,
+ prefs_common_charset_set_data_from_optmenu,
+ prefs_common_charset_set_optmenu},
+ {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
+ &p_send.optmenu_encoding_method,
+ prefs_common_encoding_set_data_from_optmenu,
+ prefs_common_encoding_set_optmenu},
+
+ {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
+ P_BOOL, NULL, NULL, NULL},
+
+ /* Compose */
+ {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
+ &compose.checkbtn_autosig,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
+ &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
+ &compose.checkbtn_autoextedit,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"undo_level", "50", &prefs_common.undolevels, P_INT,
+ &compose.spinbtn_undolevel,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+
+ {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
+ &compose.spinbtn_linewrap,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+ {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
+ &compose.checkbtn_wrapquote,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
+ &compose.checkbtn_autowrap,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"linewrap_before_sending", "FALSE",
+ &prefs_common.linewrap_at_send, P_BOOL,
+ &compose.checkbtn_wrapatsend,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
+ &compose.checkbtn_quote,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"reply_account_autoselect", "TRUE",
+ &prefs_common.reply_account_autosel, P_BOOL,
+ &compose.checkbtn_reply_account_autosel,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
+ &compose.checkbtn_default_reply_list,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
+ NULL, NULL, NULL},
+
+ /* Quote */
+ {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
+ &quote.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
+ {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
+ &prefs_common.quotefmt, P_STRING, &quote.text_quotefmt,
+ prefs_set_data_from_text, prefs_set_text},
+
+ {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
+ &quote.entry_fw_quotemark,
+ prefs_set_data_from_entry, prefs_set_entry},
+ {"forward_quote_format",
+ "\\n\\nBegin forwarded message:\\n\\n"
+ "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
+ "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
+ &prefs_common.fw_quotefmt, P_STRING, &quote.text_fw_quotefmt,
+ prefs_set_data_from_text, prefs_set_text},
+
+ /* Display */
+ {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
+ NULL, NULL, NULL},
+ {"message_font", DEFAULT_MESSAGE_FONT, &prefs_common.textfont, P_STRING,
+ &display.entry_textfont, prefs_set_data_from_entry, prefs_set_entry},
+ {"normal_font", DEFAULT_NORMAL_FONT, &prefs_common.normalfont, P_STRING,
+ NULL, NULL, NULL},
+ {"bold_font", DEFAULT_BOLD_FONT, &prefs_common.boldfont, P_STRING,
+ NULL, NULL, NULL},
+ {"small_font", DEFAULT_SMALL_FONT, &prefs_common.smallfont, P_STRING,
+ NULL, NULL, NULL},
+ {"title_font", DEFAULT_TITLE_FONT, &prefs_common.titlefont, P_STRING,
+ NULL, NULL, NULL},
+
+ {"display_folder_unread_num", "TRUE",
+ &prefs_common.display_folder_unread, P_BOOL,
+ &display.chkbtn_folder_unread,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"newsgroup_abbrev_len", "16",
+ &prefs_common.ng_abbrev_len, P_INT,
+ &display.spinbtn_ng_abbrev_len,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+
+ {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
+ &display.chkbtn_transhdr,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ /* Display: Summary View */
+ {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
+ &display.chkbtn_swapfrom,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
+ P_STRING, &display.entry_datefmt,
+ prefs_set_data_from_entry, prefs_set_entry},
+ {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
+ &display.chkbtn_expand_thread,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
+ NULL, NULL, NULL},
+ {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
+ NULL, NULL, NULL},
+
+ {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
+ NULL, NULL, NULL},
+ {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
+ NULL, NULL, NULL},
+ {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
+ NULL, NULL, NULL},
+
+ {"folderview_vscrollbar_policy", "0",
+ &prefs_common.folderview_vscrollbar_policy, P_ENUM,
+ NULL, NULL, NULL},
+
+ {"summary_col_show_mark", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_unread", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_mime", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_subject", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_from", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_date", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_size", "TRUE",
+ &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
+ {"summary_col_show_number", "FALSE",
+ &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
+
+ {"summary_col_pos_mark", "0",
+ &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_unread", "1",
+ &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_mime", "2",
+ &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_subject", "3",
+ &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_from", "4",
+ &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_date", "5",
+ &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_size", "6",
+ &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
+ {"summary_col_pos_number", "7",
+ &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
+
+ {"summary_col_size_mark", "10",
+ &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_unread", "13",
+ &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_mime", "10",
+ &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_subject", "200",
+ &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_from", "120",
+ &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_date", "118",
+ &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_size", "45",
+ &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
+ {"summary_col_size_number", "40",
+ &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
+
+ /* Widget size */
+ {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
+ NULL, NULL, NULL},
+ {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
+ NULL, NULL, NULL},
+ {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
+ NULL, NULL, NULL},
+ {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
+ NULL, NULL, NULL},
+ {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
+ NULL, NULL, NULL},
+
+ {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
+ NULL, NULL, NULL},
+ {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
+ NULL, NULL, NULL},
+ {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
+ NULL, NULL, NULL},
+ {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
+ NULL, NULL, NULL},
+
+ {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
+ NULL, NULL, NULL},
+ {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
+ NULL, NULL, NULL},
+
+ {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
+ NULL, NULL, NULL},
+ {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
+ NULL, NULL, NULL},
+ {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
+ NULL, NULL, NULL},
+ {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
+ NULL, NULL, NULL},
+ {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
+ NULL, NULL, NULL},
+
+ {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
+ NULL, NULL, NULL},
+ {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
+ NULL, NULL, NULL},
+ {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
+ NULL, NULL, NULL},
+ {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
+ NULL, NULL, NULL},
+ {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
+ NULL, NULL, NULL},
+ {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
+ NULL, NULL, NULL},
+ {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
+ NULL, NULL, NULL},
+ {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
+ NULL, NULL, NULL},
+ {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
+ NULL, NULL, NULL},
+ {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
+ NULL, NULL, NULL},
+ {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
+ NULL, NULL, NULL},
+ {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
+ NULL, NULL, NULL},
+ {"compose_width", "600", &prefs_common.compose_width, P_INT,
+ NULL, NULL, NULL},
+ {"compose_height", "560", &prefs_common.compose_height, P_INT,
+ NULL, NULL, NULL},
+
+ /* Message */
+ {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
+ &message.chkbtn_enablecol,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
+ NULL, NULL, NULL},
+ {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
+ NULL, NULL, NULL},
+ {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
+ NULL, NULL, NULL},
+ {"uri_color", "32512", &prefs_common.uri_col, P_INT,
+ NULL, NULL, NULL},
+ {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
+ NULL, NULL, NULL},
+ {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
+ P_BOOL, NULL, NULL, NULL},
+
+ {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
+ &message.chkbtn_mbalnum,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
+ P_BOOL, &message.chkbtn_disphdrpane,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
+ &message.chkbtn_disphdr,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"line_space", "2", &prefs_common.line_space, P_INT,
+ &message.spinbtn_linespc,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+ {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
+ &message.chkbtn_headspc,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"enable_smooth_scroll", "FALSE",
+ &prefs_common.enable_smooth_scroll, P_BOOL,
+ &message.chkbtn_smoothscroll,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
+ &message.spinbtn_scrollstep,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+ {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
+ &message.chkbtn_halfpage,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"resize_image", "TRUE", &prefs_common.resize_image, P_BOOL,
+ &message.chkbtn_resize_image,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
+ NULL, NULL, NULL},
+
+ /* MIME viewer */
+ {"mime_image_viewer", "display '%s'",
+ &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
+ {"mime_audio_player", "play '%s'",
+ &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
+ {"mime_open_command", "gedit '%s'",
+ &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
+
+#if USE_GPGME
+ /* Privacy */
+ {"auto_check_signatures", "TRUE",
+ &prefs_common.auto_check_signatures, P_BOOL,
+ &privacy.checkbtn_auto_check_signatures,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"gpg_signature_popup", "FALSE",
+ &prefs_common.gpg_signature_popup, P_BOOL,
+ &privacy.checkbtn_gpg_signature_popup,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
+ &privacy.checkbtn_store_passphrase,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"store_passphrase_timeout", "0",
+ &prefs_common.store_passphrase_timeout, P_INT,
+ &privacy.spinbtn_store_passphrase,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+#ifndef __MINGW32__
+ {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
+ &privacy.checkbtn_passphrase_grab,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+#endif /* __MINGW32__ */
+ {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
+ &privacy.checkbtn_gpg_warning,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+#endif /* USE_GPGME */
+
+ /* Interface */
+ {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
+ NULL, NULL, NULL},
+ {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
+ NULL, NULL, NULL},
+
+ {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
+ NULL, NULL, NULL},
+ {"always_show_message_when_selected", "FALSE",
+ &prefs_common.always_show_msg,
+ P_BOOL, &interface.checkbtn_always_show_msg,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
+ P_BOOL, &interface.checkbtn_openunread,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"mark_as_read_on_new_window", "FALSE",
+ &prefs_common.mark_as_read_on_new_window,
+ P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
+ P_BOOL, &interface.checkbtn_openinbox,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
+ &interface.checkbtn_immedexec,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
+ &interface.optmenu_recvdialog,
+ prefs_common_recv_dialog_set_data_from_optmenu,
+ prefs_common_recv_dialog_set_optmenu},
+ {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
+ P_BOOL, &interface.checkbtn_no_recv_err_panel,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
+ P_BOOL, &interface.checkbtn_close_recv_dialog,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ /* Other */
+ {"uri_open_command", DEFAULT_BROWSER_CMD,
+ &prefs_common.uri_cmd, P_STRING,
+ &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
+ {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
+ &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
+ {"ext_editor_command", "gedit %s",
+ &prefs_common.ext_editor_cmd, P_STRING,
+ &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
+
+ {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
+ P_BOOL, &other.checkbtn_addaddrbyclick,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
+ &other.checkbtn_confonexit,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
+ &other.checkbtn_cleanonexit,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
+ &other.checkbtn_askonclean,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
+ P_BOOL, &other.checkbtn_warnqueued,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+
+ {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
+ P_INT, &other.spinbtn_iotimeout,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+
+ {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
+};
+
+/* widget creating functions */
+static void prefs_common_create (void);
+static void prefs_receive_create (void);
+static void prefs_send_create (void);
+static void prefs_compose_create (void);
+static void prefs_quote_create (void);
+static void prefs_display_create (void);
+static void prefs_message_create (void);
+#if USE_GPGME
+static void prefs_privacy_create (void);
+#endif
+static void prefs_interface_create (void);
+static void prefs_other_create (void);
+
+static void date_format_ok_btn_clicked (GtkButton *button,
+ GtkWidget **widget);
+static void date_format_cancel_btn_clicked (GtkButton *button,
+ GtkWidget **widget);
+static gboolean date_format_key_pressed (GtkWidget *keywidget,
+ GdkEventKey *event,
+ GtkWidget **widget);
+static gboolean date_format_on_delete (GtkWidget *dialogwidget,
+ GdkEventAny *event,
+ GtkWidget **widget);
+static void date_format_entry_on_change (GtkEditable *editable,
+ GtkLabel *example);
+static void date_format_select_row (GtkWidget *date_format_list,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ GtkWidget *date_format);
+static GtkWidget *date_format_create (GtkButton *button,
+ void *data);
+
+static void prefs_quote_description_create (void);
+static gboolean prefs_quote_description_key_pressed
+ (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+static void prefs_quote_colors_dialog (void);
+static void prefs_quote_colors_dialog_create (void);
+static gboolean prefs_quote_colors_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void quote_color_set_dialog (GtkWidget *widget,
+ gpointer data);
+static void quote_colors_set_dialog_ok (GtkWidget *widget,
+ gpointer data);
+static void quote_colors_set_dialog_cancel (GtkWidget *widget,
+ gpointer data);
+static gboolean quote_colors_set_dialog_key_pressed
+ (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void set_button_bg_color (GtkWidget *widget,
+ gint color);
+static void prefs_enable_message_color_toggled (void);
+static void prefs_recycle_colors_toggled (GtkWidget *widget);
+
+static void prefs_font_select (GtkButton *button);
+static gboolean prefs_font_selection_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_font_selection_ok (GtkButton *button);
+
+static void prefs_keybind_select (void);
+static gint prefs_keybind_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_keybind_cancel (void);
+static void prefs_keybind_apply_clicked (GtkWidget *widget);
+
+static gint prefs_common_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_common_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_common_ok (void);
+static void prefs_common_apply (void);
+static void prefs_common_cancel (void);
+
+void prefs_common_read_config(void)
+{
+ FILE *fp;
+ gchar *path;
+ gchar buf[PREFSBUFSIZE];
+
+ prefs_read_config(param, "Common", COMMON_RC);
+
+ prefs_common.online_mode = TRUE;
+
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
+ NULL);
+ if ((fp = fopen(path, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+ return;
+ }
+ g_free(path);
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strstrip(buf);
+ if (buf[0] == '\0') continue;
+ prefs_common.mime_open_cmd_history =
+ add_history(prefs_common.mime_open_cmd_history, buf);
+ }
+ fclose(fp);
+
+ prefs_common.mime_open_cmd_history =
+ g_list_reverse(prefs_common.mime_open_cmd_history);
+}
+
+void prefs_common_write_config(void)
+{
+ GList *cur;
+ FILE *fp;
+ gchar *path;
+
+ prefs_write_config(param, "Common", COMMON_RC);
+
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
+ NULL);
+ if ((fp = fopen(path, "wb")) == NULL) {
+ FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+ return;
+ }
+
+ for (cur = prefs_common.mime_open_cmd_history;
+ cur != NULL; cur = cur->next) {
+ fputs((gchar *)cur->data, fp);
+ fputc('\n', fp);
+ }
+
+ fclose(fp);
+ g_free(path);
+}
+
+void prefs_common_open(void)
+{
+ inc_lock();
+
+ if (!dialog.window) {
+ prefs_common_create();
+ }
+
+ manage_window_set_transient(GTK_WINDOW(dialog.window));
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
+ gtk_widget_grab_focus(dialog.ok_btn);
+
+ prefs_set_dialog(param);
+
+ gtk_widget_show(dialog.window);
+}
+
+static void prefs_common_create(void)
+{
+ gint page = 0;
+
+ debug_print(_("Creating common preferences window...\n"));
+
+ prefs_dialog_create(&dialog);
+ gtk_window_set_title (GTK_WINDOW(dialog.window),
+ _("Common Preferences"));
+ g_signal_connect (G_OBJECT(dialog.window), "delete_event",
+ G_CALLBACK(prefs_common_deleted), NULL);
+ g_signal_connect (G_OBJECT(dialog.window), "key_press_event",
+ G_CALLBACK(prefs_common_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
+
+ g_signal_connect (G_OBJECT(dialog.ok_btn), "clicked",
+ G_CALLBACK(prefs_common_ok), NULL);
+ g_signal_connect (G_OBJECT(dialog.apply_btn), "clicked",
+ G_CALLBACK(prefs_common_apply), NULL);
+ g_signal_connect (G_OBJECT(dialog.cancel_btn), "clicked",
+ G_CALLBACK(prefs_common_cancel), NULL);
+
+ /* create all widgets on notebook */
+ prefs_receive_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
+ prefs_send_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
+ prefs_compose_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
+ prefs_quote_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
+ prefs_display_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
+ prefs_message_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
+#if USE_GPGME
+ prefs_privacy_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
+#endif
+ prefs_interface_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
+ prefs_other_create();
+ SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
+
+ gtk_widget_show_all(dialog.window);
+}
+
+static void prefs_receive_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *frame_incext;
+ GtkWidget *checkbtn_incext;
+ GtkWidget *hbox;
+ GtkWidget *label_incext;
+ GtkWidget *entry_incext;
+ /* GtkWidget *button_incext; */
+
+ GtkWidget *frame_spool;
+ GtkWidget *checkbtn_local;
+ GtkWidget *checkbtn_filter_on_inc;
+ GtkWidget *label_spool;
+ GtkWidget *entry_spool;
+
+ GtkWidget *hbox_autochk;
+ GtkWidget *checkbtn_autochk;
+ GtkWidget *label_autochk1;
+ GtkObject *spinbtn_autochk_adj;
+ GtkWidget *spinbtn_autochk;
+ GtkWidget *label_autochk2;
+ GtkWidget *checkbtn_chkonstartup;
+ GtkWidget *checkbtn_scan_after_inc;
+
+ GtkWidget *frame_news;
+ GtkWidget *label_maxarticle;
+ GtkWidget *spinbtn_maxarticle;
+ GtkObject *spinbtn_maxarticle_adj;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME(vbox1, frame_incext, _("External program"));
+
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ /* Use of external incorporation program */
+ PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
+ _("Use external program for incorporation"));
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+ SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
+
+ label_incext = gtk_label_new (_("Command"));
+ gtk_widget_show (label_incext);
+ gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
+
+ entry_incext = gtk_entry_new ();
+ gtk_widget_show (entry_incext);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
+
+#if 0
+ button_incext = gtk_button_new_with_label ("... ");
+ gtk_widget_show (button_incext);
+ gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
+#endif
+
+ PACK_FRAME(vbox1, frame_spool, _("Local spool"));
+
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ hbox = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
+ PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
+ _("Filter on incorporation"));
+ SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+ SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
+
+ label_spool = gtk_label_new (_("Spool path"));
+ gtk_widget_show (label_spool);
+ gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
+
+ entry_spool = gtk_entry_new ();
+ gtk_widget_show (entry_spool);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ /* Auto-checking */
+ hbox_autochk = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox_autochk);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
+ _("Auto-check new mail"));
+
+ label_autochk1 = gtk_label_new (_("every"));
+ gtk_widget_show (label_autochk1);
+ gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
+
+ spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
+ spinbtn_autochk = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
+ gtk_widget_show (spinbtn_autochk);
+ gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
+
+ label_autochk2 = gtk_label_new (_("minute(s)"));
+ gtk_widget_show (label_autochk2);
+ gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
+
+ SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
+ SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
+ SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
+ _("Check new mail on startup"));
+ PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
+ _("Update all local folders after incorporation"));
+
+ PACK_FRAME(vbox1, frame_news, _("News"));
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox);
+ gtk_container_add (GTK_CONTAINER (frame_news), hbox);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
+
+ label_maxarticle = gtk_label_new
+ (_("Maximum number of articles to download\n"
+ "(unlimited if 0 is specified)"));
+ gtk_widget_show (label_maxarticle);
+ gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
+
+ spinbtn_maxarticle_adj =
+ gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
+ spinbtn_maxarticle = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
+ gtk_widget_show (spinbtn_maxarticle);
+ gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_maxarticle, 64, -1);
+ gtk_spin_button_set_numeric
+ (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
+
+ receive.checkbtn_incext = checkbtn_incext;
+ receive.entry_incext = entry_incext;
+ /* receive.button_incext = button_incext; */
+
+ receive.checkbtn_local = checkbtn_local;
+ receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
+ receive.entry_spool = entry_spool;
+
+ receive.checkbtn_autochk = checkbtn_autochk;
+ receive.spinbtn_autochk = spinbtn_autochk;
+ receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
+
+ receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
+ receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
+
+ receive.spinbtn_maxarticle = spinbtn_maxarticle;
+ receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
+}
+
+static void prefs_send_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *frame_extsend;
+ GtkWidget *vbox_extsend;
+ GtkWidget *checkbtn_extsend;
+ GtkWidget *hbox1;
+ GtkWidget *label_extsend;
+ GtkWidget *entry_extsend;
+ /* GtkWidget *button_extsend; */
+ GtkWidget *checkbtn_savemsg;
+ GtkWidget *label_outcharset;
+ GtkWidget *optmenu_charset;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *label_charset_desc;
+ GtkWidget *optmenu_encoding;
+ GtkWidget *label_encoding;
+ GtkWidget *label_encoding_desc;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME(vbox1, frame_extsend, _("External program"));
+
+ vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox_extsend);
+ gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
+
+ PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
+ _("Use external program for sending"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
+ SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
+
+ label_extsend = gtk_label_new (_("Command"));
+ gtk_widget_show (label_extsend);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
+
+ entry_extsend = gtk_entry_new ();
+ gtk_widget_show (entry_extsend);
+ gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
+
+#if 0
+ button_extsend = gtk_button_new_with_label ("... ");
+ gtk_widget_show (button_extsend);
+ gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
+#endif
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
+ _("Save sent messages to outbox"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label_outcharset = gtk_label_new (_("Outgoing codeset"));
+ gtk_widget_show (label_outcharset);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
+
+ optmenu_charset = gtk_option_menu_new ();
+ gtk_widget_show (optmenu_charset);
+ gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new ();
+
+#define SET_MENUITEM(str, data) \
+{ \
+ MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
+}
+
+ SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
+ SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
+#if HAVE_ICONV
+ SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
+#endif
+ SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
+ SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
+ SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
+ SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
+ SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
+ SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
+ SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
+#if HAVE_ICONV
+ SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
+#endif
+ SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
+#if HAVE_ICONV
+ SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
+ SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
+#endif
+ SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
+#if 0
+ SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
+ SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
+#endif /* 0 */
+ SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
+ SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
+#if 0
+ SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
+ SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
+#endif /* 0 */
+ SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
+ SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
+ SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
+ optmenu_menu);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label_charset_desc = gtk_label_new
+ (_("If `Automatic' is selected, the optimal encoding\n"
+ "for the current locale will be used."));
+ gtk_widget_show (label_charset_desc);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
+ FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label_charset_desc),
+ GTK_JUSTIFY_LEFT);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label_encoding = gtk_label_new (_("Transfer encoding"));
+ gtk_widget_show (label_encoding);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
+
+ optmenu_encoding = gtk_option_menu_new ();
+ gtk_widget_show (optmenu_encoding);
+ gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new ();
+
+ SET_MENUITEM(_("Automatic"), CTE_AUTO);
+ SET_MENUITEM("base64", CTE_BASE64);
+ SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
+ SET_MENUITEM("8bit", CTE_8BIT);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
+ optmenu_menu);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label_encoding_desc = gtk_label_new
+ (_("Specify Content-Transfer-Encoding used when\n"
+ "message body contains non-ASCII characters."));
+ gtk_widget_show (label_encoding_desc);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_encoding_desc,
+ FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label_encoding_desc),
+ GTK_JUSTIFY_LEFT);
+
+ p_send.checkbtn_extsend = checkbtn_extsend;
+ p_send.entry_extsend = entry_extsend;
+ /* p_send.button_extsend = button_extsend; */
+
+ p_send.checkbtn_savemsg = checkbtn_savemsg;
+
+ p_send.optmenu_charset = optmenu_charset;
+ p_send.optmenu_encoding_method = optmenu_encoding;
+}
+
+static void prefs_compose_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *hbox1;
+ GtkWidget *hbox2;
+
+ GtkWidget *frame_sig;
+ GtkWidget *checkbtn_autosig;
+ GtkWidget *label_sigsep;
+ GtkWidget *entry_sigsep;
+
+ GtkWidget *frame_editor;
+ GtkWidget *vbox2;
+ GtkWidget *checkbtn_autoextedit;
+ GtkWidget *vbox3;
+ GtkWidget *hbox3;
+ GtkWidget *hbox4;
+ GtkWidget *label_undolevel;
+ GtkObject *spinbtn_undolevel_adj;
+ GtkWidget *spinbtn_undolevel;
+ GtkWidget *label_linewrap;
+ GtkObject *spinbtn_linewrap_adj;
+ GtkWidget *spinbtn_linewrap;
+ GtkWidget *checkbtn_wrapquote;
+ GtkWidget *checkbtn_autowrap;
+ GtkWidget *checkbtn_wrapatsend;
+
+ GtkWidget *frame_reply;
+ GtkWidget *checkbtn_reply_account_autosel;
+ GtkWidget *checkbtn_quote;
+ GtkWidget *checkbtn_default_reply_list;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ /* signature */
+
+ PACK_FRAME(vbox1, frame_sig, _("Signature"));
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_container_add (GTK_CONTAINER (frame_sig), hbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
+
+ hbox2 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox2);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
+
+ label_sigsep = gtk_label_new (_("Signature separator"));
+ gtk_widget_show (label_sigsep);
+ gtk_box_pack_start (GTK_BOX (hbox2), label_sigsep, FALSE, FALSE, 0);
+
+ entry_sigsep = gtk_entry_new ();
+ gtk_widget_show (entry_sigsep);
+ gtk_box_pack_start (GTK_BOX (hbox2), entry_sigsep, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (entry_sigsep, 64, -1);
+
+ PACK_CHECK_BUTTON (hbox1, checkbtn_autosig, _("Insert automatically"));
+
+ PACK_FRAME (vbox1, frame_editor, _("Editor"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame_editor), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
+ _("Automatically launch the external editor"));
+
+ PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
+
+ /* undo */
+
+ hbox3 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox3);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox3, FALSE, FALSE, 0);
+
+ label_undolevel = gtk_label_new (_("Undo level"));
+ gtk_widget_show (label_undolevel);
+ gtk_box_pack_start (GTK_BOX (hbox3), label_undolevel, FALSE, FALSE, 0);
+
+ spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
+ spinbtn_undolevel = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
+ gtk_widget_show (spinbtn_undolevel);
+ gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_undolevel, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
+
+ PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
+
+ /* line-wrapping */
+
+ hbox3 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox3);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox3, FALSE, FALSE, 0);
+
+ label_linewrap = gtk_label_new (_("Wrap messages at"));
+ gtk_widget_show (label_linewrap);
+ gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
+
+ spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
+ spinbtn_linewrap = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
+ gtk_widget_show (spinbtn_linewrap);
+ gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_linewrap, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
+
+ label_linewrap = gtk_label_new (_("characters"));
+ gtk_widget_show (label_linewrap);
+ gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
+
+ PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox4 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox4);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox4, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
+
+ hbox4 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox4);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox4, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
+ PACK_CHECK_BUTTON
+ (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
+
+ PACK_FRAME(vbox1, frame_reply, _("Reply"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame_reply), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_reply_account_autosel,
+ _("Automatically select account for replies"));
+ PACK_CHECK_BUTTON (vbox2, checkbtn_quote,
+ _("Quote message when replying"));
+ PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
+ _("Reply button invokes mailing list reply"));
+
+ compose.checkbtn_autosig = checkbtn_autosig;
+ compose.entry_sigsep = entry_sigsep;
+
+ compose.checkbtn_autoextedit = checkbtn_autoextedit;
+
+ compose.spinbtn_undolevel = spinbtn_undolevel;
+ compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
+
+ compose.spinbtn_linewrap = spinbtn_linewrap;
+ compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
+ compose.checkbtn_wrapquote = checkbtn_wrapquote;
+ compose.checkbtn_autowrap = checkbtn_autowrap;
+ compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
+
+ compose.checkbtn_quote = checkbtn_quote;
+ compose.checkbtn_reply_account_autosel =
+ checkbtn_reply_account_autosel;
+ compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
+}
+
+static void prefs_quote_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *frame_quote;
+ GtkWidget *vbox_quote;
+ GtkWidget *hbox1;
+ GtkWidget *hbox2;
+ GtkWidget *label_quotemark;
+ GtkWidget *entry_quotemark;
+ GtkWidget *scrolledwin_quotefmt;
+ GtkWidget *text_quotefmt;
+
+ GtkWidget *entry_fw_quotemark;
+ GtkWidget *text_fw_quotefmt;
+
+ GtkWidget *btn_quotedesc;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ /* reply */
+
+ PACK_FRAME (vbox1, frame_quote, _("Reply format"));
+
+ vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox_quote);
+ gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox2);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
+
+ label_quotemark = gtk_label_new (_("Quotation mark"));
+ gtk_widget_show (label_quotemark);
+ gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
+
+ entry_quotemark = gtk_entry_new ();
+ gtk_widget_show (entry_quotemark);
+ gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (entry_quotemark, 64, -1);
+
+ scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwin_quotefmt);
+ gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy
+ (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+ text_quotefmt = gtk_text_view_new ();
+ gtk_widget_show (text_quotefmt);
+ gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
+ gtk_widget_set_size_request(text_quotefmt, -1, 60);
+
+ /* forward */
+
+ PACK_FRAME (vbox1, frame_quote, _("Forward format"));
+
+ vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
+ gtk_widget_show (vbox_quote);
+ gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
+
+ hbox2 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox2);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
+
+ label_quotemark = gtk_label_new (_("Quotation mark"));
+ gtk_widget_show (label_quotemark);
+ gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
+
+ entry_fw_quotemark = gtk_entry_new ();
+ gtk_widget_show (entry_fw_quotemark);
+ gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
+
+ scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwin_quotefmt);
+ gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy
+ (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+ text_fw_quotefmt = gtk_text_view_new ();
+ gtk_widget_show (text_fw_quotefmt);
+ gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
+ text_fw_quotefmt);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
+ gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ btn_quotedesc =
+ gtk_button_new_with_label (_(" Description of symbols "));
+ gtk_widget_show (btn_quotedesc);
+ gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
+ G_CALLBACK(prefs_quote_description), NULL);
+
+ quote.entry_quotemark = entry_quotemark;
+ quote.text_quotefmt = text_quotefmt;
+ quote.entry_fw_quotemark = entry_fw_quotemark;
+ quote.text_fw_quotefmt = text_fw_quotefmt;
+}
+
+static void prefs_display_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *frame_font;
+ GtkWidget *table1;
+ GtkWidget *label_textfont;
+ GtkWidget *entry_textfont;
+ GtkWidget *button_textfont;
+ GtkWidget *chkbtn_transhdr;
+ GtkWidget *chkbtn_folder_unread;
+ GtkWidget *hbox1;
+ GtkWidget *label_ng_abbrev;
+ GtkWidget *spinbtn_ng_abbrev_len;
+ GtkObject *spinbtn_ng_abbrev_len_adj;
+ GtkWidget *frame_summary;
+ GtkWidget *vbox2;
+ GtkWidget *chkbtn_swapfrom;
+ GtkWidget *chkbtn_expand_thread;
+ GtkWidget *vbox3;
+ GtkWidget *label_datefmt;
+ GtkWidget *button_datefmt;
+ GtkWidget *entry_datefmt;
+ GtkWidget *button_dispitem;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME(vbox1, frame_font, _("Font"));
+
+ table1 = gtk_table_new (1, 3, FALSE);
+ gtk_widget_show (table1);
+ gtk_container_add (GTK_CONTAINER (frame_font), table1);
+ gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ label_textfont = gtk_label_new (_("Text"));
+ gtk_widget_show (label_textfont);
+ gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
+ GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
+
+ entry_textfont = gtk_entry_new ();
+ gtk_widget_show (entry_textfont);
+ gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+
+ button_textfont = gtk_button_new_with_label ("... ");
+ gtk_widget_show (button_textfont);
+ gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
+ 0, 0, 0, 0);
+ g_signal_connect (G_OBJECT (button_textfont), "clicked",
+ G_CALLBACK (prefs_font_select), NULL);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
+
+ PACK_CHECK_BUTTON
+ (vbox2, chkbtn_transhdr,
+ _("Translate header name (such as `From:', `Subject:')"));
+
+ PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
+ _("Display unread number next to folder name"));
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ label_ng_abbrev = gtk_label_new
+ (_("Abbreviate newsgroups longer than"));
+ gtk_widget_show (label_ng_abbrev);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
+
+ spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
+ spinbtn_ng_abbrev_len = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
+ gtk_widget_show (spinbtn_ng_abbrev_len);
+ gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
+ TRUE);
+
+ label_ng_abbrev = gtk_label_new
+ (_("letters"));
+ gtk_widget_show (label_ng_abbrev);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
+
+ /* ---- Summary ---- */
+
+ PACK_FRAME(vbox1, frame_summary, _("Summary View"));
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+ PACK_CHECK_BUTTON
+ (vbox2, chkbtn_swapfrom,
+ _("Display recipient on `From' column if sender is yourself"));
+ PACK_CHECK_BUTTON
+ (vbox2, chkbtn_expand_thread, _("Expand threads"));
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ label_datefmt = gtk_label_new (_("Date format"));
+ gtk_widget_show (label_datefmt);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
+
+ entry_datefmt = gtk_entry_new ();
+ gtk_widget_show (entry_datefmt);
+ gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
+
+ button_datefmt = gtk_button_new_with_label ("... ");
+ gtk_widget_show (button_datefmt);
+ gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (button_datefmt), "clicked",
+ G_CALLBACK (date_format_create), NULL);
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ button_dispitem = gtk_button_new_with_label
+ (_(" Set display item of summary... "));
+ gtk_widget_show (button_dispitem);
+ gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (button_dispitem), "clicked",
+ G_CALLBACK (prefs_summary_column_open), NULL);
+
+ display.entry_textfont = entry_textfont;
+ display.button_textfont = button_textfont;
+
+ display.chkbtn_transhdr = chkbtn_transhdr;
+ display.chkbtn_folder_unread = chkbtn_folder_unread;
+ display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
+ display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
+
+ display.chkbtn_swapfrom = chkbtn_swapfrom;
+ display.chkbtn_expand_thread = chkbtn_expand_thread;
+ display.entry_datefmt = entry_datefmt;
+}
+
+static void prefs_message_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *vbox3;
+ GtkWidget *hbox1;
+ GtkWidget *chkbtn_enablecol;
+ GtkWidget *button_edit_col;
+ GtkWidget *chkbtn_mbalnum;
+ GtkWidget *chkbtn_disphdrpane;
+ GtkWidget *chkbtn_disphdr;
+ GtkWidget *button_edit_disphdr;
+ GtkWidget *hbox_linespc;
+ GtkWidget *label_linespc;
+ GtkObject *spinbtn_linespc_adj;
+ GtkWidget *spinbtn_linespc;
+ GtkWidget *chkbtn_headspc;
+
+ GtkWidget *frame_scr;
+ GtkWidget *vbox_scr;
+ GtkWidget *chkbtn_smoothscroll;
+ GtkWidget *hbox_scr;
+ GtkWidget *label_scr;
+ GtkObject *spinbtn_scrollstep_adj;
+ GtkWidget *spinbtn_scrollstep;
+ GtkWidget *chkbtn_halfpage;
+
+ GtkWidget *chkbtn_resize_image;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
+ _("Enable coloration of message"));
+ g_signal_connect(G_OBJECT(chkbtn_enablecol), "toggled",
+ G_CALLBACK(prefs_enable_message_color_toggled), NULL);
+
+ button_edit_col = gtk_button_new_with_label (_(" Edit... "));
+ gtk_widget_show (button_edit_col);
+ gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (button_edit_col), "clicked",
+ G_CALLBACK (prefs_quote_colors_dialog), NULL);
+
+ SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
+
+ PACK_CHECK_BUTTON
+ (vbox2, chkbtn_mbalnum,
+ _("Display multi-byte alphabet and numeric as\n"
+ "ASCII character (Japanese only)"));
+ gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
+ GTK_JUSTIFY_LEFT);
+
+ PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
+ _("Display header pane above message view"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
+ _("Display short headers on message view"));
+
+ button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
+ gtk_widget_show (button_edit_disphdr);
+ gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
+ FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
+ G_CALLBACK (prefs_display_header_open), NULL);
+
+ SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
+
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ hbox_linespc = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
+
+ label_linespc = gtk_label_new (_("Line space"));
+ gtk_widget_show (label_linespc);
+ gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
+ FALSE, FALSE, 0);
+
+ spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
+ spinbtn_linespc = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
+ gtk_widget_show (spinbtn_linespc);
+ gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
+
+ label_linespc = gtk_label_new (_("pixel(s)"));
+ gtk_widget_show (label_linespc);
+ gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
+ FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
+
+ PACK_FRAME(vbox1, frame_scr, _("Scroll"));
+
+ vbox_scr = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox_scr);
+ gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
+
+ PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
+
+ PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
+
+ hbox_scr = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox_scr);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
+
+ label_scr = gtk_label_new (_("Step"));
+ gtk_widget_show (label_scr);
+ gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
+
+ spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
+ spinbtn_scrollstep = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
+ gtk_widget_show (spinbtn_scrollstep);
+ gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
+ TRUE);
+
+ label_scr = gtk_label_new (_("pixel(s)"));
+ gtk_widget_show (label_scr);
+ gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
+
+ SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
+
+ PACK_CHECK_BUTTON(vbox1, chkbtn_resize_image,
+ _("Resize attached large images to fit in the window"));
+
+ message.chkbtn_enablecol = chkbtn_enablecol;
+ message.button_edit_col = button_edit_col;
+ message.chkbtn_mbalnum = chkbtn_mbalnum;
+ message.chkbtn_disphdrpane = chkbtn_disphdrpane;
+ message.chkbtn_disphdr = chkbtn_disphdr;
+ message.spinbtn_linespc = spinbtn_linespc;
+ message.chkbtn_headspc = chkbtn_headspc;
+
+ message.chkbtn_smoothscroll = chkbtn_smoothscroll;
+ message.spinbtn_scrollstep = spinbtn_scrollstep;
+ message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
+ message.chkbtn_halfpage = chkbtn_halfpage;
+
+ message.chkbtn_resize_image = chkbtn_resize_image;
+}
+
+#if USE_GPGME
+static void prefs_privacy_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *vbox3;
+ GtkWidget *hbox1;
+ GtkWidget *hbox_spc;
+ GtkWidget *label;
+ GtkWidget *checkbtn_auto_check_signatures;
+ GtkWidget *checkbtn_gpg_signature_popup;
+ GtkWidget *checkbtn_store_passphrase;
+ GtkObject *spinbtn_store_passphrase_adj;
+ GtkWidget *spinbtn_store_passphrase;
+ GtkWidget *checkbtn_passphrase_grab;
+ GtkWidget *checkbtn_gpg_warning;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
+ _("Automatically check signatures"));
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
+ _("Show signature check result in a popup window"));
+
+ PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
+ _("Store passphrase in memory temporarily"));
+
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox3);
+ gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ label = gtk_label_new (_("Expired after"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
+ spinbtn_store_passphrase = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
+ gtk_widget_show (spinbtn_store_passphrase);
+ gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
+ TRUE);
+ gtk_widget_set_size_request (spinbtn_store_passphrase, 64, -1);
+
+ label = gtk_label_new (_("minute(s) "));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
+
+ hbox_spc = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox_spc);
+ gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (hbox_spc, 12, -1);
+
+ label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
+ " for the whole session)"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
+
+#ifndef __MINGW32__
+ PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
+ _("Grab input while entering a passphrase"));
+#endif
+
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_gpg_warning,
+ _("Display warning on startup if GnuPG doesn't work"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ privacy.checkbtn_auto_check_signatures
+ = checkbtn_auto_check_signatures;
+ privacy.checkbtn_gpg_signature_popup
+ = checkbtn_gpg_signature_popup;
+ privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
+ privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
+ privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
+ privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
+ privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
+}
+#endif /* USE_GPGME */
+
+static void prefs_interface_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *vbox2;
+ GtkWidget *vbox3;
+ GtkWidget *checkbtn_always_show_msg;
+ GtkWidget *checkbtn_openunread;
+ GtkWidget *checkbtn_mark_as_read_on_newwin;
+ GtkWidget *checkbtn_openinbox;
+ GtkWidget *checkbtn_immedexec;
+ GtkWidget *frame_recv;
+ GtkWidget *vbox_recv;
+ GtkWidget *hbox1;
+ GtkWidget *label;
+ GtkWidget *optmenu_recvdialog;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkWidget *checkbtn_no_recv_err_panel;
+ GtkWidget *checkbtn_close_recv_dialog;
+
+ GtkWidget *button_keybind;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_always_show_msg,
+ _("Always open messages in summary when selected"));
+
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_openunread,
+ _("Open first unread message when entering a folder"));
+
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_mark_as_read_on_newwin,
+ _("Only mark message as read when opened in new window"));
+
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_openinbox,
+ _("Go to inbox after receiving new mail"));
+
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox3);
+ gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON
+ (vbox3, checkbtn_immedexec,
+ _("Execute immediately when moving or deleting messages"));
+
+ hbox1 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new
+ (_("(Messages will be marked until execution\n"
+ " if this is turned off)"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ PACK_FRAME (vbox1, frame_recv, _("Receive dialog"));
+ vbox_recv = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox_recv);
+ gtk_container_add (GTK_CONTAINER (frame_recv), vbox_recv);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_recv), 8);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_recv), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Show receive dialog"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+
+ optmenu_recvdialog = gtk_option_menu_new ();
+ gtk_widget_show (optmenu_recvdialog);
+ gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
+ FALSE, FALSE, 0);
+
+ menu = gtk_menu_new ();
+ MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
+ MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
+ RECV_DIALOG_MANUAL);
+ MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
+
+ PACK_CHECK_BUTTON (vbox_recv, checkbtn_no_recv_err_panel,
+ _("Don't popup error dialog on receive error"));
+
+ PACK_CHECK_BUTTON (vbox_recv, checkbtn_close_recv_dialog,
+ _("Close receive dialog when finished"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
+ gtk_widget_show (button_keybind);
+ gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (button_keybind), "clicked",
+ G_CALLBACK (prefs_keybind_select), NULL);
+
+ interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
+ interface.checkbtn_openunread = checkbtn_openunread;
+ interface.checkbtn_mark_as_read_on_newwin
+ = checkbtn_mark_as_read_on_newwin;
+ interface.checkbtn_openinbox = checkbtn_openinbox;
+ interface.checkbtn_immedexec = checkbtn_immedexec;
+ interface.optmenu_recvdialog = optmenu_recvdialog;
+ interface.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
+ interface.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
+}
+
+static void prefs_other_create(void)
+{
+ GtkWidget *vbox1;
+ GtkWidget *ext_frame;
+ GtkWidget *ext_table;
+ GtkWidget *hbox1;
+
+ GtkWidget *uri_label;
+ GtkWidget *uri_combo;
+ GtkWidget *uri_entry;
+
+ GtkWidget *printcmd_label;
+ GtkWidget *printcmd_entry;
+
+ GtkWidget *exteditor_label;
+ GtkWidget *exteditor_combo;
+ GtkWidget *exteditor_entry;
+
+ GtkWidget *frame_addr;
+ GtkWidget *vbox_addr;
+ GtkWidget *checkbtn_addaddrbyclick;
+
+ GtkWidget *frame_exit;
+ GtkWidget *vbox_exit;
+ GtkWidget *checkbtn_confonexit;
+ GtkWidget *checkbtn_cleanonexit;
+ GtkWidget *checkbtn_askonclean;
+ GtkWidget *checkbtn_warnqueued;
+
+ GtkWidget *label_iotimeout;
+ GtkWidget *spinbtn_iotimeout;
+ GtkObject *spinbtn_iotimeout_adj;
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
+
+ PACK_FRAME(vbox1, ext_frame,
+ _("External commands (%s will be replaced with file name / URI)"));
+
+ ext_table = gtk_table_new (3, 2, FALSE);
+ gtk_widget_show (ext_table);
+ gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
+ gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
+ gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
+
+ uri_label = gtk_label_new (_("Web browser"));
+ gtk_widget_show(uri_label);
+ gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
+
+ uri_combo = gtk_combo_new ();
+ gtk_widget_show (uri_combo);
+ gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtkut_combo_set_items (GTK_COMBO (uri_combo),
+ DEFAULT_BROWSER_CMD,
+ "mozilla-firefox '%s'",
+ "mozilla -remote 'openURL(%s,new-window)'",
+ "mozilla '%s'",
+ "netscape -remote 'openURL(%s,new-window)'",
+ "netscape '%s'",
+ "gnome-moz-remote --newwin '%s'",
+ "rxvt -e w3m '%s'",
+ "rxvt -e lynx '%s'",
+ NULL);
+ uri_entry = GTK_COMBO (uri_combo)->entry;
+
+ printcmd_label = gtk_label_new (_("Print"));
+ gtk_widget_show (printcmd_label);
+ gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
+
+ printcmd_entry = gtk_entry_new ();
+ gtk_widget_show (printcmd_entry);
+ gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ exteditor_label = gtk_label_new (_("Editor"));
+ gtk_widget_show (exteditor_label);
+ gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
+
+ exteditor_combo = gtk_combo_new ();
+ gtk_widget_show (exteditor_combo);
+ gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
+ "gedit %s",
+ "kedit %s",
+ "mgedit --no-fork %s",
+ "emacs %s",
+ "xemacs %s",
+ "kterm -e jed %s",
+ "kterm -e vi %s",
+ NULL);
+ exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
+
+ PACK_FRAME (vbox1, frame_addr, _("Address book"));
+
+ vbox_addr = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox_addr);
+ gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
+
+ PACK_CHECK_BUTTON
+ (vbox_addr, checkbtn_addaddrbyclick,
+ _("Add address to destination when double-clicked"));
+
+ PACK_FRAME (vbox1, frame_exit, _("On exit"));
+
+ vbox_exit = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox_exit);
+ gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
+
+ PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
+ _("Confirm on exit"));
+
+ hbox1 = gtk_hbox_new (FALSE, 32);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
+ _("Empty trash on exit"));
+ PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
+ _("Ask before emptying"));
+ SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
+
+ PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
+ _("Warn if there are queued messages"));
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
+ gtk_widget_show (label_iotimeout);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
+
+ spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
+ spinbtn_iotimeout = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
+ gtk_widget_show (spinbtn_iotimeout);
+ gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
+ FALSE, FALSE, 0);
+ gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
+
+ label_iotimeout = gtk_label_new (_("second(s)"));
+ gtk_widget_show (label_iotimeout);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
+
+ other.uri_combo = uri_combo;
+ other.uri_entry = uri_entry;
+ other.printcmd_entry = printcmd_entry;
+
+ other.exteditor_combo = exteditor_combo;
+ other.exteditor_entry = exteditor_entry;
+
+ other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
+
+ other.checkbtn_confonexit = checkbtn_confonexit;
+ other.checkbtn_cleanonexit = checkbtn_cleanonexit;
+ other.checkbtn_askonclean = checkbtn_askonclean;
+ other.checkbtn_warnqueued = checkbtn_warnqueued;
+
+ other.spinbtn_iotimeout = spinbtn_iotimeout;
+ other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
+}
+
+static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
+{
+ GtkWidget *datefmt_sample = NULL;
+ gchar *text;
+
+ g_return_if_fail(widget != NULL);
+ g_return_if_fail(*widget != NULL);
+ g_return_if_fail(display.entry_datefmt != NULL);
+
+ datefmt_sample = GTK_WIDGET(g_object_get_data
+ (G_OBJECT(*widget), "datefmt_sample"));
+ g_return_if_fail(datefmt_sample != NULL);
+
+ text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
+ g_free(prefs_common.date_format);
+ prefs_common.date_format = text;
+ gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
+
+ gtk_widget_destroy(*widget);
+ *widget = NULL;
+}
+
+static void date_format_cancel_btn_clicked(GtkButton *button,
+ GtkWidget **widget)
+{
+ g_return_if_fail(widget != NULL);
+ g_return_if_fail(*widget != NULL);
+
+ gtk_widget_destroy(*widget);
+ *widget = NULL;
+}
+
+static gboolean date_format_key_pressed(GtkWidget *keywidget,
+ GdkEventKey *event,
+ GtkWidget **widget)
+{
+ if (event && event->keyval == GDK_Escape)
+ date_format_cancel_btn_clicked(NULL, widget);
+ return FALSE;
+}
+
+static gboolean date_format_on_delete(GtkWidget *dialogwidget,
+ GdkEventAny *event, GtkWidget **widget)
+{
+ g_return_val_if_fail(widget != NULL, FALSE);
+ g_return_val_if_fail(*widget != NULL, FALSE);
+
+ *widget = NULL;
+ return FALSE;
+}
+
+static void date_format_entry_on_change(GtkEditable *editable,
+ GtkLabel *example)
+{
+ time_t cur_time;
+ struct tm *cal_time;
+ gchar buffer[100];
+ gchar *text;
+
+ cur_time = time(NULL);
+ cal_time = localtime(&cur_time);
+ buffer[0] = 0;
+ text = gtk_editable_get_chars(editable, 0, -1);
+ if (text)
+ strftime(buffer, sizeof buffer, text, cal_time);
+ g_free(text);
+
+ text = conv_codeset_strdup(buffer, conv_get_locale_charset_str(),
+ CS_UTF_8);
+ if (!text)
+ text = g_strdup(buffer);
+ gtk_label_set_text(example, text);
+ g_free(text);
+}
+
+static void date_format_select_row(GtkWidget *date_format_list, gint row,
+ gint column, GdkEventButton *event,
+ GtkWidget *date_format)
+{
+ gint cur_pos;
+ gchar *format;
+ const gchar *old_format;
+ gchar *new_format;
+ GtkWidget *datefmt_sample;
+
+ /* only on double click */
+ if (!event || event->type != GDK_2BUTTON_PRESS) return;
+
+ datefmt_sample = GTK_WIDGET(g_object_get_data
+ (G_OBJECT(date_format), "datefmt_sample"));
+
+ g_return_if_fail(date_format_list != NULL);
+ g_return_if_fail(date_format != NULL);
+ g_return_if_fail(datefmt_sample != NULL);
+
+ /* get format from clist */
+ gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
+
+ cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
+ old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
+
+ /* insert the format into the text entry */
+ new_format = g_malloc(strlen(old_format) + 3);
+
+ strncpy(new_format, old_format, cur_pos);
+ new_format[cur_pos] = '\0';
+ strcat(new_format, format);
+ strcat(new_format, &old_format[cur_pos]);
+
+ gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
+ gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
+
+ g_free(new_format);
+}
+
+static GtkWidget *date_format_create(GtkButton *button, void *data)
+{
+ static GtkWidget *datefmt_win = NULL;
+ GtkWidget *vbox1;
+ GtkWidget *scrolledwindow1;
+ GtkWidget *datefmt_clist;
+ GtkWidget *table;
+ GtkWidget *label1;
+ GtkWidget *label2;
+ GtkWidget *label3;
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *datefmt_entry;
+
+ struct {
+ gchar *fmt;
+ gchar *txt;
+ } time_format[] = {
+ { "%a", NULL },
+ { "%A", NULL },
+ { "%b", NULL },
+ { "%B", NULL },
+ { "%c", NULL },
+ { "%C", NULL },
+ { "%d", NULL },
+ { "%H", NULL },
+ { "%I", NULL },
+ { "%j", NULL },
+ { "%m", NULL },
+ { "%M", NULL },
+ { "%p", NULL },
+ { "%S", NULL },
+ { "%w", NULL },
+ { "%x", NULL },
+ { "%y", NULL },
+ { "%Y", NULL },
+ { "%Z", NULL }
+ };
+
+ gchar *titles[2];
+ gint i;
+ const gint TIME_FORMAT_ELEMS =
+ sizeof time_format / sizeof time_format[0];
+
+ time_format[0].txt = _("the full abbreviated weekday name");
+ time_format[1].txt = _("the full weekday name");
+ time_format[2].txt = _("the abbreviated month name");
+ time_format[3].txt = _("the full month name");
+ time_format[4].txt = _("the preferred date and time for the current locale");
+ time_format[5].txt = _("the century number (year/100)");
+ time_format[6].txt = _("the day of the month as a decimal number");
+ time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
+ time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
+ time_format[9].txt = _("the day of the year as a decimal number");
+ time_format[10].txt = _("the month as a decimal number");
+ time_format[11].txt = _("the minute as a decimal number");
+ time_format[12].txt = _("either AM or PM");
+ time_format[13].txt = _("the second as a decimal number");
+ time_format[14].txt = _("the day of the week as a decimal number");
+ time_format[15].txt = _("the preferred date for the current locale");
+ time_format[16].txt = _("the last two digits of a year");
+ time_format[17].txt = _("the year as a decimal number");
+ time_format[18].txt = _("the time zone or name or abbreviation");
+
+ if (datefmt_win) return datefmt_win;
+
+ datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
+ gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
+ gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
+ gtk_widget_set_size_request(datefmt_win, 440, 280);
+
+ vbox1 = gtk_vbox_new(FALSE, 10);
+ gtk_widget_show(vbox1);
+ gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
+
+ scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy
+ (GTK_SCROLLED_WINDOW(scrolledwindow1),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_widget_show(scrolledwindow1);
+ gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
+
+ titles[0] = _("Specifier");
+ titles[1] = _("Description");
+ datefmt_clist = gtk_clist_new_with_titles(2, titles);
+ gtk_widget_show(datefmt_clist);
+ gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
+ /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
+ gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
+ GTK_SELECTION_BROWSE);
+
+ for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
+ gchar *text[2];
+ /* phoney casting necessary because of gtk... */
+ text[0] = (gchar *)time_format[i].fmt;
+ text[1] = (gchar *)time_format[i].txt;
+ gtk_clist_append(GTK_CLIST(datefmt_clist), text);
+ }
+
+ table = gtk_table_new(2, 2, FALSE);
+ gtk_widget_show(table);
+ gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ label1 = gtk_label_new(_("Date format"));
+ gtk_widget_show(label1);
+ gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
+
+ datefmt_entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
+ gtk_widget_show(datefmt_entry);
+ gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+
+ /* we need the "sample" entry box; add it as data so callbacks can
+ * get the entry box */
+ g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
+ datefmt_entry);
+
+ label2 = gtk_label_new(_("Example"));
+ gtk_widget_show(label2);
+ gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
+
+ label3 = gtk_label_new("");
+ gtk_widget_show(label3);
+ gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+
+ gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_show(confirm_area);
+ gtk_widget_grab_default(ok_btn);
+
+ /* set the current format */
+ gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
+ date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
+ GTK_LABEL(label3));
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(date_format_ok_btn_clicked), &datefmt_win);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(date_format_cancel_btn_clicked),
+ &datefmt_win);
+ g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
+ G_CALLBACK(date_format_key_pressed), &datefmt_win);
+ g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
+ G_CALLBACK(date_format_on_delete), &datefmt_win);
+ g_signal_connect(G_OBJECT(datefmt_entry), "changed",
+ G_CALLBACK(date_format_entry_on_change), label3);
+ g_signal_connect(G_OBJECT(datefmt_clist), "select_row",
+ G_CALLBACK(date_format_select_row), datefmt_win);
+
+ gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
+
+ gtk_widget_show(datefmt_win);
+ manage_window_set_transient(GTK_WINDOW(datefmt_win));
+
+ gtk_widget_grab_focus(ok_btn);
+
+ return datefmt_win;
+}
+
+void prefs_quote_colors_dialog(void)
+{
+ if (!quote_color_win)
+ prefs_quote_colors_dialog_create();
+ gtk_widget_show(quote_color_win);
+ manage_window_set_transient(GTK_WINDOW(quote_color_win));
+
+ gtk_main();
+ gtk_widget_hide(quote_color_win);
+
+ textview_update_message_colors();
+ main_window_reflect_prefs_all();
+}
+
+static void prefs_quote_colors_dialog_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *quotelevel1_label;
+ GtkWidget *quotelevel2_label;
+ GtkWidget *quotelevel3_label;
+ GtkWidget *uri_label;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+ GtkWidget *recycle_colors_btn;
+ GtkWidget *frame_colors;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 2);
+ gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
+
+ vbox = gtk_vbox_new (FALSE, VSPACING);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+ PACK_FRAME(vbox, frame_colors, _("Colors"));
+
+ table = gtk_table_new (4, 2, FALSE);
+ gtk_container_add (GTK_CONTAINER (frame_colors), table);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 2);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+
+ color_buttons.quote_level1_btn = gtk_button_new();
+ gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
+ 0, 1, 0, 1, 0, 0, 0, 0);
+ gtk_widget_set_size_request (color_buttons.quote_level1_btn, 40, 30);
+ gtk_container_set_border_width
+ (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
+
+ color_buttons.quote_level2_btn = gtk_button_new();
+ gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
+ 0, 1, 1, 2, 0, 0, 0, 0);
+ gtk_widget_set_size_request (color_buttons.quote_level2_btn, 40, 30);
+ gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
+
+ color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
+ gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
+ 0, 1, 2, 3, 0, 0, 0, 0);
+ gtk_widget_set_size_request (color_buttons.quote_level3_btn, 40, 30);
+ gtk_container_set_border_width
+ (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
+
+ color_buttons.uri_btn = gtk_button_new_with_label ("");
+ gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
+ 0, 1, 3, 4, 0, 0, 0, 0);
+ gtk_widget_set_size_request (color_buttons.uri_btn, 40, 30);
+ gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
+
+ quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
+ gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
+
+ quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
+ gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
+
+ quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
+ gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
+
+ uri_label = gtk_label_new (_("URI link"));
+ gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
+
+ PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
+ _("Recycle quote colors"));
+
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ NULL, NULL, NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+
+ gtk_widget_grab_default(ok_btn);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(gtk_main_quit), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_quote_colors_key_pressed), NULL);
+
+ g_signal_connect(G_OBJECT(color_buttons.quote_level1_btn), "clicked",
+ G_CALLBACK(quote_color_set_dialog), "LEVEL1");
+ g_signal_connect(G_OBJECT(color_buttons.quote_level2_btn), "clicked",
+ G_CALLBACK(quote_color_set_dialog), "LEVEL2");
+ g_signal_connect(G_OBJECT(color_buttons.quote_level3_btn), "clicked",
+ G_CALLBACK(quote_color_set_dialog), "LEVEL3");
+ g_signal_connect(G_OBJECT(color_buttons.uri_btn), "clicked",
+ G_CALLBACK(quote_color_set_dialog), "URI");
+ g_signal_connect(G_OBJECT(recycle_colors_btn), "toggled",
+ G_CALLBACK(prefs_recycle_colors_toggled), NULL);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(gtk_main_quit), NULL);
+
+ /* show message button colors and recycle options */
+ set_button_bg_color(color_buttons.quote_level1_btn,
+ prefs_common.quote_level1_col);
+ set_button_bg_color(color_buttons.quote_level2_btn,
+ prefs_common.quote_level2_col);
+ set_button_bg_color(color_buttons.quote_level3_btn,
+ prefs_common.quote_level3_col);
+ set_button_bg_color(color_buttons.uri_btn,
+ prefs_common.uri_col);
+ gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
+ prefs_common.recycle_quote_colors);
+
+ gtk_widget_show_all(vbox);
+ quote_color_win = window;
+}
+
+static gboolean prefs_quote_colors_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_main_quit();
+ return FALSE;
+}
+
+static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
+{
+ gchar *type = (gchar *)data;
+ gchar *title = NULL;
+ gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
+ gint rgbvalue = 0;
+ GtkColorSelectionDialog *dialog;
+
+ if(g_strcasecmp(type, "LEVEL1") == 0) {
+ title = _("Pick color for quotation level 1");
+ rgbvalue = prefs_common.quote_level1_col;
+ } else if(g_strcasecmp(type, "LEVEL2") == 0) {
+ title = _("Pick color for quotation level 2");
+ rgbvalue = prefs_common.quote_level2_col;
+ } else if(g_strcasecmp(type, "LEVEL3") == 0) {
+ title = _("Pick color for quotation level 3");
+ rgbvalue = prefs_common.quote_level3_col;
+ } else if(g_strcasecmp(type, "URI") == 0) {
+ title = _("Pick color for URI");
+ rgbvalue = prefs_common.uri_col;
+ } else { /* Should never be called */
+ g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
+ return;
+ }
+
+ color_dialog = gtk_color_selection_dialog_new(title);
+ gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
+ manage_window_set_transient(GTK_WINDOW(color_dialog));
+
+ g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
+ "clicked", G_CALLBACK(quote_colors_set_dialog_ok), data);
+ g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
+ "clicked", G_CALLBACK(quote_colors_set_dialog_cancel), data);
+ g_signal_connect(G_OBJECT(color_dialog), "key_press_event",
+ G_CALLBACK(quote_colors_set_dialog_key_pressed), data);
+
+ /* preselect the previous color in the color selection dialog */
+ color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
+ color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
+ color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
+ dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
+ gtk_color_selection_set_color
+ (GTK_COLOR_SELECTION(dialog->colorsel), color);
+
+ gtk_widget_show(color_dialog);
+}
+
+static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
+{
+ GtkColorSelection *colorsel = (GtkColorSelection *)
+ ((GtkColorSelectionDialog *)color_dialog)->colorsel;
+ gdouble color[4];
+ gint red, green, blue, rgbvalue;
+ gchar *type = (gchar *)data;
+
+ gtk_color_selection_get_color(colorsel, color);
+
+ red = (gint) (color[0] * 255.0);
+ green = (gint) (color[1] * 255.0);
+ blue = (gint) (color[2] * 255.0);
+ rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
+
+#if 0
+ fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
+ fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
+ fprintf(stderr, "Color is %x\n", rgbvalue);
+#endif
+
+ if (g_strcasecmp(type, "LEVEL1") == 0) {
+ prefs_common.quote_level1_col = rgbvalue;
+ set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
+ } else if (g_strcasecmp(type, "LEVEL2") == 0) {
+ prefs_common.quote_level2_col = rgbvalue;
+ set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
+ } else if (g_strcasecmp(type, "LEVEL3") == 0) {
+ prefs_common.quote_level3_col = rgbvalue;
+ set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
+ } else if (g_strcasecmp(type, "URI") == 0) {
+ prefs_common.uri_col = rgbvalue;
+ set_button_bg_color(color_buttons.uri_btn, rgbvalue);
+ } else
+ fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
+
+ gtk_widget_destroy(color_dialog);
+}
+
+static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
+{
+ gtk_widget_destroy(color_dialog);
+}
+
+static gboolean quote_colors_set_dialog_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ gtk_widget_destroy(color_dialog);
+ return FALSE;
+}
+
+static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
+{
+ GtkStyle *newstyle;
+ GdkColor color;
+
+ gtkut_convert_int_to_gdk_color(rgbvalue, &color);
+ newstyle = gtk_style_copy(gtk_widget_get_default_style());
+ newstyle->bg[GTK_STATE_NORMAL] = color;
+ newstyle->bg[GTK_STATE_PRELIGHT] = color;
+ newstyle->bg[GTK_STATE_ACTIVE] = color;
+
+ gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
+}
+
+static void prefs_enable_message_color_toggled(void)
+{
+ gboolean is_active;
+
+ is_active = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
+ gtk_widget_set_sensitive(message.button_edit_col, is_active);
+ prefs_common.enable_color = is_active;
+}
+
+static void prefs_recycle_colors_toggled(GtkWidget *widget)
+{
+ gboolean is_active;
+
+ is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ prefs_common.recycle_quote_colors = is_active;
+}
+
+void prefs_quote_description(void)
+{
+ if (!quote_desc_win)
+ prefs_quote_description_create();
+
+ manage_window_set_transient(GTK_WINDOW(quote_desc_win));
+ gtk_widget_show(quote_desc_win);
+ gtk_main();
+ gtk_widget_hide(quote_desc_win);
+}
+
+static void prefs_quote_description_create(void)
+{
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *vbox2;
+ GtkWidget *label;
+ GtkWidget *hbbox;
+ GtkWidget *ok_btn;
+
+ quote_desc_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(quote_desc_win),
+ _("Description of symbols"));
+ gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
+ gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, FALSE, FALSE);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+
+ vbox2 = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
+
+#define PACK_LABEL() \
+ gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); \
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); \
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+
+ label = gtk_label_new
+ ("%d\n" /* date */
+ "%f\n" /* from */
+ "%N\n" /* full name of sender */
+ "%F\n" /* first name of sender */
+ "%I\n" /* initial of sender */
+ "%s\n" /* subject */
+ "%t\n" /* to */
+ "%c\n" /* cc */
+ "%n\n" /* newsgroups */
+ "%i"); /* message id */
+ PACK_LABEL();
+
+ label = gtk_label_new
+ ("?x{expr}"); /* condition */
+ PACK_LABEL();
+
+ label = gtk_label_new
+ ("%M\n" /* message body */
+ "%Q\n" /* quoted message body */
+ "%m\n" /* message body without signature */
+ "%q\n" /* quoted message body without signature */
+ "%%"); /* literal percent */
+ PACK_LABEL();
+
+ label = gtk_label_new
+ ("\\\\\n" /* literal backslash */
+ "\\?\n" /* literal question mark */
+ "\\{\n" /* literal opening curly brace */
+ "\\}"); /* literal closing curly brace */
+ PACK_LABEL();
+
+ vbox2 = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
+
+ label = gtk_label_new
+ (_("Date\n"
+ "From\n"
+ "Full Name of Sender\n"
+ "First Name of Sender\n"
+ "Initial of Sender\n"
+ "Subject\n"
+ "To\n"
+ "Cc\n"
+ "Newsgroups\n"
+ "Message-ID"));
+ PACK_LABEL();
+
+ label = gtk_label_new
+ (_("If x is set, displays expr"));
+ PACK_LABEL();
+
+ label = gtk_label_new
+ (_("Message body\n"
+ "Quoted message body\n"
+ "Message body without signature\n"
+ "Quoted message body without signature\n"
+ "Literal %"));
+ PACK_LABEL();
+
+ label = gtk_label_new
+ (_("Literal backslash\n"
+ "Literal question mark\n"
+ "Literal opening curly brace\n"
+ "Literal closing curly brace"));
+ PACK_LABEL();
+
+#undef PACK_LABEL
+
+ gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
+ NULL, NULL, NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+
+ gtk_widget_grab_default(ok_btn);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(gtk_main_quit), NULL);
+ g_signal_connect
+ (G_OBJECT(quote_desc_win), "key_press_event",
+ G_CALLBACK(prefs_quote_description_key_pressed), NULL);
+ g_signal_connect(G_OBJECT(quote_desc_win), "delete_event",
+ G_CALLBACK(gtk_main_quit), NULL);
+
+ gtk_widget_show_all(vbox);
+}
+
+static gboolean prefs_quote_description_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_main_quit();
+ return FALSE;
+}
+
+static void prefs_font_select(GtkButton *button)
+{
+ if (!font_sel_win) {
+ font_sel_win = gtk_font_selection_dialog_new
+ (_("Font selection"));
+ gtk_window_set_position(GTK_WINDOW(font_sel_win),
+ GTK_WIN_POS_CENTER);
+ g_signal_connect(G_OBJECT(font_sel_win), "delete_event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect
+ (G_OBJECT(font_sel_win), "key_press_event",
+ G_CALLBACK(prefs_font_selection_key_pressed), NULL);
+ g_signal_connect
+ (G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
+ "clicked",
+ G_CALLBACK(prefs_font_selection_ok), NULL);
+ g_signal_connect_closure
+ (G_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
+ "clicked",
+ g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide_on_delete),
+ font_sel_win, NULL),
+ FALSE);
+ }
+
+ manage_window_set_transient(GTK_WINDOW(font_sel_win));
+ gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
+ gtk_widget_grab_focus
+ (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
+ gtk_widget_show(font_sel_win);
+}
+
+static gboolean prefs_font_selection_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(font_sel_win);
+ return FALSE;
+}
+
+static void prefs_font_selection_ok(GtkButton *button)
+{
+ gchar *fontname;
+
+ fontname = gtk_font_selection_dialog_get_font_name
+ (GTK_FONT_SELECTION_DIALOG(font_sel_win));
+
+ if (fontname) {
+ gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
+ g_free(fontname);
+ }
+
+ gtk_widget_hide(font_sel_win);
+}
+
+static void prefs_keybind_select(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox1;
+ GtkWidget *hbox1;
+ GtkWidget *label;
+ GtkWidget *combo;
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
+ gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
+ manage_window_set_transient (GTK_WINDOW (window));
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_container_add (GTK_CONTAINER (window), vbox1);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ label = gtk_label_new
+ (_("Select the preset of key bindings.\n"
+ "You can also modify each menu's shortcuts by pressing\n"
+ "any key(s) when placing the mouse pointer on the item."));
+ gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ combo = gtk_combo_new ();
+ gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
+ gtkut_combo_set_items (GTK_COMBO (combo),
+ _("Default"),
+ "Mew / Wanderlust",
+ "Mutt",
+ _("Old Sylpheed"),
+ NULL);
+ gtk_editable_set_editable
+ (GTK_EDITABLE (GTK_COMBO (combo)->entry), FALSE);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+
+ gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default (ok_btn);
+
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ g_signal_connect (G_OBJECT (window), "delete_event",
+ G_CALLBACK (prefs_keybind_deleted), NULL);
+ g_signal_connect (G_OBJECT (window), "key_press_event",
+ G_CALLBACK (prefs_keybind_key_pressed), NULL);
+ g_signal_connect (G_OBJECT (ok_btn), "clicked",
+ G_CALLBACK (prefs_keybind_apply_clicked), NULL);
+ g_signal_connect (G_OBJECT (cancel_btn), "clicked",
+ G_CALLBACK (prefs_keybind_cancel), NULL);
+
+ gtk_widget_show_all(window);
+
+ keybind.window = window;
+ keybind.combo = combo;
+}
+
+static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_keybind_cancel();
+ return FALSE;
+}
+
+static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_keybind_cancel();
+ return TRUE;
+}
+
+static void prefs_keybind_cancel(void)
+{
+ gtk_widget_destroy(keybind.window);
+ keybind.window = NULL;
+ keybind.combo = NULL;
+}
+
+struct KeyBind {
+ const gchar *accel_path;
+ const gchar *accel_key;
+};
+
+static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
+{
+ gint i;
+ guint key;
+ GdkModifierType mods;
+
+ for (i = 0; i < num; i++) {
+ const gchar *accel_key =
+ keybind[i].accel_key ? keybind[i].accel_key : "";
+ gtk_accelerator_parse(accel_key, &key, &mods);
+ gtk_accel_map_change_entry(keybind[i].accel_path,
+ key, mods, TRUE);
+ }
+}
+
+static void prefs_keybind_apply_clicked(GtkWidget *widget)
+{
+ GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
+ const gchar *text;
+ struct KeyBind *menurc;
+ gint n_menurc;
+
+ static struct KeyBind default_menurc[] = {
+ {"<Main>/File/Empty all trash", ""},
+ {"<Main>/File/Save as...", "<control>S"},
+ {"<Main>/File/Print...", ""},
+ {"<Main>/File/Exit", "<control>Q"},
+
+ {"<Main>/Edit/Copy", "<control>C"},
+ {"<Main>/Edit/Select all", "<control>A"},
+ {"<Main>/Edit/Find in current message...", "<control>F"},
+ {"<Main>/Edit/Search messages...", "<shift><control>F"},
+
+ {"<Main>/View/Show or hide/Message view", "V"},
+ {"<Main>/View/Thread view", "<control>T"},
+ {"<Main>/View/Go to/Prev message", "P"},
+ {"<Main>/View/Go to/Next message", "N"},
+ {"<Main>/View/Go to/Prev unread message", "<shift>P"},
+ {"<Main>/View/Go to/Next unread message", "<shift>N"},
+ {"<Main>/View/Go to/Other folder...", "G"},
+ {"<Main>/View/Open in new window", "<control><alt>N"},
+ {"<Main>/View/View source", "<control>U"},
+ {"<Main>/View/Show all header", "<control>H"},
+ {"<Main>/View/Update", "<control><alt>U"},
+
+ {"<Main>/Message/Receive/Get new mail", "<control>I"},
+ {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
+ {"<Main>/Message/Compose new message", "<control>M"},
+ {"<Main>/Message/Reply", "<control>R"},
+ {"<Main>/Message/Reply to/all", "<shift><control>R"},
+ {"<Main>/Message/Reply to/sender", ""},
+ {"<Main>/Message/Reply to/mailing list", "<control>L"},
+ {"<Main>/Message/Forward", "<control><alt>F"},
+ {"<Main>/Message/Forward as attachment", ""},
+ {"<Main>/Message/Move...", "<control>O"},
+ {"<Main>/Message/Copy...", "<shift><control>O"},
+ {"<Main>/Message/Delete", "<control>D"},
+ {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
+ {"<Main>/Message/Mark/Unmark", "U"},
+ {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
+ {"<Main>/Message/Mark/Mark as read", ""},
+
+ {"<Main>/Tools/Address book", "<shift><control>A"},
+ {"<Main>/Tools/Execute", "X"},
+ {"<Main>/Tools/Log window", "<shift><control>L"},
+
+ {"<Compose>/File/Close", "<control>W"},
+ {"<Compose>/Edit/Select all", "<control>A"},
+ {"<Compose>/Edit/Advanced/Move a word backward", ""},
+ {"<Compose>/Edit/Advanced/Move a word forward", ""},
+ {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
+ {"<Compose>/Edit/Advanced/Delete a word backward", ""},
+ {"<Compose>/Edit/Advanced/Delete a word forward", ""},
+ };
+
+ static struct KeyBind mew_wl_menurc[] = {
+ {"<Main>/File/Empty all trash", "<shift>D"},
+ {"<Main>/File/Save as...", "Y"},
+ {"<Main>/File/Print...", "<shift>numbersign"},
+ {"<Main>/File/Exit", "<shift>Q"},
+
+ {"<Main>/Edit/Copy", "<control>C"},
+ {"<Main>/Edit/Select all", "<control>A"},
+ {"<Main>/Edit/Find in current message...", "<control>F"},
+ {"<Main>/Edit/Search messages...", "<control>S"},
+
+ {"<Main>/View/Show or hide/Message view", "V"},
+ {"<Main>/View/Thread view", "<shift>T"},
+ {"<Main>/View/Go to/Prev message", "P"},
+ {"<Main>/View/Go to/Next message", "N"},
+ {"<Main>/View/Go to/Prev unread message", "<shift>P"},
+ {"<Main>/View/Go to/Next unread message", "<shift>N"},
+ {"<Main>/View/Go to/Other folder...", "G"},
+ {"<Main>/View/Open in new window", "<control><alt>N"},
+ {"<Main>/View/View source", "<control>U"},
+ {"<Main>/View/Show all header", "<shift>H"},
+ {"<Main>/View/Update", "<shift>S"},
+
+ {"<Main>/Message/Receive/Get new mail", "<control>I"},
+ {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
+ {"<Main>/Message/Compose new message", "W"},
+ {"<Main>/Message/Reply", "<control>R"},
+ {"<Main>/Message/Reply to/all", "<shift>A"},
+ {"<Main>/Message/Reply to/sender", ""},
+ {"<Main>/Message/Reply to/mailing list", "<control>L"},
+ {"<Main>/Message/Forward", "F"},
+ {"<Main>/Message/Forward as attachment", "<shift>F"},
+ {"<Main>/Message/Move...", "O"},
+ {"<Main>/Message/Copy...", "<shift>O"},
+ {"<Main>/Message/Delete", "D"},
+ {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
+ {"<Main>/Message/Mark/Unmark", "U"},
+ {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
+ {"<Main>/Message/Mark/Mark as read", "<shift>R"},
+
+ {"<Main>/Tools/Address book", "<shift><control>A"},
+ {"<Main>/Tools/Execute", "X"},
+ {"<Main>/Tools/Log window", "<shift><control>L"},
+
+ {"<Compose>/File/Close", "<alt>W"},
+ {"<Compose>/Edit/Select all", ""},
+ {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
+ {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
+ {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
+ {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
+ {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
+ };
+
+ static struct KeyBind mutt_menurc[] = {
+ {"<Main>/File/Empty all trash", ""},
+ {"<Main>/File/Save as...", "S"},
+ {"<Main>/File/Print...", "P"},
+ {"<Main>/File/Exit", "Q"},
+
+ {"<Main>/Edit/Copy", "<control>C"},
+ {"<Main>/Edit/Select all", "<control>A"},
+ {"<Main>/Edit/Find in current message...", "<control>F"},
+ {"<Main>/Edit/Search messages...", "slash"},
+
+ {"<Main>/View/Show or hide/Message view", "V"},
+ {"<Main>/View/Thread view", "<control>T"},
+ {"<Main>/View/Go to/Prev message", ""},
+ {"<Main>/View/Go to/Next message", ""},
+ {"<Main>/View/Go to/Prev unread message", ""},
+ {"<Main>/View/Go to/Next unread message", ""},
+ {"<Main>/View/Go to/Other folder...", "C"},
+ {"<Main>/View/Open in new window", "<control><alt>N"},
+ {"<Main>/View/View source", "<control>U"},
+ {"<Main>/View/Show all header", "<control>H"},
+ {"<Main>/View/Update", "<control><alt>U"},
+
+ {"<Main>/Message/Receive/Get new mail", "<control>I"},
+ {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
+ {"<Main>/Message/Compose new message", "M"},
+ {"<Main>/Message/Reply", "R"},
+ {"<Main>/Message/Reply to/all", "G"},
+ {"<Main>/Message/Reply to/sender", ""},
+ {"<Main>/Message/Reply to/mailing list", "<control>L"},
+ {"<Main>/Message/Forward", "F"},
+ {"<Main>/Message/Forward as attachment", ""},
+ {"<Main>/Message/Move...", "<control>O"},
+ {"<Main>/Message/Copy...", "<shift>C"},
+ {"<Main>/Message/Delete", "D"},
+ {"<Main>/Message/Mark/Mark", "<shift>F"},
+ {"<Main>/Message/Mark/Unmark", "U"},
+ {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
+ {"<Main>/Message/Mark/Mark as read", ""},
+
+ {"<Main>/Tools/Address book", "<shift><control>A"},
+ {"<Main>/Tools/Execute", "X"},
+ {"<Main>/Tools/Log window", "<shift><control>L"},
+
+ {"<Compose>/File/Close", "<alt>W"},
+ {"<Compose>/Edit/Select all", ""},
+ {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
+ {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
+ {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
+ {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
+ {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
+ };
+
+ static struct KeyBind old_sylpheed_menurc[] = {
+ {"<Main>/File/Empty all trash", ""},
+ {"<Main>/File/Save as...", ""},
+ {"<Main>/File/Print...", "<alt>P"},
+ {"<Main>/File/Exit", "<alt>Q"},
+
+ {"<Main>/Edit/Copy", "<control>C"},
+ {"<Main>/Edit/Select all", "<control>A"},
+ {"<Main>/Edit/Find in current message...", "<control>F"},
+ {"<Main>/Edit/Search messages...", "<control>S"},
+
+ {"<Main>/View/Show or hide/Message view", "V"},
+ {"<Main>/View/Thread view", "<control>T"},
+ {"<Main>/View/Go to/Prev message", "P"},
+ {"<Main>/View/Go to/Next message", "N"},
+ {"<Main>/View/Go to/Prev unread message", "<shift>P"},
+ {"<Main>/View/Go to/Next unread message", "<shift>N"},
+ {"<Main>/View/Go to/Other folder...", "<alt>G"},
+ {"<Main>/View/Open in new window", "<shift><control>N"},
+ {"<Main>/View/View source", "<control>U"},
+ {"<Main>/View/Show all header", "<control>H"},
+ {"<Main>/View/Update", "<alt>U"},
+
+ {"<Main>/Message/Receive/Get new mail", "<alt>I"},
+ {"<Main>/Message/Receive/Get from all accounts", "<shift><alt>I"},
+ {"<Main>/Message/Compose new message", "<alt>N"},
+ {"<Main>/Message/Reply", "<alt>R"},
+ {"<Main>/Message/Reply to/all", "<shift><alt>R"},
+ {"<Main>/Message/Reply to/sender", "<control><alt>R"},
+ {"<Main>/Message/Reply to/mailing list", "<control>L"},
+ {"<Main>/Message/Forward", "<shift><alt>F"},
+ {"<Main>/Message/Forward as attachment", "<shift><control>F"},
+ {"<Main>/Message/Move...", "<alt>O"},
+ {"<Main>/Message/Copy...", ""},
+ {"<Main>/Message/Delete", "<alt>D"},
+ {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
+ {"<Main>/Message/Mark/Unmark", "U"},
+ {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
+ {"<Main>/Message/Mark/Mark as read", ""},
+
+ {"<Main>/Tools/Address book", "<alt>A"},
+ {"<Main>/Tools/Execute", "<alt>X"},
+ {"<Main>/Tools/Log window", "<alt>L"},
+
+ {"<Compose>/File/Close", "<alt>W"},
+ {"<Compose>/Edit/Select all", ""},
+ {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
+ {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
+ {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
+ {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
+ {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
+ };
+
+ static struct KeyBind empty_menurc[] = {
+ {"<Main>/File/Empty all trash", ""},
+ {"<Main>/File/Save as...", ""},
+ {"<Main>/File/Print...", ""},
+ {"<Main>/File/Exit", ""},
+
+ {"<Main>/Edit/Copy", ""},
+ {"<Main>/Edit/Select all", ""},
+ {"<Main>/Edit/Find in current message...", ""},
+ {"<Main>/Edit/Search messages...", ""},
+
+ {"<Main>/View/Show or hide/Message view", ""},
+ {"<Main>/View/Thread view", ""},
+ {"<Main>/View/Go to/Prev message", ""},
+ {"<Main>/View/Go to/Next message", ""},
+ {"<Main>/View/Go to/Prev unread message", ""},
+ {"<Main>/View/Go to/Next unread message", ""},
+ {"<Main>/View/Go to/Other folder...", ""},
+ {"<Main>/View/Open in new window", ""},
+ {"<Main>/View/View source", ""},
+ {"<Main>/View/Show all header", ""},
+ {"<Main>/View/Update", ""},
+
+ {"<Main>/Message/Receive/Get new mail", ""},
+ {"<Main>/Message/Receive/Get from all accounts", ""},
+ {"<Main>/Message/Compose new message", ""},
+ {"<Main>/Message/Reply", ""},
+ {"<Main>/Message/Reply to/all", ""},
+ {"<Main>/Message/Reply to/sender", ""},
+ {"<Main>/Message/Reply to/mailing list", ""},
+ {"<Main>/Message/Forward", ""},
+ {"<Main>/Message/Forward as attachment", ""},
+ {"<Main>/Message/Move...", ""},
+ {"<Main>/Message/Copy...", ""},
+ {"<Main>/Message/Delete", ""},
+ {"<Main>/Message/Mark/Mark", ""},
+ {"<Main>/Message/Mark/Unmark", ""},
+ {"<Main>/Message/Mark/Mark as unread", ""},
+ {"<Main>/Message/Mark/Mark as read", ""},
+
+ {"<Main>/Tools/Address book", ""},
+ {"<Main>/Tools/Execute", ""},
+ {"<Main>/Tools/Log window", ""},
+
+ {"<Compose>/File/Close", ""},
+ {"<Compose>/Edit/Select all", ""},
+ {"<Compose>/Edit/Advanced/Move a word backward", ""},
+ {"<Compose>/Edit/Advanced/Move a word forward", ""},
+ {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
+ {"<Compose>/Edit/Advanced/Delete a word backward", ""},
+ {"<Compose>/Edit/Advanced/Delete a word forward", ""},
+ };
+
+ text = gtk_entry_get_text(entry);
+
+ if (!strcmp(text, _("Default"))) {
+ menurc = default_menurc;
+ n_menurc = G_N_ELEMENTS(default_menurc);
+ } else if (!strcmp(text, "Mew / Wanderlust")) {
+ menurc = mew_wl_menurc;
+ n_menurc = G_N_ELEMENTS(mew_wl_menurc);
+ } else if (!strcmp(text, "Mutt")) {
+ menurc = mutt_menurc;
+ n_menurc = G_N_ELEMENTS(mutt_menurc);
+ } else if (!strcmp(text, _("Old Sylpheed"))) {
+ menurc = old_sylpheed_menurc;
+ n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
+ } else
+ return;
+
+ prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc));
+ prefs_keybind_apply(menurc, n_menurc);
+
+ gtk_widget_destroy(keybind.window);
+ keybind.window = NULL;
+ keybind.combo = NULL;
+}
+
+static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gchar *charset;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+ g_free(*((gchar **)pparam->data));
+ *((gchar **)pparam->data) = g_strdup(charset);
+}
+
+static void prefs_common_charset_set_optmenu(PrefParam *pparam)
+{
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ gint index;
+
+ g_return_if_fail(optmenu != NULL);
+ g_return_if_fail(*((gchar **)pparam->data) != NULL);
+
+ index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
+ (GCompareFunc)strcmp);
+ if (index >= 0)
+ gtk_option_menu_set_history(optmenu, index);
+ else {
+ gtk_option_menu_set_history(optmenu, 0);
+ prefs_common_charset_set_data_from_optmenu(pparam);
+ }
+}
+
+static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
+
+static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
+{
+ TransferEncodingMethod method =
+ *((TransferEncodingMethod *)pparam->data);
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ gint index;
+
+ g_return_if_fail(optmenu != NULL);
+
+ index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
+ NULL);
+ if (index >= 0)
+ gtk_option_menu_set_history(optmenu, index);
+ else {
+ gtk_option_menu_set_history(optmenu, 0);
+ prefs_common_encoding_set_data_from_optmenu(pparam);
+ }
+}
+
+static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+}
+
+static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
+{
+ RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
+ GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gint index;
+
+ index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
+ NULL);
+ if (index >= 0)
+ gtk_option_menu_set_history(optmenu, index);
+ else {
+ gtk_option_menu_set_history(optmenu, 0);
+ prefs_common_recv_dialog_set_data_from_optmenu(pparam);
+ }
+
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+}
+
+static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_common_cancel();
+ return TRUE;
+}
+
+static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_common_cancel();
+ return FALSE;
+}
+
+static void prefs_common_ok(void)
+{
+ prefs_common_apply();
+ gtk_widget_hide(dialog.window);
+ if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
+ gtk_widget_hide(quote_desc_win);
+
+ inc_unlock();
+}
+
+static void prefs_common_apply(void)
+{
+ prefs_set_data_from_dialog(param);
+ main_window_reflect_prefs_all();
+ sock_set_io_timeout(prefs_common.io_timeout_secs);
+ prefs_common_write_config();
+
+ inc_autocheck_timer_remove();
+ inc_autocheck_timer_set();
+}
+
+static void prefs_common_cancel(void)
+{
+ gtk_widget_hide(dialog.window);
+ inc_unlock();
+}
diff --git a/src/prefs_common.h b/src/prefs_common.h
new file mode 100644
index 00000000..4b1c6101
--- /dev/null
+++ b/src/prefs_common.h
@@ -0,0 +1,246 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_COMMON_H__
+#define __PREFS_COMMON_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "mainwindow.h"
+#include "summaryview.h"
+#include "codeconv.h"
+#include "textview.h"
+
+typedef struct _PrefsCommon PrefsCommon;
+
+typedef enum {
+ RECV_DIALOG_ALWAYS,
+ RECV_DIALOG_MANUAL,
+ RECV_DIALOG_NEVER
+} RecvDialogMode;
+
+typedef enum {
+ CTE_AUTO,
+ CTE_BASE64,
+ CTE_QUOTED_PRINTABLE,
+ CTE_8BIT
+} TransferEncodingMethod;
+
+struct _PrefsCommon
+{
+ /* Receive */
+ gboolean use_extinc;
+ gchar *extinc_cmd;
+ gboolean inc_local;
+ gboolean filter_on_inc;
+ gchar *spool_path;
+ gboolean scan_all_after_inc;
+ gboolean autochk_newmail;
+ gint autochk_itv;
+ gboolean chk_on_startup;
+ gint max_articles;
+
+ /* Send */
+ gboolean use_extsend;
+ gchar *extsend_cmd;
+ gboolean savemsg;
+ gchar *outgoing_charset;
+ TransferEncodingMethod encoding_method;
+
+ gboolean allow_jisx0201_kana;
+
+ /* Compose */
+ gboolean auto_sig;
+ gchar *sig_sep;
+ gint undolevels;
+ gint linewrap_len;
+ gboolean linewrap_quote;
+ gboolean autowrap;
+ gboolean linewrap_at_send;
+ gboolean auto_exteditor;
+ gboolean reply_account_autosel;
+ gboolean default_reply_list;
+ gboolean show_ruler;
+
+ /* Quote */
+ gboolean reply_with_quote;
+ gchar *quotemark;
+ gchar *quotefmt;
+ gchar *fw_quotemark;
+ gchar *fw_quotefmt;
+
+ /* Display */
+ gchar *widgetfont;
+ gchar *textfont;
+ gchar *normalfont;
+ gchar *boldfont;
+ gchar *smallfont;
+ gchar *titlefont;
+
+ gboolean trans_hdr;
+ gboolean display_folder_unread;
+ gint ng_abbrev_len;
+
+ gboolean swap_from;
+ gboolean expand_thread;
+ gchar *date_format;
+
+ gboolean enable_hscrollbar;
+ gboolean bold_unread;
+ gboolean enable_thread;
+
+ ToolbarStyle toolbar_style;
+ gboolean show_statusbar;
+
+ gint folderview_vscrollbar_policy;
+
+ /* Summary columns visibility, position and size */
+ gboolean summary_col_visible[N_SUMMARY_COLS];
+ gint summary_col_pos[N_SUMMARY_COLS];
+ gint summary_col_size[N_SUMMARY_COLS];
+
+ /* Widget visibility, position and size */
+ gint folderwin_x;
+ gint folderwin_y;
+ gint folderview_width;
+ gint folderview_height;
+ gboolean folderview_visible;
+
+ gint folder_col_folder;
+ gint folder_col_new;
+ gint folder_col_unread;
+ gint folder_col_total;
+
+ gint summaryview_width;
+ gint summaryview_height;
+
+ gint main_msgwin_x;
+ gint main_msgwin_y;
+ gint msgview_width;
+ gint msgview_height;
+ gboolean msgview_visible;
+
+ gint mainview_x;
+ gint mainview_y;
+ gint mainview_width;
+ gint mainview_height;
+ gint mainwin_x;
+ gint mainwin_y;
+ gint mainwin_width;
+ gint mainwin_height;
+
+ gint msgwin_width;
+ gint msgwin_height;
+
+ gint sourcewin_width;
+ gint sourcewin_height;
+
+ gint compose_width;
+ gint compose_height;
+
+ /* Message */
+ gboolean enable_color;
+ gint quote_level1_col;
+ gint quote_level2_col;
+ gint quote_level3_col;
+ gint uri_col;
+ gushort sig_col;
+ gboolean recycle_quote_colors;
+ gboolean conv_mb_alnum;
+ gboolean display_header_pane;
+ gboolean display_header;
+ gboolean head_space;
+ gint line_space;
+ gboolean enable_smooth_scroll;
+ gint scroll_step;
+ gboolean scroll_halfpage;
+
+ gboolean resize_image;
+
+ gchar *force_charset;
+
+ gboolean show_other_header;
+ GSList *disphdr_list;
+
+ /* MIME viewer */
+ gchar *mime_image_viewer;
+ gchar *mime_audio_player;
+ gchar *mime_open_cmd;
+
+ GList *mime_open_cmd_history;
+
+#if USE_GPGME
+ /* Privacy */
+ gboolean auto_check_signatures;
+ gboolean gpg_signature_popup;
+ gboolean store_passphrase;
+ gint store_passphrase_timeout;
+ gboolean passphrase_grab;
+ gboolean gpg_warning;
+#endif /* USE_GPGME */
+
+ /* Interface */
+ gboolean sep_folder;
+ gboolean sep_msg;
+ gboolean emulate_emacs;
+ gboolean always_show_msg;
+ gboolean open_unread_on_enter;
+ gboolean mark_as_read_on_new_window;
+ gboolean open_inbox_on_inc;
+ gboolean immediate_exec;
+ RecvDialogMode recv_dialog_mode;
+ gboolean close_recv_dialog;
+ gboolean no_recv_err_panel;
+ gboolean add_address_by_click;
+
+ /* Other */
+ gchar *uri_cmd;
+ gchar *print_cmd;
+ gchar *ext_editor_cmd;
+
+ gboolean confirm_on_exit;
+ gboolean clean_on_exit;
+ gboolean ask_on_clean;
+ gboolean warn_queued_on_exit;
+
+ gint io_timeout_secs;
+
+ /* Filtering */
+ GSList *fltlist;
+
+ /* Actions */
+ GSList *actions_list;
+
+ /* Online / Offline */
+ gboolean online_mode;
+};
+
+extern PrefsCommon prefs_common;
+
+void prefs_common_read_config (void);
+void prefs_common_write_config (void);
+void prefs_common_open (void);
+
+void prefs_quote_description (void);
+
+#endif /* __PREFS_COMMON_H__ */
diff --git a/src/prefs_customheader.c b/src/prefs_customheader.c
new file mode 100644
index 00000000..f7b1d5df
--- /dev/null
+++ b/src/prefs_customheader.c
@@ -0,0 +1,623 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_customheader.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "mainwindow.h"
+#include "foldersel.h"
+#include "manage_window.h"
+#include "customheader.h"
+#include "folder.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "alertpanel.h"
+
+static struct CustomHdr {
+ GtkWidget *window;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ GtkWidget *hdr_combo;
+ GtkWidget *hdr_entry;
+ GtkWidget *val_entry;
+ GtkWidget *customhdr_clist;
+} customhdr;
+
+/* widget creating functions */
+static void prefs_custom_header_create (void);
+
+static void prefs_custom_header_set_dialog (PrefsAccount *ac);
+static void prefs_custom_header_set_list (PrefsAccount *ac);
+static gint prefs_custom_header_clist_set_row (PrefsAccount *ac,
+ gint row);
+
+/* callback functions */
+static void prefs_custom_header_add_cb (void);
+static void prefs_custom_header_delete_cb (void);
+static void prefs_custom_header_up (void);
+static void prefs_custom_header_down (void);
+static void prefs_custom_header_select (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event);
+
+static void prefs_custom_header_row_moved (GtkCList *clist,
+ gint source_row,
+ gint dest_row,
+ gpointer data);
+
+static gboolean prefs_custom_header_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_custom_header_ok (void);
+static void prefs_custom_header_cancel (void);
+static gint prefs_custom_header_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+
+static PrefsAccount *cur_ac = NULL;
+
+void prefs_custom_header_open(PrefsAccount *ac)
+{
+ if (!customhdr.window) {
+ prefs_custom_header_create();
+ }
+
+ manage_window_set_transient(GTK_WINDOW(customhdr.window));
+ gtk_widget_grab_focus(customhdr.ok_btn);
+
+ prefs_custom_header_set_dialog(ac);
+
+ cur_ac = ac;
+
+ gtk_widget_show(customhdr.window);
+}
+
+static void prefs_custom_header_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ GtkWidget *confirm_area;
+
+ GtkWidget *vbox1;
+
+ GtkWidget *table1;
+ GtkWidget *hdr_label;
+ GtkWidget *hdr_combo;
+ GtkWidget *val_label;
+ GtkWidget *val_entry;
+
+ GtkWidget *reg_hbox;
+ GtkWidget *btn_hbox;
+ GtkWidget *arrow;
+ GtkWidget *add_btn;
+ GtkWidget *del_btn;
+
+ GtkWidget *ch_hbox;
+ GtkWidget *ch_scrolledwin;
+ GtkWidget *customhdr_clist;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ gchar *title[1];
+
+ debug_print("Creating custom header setting window...\n");
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show (confirm_area);
+ gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default (ok_btn);
+
+ gtk_window_set_title (GTK_WINDOW(window), _("Custom header setting"));
+ MANAGE_WINDOW_SIGNALS_CONNECT (window);
+ g_signal_connect (G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_custom_header_deleted),
+ NULL);
+ g_signal_connect (G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_custom_header_key_pressed),
+ NULL);
+ g_signal_connect (G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_custom_header_ok), NULL);
+ g_signal_connect (G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_custom_header_cancel), NULL);
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_box_pack_start (GTK_BOX (vbox), vbox1, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
+
+ table1 = gtk_table_new (2, 2, FALSE);
+ gtk_widget_show (table1);
+ gtk_box_pack_start (GTK_BOX (vbox1), table1,
+ FALSE, FALSE, 0);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ hdr_label = gtk_label_new (_("Header"));
+ gtk_widget_show (hdr_label);
+ gtk_table_attach (GTK_TABLE (table1), hdr_label, 0, 1, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (hdr_label), 0, 0.5);
+
+ hdr_combo = gtk_combo_new ();
+ gtk_widget_show (hdr_combo);
+ gtk_table_attach (GTK_TABLE (table1), hdr_combo, 0, 1, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_widget_set_size_request (hdr_combo, 150, -1);
+ gtkut_combo_set_items (GTK_COMBO (hdr_combo),
+ "User-Agent", "X-Face", "X-Operating-System",
+ NULL);
+
+ val_label = gtk_label_new (_("Value"));
+ gtk_widget_show (val_label);
+ gtk_table_attach (GTK_TABLE (table1), val_label, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (val_label), 0, 0.5);
+
+ val_entry = gtk_entry_new ();
+ gtk_widget_show (val_entry);
+ gtk_table_attach (GTK_TABLE (table1), val_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_widget_set_size_request (val_entry, 200, -1);
+
+ /* add / delete */
+
+ reg_hbox = gtk_hbox_new (FALSE, 4);
+ gtk_widget_show (reg_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), reg_hbox, FALSE, FALSE, 0);
+
+ arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show (arrow);
+ gtk_box_pack_start (GTK_BOX (reg_hbox), arrow, FALSE, FALSE, 0);
+ gtk_widget_set_size_request (arrow, -1, 16);
+
+ btn_hbox = gtk_hbox_new (TRUE, 4);
+ gtk_widget_show (btn_hbox);
+ gtk_box_pack_start (GTK_BOX (reg_hbox), btn_hbox, FALSE, FALSE, 0);
+
+ add_btn = gtk_button_new_with_label (_("Add"));
+ gtk_widget_show (add_btn);
+ gtk_box_pack_start (GTK_BOX (btn_hbox), add_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (add_btn), "clicked",
+ G_CALLBACK (prefs_custom_header_add_cb), NULL);
+
+ del_btn = gtk_button_new_with_label (_(" Delete "));
+ gtk_widget_show (del_btn);
+ gtk_box_pack_start (GTK_BOX (btn_hbox), del_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (del_btn), "clicked",
+ G_CALLBACK (prefs_custom_header_delete_cb), NULL);
+
+
+ ch_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (ch_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), ch_hbox, TRUE, TRUE, 0);
+
+ ch_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_size_request (ch_scrolledwin, -1, 200);
+ gtk_widget_show (ch_scrolledwin);
+ gtk_box_pack_start (GTK_BOX (ch_hbox), ch_scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ch_scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Custom headers");
+ customhdr_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show (customhdr_clist);
+ gtk_container_add (GTK_CONTAINER (ch_scrolledwin), customhdr_clist);
+ gtk_clist_set_column_width (GTK_CLIST (customhdr_clist), 0, 80);
+ gtk_clist_set_selection_mode (GTK_CLIST (customhdr_clist),
+ GTK_SELECTION_BROWSE);
+ gtk_clist_set_reorderable (GTK_CLIST (customhdr_clist), TRUE);
+ gtk_clist_set_use_drag_icons (GTK_CLIST (customhdr_clist), FALSE);
+ GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (customhdr_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect (G_OBJECT (customhdr_clist), "select_row",
+ G_CALLBACK (prefs_custom_header_select), NULL);
+ g_signal_connect_after
+ (G_OBJECT (customhdr_clist), "row_move",
+ G_CALLBACK (prefs_custom_header_row_moved), NULL);
+
+ btn_vbox = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (btn_vbox);
+ gtk_box_pack_start (GTK_BOX (ch_hbox), btn_vbox, FALSE, FALSE, 0);
+
+ up_btn = gtk_button_new_with_label (_("Up"));
+ gtk_widget_show (up_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (up_btn), "clicked",
+ G_CALLBACK (prefs_custom_header_up), NULL);
+
+ down_btn = gtk_button_new_with_label (_("Down"));
+ gtk_widget_show (down_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (down_btn), "clicked",
+ G_CALLBACK (prefs_custom_header_down), NULL);
+
+ gtk_widget_show_all(window);
+
+ customhdr.window = window;
+ customhdr.ok_btn = ok_btn;
+ customhdr.cancel_btn = cancel_btn;
+
+ customhdr.hdr_combo = hdr_combo;
+ customhdr.hdr_entry = GTK_COMBO (hdr_combo)->entry;
+ customhdr.val_entry = val_entry;
+
+ customhdr.customhdr_clist = customhdr_clist;
+}
+
+void prefs_custom_header_read_config(PrefsAccount *ac)
+{
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ CustomHeader *ch;
+
+ debug_print("Reading custom header configuration...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ CUSTOM_HEADER_RC, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ ac->customhdr_list = NULL;
+ return;
+ }
+ g_free(rcpath);
+
+ /* remove all previous headers list */
+ while (ac->customhdr_list != NULL) {
+ ch = (CustomHeader *)ac->customhdr_list->data;
+ custom_header_free(ch);
+ ac->customhdr_list = g_slist_remove(ac->customhdr_list, ch);
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ ch = custom_header_read_str(buf);
+ if (ch) {
+ if (ch->account_id == ac->account_id) {
+ ac->customhdr_list =
+ g_slist_append(ac->customhdr_list, ch);
+ } else
+ custom_header_free(ch);
+ }
+ }
+
+ fclose(fp);
+}
+
+void prefs_custom_header_write_config(PrefsAccount *ac)
+{
+ gchar *rcpath;
+ PrefFile *pfile;
+ GSList *cur;
+ gchar buf[PREFSBUFSIZE];
+ FILE * fp;
+ CustomHeader *ch;
+
+ GSList *all_hdrs = NULL;
+
+ debug_print("Writing custom header configuration...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ CUSTOM_HEADER_RC, NULL);
+
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ } else {
+ all_hdrs = NULL;
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ ch = custom_header_read_str(buf);
+ if (ch) {
+ if (ch->account_id != ac->account_id)
+ all_hdrs =
+ g_slist_append(all_hdrs, ch);
+ else
+ custom_header_free(ch);
+ }
+ }
+
+ fclose(fp);
+ }
+
+ if ((pfile = prefs_file_open(rcpath)) == NULL) {
+ g_warning(_("failed to write configuration to file\n"));
+ g_free(rcpath);
+ return;
+ }
+
+ for (cur = all_hdrs; cur != NULL; cur = cur->next) {
+ CustomHeader *hdr = (CustomHeader *)cur->data;
+ gchar *chstr;
+
+ chstr = custom_header_get_str(hdr);
+ if (fputs(chstr, pfile->fp) == EOF ||
+ fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputs || fputc");
+ prefs_file_close_revert(pfile);
+ g_free(rcpath);
+ g_free(chstr);
+ return;
+ }
+ g_free(chstr);
+ }
+
+ for (cur = ac->customhdr_list; cur != NULL; cur = cur->next) {
+ CustomHeader *hdr = (CustomHeader *)cur->data;
+ gchar *chstr;
+
+ chstr = custom_header_get_str(hdr);
+ if (fputs(chstr, pfile->fp) == EOF ||
+ fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputs || fputc");
+ prefs_file_close_revert(pfile);
+ g_free(rcpath);
+ g_free(chstr);
+ return;
+ }
+ g_free(chstr);
+ }
+
+ g_free(rcpath);
+
+ while (all_hdrs != NULL) {
+ ch = (CustomHeader *)all_hdrs->data;
+ custom_header_free(ch);
+ all_hdrs = g_slist_remove(all_hdrs, ch);
+ }
+
+ if (prefs_file_close(pfile) < 0) {
+ g_warning(_("failed to write configuration to file\n"));
+ return;
+ }
+}
+
+static void prefs_custom_header_set_dialog(PrefsAccount *ac)
+{
+ GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist);
+ GSList *cur;
+ gchar *ch_str[1];
+ gint row;
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ for (cur = ac->customhdr_list; cur != NULL; cur = cur->next) {
+ CustomHeader *ch = (CustomHeader *)cur->data;
+
+ ch_str[0] = g_strdup_printf("%s: %s", ch->name,
+ ch->value ? ch->value : "");
+ row = gtk_clist_append(clist, ch_str);
+ gtk_clist_set_row_data(clist, row, ch);
+
+ g_free(ch_str[0]);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+static void prefs_custom_header_set_list(PrefsAccount *ac)
+{
+ gint row = 0;
+ CustomHeader *ch;
+
+ g_slist_free(ac->customhdr_list);
+ ac->customhdr_list = NULL;
+
+ while ((ch = gtk_clist_get_row_data
+ (GTK_CLIST(customhdr.customhdr_clist), row)) != NULL) {
+ ac->customhdr_list = g_slist_append(ac->customhdr_list, ch);
+ row++;
+ }
+}
+
+static gint prefs_custom_header_clist_set_row(PrefsAccount *ac, gint row)
+{
+ GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist);
+ CustomHeader *ch;
+ const gchar *entry_text;
+ gchar *ch_str[1];
+
+ entry_text = gtk_entry_get_text(GTK_ENTRY(customhdr.hdr_entry));
+ if (entry_text[0] == '\0') {
+ alertpanel_error(_("Header name is not set."));
+ return -1;
+ }
+
+ ch = g_new0(CustomHeader, 1);
+
+ ch->account_id = ac->account_id;
+
+ ch->name = g_strdup(entry_text);
+ unfold_line(ch->name);
+ g_strstrip(ch->name);
+ gtk_entry_set_text(GTK_ENTRY(customhdr.hdr_entry), ch->name);
+
+ entry_text = gtk_entry_get_text(GTK_ENTRY(customhdr.val_entry));
+ if (entry_text[0] != '\0') {
+ ch->value = g_strdup(entry_text);
+ unfold_line(ch->value);
+ g_strstrip(ch->value);
+ gtk_entry_set_text(GTK_ENTRY(customhdr.val_entry), ch->value);
+ }
+
+ ch_str[0] = g_strdup_printf("%s: %s", ch->name,
+ ch->value ? ch->value : "");
+
+ if (row < 0)
+ row = gtk_clist_append(clist, ch_str);
+ else {
+ CustomHeader *tmp_ch;
+
+ gtk_clist_set_text(clist, row, 0, ch_str[0]);
+ tmp_ch = gtk_clist_get_row_data(clist, row);
+ if (tmp_ch)
+ custom_header_free(tmp_ch);
+ }
+
+ gtk_clist_set_row_data(clist, row, ch);
+
+ g_free(ch_str[0]);
+
+ prefs_custom_header_set_list(cur_ac);
+
+ return row;
+}
+
+static void prefs_custom_header_add_cb(void)
+{
+ prefs_custom_header_clist_set_row(cur_ac, -1);
+}
+
+static void prefs_custom_header_delete_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist);
+ CustomHeader *ch;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ if (alertpanel(_("Delete header"),
+ _("Do you really want to delete this header?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
+ return;
+
+ ch = gtk_clist_get_row_data(clist, row);
+ custom_header_free(ch);
+ gtk_clist_remove(clist, row);
+ cur_ac->customhdr_list = g_slist_remove(cur_ac->customhdr_list, ch);
+}
+
+static void prefs_custom_header_up(void)
+{
+ GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void prefs_custom_header_down(void)
+{
+ GtkCList *clist = GTK_CLIST(customhdr.customhdr_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row >= 0 && row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+#define ENTRY_SET_TEXT(entry, str) \
+ gtk_entry_set_text(GTK_ENTRY(entry), str ? str : "")
+
+static void prefs_custom_header_select(GtkCList *clist, gint row, gint column,
+ GdkEvent *event)
+{
+ CustomHeader *ch;
+ CustomHeader default_ch = { 0, "", NULL };
+
+ ch = gtk_clist_get_row_data(clist, row);
+ if (!ch) ch = &default_ch;
+
+ ENTRY_SET_TEXT(customhdr.hdr_entry, ch->name);
+ ENTRY_SET_TEXT(customhdr.val_entry, ch->value);
+}
+
+#undef ENTRY_SET_TEXT
+
+static void prefs_custom_header_row_moved(GtkCList *clist, gint source_row,
+ gint dest_row, gpointer data)
+{
+ prefs_custom_header_set_list(cur_ac);
+}
+
+static gboolean prefs_custom_header_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_custom_header_cancel();
+ return FALSE;
+}
+
+static void prefs_custom_header_ok(void)
+{
+ prefs_custom_header_write_config(cur_ac);
+ gtk_widget_hide(customhdr.window);
+}
+
+static void prefs_custom_header_cancel(void)
+{
+ prefs_custom_header_read_config(cur_ac);
+ gtk_widget_hide(customhdr.window);
+}
+
+static gint prefs_custom_header_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_custom_header_cancel();
+ return TRUE;
+}
diff --git a/src/prefs_customheader.h b/src/prefs_customheader.h
new file mode 100644
index 00000000..c72e29d2
--- /dev/null
+++ b/src/prefs_customheader.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_CUSTOMHEADER_H__
+#define __PREFS_CUSTOMHEADER_H__
+
+#include "prefs_account.h"
+
+void prefs_custom_header_read_config (PrefsAccount *ac);
+void prefs_custom_header_write_config (PrefsAccount *ac);
+void prefs_custom_header_open (PrefsAccount *ac);
+
+#endif /* __PREFS_CUSTOMHEADER_H__ */
diff --git a/src/prefs_display_header.c b/src/prefs_display_header.c
new file mode 100644
index 00000000..8239b7de
--- /dev/null
+++ b/src/prefs_display_header.c
@@ -0,0 +1,631 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "prefs.h"
+#include "prefs_display_header.h"
+#include "prefs_common.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+#include "displayheader.h"
+#include "utils.h"
+#include "gtkutils.h"
+
+static struct DisplayHeader {
+ GtkWidget *window;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ GtkWidget *hdr_combo;
+ GtkWidget *hdr_entry;
+ GtkWidget *key_check;
+ GtkWidget *headers_clist;
+ GtkWidget *hidden_headers_clist;
+
+ GtkWidget *other_headers;
+} dispheader;
+
+/* widget creating functions */
+static void prefs_display_header_create (void);
+
+static void prefs_display_header_set_dialog (void);
+static void prefs_display_header_set_list (void);
+static gint prefs_display_header_clist_set_row (gboolean hidden);
+
+/* callback functions */
+static void prefs_display_header_register_cb (GtkButton *btn,
+ gpointer hidden_data);
+static void prefs_display_header_delete_cb (GtkButton *btn,
+ gpointer clist_data);
+static void prefs_display_header_up (void);
+static void prefs_display_header_down (void);
+
+static void prefs_display_header_row_moved (GtkCList *clist,
+ gint source_row,
+ gint dest_row,
+ gpointer data);
+
+static gboolean prefs_display_header_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_display_header_ok (void);
+static void prefs_display_header_cancel (void);
+static gint prefs_display_header_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+
+static gchar *defaults[] =
+{
+ "From",
+ "To",
+ "Cc",
+ "Reply-To",
+ "Newsgroups",
+ "Followup-To",
+ "Subject",
+ "Date",
+ "Sender",
+ "Organization",
+ "X-Mailer",
+ "X-Newsreader",
+ "User-Agent",
+ "-Received",
+ "-Message-Id",
+ "-In-Reply-To",
+ "-References",
+ "-Mime-Version",
+ "-Content-Type",
+ "-Content-Transfer-Encoding",
+ "-X-UIDL",
+ "-Precedence",
+ "-Status",
+ "-Priority",
+ "-X-Face"
+};
+
+static void prefs_display_header_set_default(void)
+{
+ gint i;
+ DisplayHeaderProp *dp;
+
+ for(i = 0; i < sizeof(defaults) / sizeof(defaults[0]); i++) {
+ dp = display_header_prop_read_str(defaults[i]);
+ prefs_common.disphdr_list =
+ g_slist_append(prefs_common.disphdr_list, dp);
+ }
+}
+
+void prefs_display_header_open(void)
+{
+ if (!dispheader.window) {
+ prefs_display_header_create();
+ }
+
+ manage_window_set_transient(GTK_WINDOW(dispheader.window));
+ gtk_widget_grab_focus(dispheader.ok_btn);
+
+ prefs_display_header_set_dialog();
+
+ gtk_widget_show(dispheader.window);
+}
+
+static void prefs_display_header_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *btn_hbox;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *confirm_area;
+
+ GtkWidget *vbox1;
+
+ GtkWidget *hbox1;
+ GtkWidget *hdr_label;
+ GtkWidget *hdr_combo;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *reg_btn;
+ GtkWidget *del_btn;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ GtkWidget *clist_hbox;
+ GtkWidget *clist_hbox1;
+ GtkWidget *clist_hbox2;
+ GtkWidget *clist_scrolledwin;
+ GtkWidget *headers_clist;
+ GtkWidget *hidden_headers_clist;
+
+ GtkWidget *checkbtn_other_headers;
+
+ gchar *title[1];
+
+ debug_print(_("Creating display header setting window...\n"));
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ btn_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (btn_hbox);
+ gtk_box_pack_end (GTK_BOX (vbox), btn_hbox, FALSE, FALSE, 0);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show (confirm_area);
+ gtk_box_pack_end (GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default (ok_btn);
+
+ gtk_window_set_title (GTK_WINDOW(window),
+ _("Display header setting"));
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ g_signal_connect (G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_display_header_deleted), NULL);
+ g_signal_connect (G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_display_header_key_pressed), NULL);
+ g_signal_connect (G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_display_header_ok), NULL);
+ g_signal_connect (G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_display_header_cancel), NULL);
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_box_pack_start (GTK_BOX (vbox), vbox1, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
+
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
+
+ hdr_label = gtk_label_new (_("Header name"));
+ gtk_widget_show (hdr_label);
+ gtk_box_pack_start (GTK_BOX (hbox1), hdr_label, FALSE, FALSE, 0);
+
+ hdr_combo = gtk_combo_new ();
+ gtk_widget_show (hdr_combo);
+ gtk_box_pack_start (GTK_BOX (hbox1), hdr_combo, TRUE, TRUE, 0);
+ gtk_widget_set_size_request (hdr_combo, 150, -1);
+ gtkut_combo_set_items (GTK_COMBO (hdr_combo),
+ "From", "To", "Cc", "Subject", "Date",
+ "Reply-To", "Sender", "User-Agent", "X-Mailer",
+ NULL);
+
+ clist_hbox = gtk_hbox_new (FALSE, 10);
+ gtk_widget_show (clist_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), clist_hbox, TRUE, TRUE, 0);
+
+ /* display headers list */
+
+ clist_hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (clist_hbox1);
+ gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox1, TRUE, TRUE, 0);
+
+ clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_size_request (clist_scrolledwin, 200, 210);
+ gtk_widget_show (clist_scrolledwin);
+ gtk_box_pack_start (GTK_BOX (clist_hbox1), clist_scrolledwin,
+ TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clist_scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Displayed Headers");
+ headers_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show (headers_clist);
+ gtk_container_add (GTK_CONTAINER (clist_scrolledwin), headers_clist);
+ gtk_clist_set_selection_mode (GTK_CLIST (headers_clist),
+ GTK_SELECTION_BROWSE);
+ gtk_clist_set_reorderable (GTK_CLIST (headers_clist), TRUE);
+ gtk_clist_set_use_drag_icons (GTK_CLIST (headers_clist), FALSE);
+ GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (headers_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect_after
+ (G_OBJECT (headers_clist), "row_move",
+ G_CALLBACK (prefs_display_header_row_moved), NULL);
+
+ btn_vbox = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (btn_vbox);
+ gtk_box_pack_start (GTK_BOX (clist_hbox1), btn_vbox, FALSE, FALSE, 0);
+
+ reg_btn = gtk_button_new_with_label (_("Add"));
+ gtk_widget_show (reg_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (reg_btn), "clicked",
+ G_CALLBACK (prefs_display_header_register_cb),
+ GINT_TO_POINTER(FALSE));
+ del_btn = gtk_button_new_with_label (_("Delete"));
+ gtk_widget_show (del_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (del_btn), "clicked",
+ G_CALLBACK (prefs_display_header_delete_cb),
+ headers_clist);
+
+ up_btn = gtk_button_new_with_label (_("Up"));
+ gtk_widget_show (up_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (up_btn), "clicked",
+ G_CALLBACK (prefs_display_header_up), NULL);
+
+ down_btn = gtk_button_new_with_label (_("Down"));
+ gtk_widget_show (down_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (down_btn), "clicked",
+ G_CALLBACK (prefs_display_header_down), NULL);
+
+ /* hidden headers list */
+
+ clist_hbox2 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (clist_hbox2);
+ gtk_box_pack_start (GTK_BOX (clist_hbox), clist_hbox2, TRUE, TRUE, 0);
+
+ clist_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_size_request (clist_scrolledwin, 200, 210);
+ gtk_widget_show (clist_scrolledwin);
+ gtk_box_pack_start (GTK_BOX (clist_hbox2), clist_scrolledwin,
+ TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clist_scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Hidden headers");
+ hidden_headers_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show (hidden_headers_clist);
+ gtk_container_add (GTK_CONTAINER (clist_scrolledwin),
+ hidden_headers_clist);
+ gtk_clist_set_selection_mode (GTK_CLIST (hidden_headers_clist),
+ GTK_SELECTION_BROWSE);
+ gtk_clist_set_auto_sort(GTK_CLIST (hidden_headers_clist), TRUE);
+ GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (hidden_headers_clist)->
+ column[0].button, GTK_CAN_FOCUS);
+
+ btn_vbox = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (btn_vbox);
+ gtk_box_pack_start (GTK_BOX (clist_hbox2), btn_vbox, FALSE, FALSE, 0);
+
+ reg_btn = gtk_button_new_with_label (_("Add"));
+ gtk_widget_show (reg_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), reg_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (reg_btn), "clicked",
+ G_CALLBACK (prefs_display_header_register_cb),
+ GINT_TO_POINTER (TRUE));
+ del_btn = gtk_button_new_with_label (_("Delete"));
+ gtk_widget_show (del_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), del_btn, FALSE, TRUE, 0);
+ g_signal_connect (G_OBJECT (del_btn), "clicked",
+ G_CALLBACK (prefs_display_header_delete_cb),
+ hidden_headers_clist);
+
+ PACK_CHECK_BUTTON (btn_hbox, checkbtn_other_headers,
+ _("Show all unspecified headers"));
+ SET_TOGGLE_SENSITIVITY (checkbtn_other_headers, clist_hbox2);
+
+ gtk_widget_show_all(window);
+
+ dispheader.window = window;
+ dispheader.ok_btn = ok_btn;
+ dispheader.cancel_btn = cancel_btn;
+
+ dispheader.hdr_combo = hdr_combo;
+ dispheader.hdr_entry = GTK_COMBO (hdr_combo)->entry;
+
+ dispheader.headers_clist = headers_clist;
+ dispheader.hidden_headers_clist = hidden_headers_clist;
+
+ dispheader.other_headers = checkbtn_other_headers;
+}
+
+void prefs_display_header_read_config(void)
+{
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ DisplayHeaderProp *dp;
+
+ debug_print(_("Reading configuration for displaying headers...\n"));
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ DISPLAY_HEADER_RC, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ prefs_common.disphdr_list = NULL;
+ prefs_display_header_set_default();
+ return;
+ }
+ g_free(rcpath);
+
+ /* remove all previous headers list */
+ while (prefs_common.disphdr_list != NULL) {
+ dp = (DisplayHeaderProp *)prefs_common.disphdr_list->data;
+ display_header_prop_free(dp);
+ prefs_common.disphdr_list =
+ g_slist_remove(prefs_common.disphdr_list, dp);
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strchomp(buf);
+ dp = display_header_prop_read_str(buf);
+ if (dp)
+ prefs_common.disphdr_list =
+ g_slist_append(prefs_common.disphdr_list, dp);
+ }
+
+ fclose(fp);
+}
+
+void prefs_display_header_write_config(void)
+{
+ gchar *rcpath;
+ PrefFile *pfile;
+ GSList *cur;
+
+ debug_print(_("Writing configuration for displaying headers...\n"));
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ DISPLAY_HEADER_RC, NULL);
+
+ if ((pfile = prefs_file_open(rcpath)) == NULL) {
+ g_warning(_("failed to write configuration to file\n"));
+ g_free(rcpath);
+ return;
+ }
+
+ for (cur = prefs_common.disphdr_list; cur != NULL;
+ cur = cur->next) {
+ DisplayHeaderProp *dp = (DisplayHeaderProp *)cur->data;
+ gchar *dpstr;
+
+ dpstr = display_header_prop_get_str(dp);
+ if (fputs(dpstr, pfile->fp) == EOF ||
+ fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputs || fputc");
+ prefs_file_close_revert(pfile);
+ g_free(rcpath);
+ g_free(dpstr);
+ return;
+ }
+ g_free(dpstr);
+ }
+
+ g_free(rcpath);
+
+ if (prefs_file_close(pfile) < 0) {
+ g_warning(_("failed to write configuration to file\n"));
+ return;
+ }
+}
+
+static void prefs_display_header_set_dialog(void)
+{
+ GtkCList *clist = GTK_CLIST(dispheader.headers_clist);
+ GtkCList *hidden_clist = GTK_CLIST(dispheader.hidden_headers_clist);
+ GSList *cur;
+ gchar *dp_str[1];
+ gint row;
+
+ gtk_clist_freeze(clist);
+ gtk_clist_freeze(hidden_clist);
+
+ gtk_clist_clear(clist);
+ gtk_clist_clear(hidden_clist);
+
+ for (cur = prefs_common.disphdr_list; cur != NULL;
+ cur = cur->next) {
+ DisplayHeaderProp *dp = (DisplayHeaderProp *)cur->data;
+
+ dp_str[0] = dp->name;
+
+ if (dp->hidden) {
+ row = gtk_clist_append(hidden_clist, dp_str);
+ gtk_clist_set_row_data(hidden_clist, row, dp);
+ } else {
+ row = gtk_clist_append(clist, dp_str);
+ gtk_clist_set_row_data(clist, row, dp);
+ }
+ }
+
+ gtk_clist_thaw(hidden_clist);
+ gtk_clist_thaw(clist);
+
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(dispheader.other_headers),
+ prefs_common.show_other_header);
+}
+
+static void prefs_display_header_set_list()
+{
+ gint row = 0;
+ DisplayHeaderProp *dp;
+
+ g_slist_free(prefs_common.disphdr_list);
+ prefs_common.disphdr_list = NULL;
+
+ while ((dp = gtk_clist_get_row_data
+ (GTK_CLIST(dispheader.headers_clist), row)) != NULL) {
+ prefs_common.disphdr_list =
+ g_slist_append(prefs_common.disphdr_list, dp);
+ row++;
+ }
+
+ row = 0;
+ while ((dp = gtk_clist_get_row_data
+ (GTK_CLIST(dispheader.hidden_headers_clist), row)) != NULL) {
+ prefs_common.disphdr_list =
+ g_slist_append(prefs_common.disphdr_list, dp);
+ row++;
+ }
+}
+
+static gint prefs_display_header_find_header(GtkCList *clist,
+ const gchar *header)
+{
+ gint row = 0;
+ DisplayHeaderProp *dp;
+
+ while ((dp = gtk_clist_get_row_data(clist, row)) != NULL) {
+ if (g_strcasecmp(dp->name, header) == 0)
+ return row;
+ row++;
+ }
+
+ return -1;
+}
+
+static gint prefs_display_header_clist_set_row(gboolean hidden)
+{
+ GtkCList *clist;
+ DisplayHeaderProp *dp;
+ const gchar *entry_text;
+ gchar *dp_str[1];
+ gint row;
+
+ entry_text = gtk_entry_get_text(GTK_ENTRY(dispheader.hdr_entry));
+ if (entry_text[0] == '\0') {
+ alertpanel_error(_("Header name is not set."));
+ return -1;
+ }
+
+ if (hidden)
+ clist = GTK_CLIST(dispheader.hidden_headers_clist);
+ else
+ clist = GTK_CLIST(dispheader.headers_clist);
+
+ if (prefs_display_header_find_header(clist, entry_text) != -1) {
+ alertpanel_error(_("This header is already in the list."));
+ return -1;
+ }
+
+ dp = g_new0(DisplayHeaderProp, 1);
+
+ dp->name = g_strdup(entry_text);
+ dp->hidden = hidden;
+
+ dp_str[0] = dp->name;
+ row = gtk_clist_append(clist, dp_str);
+ gtk_clist_set_row_data(clist, row, dp);
+
+ prefs_display_header_set_list();
+
+ return row;
+}
+
+static void prefs_display_header_register_cb(GtkButton *btn,
+ gpointer hidden_data)
+{
+ prefs_display_header_clist_set_row(GPOINTER_TO_INT(hidden_data));
+}
+
+static void prefs_display_header_delete_cb(GtkButton *btn, gpointer clist_data)
+{
+ GtkCList *clist = GTK_CLIST(clist_data);
+ DisplayHeaderProp *dp;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ dp = gtk_clist_get_row_data(clist, row);
+ display_header_prop_free(dp);
+ gtk_clist_remove(clist, row);
+ prefs_common.disphdr_list =
+ g_slist_remove(prefs_common.disphdr_list, dp);
+}
+
+static void prefs_display_header_up(void)
+{
+ GtkCList *clist = GTK_CLIST(dispheader.headers_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void prefs_display_header_down(void)
+{
+ GtkCList *clist = GTK_CLIST(dispheader.headers_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row >= 0 && row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+static void prefs_display_header_row_moved(GtkCList *clist, gint source_row,
+ gint dest_row, gpointer data)
+{
+ prefs_display_header_set_list();
+}
+
+static gboolean prefs_display_header_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_display_header_cancel();
+ return FALSE;
+}
+
+static void prefs_display_header_ok(void)
+{
+ prefs_common.show_other_header =
+ gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(dispheader.other_headers));
+ prefs_display_header_write_config();
+ gtk_widget_hide(dispheader.window);
+}
+
+static void prefs_display_header_cancel(void)
+{
+ prefs_display_header_read_config();
+ gtk_widget_hide(dispheader.window);
+}
+
+static gint prefs_display_header_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_display_header_cancel();
+ return TRUE;
+}
diff --git a/src/prefs_display_header.h b/src/prefs_display_header.h
new file mode 100644
index 00000000..bf1f4f2d
--- /dev/null
+++ b/src/prefs_display_header.h
@@ -0,0 +1,27 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_DISPLAY_HEADER_H__
+#define __PREFS_DISPLAY_HEADER_H__
+
+void prefs_display_header_read_config (void);
+void prefs_display_header_write_config (void);
+void prefs_display_header_open (void);
+
+#endif /* __PREFS_DISPLAY_HEADER_H__ */
diff --git a/src/prefs_filter.c b/src/prefs_filter.c
new file mode 100644
index 00000000..041aa4bf
--- /dev/null
+++ b/src/prefs_filter.c
@@ -0,0 +1,841 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_filter.h"
+#include "prefs_filter_edit.h"
+#include "prefs_common.h"
+#include "mainwindow.h"
+#include "foldersel.h"
+#include "manage_window.h"
+#include "stock_pixmap.h"
+#include "inc.h"
+#include "procheader.h"
+#include "menu.h"
+#include "filter.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "alertpanel.h"
+#include "xml.h"
+
+static struct FilterRuleListWindow {
+ GtkWidget *window;
+
+ GtkWidget *clist;
+
+ GtkWidget *add_btn;
+ GtkWidget *edit_btn;
+ GtkWidget *copy_btn;
+ GtkWidget *del_btn;
+
+ GSList *default_hdr_list;
+ GSList *user_hdr_list;
+ GSList *msg_hdr_list;
+
+ GHashTable *msg_hdr_table;
+
+ GtkWidget *close_btn;
+} rule_list_window;
+
+static GdkPixmap *markxpm;
+static GdkBitmap *markxpmmask;
+
+static void prefs_filter_create (void);
+
+//static void prefs_filter_read_old_config (void);
+
+static void prefs_filter_set_dialog (void);
+static void prefs_filter_set_list_row (gint row,
+ FilterRule *rule,
+ gboolean move_view);
+
+static void prefs_filter_set_header_list (MsgInfo *msginfo);
+
+static void prefs_filter_write_user_header_list (void);
+
+static void prefs_filter_set_list (void);
+
+/* callback functions */
+static void prefs_filter_add_cb (void);
+static void prefs_filter_edit_cb (void);
+static void prefs_filter_copy_cb (void);
+static void prefs_filter_delete_cb (void);
+static void prefs_filter_top (void);
+static void prefs_filter_up (void);
+static void prefs_filter_down (void);
+static void prefs_filter_bottom (void);
+
+static void prefs_filter_select (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event);
+static void prefs_filter_row_move (GtkCList *clist,
+ gint source_row,
+ gint dest_row);
+
+static gint prefs_filter_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_filter_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_filter_close (void);
+
+
+void prefs_filter_open(MsgInfo *msginfo, const gchar *header)
+{
+ inc_lock();
+
+ if (!rule_list_window.window)
+ prefs_filter_create();
+
+ prefs_filter_set_header_list(msginfo);
+
+ manage_window_set_transient(GTK_WINDOW(rule_list_window.window));
+ gtk_widget_grab_focus(rule_list_window.close_btn);
+
+ prefs_filter_set_dialog();
+
+ gtk_widget_show(rule_list_window.window);
+
+ if (msginfo) {
+ FilterRule *rule;
+
+ rule = prefs_filter_edit_open(NULL, header);
+
+ if (rule) {
+ prefs_filter_set_list_row(-1, rule, TRUE);
+ prefs_filter_set_list();
+ }
+ }
+}
+
+static void prefs_filter_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *close_btn;
+ GtkWidget *confirm_area;
+
+ GtkWidget *hbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *clist;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *spc_vbox;
+ GtkWidget *top_btn;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+ GtkWidget *bottom_btn;
+
+ GtkWidget *btn_hbox;
+ GtkWidget *add_btn;
+ GtkWidget *edit_btn;
+ GtkWidget *copy_btn;
+ GtkWidget *del_btn;
+
+ gchar *title[2];
+
+ debug_print("Creating filter setting window...\n");
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_widget_set_usize(window, 540, 360);
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ gtkut_button_set_create(&confirm_area, &close_btn, _("Close"),
+ NULL, NULL, NULL, NULL);
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(close_btn);
+
+ gtk_window_set_title(GTK_WINDOW(window),
+ _("Filter setting"));
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_filter_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_filter_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT (window);
+ g_signal_connect(G_OBJECT(close_btn), "clicked",
+ G_CALLBACK(prefs_filter_close), NULL);
+
+ /* Rule list */
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scrolledwin);
+ gtk_widget_set_usize(scrolledwin, -1, 150);
+ gtk_box_pack_start(GTK_BOX(hbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Enabled");
+ title[1] = _("Name");
+ clist = gtk_clist_new_with_titles(2, title);
+ gtk_widget_show(clist);
+ gtk_container_add (GTK_CONTAINER(scrolledwin), clist);
+ gtk_clist_set_column_width(GTK_CLIST(clist), 0, 64);
+ gtk_clist_set_column_justification(GTK_CLIST(clist), 0,
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[0].button,
+ GTK_CAN_FOCUS);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[1].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect(G_OBJECT(clist), "select_row",
+ G_CALLBACK(prefs_filter_select), NULL);
+ g_signal_connect_after(G_OBJECT(clist), "row_move",
+ G_CALLBACK(prefs_filter_row_move), NULL);
+
+ /* Up / Down */
+
+ btn_vbox = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show(btn_vbox);
+ gtk_box_pack_start(GTK_BOX(hbox), btn_vbox, FALSE, FALSE, 0);
+
+ top_btn = gtk_button_new_with_label(_("Top"));
+ gtk_widget_show(top_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), top_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(top_btn), "clicked",
+ G_CALLBACK(prefs_filter_top), NULL);
+
+ PACK_VSPACER(btn_vbox, spc_vbox, VSPACING_NARROW_2);
+
+ up_btn = gtk_button_new_with_label(_("Up"));
+ gtk_widget_show(up_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), up_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(up_btn), "clicked",
+ G_CALLBACK(prefs_filter_up), NULL);
+
+ down_btn = gtk_button_new_with_label(_("Down"));
+ gtk_widget_show(down_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), down_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(down_btn), "clicked",
+ G_CALLBACK(prefs_filter_down), NULL);
+
+ PACK_VSPACER(btn_vbox, spc_vbox, VSPACING_NARROW_2);
+
+ bottom_btn = gtk_button_new_with_label(_("Bottom"));
+ gtk_widget_show(bottom_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), bottom_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(bottom_btn), "clicked",
+ G_CALLBACK(prefs_filter_bottom), NULL);
+
+ /* add / edit / copy / delete */
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ btn_hbox = gtk_hbox_new(TRUE, 4);
+ gtk_widget_show(btn_hbox);
+ gtk_box_pack_start(GTK_BOX(hbox), btn_hbox, FALSE, FALSE, 0);
+
+ add_btn = gtk_button_new_with_label(_("Add"));
+ gtk_widget_show(add_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), add_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(add_btn), "clicked",
+ G_CALLBACK(prefs_filter_add_cb), NULL);
+
+ edit_btn = gtk_button_new_with_label(_("Edit"));
+ gtk_widget_show(edit_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), edit_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(edit_btn), "clicked",
+ G_CALLBACK(prefs_filter_edit_cb), NULL);
+
+ copy_btn = gtk_button_new_with_label(_("Copy"));
+ gtk_widget_show(copy_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), copy_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(copy_btn), "clicked",
+ G_CALLBACK(prefs_filter_copy_cb), NULL);
+
+ del_btn = gtk_button_new_with_label(_(" Delete "));
+ gtk_widget_show(del_btn);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), del_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_filter_delete_cb), NULL);
+
+ gtk_widget_show_all(window);
+
+ stock_pixmap_gdk(clist, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
+
+ rule_list_window.window = window;
+ rule_list_window.close_btn = close_btn;
+
+ rule_list_window.clist = clist;
+
+ rule_list_window.default_hdr_list = NULL;
+ rule_list_window.user_hdr_list = NULL;
+ rule_list_window.msg_hdr_list = NULL;
+ rule_list_window.msg_hdr_table = NULL;
+}
+
+void prefs_filter_read_config(void)
+{
+ gchar *rcpath;
+ GNode *node;
+ FilterRule *rule;
+
+ debug_print("Reading filter configuration...\n");
+
+ /* remove all previous filter list */
+ while (prefs_common.fltlist != NULL) {
+ rule = (FilterRule *)prefs_common.fltlist->data;
+ filter_rule_free(rule);
+ prefs_common.fltlist = g_slist_remove(prefs_common.fltlist,
+ rule);
+ }
+
+#warning FIXME_GTK2
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_LIST,
+ NULL);
+ if (!is_file_exist(rcpath)) {
+ //prefs_filter_read_old_config();
+ g_free(rcpath);
+ return;
+ }
+
+ node = xml_parse_file(rcpath);
+ if (!node) {
+ g_warning("Can't parse %s\n", rcpath);
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ prefs_common.fltlist = filter_xml_node_to_filter_list(node);
+
+ xml_free_tree(node);
+}
+
+#if 0
+static void prefs_filter_read_old_config(void)
+{
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ FilterRule *rule;
+
+ debug_print("Reading old filter configuration...\n");
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_RC, NULL);
+ if ((fp = fopen(rcpath, "rb")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ return;
+ }
+ g_free(rcpath);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strchomp(buf);
+ rule = filter_read_str(buf);
+ if (rule) {
+ prefs_common.fltlist =
+ g_slist_append(prefs_common.fltlist, rule);
+ }
+ }
+
+ fclose(fp);
+}
+#endif
+
+void prefs_filter_write_config(void)
+{
+ filter_write_config(prefs_common.fltlist);
+}
+
+void prefs_filter_rename_path(const gchar *old_path, const gchar *new_path)
+{
+ GSList *cur;
+
+ g_return_if_fail(old_path != NULL);
+ g_return_if_fail(new_path != NULL);
+
+ for (cur = prefs_common.fltlist; cur != NULL; cur = cur->next) {
+ FilterRule *rule = (FilterRule *)cur->data;
+ filter_rule_rename_dest_path(rule, old_path, new_path);
+ }
+
+ filter_write_config(prefs_common.fltlist);
+}
+
+void prefs_filter_delete_path(const gchar *path)
+{
+ GSList *cur;
+ GSList *next;
+
+ g_return_if_fail(path != NULL);
+
+ for (cur = prefs_common.fltlist; cur != NULL; cur = next) {
+ FilterRule *rule = (FilterRule *)cur->data;
+ next = cur->next;
+
+ filter_rule_delete_action_by_dest_path(rule, path);
+ if (!rule->action_list) {
+ prefs_common.fltlist =
+ g_slist_remove(prefs_common.fltlist, rule);
+ filter_rule_free(rule);
+ }
+ }
+
+ filter_write_config(prefs_common.fltlist);
+}
+
+static void prefs_filter_set_dialog(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ GSList *cur;
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ for (cur = prefs_common.fltlist; cur != NULL; cur = cur->next) {
+ FilterRule *rule = (FilterRule *)cur->data;
+ prefs_filter_set_list_row(-1, rule, FALSE);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+static void prefs_filter_set_list_row(gint row, FilterRule *rule,
+ gboolean move_view)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ gchar *cond_str[2] = {"", NULL};
+
+ if (!rule)
+ rule = gtk_clist_get_row_data(clist, row);
+
+ g_return_if_fail(rule != NULL);
+
+ if (rule->name && *rule->name)
+ cond_str[1] = g_strdup(rule->name);
+ else {
+ cond_str[1] = filter_get_str(rule);
+ }
+
+ if (row < 0)
+ row = gtk_clist_append(clist, cond_str);
+ else {
+ FilterRule *prev_rule;
+
+ prev_rule = gtk_clist_get_row_data(clist, row);
+ if (rule == prev_rule)
+ gtk_clist_set_text(clist, row, 1, cond_str[1]);
+ else if (prev_rule) {
+ gtk_clist_set_text(clist, row, 1, cond_str[1]);
+ filter_rule_free(prev_rule);
+ } else
+ row = gtk_clist_append(clist, cond_str);
+ }
+
+ if (rule->enabled)
+ gtk_clist_set_pixmap(clist, row, 0, markxpm, markxpmmask);
+ else
+ gtk_clist_set_text(clist, row, 0, "");
+
+ gtk_clist_set_row_data(clist, row, rule);
+ g_free(cond_str[1]);
+
+ if (move_view &&
+ gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
+ gtk_clist_moveto(clist, row, -1, 0.5, 0.0);
+}
+
+#define APPEND_HDR_LIST(hdr_list) \
+ for (cur = hdr_list; cur != NULL; cur = cur->next) { \
+ header = (Header *)cur->data; \
+ \
+ if (!g_hash_table_lookup(table, header->name)) { \
+ g_hash_table_insert(table, header->name, header); \
+ list = g_slist_append(list, header); \
+ } \
+ }
+
+GSList *prefs_filter_get_header_list(void)
+{
+ GSList *list = NULL;
+ GSList *cur;
+ GHashTable *table;
+ Header *header;
+
+ table = g_hash_table_new(str_case_hash, str_case_equal);
+
+ APPEND_HDR_LIST(rule_list_window.default_hdr_list)
+ APPEND_HDR_LIST(rule_list_window.user_hdr_list);
+ APPEND_HDR_LIST(rule_list_window.msg_hdr_list);
+
+ g_hash_table_destroy(table);
+
+ return list;
+}
+
+#undef APPEND_HDR_LIST
+
+GSList *prefs_filter_get_user_header_list(void)
+{
+ return rule_list_window.user_hdr_list;
+}
+
+gchar *prefs_filter_get_msg_header_field(const gchar *header_name)
+{
+ if (!rule_list_window.msg_hdr_table)
+ return NULL;
+
+ return (gchar *)g_hash_table_lookup
+ (rule_list_window.msg_hdr_table, header_name);
+}
+
+void prefs_filter_set_user_header_list(GSList *list)
+{
+ procheader_header_list_destroy(rule_list_window.user_hdr_list);
+ rule_list_window.user_hdr_list = list;
+}
+
+void prefs_filter_set_msg_header_list(MsgInfo *msginfo)
+{
+ gchar *file;
+ GSList *cur;
+ GSList *next;
+ Header *header;
+
+ if (rule_list_window.msg_hdr_table) {
+ g_hash_table_destroy(rule_list_window.msg_hdr_table);
+ rule_list_window.msg_hdr_table = NULL;
+ }
+ if (rule_list_window.msg_hdr_list) {
+ procheader_header_list_destroy(rule_list_window.msg_hdr_list);
+ rule_list_window.msg_hdr_list = NULL;
+ }
+
+ if (!msginfo)
+ return;
+
+ file = procmsg_get_message_file(msginfo);
+ g_return_if_fail(file != NULL);
+
+ rule_list_window.msg_hdr_list =
+ procheader_get_header_list_from_file(file);
+
+ g_free(file);
+
+ rule_list_window.msg_hdr_table =
+ g_hash_table_new(str_case_hash, str_case_equal);
+
+ for (cur = rule_list_window.msg_hdr_list; cur != NULL;
+ cur = next) {
+ next = cur->next;
+ header = (Header *)cur->data;
+ if (!g_strcasecmp(header->name, "Received") ||
+ !g_strcasecmp(header->name, "Mime-Version") ||
+ !g_strcasecmp(header->name, "X-UIDL")) {
+ procheader_header_free(header);
+ rule_list_window.msg_hdr_list =
+ g_slist_remove(rule_list_window.msg_hdr_list,
+ header);
+ continue;
+ }
+ if (!g_hash_table_lookup(rule_list_window.msg_hdr_table,
+ header->name)) {
+ g_hash_table_insert(rule_list_window.msg_hdr_table,
+ header->name, header->body);
+ }
+ }
+}
+
+static void prefs_filter_set_header_list(MsgInfo *msginfo)
+{
+ GSList *list = NULL;
+ gchar *path;
+ FILE *fp;
+
+ list = procheader_add_header_list(list, "From", NULL);
+ list = procheader_add_header_list(list, "To", NULL);
+ list = procheader_add_header_list(list, "Cc", NULL);
+ list = procheader_add_header_list(list, "Subject", NULL);
+ list = procheader_add_header_list(list, "Reply-To", NULL);
+ list = procheader_add_header_list(list, "List-Id", NULL);
+ list = procheader_add_header_list(list, "X-ML-Name", NULL);
+
+ procheader_header_list_destroy(rule_list_window.default_hdr_list);
+ rule_list_window.default_hdr_list = list;
+
+ list = NULL;
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_HEADER_RC,
+ NULL);
+ if ((fp = fopen(path, "rb")) != NULL) {
+ gchar buf[PREFSBUFSIZE];
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strstrip(buf);
+ if (buf[0] == '\0') continue;
+ list = procheader_add_header_list(list, buf, NULL);
+ }
+
+ fclose(fp);
+ } else
+ if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
+ g_free(path);
+
+ prefs_filter_set_user_header_list(list);
+
+ prefs_filter_set_msg_header_list(msginfo);
+}
+
+static void prefs_filter_write_user_header_list(void)
+{
+ gchar *path;
+ PrefFile *pfile;
+ GSList *cur;
+
+ path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_HEADER_RC,
+ NULL);
+
+ if ((pfile = prefs_file_open(path)) == NULL) {
+ g_warning("failed to write filter user header list\n");
+ g_free(path);
+ return;
+ }
+ g_free(path);
+
+ for (cur = rule_list_window.user_hdr_list; cur != NULL;
+ cur = cur->next) {
+ Header *header = (Header *)cur->data;
+ fputs(header->name, pfile->fp);
+ fputc('\n', pfile->fp);
+ }
+
+ if (prefs_file_close(pfile) < 0)
+ g_warning("failed to write filter user header list\n");
+}
+
+static void prefs_filter_set_list(void)
+{
+ gint row = 0;
+ FilterRule *rule;
+
+ g_slist_free(prefs_common.fltlist);
+ prefs_common.fltlist = NULL;
+
+ while ((rule = gtk_clist_get_row_data
+ (GTK_CLIST(rule_list_window.clist), row)) != NULL) {
+ prefs_common.fltlist = g_slist_append(prefs_common.fltlist,
+ rule);
+ row++;
+ }
+}
+
+static void prefs_filter_add_cb(void)
+{
+ FilterRule *rule;
+
+ rule = prefs_filter_edit_open(NULL, NULL);
+
+ if (rule) {
+ prefs_filter_set_list_row(-1, rule, TRUE);
+ prefs_filter_set_list();
+ }
+}
+
+static void prefs_filter_edit_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ FilterRule *rule, *new_rule;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ rule = gtk_clist_get_row_data(clist, row);
+ g_return_if_fail(rule != NULL);
+
+ new_rule = prefs_filter_edit_open(rule, NULL);
+
+ if (new_rule) {
+ prefs_filter_set_list_row(row, new_rule, TRUE);
+ prefs_filter_set_list();
+ }
+}
+
+static void prefs_filter_copy_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ FilterRule *rule, *new_rule;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ rule = gtk_clist_get_row_data(clist, row);
+ g_return_if_fail(rule != NULL);
+
+ new_rule = prefs_filter_edit_open(rule, NULL);
+
+ if (new_rule) {
+ prefs_filter_set_list_row(-1, new_rule, TRUE);
+ prefs_filter_set_list();
+ }
+}
+
+static void prefs_filter_delete_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ FilterRule *rule;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+
+ if (alertpanel(_("Delete rule"),
+ _("Do you really want to delete this rule?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
+ return;
+
+ rule = gtk_clist_get_row_data(clist, row);
+ filter_rule_free(rule);
+ gtk_clist_remove(clist, row);
+ prefs_common.fltlist = g_slist_remove(prefs_common.fltlist, rule);
+ if (!clist->selection)
+ gtk_clist_select_row(clist, row - 1, -1);
+}
+
+static void prefs_filter_top(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, 0);
+}
+
+static void prefs_filter_up(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void prefs_filter_down(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+static void prefs_filter_bottom(void)
+{
+ GtkCList *clist = GTK_CLIST(rule_list_window.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, clist->rows - 1);
+}
+
+static void prefs_filter_select(GtkCList *clist, gint row, gint column,
+ GdkEvent *event)
+{
+ if (event && event->type == GDK_2BUTTON_PRESS) {
+ prefs_filter_edit_cb();
+ return;
+ }
+
+ if (column == 0) {
+ FilterRule *rule;
+ rule = gtk_clist_get_row_data(clist, row);
+ rule->enabled ^= TRUE;
+ prefs_filter_set_list_row(row, rule, FALSE);
+ }
+}
+
+static void prefs_filter_row_move(GtkCList *clist, gint source_row,
+ gint dest_row)
+{
+ prefs_filter_set_list();
+ if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL)
+ gtk_clist_moveto(clist, dest_row, -1, 0.5, 0.0);
+}
+
+static gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_filter_close();
+ return TRUE;
+}
+
+static gboolean prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_filter_close();
+ return FALSE;
+}
+
+static void prefs_filter_close(void)
+{
+ prefs_filter_set_msg_header_list(NULL);
+ prefs_filter_write_user_header_list();
+ filter_write_config(prefs_common.fltlist);
+ gtk_widget_hide(rule_list_window.window);
+ gtk_clist_clear(GTK_CLIST(rule_list_window.clist));
+ inc_unlock();
+}
diff --git a/src/prefs_filter.h b/src/prefs_filter.h
new file mode 100644
index 00000000..619676e9
--- /dev/null
+++ b/src/prefs_filter.h
@@ -0,0 +1,58 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_FILTER_H__
+#define __PREFS_FILTER_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "procmsg.h"
+
+typedef enum
+{
+ FILTER_BY_NONE,
+ FILTER_BY_AUTO,
+ FILTER_BY_FROM,
+ FILTER_BY_TO,
+ FILTER_BY_SUBJECT
+} PrefsFilterType;
+
+void prefs_filter_read_config (void);
+void prefs_filter_write_config (void);
+
+void prefs_filter_open (MsgInfo *msginfo,
+ const gchar *header);
+
+GSList *prefs_filter_get_header_list (void);
+GSList *prefs_filter_get_user_header_list (void);
+
+gchar *prefs_filter_get_msg_header_field (const gchar *header_name);
+
+void prefs_filter_set_user_header_list (GSList *list);
+void prefs_filter_set_msg_header_list (MsgInfo *msginfo);
+
+void prefs_filter_rename_path (const gchar *old_path,
+ const gchar *new_path);
+void prefs_filter_delete_path (const gchar *path);
+
+#endif /* __PREFS_FILTER_H__ */
diff --git a/src/prefs_filter_edit.c b/src/prefs_filter_edit.c
new file mode 100644
index 00000000..d1dc7d90
--- /dev/null
+++ b/src/prefs_filter_edit.c
@@ -0,0 +1,2035 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_filter.h"
+#include "prefs_filter_edit.h"
+#include "prefs_common.h"
+#include "mainwindow.h"
+#include "foldersel.h"
+#include "colorlabel.h"
+#include "manage_window.h"
+#include "procheader.h"
+#include "menu.h"
+#include "filter.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "alertpanel.h"
+#include "folder.h"
+
+typedef enum
+{
+ PF_COND_HEADER,
+ PF_COND_TO_OR_CC,
+ PF_COND_ANY_HEADER,
+ PF_COND_BODY,
+ PF_COND_CMD_TEST,
+ PF_COND_SIZE,
+ PF_COND_AGE,
+ PF_COND_ACCOUNT,
+ PF_COND_EDIT_HEADER,
+ PF_COND_SEPARATOR,
+ PF_COND_NONE
+} CondMenuType;
+
+typedef enum
+{
+ PF_MATCH_CONTAIN,
+ PF_MATCH_NOT_CONTAIN,
+ PF_MATCH_EQUAL,
+ PF_MATCH_NOT_EQUAL,
+ PF_MATCH_REGEX,
+ PF_MATCH_NOT_REGEX,
+ PF_MATCH_NONE
+} MatchMenuType;
+
+typedef enum
+{
+ PF_SIZE_LARGER,
+ PF_SIZE_SMALLER
+} SizeMatchType;
+
+typedef enum
+{
+ PF_AGE_LONGER,
+ PF_AGE_SHORTER
+} AgeMatchType;
+
+typedef enum
+{
+ PF_ACTION_MOVE,
+ PF_ACTION_COPY,
+ PF_ACTION_NOT_RECEIVE,
+ PF_ACTION_DELETE,
+ PF_ACTION_EXEC,
+ PF_ACTION_EXEC_ASYNC,
+ PF_ACTION_MARK,
+ PF_ACTION_COLOR_LABEL,
+ PF_ACTION_MARK_READ,
+ PF_ACTION_FORWARD,
+ PF_ACTION_FORWARD_AS_ATTACHMENT,
+ PF_ACTION_REDIRECT,
+ PF_ACTION_STOP_EVAL,
+ PF_ACTION_SEPARATOR,
+ PF_ACTION_NONE
+} ActionMenuType;
+
+static struct FilterRuleEditWindow {
+ GtkWidget *window;
+
+ GtkWidget *name_entry;
+ GtkWidget *bool_op_optmenu;
+
+ GtkWidget *cond_scrolled_win;
+ GtkWidget *cond_vbox;
+ GSList *cond_hbox_list;
+
+ GtkWidget *action_scrolled_win;
+ GtkWidget *action_vbox;
+ GSList *action_hbox_list;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ GSList *hdr_list;
+ GSList *rule_hdr_list;
+
+ FilterRule *new_rule;
+ gboolean edit_finished;
+} rule_edit_window;
+
+static struct FilterEditHeaderListDialog {
+ GtkWidget *window;
+ GtkWidget *clist;
+ GtkWidget *entry;
+
+ gboolean finished;
+ gboolean ok;
+} edit_header_list_dialog;
+
+typedef struct _CondHBox {
+ GtkWidget *hbox;
+
+ GtkWidget *cond_type_optmenu;
+ GtkWidget *match_type_optmenu;
+ GtkWidget *size_match_optmenu;
+ GtkWidget *age_match_optmenu;
+ GtkWidget *key_entry;
+ GtkWidget *spin_btn;
+ GtkWidget *label;
+
+ GtkWidget *del_btn;
+ GtkWidget *add_btn;
+
+ CondMenuType cur_type;
+ gchar *cur_header_name;
+} CondHBox;
+
+typedef struct _ActionHBox {
+ GtkWidget *hbox;
+
+ GtkWidget *action_type_optmenu;
+ GtkWidget *label;
+ GtkWidget *folder_entry;
+ GtkWidget *cmd_entry;
+ GtkWidget *address_entry;
+ GtkWidget *clabel_optmenu;
+
+ GtkWidget *folder_sel_btn;
+
+ GtkWidget *action_type_menu_items[PF_ACTION_NONE];
+
+ GtkWidget *del_btn;
+ GtkWidget *add_btn;
+} ActionHBox;
+
+static void prefs_filter_edit_create (void);
+static void prefs_filter_edit_clear (void);
+static void prefs_filter_edit_rule_to_dialog (FilterRule *rule);
+static void prefs_filter_edit_set_header_list (FilterRule *rule);
+static void prefs_filter_edit_update_header_list(void);
+
+static CondHBox *prefs_filter_edit_cond_hbox_create (void);
+static ActionHBox *prefs_filter_edit_action_hbox_create (void);
+static void prefs_filter_edit_cond_hbox_set (CondHBox *hbox,
+ FilterCond *cond);
+static void prefs_filter_edit_action_hbox_set (ActionHBox *hbox,
+ FilterAction *action);
+
+static void prefs_filter_edit_cond_hbox_select (CondHBox *hbox,
+ CondMenuType type,
+ const gchar *header_name);
+
+static void prefs_filter_edit_set_cond_hbox_widgets (CondHBox *hbox,
+ CondMenuType type);
+static void prefs_filter_edit_set_action_hbox_widgets (ActionHBox *hbox,
+ ActionMenuType type);
+
+static void prefs_filter_edit_set_action_hbox_menu_sensitive
+ (ActionHBox *hbox,
+ ActionMenuType type,
+ gboolean sensitive);
+static void prefs_filter_edit_set_action_hbox_menus_sensitive
+ (void);
+
+static void prefs_filter_edit_get_action_hbox_menus_selection
+ (gboolean *selection);
+static ActionMenuType prefs_filter_edit_get_action_hbox_type
+ (ActionHBox *hbox);
+
+static void prefs_filter_edit_insert_cond_hbox (CondHBox *hbox,
+ gint pos);
+static void prefs_filter_edit_insert_action_hbox(ActionHBox *hbox,
+ gint pos);
+static void prefs_filter_edit_remove_cond_hbox (CondHBox *hbox);
+static void prefs_filter_edit_remove_action_hbox(ActionHBox *hbox);
+
+static void prefs_filter_edit_add_rule_cond (FilterRule *rule);
+static void prefs_filter_edit_add_rule_action (FilterRule *rule);
+
+static void prefs_filter_edit_set_cond_header_menu
+ (CondHBox *hbox);
+
+static void prefs_filter_edit_activate_cond_header
+ (const gchar *header);
+
+static void prefs_filter_edit_edit_header_list (void);
+
+static FilterRule *prefs_filter_edit_dialog_to_rule (void);
+
+/* callback functions */
+static gint prefs_filter_edit_deleted (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_filter_edit_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_filter_edit_ok (void);
+static void prefs_filter_edit_cancel (void);
+
+static void prefs_filter_cond_activated_cb (GtkWidget *widget,
+ gpointer data);
+static void prefs_filter_action_activated_cb (GtkWidget *widget,
+ gpointer data);
+
+static void prefs_filter_action_select_dest_cb (GtkWidget *widget,
+ gpointer data);
+
+static void prefs_filter_cond_del_cb (GtkWidget *widget,
+ gpointer data);
+static void prefs_filter_cond_add_cb (GtkWidget *widget,
+ gpointer data);
+static void prefs_filter_action_del_cb (GtkWidget *widget,
+ gpointer data);
+static void prefs_filter_action_add_cb (GtkWidget *widget,
+ gpointer data);
+
+
+FilterRule *prefs_filter_edit_open(FilterRule *rule, const gchar *header)
+{
+ FilterRule *new_rule;
+
+ if (!rule_edit_window.window)
+ prefs_filter_edit_create();
+
+ manage_window_set_transient(GTK_WINDOW(rule_edit_window.window));
+
+ prefs_filter_edit_set_header_list(rule);
+ prefs_filter_edit_rule_to_dialog(rule);
+ if (header)
+ prefs_filter_edit_activate_cond_header(header);
+ gtk_widget_show(rule_edit_window.window);
+
+ rule_edit_window.new_rule = NULL;
+ rule_edit_window.edit_finished = FALSE;
+ while (rule_edit_window.edit_finished == FALSE)
+ gtk_main_iteration();
+
+ prefs_filter_edit_clear();
+ prefs_filter_set_msg_header_list(NULL);
+ gtk_widget_hide(rule_edit_window.window);
+
+ new_rule = rule_edit_window.new_rule;
+ rule_edit_window.new_rule = NULL;
+
+ if (new_rule)
+ debug_print("new rule created: %s\n", new_rule->name);
+
+ return new_rule;
+}
+
+static void prefs_filter_edit_create(void)
+{
+ GtkWidget *window;
+
+ GtkWidget *vbox;
+
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+
+ GtkWidget *bool_op_optmenu;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+
+ GtkWidget *cond_scrolled_win;
+ GtkWidget *cond_vbox;
+
+ GtkWidget *action_scrolled_win;
+ GtkWidget *action_vbox;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_widget_set_size_request(window, 632, 405);
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ gtk_window_set_title(GTK_WINDOW(window),
+ _("Filter rule"));
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_filter_edit_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_filter_edit_key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT (window);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_filter_edit_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_filter_edit_cancel), NULL);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new(_("Name:"));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ name_entry = gtk_entry_new();
+ gtk_widget_show(name_entry);
+ gtk_box_pack_start(GTK_BOX(hbox), name_entry, TRUE, TRUE, 0);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ bool_op_optmenu = gtk_option_menu_new();
+ gtk_widget_show(bool_op_optmenu);
+ gtk_box_pack_start(GTK_BOX(hbox), bool_op_optmenu, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new();
+ MENUITEM_ADD(menu, menuitem,
+ _("If any of the following condition matches"), FLT_OR);
+ MENUITEM_ADD(menu, menuitem,
+ _("If all of the following conditions match"), FLT_AND);
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(bool_op_optmenu), menu);
+
+ cond_scrolled_win = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(cond_scrolled_win);
+ gtk_widget_set_size_request(cond_scrolled_win, -1, 125);
+ gtk_box_pack_start(GTK_BOX(vbox), cond_scrolled_win, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cond_scrolled_win),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ cond_vbox = gtk_vbox_new(FALSE, 2);
+ gtk_widget_show(cond_vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(cond_vbox), 2);
+ gtk_scrolled_window_add_with_viewport
+ (GTK_SCROLLED_WINDOW(cond_scrolled_win), cond_vbox);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ label = gtk_label_new(_("Perform the following actions:"));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ action_scrolled_win = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(action_scrolled_win);
+ gtk_box_pack_start(GTK_BOX(vbox), action_scrolled_win, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(action_scrolled_win),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ action_vbox = gtk_vbox_new(FALSE, 2);
+ gtk_widget_show(action_vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(action_vbox), 2);
+ gtk_scrolled_window_add_with_viewport
+ (GTK_SCROLLED_WINDOW(action_scrolled_win), action_vbox);
+
+ rule_edit_window.window = window;
+ rule_edit_window.name_entry = name_entry;
+
+ rule_edit_window.bool_op_optmenu = bool_op_optmenu;
+ rule_edit_window.cond_scrolled_win = cond_scrolled_win;
+ rule_edit_window.cond_vbox = cond_vbox;
+ rule_edit_window.action_scrolled_win = action_scrolled_win;
+ rule_edit_window.action_vbox = action_vbox;
+
+ rule_edit_window.ok_btn = ok_btn;
+ rule_edit_window.cancel_btn = cancel_btn;
+}
+
+static void prefs_filter_edit_clear(void)
+{
+ while (rule_edit_window.cond_hbox_list) {
+ CondHBox *hbox =
+ (CondHBox *)rule_edit_window.cond_hbox_list->data;
+ prefs_filter_edit_remove_cond_hbox(hbox);
+ }
+ while (rule_edit_window.action_hbox_list) {
+ ActionHBox *hbox =
+ (ActionHBox *)rule_edit_window.action_hbox_list->data;
+ prefs_filter_edit_remove_action_hbox(hbox);
+ }
+
+ g_slist_free(rule_edit_window.hdr_list);
+ rule_edit_window.hdr_list = NULL;
+ procheader_header_list_destroy(rule_edit_window.rule_hdr_list);
+ rule_edit_window.rule_hdr_list = NULL;
+}
+
+static void prefs_filter_edit_rule_to_dialog(FilterRule *rule)
+{
+ gint index = 0;
+ static gint count = 1;
+
+ if (rule && rule->name)
+ gtk_entry_set_text(GTK_ENTRY(rule_edit_window.name_entry),
+ rule->name);
+ else {
+ gchar rule_name[32];
+ g_snprintf(rule_name, sizeof(rule_name), "Rule %d", count++);
+ gtk_entry_set_text(GTK_ENTRY(rule_edit_window.name_entry),
+ rule_name);
+ }
+
+ if (rule) {
+ index = menu_find_option_menu_index
+ (GTK_OPTION_MENU(rule_edit_window.bool_op_optmenu),
+ GINT_TO_POINTER(rule->bool_op), NULL);
+ if (index < 0)
+ index = 0;
+ }
+ if (index >= 0) {
+ gtk_option_menu_set_history
+ (GTK_OPTION_MENU(rule_edit_window.bool_op_optmenu),
+ index);
+ }
+
+ prefs_filter_edit_add_rule_cond(rule);
+ prefs_filter_edit_add_rule_action(rule);
+}
+
+static void prefs_filter_edit_set_header_list(FilterRule *rule)
+{
+ GSList *list;
+ GSList *rule_hdr_list = NULL;
+ GSList *cur;
+ FilterCond *cond;
+
+ g_slist_free(rule_edit_window.hdr_list);
+ rule_edit_window.hdr_list = NULL;
+ procheader_header_list_destroy(rule_edit_window.rule_hdr_list);
+ rule_edit_window.rule_hdr_list = NULL;
+
+ list = prefs_filter_get_header_list();
+ rule_edit_window.hdr_list = list;
+
+ if (!rule)
+ return;
+
+ for (cur = rule->cond_list; cur != NULL; cur = cur->next) {
+ cond = (FilterCond *)cur->data;
+
+ if (cond->type == FLT_COND_HEADER &&
+ procheader_find_header_list
+ (rule_hdr_list, cond->header_name) < 0)
+ rule_hdr_list = procheader_add_header_list
+ (rule_hdr_list, cond->header_name, NULL);
+ }
+
+ rule_edit_window.rule_hdr_list = rule_hdr_list;
+
+ rule_edit_window.hdr_list =
+ procheader_merge_header_list(list, rule_hdr_list);
+}
+
+static void prefs_filter_edit_update_header_list(void)
+{
+ GSList *list;
+
+ g_slist_free(rule_edit_window.hdr_list);
+ rule_edit_window.hdr_list = NULL;
+
+ list = prefs_filter_get_header_list();
+ rule_edit_window.hdr_list = list;
+
+ rule_edit_window.hdr_list =
+ procheader_merge_header_list(list,
+ rule_edit_window.rule_hdr_list);
+}
+
+static CondHBox *prefs_filter_edit_cond_hbox_create(void)
+{
+ CondHBox *cond_hbox;
+ GtkWidget *hbox;
+ GtkWidget *cond_type_optmenu;
+ GtkWidget *match_type_optmenu;
+ GtkWidget *size_match_optmenu;
+ GtkWidget *age_match_optmenu;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkWidget *key_entry;
+ GtkObject *spin_btn_adj;
+ GtkWidget *spin_btn;
+ GtkWidget *label;
+ GtkWidget *del_btn;
+ GtkWidget *add_btn;
+ GtkWidget *del_pixmap;
+ GtkWidget *add_pixmap;
+
+ cond_hbox = g_new0(CondHBox, 1);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+
+ cond_type_optmenu = gtk_option_menu_new();
+ gtk_widget_show(cond_type_optmenu);
+ gtk_box_pack_start(GTK_BOX(hbox), cond_type_optmenu, FALSE, FALSE, 0);
+
+#define COND_MENUITEM_ADD(str, action) \
+{ \
+ MENUITEM_ADD(menu, menuitem, str, action); \
+ g_signal_connect(G_OBJECT(menuitem), "activate", \
+ G_CALLBACK(prefs_filter_cond_activated_cb), \
+ cond_hbox); \
+}
+
+ menu = gtk_menu_new();
+ MENUITEM_ADD(menu, menuitem, NULL, PF_COND_SEPARATOR);
+ COND_MENUITEM_ADD(_("To or Cc"), PF_COND_TO_OR_CC);
+ COND_MENUITEM_ADD(_("Any header"), PF_COND_ANY_HEADER);
+ COND_MENUITEM_ADD(_("Edit header..."), PF_COND_EDIT_HEADER);
+
+ MENUITEM_ADD(menu, menuitem, NULL, PF_COND_SEPARATOR);
+ COND_MENUITEM_ADD(_("Message body"), PF_COND_BODY);
+ COND_MENUITEM_ADD(_("Result of command"), PF_COND_CMD_TEST);
+ COND_MENUITEM_ADD(_("Size"), PF_COND_SIZE);
+ COND_MENUITEM_ADD(_("Age"), PF_COND_AGE);
+ /* COND_MENUITEM_ADD(_("Account"), PF_COND_ACCOUNT); */
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(cond_type_optmenu), menu);
+
+#undef COND_MENUITEM_ADD
+
+ match_type_optmenu = gtk_option_menu_new();
+ gtk_widget_show(match_type_optmenu);
+ gtk_box_pack_start(GTK_BOX(hbox), match_type_optmenu, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new();
+ MENUITEM_ADD(menu, menuitem, _("contains"),
+ PF_MATCH_CONTAIN);
+ MENUITEM_ADD(menu, menuitem, _("doesn't contain"),
+ PF_MATCH_NOT_CONTAIN);
+ MENUITEM_ADD(menu, menuitem, _("is"),
+ PF_MATCH_EQUAL);
+ MENUITEM_ADD(menu, menuitem, _("is not"),
+ PF_MATCH_NOT_EQUAL);
+ MENUITEM_ADD(menu, menuitem, _("match to regex"),
+ PF_MATCH_REGEX);
+ MENUITEM_ADD(menu, menuitem, _("doesn't match to regex"),
+ PF_MATCH_NOT_REGEX);
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(match_type_optmenu), menu);
+
+ size_match_optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), size_match_optmenu, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new();
+ MENUITEM_ADD(menu, menuitem, _("is larger than"), PF_SIZE_LARGER);
+ MENUITEM_ADD(menu, menuitem, _("is smaller than"), PF_SIZE_SMALLER);
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(size_match_optmenu), menu);
+
+ age_match_optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), age_match_optmenu, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new();
+ MENUITEM_ADD(menu, menuitem, _("is longer than"), PF_AGE_LONGER);
+ MENUITEM_ADD(menu, menuitem, _("is shorter than"), PF_AGE_SHORTER);
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(age_match_optmenu), menu);
+
+ key_entry = gtk_entry_new();
+ gtk_widget_show(key_entry);
+ gtk_box_pack_start(GTK_BOX(hbox), key_entry, TRUE, TRUE, 0);
+
+ spin_btn_adj = gtk_adjustment_new(0, 0, 99999, 1, 10, 100);
+ spin_btn = gtk_spin_button_new(GTK_ADJUSTMENT(spin_btn_adj), 1, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), spin_btn, FALSE, FALSE, 0);
+ gtk_widget_set_size_request(spin_btn, 64, -1);
+ gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_btn), TRUE);
+
+ label = gtk_label_new(_("KB"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ del_pixmap = stock_pixmap_widget(rule_edit_window.window,
+ STOCK_PIXMAP_REMOVE);
+ gtk_widget_show(del_pixmap);
+
+ del_btn = gtk_button_new();
+ gtk_container_add(GTK_CONTAINER(del_btn), del_pixmap);
+ gtk_widget_show(del_btn);
+ gtk_box_pack_end(GTK_BOX(hbox), del_btn, FALSE, FALSE, 0);
+
+ add_pixmap = stock_pixmap_widget(rule_edit_window.window,
+ STOCK_PIXMAP_ADD);
+ gtk_widget_show(add_pixmap);
+
+ add_btn = gtk_button_new();
+ gtk_container_add(GTK_CONTAINER(add_btn), add_pixmap);
+ gtk_widget_show(add_btn);
+ gtk_box_pack_end(GTK_BOX(hbox), add_btn, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_filter_cond_del_cb), cond_hbox);
+ g_signal_connect(G_OBJECT(add_btn), "clicked",
+ G_CALLBACK(prefs_filter_cond_add_cb), cond_hbox);
+
+ cond_hbox->hbox = hbox;
+ cond_hbox->cond_type_optmenu = cond_type_optmenu;
+ cond_hbox->match_type_optmenu = match_type_optmenu;
+ cond_hbox->size_match_optmenu = size_match_optmenu;
+ cond_hbox->age_match_optmenu = age_match_optmenu;
+ cond_hbox->key_entry = key_entry;
+ cond_hbox->spin_btn = spin_btn;
+ cond_hbox->label = label;
+ cond_hbox->del_btn = del_btn;
+ cond_hbox->add_btn = add_btn;
+ cond_hbox->cur_type = PF_COND_HEADER;
+ cond_hbox->cur_header_name = NULL;
+
+ prefs_filter_edit_set_cond_header_menu(cond_hbox);
+ gtk_option_menu_set_history(GTK_OPTION_MENU(cond_type_optmenu), 0);
+
+ return cond_hbox;
+}
+
+static ActionHBox *prefs_filter_edit_action_hbox_create(void)
+{
+ ActionHBox *action_hbox;
+ GtkWidget *hbox;
+ GtkWidget *action_type_optmenu;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkWidget *label;
+ GtkWidget *folder_entry;
+ GtkWidget *cmd_entry;
+ GtkWidget *address_entry;
+ GtkWidget *folder_pixmap;
+ GtkWidget *folder_sel_btn;
+ GtkWidget *clabel_optmenu;
+ GtkWidget *del_btn;
+ GtkWidget *add_btn;
+ GtkWidget *del_pixmap;
+ GtkWidget *add_pixmap;
+
+ action_hbox = g_new0(ActionHBox, 1);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox);
+
+ action_type_optmenu = gtk_option_menu_new();
+ gtk_widget_show(action_type_optmenu);
+ gtk_box_pack_start(GTK_BOX(hbox), action_type_optmenu, FALSE, FALSE, 0);
+
+ memset(action_hbox->action_type_menu_items, 0,
+ sizeof(action_hbox->action_type_menu_items));
+
+#define ACTION_MENUITEM_ADD(str, action) \
+{ \
+ MENUITEM_ADD(menu, menuitem, str, action); \
+ action_hbox->action_type_menu_items[action] = menuitem; \
+ g_signal_connect(G_OBJECT(menuitem), "activate", \
+ G_CALLBACK(prefs_filter_action_activated_cb), \
+ action_hbox); \
+}
+
+ menu = gtk_menu_new();
+ ACTION_MENUITEM_ADD(_("Move to"), PF_ACTION_MOVE);
+ ACTION_MENUITEM_ADD(_("Copy to"), PF_ACTION_COPY);
+ ACTION_MENUITEM_ADD(_("Don't receive"), PF_ACTION_NOT_RECEIVE);
+ ACTION_MENUITEM_ADD(_("Delete from server"), PF_ACTION_DELETE);
+
+ MENUITEM_ADD(menu, menuitem, NULL, PF_ACTION_SEPARATOR);
+ ACTION_MENUITEM_ADD(_("Set mark"), PF_ACTION_MARK);
+ ACTION_MENUITEM_ADD(_("Set color"), PF_ACTION_COLOR_LABEL);
+ ACTION_MENUITEM_ADD(_("Mark as read"), PF_ACTION_MARK_READ);
+
+#if 0
+ MENUITEM_ADD(menu, menuitem, NULL, PF_ACTION_SEPARATOR);
+ ACTION_MENUITEM_ADD(_("Forward"), PF_ACTION_FORWARD);
+ ACTION_MENUITEM_ADD(_("Forward as attachment"), PF_ACTION_FORWARD_AS_ATTACHMENT);
+ ACTION_MENUITEM_ADD(_("Redirect"), PF_ACTION_REDIRECT);
+#endif
+
+ MENUITEM_ADD(menu, menuitem, NULL, PF_ACTION_SEPARATOR);
+ ACTION_MENUITEM_ADD(_("Execute command"), PF_ACTION_EXEC);
+
+ MENUITEM_ADD(menu, menuitem, NULL, PF_ACTION_SEPARATOR);
+ ACTION_MENUITEM_ADD(_("Stop rule evaluation"), PF_ACTION_STOP_EVAL);
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(action_type_optmenu), menu);
+
+#undef ACTION_MENUITEM_ADD
+
+ label = gtk_label_new(_("folder:"));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ folder_entry = gtk_entry_new();
+ gtk_widget_show(folder_entry);
+ gtk_box_pack_start(GTK_BOX(hbox), folder_entry, TRUE, TRUE, 0);
+
+ folder_pixmap = stock_pixmap_widget(rule_edit_window.window,
+ STOCK_PIXMAP_DIR_OPEN);
+ gtk_widget_show(folder_pixmap);
+
+ folder_sel_btn = gtk_button_new();
+ gtk_container_add(GTK_CONTAINER(folder_sel_btn), folder_pixmap);
+ gtk_widget_show(folder_sel_btn);
+ gtk_box_pack_start(GTK_BOX(hbox), folder_sel_btn, FALSE, FALSE, 0);
+
+ cmd_entry = gtk_entry_new();
+ gtk_widget_show(cmd_entry);
+ gtk_box_pack_start(GTK_BOX(hbox), cmd_entry, TRUE, TRUE, 0);
+
+ address_entry = gtk_entry_new();
+ gtk_widget_show(address_entry);
+ gtk_box_pack_start(GTK_BOX(hbox), address_entry, TRUE, TRUE, 0);
+
+ clabel_optmenu = gtk_option_menu_new();
+ gtk_widget_show(clabel_optmenu);
+ gtk_box_pack_start(GTK_BOX(hbox), clabel_optmenu, FALSE, FALSE, 0);
+
+ menu = colorlabel_create_color_menu();
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(clabel_optmenu), menu);
+
+ del_pixmap = stock_pixmap_widget(rule_edit_window.window,
+ STOCK_PIXMAP_REMOVE);
+ gtk_widget_show(del_pixmap);
+
+ del_btn = gtk_button_new();
+ gtk_container_add(GTK_CONTAINER(del_btn), del_pixmap);
+ gtk_widget_show(del_btn);
+ gtk_box_pack_end(GTK_BOX(hbox), del_btn, FALSE, FALSE, 0);
+
+ add_pixmap = stock_pixmap_widget(rule_edit_window.window,
+ STOCK_PIXMAP_ADD);
+ gtk_widget_show(add_pixmap);
+
+ add_btn = gtk_button_new();
+ gtk_container_add(GTK_CONTAINER(add_btn), add_pixmap);
+ gtk_widget_show(add_btn);
+ gtk_box_pack_end(GTK_BOX(hbox), add_btn, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(folder_sel_btn), "clicked",
+ G_CALLBACK(prefs_filter_action_select_dest_cb),
+ action_hbox);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_filter_action_del_cb), action_hbox);
+ g_signal_connect(G_OBJECT(add_btn), "clicked",
+ G_CALLBACK(prefs_filter_action_add_cb), action_hbox);
+
+ action_hbox->hbox = hbox;
+ action_hbox->action_type_optmenu = action_type_optmenu;
+ action_hbox->label = label;
+ action_hbox->folder_entry = folder_entry;
+ action_hbox->cmd_entry = cmd_entry;
+ action_hbox->address_entry = address_entry;
+ action_hbox->folder_sel_btn = folder_sel_btn;
+ action_hbox->clabel_optmenu = clabel_optmenu;
+ action_hbox->del_btn = del_btn;
+ action_hbox->add_btn = add_btn;
+
+ return action_hbox;
+}
+
+static void prefs_filter_edit_cond_hbox_set(CondHBox *hbox, FilterCond *cond)
+{
+ GtkOptionMenu *cond_type_optmenu =
+ GTK_OPTION_MENU(hbox->cond_type_optmenu);
+ GtkOptionMenu *match_type_optmenu =
+ GTK_OPTION_MENU(hbox->match_type_optmenu);
+ gint cond_index = -1;
+ gint match_index = -1;
+ CondMenuType cond_type = PF_COND_NONE;
+ MatchMenuType match_type = PF_MATCH_NONE;
+ SizeMatchType size_type = PF_SIZE_LARGER;
+ AgeMatchType age_type = PF_AGE_LONGER;
+
+ switch (cond->type) {
+ case FLT_COND_HEADER:
+ cond_type = PF_COND_HEADER; break;
+ case FLT_COND_TO_OR_CC:
+ cond_type = PF_COND_TO_OR_CC; break;
+ case FLT_COND_ANY_HEADER:
+ cond_type = PF_COND_ANY_HEADER; break;
+ case FLT_COND_BODY:
+ cond_type = PF_COND_BODY; break;
+ case FLT_COND_CMD_TEST:
+ cond_type = PF_COND_CMD_TEST; break;
+ case FLT_COND_SIZE_GREATER:
+ cond_type = PF_COND_SIZE;
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ size_type = PF_SIZE_SMALLER;
+ else
+ size_type = PF_SIZE_LARGER;
+ break;
+ case FLT_COND_AGE_GREATER:
+ cond_type = PF_COND_AGE;
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ age_type = PF_AGE_SHORTER;
+ else
+ age_type = PF_AGE_LONGER;
+ break;
+ case FLT_COND_ACCOUNT:
+ cond_type = PF_COND_ACCOUNT; break;
+ default:
+ break;
+ }
+
+ switch (cond->type) {
+ case FLT_COND_HEADER:
+ case FLT_COND_TO_OR_CC:
+ case FLT_COND_ANY_HEADER:
+ case FLT_COND_BODY:
+ switch (cond->match_type) {
+ case FLT_CONTAIN:
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ match_type = PF_MATCH_NOT_CONTAIN;
+ else
+ match_type = PF_MATCH_CONTAIN;
+ break;
+ case FLT_EQUAL:
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ match_type = PF_MATCH_NOT_EQUAL;
+ else
+ match_type = PF_MATCH_EQUAL;
+ break;
+ case FLT_REGEX:
+ if (FLT_IS_NOT_MATCH(cond->match_flag))
+ match_type = PF_MATCH_NOT_REGEX;
+ else
+ match_type = PF_MATCH_REGEX;
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (cond_type == PF_COND_HEADER)
+ cond_index = procheader_find_header_list
+ (rule_edit_window.hdr_list, cond->header_name);
+ else
+ cond_index = menu_find_option_menu_index
+ (cond_type_optmenu, GINT_TO_POINTER(cond_type), NULL);
+ if (cond_index >= 0) {
+ GtkWidget *menuitem;
+
+ if (cond_type == PF_COND_SIZE || cond_type == PF_COND_AGE) {
+ gtk_spin_button_set_value
+ (GTK_SPIN_BUTTON(hbox->spin_btn),
+ (gfloat)cond->int_value);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(hbox->key_entry),
+ cond->str_value ?
+ cond->str_value : "");
+ }
+ gtk_option_menu_set_history(cond_type_optmenu, cond_index);
+ menuitem = gtk_menu_get_active
+ (GTK_MENU(gtk_option_menu_get_menu(cond_type_optmenu)));
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+ }
+
+ match_index = menu_find_option_menu_index
+ (match_type_optmenu, GINT_TO_POINTER(match_type), NULL);
+ if (match_index >= 0)
+ gtk_option_menu_set_history(match_type_optmenu, match_index);
+ if (cond_type == PF_COND_SIZE)
+ gtk_option_menu_set_history
+ (GTK_OPTION_MENU(hbox->size_match_optmenu), size_type);
+ else if (cond_type == PF_COND_AGE)
+ gtk_option_menu_set_history
+ (GTK_OPTION_MENU(hbox->age_match_optmenu), age_type);
+}
+
+static void prefs_filter_edit_action_hbox_set(ActionHBox *hbox,
+ FilterAction *action)
+{
+ GtkOptionMenu *type_optmenu = GTK_OPTION_MENU(hbox->action_type_optmenu);
+ GtkWidget *menu;
+ ActionMenuType type = PF_ACTION_NONE;
+
+ menu = gtk_option_menu_get_menu(type_optmenu);
+
+ switch (action->type) {
+ case FLT_ACTION_MOVE:
+ type = PF_ACTION_MOVE; break;
+ case FLT_ACTION_COPY:
+ type = PF_ACTION_COPY; break;
+ case FLT_ACTION_NOT_RECEIVE:
+ type = PF_ACTION_NOT_RECEIVE; break;
+ case FLT_ACTION_DELETE:
+ type = PF_ACTION_DELETE; break;
+ case FLT_ACTION_EXEC:
+ type = PF_ACTION_EXEC; break;
+ case FLT_ACTION_MARK:
+ type = PF_ACTION_MARK; break;
+ case FLT_ACTION_COLOR_LABEL:
+ type = PF_ACTION_COLOR_LABEL; break;
+ case FLT_ACTION_MARK_READ:
+ type = PF_ACTION_MARK_READ; break;
+ case FLT_ACTION_STOP_EVAL:
+ type = PF_ACTION_STOP_EVAL; break;
+ default:
+ break;
+ }
+
+ switch (type) {
+ case PF_ACTION_MOVE:
+ case PF_ACTION_COPY:
+ gtk_entry_set_text(GTK_ENTRY(hbox->folder_entry),
+ action->str_value ? action->str_value : "");
+ break;
+ case PF_ACTION_EXEC:
+ gtk_entry_set_text(GTK_ENTRY(hbox->cmd_entry),
+ action->str_value ? action->str_value : "");
+ break;
+ case PF_ACTION_COLOR_LABEL:
+ gtk_option_menu_set_history
+ (GTK_OPTION_MENU(hbox->clabel_optmenu),
+ action->int_value - 1);
+ break;
+ default:
+ break;
+ }
+
+ prefs_filter_edit_set_action_hbox_widgets(hbox, type);
+}
+
+static void prefs_filter_edit_cond_hbox_select(CondHBox *hbox,
+ CondMenuType type,
+ const gchar *header_name)
+{
+ gint index;
+ GtkOptionMenu *cond_type_optmenu =
+ GTK_OPTION_MENU(hbox->cond_type_optmenu);
+ GtkWidget *menu;
+
+ if (type == PF_COND_HEADER) {
+ if (header_name)
+ index = procheader_find_header_list
+ (rule_edit_window.hdr_list, header_name);
+ else
+ index = 0;
+ } else
+ index = menu_find_option_menu_index
+ (cond_type_optmenu, GINT_TO_POINTER(type), NULL);
+
+ if (index < 0)
+ index = 0;
+
+ menu = gtk_option_menu_get_menu(cond_type_optmenu);
+ gtk_option_menu_set_history(cond_type_optmenu, index);
+}
+
+static void prefs_filter_edit_set_cond_hbox_widgets(CondHBox *hbox,
+ CondMenuType type)
+{
+ switch (type) {
+ case PF_COND_HEADER:
+ case PF_COND_TO_OR_CC:
+ case PF_COND_ANY_HEADER:
+ case PF_COND_BODY:
+ gtk_widget_show(hbox->match_type_optmenu);
+ gtk_widget_hide(hbox->size_match_optmenu);
+ gtk_widget_hide(hbox->age_match_optmenu);
+ gtk_widget_show(hbox->key_entry);
+ gtk_widget_hide(hbox->spin_btn);
+ gtk_widget_hide(hbox->label);
+ break;
+ case PF_COND_CMD_TEST:
+ gtk_widget_hide(hbox->match_type_optmenu);
+ gtk_widget_hide(hbox->size_match_optmenu);
+ gtk_widget_hide(hbox->age_match_optmenu);
+ gtk_widget_show(hbox->key_entry);
+ gtk_widget_hide(hbox->spin_btn);
+ gtk_widget_hide(hbox->label);
+ break;
+ case PF_COND_SIZE:
+ gtk_widget_hide(hbox->match_type_optmenu);
+ gtk_widget_show(hbox->size_match_optmenu);
+ gtk_widget_hide(hbox->age_match_optmenu);
+ gtk_widget_hide(hbox->key_entry);
+ gtk_widget_show(hbox->spin_btn);
+ gtk_widget_show(hbox->label);
+ break;
+ case PF_COND_AGE:
+ gtk_widget_hide(hbox->match_type_optmenu);
+ gtk_widget_hide(hbox->size_match_optmenu);
+ gtk_widget_show(hbox->age_match_optmenu);
+ gtk_widget_hide(hbox->key_entry);
+ gtk_widget_show(hbox->spin_btn);
+ gtk_widget_hide(hbox->label);
+ break;
+ case PF_COND_ACCOUNT:
+ gtk_widget_hide(hbox->match_type_optmenu);
+ gtk_widget_hide(hbox->size_match_optmenu);
+ gtk_widget_hide(hbox->age_match_optmenu);
+ gtk_widget_hide(hbox->key_entry);
+ /* gtk_widget_show(hbox->account_optmenu); */
+ gtk_widget_hide(hbox->spin_btn);
+ gtk_widget_hide(hbox->label);
+ break;
+ default:
+ break;
+ }
+}
+
+static void prefs_filter_edit_set_action_hbox_widgets(ActionHBox *hbox,
+ ActionMenuType type)
+{
+ GtkOptionMenu *type_optmenu = GTK_OPTION_MENU(hbox->action_type_optmenu);
+ gint index;
+
+ switch (type) {
+ case PF_ACTION_MOVE:
+ case PF_ACTION_COPY:
+ gtk_widget_show(hbox->label);
+ gtk_label_set_text(GTK_LABEL(hbox->label), _("folder:"));
+ gtk_widget_show(hbox->folder_entry);
+ gtk_widget_show(hbox->folder_sel_btn);
+ gtk_widget_hide(hbox->cmd_entry);
+ gtk_widget_hide(hbox->address_entry);
+ gtk_widget_hide(hbox->clabel_optmenu);
+ break;
+ case PF_ACTION_NOT_RECEIVE:
+ case PF_ACTION_DELETE:
+ case PF_ACTION_MARK:
+ case PF_ACTION_MARK_READ:
+ case PF_ACTION_STOP_EVAL:
+ gtk_widget_hide(hbox->label);
+ gtk_widget_hide(hbox->folder_entry);
+ gtk_widget_hide(hbox->folder_sel_btn);
+ gtk_widget_hide(hbox->cmd_entry);
+ gtk_widget_hide(hbox->address_entry);
+ gtk_widget_hide(hbox->clabel_optmenu);
+ break;
+ case PF_ACTION_EXEC:
+ case PF_ACTION_EXEC_ASYNC:
+ gtk_widget_hide(hbox->label);
+ gtk_widget_hide(hbox->folder_entry);
+ gtk_widget_hide(hbox->folder_sel_btn);
+ gtk_widget_show(hbox->cmd_entry);
+ gtk_widget_hide(hbox->address_entry);
+ gtk_widget_hide(hbox->clabel_optmenu);
+ break;
+ case PF_ACTION_COLOR_LABEL:
+ gtk_widget_hide(hbox->label);
+ gtk_widget_hide(hbox->folder_entry);
+ gtk_widget_hide(hbox->folder_sel_btn);
+ gtk_widget_hide(hbox->cmd_entry);
+ gtk_widget_hide(hbox->address_entry);
+ gtk_widget_show(hbox->clabel_optmenu);
+ break;
+ case PF_ACTION_FORWARD:
+ case PF_ACTION_FORWARD_AS_ATTACHMENT:
+ case PF_ACTION_REDIRECT:
+ gtk_widget_show(hbox->label);
+ gtk_label_set_text(GTK_LABEL(hbox->label), _("address:"));
+ gtk_widget_hide(hbox->folder_entry);
+ gtk_widget_hide(hbox->folder_sel_btn);
+ gtk_widget_hide(hbox->cmd_entry);
+ gtk_widget_show(hbox->address_entry);
+ gtk_widget_hide(hbox->clabel_optmenu);
+ break;
+ default:
+ break;
+ }
+
+ index = menu_find_option_menu_index(type_optmenu, GINT_TO_POINTER(type),
+ NULL);
+ gtk_option_menu_set_history(type_optmenu, index);
+ prefs_filter_edit_set_action_hbox_menus_sensitive();
+}
+
+static void prefs_filter_edit_set_action_hbox_menu_sensitive
+ (ActionHBox *hbox, ActionMenuType type, gboolean sensitive)
+{
+ GtkWidget *menuitem;
+
+ menuitem = hbox->action_type_menu_items[type];
+ if (menuitem)
+ gtk_widget_set_sensitive(menuitem, sensitive);
+}
+
+static void prefs_filter_edit_set_action_hbox_menus_sensitive(void)
+{
+ GSList *cur;
+ ActionHBox *cur_hbox;
+ ActionMenuType menu_type;
+ ActionMenuType cur_type;
+ gboolean action_menu_selection[PF_ACTION_NONE];
+ gboolean action_menu_sensitive[PF_ACTION_NONE];
+
+ prefs_filter_edit_get_action_hbox_menus_selection
+ (action_menu_selection);
+
+ for (cur = rule_edit_window.action_hbox_list; cur != NULL;
+ cur = cur->next) {
+ cur_hbox = (ActionHBox *)cur->data;
+ menu_type = prefs_filter_edit_get_action_hbox_type(cur_hbox);
+ for (cur_type = PF_ACTION_MOVE; cur_type < PF_ACTION_NONE;
+ cur_type++)
+ action_menu_sensitive[cur_type] = TRUE;
+
+ for (cur_type = PF_ACTION_MOVE; cur_type < PF_ACTION_NONE;
+ cur_type++) {
+ switch (cur_type) {
+ case PF_ACTION_MOVE:
+ case PF_ACTION_NOT_RECEIVE:
+ case PF_ACTION_DELETE:
+ if (action_menu_selection[cur_type] == TRUE &&
+ menu_type != cur_type) {
+ action_menu_sensitive[PF_ACTION_MOVE] = FALSE;
+ action_menu_sensitive[PF_ACTION_NOT_RECEIVE] = FALSE;
+ action_menu_sensitive[PF_ACTION_DELETE] = FALSE;
+ }
+ break;
+ case PF_ACTION_MARK:
+ case PF_ACTION_COLOR_LABEL:
+ case PF_ACTION_MARK_READ:
+ case PF_ACTION_STOP_EVAL:
+ if (action_menu_selection[cur_type] == TRUE &&
+ menu_type != cur_type)
+ action_menu_sensitive[cur_type] = FALSE;
+ break;
+ default:
+ break;
+ }
+ }
+
+ for (cur_type = PF_ACTION_MOVE; cur_type < PF_ACTION_NONE;
+ cur_type++) {
+ prefs_filter_edit_set_action_hbox_menu_sensitive
+ (cur_hbox, cur_type,
+ action_menu_sensitive[cur_type]);
+ }
+ }
+}
+
+static void prefs_filter_edit_get_action_hbox_menus_selection(gboolean *selection)
+{
+ GSList *cur;
+ ActionHBox *cur_hbox;
+ ActionMenuType menu_type;
+ ActionMenuType cur_type;
+
+ for (cur_type = PF_ACTION_MOVE; cur_type < PF_ACTION_NONE; cur_type++)
+ selection[cur_type] = FALSE;
+
+ for (cur = rule_edit_window.action_hbox_list; cur != NULL;
+ cur = cur->next) {
+ cur_hbox = (ActionHBox *)cur->data;
+ menu_type = prefs_filter_edit_get_action_hbox_type(cur_hbox);
+ if (menu_type >= PF_ACTION_MOVE && menu_type < PF_ACTION_NONE)
+ selection[menu_type] = TRUE;
+ }
+}
+
+static ActionMenuType prefs_filter_edit_get_action_hbox_type(ActionHBox *hbox)
+{
+ GtkWidget *menuitem;
+ ActionMenuType type;
+
+ g_return_val_if_fail(hbox != NULL, PF_ACTION_NONE);
+
+ menuitem = gtk_menu_get_active
+ (GTK_MENU(gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(hbox->action_type_optmenu))));
+ type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem),
+ MENU_VAL_ID));
+
+ return type;
+}
+
+static void prefs_filter_edit_insert_cond_hbox(CondHBox *hbox, gint pos)
+{
+ g_return_if_fail(hbox != NULL);
+
+ if (!rule_edit_window.cond_hbox_list) {
+ gtk_widget_set_sensitive(hbox->del_btn, FALSE);
+ } else if (rule_edit_window.cond_hbox_list &&
+ !rule_edit_window.cond_hbox_list->next) {
+ CondHBox *top_hbox =
+ (CondHBox *)rule_edit_window.cond_hbox_list->data;
+ gtk_widget_set_sensitive(top_hbox->del_btn, TRUE);
+ }
+
+ gtk_box_pack_start(GTK_BOX(rule_edit_window.cond_vbox),
+ hbox->hbox, FALSE, FALSE, 0);
+ if (pos >= 0) {
+ gtk_box_reorder_child(GTK_BOX(rule_edit_window.cond_vbox),
+ hbox->hbox, pos);
+ }
+
+ rule_edit_window.cond_hbox_list =
+ g_slist_insert(rule_edit_window.cond_hbox_list, hbox, pos);
+}
+
+static void prefs_filter_edit_insert_action_hbox(ActionHBox *hbox, gint pos)
+{
+ g_return_if_fail(hbox != NULL);
+
+ if (!rule_edit_window.action_hbox_list) {
+ gtk_widget_set_sensitive(hbox->del_btn, FALSE);
+ } else if (rule_edit_window.action_hbox_list &&
+ !rule_edit_window.action_hbox_list->next) {
+ ActionHBox *top_hbox =
+ (ActionHBox *)rule_edit_window.action_hbox_list->data;
+ gtk_widget_set_sensitive(top_hbox->del_btn, TRUE);
+ }
+
+ gtk_box_pack_start(GTK_BOX(rule_edit_window.action_vbox),
+ hbox->hbox, FALSE, FALSE, 0);
+ if (pos >= 0) {
+ gtk_box_reorder_child(GTK_BOX(rule_edit_window.action_vbox),
+ hbox->hbox, pos);
+ }
+
+ rule_edit_window.action_hbox_list =
+ g_slist_insert(rule_edit_window.action_hbox_list, hbox, pos);
+}
+
+static void prefs_filter_edit_remove_cond_hbox(CondHBox *hbox)
+{
+ g_return_if_fail(hbox != NULL);
+ g_return_if_fail(rule_edit_window.cond_hbox_list != NULL);
+
+ rule_edit_window.cond_hbox_list =
+ g_slist_remove(rule_edit_window.cond_hbox_list, hbox);
+ gtk_widget_destroy(hbox->hbox);
+ g_free(hbox);
+
+ if (rule_edit_window.cond_hbox_list &&
+ !rule_edit_window.cond_hbox_list->next) {
+ hbox = (CondHBox *)rule_edit_window.cond_hbox_list->data;
+ gtk_widget_set_sensitive(hbox->del_btn, FALSE);
+ }
+}
+
+static void prefs_filter_edit_remove_action_hbox(ActionHBox *hbox)
+{
+ g_return_if_fail(hbox != NULL);
+ g_return_if_fail(rule_edit_window.action_hbox_list != NULL);
+
+ rule_edit_window.action_hbox_list =
+ g_slist_remove(rule_edit_window.action_hbox_list, hbox);
+ gtk_widget_destroy(hbox->hbox);
+ g_free(hbox);
+
+ prefs_filter_edit_set_action_hbox_menus_sensitive();
+
+ if (rule_edit_window.action_hbox_list &&
+ !rule_edit_window.action_hbox_list->next) {
+ hbox = (ActionHBox *)rule_edit_window.action_hbox_list->data;
+ gtk_widget_set_sensitive(hbox->del_btn, FALSE);
+ }
+}
+
+static void prefs_filter_edit_add_rule_cond(FilterRule *rule)
+{
+ CondHBox *hbox;
+ GSList *cur;
+ FilterCond *cond;
+
+ if (!rule || !rule->cond_list) {
+ hbox = prefs_filter_edit_cond_hbox_create();
+ prefs_filter_edit_set_cond_hbox_widgets(hbox, PF_COND_HEADER);
+ prefs_filter_edit_insert_cond_hbox(hbox, -1);
+ return;
+ }
+
+ for (cur = rule->cond_list; cur != NULL; cur = cur->next) {
+ cond = (FilterCond *)cur->data;
+
+ hbox = prefs_filter_edit_cond_hbox_create();
+ prefs_filter_edit_cond_hbox_set(hbox, cond);
+ prefs_filter_edit_insert_cond_hbox(hbox, -1);
+ }
+}
+
+static void prefs_filter_edit_add_rule_action(FilterRule *rule)
+{
+ ActionHBox *hbox;
+ GSList *cur;
+
+ if (!rule || !rule->action_list) {
+ hbox = prefs_filter_edit_action_hbox_create();
+ prefs_filter_edit_insert_action_hbox(hbox, -1);
+ prefs_filter_edit_set_action_hbox_widgets(hbox, PF_ACTION_MOVE);
+ return;
+ }
+
+ for (cur = rule->action_list; cur != NULL; cur = cur->next) {
+ FilterAction *action = (FilterAction *)cur->data;
+
+ hbox = prefs_filter_edit_action_hbox_create();
+ prefs_filter_edit_insert_action_hbox(hbox, -1);
+ prefs_filter_edit_action_hbox_set(hbox, action);
+ }
+}
+
+static void prefs_filter_edit_set_cond_header_menu(CondHBox *hbox)
+{
+ GSList *cur;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ gint pos = 0;
+ GList *child;
+
+ menu = gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(hbox->cond_type_optmenu));
+
+ /* destroy header items */
+ child = GTK_MENU_SHELL(menu)->children;
+ while (child != NULL) {
+ GList *next = child->next;
+ menuitem = GTK_WIDGET(child->data);
+ if (!g_object_get_data(G_OBJECT(menuitem), "header_str"))
+ break;
+ gtk_widget_destroy(menuitem);
+ child = next;
+ }
+
+ for (cur = rule_edit_window.hdr_list; cur != NULL;
+ cur = cur->next, pos++) {
+ Header *header = (Header *)cur->data;
+
+ menuitem = gtk_menu_item_new_with_label(header->name);
+ gtk_widget_show(menuitem);
+ gtk_menu_insert(GTK_MENU(menu), menuitem, pos);
+ g_object_set_data(G_OBJECT(menuitem), MENU_VAL_ID,
+ GINT_TO_POINTER(PF_COND_HEADER));
+ g_object_set_data(G_OBJECT(menuitem), "header_str",
+ header->name);
+ g_signal_connect(G_OBJECT(menuitem), "activate",
+ G_CALLBACK(prefs_filter_cond_activated_cb),
+ hbox);
+ }
+
+ if (hbox->cur_type == PF_COND_HEADER)
+ prefs_filter_edit_cond_hbox_select
+ (hbox, hbox->cur_type, hbox->cur_header_name);
+}
+
+static void prefs_filter_edit_activate_cond_header(const gchar *header)
+{
+ gint index;
+ CondHBox *hbox;
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GList *cur;
+ gchar *menu_header;
+
+ g_return_if_fail(header != NULL);
+ g_return_if_fail(rule_edit_window.cond_hbox_list != NULL);
+
+ hbox = (CondHBox *)rule_edit_window.cond_hbox_list->data;
+ menu = gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(hbox->cond_type_optmenu));
+
+ for (cur = GTK_MENU_SHELL(menu)->children, index = 0;
+ cur != NULL; cur = cur->next, index++) {
+ menuitem = GTK_WIDGET(cur->data);
+ menu_header = g_object_get_data(G_OBJECT(menuitem),
+ "header_str");
+ if (!menu_header)
+ break;
+ if (!g_strcasecmp(menu_header, header)) {
+ gtk_option_menu_set_history
+ (GTK_OPTION_MENU(hbox->cond_type_optmenu),
+ index);
+ gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
+ break;
+ }
+ }
+}
+
+static gint edit_header_list_dialog_deleted(GtkWidget *widget,
+ GdkEventAny *event, gpointer data)
+{
+ edit_header_list_dialog.finished = TRUE;
+ return TRUE;
+}
+
+static gboolean edit_header_list_dialog_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ edit_header_list_dialog.finished = TRUE;
+ return FALSE;
+}
+
+static void edit_header_list_dialog_add(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_header_list_dialog.clist);
+ const gchar *text;
+ gchar *ctext[1];
+ gint row;
+ gchar *row_text;
+
+ text = gtk_entry_get_text(GTK_ENTRY(edit_header_list_dialog.entry));
+ if (text[0] == '\0') return;
+
+ for (row = 0; gtk_clist_get_text(clist, row, 0, &row_text) != 0;
+ row++) {
+ if (g_strcasecmp(row_text, text) == 0) return;
+ }
+
+ ctext[0] = (gchar *)text;
+ gtk_clist_append(clist, ctext);
+}
+
+static void edit_header_list_dialog_delete(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_header_list_dialog.clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ gtk_clist_remove(clist, row);
+}
+
+static void edit_header_list_dialog_ok(void)
+{
+ edit_header_list_dialog.finished = TRUE;
+ edit_header_list_dialog.ok = TRUE;
+}
+
+static void edit_header_list_dialog_cancel(void)
+{
+ edit_header_list_dialog.finished = TRUE;
+}
+
+static void prefs_filter_edit_edit_header_list_dialog_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+
+ GtkWidget *vbox2;
+ GtkWidget *scrwin;
+ GtkWidget *clist;
+
+ GtkWidget *entry_hbox;
+ GtkWidget *label;
+ GtkWidget *entry;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *add_btn;
+ GtkWidget *del_btn;
+
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ gchar *title[1];
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_title(GTK_WINDOW(window), _("Edit header list"));
+
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(edit_header_list_dialog_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(edit_header_list_dialog_key_pressed), NULL);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+
+ vbox2 = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
+
+ scrwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_set_size_request(scrwin, 120, 160);
+ gtk_box_pack_start(GTK_BOX(vbox2), scrwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Headers");
+ clist = gtk_clist_new_with_titles(1, title);
+ gtk_container_add(GTK_CONTAINER(scrwin), clist);
+ gtk_clist_set_column_width(GTK_CLIST(clist), 0, 80);
+ gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[0].button,
+ GTK_CAN_FOCUS);
+
+ entry_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(vbox), entry_hbox, FALSE, TRUE, 0);
+
+ label = gtk_label_new(_("Header:"));
+ gtk_box_pack_start(GTK_BOX(entry_hbox), label, FALSE, FALSE, 0);
+
+ entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(entry_hbox), entry, TRUE, TRUE, 0);
+
+ btn_vbox = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(hbox), btn_vbox, FALSE, FALSE, 0);
+
+ add_btn = gtk_button_new_with_label(_("Add"));
+ gtk_box_pack_start(GTK_BOX(btn_vbox), add_btn, FALSE, FALSE, 0);
+
+ del_btn = gtk_button_new_with_label(_(" Delete "));
+ gtk_box_pack_start(GTK_BOX(btn_vbox), del_btn, FALSE, FALSE, 0);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(add_btn), "clicked",
+ G_CALLBACK(edit_header_list_dialog_add), NULL);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(edit_header_list_dialog_delete), NULL);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(edit_header_list_dialog_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(edit_header_list_dialog_cancel), NULL);
+
+ manage_window_set_transient(GTK_WINDOW(window));
+
+ gtk_widget_show_all(window);
+
+ edit_header_list_dialog.window = window;
+ edit_header_list_dialog.clist = clist;
+ edit_header_list_dialog.entry = entry;
+ edit_header_list_dialog.finished = FALSE;
+ edit_header_list_dialog.ok = FALSE;
+}
+
+static void prefs_filter_edit_edit_header_list_dialog_set(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_header_list_dialog.clist);
+ GSList *list;
+ GSList *cur;
+ gchar *text[1];
+
+ gtk_clist_freeze(clist);
+
+ list = prefs_filter_get_user_header_list();
+ for (cur = list; cur != NULL; cur = cur->next) {
+ Header *header = (Header *)cur->data;
+ text[0] = header->name;
+ gtk_clist_append(clist, text);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+static GSList *prefs_filter_edit_edit_header_list_dialog_get(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_header_list_dialog.clist);
+ gint row;
+ gchar *text;
+ GSList *list = NULL;
+
+ for (row = 0; gtk_clist_get_text(clist, row, 0, &text) != 0; row++)
+ list = procheader_add_header_list(list, text, NULL);
+
+ return list;
+}
+
+static void prefs_filter_edit_edit_header_list(void)
+{
+ GSList *list;
+ GSList *cur;
+
+ prefs_filter_edit_edit_header_list_dialog_create();
+ prefs_filter_edit_edit_header_list_dialog_set();
+
+ while (edit_header_list_dialog.finished == FALSE)
+ gtk_main_iteration();
+
+ if (edit_header_list_dialog.ok == TRUE) {
+ list = prefs_filter_edit_edit_header_list_dialog_get();
+ prefs_filter_set_user_header_list(list);
+ prefs_filter_edit_update_header_list();
+ for (cur = rule_edit_window.cond_hbox_list; cur != NULL;
+ cur = cur->next) {
+ CondHBox *hbox = (CondHBox *)cur->data;
+ prefs_filter_edit_set_cond_header_menu(hbox);
+ }
+ }
+
+ gtk_widget_destroy(edit_header_list_dialog.window);
+ edit_header_list_dialog.window = NULL;
+ edit_header_list_dialog.clist = NULL;
+ edit_header_list_dialog.entry = NULL;
+ edit_header_list_dialog.finished = FALSE;
+ edit_header_list_dialog.ok = FALSE;
+}
+
+static FilterRule *prefs_filter_edit_dialog_to_rule(void)
+{
+ FilterRule *rule = NULL;
+ GSList *cur;
+ const gchar *rule_name;
+ FilterBoolOp bool_op = FLT_OR;
+ GSList *cond_list = NULL;
+ GSList *action_list = NULL;
+ GtkWidget *bool_op_menuitem;
+ gchar *error_msg = NULL;
+
+ rule_name = gtk_entry_get_text(GTK_ENTRY(rule_edit_window.name_entry));
+ if (!rule_name || *rule_name == '\0') {
+ error_msg = _("Rule name is not specified.");
+ goto error;
+ }
+
+ bool_op_menuitem = gtk_menu_get_active
+ (GTK_MENU(gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(rule_edit_window.bool_op_optmenu))));
+ bool_op = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(bool_op_menuitem), MENU_VAL_ID));
+
+ for (cur = rule_edit_window.cond_hbox_list; cur != NULL;
+ cur = cur->next) {
+ CondHBox *hbox = (CondHBox *)cur->data;
+ GtkWidget *cond_type_menuitem;
+ CondMenuType cond_menu_type;
+ MatchMenuType match_menu_type;
+ const gchar *header_name;
+ const gchar *key_str;
+ gint int_value;
+ FilterCond *cond = NULL;
+ FilterMatchType match_type = FLT_CONTAIN;
+ FilterMatchFlag match_flag = 0;
+ SizeMatchType size_type;
+ AgeMatchType age_type;
+
+ cond_type_menuitem = gtk_menu_get_active
+ (GTK_MENU(gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(hbox->cond_type_optmenu))));
+ cond_menu_type = GPOINTER_TO_INT
+ (g_object_get_data
+ (G_OBJECT(cond_type_menuitem), MENU_VAL_ID));
+
+ match_menu_type = menu_get_option_menu_active_index
+ (GTK_OPTION_MENU(hbox->match_type_optmenu));
+
+ key_str = gtk_entry_get_text(GTK_ENTRY(hbox->key_entry));
+
+ switch (match_menu_type) {
+ case PF_MATCH_CONTAIN:
+ match_type = FLT_CONTAIN;
+ break;
+ case PF_MATCH_NOT_CONTAIN:
+ match_type = FLT_CONTAIN;
+ match_flag |= FLT_NOT_MATCH;
+ break;
+ case PF_MATCH_EQUAL:
+ match_type = FLT_EQUAL;
+ break;
+ case PF_MATCH_NOT_EQUAL:
+ match_type = FLT_EQUAL;
+ match_flag |= FLT_NOT_MATCH;
+ break;
+ case PF_MATCH_REGEX:
+ match_type = FLT_REGEX;
+ break;
+ case PF_MATCH_NOT_REGEX:
+ match_type = FLT_REGEX;
+ match_flag |= FLT_NOT_MATCH;
+ break;
+ default:
+ break;
+ }
+
+ switch (cond_menu_type) {
+ case PF_COND_HEADER:
+ header_name = g_object_get_data
+ (G_OBJECT(cond_type_menuitem), "header_str");
+ cond = filter_cond_new(FLT_COND_HEADER,
+ match_type, match_flag,
+ header_name, key_str);
+ break;
+ case PF_COND_TO_OR_CC:
+ cond = filter_cond_new(FLT_COND_TO_OR_CC, match_type,
+ match_flag, NULL, key_str);
+ break;
+ case PF_COND_ANY_HEADER:
+ cond = filter_cond_new(FLT_COND_ANY_HEADER, match_type,
+ match_flag, NULL, key_str);
+ break;
+ case PF_COND_BODY:
+ cond = filter_cond_new(FLT_COND_BODY, match_type,
+ match_flag, NULL, key_str);
+ break;
+ case PF_COND_CMD_TEST:
+ if (key_str && *key_str)
+ cond = filter_cond_new(FLT_COND_CMD_TEST,
+ 0, 0, NULL, key_str);
+ else
+ error_msg = _("Command is not specified.");
+ break;
+ case PF_COND_SIZE:
+ size_type = menu_get_option_menu_active_index
+ (GTK_OPTION_MENU(hbox->size_match_optmenu));
+ match_flag = size_type == PF_SIZE_LARGER
+ ? 0 : FLT_NOT_MATCH;
+ int_value = gtk_spin_button_get_value_as_int
+ (GTK_SPIN_BUTTON(hbox->spin_btn));
+ cond = filter_cond_new(FLT_COND_SIZE_GREATER,
+ 0, match_flag, NULL,
+ itos(int_value));
+ break;
+ case PF_COND_AGE:
+ age_type = menu_get_option_menu_active_index
+ (GTK_OPTION_MENU(hbox->age_match_optmenu));
+ match_flag = age_type == PF_AGE_LONGER
+ ? 0 : FLT_NOT_MATCH;
+ int_value = gtk_spin_button_get_value_as_int
+ (GTK_SPIN_BUTTON(hbox->spin_btn));
+ cond = filter_cond_new(FLT_COND_AGE_GREATER,
+ 0, match_flag, NULL,
+ itos(int_value));
+ break;
+ case PF_COND_ACCOUNT:
+ case PF_COND_EDIT_HEADER:
+ default:
+ break;
+ }
+
+ if (cond)
+ cond_list = g_slist_append(cond_list, cond);
+ else {
+ if (!error_msg)
+ error_msg = _("Invalid condition exists.");
+ goto error;
+ }
+ }
+
+ for (cur = rule_edit_window.action_hbox_list; cur != NULL;
+ cur = cur->next) {
+ ActionHBox *hbox = (ActionHBox *)cur->data;
+ ActionMenuType action_menu_type;
+ const gchar *str;
+ guint color;
+ FilterAction *action = NULL;
+
+ action_menu_type = prefs_filter_edit_get_action_hbox_type(hbox);
+
+ switch (action_menu_type) {
+ case PF_ACTION_MOVE:
+ str = gtk_entry_get_text(GTK_ENTRY(hbox->folder_entry));
+ if (str && *str)
+ action = filter_action_new(FLT_ACTION_MOVE,
+ str);
+ else
+ error_msg = _("Destination folder is not specified.");
+ break;
+ case PF_ACTION_COPY:
+ str = gtk_entry_get_text(GTK_ENTRY(hbox->folder_entry));
+ if (str && *str)
+ action = filter_action_new(FLT_ACTION_COPY,
+ str);
+ else
+ error_msg = _("Destination folder is not specified.");
+ break;
+ case PF_ACTION_NOT_RECEIVE:
+ action = filter_action_new(FLT_ACTION_NOT_RECEIVE,
+ NULL);
+ break;
+ case PF_ACTION_DELETE:
+ action = filter_action_new(FLT_ACTION_DELETE, NULL);
+ break;
+ case PF_ACTION_EXEC:
+ str = gtk_entry_get_text(GTK_ENTRY(hbox->cmd_entry));
+ if (str && *str)
+ action = filter_action_new(FLT_ACTION_EXEC,
+ str);
+ else
+ error_msg = _("Command is not specified.");
+ break;
+ case PF_ACTION_EXEC_ASYNC:
+ str = gtk_entry_get_text(GTK_ENTRY(hbox->cmd_entry));
+ if (str && *str)
+ action = filter_action_new
+ (FLT_ACTION_EXEC_ASYNC, str);
+ else
+ error_msg = _("Command is not specified.");
+ break;
+ case PF_ACTION_MARK:
+ action = filter_action_new(FLT_ACTION_MARK, NULL);
+ break;
+ case PF_ACTION_COLOR_LABEL:
+ color = colorlabel_get_color_menu_active_item
+ (gtk_option_menu_get_menu
+ (GTK_OPTION_MENU(hbox->clabel_optmenu)));
+ action = filter_action_new(FLT_ACTION_COLOR_LABEL,
+ itos(color));
+ break;
+ case PF_ACTION_MARK_READ:
+ action = filter_action_new(FLT_ACTION_MARK_READ, NULL);
+ break;
+ case PF_ACTION_FORWARD:
+ case PF_ACTION_FORWARD_AS_ATTACHMENT:
+ case PF_ACTION_REDIRECT:
+ break;
+ case PF_ACTION_STOP_EVAL:
+ action = filter_action_new(FLT_ACTION_STOP_EVAL, NULL);
+ break;
+ case PF_ACTION_SEPARATOR:
+ default:
+ break;
+ }
+
+ if (action)
+ action_list = g_slist_append(action_list, action);
+ else {
+ if (!error_msg)
+ error_msg = _("Invalid action exists.");
+ goto error;
+ }
+ }
+
+error:
+ if (error_msg || !cond_list || !action_list) {
+ if (!error_msg) {
+ if (!cond_list)
+ error_msg = _("Condition not exist.");
+ else
+ error_msg = _("Action not exist.");
+ }
+ alertpanel_error("%s", error_msg);
+ if (cond_list)
+ filter_cond_list_free(cond_list);
+ if (action_list)
+ filter_action_list_free(action_list);
+ return NULL;
+ }
+
+ rule = filter_rule_new(rule_name, bool_op, cond_list, action_list);
+
+ return rule;
+}
+
+/* callback functions */
+
+static gint prefs_filter_edit_deleted(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_filter_edit_cancel();
+ return TRUE;
+}
+
+static gboolean prefs_filter_edit_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_filter_edit_cancel();
+ return FALSE;
+}
+
+static void prefs_filter_edit_ok(void)
+{
+ FilterRule *rule;
+
+ rule = prefs_filter_edit_dialog_to_rule();
+ if (rule) {
+ rule_edit_window.new_rule = rule;
+ rule_edit_window.edit_finished = TRUE;
+ }
+}
+
+static void prefs_filter_edit_cancel(void)
+{
+ rule_edit_window.new_rule = NULL;
+ rule_edit_window.edit_finished = TRUE;
+}
+
+static void prefs_filter_cond_activated_cb(GtkWidget *widget, gpointer data)
+{
+ CondHBox *hbox = (CondHBox *)data;
+ CondMenuType type;
+
+ type = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(widget), MENU_VAL_ID));
+
+ if (type == PF_COND_EDIT_HEADER) {
+ prefs_filter_edit_edit_header_list();
+ prefs_filter_edit_cond_hbox_select
+ (hbox, hbox->cur_type, hbox->cur_header_name);
+ } else {
+ hbox->cur_type = type;
+ g_free(hbox->cur_header_name);
+ hbox->cur_header_name = NULL;
+
+ prefs_filter_edit_set_cond_hbox_widgets(hbox, type);
+ if (type == PF_COND_HEADER) {
+ gchar *header_name;
+ gchar *header_field;
+
+ header_name = (gchar *)g_object_get_data
+ (G_OBJECT(widget), "header_str");
+ header_field = prefs_filter_get_msg_header_field
+ (header_name);
+ if (header_field)
+ gtk_entry_set_text(GTK_ENTRY(hbox->key_entry),
+ header_field);
+ hbox->cur_header_name = g_strdup(header_name);
+ }
+ }
+}
+
+static void prefs_filter_action_activated_cb(GtkWidget *widget, gpointer data)
+{
+ ActionHBox *hbox = (ActionHBox *)data;
+ ActionMenuType type;
+
+ type = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(widget), MENU_VAL_ID));
+ prefs_filter_edit_set_action_hbox_widgets(hbox, type);
+}
+
+static void prefs_filter_action_select_dest_cb(GtkWidget *widget, gpointer data)
+{
+ ActionHBox *hbox = (ActionHBox *)data;
+
+ FolderItem *dest;
+ gchar *id;
+
+ dest = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL);
+ if (!dest || !dest->path) return;
+
+ id = folder_item_get_identifier(dest);
+ if (id) {
+ gtk_entry_set_text(GTK_ENTRY(hbox->folder_entry), id);
+ g_free(id);
+ }
+}
+
+static void prefs_filter_cond_del_cb(GtkWidget *widget, gpointer data)
+{
+ CondHBox *hbox = (CondHBox *)data;
+
+ if (rule_edit_window.cond_hbox_list &&
+ rule_edit_window.cond_hbox_list->next)
+ prefs_filter_edit_remove_cond_hbox(hbox);
+}
+
+static void prefs_filter_cond_add_cb(GtkWidget *widget, gpointer data)
+{
+ CondHBox *hbox = (CondHBox *)data;
+ CondHBox *new_hbox;
+ gint index;
+
+ index = g_slist_index(rule_edit_window.cond_hbox_list, hbox);
+ g_return_if_fail(index >= 0);
+ new_hbox = prefs_filter_edit_cond_hbox_create();
+ prefs_filter_edit_set_cond_hbox_widgets(new_hbox, PF_COND_HEADER);
+ prefs_filter_edit_insert_cond_hbox(new_hbox, index + 1);
+}
+
+static void prefs_filter_action_del_cb(GtkWidget *widget, gpointer data)
+{
+ ActionHBox *hbox = (ActionHBox *)data;
+
+ if (rule_edit_window.action_hbox_list &&
+ rule_edit_window.action_hbox_list->next)
+ prefs_filter_edit_remove_action_hbox(hbox);
+}
+
+static void prefs_filter_action_add_cb(GtkWidget *widget, gpointer data)
+{
+ ActionHBox *hbox = (ActionHBox *)data;
+ ActionHBox *new_hbox;
+ gboolean action_menu_selection[PF_ACTION_NONE];
+ gint index;
+
+ prefs_filter_edit_get_action_hbox_menus_selection(action_menu_selection);
+
+ index = g_slist_index(rule_edit_window.action_hbox_list, hbox);
+ g_return_if_fail(index >= 0);
+ new_hbox = prefs_filter_edit_action_hbox_create();
+ prefs_filter_edit_insert_action_hbox(new_hbox, index + 1);
+ if (action_menu_selection[PF_ACTION_MOVE] == TRUE ||
+ action_menu_selection[PF_ACTION_NOT_RECEIVE] == TRUE ||
+ action_menu_selection[PF_ACTION_DELETE] == TRUE)
+ prefs_filter_edit_set_action_hbox_widgets(new_hbox,
+ PF_ACTION_COPY);
+ else
+ prefs_filter_edit_set_action_hbox_widgets(new_hbox,
+ PF_ACTION_MOVE);
+}
diff --git a/src/prefs_filter_edit.h b/src/prefs_filter_edit.h
new file mode 100644
index 00000000..c7e91d2d
--- /dev/null
+++ b/src/prefs_filter_edit.h
@@ -0,0 +1,28 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_FILTER_EDIT_H__
+#define __PREFS_FILTER_EDIT_H__
+
+#include "filter.h"
+
+FilterRule *prefs_filter_edit_open (FilterRule *rule,
+ const gchar *header);
+
+#endif /* __PREFS_FILTER_EDIT_H__ */
diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c
new file mode 100644
index 00000000..183ccdc4
--- /dev/null
+++ b/src/prefs_folder_item.c
@@ -0,0 +1,579 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "intl.h"
+#include "folder.h"
+#include "prefs.h"
+#include "prefs_folder_item.h"
+#include "prefs_account.h"
+#include "account.h"
+#include "manage_window.h"
+#include "folderview.h"
+#include "inc.h"
+#include "menu.h"
+
+typedef struct _PrefsFolderItemDialog PrefsFolderItemDialog;
+
+struct _PrefsFolderItemDialog
+{
+ PrefsDialog *dialog;
+ FolderItem *item;
+
+ /* General */
+ GtkWidget *name_entry;
+ GtkWidget *path_entry;
+ GtkWidget *type_optmenu;
+
+ GtkWidget *trim_summary_subj_chkbtn;
+ GtkWidget *trim_compose_subj_chkbtn;
+
+ /* Compose */
+ GtkWidget *account_optmenu;
+ GtkWidget *ac_apply_sub_chkbtn;
+ GtkWidget *to_entry;
+ GtkWidget *on_reply_chkbtn;
+ GtkWidget *cc_entry;
+ GtkWidget *bcc_entry;
+ GtkWidget *replyto_entry;
+};
+
+static PrefsFolderItemDialog *prefs_folder_item_create
+ (FolderItem *item);
+static void prefs_folder_item_general_create
+ (PrefsFolderItemDialog *dialog);
+static void prefs_folder_item_compose_create
+ (PrefsFolderItemDialog *dialog);
+static void prefs_folder_item_set_dialog(PrefsFolderItemDialog *dialog);
+
+static void prefs_folder_item_ok_cb (GtkWidget *widget,
+ PrefsFolderItemDialog *dialog);
+static void prefs_folder_item_apply_cb (GtkWidget *widget,
+ PrefsFolderItemDialog *dialog);
+static void prefs_folder_item_cancel_cb (GtkWidget *widget,
+ PrefsFolderItemDialog *dialog);
+static gint prefs_folder_item_delete_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ PrefsFolderItemDialog *dialog);
+static gboolean prefs_folder_item_key_press_cb
+ (GtkWidget *widget,
+ GdkEventKey *event,
+ PrefsFolderItemDialog *dialog);
+
+void prefs_folder_item_open(FolderItem *item)
+{
+ PrefsFolderItemDialog *dialog;
+
+ g_return_if_fail(item != NULL);
+
+ inc_lock();
+
+ dialog = prefs_folder_item_create(item);
+
+ manage_window_set_transient(GTK_WINDOW(dialog->dialog->window));
+
+ prefs_folder_item_set_dialog(dialog);
+
+ gtk_widget_show_all(dialog->dialog->window);
+}
+
+PrefsFolderItemDialog *prefs_folder_item_create(FolderItem *item)
+{
+ PrefsFolderItemDialog *new_dialog;
+ PrefsDialog *dialog;
+
+ new_dialog = g_new0(PrefsFolderItemDialog, 1);
+
+ dialog = g_new0(PrefsDialog, 1);
+ prefs_dialog_create(dialog);
+
+ gtk_window_set_title(GTK_WINDOW(dialog->window), _("Folder properties"));
+ gtk_widget_realize(dialog->window);
+ g_signal_connect(G_OBJECT(dialog->window), "delete_event",
+ G_CALLBACK(prefs_folder_item_delete_cb), new_dialog);
+ g_signal_connect(G_OBJECT(dialog->window), "key_press_event",
+ G_CALLBACK(prefs_folder_item_key_press_cb), new_dialog);
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog->window);
+
+ g_signal_connect(G_OBJECT(dialog->ok_btn), "clicked",
+ G_CALLBACK(prefs_folder_item_ok_cb), new_dialog);
+ g_signal_connect(G_OBJECT(dialog->apply_btn), "clicked",
+ G_CALLBACK(prefs_folder_item_apply_cb), new_dialog);
+ g_signal_connect(G_OBJECT(dialog->cancel_btn), "clicked",
+ G_CALLBACK(prefs_folder_item_cancel_cb), new_dialog);
+
+ new_dialog->dialog = dialog;
+ new_dialog->item = item;
+
+ prefs_folder_item_general_create(new_dialog);
+ prefs_folder_item_compose_create(new_dialog);
+
+ SET_NOTEBOOK_LABEL(dialog->notebook, _("General"), 0);
+ SET_NOTEBOOK_LABEL(dialog->notebook, _("Compose"), 1);
+
+ return new_dialog;
+}
+
+static void prefs_folder_item_general_create(PrefsFolderItemDialog *dialog)
+{
+ GtkWidget *vbox;
+ GtkWidget *table;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *name_entry;
+ GtkWidget *path_entry;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *vbox2;
+ GtkWidget *trim_summary_subj_chkbtn;
+ GtkWidget *trim_compose_subj_chkbtn;
+ GtkStyle *style;
+
+ style = gtk_style_copy(gtk_widget_get_style(dialog->dialog->window));
+ style->base[GTK_STATE_NORMAL] = style->bg[GTK_STATE_NORMAL];
+
+ vbox = gtk_vbox_new(FALSE, VSPACING);
+ gtk_container_add(GTK_CONTAINER(dialog->dialog->notebook), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER (vbox), VBOX_BORDER);
+
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 8);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ label = gtk_label_new(_("Name"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ name_entry = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(name_entry), FALSE);
+ gtk_widget_set_size_request(name_entry, 200, -1);
+ gtk_widget_set_style(name_entry, style);
+ gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ label = gtk_label_new(_("Path"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ path_entry = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(path_entry), FALSE);
+ gtk_widget_set_size_request(path_entry, 200, -1);
+ gtk_widget_set_style(path_entry, style);
+ gtk_table_attach(GTK_TABLE(table), path_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ label = gtk_label_new(_("Type"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox);
+ gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new();
+
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Normal"), F_NORMAL);
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Inbox") , F_INBOX);
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Sent") , F_OUTBOX);
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Drafts"), F_DRAFT);
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Queue") , F_QUEUE);
+ MENUITEM_ADD(optmenu_menu, menuitem, _("Trash") , F_TRASH);
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu);
+
+ vbox2 = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON(vbox2, trim_summary_subj_chkbtn,
+ _("Don't display [...] or (...) at the beginning of subject in summary"));
+ PACK_CHECK_BUTTON(vbox2, trim_compose_subj_chkbtn,
+ _("Delete [...] or (...) at the beginning of subject on reply"));
+
+ dialog->name_entry = name_entry;
+ dialog->path_entry = path_entry;
+ dialog->type_optmenu = optmenu;
+ dialog->trim_summary_subj_chkbtn = trim_summary_subj_chkbtn;
+ dialog->trim_compose_subj_chkbtn = trim_compose_subj_chkbtn;
+}
+
+static void prefs_folder_item_compose_create(PrefsFolderItemDialog *dialog)
+{
+ GtkWidget *vbox;
+ GtkWidget *frame;
+ GtkWidget *account_vbox;
+ GtkWidget *table;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *optmenu;
+ GtkWidget *optmenu_menu;
+ GtkWidget *menuitem;
+ GtkWidget *ac_apply_sub_chkbtn;
+ GtkWidget *to_entry;
+ GtkWidget *on_reply_chkbtn;
+ GtkWidget *cc_entry;
+ GtkWidget *bcc_entry;
+ GtkWidget *replyto_entry;
+ GList *list;
+
+ vbox = gtk_vbox_new(FALSE, VSPACING);
+ gtk_container_add(GTK_CONTAINER(dialog->dialog->notebook), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER (vbox), VBOX_BORDER);
+
+ PACK_FRAME(vbox, frame, _("Account"));
+
+ account_vbox = gtk_vbox_new(FALSE, VSPACING_NARROW);
+ gtk_container_add(GTK_CONTAINER(frame), account_vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (account_vbox), 8);
+
+ table = gtk_table_new(1, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(account_vbox), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ label = gtk_label_new(_("Account"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox);
+ gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ optmenu = gtk_option_menu_new();
+ gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0);
+
+ optmenu_menu = gtk_menu_new();
+
+ MENUITEM_ADD(optmenu_menu, menuitem, _("None"), -1);
+
+ for (list = account_get_list(); list != NULL; list = list->next) {
+ gchar *text;
+ PrefsAccount *ac = list->data;
+
+ text = g_strdup_printf("%s: %s", ac->account_name, ac->address);
+ MENUITEM_ADD(optmenu_menu, menuitem, text, ac->account_id);
+ }
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu);
+
+ PACK_CHECK_BUTTON(account_vbox, ac_apply_sub_chkbtn,
+ _("Apply to subfolders"));
+
+ PACK_FRAME(vbox, frame, _("Automatically set the following addresses"));
+
+ table = gtk_table_new(4, 2, FALSE);
+ gtk_container_add(GTK_CONTAINER(frame), table);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 8);
+ gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 8);
+
+ label = gtk_label_new(_("To:"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox);
+ gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ to_entry = gtk_entry_new();
+ gtk_widget_set_size_request(to_entry, 200, -1);
+ gtk_box_pack_start(GTK_BOX(hbox), to_entry, TRUE, TRUE, 0);
+
+ PACK_CHECK_BUTTON(hbox, on_reply_chkbtn, _("use also on reply"));
+
+ label = gtk_label_new(_("Cc:"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ cc_entry = gtk_entry_new();
+ gtk_widget_set_size_request(cc_entry, 200, -1);
+ gtk_table_attach(GTK_TABLE(table), cc_entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ label = gtk_label_new(_("Bcc:"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ bcc_entry = gtk_entry_new();
+ gtk_widget_set_size_request(bcc_entry, 200, -1);
+ gtk_table_attach(GTK_TABLE(table), bcc_entry, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ label = gtk_label_new(_("Reply-To:"));
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
+ GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+
+ replyto_entry = gtk_entry_new();
+ gtk_widget_set_size_request(replyto_entry, 200, -1);
+ gtk_table_attach(GTK_TABLE(table), replyto_entry, 1, 2, 3, 4,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+
+ dialog->account_optmenu = optmenu;
+ dialog->ac_apply_sub_chkbtn = ac_apply_sub_chkbtn;
+ dialog->to_entry = to_entry;
+ dialog->on_reply_chkbtn = on_reply_chkbtn;
+ dialog->cc_entry = cc_entry;
+ dialog->bcc_entry = bcc_entry;
+ dialog->replyto_entry = replyto_entry;
+}
+
+#define SET_ENTRY(entry, str) \
+ gtk_entry_set_text(GTK_ENTRY(dialog->entry), \
+ dialog->item->str ? dialog->item->str : "")
+
+static void prefs_folder_item_set_dialog(PrefsFolderItemDialog *dialog)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkOptionMenu *optmenu;
+ gchar *id;
+ GList *cur;
+ SpecialFolderItemType type;
+ gint n;
+ guint index = 0;
+
+ /* General */
+
+ SET_ENTRY(name_entry, name);
+
+ id = folder_item_get_identifier(dialog->item);
+ gtk_entry_set_text(GTK_ENTRY(dialog->path_entry), id);
+ g_free(id);
+
+ optmenu = GTK_OPTION_MENU(dialog->type_optmenu);
+ menu = gtk_option_menu_get_menu(optmenu);
+ for (cur = GTK_MENU_SHELL(menu)->children, n = 0;
+ cur != NULL; cur = cur->next, n++) {
+ menuitem = GTK_WIDGET(cur->data);
+ type = (SpecialFolderItemType)
+ g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+ if (type != F_NORMAL &&
+ FOLDER_TYPE(dialog->item->folder) == F_NEWS)
+ gtk_widget_set_sensitive(menuitem, FALSE);
+ if (dialog->item->stype == type)
+ index = n;
+ }
+
+ gtk_option_menu_set_history(optmenu, index);
+
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn),
+ dialog->item->trim_summary_subject);
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn),
+ dialog->item->trim_compose_subject);
+
+ /* Compose */
+
+ index = 0;
+ optmenu = GTK_OPTION_MENU(dialog->account_optmenu);
+ if (dialog->item->account) {
+ index = menu_find_option_menu_index
+ (optmenu,
+ GINT_TO_POINTER(dialog->item->account->account_id),
+ NULL);
+ if (index < 0)
+ index = 0;
+ }
+
+ gtk_option_menu_set_history(optmenu, index);
+
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn),
+ dialog->item->ac_apply_sub);
+
+ SET_ENTRY(to_entry, auto_to);
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn),
+ dialog->item->use_auto_to_on_reply);
+
+ SET_ENTRY(cc_entry, auto_cc);
+ SET_ENTRY(bcc_entry, auto_bcc);
+ SET_ENTRY(replyto_entry, auto_replyto);
+}
+
+#undef SET_ENTRY
+
+void prefs_folder_item_destroy(PrefsFolderItemDialog *dialog)
+{
+ prefs_dialog_destroy(dialog->dialog);
+ g_free(dialog->dialog);
+ g_free(dialog);
+
+ inc_unlock();
+}
+
+static void prefs_folder_item_ok_cb(GtkWidget *widget,
+ PrefsFolderItemDialog *dialog)
+{
+ prefs_folder_item_apply_cb(widget, dialog);
+ prefs_folder_item_destroy(dialog);
+}
+
+#define SET_DATA_FROM_ENTRY(entry, str) \
+{ \
+ entry_str = gtk_entry_get_text(GTK_ENTRY(dialog->entry)); \
+ g_free(item->str); \
+ item->str = (entry_str && *entry_str) ? g_strdup(entry_str) : NULL; \
+}
+
+static void prefs_folder_item_apply_cb(GtkWidget *widget,
+ PrefsFolderItemDialog *dialog)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GtkOptionMenu *optmenu;
+ SpecialFolderItemType type;
+ FolderItem *item = dialog->item;
+ Folder *folder = item->folder;
+ FolderItem *prev_item = NULL;
+ gint account_id;
+ const gchar *entry_str;
+
+ optmenu = GTK_OPTION_MENU(dialog->type_optmenu);
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ type = (SpecialFolderItemType)
+ g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
+
+ if (item->stype != type) {
+ switch (type) {
+ case F_NORMAL:
+ break;
+ case F_INBOX:
+ if (folder->inbox)
+ folder->inbox->stype = F_NORMAL;
+ prev_item = folder->inbox;
+ folder->inbox = item;
+ break;
+ case F_OUTBOX:
+ if (folder->outbox)
+ folder->outbox->stype = F_NORMAL;
+ prev_item = folder->outbox;
+ folder->outbox = item;
+ break;
+ case F_DRAFT:
+ if (folder->draft)
+ folder->draft->stype = F_NORMAL;
+ prev_item = folder->draft;
+ folder->draft = item;
+ break;
+ case F_QUEUE:
+ if (folder->queue)
+ folder->queue->stype = F_NORMAL;
+ prev_item = folder->queue;
+ folder->queue = item;
+ break;
+ case F_TRASH:
+ if (folder->trash)
+ folder->trash->stype = F_NORMAL;
+ prev_item = folder->trash;
+ folder->trash = item;
+ break;
+ }
+
+ item->stype = type;
+
+ if (prev_item)
+ folderview_update_item(prev_item, FALSE);
+ folderview_update_item(item, FALSE);
+ }
+
+ item->trim_summary_subject = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(dialog->trim_summary_subj_chkbtn));
+ item->trim_compose_subject = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(dialog->trim_compose_subj_chkbtn));
+
+ /* account menu */
+ optmenu = GTK_OPTION_MENU(dialog->account_optmenu);
+ menu = gtk_option_menu_get_menu(optmenu);
+ menuitem = gtk_menu_get_active(GTK_MENU(menu));
+ account_id = GPOINTER_TO_INT
+ (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+ if (account_id >= 0)
+ item->account = account_find_from_id(account_id);
+ else
+ item->account = NULL;
+
+ item->ac_apply_sub = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(dialog->ac_apply_sub_chkbtn));
+
+ SET_DATA_FROM_ENTRY(to_entry, auto_to);
+ item->use_auto_to_on_reply = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(dialog->on_reply_chkbtn));
+
+ SET_DATA_FROM_ENTRY(cc_entry, auto_cc);
+ SET_DATA_FROM_ENTRY(bcc_entry, auto_bcc);
+ SET_DATA_FROM_ENTRY(replyto_entry, auto_replyto);
+}
+
+#undef SET_DATA_FROM_ENTRY
+
+static void prefs_folder_item_cancel_cb(GtkWidget *widget,
+ PrefsFolderItemDialog *dialog)
+{
+ prefs_folder_item_destroy(dialog);
+}
+
+static gint prefs_folder_item_delete_cb(GtkWidget *widget, GdkEventAny *event,
+ PrefsFolderItemDialog *dialog)
+{
+ prefs_folder_item_destroy(dialog);
+ return TRUE;
+}
+
+static gboolean prefs_folder_item_key_press_cb(GtkWidget *widget,
+ GdkEventKey *event,
+ PrefsFolderItemDialog *dialog)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_folder_item_cancel_cb(widget, dialog);
+ return FALSE;
+}
diff --git a/src/prefs_folder_item.h b/src/prefs_folder_item.h
new file mode 100644
index 00000000..d6daa873
--- /dev/null
+++ b/src/prefs_folder_item.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_FOLDER_ITEM_H__
+#define __PREFS_FOLDER_ITEM_H__
+
+#include <glib.h>
+
+#include "folder.h"
+
+void prefs_folder_item_open (FolderItem *item);
+
+#endif /* __PREFS_FOLDER_ITEM_H__ */
diff --git a/src/prefs_summary_column.c b/src/prefs_summary_column.c
new file mode 100644
index 00000000..8fdf6be8
--- /dev/null
+++ b/src/prefs_summary_column.c
@@ -0,0 +1,537 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtkbutton.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "intl.h"
+#include "prefs.h"
+#include "prefs_common.h"
+#include "prefs_summary_column.h"
+#include "manage_window.h"
+#include "summaryview.h"
+#include "mainwindow.h"
+#include "inc.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+static struct _SummaryColumnDialog
+{
+ GtkWidget *window;
+
+ GtkWidget *stock_clist;
+ GtkWidget *shown_clist;
+
+ GtkWidget *add_btn;
+ GtkWidget *remove_btn;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ GtkWidget *default_btn;
+
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ gboolean finished;
+} summary_col;
+
+static const gchar *const col_name[N_SUMMARY_COLS] = {
+ N_("Mark"), /* S_COL_MARK */
+ N_("Unread"), /* S_COL_UNREAD */
+ N_("Attachment"), /* S_COL_MIME */
+ N_("Subject"), /* S_COL_SUBJECT */
+ N_("From"), /* S_COL_FROM */
+ N_("Date"), /* S_COL_DATE */
+ N_("Size"), /* S_COL_SIZE */
+ N_("Number") /* S_COL_NUMBER */
+};
+
+static SummaryColumnState default_state[N_SUMMARY_COLS] = {
+ { S_COL_MARK , TRUE },
+ { S_COL_UNREAD , TRUE },
+ { S_COL_MIME , TRUE },
+ { S_COL_SUBJECT, TRUE },
+ { S_COL_FROM , TRUE },
+ { S_COL_DATE , TRUE },
+ { S_COL_SIZE , TRUE },
+ { S_COL_NUMBER , FALSE }
+};
+
+static void prefs_summary_column_create (void);
+
+static void prefs_summary_column_set_dialog (SummaryColumnState *state);
+static void prefs_summary_column_set_view (void);
+
+/* callback functions */
+static void prefs_summary_column_add (void);
+static void prefs_summary_column_remove (void);
+
+static void prefs_summary_column_up (void);
+static void prefs_summary_column_down (void);
+
+static void prefs_summary_column_set_to_default (void);
+
+static void prefs_summary_column_ok (void);
+static void prefs_summary_column_cancel (void);
+
+static gint prefs_summary_column_delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_summary_column_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
+void prefs_summary_column_open(void)
+{
+ inc_lock();
+
+ if (!summary_col.window)
+ prefs_summary_column_create();
+
+ manage_window_set_transient(GTK_WINDOW(summary_col.window));
+ gtk_widget_grab_focus(summary_col.ok_btn);
+
+ prefs_summary_column_set_dialog(NULL);
+
+ gtk_widget_show(summary_col.window);
+
+ summary_col.finished = FALSE;
+ while (summary_col.finished == FALSE)
+ gtk_main_iteration();
+
+ gtk_widget_hide(summary_col.window);
+
+ inc_unlock();
+}
+
+static void prefs_summary_column_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+
+ GtkWidget *label_hbox;
+ GtkWidget *label;
+
+ GtkWidget *vbox1;
+
+ GtkWidget *hbox1;
+ GtkWidget *clist_hbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *stock_clist;
+ GtkWidget *shown_clist;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *btn_vbox1;
+ GtkWidget *add_btn;
+ GtkWidget *remove_btn;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ GtkWidget *btn_hbox;
+ GtkWidget *default_btn;
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ gchar *title[1];
+
+ debug_print(_("Creating summary column setting window...\n"));
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
+ gtk_window_set_title(GTK_WINDOW(window),
+ _("Summary display item setting"));
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_summary_column_delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_summary_column_key_pressed), NULL);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ label_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(label_hbox);
+ gtk_box_pack_start(GTK_BOX(vbox), label_hbox, FALSE, FALSE, 4);
+
+ label = gtk_label_new
+ (_("Select items to be displayed on the summary view. You can modify\n"
+ "the order by using the Up / Down button, or dragging the items."));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(label_hbox), label, FALSE, FALSE, 4);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
+
+ vbox1 = gtk_vbox_new(FALSE, VSPACING);
+ gtk_widget_show(vbox1);
+ gtk_box_pack_start(GTK_BOX(vbox), vbox1, TRUE, TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox1), 2);
+
+ hbox1 = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox1);
+ gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, TRUE, 0);
+
+ clist_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(clist_hbox);
+ gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_set_size_request(scrolledwin, 180, 210);
+ gtk_widget_show(scrolledwin);
+ gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Available items");
+ stock_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show(stock_clist);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), stock_clist);
+ gtk_clist_set_selection_mode(GTK_CLIST(stock_clist),
+ GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(stock_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+
+ /* add/remove button */
+ btn_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(btn_vbox);
+ gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
+
+ btn_vbox1 = gtk_vbox_new(FALSE, 8);
+ gtk_widget_show(btn_vbox1);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
+
+ add_btn = gtk_button_new_with_label(_(" -> "));
+ gtk_widget_show(add_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox1), add_btn, FALSE, FALSE, 0);
+
+ remove_btn = gtk_button_new_with_label(_(" <- "));
+ gtk_widget_show(remove_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox1), remove_btn, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(add_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_add), NULL);
+ g_signal_connect(G_OBJECT(remove_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_remove), NULL);
+
+ clist_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(clist_hbox);
+ gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_set_size_request(scrolledwin, 180, 210);
+ gtk_widget_show(scrolledwin);
+ gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Displayed items");
+ shown_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show(shown_clist);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), shown_clist);
+ gtk_clist_set_selection_mode(GTK_CLIST(shown_clist),
+ GTK_SELECTION_BROWSE);
+ gtk_clist_set_reorderable(GTK_CLIST(shown_clist), TRUE);
+ gtk_clist_set_use_drag_icons(GTK_CLIST(shown_clist), FALSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(shown_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+
+ /* up/down button */
+ btn_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(btn_vbox);
+ gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
+
+ btn_vbox1 = gtk_vbox_new(FALSE, 8);
+ gtk_widget_show(btn_vbox1);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
+
+ up_btn = gtk_button_new_with_label(_("Up"));
+ gtk_widget_show(up_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox1), up_btn, FALSE, FALSE, 0);
+
+ down_btn = gtk_button_new_with_label(_("Down"));
+ gtk_widget_show(down_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox1), down_btn, FALSE, FALSE, 0);
+
+ g_signal_connect(G_OBJECT(up_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_up), NULL);
+ g_signal_connect(G_OBJECT(down_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_down), NULL);
+
+ btn_hbox = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(btn_hbox);
+ gtk_box_pack_end(GTK_BOX(vbox), btn_hbox, FALSE, FALSE, 0);
+
+ btn_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(btn_vbox);
+ gtk_box_pack_start(GTK_BOX(btn_hbox), btn_vbox, FALSE, FALSE, 0);
+
+ default_btn = gtk_button_new_with_label(_(" Revert to default "));
+ gtk_widget_show(default_btn);
+ gtk_box_pack_start(GTK_BOX(btn_vbox), default_btn, TRUE, FALSE, 0);
+ g_signal_connect(G_OBJECT(default_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_set_to_default), NULL);
+
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end(GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_summary_column_cancel), NULL);
+
+ summary_col.window = window;
+ summary_col.stock_clist = stock_clist;
+ summary_col.shown_clist = shown_clist;
+ summary_col.add_btn = add_btn;
+ summary_col.remove_btn = remove_btn;
+ summary_col.up_btn = up_btn;
+ summary_col.down_btn = down_btn;
+ summary_col.ok_btn = ok_btn;
+ summary_col.cancel_btn = cancel_btn;
+}
+
+SummaryColumnState *prefs_summary_column_get_config(void)
+{
+ static SummaryColumnState state[N_SUMMARY_COLS];
+ SummaryColumnType type;
+ gint pos;
+
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++)
+ state[pos].type = -1;
+
+ for (type = 0; type < N_SUMMARY_COLS; type++) {
+ pos = prefs_common.summary_col_pos[type];
+ if (pos < 0 || pos >= N_SUMMARY_COLS ||
+ state[pos].type != -1) {
+ g_warning("Wrong column position\n");
+ prefs_summary_column_set_config(default_state);
+ return default_state;
+ }
+
+ state[pos].type = type;
+ state[pos].visible = prefs_common.summary_col_visible[type];
+ }
+
+ return state;
+}
+
+void prefs_summary_column_set_config(SummaryColumnState *state)
+{
+ SummaryColumnType type;
+ gint pos;
+
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
+ type = state[pos].type;
+ prefs_common.summary_col_visible[type] = state[pos].visible;
+ prefs_common.summary_col_pos[type] = pos;
+ }
+}
+
+static void prefs_summary_column_set_dialog(SummaryColumnState *state)
+{
+ GtkCList *stock_clist = GTK_CLIST(summary_col.stock_clist);
+ GtkCList *shown_clist = GTK_CLIST(summary_col.shown_clist);
+ gint pos;
+ SummaryColumnType type;
+ gchar *name;
+
+ gtk_clist_clear(stock_clist);
+ gtk_clist_clear(shown_clist);
+
+ if (!state)
+ state = prefs_summary_column_get_config();
+
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
+ gint row;
+ type = state[pos].type;
+ name = gettext(col_name[type]);
+
+ if (state[pos].visible) {
+ row = gtk_clist_append(shown_clist, (gchar **)&name);
+ gtk_clist_set_row_data(shown_clist, row,
+ GINT_TO_POINTER(type));
+ } else {
+ row = gtk_clist_append(stock_clist, (gchar **)&name);
+ gtk_clist_set_row_data(stock_clist, row,
+ GINT_TO_POINTER(type));
+ }
+ }
+}
+
+static void prefs_summary_column_set_view(void)
+{
+ GtkCList *stock_clist = GTK_CLIST(summary_col.stock_clist);
+ GtkCList *shown_clist = GTK_CLIST(summary_col.shown_clist);
+ SummaryColumnState state[N_SUMMARY_COLS];
+ SummaryColumnType type;
+ gint row, pos = 0;
+
+ g_return_if_fail
+ (stock_clist->rows + shown_clist->rows == N_SUMMARY_COLS);
+
+ for (row = 0; row < stock_clist->rows; row++) {
+ type = GPOINTER_TO_INT
+ (gtk_clist_get_row_data(stock_clist, row));
+ state[row].type = type;
+ state[row].visible = FALSE;
+ }
+
+ pos = row;
+ for (row = 0; row < shown_clist->rows; row++) {
+ type = GPOINTER_TO_INT
+ (gtk_clist_get_row_data(shown_clist, row));
+ state[pos + row].type = type;
+ state[pos + row].visible = TRUE;
+ }
+
+ prefs_summary_column_set_config(state);
+ main_window_set_summary_column();
+}
+
+static void prefs_summary_column_add(void)
+{
+ GtkCList *stock_clist = GTK_CLIST(summary_col.stock_clist);
+ GtkCList *shown_clist = GTK_CLIST(summary_col.shown_clist);
+ gint row;
+ SummaryColumnType type;
+ gchar *name;
+
+ if (!stock_clist->selection) return;
+
+ row = GPOINTER_TO_INT(stock_clist->selection->data);
+ type = GPOINTER_TO_INT(gtk_clist_get_row_data(stock_clist, row));
+ gtk_clist_remove(stock_clist, row);
+ if (stock_clist->rows == row)
+ gtk_clist_select_row(stock_clist, row - 1, -1);
+
+ if (!shown_clist->selection)
+ row = 0;
+ else
+ row = GPOINTER_TO_INT(shown_clist->selection->data) + 1;
+
+ name = gettext(col_name[type]);
+ row = gtk_clist_insert(shown_clist, row, (gchar **)&name);
+ gtk_clist_set_row_data(shown_clist, row, GINT_TO_POINTER(type));
+ gtk_clist_select_row(shown_clist, row, -1);
+}
+
+static void prefs_summary_column_remove(void)
+{
+ GtkCList *stock_clist = GTK_CLIST(summary_col.stock_clist);
+ GtkCList *shown_clist = GTK_CLIST(summary_col.shown_clist);
+ gint row;
+ SummaryColumnType type;
+ gchar *name;
+
+ if (!shown_clist->selection) return;
+
+ row = GPOINTER_TO_INT(shown_clist->selection->data);
+ type = GPOINTER_TO_INT(gtk_clist_get_row_data(shown_clist, row));
+ gtk_clist_remove(shown_clist, row);
+ if (shown_clist->rows == row)
+ gtk_clist_select_row(shown_clist, row - 1, -1);
+
+ if (!stock_clist->selection)
+ row = 0;
+ else
+ row = GPOINTER_TO_INT(stock_clist->selection->data) + 1;
+
+ name = gettext(col_name[type]);
+ row = gtk_clist_insert(stock_clist, row, (gchar **)&name);
+ gtk_clist_set_row_data(stock_clist, row, GINT_TO_POINTER(type));
+ gtk_clist_select_row(stock_clist, row, -1);
+}
+
+static void prefs_summary_column_up(void)
+{
+ GtkCList *clist = GTK_CLIST(summary_col.shown_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0)
+ gtk_clist_row_move(clist, row, row - 1);
+}
+
+static void prefs_summary_column_down(void)
+{
+ GtkCList *clist = GTK_CLIST(summary_col.shown_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row >= 0 && row < clist->rows - 1)
+ gtk_clist_row_move(clist, row, row + 1);
+}
+
+static void prefs_summary_column_set_to_default(void)
+{
+ prefs_summary_column_set_dialog(default_state);
+}
+
+static void prefs_summary_column_ok(void)
+{
+ if (!summary_col.finished) {
+ summary_col.finished = TRUE;
+ prefs_summary_column_set_view();
+ }
+}
+
+static void prefs_summary_column_cancel(void)
+{
+ summary_col.finished = TRUE;
+}
+
+static gint prefs_summary_column_delete_event(GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data)
+{
+ summary_col.finished = TRUE;
+ return TRUE;
+}
+
+static gboolean prefs_summary_column_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ summary_col.finished = TRUE;
+ return FALSE;
+}
diff --git a/src/prefs_summary_column.h b/src/prefs_summary_column.h
new file mode 100644
index 00000000..3ea9101d
--- /dev/null
+++ b/src/prefs_summary_column.h
@@ -0,0 +1,30 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_SUMMARY_COLUMN_H__
+#define __PREFS_SUMMARY_COLUMN_H__
+
+#include "summaryview.h"
+
+void prefs_summary_column_open(void);
+
+SummaryColumnState *prefs_summary_column_get_config(void);
+void prefs_summary_column_set_config(SummaryColumnState *state);
+
+#endif /* __PREFS_SUMMARY_COLUMN_H__ */
diff --git a/src/prefs_template.c b/src/prefs_template.c
new file mode 100644
index 00000000..024378de
--- /dev/null
+++ b/src/prefs_template.c
@@ -0,0 +1,533 @@
+/*
+ * Sylpheed templates subsystem
+ * Copyright (C) 2001 Alexander Barinov
+ * Copyright (C) 2001-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
+#include "intl.h"
+#include "template.h"
+#include "main.h"
+#include "inc.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "alertpanel.h"
+#include "manage_window.h"
+#include "prefs_common.h"
+#include "compose.h"
+#include "addr_compl.h"
+#include "quote_fmt.h"
+
+static struct Templates {
+ GtkWidget *window;
+ GtkWidget *ok_btn;
+ GtkWidget *clist_tmpls;
+ GtkWidget *entry_name;
+ GtkWidget *entry_to;
+ GtkWidget *entry_cc;
+ GtkWidget *entry_subject;
+ GtkWidget *text_value;
+} templates;
+
+/* widget creating functions */
+static void prefs_template_window_create (void);
+static void prefs_template_window_setup (void);
+static void prefs_template_clear (void);
+
+static GSList *prefs_template_get_list (void);
+
+/* callbacks */
+static gint prefs_template_deleted_cb (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
+static gboolean prefs_template_key_pressed_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_template_cancel_cb (void);
+static void prefs_template_ok_cb (void);
+static void prefs_template_select_cb (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event);
+static void prefs_template_register_cb (void);
+static void prefs_template_substitute_cb (void);
+static void prefs_template_delete_cb (void);
+
+/* Called from mainwindow.c */
+void prefs_template_open(void)
+{
+ inc_lock();
+
+ if (!templates.window)
+ prefs_template_window_create();
+
+ prefs_template_window_setup();
+ gtk_widget_show(templates.window);
+}
+
+#define ADD_ENTRY(entry, str, row) \
+{ \
+ label1 = gtk_label_new(str); \
+ gtk_widget_show(label1); \
+ gtk_table_attach(GTK_TABLE(table), label1, 0, 1, row, (row + 1), \
+ GTK_FILL, 0, 0, 0); \
+ gtk_misc_set_alignment(GTK_MISC(label1), 1, 0.5); \
+ \
+ entry = gtk_entry_new(); \
+ gtk_widget_show(entry); \
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, row, (row + 1), \
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \
+}
+
+static void prefs_template_window_create(void)
+{
+ /* window structure ;) */
+ GtkWidget *window;
+ GtkWidget *vpaned;
+ GtkWidget *vbox1;
+ GtkWidget *hbox1;
+ GtkWidget *label1;
+ GtkWidget *entry_name;
+ GtkWidget *table;
+ GtkWidget *entry_to;
+ GtkWidget *entry_cc;
+ GtkWidget *entry_subject;
+ GtkWidget *scroll2;
+ GtkWidget *text_value;
+ GtkWidget *vbox2;
+ GtkWidget *hbox2;
+ GtkWidget *arrow1;
+ GtkWidget *hbox3;
+ GtkWidget *reg_btn;
+ GtkWidget *subst_btn;
+ GtkWidget *del_btn;
+ GtkWidget *desc_btn;
+ GtkWidget *scroll1;
+ GtkWidget *clist_tmpls;
+ GtkWidget *confirm_area;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+
+ gchar *title[1];
+
+ /* main window */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 400, -1);
+
+ /* vpaned to separate template settings from templates list */
+ vpaned = gtk_vpaned_new();
+ gtk_widget_show(vpaned);
+ gtk_container_add(GTK_CONTAINER(window), vpaned);
+
+ /* vbox to handle template name and content */
+ vbox1 = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox1);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox1), 8);
+ gtk_paned_pack1(GTK_PANED(vpaned), vbox1, FALSE, FALSE);
+
+ hbox1 = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox1);
+ gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0);
+
+ label1 = gtk_label_new(_("Template name"));
+ gtk_widget_show(label1);
+ gtk_box_pack_start(GTK_BOX(hbox1), label1, FALSE, FALSE, 0);
+
+ entry_name = gtk_entry_new();
+ gtk_widget_show(entry_name);
+ gtk_box_pack_start(GTK_BOX(hbox1), entry_name, TRUE, TRUE, 0);
+
+ /* table for headers */
+ table = gtk_table_new(3, 2, FALSE);
+ gtk_widget_show(table);
+ gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
+
+ ADD_ENTRY(entry_to, _("To:"), 0);
+ address_completion_register_entry(GTK_ENTRY(entry_to));
+ ADD_ENTRY(entry_cc, _("Cc:"), 1);
+ address_completion_register_entry(GTK_ENTRY(entry_cc));
+ ADD_ENTRY(entry_subject, _("Subject:"), 2);
+
+#undef ADD_ENTRY
+
+ /* template content */
+ scroll2 = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scroll2);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll2),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vbox1), scroll2, TRUE, TRUE, 0);
+
+ text_value = gtk_text_view_new();
+ gtk_widget_show(text_value);
+ gtk_widget_set_size_request(text_value, -1, 120);
+ gtk_container_add(GTK_CONTAINER(scroll2), text_value);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text_value), TRUE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_value), GTK_WRAP_WORD);
+
+ /* vbox for buttons and templates list */
+ vbox2 = gtk_vbox_new(FALSE, 6);
+ gtk_widget_show(vbox2);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
+ gtk_paned_pack2(GTK_PANED(vpaned), vbox2, TRUE, FALSE);
+
+ /* register | substitute | delete */
+ hbox2 = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(hbox2);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, 0);
+
+ arrow1 = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show(arrow1);
+ gtk_box_pack_start(GTK_BOX(hbox2), arrow1, FALSE, FALSE, 0);
+ gtk_widget_set_size_request(arrow1, -1, 16);
+
+ hbox3 = gtk_hbox_new(TRUE, 4);
+ gtk_widget_show(hbox3);
+ gtk_box_pack_start(GTK_BOX(hbox2), hbox3, FALSE, FALSE, 0);
+
+ reg_btn = gtk_button_new_with_label(_("Register"));
+ gtk_widget_show(reg_btn);
+ gtk_box_pack_start(GTK_BOX(hbox3), reg_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT (reg_btn), "clicked",
+ G_CALLBACK (prefs_template_register_cb), NULL);
+
+ subst_btn = gtk_button_new_with_label(_(" Substitute "));
+ gtk_widget_show(subst_btn);
+ gtk_box_pack_start(GTK_BOX(hbox3), subst_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(subst_btn), "clicked",
+ G_CALLBACK(prefs_template_substitute_cb), NULL);
+
+ del_btn = gtk_button_new_with_label(_("Delete"));
+ gtk_widget_show(del_btn);
+ gtk_box_pack_start(GTK_BOX(hbox3), del_btn, FALSE, TRUE, 0);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_template_delete_cb), NULL);
+
+ desc_btn = gtk_button_new_with_label(_(" Symbols "));
+ gtk_widget_show(desc_btn);
+ gtk_box_pack_end(GTK_BOX(hbox2), desc_btn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(desc_btn), "clicked",
+ G_CALLBACK(prefs_quote_description), NULL);
+
+ /* templates list */
+ scroll1 = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scroll1);
+ gtk_box_pack_start(GTK_BOX(vbox2), scroll1, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll1),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ title[0] = _("Registered templates");
+ clist_tmpls = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show(clist_tmpls);
+ gtk_widget_set_size_request(scroll1, -1, 140);
+ gtk_container_add(GTK_CONTAINER(scroll1), clist_tmpls);
+ gtk_clist_set_column_width(GTK_CLIST(clist_tmpls), 0, 80);
+ gtk_clist_set_selection_mode(GTK_CLIST(clist_tmpls),
+ GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_tmpls)->column[0].button,
+ GTK_CAN_FOCUS);
+ g_signal_connect(G_OBJECT (clist_tmpls), "select_row",
+ G_CALLBACK (prefs_template_select_cb), NULL);
+
+ /* ok | cancel */
+ gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
+ &cancel_btn, _("Cancel"), NULL, NULL);
+ gtk_widget_show(confirm_area);
+ gtk_box_pack_end(GTK_BOX(vbox2), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_btn);
+
+ gtk_window_set_title(GTK_WINDOW(window), _("Templates"));
+
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_template_deleted_cb), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_template_key_pressed_cb), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_template_ok_cb), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_template_cancel_cb), NULL);
+
+ address_completion_start(window);
+
+ templates.window = window;
+ templates.ok_btn = ok_btn;
+ templates.clist_tmpls = clist_tmpls;
+ templates.entry_name = entry_name;
+ templates.entry_to = entry_to;
+ templates.entry_cc = entry_cc;
+ templates.entry_subject = entry_subject;
+ templates.text_value = text_value;
+}
+
+static void prefs_template_window_setup(void)
+{
+ GtkCList *clist = GTK_CLIST(templates.clist_tmpls);
+ GSList *tmpl_list;
+ GSList *cur;
+ gchar *title[1];
+ gint row;
+ Template *tmpl;
+
+ manage_window_set_transient(GTK_WINDOW(templates.window));
+ gtk_widget_grab_focus(templates.ok_btn);
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ title[0] = _("(New)");
+ row = gtk_clist_append(clist, title);
+ gtk_clist_set_row_data(clist, row, NULL);
+
+ tmpl_list = template_read_config();
+
+ for (cur = tmpl_list; cur != NULL; cur = cur->next) {
+ tmpl = (Template *)cur->data;
+ title[0] = tmpl->name;
+ row = gtk_clist_append(clist, title);
+ gtk_clist_set_row_data(clist, row, tmpl);
+ }
+
+ g_slist_free(tmpl_list);
+
+ gtk_clist_thaw(clist);
+}
+
+static void prefs_template_clear(void)
+{
+ Template *tmpl;
+ gint row = 1;
+
+ while ((tmpl = gtk_clist_get_row_data
+ (GTK_CLIST(templates.clist_tmpls), row)) != NULL) {
+ template_free(tmpl);
+ row++;
+ }
+
+ gtk_clist_clear(GTK_CLIST(templates.clist_tmpls));
+}
+
+static gint prefs_template_deleted_cb(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ prefs_template_cancel_cb();
+ return TRUE;
+}
+
+static gboolean prefs_template_key_pressed_cb(GtkWidget *widget,
+ GdkEventKey *event, gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ prefs_template_cancel_cb();
+ return FALSE;
+}
+
+static void prefs_template_ok_cb(void)
+{
+ GSList *tmpl_list;
+
+ tmpl_list = prefs_template_get_list();
+ template_set_config(tmpl_list);
+ compose_reflect_prefs_all();
+ gtk_clist_clear(GTK_CLIST(templates.clist_tmpls));
+ gtk_widget_hide(templates.window);
+ inc_unlock();
+}
+
+static void prefs_template_cancel_cb(void)
+{
+ prefs_template_clear();
+ gtk_widget_hide(templates.window);
+ inc_unlock();
+}
+
+static void prefs_template_select_cb(GtkCList *clist, gint row, gint column,
+ GdkEvent *event)
+{
+ Template *tmpl;
+ Template tmpl_def;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ tmpl_def.name = _("Template");
+ tmpl_def.subject = "";
+ tmpl_def.to = "";
+ tmpl_def.cc = "";
+ tmpl_def.value = "";
+
+ if (!(tmpl = gtk_clist_get_row_data(clist, row)))
+ tmpl = &tmpl_def;
+
+ gtk_entry_set_text(GTK_ENTRY(templates.entry_name), tmpl->name);
+ gtk_entry_set_text(GTK_ENTRY(templates.entry_to),
+ tmpl->to ? tmpl->to : "");
+ gtk_entry_set_text(GTK_ENTRY(templates.entry_cc),
+ tmpl->cc ? tmpl->cc : "");
+ gtk_entry_set_text(GTK_ENTRY(templates.entry_subject),
+ tmpl->subject ? tmpl->subject : "");
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(templates.text_value));
+ gtk_text_buffer_set_text(buffer, "", 0);
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ gtk_text_buffer_insert(buffer, &iter, tmpl->value, -1);
+}
+
+static GSList *prefs_template_get_list(void)
+{
+ gint row = 1;
+ GSList *tmpl_list = NULL;
+ Template *tmpl;
+
+ while ((tmpl = gtk_clist_get_row_data
+ (GTK_CLIST(templates.clist_tmpls), row)) != NULL) {
+ tmpl_list = g_slist_append(tmpl_list, tmpl);
+ row++;
+ }
+
+ return tmpl_list;
+}
+
+static gint prefs_template_clist_set_row(gint row)
+{
+ GtkCList *clist = GTK_CLIST(templates.clist_tmpls);
+ Template *tmpl;
+ Template *tmp_tmpl;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ gchar *name;
+ gchar *to;
+ gchar *cc;
+ gchar *subject;
+ gchar *value;
+ gchar *title[1];
+
+ g_return_val_if_fail(row != 0, -1);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(templates.text_value));
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_get_iter_at_offset(buffer, &end, -1); // end_iter?
+ value = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+
+ if (value && *value != '\0') {
+ gchar *parsed_buf;
+ MsgInfo dummyinfo;
+
+ memset(&dummyinfo, 0, sizeof(MsgInfo));
+ quote_fmt_init(&dummyinfo, NULL, NULL);
+ quote_fmt_scan_string(value);
+ quote_fmt_parse();
+ parsed_buf = quote_fmt_get_buffer();
+ if (!parsed_buf) {
+ alertpanel_error(_("Template format error."));
+ g_free(value);
+ return -1;
+ }
+ }
+
+ name = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_name),
+ 0, -1);
+ subject = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_subject),
+ 0, -1);
+ to = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_to), 0, -1);
+ cc = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_cc), 0, -1);
+
+ if (subject && *subject == '\0') {
+ g_free(subject);
+ subject = NULL;
+ }
+ if (to && *to == '\0') {
+ g_free(to);
+ to = NULL;
+ }
+
+ tmpl = g_new(Template, 1);
+ tmpl->name = name;
+ tmpl->to = to;
+ tmpl->cc = cc;
+ tmpl->subject = subject;
+ tmpl->value = value;
+
+ title[0] = name;
+
+ if (row < 0) {
+ row = gtk_clist_append(clist, title);
+ } else {
+ gtk_clist_set_text(clist, row, 0, name);
+ tmp_tmpl = gtk_clist_get_row_data(clist, row);
+ if (tmp_tmpl)
+ template_free(tmp_tmpl);
+ }
+
+ gtk_clist_set_row_data(clist, row, tmpl);
+ return row;
+}
+
+static void prefs_template_register_cb(void)
+{
+ prefs_template_clist_set_row(-1);
+}
+
+static void prefs_template_substitute_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(templates.clist_tmpls);
+ Template *tmpl;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ tmpl = gtk_clist_get_row_data(clist, row);
+ if (!tmpl) return;
+
+ prefs_template_clist_set_row(row);
+}
+
+static void prefs_template_delete_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(templates.clist_tmpls);
+ Template *tmpl;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ if (alertpanel(_("Delete template"),
+ _("Do you really want to delete this template?"),
+ _("Yes"), _("No"), NULL) == G_ALERTALTERNATE)
+ return;
+
+ tmpl = gtk_clist_get_row_data(clist, row);
+ template_free(tmpl);
+ gtk_clist_remove(clist, row);
+}
diff --git a/src/prefs_template.h b/src/prefs_template.h
new file mode 100644
index 00000000..c9e95516
--- /dev/null
+++ b/src/prefs_template.h
@@ -0,0 +1,25 @@
+/*
+ * Sylpheed templates subsystem
+ * Copyright (C) 2001 Alexander Barinov
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_TEMPLATES_H__
+#define __PREFS_TEMPLATES_H__
+
+void prefs_template_open(void);
+
+#endif /* __PREFS_TEMPLATES_H__ */
diff --git a/src/procheader.c b/src/procheader.c
new file mode 100644
index 00000000..9a18bf31
--- /dev/null
+++ b/src/procheader.c
@@ -0,0 +1,764 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/stat.h>
+
+#include "intl.h"
+#include "procheader.h"
+#include "procmsg.h"
+#include "codeconv.h"
+#include "prefs_common.h"
+#include "utils.h"
+
+#define BUFFSIZE 8192
+
+gint procheader_get_one_field(gchar *buf, gint len, FILE *fp,
+ HeaderEntry hentry[])
+{
+ gint nexthead;
+ gint hnum = 0;
+ HeaderEntry *hp = NULL;
+
+ if (hentry != NULL) {
+ /* skip non-required headers */
+ do {
+ do {
+ if (fgets(buf, len, fp) == NULL)
+ return -1;
+ if (buf[0] == '\r' || buf[0] == '\n')
+ return -1;
+ } while (buf[0] == ' ' || buf[0] == '\t');
+
+ for (hp = hentry, hnum = 0; hp->name != NULL;
+ hp++, hnum++) {
+ if (!strncasecmp(hp->name, buf,
+ strlen(hp->name)))
+ break;
+ }
+ } while (hp->name == NULL);
+ } else {
+ if (fgets(buf, len, fp) == NULL) return -1;
+ if (buf[0] == '\r' || buf[0] == '\n') return -1;
+ }
+
+ /* unfold the specified folded line */
+ if (hp && hp->unfold) {
+ gboolean folded = FALSE;
+ gchar *bufp = buf + strlen(buf);
+
+ for (; bufp > buf &&
+ (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
+ bufp--)
+ *(bufp - 1) = '\0';
+
+ while (1) {
+ nexthead = fgetc(fp);
+
+ /* folded */
+ if (nexthead == ' ' || nexthead == '\t')
+ folded = TRUE;
+ else if (nexthead == EOF)
+ break;
+ else if (folded == TRUE) {
+ if ((len - (bufp - buf)) <= 2) break;
+
+ if (nexthead == '\n') {
+ folded = FALSE;
+ continue;
+ }
+
+ /* replace return code on the tail end
+ with space */
+ *bufp++ = ' ';
+ *bufp++ = nexthead;
+ *bufp = '\0';
+
+ /* concatenate next line */
+ if (fgets(bufp, len - (bufp - buf), fp)
+ == NULL) break;
+ bufp += strlen(bufp);
+
+ for (; bufp > buf &&
+ (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
+ bufp--)
+ *(bufp - 1) = '\0';
+
+ folded = FALSE;
+ } else {
+ ungetc(nexthead, fp);
+ break;
+ }
+ }
+
+ return hnum;
+ }
+
+ while (1) {
+ nexthead = fgetc(fp);
+ if (nexthead == ' ' || nexthead == '\t') {
+ size_t buflen = strlen(buf);
+
+ /* concatenate next line */
+ if ((len - buflen) > 2) {
+ gchar *p = buf + buflen;
+
+ *p++ = nexthead;
+ *p = '\0';
+ buflen++;
+ if (fgets(p, len - buflen, fp) == NULL)
+ break;
+ } else
+ break;
+ } else {
+ if (nexthead != EOF)
+ ungetc(nexthead, fp);
+ break;
+ }
+ }
+
+ /* remove trailing return code */
+ strretchomp(buf);
+
+ return hnum;
+}
+
+gchar *procheader_get_unfolded_line(gchar *buf, gint len, FILE *fp)
+{
+ gboolean folded = FALSE;
+ gint nexthead;
+ gchar *bufp;
+
+ if (fgets(buf, len, fp) == NULL) return NULL;
+ if (buf[0] == '\r' || buf[0] == '\n') return NULL;
+ bufp = buf + strlen(buf);
+
+ for (; bufp > buf &&
+ (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
+ bufp--)
+ *(bufp - 1) = '\0';
+
+ while (1) {
+ nexthead = fgetc(fp);
+
+ /* folded */
+ if (nexthead == ' ' || nexthead == '\t')
+ folded = TRUE;
+ else if (nexthead == EOF)
+ break;
+ else if (folded == TRUE) {
+ if ((len - (bufp - buf)) <= 2) break;
+
+ if (nexthead == '\n') {
+ folded = FALSE;
+ continue;
+ }
+
+ /* replace return code on the tail end
+ with space */
+ *bufp++ = ' ';
+ *bufp++ = nexthead;
+ *bufp = '\0';
+
+ /* concatenate next line */
+ if (fgets(bufp, len - (bufp - buf), fp)
+ == NULL) break;
+ bufp += strlen(bufp);
+
+ for (; bufp > buf &&
+ (*(bufp - 1) == '\n' || *(bufp - 1) == '\r');
+ bufp--)
+ *(bufp - 1) = '\0';
+
+ folded = FALSE;
+ } else {
+ ungetc(nexthead, fp);
+ break;
+ }
+ }
+
+ /* remove trailing return code */
+ strretchomp(buf);
+
+ return buf;
+}
+
+GSList *procheader_get_header_list_from_file(const gchar *file)
+{
+ FILE *fp;
+ GSList *hlist;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+
+ hlist = procheader_get_header_list(fp);
+
+ fclose(fp);
+ return hlist;
+}
+
+GSList *procheader_get_header_list(FILE *fp)
+{
+ gchar buf[BUFFSIZE], tmp[BUFFSIZE];
+ gchar *p;
+ GSList *hlist = NULL;
+ Header *header;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
+ if (*buf == ':') continue;
+ for (p = buf; *p && *p != ' '; p++) {
+ if (*p == ':') {
+ header = g_new(Header, 1);
+ header->name = g_strndup(buf, p - buf);
+ p++;
+ while (*p == ' ' || *p == '\t') p++;
+ conv_unmime_header(tmp, sizeof(tmp), p, NULL);
+ header->body = g_strdup(tmp);
+
+ hlist = g_slist_append(hlist, header);
+ break;
+ }
+ }
+ }
+
+ return hlist;
+}
+
+GSList *procheader_add_header_list(GSList *hlist, const gchar *header_name,
+ const gchar *body)
+{
+ Header *header;
+
+ g_return_val_if_fail(header_name != NULL, hlist);
+
+ header = g_new(Header, 1);
+ header->name = g_strdup(header_name);
+ header->body = g_strdup(body);
+
+ return g_slist_append(hlist, header);
+}
+
+GSList *procheader_merge_header_list(GSList *hlist1, GSList *hlist2)
+{
+ GSList *cur;
+
+ for (cur = hlist2; cur != NULL; cur = cur->next) {
+ Header *header = (Header *)cur->data;
+ if (procheader_find_header_list(hlist1, header->name) < 0)
+ hlist1 = g_slist_append(hlist1, header);
+ }
+
+ return hlist1;
+}
+
+gint procheader_find_header_list(GSList *hlist, const gchar *header_name)
+{
+ GSList *cur;
+ gint index = 0;
+ Header *header;
+
+ g_return_val_if_fail(header_name != NULL, -1);
+
+ for (cur = hlist; cur != NULL; cur = cur->next, index++) {
+ header = (Header *)cur->data;
+ if (g_strcasecmp(header->name, header_name) == 0)
+ return index;
+ }
+
+ return -1;
+}
+
+GPtrArray *procheader_get_header_array(FILE *fp)
+{
+ gchar buf[BUFFSIZE], tmp[BUFFSIZE];
+ gchar *p;
+ GPtrArray *headers;
+ Header *header;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ headers = g_ptr_array_new();
+
+ while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
+ if (*buf == ':') continue;
+ for (p = buf; *p && *p != ' '; p++) {
+ if (*p == ':') {
+ header = g_new(Header, 1);
+ header->name = g_strndup(buf, p - buf);
+ p++;
+ while (*p == ' ' || *p == '\t') p++;
+ conv_unmime_header(tmp, sizeof(tmp), p, NULL);
+ header->body = g_strdup(tmp);
+
+ g_ptr_array_add(headers, header);
+ break;
+ }
+ }
+ }
+
+ return headers;
+}
+
+GPtrArray *procheader_get_header_array_asis(FILE *fp)
+{
+ gchar buf[BUFFSIZE], tmp[BUFFSIZE];
+ gchar *p;
+ GPtrArray *headers;
+ Header *header;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ headers = g_ptr_array_new();
+
+ while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) {
+ if (*buf == ':') continue;
+ for (p = buf; *p && *p != ' '; p++) {
+ if (*p == ':') {
+ header = g_new(Header, 1);
+ header->name = g_strndup(buf, p - buf);
+ p++;
+ conv_unmime_header(tmp, sizeof(tmp), p, NULL);
+ header->body = g_strdup(tmp);
+
+ g_ptr_array_add(headers, header);
+ break;
+ }
+ }
+ }
+
+ return headers;
+}
+
+void procheader_header_list_destroy(GSList *hlist)
+{
+ Header *header;
+
+ while (hlist != NULL) {
+ header = hlist->data;
+ procheader_header_free(header);
+ hlist = g_slist_remove(hlist, header);
+ }
+}
+
+void procheader_header_array_destroy(GPtrArray *harray)
+{
+ gint i;
+ Header *header;
+
+ for (i = 0; i < harray->len; i++) {
+ header = g_ptr_array_index(harray, i);
+ procheader_header_free(header);
+ }
+
+ g_ptr_array_free(harray, TRUE);
+}
+
+void procheader_header_free(Header *header)
+{
+ if (!header) return;
+
+ g_free(header->name);
+ g_free(header->body);
+ g_free(header);
+}
+
+void procheader_get_header_fields(FILE *fp, HeaderEntry hentry[])
+{
+ gchar buf[BUFFSIZE];
+ HeaderEntry *hp;
+ gint hnum;
+ gchar *p;
+
+ if (hentry == NULL) return;
+
+ while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry))
+ != -1) {
+ hp = hentry + hnum;
+
+ p = buf + strlen(hp->name);
+ while (*p == ' ' || *p == '\t') p++;
+
+ if (hp->body == NULL)
+ hp->body = g_strdup(p);
+ else if (!strcasecmp(hp->name, "To:") ||
+ !strcasecmp(hp->name, "Cc:")) {
+ gchar *tp = hp->body;
+ hp->body = g_strconcat(tp, ", ", p, NULL);
+ g_free(tp);
+ }
+ }
+}
+
+MsgInfo *procheader_parse_file(const gchar *file, MsgFlags flags,
+ gboolean full)
+{
+ struct stat s;
+ FILE *fp;
+ MsgInfo *msginfo;
+
+ if (stat(file, &s) < 0) {
+ FILE_OP_ERROR(file, "stat");
+ return NULL;
+ }
+ if (!S_ISREG(s.st_mode))
+ return NULL;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+
+ msginfo = procheader_parse_stream(fp, flags, full);
+ fclose(fp);
+
+ if (msginfo) {
+ msginfo->size = s.st_size;
+ msginfo->mtime = s.st_mtime;
+ }
+
+ return msginfo;
+}
+
+MsgInfo *procheader_parse_str(const gchar *str, MsgFlags flags, gboolean full)
+{
+ FILE *fp;
+ MsgInfo *msginfo;
+
+ if ((fp = str_open_as_stream(str)) == NULL)
+ return NULL;
+
+ msginfo = procheader_parse_stream(fp, flags, full);
+ fclose(fp);
+ return msginfo;
+}
+
+enum
+{
+ H_DATE = 0,
+ H_FROM = 1,
+ H_TO = 2,
+ H_NEWSGROUPS = 3,
+ H_SUBJECT = 4,
+ H_MSG_ID = 5,
+ H_REFERENCES = 6,
+ H_IN_REPLY_TO = 7,
+ H_CONTENT_TYPE = 8,
+ H_SEEN = 9,
+ H_CC = 10,
+ H_X_FACE = 11
+};
+
+MsgInfo *procheader_parse_stream(FILE *fp, MsgFlags flags, gboolean full)
+{
+ static HeaderEntry hentry_full[] = {{"Date:", NULL, FALSE},
+ {"From:", NULL, TRUE},
+ {"To:", NULL, TRUE},
+ {"Newsgroups:", NULL, TRUE},
+ {"Subject:", NULL, TRUE},
+ {"Message-Id:", NULL, FALSE},
+ {"References:", NULL, FALSE},
+ {"In-Reply-To:", NULL, FALSE},
+ {"Content-Type:", NULL, FALSE},
+ {"Seen:", NULL, FALSE},
+ {"Cc:", NULL, TRUE},
+ {"X-Face:", NULL, FALSE},
+ {NULL, NULL, FALSE}};
+
+ static HeaderEntry hentry_short[] = {{"Date:", NULL, FALSE},
+ {"From:", NULL, TRUE},
+ {"To:", NULL, TRUE},
+ {"Newsgroups:", NULL, TRUE},
+ {"Subject:", NULL, TRUE},
+ {"Message-Id:", NULL, FALSE},
+ {"References:", NULL, FALSE},
+ {"In-Reply-To:", NULL, FALSE},
+ {"Content-Type:", NULL, FALSE},
+ {"Seen:", NULL, FALSE},
+ {NULL, NULL, FALSE}};
+
+ MsgInfo *msginfo;
+ gchar buf[BUFFSIZE], tmp[BUFFSIZE];
+ gchar *reference = NULL;
+ gchar *p;
+ gchar *hp;
+ HeaderEntry *hentry;
+ gint hnum;
+
+ hentry = full ? hentry_full : hentry_short;
+
+ if (MSG_IS_QUEUED(flags)) {
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+ }
+
+ msginfo = g_new0(MsgInfo, 1);
+ msginfo->flags = flags;
+ msginfo->inreplyto = NULL;
+
+ while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry))
+ != -1) {
+ hp = buf + strlen(hentry[hnum].name);
+ while (*hp == ' ' || *hp == '\t') hp++;
+
+ switch (hnum) {
+ case H_DATE:
+ if (msginfo->date) break;
+ msginfo->date_t =
+ procheader_date_parse(NULL, hp, 0);
+ msginfo->date = g_strdup(hp);
+ break;
+ case H_FROM:
+ if (msginfo->from) break;
+ conv_unmime_header(tmp, sizeof(tmp), hp, NULL);
+ msginfo->from = g_strdup(tmp);
+ msginfo->fromname = procheader_get_fromname(tmp);
+ break;
+ case H_TO:
+ conv_unmime_header(tmp, sizeof(tmp), hp, NULL);
+ if (msginfo->to) {
+ p = msginfo->to;
+ msginfo->to =
+ g_strconcat(p, ", ", tmp, NULL);
+ g_free(p);
+ } else
+ msginfo->to = g_strdup(tmp);
+ break;
+ case H_NEWSGROUPS:
+ if (msginfo->newsgroups) {
+ p = msginfo->newsgroups;
+ msginfo->newsgroups =
+ g_strconcat(p, ",", hp, NULL);
+ g_free(p);
+ } else
+ msginfo->newsgroups = g_strdup(buf + 12);
+ break;
+ case H_SUBJECT:
+ if (msginfo->subject) break;
+ conv_unmime_header(tmp, sizeof(tmp), hp, NULL);
+ msginfo->subject = g_strdup(tmp);
+ break;
+ case H_MSG_ID:
+ if (msginfo->msgid) break;
+
+ extract_parenthesis(hp, '<', '>');
+ remove_space(hp);
+ msginfo->msgid = g_strdup(hp);
+ break;
+ case H_REFERENCES:
+ case H_IN_REPLY_TO:
+ if (!reference) {
+ eliminate_parenthesis(hp, '(', ')');
+ if ((p = strrchr(hp, '<')) != NULL &&
+ strchr(p + 1, '>') != NULL) {
+ extract_parenthesis(p, '<', '>');
+ remove_space(p);
+ if (*p != '\0')
+ reference = g_strdup(p);
+ }
+ }
+ break;
+ case H_CONTENT_TYPE:
+ if (!strncasecmp(hp, "multipart", 9))
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MIME);
+ break;
+ case H_SEEN:
+ /* mnews Seen header */
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW|MSG_UNREAD);
+ break;
+ case H_CC:
+ conv_unmime_header(tmp, sizeof(tmp), hp, NULL);
+ if (msginfo->cc) {
+ p = msginfo->cc;
+ msginfo->cc =
+ g_strconcat(p, ", ", tmp, NULL);
+ g_free(p);
+ } else
+ msginfo->cc = g_strdup(tmp);
+ break;
+ case H_X_FACE:
+ if (msginfo->xface) break;
+ msginfo->xface = g_strdup(hp);
+ break;
+ default:
+ break;
+ }
+ }
+ msginfo->inreplyto = reference;
+
+ return msginfo;
+}
+
+gchar *procheader_get_fromname(const gchar *str)
+{
+ gchar *tmp, *name;
+
+ Xstrdup_a(tmp, str, return NULL);
+
+ if (*tmp == '\"') {
+ extract_quote(tmp, '\"');
+ g_strstrip(tmp);
+ } else if (strchr(tmp, '<')) {
+ eliminate_parenthesis(tmp, '<', '>');
+ g_strstrip(tmp);
+ if (*tmp == '\0') {
+ strcpy(tmp, str);
+ extract_parenthesis(tmp, '<', '>');
+ g_strstrip(tmp);
+ }
+ } else if (strchr(tmp, '(')) {
+ extract_parenthesis(tmp, '(', ')');
+ g_strstrip(tmp);
+ }
+
+ if (*tmp == '\0')
+ name = g_strdup(str);
+ else
+ name = g_strdup(tmp);
+
+ return name;
+}
+
+static gint procheader_scan_date_string(const gchar *str,
+ gchar *weekday, gint *day,
+ gchar *month, gint *year,
+ gint *hh, gint *mm, gint *ss,
+ gchar *zone)
+{
+ gint result;
+
+ result = sscanf(str, "%10s %d %9s %d %2d:%2d:%2d %5s",
+ weekday, day, month, year, hh, mm, ss, zone);
+ if (result == 8) return 0;
+
+ result = sscanf(str, "%3s,%d %9s %d %2d:%2d:%2d %5s",
+ weekday, day, month, year, hh, mm, ss, zone);
+ if (result == 8) return 0;
+
+ result = sscanf(str, "%d %9s %d %2d:%2d:%2d %5s",
+ day, month, year, hh, mm, ss, zone);
+ if (result == 7) return 0;
+
+ *zone = '\0';
+ result = sscanf(str, "%10s %d %9s %d %2d:%2d:%2d",
+ weekday, day, month, year, hh, mm, ss);
+ if (result == 7) return 0;
+
+ *ss = 0;
+ result = sscanf(str, "%10s %d %9s %d %2d:%2d %5s",
+ weekday, day, month, year, hh, mm, zone);
+ if (result == 7) return 0;
+
+ result = sscanf(str, "%d %9s %d %2d:%2d %5s",
+ day, month, year, hh, mm, zone);
+ if (result == 6) return 0;
+
+ return -1;
+}
+
+time_t procheader_date_parse(gchar *dest, const gchar *src, gint len)
+{
+ static gchar monthstr[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
+ gchar weekday[11];
+ gint day;
+ gchar month[10];
+ gint year;
+ gint hh, mm, ss;
+ gchar zone[6];
+ GDateMonth dmonth = G_DATE_BAD_MONTH;
+ struct tm t;
+ gchar *p;
+ time_t timer;
+ time_t tz_offset;
+
+ if (procheader_scan_date_string(src, weekday, &day, month, &year,
+ &hh, &mm, &ss, zone) < 0) {
+ g_warning("Invalid date: %s\n", src);
+ if (dest && len > 0)
+ strncpy2(dest, src, len);
+ return 0;
+ }
+
+ /* Y2K compliant :) */
+ if (year < 1000) {
+ if (year < 50)
+ year += 2000;
+ else
+ year += 1900;
+ }
+
+ month[3] = '\0';
+ for (p = monthstr; *p != '\0'; p += 3) {
+ if (!strncasecmp(p, month, 3)) {
+ dmonth = (gint)(p - monthstr) / 3 + 1;
+ break;
+ }
+ }
+ if (*p == '\0')
+ g_warning("Invalid month: %s\n", month);
+
+ t.tm_sec = ss;
+ t.tm_min = mm;
+ t.tm_hour = hh;
+ t.tm_mday = day;
+ t.tm_mon = dmonth - 1;
+ t.tm_year = year - 1900;
+ t.tm_wday = 0;
+ t.tm_yday = 0;
+ t.tm_isdst = -1;
+
+ timer = mktime(&t);
+ tz_offset = remote_tzoffset_sec(zone);
+ if (tz_offset != -1)
+ timer += tzoffset_sec(&timer) - tz_offset;
+
+ if (dest)
+ procheader_date_get_localtime(dest, len, timer);
+
+ return timer;
+}
+
+void procheader_date_get_localtime(gchar *dest, gint len, const time_t timer)
+{
+ struct tm *lt;
+ gchar *default_format = "%y/%m/%d(%a) %H:%M";
+ gchar *tmp;
+
+ Xalloca(tmp, len + 1, dest[0] = '\0'; return;);
+
+ lt = localtime(&timer);
+
+ if (prefs_common.date_format)
+ strftime(tmp, len, prefs_common.date_format, lt);
+ else
+ strftime(tmp, len, default_format, lt);
+
+ conv_localetodisp(dest, len, tmp);
+}
diff --git a/src/procheader.h b/src/procheader.h
new file mode 100644
index 00000000..f03a97be
--- /dev/null
+++ b/src/procheader.h
@@ -0,0 +1,91 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PROCHEADER_H__
+#define __PROCHEADER_H__
+
+#include <glib.h>
+#include <stdio.h>
+#include <time.h>
+
+#include "procmsg.h"
+
+typedef struct _HeaderEntry HeaderEntry;
+typedef struct _Header Header;
+
+struct _HeaderEntry
+{
+ gchar *name;
+ gchar *body;
+ gboolean unfold;
+};
+
+struct _Header
+{
+ gchar *name;
+ gchar *body;
+};
+
+gint procheader_get_one_field (gchar *buf,
+ gint len,
+ FILE *fp,
+ HeaderEntry hentry[]);
+gchar *procheader_get_unfolded_line (gchar *buf,
+ gint len,
+ FILE *fp);
+
+GSList *procheader_get_header_list_from_file (const gchar *file);
+GSList *procheader_get_header_list (FILE *fp);
+GSList *procheader_add_header_list (GSList *hlist,
+ const gchar *header_name,
+ const gchar *body);
+GSList *procheader_merge_header_list (GSList *hlist1,
+ GSList *hlist2);
+gint procheader_find_header_list (GSList *hlist,
+ const gchar *header_name);
+void procheader_header_list_destroy (GSList *hlist);
+
+GPtrArray *procheader_get_header_array (FILE *fp);
+GPtrArray *procheader_get_header_array_asis (FILE *fp);
+void procheader_header_array_destroy (GPtrArray *harray);
+
+void procheader_header_free (Header *header);
+
+void procheader_get_header_fields (FILE *fp,
+ HeaderEntry hentry[]);
+MsgInfo *procheader_parse_file (const gchar *file,
+ MsgFlags flags,
+ gboolean full);
+MsgInfo *procheader_parse_str (const gchar *str,
+ MsgFlags flags,
+ gboolean full);
+MsgInfo *procheader_parse_stream (FILE *fp,
+ MsgFlags flags,
+ gboolean full);
+
+gchar *procheader_get_fromname (const gchar *str);
+
+time_t procheader_date_parse (gchar *dest,
+ const gchar *src,
+ gint len);
+void procheader_date_get_localtime (gchar *dest,
+ gint len,
+ const time_t timer);
+
+#endif /* __PROCHEADER_H__ */
diff --git a/src/procmime.c b/src/procmime.c
new file mode 100644
index 00000000..eb6225df
--- /dev/null
+++ b/src/procmime.c
@@ -0,0 +1,1128 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+#include <ctype.h>
+
+#include "intl.h"
+#include "procmime.h"
+#include "procheader.h"
+#include "base64.h"
+#include "quoted-printable.h"
+#include "uuencode.h"
+#include "unmime.h"
+#include "html.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "prefs_common.h"
+
+#if USE_GPGME
+# include "rfc2015.h"
+#endif
+
+static GHashTable *procmime_get_mime_type_table (void);
+static GList *procmime_get_mime_type_list (const gchar *file);
+
+
+MimeInfo *procmime_mimeinfo_new(void)
+{
+ MimeInfo *mimeinfo;
+
+ mimeinfo = g_new0(MimeInfo, 1);
+ mimeinfo->mime_type = MIME_UNKNOWN;
+ mimeinfo->encoding_type = ENC_UNKNOWN;
+
+ return mimeinfo;
+}
+
+void procmime_mimeinfo_free_all(MimeInfo *mimeinfo)
+{
+ while (mimeinfo != NULL) {
+ MimeInfo *next;
+
+ g_free(mimeinfo->encoding);
+ g_free(mimeinfo->content_type);
+ g_free(mimeinfo->charset);
+ g_free(mimeinfo->name);
+ g_free(mimeinfo->boundary);
+ g_free(mimeinfo->content_disposition);
+ g_free(mimeinfo->filename);
+#if USE_GPGME
+ g_free(mimeinfo->plaintextfile);
+ g_free(mimeinfo->sigstatus);
+ g_free(mimeinfo->sigstatus_full);
+#endif
+
+ procmime_mimeinfo_free_all(mimeinfo->sub);
+ procmime_mimeinfo_free_all(mimeinfo->children);
+#if USE_GPGME
+ procmime_mimeinfo_free_all(mimeinfo->plaintext);
+#endif
+
+ next = mimeinfo->next;
+ g_free(mimeinfo);
+ mimeinfo = next;
+ }
+}
+
+MimeInfo *procmime_mimeinfo_insert(MimeInfo *parent, MimeInfo *mimeinfo)
+{
+ MimeInfo *child = parent->children;
+
+ if (!child)
+ parent->children = mimeinfo;
+ else {
+ while (child->next != NULL)
+ child = child->next;
+
+ child->next = mimeinfo;
+ }
+
+ mimeinfo->parent = parent;
+ mimeinfo->level = parent->level + 1;
+
+ return mimeinfo;
+}
+
+void procmime_mimeinfo_replace(MimeInfo *old, MimeInfo *new)
+{
+ MimeInfo *parent = old->parent;
+ MimeInfo *child;
+
+ g_return_if_fail(parent != NULL);
+ g_return_if_fail(new->next == NULL);
+
+ for (child = parent->children; child && child != old;
+ child = child->next)
+ ;
+ if (!child) {
+ g_warning("oops: parent can't find it's own child");
+ return;
+ }
+ procmime_mimeinfo_free_all(old);
+
+ if (child == parent->children) {
+ new->next = parent->children->next;
+ parent->children = new;
+ } else {
+ new->next = child->next;
+ child = new;
+ }
+}
+
+MimeInfo *procmime_mimeinfo_next(MimeInfo *mimeinfo)
+{
+ if (!mimeinfo) return NULL;
+
+ if (mimeinfo->children)
+ return mimeinfo->children;
+ if (mimeinfo->sub)
+ return mimeinfo->sub;
+ if (mimeinfo->next)
+ return mimeinfo->next;
+
+ if (mimeinfo->main) {
+ mimeinfo = mimeinfo->main;
+ if (mimeinfo->next)
+ return mimeinfo->next;
+ }
+
+ for (mimeinfo = mimeinfo->parent; mimeinfo != NULL;
+ mimeinfo = mimeinfo->parent) {
+ if (mimeinfo->next)
+ return mimeinfo->next;
+ if (mimeinfo->main) {
+ mimeinfo = mimeinfo->main;
+ if (mimeinfo->next)
+ return mimeinfo->next;
+ }
+ }
+
+ return NULL;
+}
+
+#if 0
+void procmime_dump_mimeinfo(MimeInfo *mimeinfo)
+{
+ gint i;
+
+ g_print("\n");
+
+ for (; mimeinfo != NULL; mimeinfo = procmime_mimeinfo_next(mimeinfo)) {
+ for (i = 0; i < mimeinfo->level; i++)
+ g_print(" ");
+ g_print("%s%s\n", mimeinfo->main ? "sub: " : "",
+ mimeinfo->content_type);
+ }
+}
+#endif
+
+MimeInfo *procmime_scan_message(MsgInfo *msginfo)
+{
+ FILE *fp;
+ MimeInfo *mimeinfo;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+#if USE_GPGME
+ if ((fp = procmsg_open_message_decrypted(msginfo, &mimeinfo)) == NULL)
+ return NULL;
+#else
+ if ((fp = procmsg_open_message(msginfo)) == NULL) return NULL;
+ mimeinfo = procmime_scan_mime_header(fp);
+#endif
+
+ if (mimeinfo) {
+ mimeinfo->size = get_left_file_size(fp);
+ if (mimeinfo->mime_type == MIME_MULTIPART ||
+ mimeinfo->mime_type == MIME_MESSAGE_RFC822)
+ procmime_scan_multipart_message(mimeinfo, fp);
+ }
+
+ fclose(fp);
+
+ return mimeinfo;
+}
+
+void procmime_scan_multipart_message(MimeInfo *mimeinfo, FILE *fp)
+{
+ gchar *p;
+ gchar *boundary;
+ gint boundary_len = 0;
+ gchar buf[BUFFSIZE];
+ glong fpos, prev_fpos;
+
+ g_return_if_fail(mimeinfo != NULL);
+ g_return_if_fail(mimeinfo->mime_type == MIME_MULTIPART ||
+ mimeinfo->mime_type == MIME_MESSAGE_RFC822);
+
+ if (mimeinfo->mime_type == MIME_MULTIPART) {
+ g_return_if_fail(mimeinfo->boundary != NULL);
+ g_return_if_fail(mimeinfo->sub == NULL);
+ }
+ g_return_if_fail(fp != NULL);
+
+ boundary = mimeinfo->boundary;
+
+ if (boundary) {
+ boundary_len = strlen(boundary);
+
+ /* look for first boundary */
+ while ((p = fgets(buf, sizeof(buf), fp)) != NULL)
+ if (IS_BOUNDARY(buf, boundary, boundary_len)) break;
+ if (!p) return;
+ } else if (mimeinfo->parent && mimeinfo->parent->boundary) {
+ boundary = mimeinfo->parent->boundary;
+ boundary_len = strlen(boundary);
+ }
+
+ if ((fpos = ftell(fp)) < 0) {
+ perror("ftell");
+ return;
+ }
+
+ for (;;) {
+ MimeInfo *partinfo;
+ gboolean eom = FALSE;
+ gint len;
+
+ prev_fpos = fpos;
+ debug_print("prev_fpos: %ld\n", fpos);
+
+ if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
+ MimeInfo *sub;
+
+ mimeinfo->sub = sub = procmime_scan_mime_header(fp);
+ if (!sub) break;
+
+ sub->level = mimeinfo->level + 1;
+ sub->parent = mimeinfo->parent;
+ sub->main = mimeinfo;
+
+ partinfo = sub;
+ } else {
+ partinfo = procmime_scan_mime_header(fp);
+ if (!partinfo) break;
+ procmime_mimeinfo_insert(mimeinfo, partinfo);
+ debug_print("content-type: %s\n",
+ partinfo->content_type);
+ }
+
+ if (partinfo->mime_type == MIME_MULTIPART ||
+ partinfo->mime_type == MIME_MESSAGE_RFC822) {
+ if (partinfo->level < 8)
+ procmime_scan_multipart_message(partinfo, fp);
+ }
+
+ /* look for next boundary */
+ buf[0] = '\0';
+ while ((p = fgets(buf, sizeof(buf), fp)) != NULL) {
+ if (IS_BOUNDARY(buf, boundary, boundary_len)) {
+ if (buf[2 + boundary_len] == '-' &&
+ buf[2 + boundary_len + 1] == '-')
+ eom = TRUE;
+ break;
+ }
+ }
+ if (p == NULL) {
+ /* broken MIME, or single part MIME message */
+ buf[0] = '\0';
+ eom = TRUE;
+ }
+ debug_print("boundary: %s\n", buf);
+
+ fpos = ftell(fp);
+ debug_print("fpos: %ld\n", fpos);
+
+ len = strlen(buf);
+ partinfo->size = fpos - prev_fpos - len;
+ debug_print("partinfo->size: %d\n", partinfo->size);
+ if (partinfo->sub && !partinfo->sub->sub &&
+ !partinfo->sub->children) {
+ partinfo->sub->size =
+ fpos - partinfo->sub->fpos - strlen(buf);
+ debug_print("partinfo->sub->size: %d\n",
+ partinfo->sub->size);
+ }
+
+ if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
+ if (len > 0 && fseek(fp, fpos - len, SEEK_SET) < 0)
+ perror("fseek");
+ break;
+ }
+
+ if (eom) break;
+ }
+}
+
+void procmime_scan_encoding(MimeInfo *mimeinfo, const gchar *encoding)
+{
+ gchar *buf;
+
+ Xstrdup_a(buf, encoding, return);
+
+ g_free(mimeinfo->encoding);
+
+ mimeinfo->encoding = g_strdup(g_strstrip(buf));
+ if (!strcasecmp(buf, "7bit"))
+ mimeinfo->encoding_type = ENC_7BIT;
+ else if (!strcasecmp(buf, "8bit"))
+ mimeinfo->encoding_type = ENC_8BIT;
+ else if (!strcasecmp(buf, "quoted-printable"))
+ mimeinfo->encoding_type = ENC_QUOTED_PRINTABLE;
+ else if (!strcasecmp(buf, "base64"))
+ mimeinfo->encoding_type = ENC_BASE64;
+ else if (!strcasecmp(buf, "x-uuencode"))
+ mimeinfo->encoding_type = ENC_X_UUENCODE;
+ else
+ mimeinfo->encoding_type = ENC_UNKNOWN;
+
+}
+
+void procmime_scan_content_type(MimeInfo *mimeinfo, const gchar *content_type)
+{
+ gchar *delim, *p, *cnttype;
+ gchar *buf;
+
+ if (conv_get_locale_charset() == C_EUC_JP &&
+ strchr(content_type, '\033')) {
+ gint len;
+ len = strlen(content_type) * 2 + 1;
+ Xalloca(buf, len, return);
+ conv_jistoeuc(buf, len, content_type);
+ } else
+ Xstrdup_a(buf, content_type, return);
+
+ g_free(mimeinfo->content_type);
+ g_free(mimeinfo->charset);
+ g_free(mimeinfo->name);
+ mimeinfo->content_type = NULL;
+ mimeinfo->charset = NULL;
+ mimeinfo->name = NULL;
+
+ if ((delim = strchr(buf, ';'))) *delim = '\0';
+ mimeinfo->content_type = cnttype = g_strdup(g_strstrip(buf));
+
+ mimeinfo->mime_type = procmime_scan_mime_type(cnttype);
+
+ if (!delim) return;
+ p = delim + 1;
+
+ for (;;) {
+ gchar *eq;
+ gchar *attr, *value;
+
+ if ((delim = strchr(p, ';'))) *delim = '\0';
+
+ if (!(eq = strchr(p, '='))) break;
+
+ *eq = '\0';
+ attr = p;
+ g_strstrip(attr);
+ value = eq + 1;
+ g_strstrip(value);
+
+ if (*value == '"')
+ extract_quote(value, '"');
+ else {
+ eliminate_parenthesis(value, '(', ')');
+ g_strstrip(value);
+ }
+
+ if (*value) {
+ if (!strcasecmp(attr, "charset"))
+ mimeinfo->charset = g_strdup(value);
+ else if (!strcasecmp(attr, "name")) {
+ gchar *tmp;
+ size_t len;
+
+ len = strlen(value) + 1;
+ Xalloca(tmp, len, return);
+ conv_unmime_header(tmp, len, value, NULL);
+ mimeinfo->name = g_strdup(tmp);
+ } else if (!strcasecmp(attr, "boundary"))
+ mimeinfo->boundary = g_strdup(value);
+ }
+
+ if (!delim) break;
+ p = delim + 1;
+ }
+
+ if (mimeinfo->mime_type == MIME_MULTIPART && !mimeinfo->boundary)
+ mimeinfo->mime_type = MIME_TEXT;
+}
+
+void procmime_scan_content_disposition(MimeInfo *mimeinfo,
+ const gchar *content_disposition)
+{
+ gchar *delim, *p, *dispos;
+ gchar *buf;
+
+ if (conv_get_locale_charset() == C_EUC_JP &&
+ strchr(content_disposition, '\033')) {
+ gint len;
+ len = strlen(content_disposition) * 2 + 1;
+ Xalloca(buf, len, return);
+ conv_jistoeuc(buf, len, content_disposition);
+ } else
+ Xstrdup_a(buf, content_disposition, return);
+
+ if ((delim = strchr(buf, ';'))) *delim = '\0';
+ mimeinfo->content_disposition = dispos = g_strdup(g_strstrip(buf));
+
+ if (!delim) return;
+ p = delim + 1;
+
+ for (;;) {
+ gchar *eq;
+ gchar *attr, *value;
+
+ if ((delim = strchr(p, ';'))) *delim = '\0';
+
+ if (!(eq = strchr(p, '='))) break;
+
+ *eq = '\0';
+ attr = p;
+ g_strstrip(attr);
+ value = eq + 1;
+ g_strstrip(value);
+
+ if (*value == '"')
+ extract_quote(value, '"');
+ else {
+ eliminate_parenthesis(value, '(', ')');
+ g_strstrip(value);
+ }
+
+ if (*value) {
+ if (!strcasecmp(attr, "filename")) {
+ gchar *tmp;
+ size_t len;
+
+ len = strlen(value) + 1;
+ Xalloca(tmp, len, return);
+ conv_unmime_header(tmp, len, value, NULL);
+ g_free(mimeinfo->filename);
+ mimeinfo->filename = g_strdup(tmp);
+ break;
+ }
+ }
+
+ if (!delim) break;
+ p = delim + 1;
+ }
+}
+
+enum
+{
+ H_CONTENT_TRANSFER_ENCODING = 0,
+ H_CONTENT_TYPE = 1,
+ H_CONTENT_DISPOSITION = 2
+};
+
+MimeInfo *procmime_scan_mime_header(FILE *fp)
+{
+ static HeaderEntry hentry[] = {{"Content-Transfer-Encoding:",
+ NULL, FALSE},
+ {"Content-Type:", NULL, TRUE},
+ {"Content-Disposition:",
+ NULL, TRUE},
+ {NULL, NULL, FALSE}};
+ gchar buf[BUFFSIZE];
+ gint hnum;
+ HeaderEntry *hp;
+ MimeInfo *mimeinfo;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ mimeinfo = procmime_mimeinfo_new();
+ mimeinfo->mime_type = MIME_TEXT;
+ mimeinfo->encoding_type = ENC_7BIT;
+ mimeinfo->fpos = ftell(fp);
+
+ while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry))
+ != -1) {
+ hp = hentry + hnum;
+
+ if (H_CONTENT_TRANSFER_ENCODING == hnum) {
+ procmime_scan_encoding
+ (mimeinfo, buf + strlen(hp->name));
+ } else if (H_CONTENT_TYPE == hnum) {
+ procmime_scan_content_type
+ (mimeinfo, buf + strlen(hp->name));
+ } else if (H_CONTENT_DISPOSITION == hnum) {
+ procmime_scan_content_disposition
+ (mimeinfo, buf + strlen(hp->name));
+ }
+ }
+
+ if (mimeinfo->mime_type == MIME_APPLICATION_OCTET_STREAM &&
+ mimeinfo->name) {
+ const gchar *type;
+ type = procmime_get_mime_type(mimeinfo->name);
+ if (type)
+ mimeinfo->mime_type = procmime_scan_mime_type(type);
+ }
+
+ if (!mimeinfo->content_type)
+ mimeinfo->content_type = g_strdup("text/plain");
+
+ return mimeinfo;
+}
+
+FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo)
+{
+ gchar buf[BUFFSIZE];
+ gchar *boundary = NULL;
+ gint boundary_len = 0;
+ gboolean tmp_file = FALSE;
+
+ g_return_val_if_fail(infp != NULL, NULL);
+ g_return_val_if_fail(mimeinfo != NULL, NULL);
+
+ if (!outfp) {
+ outfp = my_tmpfile();
+ if (!outfp) {
+ perror("tmpfile");
+ return NULL;
+ }
+ tmp_file = TRUE;
+ }
+
+ if (mimeinfo->parent && mimeinfo->parent->boundary) {
+ boundary = mimeinfo->parent->boundary;
+ boundary_len = strlen(boundary);
+ }
+
+ if (mimeinfo->encoding_type == ENC_QUOTED_PRINTABLE) {
+ while (fgets(buf, sizeof(buf), infp) != NULL &&
+ (!boundary ||
+ !IS_BOUNDARY(buf, boundary, boundary_len))) {
+ gint len;
+ len = qp_decode_line(buf);
+ fwrite(buf, len, 1, outfp);
+ }
+ } else if (mimeinfo->encoding_type == ENC_BASE64) {
+ gchar outbuf[BUFFSIZE];
+ gint len;
+ Base64Decoder *decoder;
+ gboolean uncanonicalize = FALSE;
+ FILE *tmpfp = outfp;
+
+ if (mimeinfo->mime_type == MIME_TEXT ||
+ mimeinfo->mime_type == MIME_TEXT_HTML ||
+ mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
+ uncanonicalize = TRUE;
+ tmpfp = my_tmpfile();
+ if (!tmpfp) {
+ perror("tmpfile");
+ if (tmp_file) fclose(outfp);
+ return NULL;
+ }
+ }
+
+ decoder = base64_decoder_new();
+ while (fgets(buf, sizeof(buf), infp) != NULL &&
+ (!boundary ||
+ !IS_BOUNDARY(buf, boundary, boundary_len))) {
+ len = base64_decoder_decode(decoder, buf, outbuf);
+ if (len < 0) {
+ g_warning("Bad BASE64 content\n");
+ break;
+ }
+ fwrite(outbuf, sizeof(gchar), len, tmpfp);
+ }
+ base64_decoder_free(decoder);
+
+ if (uncanonicalize) {
+ rewind(tmpfp);
+ while (fgets(buf, sizeof(buf), tmpfp) != NULL) {
+ strcrchomp(buf);
+ fputs(buf, outfp);
+ }
+ fclose(tmpfp);
+ }
+ } else if (mimeinfo->encoding_type == ENC_X_UUENCODE) {
+ gchar outbuf[BUFFSIZE];
+ gint len;
+ gboolean flag = FALSE;
+
+ while (fgets(buf, sizeof(buf), infp) != NULL &&
+ (!boundary ||
+ !IS_BOUNDARY(buf, boundary, boundary_len))) {
+ if(!flag && strncmp(buf,"begin ", 6)) continue;
+
+ if (flag) {
+ len = fromuutobits(outbuf, buf);
+ if (len <= 0) {
+ if (len < 0)
+ g_warning("Bad UUENCODE content(%d)\n", len);
+ break;
+ }
+ fwrite(outbuf, sizeof(gchar), len, outfp);
+ } else
+ flag = TRUE;
+ }
+ } else {
+ while (fgets(buf, sizeof(buf), infp) != NULL &&
+ (!boundary ||
+ !IS_BOUNDARY(buf, boundary, boundary_len))) {
+ fputs(buf, outfp);
+ }
+ }
+
+ if (tmp_file) rewind(outfp);
+ return outfp;
+}
+
+gint procmime_get_part(const gchar *outfile, const gchar *infile,
+ MimeInfo *mimeinfo)
+{
+ FILE *infp, *outfp;
+ gchar buf[BUFFSIZE];
+
+ g_return_val_if_fail(outfile != NULL, -1);
+ g_return_val_if_fail(infile != NULL, -1);
+ g_return_val_if_fail(mimeinfo != NULL, -1);
+
+ if ((infp = fopen(infile, "rb")) == NULL) {
+ FILE_OP_ERROR(infile, "fopen");
+ return -1;
+ }
+ if (fseek(infp, mimeinfo->fpos, SEEK_SET) < 0) {
+ FILE_OP_ERROR(infile, "fseek");
+ fclose(infp);
+ return -1;
+ }
+ if ((outfp = fopen(outfile, "wb")) == NULL) {
+ FILE_OP_ERROR(outfile, "fopen");
+ fclose(infp);
+ return -1;
+ }
+
+ while (fgets(buf, sizeof(buf), infp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+
+ procmime_decode_content(outfp, infp, mimeinfo);
+
+ fclose(infp);
+ if (fclose(outfp) == EOF) {
+ FILE_OP_ERROR(outfile, "fclose");
+ unlink(outfile);
+ return -1;
+ }
+
+ return 0;
+}
+
+FILE *procmime_get_text_content(MimeInfo *mimeinfo, FILE *infp)
+{
+ FILE *tmpfp, *outfp;
+ gchar *src_codeset;
+ gboolean conv_fail = FALSE;
+ gchar buf[BUFFSIZE];
+ gchar *str;
+
+ g_return_val_if_fail(mimeinfo != NULL, NULL);
+ g_return_val_if_fail(infp != NULL, NULL);
+ g_return_val_if_fail(mimeinfo->mime_type == MIME_TEXT ||
+ mimeinfo->mime_type == MIME_TEXT_HTML, NULL);
+
+ if (fseek(infp, mimeinfo->fpos, SEEK_SET) < 0) {
+ perror("fseek");
+ return NULL;
+ }
+
+ while (fgets(buf, sizeof(buf), infp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+
+ tmpfp = procmime_decode_content(NULL, infp, mimeinfo);
+ if (!tmpfp)
+ return NULL;
+
+ if ((outfp = my_tmpfile()) == NULL) {
+ perror("tmpfile");
+ fclose(tmpfp);
+ return NULL;
+ }
+
+ src_codeset = prefs_common.force_charset
+ ? prefs_common.force_charset : mimeinfo->charset;
+
+ if (mimeinfo->mime_type == MIME_TEXT) {
+ while (fgets(buf, sizeof(buf), tmpfp) != NULL) {
+ str = conv_codeset_strdup(buf, src_codeset, NULL);
+ if (str) {
+ fputs(str, outfp);
+ g_free(str);
+ } else {
+ conv_fail = TRUE;
+ fputs(buf, outfp);
+ }
+ }
+ } else if (mimeinfo->mime_type == MIME_TEXT_HTML) {
+ HTMLParser *parser;
+ CodeConverter *conv;
+
+ conv = conv_code_converter_new(src_codeset);
+ parser = html_parser_new(tmpfp, conv);
+ while ((str = html_parse(parser)) != NULL) {
+ fputs(str, outfp);
+ }
+ html_parser_destroy(parser);
+ conv_code_converter_destroy(conv);
+ }
+
+ if (conv_fail)
+ g_warning(_("procmime_get_text_content(): Code conversion failed.\n"));
+
+ fclose(tmpfp);
+ rewind(outfp);
+
+ return outfp;
+}
+
+/* search the first text part of (multipart) MIME message,
+ decode, convert it and output to outfp. */
+FILE *procmime_get_first_text_content(MsgInfo *msginfo)
+{
+ FILE *infp, *outfp = NULL;
+ MimeInfo *mimeinfo, *partinfo;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ mimeinfo = procmime_scan_message(msginfo);
+ if (!mimeinfo) return NULL;
+
+ if ((infp = procmsg_open_message(msginfo)) == NULL) {
+ procmime_mimeinfo_free_all(mimeinfo);
+ return NULL;
+ }
+
+ partinfo = mimeinfo;
+ while (partinfo && partinfo->mime_type != MIME_TEXT)
+ partinfo = procmime_mimeinfo_next(partinfo);
+ if (!partinfo) {
+ partinfo = mimeinfo;
+ while (partinfo && partinfo->mime_type != MIME_TEXT_HTML)
+ partinfo = procmime_mimeinfo_next(partinfo);
+ }
+
+ if (partinfo)
+ outfp = procmime_get_text_content(partinfo, infp);
+
+ fclose(infp);
+ procmime_mimeinfo_free_all(mimeinfo);
+
+ return outfp;
+}
+
+gboolean procmime_find_string_part(MimeInfo *mimeinfo, const gchar *filename,
+ const gchar *str, StrFindFunc find_func)
+{
+
+ FILE *infp, *outfp;
+ gchar buf[BUFFSIZE];
+
+ g_return_val_if_fail(mimeinfo != NULL, FALSE);
+ g_return_val_if_fail(mimeinfo->mime_type == MIME_TEXT ||
+ mimeinfo->mime_type == MIME_TEXT_HTML, FALSE);
+ g_return_val_if_fail(str != NULL, FALSE);
+ g_return_val_if_fail(find_func != NULL, FALSE);
+
+ if ((infp = fopen(filename, "rb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ return FALSE;
+ }
+
+ outfp = procmime_get_text_content(mimeinfo, infp);
+ fclose(infp);
+
+ if (!outfp)
+ return FALSE;
+
+ while (fgets(buf, sizeof(buf), outfp) != NULL) {
+ strretchomp(buf);
+ if (find_func(buf, str)) {
+ fclose(outfp);
+ return TRUE;
+ }
+ }
+
+ fclose(outfp);
+
+ return FALSE;
+}
+
+gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
+ StrFindFunc find_func)
+{
+ MimeInfo *mimeinfo;
+ MimeInfo *partinfo;
+ gchar *filename;
+ gboolean found = FALSE;
+
+ g_return_val_if_fail(msginfo != NULL, FALSE);
+ g_return_val_if_fail(str != NULL, FALSE);
+ g_return_val_if_fail(find_func != NULL, FALSE);
+
+ filename = procmsg_get_message_file(msginfo);
+ if (!filename) return FALSE;
+ mimeinfo = procmime_scan_message(msginfo);
+
+ for (partinfo = mimeinfo; partinfo != NULL;
+ partinfo = procmime_mimeinfo_next(partinfo)) {
+ if (partinfo->mime_type == MIME_TEXT ||
+ partinfo->mime_type == MIME_TEXT_HTML) {
+ if (procmime_find_string_part
+ (partinfo, filename, str, find_func) == TRUE) {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ procmime_mimeinfo_free_all(mimeinfo);
+ g_free(filename);
+
+ return found;
+}
+
+gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo)
+{
+ static guint32 id = 0;
+ gchar *base;
+ gchar *filename;
+ gchar f_prefix[10];
+
+ g_return_val_if_fail(mimeinfo != NULL, NULL);
+
+ g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++);
+
+ if (MIME_TEXT_HTML == mimeinfo->mime_type)
+ base = "mimetmp.html";
+ else {
+ const gchar *base_;
+ base_ = mimeinfo->filename ? mimeinfo->filename
+ : mimeinfo->name ? mimeinfo->name : "mimetmp";
+ base_ = g_basename(base_);
+ if (*base_ == '\0') base_ = "mimetmp";
+ Xstrdup_a(base, base_, return NULL);
+ subst_for_filename(base);
+ }
+
+ filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
+ f_prefix, base, NULL);
+
+ return filename;
+}
+
+ContentType procmime_scan_mime_type(const gchar *mime_type)
+{
+ ContentType type;
+
+ if (!strncasecmp(mime_type, "text/html", 9))
+ type = MIME_TEXT_HTML;
+ else if (!strncasecmp(mime_type, "text/", 5))
+ type = MIME_TEXT;
+ else if (!strncasecmp(mime_type, "message/rfc822", 14))
+ type = MIME_MESSAGE_RFC822;
+ else if (!strncasecmp(mime_type, "message/", 8))
+ type = MIME_TEXT;
+ else if (!strncasecmp(mime_type, "application/octet-stream", 24))
+ type = MIME_APPLICATION_OCTET_STREAM;
+ else if (!strncasecmp(mime_type, "application/", 12))
+ type = MIME_APPLICATION;
+ else if (!strncasecmp(mime_type, "multipart/", 10))
+ type = MIME_MULTIPART;
+ else if (!strncasecmp(mime_type, "image/", 6))
+ type = MIME_IMAGE;
+ else if (!strncasecmp(mime_type, "audio/", 6))
+ type = MIME_AUDIO;
+ else if (!strcasecmp(mime_type, "text"))
+ type = MIME_TEXT;
+ else
+ type = MIME_UNKNOWN;
+
+ return type;
+}
+
+static GList *mime_type_list = NULL;
+
+gchar *procmime_get_mime_type(const gchar *filename)
+{
+ static GHashTable *mime_type_table = NULL;
+ MimeType *mime_type;
+ const gchar *p;
+ gchar *ext;
+
+ if (!mime_type_table) {
+ mime_type_table = procmime_get_mime_type_table();
+ if (!mime_type_table) return NULL;
+ }
+
+ filename = g_basename(filename);
+ p = strrchr(filename, '.');
+ if (!p) return NULL;
+
+ Xstrdup_a(ext, p + 1, return NULL);
+ g_strdown(ext);
+ mime_type = g_hash_table_lookup(mime_type_table, ext);
+ if (mime_type) {
+ gchar *str;
+
+ str = g_strconcat(mime_type->type, "/", mime_type->sub_type,
+ NULL);
+ return str;
+ }
+
+ return NULL;
+}
+
+static GHashTable *procmime_get_mime_type_table(void)
+{
+ GHashTable *table = NULL;
+ GList *cur;
+ MimeType *mime_type;
+ gchar **exts;
+
+ if (!mime_type_list) {
+ GList *list;
+ gchar *dir;
+
+ mime_type_list =
+ procmime_get_mime_type_list(SYSCONFDIR "/mime.types");
+ if (!mime_type_list) {
+ list = procmime_get_mime_type_list("/etc/mime.types");
+ mime_type_list = g_list_concat(mime_type_list, list);
+ }
+ dir = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S, RC_DIR,
+ G_DIR_SEPARATOR_S, "mime.types", NULL);
+ list = procmime_get_mime_type_list(dir);
+ g_free(dir);
+ mime_type_list = g_list_concat(mime_type_list, list);
+
+ if (!mime_type_list) {
+ g_warning("mime.types not found\n");
+ return NULL;
+ }
+ }
+
+ table = g_hash_table_new(g_str_hash, g_str_equal);
+
+ for (cur = mime_type_list; cur != NULL; cur = cur->next) {
+ gint i;
+ gchar *key;
+
+ mime_type = (MimeType *)cur->data;
+
+ if (!mime_type->extension) continue;
+
+ exts = g_strsplit(mime_type->extension, " ", 16);
+ for (i = 0; exts[i] != NULL; i++) {
+ /* make the key case insensitive */
+ g_strdown(exts[i]);
+ /* use previously dup'd key on overwriting */
+ if (g_hash_table_lookup(table, exts[i]))
+ key = exts[i];
+ else
+ key = g_strdup(exts[i]);
+ g_hash_table_insert(table, key, mime_type);
+ }
+ g_strfreev(exts);
+ }
+
+ return table;
+}
+
+static GList *procmime_get_mime_type_list(const gchar *file)
+{
+ GList *list = NULL;
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+ guchar *p;
+ gchar *delim;
+ MimeType *mime_type;
+
+ if ((fp = fopen(file, "rb")) == NULL) return NULL;
+
+ debug_print("Reading %s ...\n", file);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ p = strchr(buf, '#');
+ if (p) *p = '\0';
+ g_strstrip(buf);
+
+ p = buf;
+ while (*p && !isspace(*p)) p++;
+ if (*p) {
+ *p = '\0';
+ p++;
+ }
+ delim = strchr(buf, '/');
+ if (delim == NULL) continue;
+ *delim = '\0';
+
+ mime_type = g_new(MimeType, 1);
+ mime_type->type = g_strdup(buf);
+ mime_type->sub_type = g_strdup(delim + 1);
+
+ while (*p && isspace(*p)) p++;
+ if (*p)
+ mime_type->extension = g_strdup(p);
+ else
+ mime_type->extension = NULL;
+
+ list = g_list_append(list, mime_type);
+ }
+
+ fclose(fp);
+
+ if (!list)
+ g_warning("Can't read mime.types\n");
+
+ return list;
+}
+
+EncodingType procmime_get_encoding_for_charset(const gchar *charset)
+{
+ if (!charset)
+ return ENC_8BIT;
+ else if (!strncasecmp(charset, "ISO-2022-", 9) ||
+ !strcasecmp(charset, "US-ASCII"))
+ return ENC_7BIT;
+ else if (!strcasecmp(charset, "ISO-8859-5") ||
+ !strncasecmp(charset, "KOI8-", 5) ||
+ !strcasecmp(charset, "Windows-1251"))
+ return ENC_8BIT;
+ else if (!strncasecmp(charset, "ISO-8859-", 9))
+ return ENC_QUOTED_PRINTABLE;
+ else
+ return ENC_8BIT;
+}
+
+EncodingType procmime_get_encoding_for_text_file(const gchar *file)
+{
+ FILE *fp;
+ guchar buf[BUFFSIZE];
+ size_t len;
+ size_t octet_chars = 0;
+ size_t total_len = 0;
+ gfloat octet_percentage;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return ENC_UNKNOWN;
+ }
+
+ while ((len = fread(buf, sizeof(guchar), sizeof(buf), fp)) > 0) {
+ guchar *p;
+ gint i;
+
+ for (p = buf, i = 0; i < len; ++p, ++i) {
+ if (*p & 0x80)
+ ++octet_chars;
+ }
+ total_len += len;
+ }
+
+ fclose(fp);
+
+ if (total_len > 0)
+ octet_percentage = (gfloat)octet_chars / (gfloat)total_len;
+ else
+ octet_percentage = 0.0;
+
+ debug_print("procmime_get_encoding_for_text_file(): "
+ "8bit chars: %d / %d (%f%%)\n", octet_chars, total_len,
+ 100.0 * octet_percentage);
+
+ if (octet_percentage > 0.20) {
+ debug_print("using BASE64\n");
+ return ENC_BASE64;
+ } else if (octet_chars > 0) {
+ debug_print("using quoted-printable\n");
+ return ENC_QUOTED_PRINTABLE;
+ } else {
+ debug_print("using 7bit\n");
+ return ENC_7BIT;
+ }
+}
+
+const gchar *procmime_get_encoding_str(EncodingType encoding)
+{
+ static const gchar *encoding_str[] = {
+ "7bit", "8bit", "quoted-printable", "base64", "x-uuencode",
+ NULL
+ };
+
+ if (encoding >= ENC_7BIT && encoding <= ENC_UNKNOWN)
+ return encoding_str[encoding];
+ else
+ return NULL;
+}
diff --git a/src/procmime.h b/src/procmime.h
new file mode 100644
index 00000000..c52d4bda
--- /dev/null
+++ b/src/procmime.h
@@ -0,0 +1,176 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PROCMIME_H__
+#define __PROCMIME_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+
+typedef struct _MimeType MimeType;
+typedef struct _MimeInfo MimeInfo;
+
+#include "procmsg.h"
+#include "utils.h"
+
+typedef enum
+{
+ ENC_7BIT,
+ ENC_8BIT,
+ ENC_QUOTED_PRINTABLE,
+ ENC_BASE64,
+ ENC_X_UUENCODE,
+ ENC_UNKNOWN
+} EncodingType;
+
+typedef enum
+{
+ MIME_TEXT,
+ MIME_TEXT_HTML,
+ MIME_MESSAGE_RFC822,
+ MIME_APPLICATION,
+ MIME_APPLICATION_OCTET_STREAM,
+ MIME_MULTIPART,
+ MIME_IMAGE,
+ MIME_AUDIO,
+ MIME_UNKNOWN
+} ContentType;
+
+struct _MimeType
+{
+ gchar *type;
+ gchar *sub_type;
+
+ gchar *extension;
+};
+
+/*
+ * An example of MimeInfo structure:
+ *
+ * multipart/mixed root <-+ parent
+ * |
+ * multipart/alternative children <-+ parent
+ * |
+ * text/plain children --+
+ * |
+ * text/html next <-+
+ *
+ * message/rfc822 next <-+ main
+ * |
+ * sub (capsulated message)
+ *
+ * image/jpeg next
+ */
+
+struct _MimeInfo
+{
+ gchar *encoding;
+
+ EncodingType encoding_type;
+ ContentType mime_type;
+
+ gchar *content_type;
+ gchar *charset;
+ gchar *name;
+ gchar *boundary;
+
+ gchar *content_disposition;
+ gchar *filename;
+
+ glong fpos;
+ guint size;
+
+ MimeInfo *main;
+ MimeInfo *sub;
+
+ MimeInfo *next;
+ MimeInfo *parent;
+ MimeInfo *children;
+
+#if USE_GPGME
+ MimeInfo *plaintext;
+ gchar *plaintextfile;
+ gchar *sigstatus;
+ gchar *sigstatus_full;
+#endif
+
+ gint level;
+};
+
+#define IS_BOUNDARY(s, bnd, len) \
+ (bnd && s[0] == '-' && s[1] == '-' && !strncmp(s + 2, bnd, len))
+
+/* MimeInfo handling */
+
+MimeInfo *procmime_mimeinfo_new (void);
+void procmime_mimeinfo_free_all (MimeInfo *mimeinfo);
+
+MimeInfo *procmime_mimeinfo_insert (MimeInfo *parent,
+ MimeInfo *mimeinfo);
+void procmime_mimeinfo_replace (MimeInfo *old,
+ MimeInfo *new);
+
+MimeInfo *procmime_mimeinfo_next (MimeInfo *mimeinfo);
+
+MimeInfo *procmime_scan_message (MsgInfo *msginfo);
+void procmime_scan_multipart_message (MimeInfo *mimeinfo,
+ FILE *fp);
+
+/* scan headers */
+
+void procmime_scan_encoding (MimeInfo *mimeinfo,
+ const gchar *encoding);
+void procmime_scan_content_type (MimeInfo *mimeinfo,
+ const gchar *content_type);
+void procmime_scan_content_disposition (MimeInfo *mimeinfo,
+ const gchar *content_disposition);
+MimeInfo *procmime_scan_mime_header (FILE *fp);
+
+FILE *procmime_decode_content (FILE *outfp,
+ FILE *infp,
+ MimeInfo *mimeinfo);
+gint procmime_get_part (const gchar *outfile,
+ const gchar *infile,
+ MimeInfo *mimeinfo);
+FILE *procmime_get_text_content (MimeInfo *mimeinfo,
+ FILE *infp);
+FILE *procmime_get_first_text_content (MsgInfo *msginfo);
+
+gboolean procmime_find_string_part (MimeInfo *mimeinfo,
+ const gchar *filename,
+ const gchar *str,
+ StrFindFunc find_func);
+gboolean procmime_find_string (MsgInfo *msginfo,
+ const gchar *str,
+ StrFindFunc find_func);
+
+gchar *procmime_get_tmp_file_name (MimeInfo *mimeinfo);
+
+ContentType procmime_scan_mime_type (const gchar *mime_type);
+gchar *procmime_get_mime_type (const gchar *filename);
+
+EncodingType procmime_get_encoding_for_charset (const gchar *charset);
+EncodingType procmime_get_encoding_for_text_file(const gchar *file);
+const gchar *procmime_get_encoding_str (EncodingType encoding);
+
+#endif /* __PROCMIME_H__ */
diff --git a/src/procmsg.c b/src/procmsg.c
new file mode 100644
index 00000000..0328d47a
--- /dev/null
+++ b/src/procmsg.c
@@ -0,0 +1,1519 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "intl.h"
+#include "main.h"
+#include "utils.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "account.h"
+#include "send_message.h"
+#include "procmime.h"
+#include "statusbar.h"
+#include "prefs_filter.h"
+#include "filter.h"
+#include "folder.h"
+#if USE_GPGME
+# include "rfc2015.h"
+#endif
+
+static void mark_sum_func (gpointer key,
+ gpointer value,
+ gpointer data);
+
+static GHashTable *procmsg_read_mark_file (FolderItem *item);
+static void procmsg_write_mark_file (FolderItem *item,
+ GHashTable *mark_table);
+
+static FILE *procmsg_open_data_file (const gchar *file,
+ guint version,
+ DataOpenMode mode,
+ gchar *buf,
+ size_t buf_size);
+static FILE *procmsg_open_cache_file_with_buffer(FolderItem *item,
+ DataOpenMode mode,
+ gchar *buf,
+ size_t buf_size);
+
+static gint procmsg_cmp_by_mark (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_unread (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_mime (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_label (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_number (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_size (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_date (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_from (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_to (gconstpointer a,
+ gconstpointer b);
+static gint procmsg_cmp_by_subject (gconstpointer a,
+ gconstpointer b);
+
+
+GHashTable *procmsg_msg_hash_table_create(GSList *mlist)
+{
+ GHashTable *msg_table;
+
+ if (mlist == NULL) return NULL;
+
+ msg_table = g_hash_table_new(NULL, g_direct_equal);
+ procmsg_msg_hash_table_append(msg_table, mlist);
+
+ return msg_table;
+}
+
+void procmsg_msg_hash_table_append(GHashTable *msg_table, GSList *mlist)
+{
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ if (msg_table == NULL || mlist == NULL) return;
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+
+ g_hash_table_insert(msg_table,
+ GUINT_TO_POINTER(msginfo->msgnum),
+ msginfo);
+ }
+}
+
+GHashTable *procmsg_to_folder_hash_table_create(GSList *mlist)
+{
+ GHashTable *msg_table;
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ if (mlist == NULL) return NULL;
+
+ msg_table = g_hash_table_new(NULL, g_direct_equal);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ g_hash_table_insert(msg_table, msginfo->to_folder, msginfo);
+ }
+
+ return msg_table;
+}
+
+static gint procmsg_read_cache_data_str(FILE *fp, gchar **str)
+{
+ gchar buf[BUFFSIZE];
+ gint ret = 0;
+ guint32 len;
+
+ if (fread(&len, sizeof(len), 1, fp) == 1) {
+ if (len > G_MAXINT)
+ ret = -1;
+ else {
+ gchar *tmp = NULL;
+
+ while (len > 0) {
+ size_t size = MIN(len, BUFFSIZE - 1);
+
+ if (fread(buf, size, 1, fp) != 1) {
+ ret = -1;
+ if (tmp) g_free(tmp);
+ *str = NULL;
+ break;
+ }
+
+ buf[size] = '\0';
+ if (tmp) {
+ *str = g_strconcat(tmp, buf, NULL);
+ g_free(tmp);
+ tmp = *str;
+ } else
+ tmp = *str = g_strdup(buf);
+
+ len -= size;
+ }
+ }
+ } else
+ ret = -1;
+
+ if (ret < 0)
+ g_warning("Cache data is corrupted\n");
+
+ return ret;
+}
+
+#define READ_CACHE_DATA(data, fp) \
+{ \
+ if (procmsg_read_cache_data_str(fp, &data) < 0) { \
+ procmsg_msginfo_free(msginfo); \
+ procmsg_msg_list_free(mlist); \
+ mlist = NULL; \
+ break; \
+ } \
+}
+
+#define READ_CACHE_DATA_INT(n, fp) \
+{ \
+ guint32 idata; \
+ \
+ if (fread(&idata, sizeof(idata), 1, fp) != 1) { \
+ g_warning("Cache data is corrupted\n"); \
+ procmsg_msginfo_free(msginfo); \
+ procmsg_msg_list_free(mlist); \
+ mlist = NULL; \
+ break; \
+ } else \
+ n = idata; \
+}
+
+GSList *procmsg_read_cache(FolderItem *item, gboolean scan_file)
+{
+ GSList *mlist = NULL;
+ GSList *last = NULL;
+ FILE *fp;
+ MsgInfo *msginfo;
+ MsgFlags default_flags;
+ gchar file_buf[BUFFSIZE];
+ guint32 num;
+ FolderType type;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->folder != NULL, NULL);
+ type = FOLDER_TYPE(item->folder);
+
+ default_flags.perm_flags = MSG_NEW|MSG_UNREAD;
+ default_flags.tmp_flags = 0;
+ if (type == F_MH || type == F_IMAP) {
+ if (item->stype == F_QUEUE) {
+ MSG_SET_TMP_FLAGS(default_flags, MSG_QUEUED);
+ } else if (item->stype == F_DRAFT) {
+ MSG_SET_TMP_FLAGS(default_flags, MSG_DRAFT);
+ }
+ }
+ if (type == F_IMAP) {
+ MSG_SET_TMP_FLAGS(default_flags, MSG_IMAP);
+ } else if (type == F_NEWS) {
+ MSG_SET_TMP_FLAGS(default_flags, MSG_NEWS);
+ }
+
+ if (type == F_MH) {
+ gchar *path;
+
+ path = folder_item_get_path(item);
+ if (change_dir(path) < 0) {
+ g_free(path);
+ return NULL;
+ }
+ g_free(path);
+ }
+
+ if ((fp = procmsg_open_cache_file_with_buffer
+ (item, DATA_READ, file_buf, sizeof(file_buf))) == NULL)
+ return NULL;
+
+ debug_print("Reading summary cache...");
+
+ while (fread(&num, sizeof(num), 1, fp) == 1) {
+ msginfo = g_new0(MsgInfo, 1);
+ msginfo->msgnum = num;
+ READ_CACHE_DATA_INT(msginfo->size, fp);
+ READ_CACHE_DATA_INT(msginfo->mtime, fp);
+ READ_CACHE_DATA_INT(msginfo->date_t, fp);
+ READ_CACHE_DATA_INT(msginfo->flags.tmp_flags, fp);
+
+ READ_CACHE_DATA(msginfo->fromname, fp);
+
+ READ_CACHE_DATA(msginfo->date, fp);
+ READ_CACHE_DATA(msginfo->from, fp);
+ READ_CACHE_DATA(msginfo->to, fp);
+ READ_CACHE_DATA(msginfo->newsgroups, fp);
+ READ_CACHE_DATA(msginfo->subject, fp);
+ READ_CACHE_DATA(msginfo->msgid, fp);
+ READ_CACHE_DATA(msginfo->inreplyto, fp);
+
+ MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags);
+ MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_flags);
+
+ /* if the message file doesn't exist or is changed,
+ don't add the data */
+ if (type == F_MH && scan_file &&
+ folder_item_is_msg_changed(item, msginfo))
+ procmsg_msginfo_free(msginfo);
+ else {
+ msginfo->folder = item;
+
+ if (!mlist)
+ last = mlist = g_slist_append(NULL, msginfo);
+ else {
+ last = g_slist_append(last, msginfo);
+ last = last->next;
+ }
+ }
+ }
+
+ fclose(fp);
+
+ debug_print("done.\n");
+
+ return mlist;
+}
+
+#undef READ_CACHE_DATA
+#undef READ_CACHE_DATA_INT
+
+static void mark_unset_new_func(gpointer key, gpointer value, gpointer data)
+{
+ MSG_UNSET_PERM_FLAGS(*((MsgFlags *)value), MSG_NEW);
+}
+
+void procmsg_set_flags(GSList *mlist, FolderItem *item)
+{
+ GSList *cur;
+ gint new = 0, unread = 0, total = 0;
+ gint lastnum = 0;
+ gint unflagged = 0;
+ gboolean mark_queue_exist;
+ MsgInfo *msginfo;
+ GHashTable *mark_table;
+ MsgFlags *flags;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ debug_print("Marking the messages...\n");
+
+ mark_queue_exist = (item->mark_queue != NULL);
+ mark_table = procmsg_read_mark_file(item);
+ if (!mark_table) {
+ item->new = item->unread = item->total = g_slist_length(mlist);
+ item->updated = TRUE;
+ return;
+ }
+
+ /* unset new flags if new (unflagged) messages exist */
+ if (!mark_queue_exist) {
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ flags = g_hash_table_lookup
+ (mark_table, GUINT_TO_POINTER(msginfo->msgnum));
+ if (!flags) {
+ g_hash_table_foreach(mark_table,
+ mark_unset_new_func, NULL);
+ break;
+ }
+ }
+ }
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+
+ if (lastnum < msginfo->msgnum)
+ lastnum = msginfo->msgnum;
+
+ flags = g_hash_table_lookup
+ (mark_table, GUINT_TO_POINTER(msginfo->msgnum));
+
+ if (flags != NULL) {
+ /* add the permanent flags only */
+ msginfo->flags.perm_flags = flags->perm_flags;
+ if (MSG_IS_NEW(*flags))
+ ++new;
+ if (MSG_IS_UNREAD(*flags))
+ ++unread;
+ if (FOLDER_TYPE(item->folder) == F_IMAP) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_IMAP);
+ } else if (FOLDER_TYPE(item->folder) == F_NEWS) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_NEWS);
+ }
+ } else {
+ ++unflagged;
+ ++new;
+ ++unread;
+ }
+
+ ++total;
+ }
+
+ item->new = new;
+ item->unread = unread;
+ item->total = total;
+ item->unmarked_num = unflagged;
+ item->last_num = lastnum;
+ item->updated = TRUE;
+
+ debug_print("new: %d unread: %d unflagged: %d total: %d\n",
+ new, unread, unflagged, total);
+
+ hash_free_value_mem(mark_table);
+ g_hash_table_destroy(mark_table);
+}
+
+static FolderSortType cmp_func_sort_type;
+
+GSList *procmsg_sort_msg_list(GSList *mlist, FolderSortKey sort_key,
+ FolderSortType sort_type)
+{
+ GCompareFunc cmp_func;
+
+ switch (sort_key) {
+ case SORT_BY_MARK:
+ cmp_func = procmsg_cmp_by_mark; break;
+ case SORT_BY_UNREAD:
+ cmp_func = procmsg_cmp_by_unread; break;
+ case SORT_BY_MIME:
+ cmp_func = procmsg_cmp_by_mime; break;
+ case SORT_BY_LABEL:
+ cmp_func = procmsg_cmp_by_label; break;
+ case SORT_BY_NUMBER:
+ cmp_func = procmsg_cmp_by_number; break;
+ case SORT_BY_SIZE:
+ cmp_func = procmsg_cmp_by_size; break;
+ case SORT_BY_DATE:
+ cmp_func = procmsg_cmp_by_date; break;
+ case SORT_BY_FROM:
+ cmp_func = procmsg_cmp_by_from; break;
+ case SORT_BY_SUBJECT:
+ cmp_func = procmsg_cmp_by_subject; break;
+ case SORT_BY_TO:
+ cmp_func = procmsg_cmp_by_to; break;
+ default:
+ return mlist;
+ }
+
+ cmp_func_sort_type = sort_type;
+
+ mlist = g_slist_sort(mlist, cmp_func);
+
+ return mlist;
+}
+
+gint procmsg_get_last_num_in_msg_list(GSList *mlist)
+{
+ GSList *cur;
+ MsgInfo *msginfo;
+ gint last = 0;
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ if (msginfo && msginfo->msgnum > last)
+ last = msginfo->msgnum;
+ }
+
+ return last;
+}
+
+void procmsg_msg_list_free(GSList *mlist)
+{
+ GSList *cur;
+ MsgInfo *msginfo;
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ procmsg_msginfo_free(msginfo);
+ }
+ g_slist_free(mlist);
+}
+
+void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
+{
+ MsgTmpFlags flags = msginfo->flags.tmp_flags & MSG_CACHED_FLAG_MASK;
+
+ WRITE_CACHE_DATA_INT(msginfo->msgnum, fp);
+ WRITE_CACHE_DATA_INT(msginfo->size, fp);
+ WRITE_CACHE_DATA_INT(msginfo->mtime, fp);
+ WRITE_CACHE_DATA_INT(msginfo->date_t, fp);
+ WRITE_CACHE_DATA_INT(flags, fp);
+
+ WRITE_CACHE_DATA(msginfo->fromname, fp);
+
+ WRITE_CACHE_DATA(msginfo->date, fp);
+ WRITE_CACHE_DATA(msginfo->from, fp);
+ WRITE_CACHE_DATA(msginfo->to, fp);
+ WRITE_CACHE_DATA(msginfo->newsgroups, fp);
+ WRITE_CACHE_DATA(msginfo->subject, fp);
+ WRITE_CACHE_DATA(msginfo->msgid, fp);
+ WRITE_CACHE_DATA(msginfo->inreplyto, fp);
+}
+
+void procmsg_write_flags(MsgInfo *msginfo, FILE *fp)
+{
+ MsgPermFlags flags = msginfo->flags.perm_flags;
+
+ WRITE_CACHE_DATA_INT(msginfo->msgnum, fp);
+ WRITE_CACHE_DATA_INT(flags, fp);
+}
+
+void procmsg_flush_mark_queue(FolderItem *item, FILE *fp)
+{
+ MsgInfo *flaginfo;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(fp != NULL);
+
+ if (item->mark_queue)
+ debug_print("flushing mark_queue...\n");
+
+ while (item->mark_queue != NULL) {
+ flaginfo = (MsgInfo *)item->mark_queue->data;
+ procmsg_write_flags(flaginfo, fp);
+ procmsg_msginfo_free(flaginfo);
+ item->mark_queue = g_slist_remove(item->mark_queue, flaginfo);
+ }
+}
+
+void procmsg_add_mark_queue(FolderItem *item, gint num, MsgFlags flags)
+{
+ MsgInfo *queue_msginfo;
+
+ queue_msginfo = g_new0(MsgInfo, 1);
+ queue_msginfo->msgnum = num;
+ queue_msginfo->flags = flags;
+ item->mark_queue = g_slist_append
+ (item->mark_queue, queue_msginfo);
+ return;
+}
+
+void procmsg_add_flags(FolderItem *item, gint num, MsgFlags flags)
+{
+ FILE *fp;
+ MsgInfo msginfo;
+
+ g_return_if_fail(item != NULL);
+
+ if (item->opened) {
+ procmsg_add_mark_queue(item, num, flags);
+ return;
+ }
+
+ if ((fp = procmsg_open_mark_file(item, DATA_APPEND)) == NULL) {
+ g_warning(_("can't open mark file\n"));
+ return;
+ }
+
+ msginfo.msgnum = num;
+ msginfo.flags = flags;
+
+ procmsg_write_flags(&msginfo, fp);
+ fclose(fp);
+}
+
+struct MarkSum {
+ gint *new;
+ gint *unread;
+ gint *total;
+ gint *min;
+ gint *max;
+ gint first;
+};
+
+static void mark_sum_func(gpointer key, gpointer value, gpointer data)
+{
+ MsgFlags *flags = value;
+ gint num = GPOINTER_TO_INT(key);
+ struct MarkSum *marksum = data;
+
+ if (marksum->first <= num) {
+ if (MSG_IS_NEW(*flags)) (*marksum->new)++;
+ if (MSG_IS_UNREAD(*flags)) (*marksum->unread)++;
+ if (num > *marksum->max) *marksum->max = num;
+ if (num < *marksum->min || *marksum->min == 0) *marksum->min = num;
+ (*marksum->total)++;
+ }
+
+ g_free(flags);
+}
+
+void procmsg_get_mark_sum(FolderItem *item,
+ gint *new, gint *unread, gint *total,
+ gint *min, gint *max,
+ gint first)
+{
+ GHashTable *mark_table;
+ struct MarkSum marksum;
+
+ *new = *unread = *total = *min = *max = 0;
+ marksum.new = new;
+ marksum.unread = unread;
+ marksum.total = total;
+ marksum.min = min;
+ marksum.max = max;
+ marksum.first = first;
+
+ mark_table = procmsg_read_mark_file(item);
+
+ if (mark_table) {
+ g_hash_table_foreach(mark_table, mark_sum_func, &marksum);
+ g_hash_table_destroy(mark_table);
+ }
+}
+
+static GHashTable *procmsg_read_mark_file(FolderItem *item)
+{
+ FILE *fp;
+ GHashTable *mark_table = NULL;
+ guint32 idata;
+ guint num;
+ MsgFlags *flags;
+ MsgPermFlags perm_flags;
+ GSList *cur;
+
+ if ((fp = procmsg_open_mark_file(item, DATA_READ)) == NULL)
+ return NULL;
+
+ mark_table = g_hash_table_new(NULL, g_direct_equal);
+
+ while (fread(&idata, sizeof(idata), 1, fp) == 1) {
+ num = idata;
+ if (fread(&idata, sizeof(idata), 1, fp) != 1) break;
+ perm_flags = idata;
+
+ flags = g_hash_table_lookup(mark_table, GUINT_TO_POINTER(num));
+ if (flags != NULL)
+ g_free(flags);
+
+ flags = g_new0(MsgFlags, 1);
+ flags->perm_flags = perm_flags;
+
+ g_hash_table_insert(mark_table, GUINT_TO_POINTER(num), flags);
+ }
+
+ fclose(fp);
+
+ if (item->mark_queue) {
+ g_hash_table_foreach(mark_table, mark_unset_new_func, NULL);
+ }
+
+ for (cur = item->mark_queue; cur != NULL; cur = cur->next) {
+ MsgInfo *msginfo = (MsgInfo *)cur->data;
+
+ flags = g_hash_table_lookup(mark_table,
+ GUINT_TO_POINTER(msginfo->msgnum));
+ if (flags != NULL)
+ g_free(flags);
+
+ flags = g_new0(MsgFlags, 1);
+ flags->perm_flags = msginfo->flags.perm_flags;
+
+ g_hash_table_insert(mark_table,
+ GUINT_TO_POINTER(msginfo->msgnum), flags);
+
+ }
+
+ if (item->mark_queue && !item->opened) {
+ procmsg_write_mark_file(item, mark_table);
+ procmsg_msg_list_free(item->mark_queue);
+ item->mark_queue = NULL;
+ }
+
+ return mark_table;
+}
+
+static void write_mark_func(gpointer key, gpointer value, gpointer data)
+{
+ MsgInfo msginfo;
+
+ msginfo.msgnum = GPOINTER_TO_UINT(key);
+ msginfo.flags.perm_flags = ((MsgFlags *)value)->perm_flags;
+ procmsg_write_flags(&msginfo, (FILE *)data);
+}
+
+static void procmsg_write_mark_file(FolderItem *item, GHashTable *mark_table)
+{
+ FILE *fp;
+
+ fp = procmsg_open_mark_file(item, DATA_WRITE);
+ g_hash_table_foreach(mark_table, write_mark_func, fp);
+ fclose(fp);
+}
+
+static FILE *procmsg_open_data_file(const gchar *file, guint version,
+ DataOpenMode mode,
+ gchar *buf, size_t buf_size)
+{
+ FILE *fp;
+ guint32 data_ver;
+
+ g_return_val_if_fail(file != NULL, NULL);
+
+ if (mode == DATA_WRITE) {
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+ if (change_file_mode_rw(fp, file) < 0)
+ FILE_OP_ERROR(file, "chmod");
+
+ WRITE_CACHE_DATA_INT(version, fp);
+ return fp;
+ }
+
+ /* check version */
+ if ((fp = fopen(file, "rb")) == NULL)
+ debug_print("Mark/Cache file not found\n");
+ else {
+ if (buf && buf_size > 0)
+ setvbuf(fp, buf, _IOFBF, buf_size);
+ if (fread(&data_ver, sizeof(data_ver), 1, fp) != 1 ||
+ version != data_ver) {
+ debug_print("Mark/Cache version is different (%u != %u). "
+ "Discarding it.\n", data_ver, version);
+ fclose(fp);
+ fp = NULL;
+ }
+ }
+
+ if (mode == DATA_READ)
+ return fp;
+
+ if (fp) {
+ /* reopen with append mode */
+ fclose(fp);
+ if ((fp = fopen(file, "ab")) == NULL)
+ FILE_OP_ERROR(file, "fopen");
+ } else {
+ /* open with overwrite mode if mark file doesn't exist or
+ version is different */
+ fp = procmsg_open_data_file(file, version, DATA_WRITE, buf,
+ buf_size);
+ }
+
+ return fp;
+}
+
+static FILE *procmsg_open_cache_file_with_buffer(FolderItem *item,
+ DataOpenMode mode,
+ gchar *buf, size_t buf_size)
+{
+ gchar *cachefile;
+ FILE *fp;
+
+ cachefile = folder_item_get_cache_file(item);
+ fp = procmsg_open_data_file(cachefile, CACHE_VERSION, mode, buf,
+ buf_size);
+ g_free(cachefile);
+
+ return fp;
+}
+
+FILE *procmsg_open_cache_file(FolderItem *item, DataOpenMode mode)
+{
+ gchar *cachefile;
+ FILE *fp;
+
+ cachefile = folder_item_get_cache_file(item);
+ fp = procmsg_open_data_file(cachefile, CACHE_VERSION, mode, NULL, 0);
+ g_free(cachefile);
+
+ return fp;
+}
+
+FILE *procmsg_open_mark_file(FolderItem *item, DataOpenMode mode)
+{
+ gchar *markfile;
+ FILE *fp;
+
+ markfile = folder_item_get_mark_file(item);
+ fp = procmsg_open_data_file(markfile, MARK_VERSION, mode, NULL, 0);
+ g_free(markfile);
+
+ return fp;
+}
+
+/* return the reversed thread tree */
+GNode *procmsg_get_thread_tree(GSList *mlist)
+{
+ GNode *root, *parent, *node, *next;
+ GHashTable *table;
+ MsgInfo *msginfo;
+ const gchar *msgid;
+
+ root = g_node_new(NULL);
+ table = g_hash_table_new(g_str_hash, g_str_equal);
+
+ for (; mlist != NULL; mlist = mlist->next) {
+ msginfo = (MsgInfo *)mlist->data;
+ parent = root;
+
+ if (msginfo->inreplyto) {
+ parent = g_hash_table_lookup(table, msginfo->inreplyto);
+ if (parent == NULL)
+ parent = root;
+ }
+ node = g_node_insert_data_before
+ (parent, parent == root ? parent->children : NULL,
+ msginfo);
+ if ((msgid = msginfo->msgid) &&
+ g_hash_table_lookup(table, msgid) == NULL)
+ g_hash_table_insert(table, (gchar *)msgid, node);
+ }
+
+ /* complete the unfinished threads */
+ for (node = root->children; node != NULL; ) {
+ next = node->next;
+ msginfo = (MsgInfo *)node->data;
+ if (msginfo->inreplyto) {
+ parent = g_hash_table_lookup(table, msginfo->inreplyto);
+ /* node should not be the parent, and node should not
+ be an ancestor of parent (circular reference) */
+ if (parent && parent != node &&
+ !g_node_is_ancestor(node, parent)) {
+ g_node_unlink(node);
+ g_node_insert_before
+ (parent, parent->children, node);
+ }
+ }
+ node = next;
+ }
+
+ g_hash_table_destroy(table);
+
+ return root;
+}
+
+gint procmsg_move_messages(GSList *mlist)
+{
+ GSList *cur, *movelist = NULL;
+ MsgInfo *msginfo;
+ FolderItem *dest = NULL;
+ GHashTable *hash;
+ gint val = 0;
+
+ if (!mlist) return 0;
+
+ hash = procmsg_to_folder_hash_table_create(mlist);
+ folder_item_scan_foreach(hash);
+ g_hash_table_destroy(hash);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ if (!dest) {
+ dest = msginfo->to_folder;
+ movelist = g_slist_append(movelist, msginfo);
+ } else if (dest == msginfo->to_folder) {
+ movelist = g_slist_append(movelist, msginfo);
+ } else {
+ val = folder_item_move_msgs(dest, movelist);
+ g_slist_free(movelist);
+ movelist = NULL;
+ if (val == -1)
+ return val;
+ dest = msginfo->to_folder;
+ movelist = g_slist_append(movelist, msginfo);
+ }
+ }
+
+ if (movelist) {
+ val = folder_item_move_msgs(dest, movelist);
+ g_slist_free(movelist);
+ }
+
+ return val == -1 ? -1 : 0;
+}
+
+gint procmsg_copy_messages(GSList *mlist)
+{
+ GSList *cur, *copylist = NULL;
+ MsgInfo *msginfo;
+ FolderItem *dest = NULL;
+ GHashTable *hash;
+ gint val = 0;
+
+ if (!mlist) return 0;
+
+ hash = procmsg_to_folder_hash_table_create(mlist);
+ folder_item_scan_foreach(hash);
+ g_hash_table_destroy(hash);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ if (!dest) {
+ dest = msginfo->to_folder;
+ copylist = g_slist_append(copylist, msginfo);
+ } else if (dest == msginfo->to_folder) {
+ copylist = g_slist_append(copylist, msginfo);
+ } else {
+ val = folder_item_copy_msgs(dest, copylist);
+ g_slist_free(copylist);
+ copylist = NULL;
+ if (val == -1)
+ return val;
+ dest = msginfo->to_folder;
+ copylist = g_slist_append(copylist, msginfo);
+ }
+ }
+
+ if (copylist) {
+ val = folder_item_copy_msgs(dest, copylist);
+ g_slist_free(copylist);
+ }
+
+ return val == -1 ? -1 : 0;
+}
+
+gchar *procmsg_get_message_file_path(MsgInfo *msginfo)
+{
+ gchar *path, *file;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ if (msginfo->plaintext_file)
+ file = g_strdup(msginfo->plaintext_file);
+ else if (msginfo->file_path)
+ return g_strdup(msginfo->file_path);
+ else {
+ path = folder_item_get_path(msginfo->folder);
+ file = g_strconcat(path, G_DIR_SEPARATOR_S,
+ itos(msginfo->msgnum), NULL);
+ g_free(path);
+ }
+
+ return file;
+}
+
+gchar *procmsg_get_message_file(MsgInfo *msginfo)
+{
+ gchar *filename = NULL;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ if (msginfo->file_path)
+ return g_strdup(msginfo->file_path);
+
+ filename = folder_item_fetch_msg(msginfo->folder, msginfo->msgnum);
+ if (!filename)
+ debug_print(_("can't fetch message %d\n"), msginfo->msgnum);
+
+ return filename;
+}
+
+GSList *procmsg_get_message_file_list(GSList *mlist)
+{
+ GSList *file_list = NULL;
+ MsgInfo *msginfo;
+ MsgFileInfo *fileinfo;
+ gchar *file;
+
+ while (mlist != NULL) {
+ msginfo = (MsgInfo *)mlist->data;
+ file = procmsg_get_message_file(msginfo);
+ if (!file) {
+ procmsg_message_file_list_free(file_list);
+ return NULL;
+ }
+ fileinfo = g_new(MsgFileInfo, 1);
+ fileinfo->file = file;
+ fileinfo->flags = g_new(MsgFlags, 1);
+ *fileinfo->flags = msginfo->flags;
+ file_list = g_slist_prepend(file_list, fileinfo);
+ mlist = mlist->next;
+ }
+
+ file_list = g_slist_reverse(file_list);
+
+ return file_list;
+}
+
+void procmsg_message_file_list_free(GSList *file_list)
+{
+ GSList *cur;
+ MsgFileInfo *fileinfo;
+
+ for (cur = file_list; cur != NULL; cur = cur->next) {
+ fileinfo = (MsgFileInfo *)cur->data;
+ g_free(fileinfo->file);
+ g_free(fileinfo->flags);
+ g_free(fileinfo);
+ }
+
+ g_slist_free(file_list);
+}
+
+FILE *procmsg_open_message(MsgInfo *msginfo)
+{
+ FILE *fp;
+ gchar *file;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ file = procmsg_get_message_file_path(msginfo);
+ g_return_val_if_fail(file != NULL, NULL);
+
+ if (!is_file_exist(file)) {
+ g_free(file);
+ file = procmsg_get_message_file(msginfo);
+ if (!file)
+ return NULL;
+ }
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ g_free(file);
+ return NULL;
+ }
+
+ g_free(file);
+
+ if (MSG_IS_QUEUED(msginfo->flags)) {
+ gchar buf[BUFFSIZE];
+
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+ }
+
+ return fp;
+}
+
+#if USE_GPGME
+FILE *procmsg_open_message_decrypted(MsgInfo *msginfo, MimeInfo **mimeinfo)
+{
+ FILE *fp;
+ MimeInfo *mimeinfo_;
+ glong fpos;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ if (mimeinfo) *mimeinfo = NULL;
+
+ if ((fp = procmsg_open_message(msginfo)) == NULL) return NULL;
+
+ mimeinfo_ = procmime_scan_mime_header(fp);
+ if (!mimeinfo_) {
+ fclose(fp);
+ return NULL;
+ }
+
+ if (!MSG_IS_ENCRYPTED(msginfo->flags) &&
+ rfc2015_is_encrypted(mimeinfo_)) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_ENCRYPTED);
+ }
+
+ if (MSG_IS_ENCRYPTED(msginfo->flags) &&
+ !msginfo->plaintext_file &&
+ !msginfo->decryption_failed) {
+ fpos = ftell(fp);
+ rfc2015_decrypt_message(msginfo, mimeinfo_, fp);
+ if (msginfo->plaintext_file &&
+ !msginfo->decryption_failed) {
+ fclose(fp);
+ procmime_mimeinfo_free_all(mimeinfo_);
+ if ((fp = procmsg_open_message(msginfo)) == NULL)
+ return NULL;
+ mimeinfo_ = procmime_scan_mime_header(fp);
+ if (!mimeinfo_) {
+ fclose(fp);
+ return NULL;
+ }
+ } else {
+ if (fseek(fp, fpos, SEEK_SET) < 0)
+ perror("fseek");
+ }
+ }
+
+ if (mimeinfo) *mimeinfo = mimeinfo_;
+ return fp;
+}
+#endif
+
+gboolean procmsg_msg_exist(MsgInfo *msginfo)
+{
+ gchar *path;
+ gboolean ret;
+
+ if (!msginfo) return FALSE;
+
+ path = folder_item_get_path(msginfo->folder);
+ change_dir(path);
+ ret = !folder_item_is_msg_changed(msginfo->folder, msginfo);
+ g_free(path);
+
+ return ret;
+}
+
+void procmsg_get_filter_keyword(MsgInfo *msginfo, gchar **header, gchar **key,
+ PrefsFilterType type)
+{
+ static HeaderEntry hentry[] = {{"List-Id:", NULL, TRUE},
+ {"X-ML-Name:", NULL, TRUE},
+ {"X-List:", NULL, TRUE},
+ {"X-Mailing-list:", NULL, TRUE},
+ {"X-Sequence:", NULL, TRUE},
+ {NULL, NULL, FALSE}};
+ enum
+ {
+ H_LIST_ID = 0,
+ H_X_ML_NAME = 1,
+ H_X_LIST = 2,
+ H_X_MAILING_LIST = 3,
+ H_X_SEQUENCE = 4
+ };
+
+ FILE *fp;
+
+ g_return_if_fail(msginfo != NULL);
+ g_return_if_fail(header != NULL);
+ g_return_if_fail(key != NULL);
+
+ *header = NULL;
+ *key = NULL;
+
+ switch (type) {
+ case FILTER_BY_NONE:
+ return;
+ case FILTER_BY_AUTO:
+ if ((fp = procmsg_open_message(msginfo)) == NULL)
+ return;
+ procheader_get_header_fields(fp, hentry);
+ fclose(fp);
+
+#define SET_FILTER_KEY(hstr, idx) \
+{ \
+ *header = g_strdup(hstr); \
+ *key = hentry[idx].body; \
+ hentry[idx].body = NULL; \
+}
+
+ if (hentry[H_LIST_ID].body != NULL) {
+ SET_FILTER_KEY("List-Id", H_LIST_ID);
+ extract_list_id_str(*key);
+ } else if (hentry[H_X_ML_NAME].body != NULL) {
+ SET_FILTER_KEY("X-ML-Name", H_X_ML_NAME);
+ } else if (hentry[H_X_LIST].body != NULL) {
+ SET_FILTER_KEY("X-List", H_X_LIST);
+ } else if (hentry[H_X_MAILING_LIST].body != NULL) {
+ SET_FILTER_KEY("X-Mailing-list", H_X_MAILING_LIST);
+ } else if (hentry[H_X_SEQUENCE].body != NULL) {
+ guchar *p;
+
+ SET_FILTER_KEY("X-Sequence", H_X_SEQUENCE);
+ p = *key;
+ while (*p != '\0') {
+ while (*p != '\0' && !isspace(*p)) p++;
+ while (isspace(*p)) p++;
+ if (isdigit(*p)) {
+ *p = '\0';
+ break;
+ }
+ }
+ g_strstrip(*key);
+ } else if (msginfo->subject) {
+ *header = g_strdup("Subject");
+ *key = g_strdup(msginfo->subject);
+ }
+
+#undef SET_FILTER_KEY
+
+ g_free(hentry[H_LIST_ID].body);
+ hentry[H_LIST_ID].body = NULL;
+ g_free(hentry[H_X_ML_NAME].body);
+ hentry[H_X_ML_NAME].body = NULL;
+ g_free(hentry[H_X_LIST].body);
+ hentry[H_X_LIST].body = NULL;
+ g_free(hentry[H_X_MAILING_LIST].body);
+ hentry[H_X_MAILING_LIST].body = NULL;
+
+ break;
+ case FILTER_BY_FROM:
+ *header = g_strdup("From");
+ *key = g_strdup(msginfo->from);
+ break;
+ case FILTER_BY_TO:
+ *header = g_strdup("To");
+ *key = g_strdup(msginfo->to);
+ break;
+ case FILTER_BY_SUBJECT:
+ *header = g_strdup("Subject");
+ *key = g_strdup(msginfo->subject);
+ break;
+ default:
+ break;
+ }
+}
+
+void procmsg_empty_trash(FolderItem *trash)
+{
+ FILE *fp;
+
+ if (trash && trash->total > 0) {
+ debug_print("Emptying messages in %s ...\n", trash->path);
+
+ folder_item_remove_all_msg(trash);
+ fp = procmsg_open_cache_file(trash, DATA_WRITE);
+ if (fp) fclose(fp);
+ fp = procmsg_open_mark_file(trash, DATA_WRITE);
+ if (fp) fclose(fp);
+ }
+}
+
+void procmsg_empty_all_trash(void)
+{
+ FolderItem *trash;
+ GList *cur;
+
+ for (cur = folder_get_list(); cur != NULL; cur = cur->next) {
+ trash = FOLDER(cur->data)->trash;
+ procmsg_empty_trash(trash);
+ }
+}
+
+gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
+{
+ gint ret = 0;
+ GSList *mlist = NULL;
+ GSList *cur;
+
+ if (!queue)
+ queue = folder_get_default_queue();
+ g_return_val_if_fail(queue != NULL, -1);
+
+ mlist = folder_item_get_msg_list(queue, FALSE);
+ mlist = procmsg_sort_msg_list(mlist, SORT_BY_NUMBER, SORT_ASCENDING);
+
+ for (cur = mlist; cur != NULL; cur = cur->next) {
+ gchar *file;
+ MsgInfo *msginfo = (MsgInfo *)cur->data;
+
+ file = procmsg_get_message_file(msginfo);
+ if (file) {
+ QueueInfo *qinfo;
+
+ qinfo = send_get_queue_info(file);
+ if (!qinfo || send_message_queue(qinfo) < 0) {
+ g_warning(_("Sending queued message %d failed.\n"),
+ msginfo->msgnum);
+ } else {
+ ret++;
+ if (save_msgs) {
+ FolderItem *outbox;
+ outbox = account_get_special_folder
+ (qinfo->ac, F_OUTBOX);
+ procmsg_save_to_outbox(outbox, file,
+ TRUE);
+ }
+ folder_item_remove_msg(queue, msginfo);
+ }
+ send_queue_info_free(qinfo);
+ g_free(file);
+ }
+
+ procmsg_msginfo_free(msginfo);
+ }
+
+ g_slist_free(mlist);
+
+ queue->mtime = 0;
+
+ return ret;
+}
+
+gint procmsg_save_to_outbox(FolderItem *outbox, const gchar *file,
+ gboolean is_queued)
+{
+ gint num;
+ FILE *fp;
+ MsgFlags flag = {0, 0};
+
+ debug_print("saving sent message...\n");
+
+ if (!outbox)
+ outbox = folder_get_default_outbox();
+ g_return_val_if_fail(outbox != NULL, -1);
+
+ /* remove queueing headers */
+ if (is_queued) {
+ gchar tmp[MAXPATHLEN + 1];
+ gchar buf[BUFFSIZE];
+ FILE *outfp;
+
+ g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.out.%08x",
+ get_rc_dir(), G_DIR_SEPARATOR, (guint)random());
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+ if ((outfp = fopen(tmp, "wb")) == NULL) {
+ FILE_OP_ERROR(tmp, "fopen");
+ fclose(fp);
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ fputs(buf, outfp);
+ fclose(outfp);
+ fclose(fp);
+
+ folder_item_scan(outbox);
+ if ((num = folder_item_add_msg(outbox, tmp, &flag, TRUE)) < 0) {
+ g_warning("can't save message\n");
+ unlink(tmp);
+ return -1;
+ }
+ } else {
+ folder_item_scan(outbox);
+ if ((num = folder_item_add_msg
+ (outbox, file, &flag, FALSE)) < 0) {
+ g_warning("can't save message\n");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+void procmsg_print_message(MsgInfo *msginfo, const gchar *cmdline)
+{
+ static const gchar *def_cmd = "lpr %s";
+ static guint id = 0;
+ gchar *prtmp;
+ FILE *tmpfp, *prfp;
+ gchar buf[1024];
+ gchar *p;
+
+ g_return_if_fail(msginfo);
+
+ if ((tmpfp = procmime_get_first_text_content(msginfo)) == NULL) {
+ g_warning(_("Can't get text part\n"));
+ return;
+ }
+
+ prtmp = g_strdup_printf("%s%cprinttmp.%08x",
+ get_mime_tmp_dir(), G_DIR_SEPARATOR, id++);
+
+ if ((prfp = fopen(prtmp, "wb")) == NULL) {
+ FILE_OP_ERROR(prtmp, "fopen");
+ g_free(prtmp);
+ fclose(tmpfp);
+ return;
+ }
+
+ if (msginfo->date) fprintf(prfp, "Date: %s\n", msginfo->date);
+ if (msginfo->from) fprintf(prfp, "From: %s\n", msginfo->from);
+ if (msginfo->to) fprintf(prfp, "To: %s\n", msginfo->to);
+ if (msginfo->newsgroups)
+ fprintf(prfp, "Newsgroups: %s\n", msginfo->newsgroups);
+ if (msginfo->subject) fprintf(prfp, "Subject: %s\n", msginfo->subject);
+ fputc('\n', prfp);
+
+ while (fgets(buf, sizeof(buf), tmpfp) != NULL)
+ fputs(buf, prfp);
+
+ fclose(prfp);
+ fclose(tmpfp);
+
+ if (cmdline && (p = strchr(cmdline, '%')) && *(p + 1) == 's' &&
+ !strchr(p + 2, '%'))
+ g_snprintf(buf, sizeof(buf) - 1, cmdline, prtmp);
+ else {
+ if (cmdline)
+ g_warning(_("Print command line is invalid: `%s'\n"),
+ cmdline);
+ g_snprintf(buf, sizeof(buf) - 1, def_cmd, prtmp);
+ }
+
+ g_free(prtmp);
+
+ g_strchomp(buf);
+ if (buf[strlen(buf) - 1] != '&') strcat(buf, "&");
+ system(buf);
+}
+
+MsgInfo *procmsg_msginfo_copy(MsgInfo *msginfo)
+{
+ MsgInfo *newmsginfo;
+
+ if (msginfo == NULL) return NULL;
+
+ newmsginfo = g_new0(MsgInfo, 1);
+
+#define MEMBCOPY(mmb) newmsginfo->mmb = msginfo->mmb
+#define MEMBDUP(mmb) newmsginfo->mmb = msginfo->mmb ? \
+ g_strdup(msginfo->mmb) : NULL
+
+ MEMBCOPY(msgnum);
+ MEMBCOPY(size);
+ MEMBCOPY(mtime);
+ MEMBCOPY(date_t);
+
+ MEMBCOPY(flags);
+
+ MEMBDUP(fromname);
+
+ MEMBDUP(date);
+ MEMBDUP(from);
+ MEMBDUP(to);
+ MEMBDUP(cc);
+ MEMBDUP(newsgroups);
+ MEMBDUP(subject);
+ MEMBDUP(msgid);
+ MEMBDUP(inreplyto);
+
+ MEMBCOPY(folder);
+ MEMBCOPY(to_folder);
+
+ MEMBDUP(xface);
+
+ MEMBDUP(file_path);
+
+ MEMBDUP(plaintext_file);
+ MEMBCOPY(decryption_failed);
+
+ return newmsginfo;
+}
+
+MsgInfo *procmsg_msginfo_get_full_info(MsgInfo *msginfo)
+{
+ MsgInfo *full_msginfo;
+ gchar *file;
+
+ if (msginfo == NULL) return NULL;
+
+ file = procmsg_get_message_file(msginfo);
+ if (!file) {
+ g_warning("procmsg_msginfo_get_full_info(): can't get message file.\n");
+ return NULL;
+ }
+
+ full_msginfo = procheader_parse_file(file, msginfo->flags, TRUE);
+ g_free(file);
+ if (!full_msginfo) return NULL;
+
+ full_msginfo->msgnum = msginfo->msgnum;
+ full_msginfo->size = msginfo->size;
+ full_msginfo->mtime = msginfo->mtime;
+ full_msginfo->folder = msginfo->folder;
+ full_msginfo->to_folder = msginfo->to_folder;
+
+ full_msginfo->file_path = g_strdup(msginfo->file_path);
+
+#if USE_GPGME
+ full_msginfo->plaintext_file = g_strdup(msginfo->plaintext_file);
+ full_msginfo->decryption_failed = msginfo->decryption_failed;
+#endif
+
+ return full_msginfo;
+}
+
+void procmsg_msginfo_free(MsgInfo *msginfo)
+{
+ if (msginfo == NULL) return;
+
+ g_free(msginfo->xface);
+
+ g_free(msginfo->fromname);
+
+ g_free(msginfo->date);
+ g_free(msginfo->from);
+ g_free(msginfo->to);
+ g_free(msginfo->cc);
+ g_free(msginfo->newsgroups);
+ g_free(msginfo->subject);
+ g_free(msginfo->msgid);
+ g_free(msginfo->inreplyto);
+
+ g_free(msginfo->file_path);
+
+ g_free(msginfo->plaintext_file);
+
+ g_free(msginfo);
+}
+
+gint procmsg_cmp_msgnum_for_sort(gconstpointer a, gconstpointer b)
+{
+ const MsgInfo *msginfo1 = a;
+ const MsgInfo *msginfo2 = b;
+
+ if (!msginfo1)
+ return -1;
+ if (!msginfo2)
+ return -1;
+
+ return msginfo1->msgnum - msginfo2->msgnum;
+}
+
+#define CMP_FUNC_DEF(func_name, val) \
+static gint func_name(gconstpointer a, gconstpointer b) \
+{ \
+ const MsgInfo *msginfo1 = a; \
+ const MsgInfo *msginfo2 = b; \
+ \
+ if (!msginfo1 || !msginfo2) \
+ return -1; \
+ \
+ return (val) * (cmp_func_sort_type == SORT_ASCENDING ? 1 : -1); \
+}
+
+CMP_FUNC_DEF(procmsg_cmp_by_mark,
+ MSG_IS_MARKED(msginfo1->flags) - MSG_IS_MARKED(msginfo2->flags))
+CMP_FUNC_DEF(procmsg_cmp_by_unread,
+ MSG_IS_UNREAD(msginfo1->flags) - MSG_IS_UNREAD(msginfo2->flags))
+CMP_FUNC_DEF(procmsg_cmp_by_mime,
+ MSG_IS_MIME(msginfo1->flags) - MSG_IS_MIME(msginfo2->flags))
+CMP_FUNC_DEF(procmsg_cmp_by_label,
+ MSG_GET_COLORLABEL(msginfo1->flags) -
+ MSG_GET_COLORLABEL(msginfo2->flags))
+
+CMP_FUNC_DEF(procmsg_cmp_by_number, msginfo1->msgnum - msginfo2->msgnum)
+CMP_FUNC_DEF(procmsg_cmp_by_size, msginfo1->size - msginfo2->size)
+CMP_FUNC_DEF(procmsg_cmp_by_date, msginfo1->date_t - msginfo2->date_t)
+
+#undef CMP_FUNC_DEF
+#define CMP_FUNC_DEF(func_name, var_name) \
+static gint func_name(gconstpointer a, gconstpointer b) \
+{ \
+ const MsgInfo *msginfo1 = a; \
+ const MsgInfo *msginfo2 = b; \
+ \
+ if (!msginfo1->var_name) \
+ return (msginfo2->var_name != NULL); \
+ if (!msginfo2->var_name) \
+ return -1; \
+ \
+ return strcasecmp(msginfo1->var_name, msginfo2->var_name) * \
+ (cmp_func_sort_type == SORT_ASCENDING ? 1 : -1); \
+}
+
+CMP_FUNC_DEF(procmsg_cmp_by_from, fromname)
+CMP_FUNC_DEF(procmsg_cmp_by_to, to)
+
+#undef CMP_FUNC_DEF
+
+static gint procmsg_cmp_by_subject(gconstpointer a, gconstpointer b) \
+{ \
+ const MsgInfo *msginfo1 = a; \
+ const MsgInfo *msginfo2 = b; \
+ \
+ if (!msginfo1->subject) \
+ return (msginfo2->subject != NULL); \
+ if (!msginfo2->subject) \
+ return -1; \
+ \
+ return subject_compare_for_sort \
+ (msginfo1->subject, msginfo2->subject) * \
+ (cmp_func_sort_type == SORT_ASCENDING ? 1 : -1); \
+}
diff --git a/src/procmsg.h b/src/procmsg.h
new file mode 100644
index 00000000..2a718baf
--- /dev/null
+++ b/src/procmsg.h
@@ -0,0 +1,280 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PROCMSG_H__
+#define __PROCMSG_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <time.h>
+#include <sys/types.h>
+#include <string.h>
+
+typedef struct _MsgInfo MsgInfo;
+typedef struct _MsgFlags MsgFlags;
+typedef struct _MsgFileInfo MsgFileInfo;
+
+#include "folder.h"
+#include "procmime.h"
+#include "prefs_filter.h"
+
+typedef enum
+{
+ DATA_READ,
+ DATA_WRITE,
+ DATA_APPEND
+} DataOpenMode;
+
+#define MSG_NEW (1U << 0)
+#define MSG_UNREAD (1U << 1)
+#define MSG_MARKED (1U << 2)
+#define MSG_DELETED (1U << 3)
+#define MSG_REPLIED (1U << 4)
+#define MSG_FORWARDED (1U << 5)
+
+#define MSG_CLABEL_SBIT (7) /* start bit of color label */
+#define MAKE_MSG_CLABEL(h, m, l) (((h) << (MSG_CLABEL_SBIT + 2)) | \
+ ((m) << (MSG_CLABEL_SBIT + 1)) | \
+ ((l) << (MSG_CLABEL_SBIT + 0)))
+
+#define MSG_CLABEL_NONE MAKE_MSG_CLABEL(0U, 0U, 0U)
+#define MSG_CLABEL_1 MAKE_MSG_CLABEL(0U, 0U, 1U)
+#define MSG_CLABEL_2 MAKE_MSG_CLABEL(0U, 1U, 0U)
+#define MSG_CLABEL_3 MAKE_MSG_CLABEL(0U, 1U, 1U)
+#define MSG_CLABEL_4 MAKE_MSG_CLABEL(1U, 0U, 0U)
+#define MSG_CLABEL_5 MAKE_MSG_CLABEL(1U, 0U, 1U)
+#define MSG_CLABEL_6 MAKE_MSG_CLABEL(1U, 1U, 0U)
+#define MSG_CLABEL_7 MAKE_MSG_CLABEL(1U, 1U, 1U)
+
+#define MSG_CLABEL_ORANGE MSG_CLABEL_1
+#define MSG_CLABEL_RED MSG_CLABEL_2
+#define MSG_CLABEL_PINK MSG_CLABEL_3
+#define MSG_CLABEL_SKYBLUE MSG_CLABEL_4
+#define MSG_CLABEL_BLUE MSG_CLABEL_5
+#define MSG_CLABEL_GREEN MSG_CLABEL_6
+#define MSG_CLABEL_BROWN MSG_CLABEL_7
+
+/* RESERVED */
+#define MSG_RESERVED (1U << 31)
+
+#define MSG_CLABEL_FLAG_MASK (MSG_CLABEL_7)
+
+typedef guint32 MsgPermFlags;
+
+#define MSG_MOVE (1U << 0)
+#define MSG_COPY (1U << 1)
+#define MSG_QUEUED (1U << 16)
+#define MSG_DRAFT (1U << 17)
+#define MSG_ENCRYPTED (1U << 18)
+#define MSG_IMAP (1U << 19)
+#define MSG_NEWS (1U << 20)
+#define MSG_SIGNED (1U << 21)
+#define MSG_MIME (1U << 29)
+#define MSG_INVALID (1U << 30)
+#define MSG_RECEIVED (1U << 31)
+
+#define MSG_CACHED_FLAG_MASK (MSG_MIME)
+
+typedef guint32 MsgTmpFlags;
+
+#define MSG_SET_FLAGS(msg, flags) { (msg) |= (flags); }
+#define MSG_UNSET_FLAGS(msg, flags) { (msg) &= ~(flags); }
+#define MSG_SET_PERM_FLAGS(msg, flags) \
+ MSG_SET_FLAGS((msg).perm_flags, flags)
+#define MSG_SET_TMP_FLAGS(msg, flags) \
+ MSG_SET_FLAGS((msg).tmp_flags, flags)
+#define MSG_UNSET_PERM_FLAGS(msg, flags) \
+ MSG_UNSET_FLAGS((msg).perm_flags, flags)
+#define MSG_UNSET_TMP_FLAGS(msg, flags) \
+ MSG_UNSET_FLAGS((msg).tmp_flags, flags)
+
+#define MSG_IS_NEW(msg) (((msg).perm_flags & MSG_NEW) != 0)
+#define MSG_IS_UNREAD(msg) (((msg).perm_flags & MSG_UNREAD) != 0)
+#define MSG_IS_MARKED(msg) (((msg).perm_flags & MSG_MARKED) != 0)
+#define MSG_IS_DELETED(msg) (((msg).perm_flags & MSG_DELETED) != 0)
+#define MSG_IS_REPLIED(msg) (((msg).perm_flags & MSG_REPLIED) != 0)
+#define MSG_IS_FORWARDED(msg) (((msg).perm_flags & MSG_FORWARDED) != 0)
+
+#define MSG_GET_COLORLABEL(msg) (((msg).perm_flags & MSG_CLABEL_FLAG_MASK))
+#define MSG_GET_COLORLABEL_VALUE(msg) (MSG_GET_COLORLABEL(msg) >> MSG_CLABEL_SBIT)
+#define MSG_SET_COLORLABEL_VALUE(msg, val) \
+ MSG_SET_PERM_FLAGS(msg, ((((guint)(val)) & 7) << MSG_CLABEL_SBIT))
+
+#define MSG_IS_MOVE(msg) (((msg).tmp_flags & MSG_MOVE) != 0)
+#define MSG_IS_COPY(msg) (((msg).tmp_flags & MSG_COPY) != 0)
+
+#define MSG_IS_QUEUED(msg) (((msg).tmp_flags & MSG_QUEUED) != 0)
+#define MSG_IS_DRAFT(msg) (((msg).tmp_flags & MSG_DRAFT) != 0)
+#define MSG_IS_ENCRYPTED(msg) (((msg).tmp_flags & MSG_ENCRYPTED) != 0)
+#define MSG_IS_IMAP(msg) (((msg).tmp_flags & MSG_IMAP) != 0)
+#define MSG_IS_NEWS(msg) (((msg).tmp_flags & MSG_NEWS) != 0)
+#define MSG_IS_MIME(msg) (((msg).tmp_flags & MSG_MIME) != 0)
+#define MSG_IS_INVALID(msg) (((msg).tmp_flags & MSG_INVALID) != 0)
+#define MSG_IS_RECEIVED(msg) (((msg).tmp_flags & MSG_RECEIVED) != 0)
+
+#define WRITE_CACHE_DATA_INT(n, fp) \
+{ \
+ guint32 idata; \
+ \
+ idata = (guint32)n; \
+ fwrite(&idata, sizeof(idata), 1, fp); \
+}
+
+#define WRITE_CACHE_DATA(data, fp) \
+{ \
+ size_t len; \
+ \
+ if (data == NULL) { \
+ len = 0; \
+ WRITE_CACHE_DATA_INT(len, fp); \
+ } else { \
+ len = strlen(data); \
+ WRITE_CACHE_DATA_INT(len, fp); \
+ if (len > 0) \
+ fwrite(data, len, 1, fp); \
+ } \
+}
+
+struct _MsgFlags
+{
+ MsgPermFlags perm_flags;
+ MsgTmpFlags tmp_flags;
+};
+
+struct _MsgInfo
+{
+ guint msgnum;
+ off_t size;
+ time_t mtime;
+ time_t date_t;
+
+ MsgFlags flags;
+
+ gchar *fromname;
+
+ gchar *date;
+ gchar *from;
+ gchar *to;
+ gchar *cc;
+ gchar *newsgroups;
+ gchar *subject;
+ gchar *msgid;
+ gchar *inreplyto;
+
+ FolderItem *folder;
+ FolderItem *to_folder;
+
+ gchar *xface;
+
+ /* used only for temporary messages */
+ gchar *file_path;
+
+ /* used only for encrypted messages */
+ gchar *plaintext_file;
+ guint decryption_failed : 1;
+};
+
+struct _MsgFileInfo
+{
+ gchar *file;
+ MsgFlags *flags;
+};
+
+GHashTable *procmsg_msg_hash_table_create (GSList *mlist);
+void procmsg_msg_hash_table_append (GHashTable *msg_table,
+ GSList *mlist);
+GHashTable *procmsg_to_folder_hash_table_create (GSList *mlist);
+
+GSList *procmsg_read_cache (FolderItem *item,
+ gboolean scan_file);
+void procmsg_set_flags (GSList *mlist,
+ FolderItem *item);
+GSList *procmsg_sort_msg_list (GSList *mlist,
+ FolderSortKey sort_key,
+ FolderSortType sort_type);
+gint procmsg_get_last_num_in_msg_list(GSList *mlist);
+void procmsg_msg_list_free (GSList *mlist);
+void procmsg_write_cache (MsgInfo *msginfo,
+ FILE *fp);
+void procmsg_write_flags (MsgInfo *msginfo,
+ FILE *fp);
+void procmsg_flush_mark_queue (FolderItem *item,
+ FILE *fp);
+void procmsg_add_mark_queue (FolderItem *item,
+ gint num,
+ MsgFlags flags);
+void procmsg_add_flags (FolderItem *item,
+ gint num,
+ MsgFlags flags);
+void procmsg_get_mark_sum (FolderItem *item,
+ gint *new,
+ gint *unread,
+ gint *total,
+ gint *min,
+ gint *max,
+ gint first);
+FILE *procmsg_open_cache_file (FolderItem *item,
+ DataOpenMode mode);
+FILE *procmsg_open_mark_file (FolderItem *item,
+ DataOpenMode mode);
+
+GNode *procmsg_get_thread_tree (GSList *mlist);
+
+gint procmsg_move_messages (GSList *mlist);
+gint procmsg_copy_messages (GSList *mlist);
+
+gchar *procmsg_get_message_file_path (MsgInfo *msginfo);
+gchar *procmsg_get_message_file (MsgInfo *msginfo);
+GSList *procmsg_get_message_file_list (GSList *mlist);
+void procmsg_message_file_list_free (GSList *file_list);
+FILE *procmsg_open_message (MsgInfo *msginfo);
+#if USE_GPGME
+FILE *procmsg_open_message_decrypted (MsgInfo *msginfo,
+ MimeInfo **mimeinfo);
+#endif
+gboolean procmsg_msg_exist (MsgInfo *msginfo);
+
+void procmsg_get_filter_keyword (MsgInfo *msginfo,
+ gchar **header,
+ gchar **key,
+ PrefsFilterType type);
+
+void procmsg_empty_trash (FolderItem *trash);
+void procmsg_empty_all_trash (void);
+
+gint procmsg_send_queue (FolderItem *queue,
+ gboolean save_msgs);
+gint procmsg_save_to_outbox (FolderItem *outbox,
+ const gchar *file,
+ gboolean is_queued);
+void procmsg_print_message (MsgInfo *msginfo,
+ const gchar *cmdline);
+
+MsgInfo *procmsg_msginfo_copy (MsgInfo *msginfo);
+MsgInfo *procmsg_msginfo_get_full_info (MsgInfo *msginfo);
+void procmsg_msginfo_free (MsgInfo *msginfo);
+
+gint procmsg_cmp_msgnum_for_sort (gconstpointer a,
+ gconstpointer b);
+
+#endif /* __PROCMSG_H__ */
diff --git a/src/progressdialog.c b/src/progressdialog.c
new file mode 100644
index 00000000..31295372
--- /dev/null
+++ b/src/progressdialog.c
@@ -0,0 +1,135 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkprogressbar.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkbutton.h>
+
+#include "intl.h"
+#include "progressdialog.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+ProgressDialog *progress_dialog_create(void)
+{
+ ProgressDialog *progress;
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *cancel_btn;
+ GtkWidget *cancel_area;
+ GtkWidget *progressbar;
+ GtkWidget *scrolledwin;
+ GtkWidget *clist;
+ gchar *text[] = {NULL, NULL, NULL};
+
+ text[1] = _("Account");
+ text[2] = _("Status");
+
+ debug_print(_("Creating progress dialog...\n"));
+ progress = g_new0(ProgressDialog, 1);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request(window, 460, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
+ gtk_widget_realize(window);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_widget_show(vbox);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 8);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 8);
+ gtk_widget_show(label);
+
+ gtkut_button_set_create(&cancel_area, &cancel_btn, _("Cancel"),
+ NULL, NULL, NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), cancel_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(cancel_btn);
+ gtk_widget_show_all(cancel_area);
+
+ progressbar = gtk_progress_bar_new();
+ gtk_box_pack_start(GTK_BOX(vbox), progressbar, FALSE, FALSE, 0);
+ gtk_widget_show(progressbar);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scrolledwin);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ clist = gtk_clist_new_with_titles(3, text);
+ gtk_widget_show(clist);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), clist);
+ gtk_widget_set_size_request(clist, -1, 120);
+ gtk_clist_set_column_justification(GTK_CLIST(clist), 0,
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_width(GTK_CLIST(clist), 0, 16);
+ gtk_clist_set_column_width(GTK_CLIST(clist), 1, 160);
+
+ progress->window = window;
+ progress->label = label;
+ progress->cancel_btn = cancel_btn;
+ progress->progressbar = progressbar;
+ progress->clist = clist;
+
+ return progress;
+}
+
+void progress_dialog_set_label(ProgressDialog *progress, gchar *str)
+{
+ gtk_label_set_text(GTK_LABEL(progress->label), str);
+}
+
+void progress_dialog_set_value(ProgressDialog *progress, gfloat value)
+{
+ gtk_progress_set_value(GTK_PROGRESS(progress->progressbar), value);
+}
+
+void progress_dialog_set_percentage(ProgressDialog *progress,
+ gfloat percentage)
+{
+ gtk_progress_set_percentage(GTK_PROGRESS(progress->progressbar),
+ percentage);
+}
+
+void progress_dialog_destroy(ProgressDialog *progress)
+{
+ if (progress) {
+ gtk_widget_destroy(progress->window);
+ g_free(progress);
+ }
+}
diff --git a/src/progressdialog.h b/src/progressdialog.h
new file mode 100644
index 00000000..047524ef
--- /dev/null
+++ b/src/progressdialog.h
@@ -0,0 +1,46 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PROGRESS_H__
+#define __PROGRESS_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef struct _ProgressDialog ProgressDialog;
+
+struct _ProgressDialog
+{
+ GtkWidget *window;
+ GtkWidget *label;
+ GtkWidget *cancel_btn;
+ GtkWidget *progressbar;
+ GtkWidget *clist;
+};
+
+ProgressDialog *progress_dialog_create (void);
+void progress_dialog_set_label (ProgressDialog *progress,
+ gchar *str);
+void progress_dialog_set_value (ProgressDialog *progress,
+ gfloat value);
+void progress_dialog_set_percentage (ProgressDialog *progress,
+ gfloat percentage);
+void progress_dialog_destroy (ProgressDialog *progress);
+
+#endif /* __PROGRESS_H__ */
diff --git a/src/quote_fmt.h b/src/quote_fmt.h
new file mode 100644
index 00000000..c9c4c004
--- /dev/null
+++ b/src/quote_fmt.h
@@ -0,0 +1,13 @@
+#ifndef __QUOTE_FMT_H__
+
+#define __QUOTE_FMT_H__
+
+#define quote_fmt_parse quote_fmtparse
+
+gchar *quote_fmt_get_buffer(void);
+void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str,
+ const gchar *my_body);
+gint quote_fmtparse(void);
+void quote_fmt_scan_string(const gchar *str);
+
+#endif /* __QUOTE_FMT_H__ */
diff --git a/src/quote_fmt_lex.h b/src/quote_fmt_lex.h
new file mode 100644
index 00000000..585751a1
--- /dev/null
+++ b/src/quote_fmt_lex.h
@@ -0,0 +1,47 @@
+/* The following defines shamelessly stolen from GDB sources... */
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ as well as gratuitiously global symbol names, so we can have multiple
+ yacc generated parsers in gdb. Note that these are only the variables
+ produced by yacc. If other parser generators (bison, byacc, etc) produce
+ additional global names that conflict at link time, then those parser
+ generators need to be fixed instead of adding those names to this list. */
+
+#define yymaxdepth quote_fmtmaxdepth
+#define yyparse quote_fmtparse
+#define yylex quote_fmtlex
+#define yyerror quote_fmterror
+#define yylval quote_fmtlval
+#define yychar quote_fmtchar
+#define yydebug quote_fmtdebug
+#define yypact quote_fmtpact
+#define yyr1 quote_fmtr1
+#define yyr2 quote_fmtr2
+#define yydef quote_fmtdef
+#define yychk quote_fmtchk
+#define yypgo quote_fmtpgo
+#define yyact quote_fmtact
+#define yyexca quote_fmtexca
+#define yyerrflag quote_fmterrflag
+#define yynerrs quote_fmtnerrs
+#define yyps quote_fmtps
+#define yypv quote_fmtpv
+#define yys quote_fmts
+#define yy_yys quote_fmtyys
+#define yystate quote_fmtstate
+#define yytmp quote_fmttmp
+#define yyv quote_fmtv
+#define yy_yyv quote_fmtyyv
+#define yyval quote_fmtval
+#define yylloc quote_fmtlloc
+#define yyreds quote_fmtreds /* With YYDEBUG defined */
+#define yytoks quote_fmttoks /* With YYDEBUG defined */
+#define yylhs quote_fmtyylhs
+#define yylen quote_fmtyylen
+#define yydefred quote_fmtyydefred
+#define yydgoto quote_fmtyydgoto
+#define yysindex quote_fmtyysindex
+#define yyrindex quote_fmtyyrindex
+#define yygindex quote_fmtyygindex
+#define yytable quote_fmtyytable
+#define yycheck quote_fmtyycheck
diff --git a/src/quote_fmt_lex.l b/src/quote_fmt_lex.l
new file mode 100644
index 00000000..7f904c17
--- /dev/null
+++ b/src/quote_fmt_lex.l
@@ -0,0 +1,46 @@
+%{
+#include "quote_fmt_lex.h"
+#include "quote_fmt_parse.h"
+%}
+
+%option prefix="quote_fmt"
+%option outfile="lex.yy.c"
+
+%%
+
+"%d" /* date */ return SHOW_DATE;
+"%f" /* from */ return SHOW_FROM;
+"%N" /* full name */ return SHOW_FULLNAME;
+"%F" /* first name */ return SHOW_FIRST_NAME;
+"%I" /* initial of sender */ return SHOW_SENDER_INITIAL;
+"%s" /* subject */ return SHOW_SUBJECT;
+"%t" /* to */ return SHOW_TO;
+"%c" /* cc */ return SHOW_CC;
+"%n" /* newsgroups */ return SHOW_NEWSGROUPS;
+"%i" /* message-id */ return SHOW_MESSAGEID;
+"%r" /* references */ return SHOW_REFERENCES;
+"%M" /* message */ return SHOW_MESSAGE;
+"%Q" /* quoted message */ return SHOW_QUOTED_MESSAGE;
+"%m" /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE;
+"%q" /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE;
+"%%" /* % */ return SHOW_PERCENT;
+"\\\\" /* \ */ return SHOW_BACKSLASH;
+"\\t"|"\t" /* tab */ return SHOW_TAB;
+"\\n"|"\n" /* return */ return SHOW_EOL;
+"\\?" /* ? */ return SHOW_QUESTION_MARK;
+"\\{" return SHOW_OPARENT;
+"\\}" return SHOW_CPARENT;
+"?d" /* query date */ return QUERY_DATE;
+"?f" /* query from */ return QUERY_FROM;
+"?N"|"?F"|"?I" /* query from name */ return QUERY_FULLNAME;
+"?s" /* query subject */ return QUERY_SUBJECT;
+"?t" /* query to */ return QUERY_TO;
+"?c" /* query cc */ return QUERY_CC;
+"?n" /* query newsgroups */ return QUERY_NEWSGROUPS;
+"?i" /* query message-id */ return QUERY_MESSAGEID;
+"?r" /* query references */ return QUERY_REFERENCES;
+"{" return OPARENT;
+"}" return CPARENT;
+. { yylval.chr = yytext[0]; return CHARACTER; }
+
+%%
diff --git a/src/quote_fmt_parse.y b/src/quote_fmt_parse.y
new file mode 100644
index 00000000..c44edf01
--- /dev/null
+++ b/src/quote_fmt_parse.y
@@ -0,0 +1,459 @@
+%{
+
+#include "defs.h"
+
+#include <glib.h>
+#include <ctype.h>
+
+#include "procmsg.h"
+#include "procmime.h"
+#include "utils.h"
+
+#include "quote_fmt.h"
+#include "quote_fmt_lex.h"
+
+/* decl */
+/*
+flex quote_fmt.l
+bison -p quote_fmt quote_fmt.y
+*/
+
+int yylex(void);
+
+static MsgInfo *msginfo = NULL;
+static gboolean *visible = NULL;
+static gint maxsize = 0;
+static gint stacksize = 0;
+
+static gchar *buffer = NULL;
+static gint bufmax = 0;
+static gint bufsize = 0;
+static const gchar *quote_str = NULL;
+static const gchar *body = NULL;
+static gint error = 0;
+
+static void add_visibility(gboolean val)
+{
+ stacksize++;
+ if (maxsize < stacksize) {
+ maxsize += 128;
+ visible = g_realloc(visible, maxsize * sizeof(gboolean));
+ if (visible == NULL)
+ maxsize = 0;
+ }
+
+ visible[stacksize - 1] = val;
+}
+
+static void remove_visibility(void)
+{
+ stacksize--;
+}
+
+static void add_buffer(const gchar *s)
+{
+ gint len;
+
+ len = strlen(s);
+ if (bufsize + len + 1 > bufmax) {
+ if (bufmax == 0)
+ bufmax = 128;
+ while (bufsize + len + 1 > bufmax)
+ bufmax *= 2;
+ buffer = g_realloc(buffer, bufmax);
+ }
+ strcpy(buffer + bufsize, s);
+ bufsize += len;
+}
+
+#if 0
+static void flush_buffer(void)
+{
+ if (buffer != NULL)
+ *buffer = '\0';
+ bufsize = 0;
+}
+#endif
+
+gchar *quote_fmt_get_buffer(void)
+{
+ if (error != 0)
+ return NULL;
+ else
+ return buffer;
+}
+
+#define INSERT(buf) \
+ if (stacksize != 0 && visible[stacksize - 1]) \
+ add_buffer(buf)
+
+#define INSERT_CHARACTER(chr) \
+ if (stacksize != 0 && visible[stacksize - 1]) { \
+ gchar tmp[2]; \
+ tmp[0] = (chr); \
+ tmp[1] = '\0'; \
+ add_buffer(tmp); \
+ }
+
+void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str,
+ const gchar *my_body)
+{
+ quote_str = my_quote_str;
+ body = my_body;
+ msginfo = info;
+ stacksize = 0;
+ add_visibility(TRUE);
+ if (buffer != NULL)
+ *buffer = 0;
+ bufsize = 0;
+ error = 0;
+}
+
+void quote_fmterror(char *str)
+{
+ g_warning("Error: %s\n", str);
+ error = 1;
+}
+
+int quote_fmtwrap(void)
+{
+ return 1;
+}
+
+static int isseparator(int ch)
+{
+ return isspace(ch) || ch == '.' || ch == '-';
+}
+%}
+
+%union {
+ char chr;
+}
+
+%token SHOW_NEWSGROUPS
+%token SHOW_DATE SHOW_FROM SHOW_FULLNAME SHOW_FIRST_NAME
+%token SHOW_SENDER_INITIAL SHOW_SUBJECT SHOW_TO SHOW_MESSAGEID
+%token SHOW_PERCENT SHOW_CC SHOW_REFERENCES SHOW_MESSAGE
+%token SHOW_QUOTED_MESSAGE SHOW_BACKSLASH SHOW_TAB
+%token SHOW_QUOTED_MESSAGE_NO_SIGNATURE SHOW_MESSAGE_NO_SIGNATURE
+%token SHOW_EOL SHOW_QUESTION_MARK SHOW_OPARENT SHOW_CPARENT
+%token QUERY_DATE QUERY_FROM
+%token QUERY_FULLNAME QUERY_SUBJECT QUERY_TO QUERY_NEWSGROUPS
+%token QUERY_MESSAGEID QUERY_CC QUERY_REFERENCES
+%token OPARENT CPARENT
+%token CHARACTER
+
+%start quote_fmt
+
+%token <chr> CHARACTER
+%type <chr> character
+
+%%
+
+quote_fmt:
+ character_or_special_or_query_list;
+
+character_or_special_or_query_list:
+ character_or_special_or_query character_or_special_or_query_list
+ | character_or_special_or_query ;
+
+character_or_special_or_query:
+ special
+ | character
+ {
+ INSERT_CHARACTER($1);
+ }
+ | query ;
+
+
+character:
+ CHARACTER
+ ;
+
+special:
+ SHOW_NEWSGROUPS
+ {
+ if (msginfo->newsgroups)
+ INSERT(msginfo->newsgroups);
+ }
+ | SHOW_DATE
+ {
+ if (msginfo->date)
+ INSERT(msginfo->date);
+ }
+ | SHOW_FROM
+ {
+ if (msginfo->from)
+ INSERT(msginfo->from);
+ }
+ | SHOW_FULLNAME
+ {
+ if (msginfo->fromname)
+ INSERT(msginfo->fromname);
+ }
+ | SHOW_FIRST_NAME
+ {
+ if (msginfo->fromname) {
+ guchar *p;
+ gchar *str;
+
+ str = alloca(strlen(msginfo->fromname) + 1);
+ if (str != NULL) {
+ strcpy(str, msginfo->fromname);
+ p = str;
+ while (*p && !isspace(*p)) p++;
+ *p = '\0';
+ INSERT(str);
+ }
+ }
+ }
+ | SHOW_SENDER_INITIAL
+ {
+#define MAX_SENDER_INITIAL 20
+ if (msginfo->fromname) {
+ gchar tmp[MAX_SENDER_INITIAL];
+ guchar *p;
+ gchar *cur;
+ gint len = 0;
+
+ p = msginfo->fromname;
+ cur = tmp;
+ while (*p) {
+ if (*p && isalnum(*p)) {
+ *cur = toupper(*p);
+ cur++;
+ len++;
+ if (len >= MAX_SENDER_INITIAL - 1)
+ break;
+ } else
+ break;
+ while (*p && !isseparator(*p)) p++;
+ while (*p && isseparator(*p)) p++;
+ }
+ *cur = '\0';
+ INSERT(tmp);
+ }
+ }
+ | SHOW_SUBJECT
+ {
+ if (msginfo->subject)
+ INSERT(msginfo->subject);
+ }
+ | SHOW_TO
+ {
+ if (msginfo->to)
+ INSERT(msginfo->to);
+ }
+ | SHOW_MESSAGEID
+ {
+ if (msginfo->msgid)
+ INSERT(msginfo->msgid);
+ }
+ | SHOW_PERCENT
+ {
+ INSERT("%");
+ }
+ | SHOW_CC
+ {
+ if (msginfo->cc)
+ INSERT(msginfo->cc);
+ }
+ | SHOW_REFERENCES
+ {
+ /* if (msginfo->references)
+ INSERT(msginfo->references); */
+ }
+ | SHOW_MESSAGE
+ {
+ if (msginfo->folder || body) {
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+
+ if (body)
+ fp = str_open_as_stream(body);
+ else
+ fp = procmime_get_first_text_content(msginfo);
+
+ if (fp == NULL)
+ g_warning("Can't get text part\n");
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ INSERT(buf);
+ }
+ fclose(fp);
+ }
+ }
+ }
+ | SHOW_QUOTED_MESSAGE
+ {
+ if (msginfo->folder || body) {
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+
+ if (body)
+ fp = str_open_as_stream(body);
+ else
+ fp = procmime_get_first_text_content(msginfo);
+
+ if (fp == NULL)
+ g_warning("Can't get text part\n");
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ if (quote_str)
+ INSERT(quote_str);
+ INSERT(buf);
+ }
+ fclose(fp);
+ }
+ }
+ }
+ | SHOW_MESSAGE_NO_SIGNATURE
+ {
+ if (msginfo->folder || body) {
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+
+ if (body)
+ fp = str_open_as_stream(body);
+ else
+ fp = procmime_get_first_text_content(msginfo);
+
+ if (fp == NULL)
+ g_warning("Can't get text part\n");
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ if (strncmp(buf, "-- \n", 4) == 0)
+ break;
+ INSERT(buf);
+ }
+ fclose(fp);
+ }
+ }
+ }
+ | SHOW_QUOTED_MESSAGE_NO_SIGNATURE
+ {
+ if (msginfo->folder || body) {
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+
+ if (body)
+ fp = str_open_as_stream(body);
+ else
+ fp = procmime_get_first_text_content(msginfo);
+
+ if (fp == NULL)
+ g_warning("Can't get text part\n");
+ else {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strcrchomp(buf);
+ if (strncmp(buf, "-- \n", 4) == 0)
+ break;
+ if (quote_str)
+ INSERT(quote_str);
+ INSERT(buf);
+ }
+ fclose(fp);
+ }
+ }
+ }
+ | SHOW_BACKSLASH
+ {
+ INSERT("\\");
+ }
+ | SHOW_TAB
+ {
+ INSERT("\t");
+ }
+ | SHOW_EOL
+ {
+ INSERT("\n");
+ }
+ | SHOW_QUESTION_MARK
+ {
+ INSERT("?");
+ }
+ | SHOW_OPARENT
+ {
+ INSERT("{");
+ }
+ | SHOW_CPARENT
+ {
+ INSERT("}");
+ };
+
+query:
+ QUERY_DATE
+ {
+ add_visibility(msginfo->date != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_FROM
+ {
+ add_visibility(msginfo->from != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_FULLNAME
+ {
+ add_visibility(msginfo->fromname != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_SUBJECT
+ {
+ add_visibility(msginfo->subject != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_TO
+ {
+ add_visibility(msginfo->to != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_NEWSGROUPS
+ {
+ add_visibility(msginfo->newsgroups != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_MESSAGEID
+ {
+ add_visibility(msginfo->msgid != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_CC
+ {
+ add_visibility(msginfo->cc != NULL);
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ }
+ | QUERY_REFERENCES
+ {
+ /* add_visibility(msginfo->references != NULL); */
+ }
+ OPARENT quote_fmt CPARENT
+ {
+ remove_visibility();
+ };
diff --git a/src/quoted-printable.c b/src/quoted-printable.c
new file mode 100644
index 00000000..bf99a234
--- /dev/null
+++ b/src/quoted-printable.c
@@ -0,0 +1,231 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <ctype.h>
+
+static gboolean get_hex_value(guchar *out, gchar c1, gchar c2);
+static void get_hex_str(gchar *out, guchar ch);
+
+#define MAX_LINELEN 76
+
+#define IS_LBREAK(p) \
+ (*(p) == '\0' || *(p) == '\n' || (*(p) == '\r' && *((p) + 1) == '\n'))
+
+#define SOFT_LBREAK_IF_REQUIRED(n) \
+ if (len + (n) > MAX_LINELEN || \
+ (len + (n) == MAX_LINELEN && (!IS_LBREAK(inp + 1)))) { \
+ *outp++ = '='; \
+ *outp++ = '\n'; \
+ len = 0; \
+ }
+
+void qp_encode_line(gchar *out, const guchar *in)
+{
+ const guchar *inp = in;
+ gchar *outp = out;
+ guchar ch;
+ gint len = 0;
+
+ while (*inp != '\0') {
+ ch = *inp;
+
+ if (IS_LBREAK(inp)) {
+ *outp++ = '\n';
+ len = 0;
+ if (*inp == '\r')
+ inp++;
+ inp++;
+ } else if (ch == '\t' || ch == ' ') {
+ if (IS_LBREAK(inp + 1)) {
+ SOFT_LBREAK_IF_REQUIRED(3);
+ *outp++ = '=';
+ get_hex_str(outp, ch);
+ outp += 2;
+ len += 3;
+ inp++;
+ } else {
+ SOFT_LBREAK_IF_REQUIRED(1);
+ *outp++ = *inp++;
+ len++;
+ }
+ } else if ((ch >= 33 && ch <= 60) || (ch >= 62 && ch <= 126)) {
+ SOFT_LBREAK_IF_REQUIRED(1);
+ *outp++ = *inp++;
+ len++;
+ } else {
+ SOFT_LBREAK_IF_REQUIRED(3);
+ *outp++ = '=';
+ get_hex_str(outp, ch);
+ outp += 2;
+ len += 3;
+ inp++;
+ }
+ }
+
+ if (len > 0)
+ *outp++ = '\n';
+
+ *outp = '\0';
+}
+
+gint qp_decode_line(gchar *str)
+{
+ gchar *inp = str, *outp = str;
+
+ while (*inp != '\0') {
+ if (*inp == '=') {
+ if (inp[1] && inp[2] &&
+ get_hex_value(outp, inp[1], inp[2]) == TRUE) {
+ inp += 3;
+ } else if (inp[1] == '\0' || isspace((guchar)inp[1])) {
+ /* soft line break */
+ break;
+ } else {
+ /* broken QP string */
+ *outp = *inp++;
+ }
+ } else {
+ *outp = *inp++;
+ }
+ outp++;
+ }
+
+ *outp = '\0';
+
+ return outp - str;
+}
+
+gint qp_decode_q_encoding(guchar *out, const gchar *in, gint inlen)
+{
+ const gchar *inp = in;
+ guchar *outp = out;
+
+ if (inlen < 0)
+ inlen = G_MAXINT;
+
+ while (inp - in < inlen && *inp != '\0') {
+ if (*inp == '=' && inp + 3 - in <= inlen) {
+ if (get_hex_value(outp, inp[1], inp[2]) == TRUE) {
+ inp += 3;
+ } else {
+ *outp = *inp++;
+ }
+ } else if (*inp == '_') {
+ *outp = ' ';
+ inp++;
+ } else {
+ *outp = *inp++;
+ }
+ outp++;
+ }
+
+ *outp = '\0';
+
+ return outp - out;
+}
+
+gint qp_get_q_encoding_len(const guchar *str)
+{
+ const guchar *inp = str;
+ gint len = 0;
+
+ while (*inp != '\0') {
+ if (*inp == 0x20)
+ len++;
+ else if (*inp == '=' || *inp == '?' || *inp == '_' ||
+ *inp < 32 || *inp > 127 || isspace(*inp))
+ len += 3;
+ else
+ len++;
+
+ inp++;
+ }
+
+ return len;
+}
+
+void qp_q_encode(gchar *out, const guchar *in)
+{
+ const guchar *inp = in;
+ gchar *outp = out;
+
+ while (*inp != '\0') {
+ if (*inp == 0x20)
+ *outp++ = '_';
+ else if (*inp == '=' || *inp == '?' || *inp == '_' ||
+ *inp < 32 || *inp > 127 || isspace(*inp)) {
+ *outp++ = '=';
+ get_hex_str(outp, *inp);
+ outp += 2;
+ } else
+ *outp++ = *inp;
+
+ inp++;
+ }
+
+ *outp = '\0';
+}
+
+#define HEX_TO_INT(val, hex) \
+{ \
+ gchar c = hex; \
+ \
+ if ('0' <= c && c <= '9') { \
+ val = c - '0'; \
+ } else if ('a' <= c && c <= 'f') { \
+ val = c - 'a' + 10; \
+ } else if ('A' <= c && c <= 'F') { \
+ val = c - 'A' + 10; \
+ } else { \
+ val = -1; \
+ } \
+}
+
+static gboolean get_hex_value(guchar *out, gchar c1, gchar c2)
+{
+ gint hi, lo;
+
+ HEX_TO_INT(hi, c1);
+ HEX_TO_INT(lo, c2);
+
+ if (hi == -1 || lo == -1)
+ return FALSE;
+
+ *out = (hi << 4) + lo;
+ return TRUE;
+}
+
+#define INT_TO_HEX(hex, val) \
+{ \
+ if ((val) < 10) \
+ hex = '0' + (val); \
+ else \
+ hex = 'A' + (val) - 10; \
+}
+
+static void get_hex_str(gchar *out, guchar ch)
+{
+ gchar hex;
+
+ INT_TO_HEX(hex, ch >> 4);
+ *out++ = hex;
+ INT_TO_HEX(hex, ch & 0x0f);
+ *out++ = hex;
+}
diff --git a/src/quoted-printable.h b/src/quoted-printable.h
new file mode 100644
index 00000000..e5abf4f7
--- /dev/null
+++ b/src/quoted-printable.h
@@ -0,0 +1,36 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __QUOTED_PRINTABLE_H__
+#define __QUOTED_PRINTABLE_H__
+
+#include <glib.h>
+
+void qp_encode_line (gchar *out,
+ const guchar *in);
+gint qp_decode_line (gchar *str);
+
+gint qp_decode_q_encoding (guchar *out,
+ const gchar *in,
+ gint inlen);
+gint qp_get_q_encoding_len (const guchar *str);
+void qp_q_encode (gchar *out,
+ const guchar *in);
+
+#endif /* __QUOTED_PRINTABLE_H__ */
diff --git a/src/recv.c b/src/recv.c
new file mode 100644
index 00000000..46cf27be
--- /dev/null
+++ b/src/recv.c
@@ -0,0 +1,227 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+#include "intl.h"
+#include "recv.h"
+#include "socket.h"
+#include "utils.h"
+
+static RecvUIFunc recv_ui_func;
+static gpointer recv_ui_func_data;
+
+gint recv_write_to_file(SockInfo *sock, const gchar *filename)
+{
+ FILE *fp;
+ gint ret;
+
+ g_return_val_if_fail(filename != NULL, -1);
+
+ if ((fp = fopen(filename, "wb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ recv_write(sock, NULL);
+ return -1;
+ }
+
+ if (change_file_mode_rw(fp, filename) < 0)
+ FILE_OP_ERROR(filename, "chmod");
+
+ if ((ret = recv_write(sock, fp)) < 0) {
+ fclose(fp);
+ unlink(filename);
+ return ret;
+ }
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(filename, "fclose");
+ unlink(filename);
+ return -1;
+ }
+
+ return 0;
+}
+
+gint recv_bytes_write_to_file(SockInfo *sock, glong size, const gchar *filename)
+{
+ FILE *fp;
+ gint ret;
+
+ g_return_val_if_fail(filename != NULL, -1);
+
+ if ((fp = fopen(filename, "wb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ recv_write(sock, NULL);
+ return -1;
+ }
+
+ if (change_file_mode_rw(fp, filename) < 0)
+ FILE_OP_ERROR(filename, "chmod");
+
+ if ((ret = recv_bytes_write(sock, size, fp)) < 0) {
+ fclose(fp);
+ unlink(filename);
+ return ret;
+ }
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(filename, "fclose");
+ unlink(filename);
+ return -1;
+ }
+
+ return 0;
+}
+
+gint recv_write(SockInfo *sock, FILE *fp)
+{
+ gchar buf[BUFFSIZE];
+ gint len;
+ gint count = 0;
+ gint bytes = 0;
+ struct timeval tv_prev, tv_cur;
+
+ gettimeofday(&tv_prev, NULL);
+
+ for (;;) {
+ if (sock_gets(sock, buf, sizeof(buf)) < 0) {
+ g_warning(_("error occurred while retrieving data.\n"));
+ return -2;
+ }
+
+ len = strlen(buf);
+ if (len > 1 && buf[0] == '.' && buf[1] == '\r') {
+ if (recv_ui_func)
+ recv_ui_func(sock, count, bytes,
+ recv_ui_func_data);
+ break;
+ }
+ count++;
+ bytes += len;
+
+ if (recv_ui_func) {
+ gettimeofday(&tv_cur, NULL);
+ /* if elapsed time from previous update is greater
+ than 50msec, update UI */
+ if (tv_cur.tv_sec - tv_prev.tv_sec > 0 ||
+ tv_cur.tv_usec - tv_prev.tv_usec > UI_REFRESH_INTERVAL) {
+ gboolean ret;
+ ret = recv_ui_func(sock, count, bytes,
+ recv_ui_func_data);
+ if (ret == FALSE) return -1;
+ gettimeofday(&tv_prev, NULL);
+ }
+ }
+
+ if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') {
+ buf[len - 2] = '\n';
+ buf[len - 1] = '\0';
+ len--;
+ }
+
+ if (buf[0] == '.' && buf[1] == '.')
+ memmove(buf, buf + 1, len--);
+
+ if (!strncmp(buf, ">From ", 6))
+ memmove(buf, buf + 1, len--);
+
+ if (fp && fputs(buf, fp) == EOF) {
+ perror("fputs");
+ g_warning(_("Can't write to file.\n"));
+ fp = NULL;
+ }
+ }
+
+ if (!fp) return -1;
+
+ return 0;
+}
+
+gint recv_bytes_write(SockInfo *sock, glong size, FILE *fp)
+{
+ gchar *buf;
+ glong count = 0;
+ gchar *prev, *cur;
+
+ if (size == 0)
+ return 0;
+
+ buf = g_malloc(size);
+
+ do {
+ gint read_count;
+
+ read_count = sock_read(sock, buf + count, size - count);
+ if (read_count < 0) {
+ g_free(buf);
+ return -2;
+ }
+ count += read_count;
+ } while (count < size);
+
+ /* +------------------+----------------+--------------------------+ *
+ * ^buf ^prev ^cur buf+size-1^ */
+
+ prev = buf;
+ while ((cur = memchr(prev, '\r', size - (prev - buf))) != NULL) {
+ if (cur == buf + size - 1) break;
+
+ if (fwrite(prev, sizeof(gchar), cur - prev, fp) == EOF ||
+ fwrite("\n", sizeof(gchar), 1, fp) == EOF) {
+ perror("fwrite");
+ g_warning(_("Can't write to file.\n"));
+ g_free(buf);
+ return -1;
+ }
+
+ if (*(cur + 1) == '\n')
+ prev = cur + 2;
+ else
+ prev = cur + 1;
+
+ if (prev - buf >= size) break;
+ }
+
+ if (prev - buf < size && fwrite(buf, sizeof(gchar),
+ size - (prev - buf), fp) == EOF) {
+ perror("fwrite");
+ g_warning(_("Can't write to file.\n"));
+ g_free(buf);
+ return -1;
+ }
+
+ g_free(buf);
+ return 0;
+}
+
+void recv_set_ui_func(RecvUIFunc func, gpointer data)
+{
+ recv_ui_func = func;
+ recv_ui_func_data = data;
+}
diff --git a/src/recv.h b/src/recv.h
new file mode 100644
index 00000000..e73a78f2
--- /dev/null
+++ b/src/recv.h
@@ -0,0 +1,46 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __RECV_H__
+#define __RECV_H__
+
+#include <glib.h>
+
+#include "socket.h"
+
+typedef gboolean (*RecvUIFunc) (SockInfo *sock,
+ gint count,
+ gint read_bytes,
+ gpointer data);
+
+gint recv_write_to_file (SockInfo *sock,
+ const gchar *filename);
+gint recv_bytes_write_to_file (SockInfo *sock,
+ glong size,
+ const gchar *filename);
+gint recv_write (SockInfo *sock,
+ FILE *fp);
+gint recv_bytes_write (SockInfo *sock,
+ glong size,
+ FILE *fp);
+
+void recv_set_ui_func (RecvUIFunc func,
+ gpointer data);
+
+#endif /* __RECV_H__ */
diff --git a/src/rfc2015.c b/src/rfc2015.c
new file mode 100644
index 00000000..9ef38a24
--- /dev/null
+++ b/src/rfc2015.c
@@ -0,0 +1,1395 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if USE_GPGME
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+#include <ctype.h>
+
+#include <gpgme.h>
+
+#include "intl.h"
+#include "procmime.h"
+#include "procheader.h"
+#include "base64.h"
+#include "uuencode.h"
+#include "unmime.h"
+#include "codeconv.h"
+#include "utils.h"
+#include "prefs_common.h"
+#include "passphrase.h"
+#include "select-keys.h"
+#include "sigstatus.h"
+#include "rfc2015.h"
+
+#define DIM(v) (sizeof(v)/sizeof((v)[0]))
+
+static char *content_names[] = {
+ "Content-Type",
+ "Content-Disposition",
+ "Content-Transfer-Encoding",
+ NULL
+};
+
+static char *mime_version_name[] = {
+ "Mime-Version",
+ NULL
+};
+
+#if 0
+static void dump_mimeinfo (const char *text, MimeInfo *x)
+{
+ debug_print ("MimeInfo[%s] %p level=%d\n",
+ text, x, x? x->level:0 );
+ if (!x)
+ return;
+
+ debug_print (" enc=`%s' enc_type=%d mime_type=%d\n",
+ x->encoding, x->encoding_type, x->mime_type );
+ debug_print (" cont_type=`%s' cs=`%s' name=`%s' bnd=`%s'\n",
+ x->content_type, x->charset, x->name, x->boundary );
+ debug_print (" cont_disp=`%s' fname=`%s' fpos=%ld size=%u, lvl=%d\n",
+ x->content_disposition, x->filename, x->fpos, x->size,
+ x->level );
+ dump_mimeinfo (".main", x->main );
+ dump_mimeinfo (".sub", x->sub );
+ dump_mimeinfo (".next", x->next );
+ debug_print ("MimeInfo[.parent] %p\n", x );
+ dump_mimeinfo (".children", x->children );
+ dump_mimeinfo (".plaintext", x->plaintext );
+}
+
+static void dump_part ( MimeInfo *mimeinfo, FILE *fp )
+{
+ unsigned int size = mimeinfo->size;
+ int c;
+
+ if (fseek (fp, mimeinfo->fpos, SEEK_SET)) {
+ debug_print ("dump_part: fseek error\n");
+ return;
+ }
+
+ debug_print ("--- begin dump_part ----\n");
+ while (size-- && (c = getc (fp)) != EOF)
+ putc (c, stderr);
+ if (ferror (fp))
+ debug_print ("dump_part: read error\n");
+ debug_print ("--- end dump_part ----\n");
+}
+#endif
+
+void
+rfc2015_disable_all (void)
+{
+ /* FIXME: set a flag, so that we don't bother the user with failed
+ * gpgme messages */
+}
+
+
+void
+rfc2015_secure_remove (const char *fname)
+{
+ if (!fname)
+ return;
+ /* fixme: overwrite the file first */
+ remove (fname);
+}
+
+
+static const gchar *
+sig_status_to_string (GpgmeSigStat status)
+{
+ const gchar *result;
+
+ switch (status) {
+ case GPGME_SIG_STAT_NONE:
+ result = _("Oops: Signature not verified");
+ break;
+ case GPGME_SIG_STAT_NOSIG:
+ result = _("No signature found");
+ break;
+ case GPGME_SIG_STAT_GOOD:
+ result = _("Good signature");
+ break;
+ case GPGME_SIG_STAT_BAD:
+ result = _("BAD signature");
+ break;
+ case GPGME_SIG_STAT_NOKEY:
+ result = _("No public key to verify the signature");
+ break;
+ case GPGME_SIG_STAT_ERROR:
+ result = _("Error verifying the signature");
+ break;
+ case GPGME_SIG_STAT_DIFF:
+ result = _("Different results for signatures");
+ break;
+ default:
+ result = _("Error: Unknown status");
+ break;
+ }
+
+ return result;
+}
+
+static const gchar *
+sig_status_with_name (GpgmeSigStat status)
+{
+ const gchar *result;
+
+ switch (status) {
+ case GPGME_SIG_STAT_NONE:
+ result = _("Oops: Signature not verified");
+ break;
+ case GPGME_SIG_STAT_NOSIG:
+ result = _("No signature found");
+ break;
+ case GPGME_SIG_STAT_GOOD:
+ result = _("Good signature from \"%s\"");
+ break;
+ case GPGME_SIG_STAT_BAD:
+ result = _("BAD signature from \"%s\"");
+ break;
+ case GPGME_SIG_STAT_NOKEY:
+ result = _("No public key to verify the signature");
+ break;
+ case GPGME_SIG_STAT_ERROR:
+ result = _("Error verifying the signature");
+ break;
+ case GPGME_SIG_STAT_DIFF:
+ result = _("Different results for signatures");
+ break;
+ default:
+ result = _("Error: Unknown status");
+ break;
+ }
+
+ return result;
+}
+
+static void
+sig_status_for_key(GString *str, GpgmeCtx ctx, GpgmeSigStat status,
+ GpgmeKey key, const gchar *fpr)
+{
+ gint idx = 0;
+ const char *uid;
+
+ uid = gpgme_key_get_string_attr (key, GPGME_ATTR_USERID, NULL, idx);
+ if (uid == NULL) {
+ g_string_sprintfa (str, "%s\n",
+ sig_status_to_string (status));
+ if ((fpr != NULL) && (*fpr != '\0'))
+ g_string_sprintfa (str, "Key fingerprint: %s\n", fpr);
+ g_string_append (str, _("Cannot find user ID for this key."));
+ return;
+ }
+ g_string_sprintfa (str, sig_status_with_name (status), uid);
+ g_string_append (str, "\n");
+
+ while (1) {
+ uid = gpgme_key_get_string_attr (key, GPGME_ATTR_USERID,
+ NULL, ++idx);
+ if (uid == NULL)
+ break;
+ g_string_sprintfa (str, _(" aka \"%s\"\n"),
+ uid);
+ }
+}
+
+static gchar *
+sig_status_full (GpgmeCtx ctx)
+{
+ GString *str;
+ gint sig_idx = 0;
+ GpgmeError err;
+ GpgmeSigStat status;
+ GpgmeKey key;
+ const char *fpr;
+ time_t created;
+ struct tm *ctime_val;
+ char ctime_str[80];
+ gchar *retval;
+
+ str = g_string_new ("");
+
+ fpr = gpgme_get_sig_status (ctx, sig_idx, &status, &created);
+ while (fpr != NULL) {
+ if (created != 0) {
+ ctime_val = localtime (&created);
+ strftime (ctime_str, sizeof (ctime_str), "%c",
+ ctime_val);
+ g_string_sprintfa (str,
+ _("Signature made at %s\n"),
+ ctime_str);
+ }
+ err = gpgme_get_sig_key (ctx, sig_idx, &key);
+ if (err != 0) {
+ g_string_sprintfa (str, "%s\n",
+ sig_status_to_string (status));
+ if ((fpr != NULL) && (*fpr != '\0'))
+ g_string_sprintfa (str,
+ _("Key fingerprint: %s\n"),
+ fpr);
+ } else {
+ sig_status_for_key (str, ctx, status, key, fpr);
+ gpgme_key_unref (key);
+ }
+ g_string_append (str, "\n\n");
+
+ fpr = gpgme_get_sig_status (ctx, ++sig_idx, &status, &created);
+ }
+
+ retval = str->str;
+ g_string_free (str, FALSE);
+ return retval;
+}
+
+static void check_signature (MimeInfo *mimeinfo, MimeInfo *partinfo, FILE *fp)
+{
+ GpgmeCtx ctx = NULL;
+ GpgmeError err;
+ GpgmeData sig = NULL, text = NULL;
+ GpgmeSigStat status = GPGME_SIG_STAT_NONE;
+ GpgmegtkSigStatus statuswindow = NULL;
+ const char *result = NULL;
+ gchar *tmp_file;
+ gint n_exclude_chars = 0;
+
+ if (prefs_common.gpg_signature_popup)
+ statuswindow = gpgmegtk_sig_status_create ();
+
+ err = gpgme_new (&ctx);
+ if (err) {
+ debug_print ("gpgme_new failed: %s\n", gpgme_strerror (err));
+ goto leave;
+ }
+
+ /* don't include the last empty line.
+ It does not belong to the signed text */
+ if (mimeinfo->children->size > 0) {
+ if (fseek(fp, mimeinfo->children->fpos + mimeinfo->children->size - 1,
+ SEEK_SET) < 0) {
+ perror("fseek");
+ goto leave;
+ }
+ if (fgetc(fp) == '\n') {
+ n_exclude_chars++;
+ if (mimeinfo->children->size > 1) {
+ if (fseek(fp, mimeinfo->children->fpos + mimeinfo->children->size - 2,
+ SEEK_SET) < 0) {
+ perror("fseek");
+ goto leave;
+ }
+ if (fgetc(fp) == '\r')
+ n_exclude_chars++;
+ }
+ }
+ }
+
+ /* canonicalize the file part. */
+ tmp_file = get_tmp_file();
+ if (copy_file_part(fp, mimeinfo->children->fpos,
+ mimeinfo->children->size - n_exclude_chars,
+ tmp_file) < 0) {
+ g_free(tmp_file);
+ goto leave;
+ }
+ if (canonicalize_file_replace(tmp_file) < 0) {
+ unlink(tmp_file);
+ g_free(tmp_file);
+ goto leave;
+ }
+
+ err = gpgme_data_new_from_file(&text, tmp_file, 1);
+
+ unlink(tmp_file);
+ g_free(tmp_file);
+
+ if (!err)
+ err = gpgme_data_new_from_filepart (&sig, NULL, fp,
+ partinfo->fpos, partinfo->size);
+ if (err) {
+ debug_print ("gpgme_data_new_from_filepart failed: %s\n",
+ gpgme_strerror (err));
+ goto leave;
+ }
+
+ err = gpgme_op_verify (ctx, sig, text, &status);
+ if (err) {
+ debug_print ("gpgme_op_verify failed: %s\n", gpgme_strerror (err));
+ goto leave;
+ }
+
+ /* FIXME: check what the heck this sig_status_full stuff is.
+ * it should better go into sigstatus.c */
+ g_free (partinfo->sigstatus_full);
+ partinfo->sigstatus_full = sig_status_full (ctx);
+
+leave:
+ result = gpgmegtk_sig_status_to_string(status);
+ debug_print("verification status: %s\n", result);
+ if (prefs_common.gpg_signature_popup)
+ gpgmegtk_sig_status_update (statuswindow, ctx);
+
+ g_free (partinfo->sigstatus);
+ partinfo->sigstatus = g_strdup (result);
+
+ gpgme_data_release (sig);
+ gpgme_data_release (text);
+ gpgme_release (ctx);
+ if (prefs_common.gpg_signature_popup)
+ gpgmegtk_sig_status_destroy (statuswindow);
+}
+
+/*
+ * Copy a gpgme data object to a temporary file and
+ * return this filename
+ */
+#if 0
+static char *
+copy_gpgmedata_to_temp (GpgmeData data, guint *length)
+{
+ static int id;
+ char *tmp;
+ FILE *fp;
+ char buf[100];
+ size_t nread;
+ GpgmeError err;
+
+ tmp = g_strdup_printf("%s%cgpgtmp.%08x",
+ get_mime_tmp_dir(), G_DIR_SEPARATOR, ++id );
+
+ if ((fp = fopen(tmp, "wb")) == NULL) {
+ FILE_OP_ERROR(tmp, "fopen");
+ g_free(tmp);
+ return NULL;
+ }
+
+ err = gpgme_data_rewind ( data );
+ if (err)
+ debug_print ("gpgme_data_rewind failed: %s\n", gpgme_strerror (err));
+
+ while (!(err = gpgme_data_read (data, buf, 100, &nread))) {
+ fwrite ( buf, nread, 1, fp );
+ }
+
+ if (err != GPGME_EOF)
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+
+ fclose (fp);
+ *length = nread;
+
+ return tmp;
+}
+#endif
+
+static GpgmeData
+pgp_decrypt (MimeInfo *partinfo, FILE *fp)
+{
+ GpgmeCtx ctx = NULL;
+ GpgmeError err;
+ GpgmeData cipher = NULL, plain = NULL;
+ struct passphrase_cb_info_s info;
+
+ memset (&info, 0, sizeof info);
+
+ err = gpgme_new (&ctx);
+ if (err) {
+ debug_print ("gpgme_new failed: %s\n", gpgme_strerror (err));
+ goto leave;
+ }
+
+ err = gpgme_data_new_from_filepart (&cipher, NULL, fp,
+ partinfo->fpos, partinfo->size);
+ if (err) {
+ debug_print ("gpgme_data_new_from_filepart failed: %s\n",
+ gpgme_strerror (err));
+ goto leave;
+ }
+
+ err = gpgme_data_new (&plain);
+ if (err) {
+ debug_print ("gpgme_new failed: %s\n", gpgme_strerror (err));
+ goto leave;
+ }
+
+ if (!getenv("GPG_AGENT_INFO")) {
+ info.c = ctx;
+ gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, &info);
+ }
+
+ err = gpgme_op_decrypt (ctx, cipher, plain);
+
+leave:
+ gpgme_data_release (cipher);
+ if (err) {
+ gpgmegtk_free_passphrase();
+ debug_print ("decryption failed: %s\n", gpgme_strerror (err));
+ gpgme_data_release (plain);
+ plain = NULL;
+ }
+ else
+ debug_print ("** decryption succeeded\n");
+
+ gpgme_release (ctx);
+ return plain;
+}
+
+MimeInfo * rfc2015_find_signature (MimeInfo *mimeinfo)
+{
+ MimeInfo *partinfo;
+ int n = 0;
+
+ if (!mimeinfo)
+ return NULL;
+ if (g_strcasecmp (mimeinfo->content_type, "multipart/signed"))
+ return NULL;
+
+ debug_print ("** multipart/signed encountered\n");
+
+ /* check that we have at least 2 parts of the correct type */
+ for (partinfo = mimeinfo->children;
+ partinfo != NULL; partinfo = partinfo->next) {
+ if (++n > 1 && !g_strcasecmp (partinfo->content_type,
+ "application/pgp-signature"))
+ break;
+ }
+
+ return partinfo;
+}
+
+gboolean rfc2015_has_signature (MimeInfo *mimeinfo)
+{
+ return rfc2015_find_signature (mimeinfo) != NULL;
+}
+
+void rfc2015_check_signature (MimeInfo *mimeinfo, FILE *fp)
+{
+ MimeInfo *partinfo;
+
+ partinfo = rfc2015_find_signature (mimeinfo);
+ if (!partinfo)
+ return;
+
+#if 0
+ g_message ("** yep, it is a pgp signature");
+ dump_mimeinfo ("gpg-signature", partinfo );
+ dump_part (partinfo, fp );
+ dump_mimeinfo ("signed text", mimeinfo->children );
+ dump_part (mimeinfo->children, fp);
+#endif
+
+ check_signature (mimeinfo, partinfo, fp);
+}
+
+int rfc2015_is_encrypted (MimeInfo *mimeinfo)
+{
+ if (!mimeinfo || mimeinfo->mime_type != MIME_MULTIPART)
+ return 0;
+ if (g_strcasecmp (mimeinfo->content_type, "multipart/encrypted"))
+ return 0;
+ /* fixme: we should check the protocol parameter */
+ return 1;
+}
+
+gboolean rfc2015_msg_is_encrypted (const gchar *file)
+{
+ FILE *fp;
+ MimeInfo *mimeinfo;
+ int ret;
+
+ if ((fp = fopen(file, "rb")) == NULL)
+ return FALSE;
+
+ mimeinfo = procmime_scan_mime_header(fp);
+ if(!mimeinfo) {
+ fclose(fp);
+ return FALSE;
+ }
+
+ ret = rfc2015_is_encrypted(mimeinfo);
+ procmime_mimeinfo_free_all(mimeinfo);
+ return ret != 0 ? TRUE : FALSE;
+}
+
+static int
+name_cmp(const char *a, const char *b)
+{
+ for( ; *a && *b; a++, b++) {
+ if(*a != *b
+ && toupper(*(unsigned char *)a) != toupper(*(unsigned char *)b))
+ return 1;
+ }
+
+ return *a != *b;
+}
+
+static int
+headerp(char *p, char **names)
+{
+ int i, c;
+ char *p2;
+
+ p2 = strchr(p, ':');
+ if(!p2 || p == p2) {
+ return 0;
+ }
+ if(p2[-1] == ' ' || p2[-1] == '\t') {
+ return 0;
+ }
+
+ if(!names[0])
+ return 1;
+
+ c = *p2;
+ *p2 = 0;
+ for(i = 0 ; names[i] != NULL; i++) {
+ if(!name_cmp (names[i], p))
+ break;
+ }
+ *p2 = c;
+
+ return names[i] != NULL;
+}
+
+
+#define DECRYPTION_ABORT() \
+{ \
+ procmime_mimeinfo_free_all(tmpinfo); \
+ msginfo->decryption_failed = 1; \
+ return; \
+}
+
+void rfc2015_decrypt_message (MsgInfo *msginfo, MimeInfo *mimeinfo, FILE *fp)
+{
+ static int id;
+ MimeInfo *tmpinfo, *partinfo;
+ int ver_ok = 0;
+ char *fname;
+ GpgmeData plain;
+ FILE *dstfp;
+ size_t nread;
+ char buf[BUFFSIZE];
+ int in_cline;
+ GpgmeError err;
+
+ g_return_if_fail (msginfo != NULL);
+ g_return_if_fail (mimeinfo != NULL);
+ g_return_if_fail (fp != NULL);
+ g_return_if_fail (mimeinfo->mime_type == MIME_MULTIPART);
+
+ debug_print ("** decrypting multipart/encrypted message\n");
+
+ /* skip headers */
+ if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0)
+ perror("fseek");
+ tmpinfo = procmime_scan_mime_header(fp);
+ if (!tmpinfo || tmpinfo->mime_type != MIME_MULTIPART) {
+ DECRYPTION_ABORT();
+ }
+
+ procmime_scan_multipart_message(tmpinfo, fp);
+
+ /* check that we have the 2 parts */
+ partinfo = tmpinfo->children;
+ if (!partinfo || !partinfo->next) {
+ DECRYPTION_ABORT();
+ }
+ if (!g_strcasecmp (partinfo->content_type, "application/pgp-encrypted")) {
+ /* Fixme: check that the version is 1 */
+ ver_ok = 1;
+ }
+ partinfo = partinfo->next;
+ if (ver_ok &&
+ !g_strcasecmp (partinfo->content_type, "application/octet-stream")) {
+ if (partinfo->next)
+ g_warning ("oops: pgp_encrypted with more than 2 parts");
+ }
+ else {
+ DECRYPTION_ABORT();
+ }
+
+ debug_print ("** yep, it is pgp encrypted\n");
+
+ plain = pgp_decrypt (partinfo, fp);
+ if (!plain) {
+ DECRYPTION_ABORT();
+ }
+
+ fname = g_strdup_printf("%s%cplaintext.%08x",
+ get_mime_tmp_dir(), G_DIR_SEPARATOR, ++id);
+
+ if ((dstfp = fopen(fname, "wb")) == NULL) {
+ FILE_OP_ERROR(fname, "fopen");
+ g_free(fname);
+ DECRYPTION_ABORT();
+ }
+
+ /* write the orginal header to the new file */
+ if (fseek(fp, tmpinfo->fpos, SEEK_SET) < 0)
+ perror("fseek");
+
+ in_cline = 0;
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (headerp (buf, content_names)) {
+ in_cline = 1;
+ continue;
+ }
+ if (in_cline) {
+ if (buf[0] == ' ' || buf[0] == '\t')
+ continue;
+ in_cline = 0;
+ }
+ if (buf[0] == '\r' || buf[0] == '\n')
+ break;
+ fputs (buf, dstfp);
+ }
+
+ err = gpgme_data_rewind (plain);
+ if (err)
+ debug_print ("gpgme_data_rewind failed: %s\n", gpgme_strerror (err));
+
+ while (!(err = gpgme_data_read (plain, buf, sizeof(buf), &nread))) {
+ fwrite (buf, nread, 1, dstfp);
+ }
+
+ if (err != GPGME_EOF) {
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ }
+
+ fclose (dstfp);
+ procmime_mimeinfo_free_all(tmpinfo);
+
+ msginfo->plaintext_file = fname;
+ msginfo->decryption_failed = 0;
+}
+
+#undef DECRYPTION_ABORT
+
+
+/*
+ * plain contains an entire mime object.
+ * Encrypt it and return an GpgmeData object with the encrypted version of
+ * the file or NULL in case of error.
+ */
+static GpgmeData
+pgp_encrypt ( GpgmeData plain, GpgmeRecipients rset )
+{
+ GpgmeCtx ctx = NULL;
+ GpgmeError err;
+ GpgmeData cipher = NULL;
+
+ err = gpgme_new (&ctx);
+ if (!err)
+ err = gpgme_data_new (&cipher);
+ if (!err) {
+ gpgme_set_armor (ctx, 1);
+ err = gpgme_op_encrypt (ctx, rset, plain, cipher);
+ }
+
+ if (err) {
+ debug_print ("encryption failed: %s\n", gpgme_strerror (err));
+ gpgme_data_release (cipher);
+ cipher = NULL;
+ }
+ else {
+ debug_print ("** encryption succeeded\n");
+ }
+
+ gpgme_release (ctx);
+ return cipher;
+}
+
+/*
+ * Create and return a list of keys matching a key id
+ */
+
+GSList *rfc2015_create_signers_list (const char *keyid)
+{
+ GSList *key_list = NULL;
+ GpgmeCtx list_ctx = NULL;
+ GSList *p;
+ GpgmeError err;
+ GpgmeKey key;
+
+ err = gpgme_new (&list_ctx);
+ if (err)
+ goto leave;
+ err = gpgme_op_keylist_start (list_ctx, keyid, 1);
+ if (err)
+ goto leave;
+ while ( !(err = gpgme_op_keylist_next (list_ctx, &key)) ) {
+ key_list = g_slist_append (key_list, key);
+ }
+ if (err != GPGME_EOF)
+ goto leave;
+ err = 0;
+ if (key_list == NULL) {
+ debug_print ("no keys found for keyid \"%s\"\n", keyid);
+ }
+
+leave:
+ if (err) {
+ debug_print ("rfc2015_create_signers_list failed: %s\n", gpgme_strerror (err));
+ for (p = key_list; p != NULL; p = p->next)
+ gpgme_key_unref ((GpgmeKey) p->data);
+ g_slist_free (key_list);
+ }
+ if (list_ctx)
+ gpgme_release (list_ctx);
+ return err ? NULL : key_list;
+}
+
+/*
+ * Encrypt the file by extracting all recipients and finding the
+ * encryption keys for all of them. The file content is then replaced
+ * by the encrypted one. */
+int
+rfc2015_encrypt (const char *file, GSList *recp_list, gboolean ascii_armored)
+{
+ FILE *fp = NULL;
+ char buf[BUFFSIZE];
+ int i, clineidx, saved_last;
+ char *clines[3] = {NULL};
+ GpgmeError err;
+ GpgmeData header = NULL;
+ GpgmeData plain = NULL;
+ GpgmeData cipher = NULL;
+ GpgmeRecipients rset = NULL;
+ size_t nread;
+ int mime_version_seen = 0;
+ char *boundary;
+
+ boundary = generate_mime_boundary ("Encrypt");
+
+ /* Create the list of recipients */
+ rset = gpgmegtk_recipient_selection (recp_list);
+ if (!rset) {
+ debug_print ("error creating recipient list\n" );
+ goto failure;
+ }
+
+ /* Open the source file */
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ err = gpgme_data_new (&header);
+ if (!err)
+ err = gpgme_data_new (&plain);
+ if (err) {
+ debug_print ("gpgme_data_new failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ /* get the content header lines from the source */
+ clineidx = 0;
+ saved_last = 0;
+ while (!err && fgets(buf, sizeof(buf), fp)) {
+ /* fixme: check for overlong lines */
+ if (headerp (buf, content_names)) {
+ if (clineidx >= DIM (clines)) {
+ debug_print ("rfc2015_encrypt: too many content lines\n");
+ goto failure;
+ }
+ clines[clineidx++] = g_strdup (buf);
+ saved_last = 1;
+ continue;
+ }
+ if (saved_last) {
+ if (*buf == ' ' || *buf == '\t') {
+ char *last = clines[clineidx - 1];
+ clines[clineidx - 1] = g_strconcat (last, buf, NULL);
+ g_free (last);
+ continue;
+ }
+ saved_last = 0;
+ }
+
+ if (headerp (buf, mime_version_name))
+ mime_version_seen = 1;
+
+ if (buf[0] == '\r' || buf[0] == '\n')
+ break;
+ err = gpgme_data_write (header, buf, strlen (buf));
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fgets");
+ goto failure;
+ }
+
+ /* write them to the temp data and add the rest of the message */
+ for (i = 0; !err && i < clineidx; i++) {
+ debug_print ("%% %s:%d: cline=`%s'", __FILE__ ,__LINE__, clines[i]);
+ err = gpgme_data_write (plain, clines[i], strlen (clines[i]));
+ }
+ if (!err)
+ err = gpgme_data_write (plain, "\r\n", 2);
+ while (!err && fgets(buf, sizeof(buf), fp)) {
+ err = gpgme_data_write (plain, buf, strlen (buf));
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fgets");
+ goto failure;
+ }
+ if (err) {
+ debug_print ("gpgme_data_write failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ cipher = pgp_encrypt (plain, rset);
+ gpgme_data_release (plain); plain = NULL;
+ gpgme_recipients_release (rset); rset = NULL;
+ if (!cipher)
+ goto failure;
+
+ /* we have the encrypted message available in cipher and now we
+ * are going to rewrite the source file. To be sure that file has
+ * been truncated we use an approach which should work everywhere:
+ * close the file and then reopen it for writing. It is important
+ * that this works, otherwise it may happen that parts of the
+ * plaintext are still in the file (The encrypted stuff is, due to
+ * compression, usually shorter than the plaintext).
+ *
+ * Yes, there is a race condition here, but everyone, who is so
+ * stupid to store the temp file with the plaintext in a public
+ * directory has to live with this anyway. */
+ if (fclose (fp)) {
+ FILE_OP_ERROR(file, "fclose");
+ goto failure;
+ }
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ /* Write the header, append new content lines, part 1 and part 2 header */
+ err = gpgme_data_rewind (header);
+ if (err) {
+ debug_print ("gpgme_data_rewind failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+ while (!(err = gpgme_data_read (header, buf, BUFFSIZE, &nread))) {
+ fwrite (buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fwrite");
+ goto failure;
+ }
+ gpgme_data_release (header); header = NULL;
+
+ if (!mime_version_seen)
+ fputs ("MIME-Version: 1\r\n", fp);
+
+ if (ascii_armored) {
+ fprintf(fp,
+ "Content-Type: text/plain; charset=US-ASCII\r\n"
+ "Content-Transfer-Encoding: 7bit\r\n"
+ "\r\n");
+ } else {
+ fprintf (fp,
+ "Content-Type: multipart/encrypted;"
+ " protocol=\"application/pgp-encrypted\";\r\n"
+ " boundary=\"%s\"\r\n"
+ "\r\n"
+ "--%s\r\n"
+ "Content-Type: application/pgp-encrypted\r\n"
+ "\r\n"
+ "Version: 1\r\n"
+ "\r\n"
+ "--%s\r\n"
+ "Content-Type: application/octet-stream\r\n"
+ "\r\n",
+ boundary, boundary, boundary);
+ }
+
+ /* append the encrypted stuff */
+ err = gpgme_data_rewind (cipher);
+ if (err) {
+ debug_print ("** gpgme_data_rewind on cipher failed: %s\n",
+ gpgme_strerror (err));
+ goto failure;
+ }
+
+ while (!(err = gpgme_data_read (cipher, buf, BUFFSIZE, &nread))) {
+ fwrite (buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print ("** gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ /* and the final boundary */
+ if (!ascii_armored) {
+ fprintf (fp,
+ "\r\n"
+ "--%s--\r\n",
+ boundary);
+ }
+ fflush (fp);
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fwrite");
+ goto failure;
+ }
+ fclose (fp);
+ gpgme_data_release (cipher);
+ return 0;
+
+failure:
+ if (fp)
+ fclose (fp);
+ gpgme_data_release (header);
+ gpgme_data_release (plain);
+ gpgme_data_release (cipher);
+ gpgme_recipients_release (rset);
+ g_free (boundary);
+ return -1; /* error */
+}
+
+/*
+ * plain contains an entire mime object. Sign it and return an
+ * GpgmeData object with the signature of it or NULL in case of error.
+ * r_siginfo returns an XML object with information about the signature.
+ */
+static GpgmeData
+pgp_sign (GpgmeData plain, GSList *key_list, gboolean clearsign,
+ char **r_siginfo)
+{
+ GSList *p;
+ GpgmeCtx ctx = NULL;
+ GpgmeError err;
+ GpgmeData sig = NULL;
+ struct passphrase_cb_info_s info;
+
+ *r_siginfo = NULL;
+ memset (&info, 0, sizeof info);
+
+ err = gpgme_new (&ctx);
+ if (err)
+ goto leave;
+ err = gpgme_data_new (&sig);
+ if (err)
+ goto leave;
+
+ if (!getenv("GPG_AGENT_INFO")) {
+ info.c = ctx;
+ gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, &info);
+ }
+ gpgme_set_textmode (ctx, 1);
+ gpgme_set_armor (ctx, 1);
+ gpgme_signers_clear (ctx);
+ for (p = key_list; p != NULL; p = p->next) {
+ err = gpgme_signers_add (ctx, (GpgmeKey) p->data);
+ if (err)
+ goto leave;
+ }
+ for (p = key_list; p != NULL; p = p->next)
+ gpgme_key_unref ((GpgmeKey) p->data);
+ g_slist_free (key_list);
+
+ if (err)
+ goto leave;
+ err = gpgme_op_sign
+ (ctx, plain, sig,
+ clearsign ? GPGME_SIG_MODE_CLEAR : GPGME_SIG_MODE_DETACH);
+ if (!err)
+ *r_siginfo = gpgme_get_op_info (ctx, 0);
+
+leave:
+ if (err) {
+ gpgmegtk_free_passphrase();
+ debug_print ("signing failed: %s\n", gpgme_strerror (err));
+ gpgme_data_release (sig);
+ sig = NULL;
+ }
+ else {
+ debug_print ("signing succeeded\n");
+ }
+
+ gpgme_release (ctx);
+ return sig;
+}
+
+/*
+ * Find TAG in XML and return a pointer into xml set just behind the
+ * closing angle. Return NULL if not found.
+ */
+static const char *
+find_xml_tag (const char *xml, const char *tag)
+{
+ int taglen = strlen (tag);
+ const char *s = xml;
+
+ while ( (s = strchr (s, '<')) ) {
+ s++;
+ if (!strncmp (s, tag, taglen)) {
+ const char *s2 = s + taglen;
+ if (*s2 == '>' || isspace (*(const unsigned char*)s2) ) {
+ /* found */
+ while (*s2 && *s2 != '>') /* skip attributes */
+ s2++;
+ /* fixme: do need to handle angles inside attribute vallues? */
+ return *s2? (s2+1):NULL;
+ }
+ }
+ while (*s && *s != '>') /* skip to end of tag */
+ s++;
+ }
+ return NULL;
+}
+
+
+/*
+ * Extract the micalg from an GnupgOperationInfo XML container.
+ */
+static char *
+extract_micalg (char *xml)
+{
+ const char *s;
+
+ s = find_xml_tag (xml, "GnupgOperationInfo");
+ if (s) {
+ const char *s_end = find_xml_tag (s, "/GnupgOperationInfo");
+ s = find_xml_tag (s, "signature");
+ if (s && s_end && s < s_end) {
+ const char *s_end2 = find_xml_tag (s, "/signature");
+ if (s_end2 && s_end2 < s_end) {
+ s = find_xml_tag (s, "micalg");
+ if (s && s < s_end2) {
+ s_end = strchr (s, '<');
+ if (s_end) {
+ char *p = g_malloc (s_end - s + 1);
+ memcpy (p, s, s_end - s);
+ p[s_end-s] = 0;
+ return p;
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+
+/*
+ * Sign the file and replace its content with the signed one.
+ */
+int
+rfc2015_sign (const char *file, GSList *key_list)
+{
+ FILE *fp = NULL;
+ char buf[BUFFSIZE];
+ int i, clineidx, saved_last;
+ char *clines[3] = {NULL};
+ GpgmeError err;
+ GpgmeData header = NULL;
+ GpgmeData plain = NULL;
+ GpgmeData sigdata = NULL;
+ size_t nread;
+ int mime_version_seen = 0;
+ char *boundary;
+ char *micalg = NULL;
+ char *siginfo;
+
+ boundary = generate_mime_boundary ("Signature");
+
+ /* Open the source file */
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ err = gpgme_data_new (&header);
+ if (!err)
+ err = gpgme_data_new (&plain);
+ if (err) {
+ debug_print ("gpgme_data_new failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ /* get the content header lines from the source */
+ clineidx = 0;
+ saved_last = 0;
+ while (!err && fgets(buf, sizeof(buf), fp)) {
+ /* fixme: check for overlong lines */
+ if (headerp (buf, content_names)) {
+ if (clineidx >= DIM (clines)) {
+ debug_print ("rfc2015_sign: too many content lines\n");
+ goto failure;
+ }
+ clines[clineidx++] = g_strdup (buf);
+ saved_last = 1;
+ continue;
+ }
+ if (saved_last) {
+ if (*buf == ' ' || *buf == '\t') {
+ char *last = clines[clineidx - 1];
+ clines[clineidx - 1] = g_strconcat (last, buf, NULL);
+ g_free (last);
+ continue;
+ }
+ saved_last = 0;
+ }
+
+ if (headerp (buf, mime_version_name))
+ mime_version_seen = 1;
+
+ if (buf[0] == '\r' || buf[0] == '\n')
+ break;
+ err = gpgme_data_write (header, buf, strlen (buf));
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fgets");
+ goto failure;
+ }
+
+ /* write them to the temp data and add the rest of the message */
+ for (i = 0; !err && i < clineidx; i++) {
+ err = gpgme_data_write (plain, clines[i], strlen (clines[i]));
+ }
+ if (!err)
+ err = gpgme_data_write (plain, "\r\n", 2 );
+ while (!err && fgets(buf, sizeof(buf), fp)) {
+ err = gpgme_data_write (plain, buf, strlen (buf));
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fgets");
+ goto failure;
+ }
+ if (err) {
+ debug_print ("gpgme_data_write failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ sigdata = pgp_sign (plain, key_list, FALSE, &siginfo);
+ if (siginfo) {
+ micalg = extract_micalg (siginfo);
+ free (siginfo);
+ }
+ if (!sigdata)
+ goto failure;
+
+ /* we have the signed message available in sigdata and now we are
+ * going to rewrite the original file. To be sure that file has
+ * been truncated we use an approach which should work everywhere:
+ * close the file and then reopen it for writing. */
+ if (fclose (fp)) {
+ FILE_OP_ERROR(file, "fclose");
+ goto failure;
+ }
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ /* Write the rfc822 header and add new content lines */
+ err = gpgme_data_rewind (header);
+ if (err)
+ debug_print ("gpgme_data_rewind failed: %s\n", gpgme_strerror (err));
+ while (!(err = gpgme_data_read (header, buf, BUFFSIZE, &nread))) {
+ fwrite (buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fwrite");
+ goto failure;
+ }
+ gpgme_data_release (header);
+ header = NULL;
+
+ if (!mime_version_seen)
+ fputs ("MIME-Version: 1.0\r\n", fp);
+ fprintf (fp, "Content-Type: multipart/signed; "
+ "protocol=\"application/pgp-signature\";\r\n");
+ if (micalg)
+ fprintf (fp, " micalg=\"%s\";\r\n", micalg);
+ fprintf (fp, " boundary=\"%s\"\r\n", boundary);
+
+ /* Part 1: signed material */
+ fprintf (fp, "\r\n"
+ "--%s\r\n",
+ boundary);
+ err = gpgme_data_rewind (plain);
+ if (err) {
+ debug_print ("gpgme_data_rewind on plain failed: %s\n",
+ gpgme_strerror (err));
+ goto failure;
+ }
+ while (!(err = gpgme_data_read (plain, buf, BUFFSIZE, &nread))) {
+ fwrite (buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ /* Part 2: signature */
+ fprintf (fp, "\r\n"
+ "--%s\r\n",
+ boundary);
+ fputs ("Content-Type: application/pgp-signature\r\n"
+ "\r\n", fp);
+
+ err = gpgme_data_rewind (sigdata);
+ if (err) {
+ debug_print ("gpgme_data_rewind on sigdata failed: %s\n",
+ gpgme_strerror (err));
+ goto failure;
+ }
+
+ while (!(err = gpgme_data_read (sigdata, buf, BUFFSIZE, &nread))) {
+ fwrite (buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print ("gpgme_data_read failed: %s\n", gpgme_strerror (err));
+ goto failure;
+ }
+
+ /* Final boundary */
+ fprintf (fp, "\r\n"
+ "--%s--\r\n",
+ boundary);
+ fflush (fp);
+ if (ferror (fp)) {
+ FILE_OP_ERROR (file, "fwrite");
+ goto failure;
+ }
+ fclose (fp);
+ gpgme_data_release (header);
+ gpgme_data_release (plain);
+ gpgme_data_release (sigdata);
+ g_free (boundary);
+ g_free (micalg);
+ return 0;
+
+failure:
+ if (fp)
+ fclose (fp);
+ gpgme_data_release (header);
+ gpgme_data_release (plain);
+ gpgme_data_release (sigdata);
+ g_free (boundary);
+ g_free (micalg);
+ return -1; /* error */
+}
+
+
+/*
+ * Sign the file with clear text and replace its content with the signed one.
+ */
+gint
+rfc2015_clearsign (const gchar *file, GSList *key_list)
+{
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+ GpgmeError err;
+ GpgmeData text = NULL;
+ GpgmeData sigdata = NULL;
+ size_t nread;
+ gchar *siginfo;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ err = gpgme_data_new(&text);
+ if (err) {
+ debug_print("gpgme_data_new failed: %s\n", gpgme_strerror(err));
+ goto failure;
+ }
+
+ while (!err && fgets(buf, sizeof(buf), fp)) {
+ err = gpgme_data_write(text, buf, strlen(buf));
+ }
+ if (ferror(fp)) {
+ FILE_OP_ERROR(file, "fgets");
+ goto failure;
+ }
+ if (err) {
+ debug_print("gpgme_data_write failed: %s\n", gpgme_strerror(err));
+ goto failure;
+ }
+
+ sigdata = pgp_sign(text, key_list, TRUE, &siginfo);
+ if (siginfo) {
+ g_free(siginfo);
+ }
+ if (!sigdata)
+ goto failure;
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ fp = NULL;
+ goto failure;
+ }
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ goto failure;
+ }
+
+ err = gpgme_data_rewind(sigdata);
+ if (err) {
+ debug_print("gpgme_data_rewind on sigdata failed: %s\n",
+ gpgme_strerror(err));
+ goto failure;
+ }
+
+ while (!(err = gpgme_data_read(sigdata, buf, sizeof(buf), &nread))) {
+ fwrite(buf, nread, 1, fp);
+ }
+ if (err != GPGME_EOF) {
+ debug_print("gpgme_data_read failed: %s\n", gpgme_strerror(err));
+ goto failure;
+ }
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ fp = NULL;
+ goto failure;
+ }
+ gpgme_data_release(text);
+ gpgme_data_release(sigdata);
+ return 0;
+
+failure:
+ if (fp)
+ fclose(fp);
+ gpgme_data_release(text);
+ gpgme_data_release(sigdata);
+ return -1;
+}
+
+#endif /* USE_GPGME */
diff --git a/src/rfc2015.h b/src/rfc2015.h
new file mode 100644
index 00000000..d9def6fb
--- /dev/null
+++ b/src/rfc2015.h
@@ -0,0 +1,48 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __RFC2015_H__
+#define __RFC2015_H__
+
+#include <glib.h>
+#include <stdio.h>
+
+#include "procmime.h"
+
+void rfc2015_disable_all (void);
+void rfc2015_secure_remove (const gchar *fname);
+MimeInfo *rfc2015_find_signature (MimeInfo *mimeinfo);
+gboolean rfc2015_has_signature (MimeInfo *mimeinfo);
+void rfc2015_check_signature (MimeInfo *mimeinfo,
+ FILE *fp);
+gint rfc2015_is_encrypted (MimeInfo *mimeinfo);
+gboolean rfc2015_msg_is_encrypted (const gchar *file);
+void rfc2015_decrypt_message (MsgInfo *msginfo,
+ MimeInfo *mimeinfo,
+ FILE *fp);
+GSList *rfc2015_create_signers_list (const gchar *keyid);
+gint rfc2015_encrypt (const gchar *file,
+ GSList *recp_list,
+ gboolean ascii_armored);
+gint rfc2015_sign (const gchar *file,
+ GSList *key_list);
+gint rfc2015_clearsign (const gchar *file,
+ GSList *key_list);
+
+#endif /* __RFC2015_H__ */
diff --git a/src/select-keys.c b/src/select-keys.c
new file mode 100644
index 00000000..24e82a39
--- /dev/null
+++ b/src/select-keys.c
@@ -0,0 +1,525 @@
+/* select-keys.c - GTK+ based key selection
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef USE_GPGME
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkclist.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtksignal.h>
+
+#include "intl.h"
+#include "select-keys.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "inputdialog.h"
+#include "manage_window.h"
+
+#define DIM(v) (sizeof(v)/sizeof((v)[0]))
+#define DIMof(type,member) DIM(((type *)0)->member)
+
+
+enum col_titles {
+ COL_ALGO,
+ COL_KEYID,
+ COL_NAME,
+ COL_EMAIL,
+ COL_VALIDITY,
+
+ N_COL_TITLES
+};
+
+struct select_keys_s {
+ int okay;
+ GtkWidget *window;
+ GtkLabel *toplabel;
+ GtkCList *clist;
+ const char *pattern;
+ GpgmeRecipients rset;
+ GpgmeCtx select_ctx;
+
+ GtkSortType sort_type;
+ enum col_titles sort_column;
+
+};
+
+
+static void set_row (GtkCList *clist, GpgmeKey key);
+static void fill_clist (struct select_keys_s *sk, const char *pattern);
+static void create_dialog (struct select_keys_s *sk);
+static void open_dialog (struct select_keys_s *sk);
+static void close_dialog (struct select_keys_s *sk);
+static gint delete_event_cb (GtkWidget *widget,
+ GdkEventAny *event, gpointer data);
+static gboolean key_pressed_cb (GtkWidget *widget,
+ GdkEventKey *event, gpointer data);
+static void select_btn_cb (GtkWidget *widget, gpointer data);
+static void cancel_btn_cb (GtkWidget *widget, gpointer data);
+static void other_btn_cb (GtkWidget *widget, gpointer data);
+static void sort_keys (struct select_keys_s *sk, enum col_titles column);
+static void sort_keys_name (GtkWidget *widget, gpointer data);
+static void sort_keys_email (GtkWidget *widget, gpointer data);
+
+
+static void
+update_progress (struct select_keys_s *sk, int running, const char *pattern)
+{
+ static int windmill[] = { '-', '\\', '|', '/' };
+ char *buf;
+
+ if (!running)
+ buf = g_strdup_printf (_("Please select key for `%s'"),
+ pattern);
+ else
+ buf = g_strdup_printf (_("Collecting info for `%s' ... %c"),
+ pattern,
+ windmill[running%DIM(windmill)]);
+ gtk_label_set_text (sk->toplabel, buf);
+ g_free (buf);
+}
+
+
+/**
+ * select_keys_get_recipients:
+ * @recp_names: A list of email addresses
+ *
+ * Select a list of recipients from a given list of email addresses.
+ * This may pop up a window to present the user a choice, it will also
+ * check that the recipients key are all valid.
+ *
+ * Return value: NULL on error or a list of list of recipients.
+ **/
+GpgmeRecipients
+gpgmegtk_recipient_selection (GSList *recp_names)
+{
+ struct select_keys_s sk;
+ GpgmeError err;
+
+ memset (&sk, 0, sizeof sk);
+
+ err = gpgme_recipients_new (&sk.rset);
+ if (err) {
+ g_warning ("failed to allocate recipients set: %s",
+ gpgme_strerror (err));
+ return NULL;
+ }
+
+ open_dialog (&sk);
+
+ do {
+ sk.pattern = recp_names? recp_names->data:NULL;
+ gtk_clist_clear (sk.clist);
+ fill_clist (&sk, sk.pattern);
+ update_progress (&sk, 0, sk.pattern);
+ gtk_main ();
+ if (recp_names)
+ recp_names = recp_names->next;
+ } while (sk.okay && recp_names);
+
+ close_dialog (&sk);
+
+ if (!sk.okay) {
+ gpgme_recipients_release (sk.rset);
+ sk.rset = NULL;
+ }
+ return sk.rset;
+}
+
+static void
+destroy_key (gpointer data)
+{
+ GpgmeKey key = data;
+ gpgme_key_release (key);
+}
+
+static void
+set_row (GtkCList *clist, GpgmeKey key)
+{
+ const char *s;
+ const char *text[N_COL_TITLES];
+ char *algo_buf;
+ int row;
+
+ /* first check whether the key is capable of encryption which is not
+ * the case for revoked, expired or sign-only keys */
+ if ( !gpgme_key_get_ulong_attr (key, GPGME_ATTR_CAN_ENCRYPT, NULL, 0 ) )
+ return;
+
+ algo_buf = g_strdup_printf ("%lu/%s",
+ gpgme_key_get_ulong_attr (key, GPGME_ATTR_LEN, NULL, 0 ),
+ gpgme_key_get_string_attr (key, GPGME_ATTR_ALGO, NULL, 0 ) );
+ text[COL_ALGO] = algo_buf;
+
+ s = gpgme_key_get_string_attr (key, GPGME_ATTR_KEYID, NULL, 0);
+ if (strlen (s) == 16)
+ s += 8; /* show only the short keyID */
+ text[COL_KEYID] = s;
+
+ s = gpgme_key_get_string_attr (key, GPGME_ATTR_NAME, NULL, 0);
+ text[COL_NAME] = s;
+
+ s = gpgme_key_get_string_attr (key, GPGME_ATTR_EMAIL, NULL, 0);
+ text[COL_EMAIL] = s;
+
+ s = gpgme_key_get_string_attr (key, GPGME_ATTR_VALIDITY, NULL, 0);
+ text[COL_VALIDITY] = s;
+
+ row = gtk_clist_append (clist, (gchar**)text);
+ g_free (algo_buf);
+
+ gtk_clist_set_row_data_full (clist, row, key, destroy_key);
+}
+
+
+static void
+fill_clist (struct select_keys_s *sk, const char *pattern)
+{
+ GtkCList *clist;
+ GpgmeCtx ctx;
+ GpgmeError err;
+ GpgmeKey key;
+ int running=0;
+
+ g_return_if_fail (sk);
+ clist = sk->clist;
+ g_return_if_fail (clist);
+
+ debug_print ("select_keys:fill_clist: pattern `%s'\n", pattern);
+
+ /*gtk_clist_freeze (select_keys.clist);*/
+ err = gpgme_new (&ctx);
+ g_assert (!err);
+
+ sk->select_ctx = ctx;
+
+ update_progress (sk, ++running, pattern);
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+
+ err = gpgme_op_keylist_start (ctx, pattern, 0);
+ if (err) {
+ debug_print ("** gpgme_op_keylist_start(%s) failed: %s",
+ pattern, gpgme_strerror (err));
+ sk->select_ctx = NULL;
+ return;
+ }
+ update_progress (sk, ++running, pattern);
+ while ( !(err = gpgme_op_keylist_next ( ctx, &key )) ) {
+ debug_print ("%% %s:%d: insert\n", __FILE__ ,__LINE__ );
+ set_row (clist, key ); key = NULL;
+ update_progress (sk, ++running, pattern);
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+ }
+ debug_print ("%% %s:%d: ready\n", __FILE__ ,__LINE__ );
+ if (err != GPGME_EOF)
+ debug_print ("** gpgme_op_keylist_next failed: %s",
+ gpgme_strerror (err));
+ sk->select_ctx = NULL;
+ gpgme_release (ctx);
+ /*gtk_clist_thaw (select_keys.clist);*/
+}
+
+
+static void
+create_dialog (struct select_keys_s *sk)
+{
+ GtkWidget *window;
+ GtkWidget *vbox, *vbox2, *hbox;
+ GtkWidget *bbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *clist;
+ GtkWidget *label;
+ GtkWidget *select_btn, *cancel_btn, *other_btn;
+ const char *titles[N_COL_TITLES];
+
+ g_assert (!sk->window);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_size_request (window, 520, 280);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_set_title (GTK_WINDOW (window), _("Select Keys"));
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ g_signal_connect (G_OBJECT (window), "delete_event",
+ G_CALLBACK (delete_event_cb), sk);
+ g_signal_connect (G_OBJECT (window), "key_press_event",
+ G_CALLBACK (key_pressed_cb), sk);
+ MANAGE_WINDOW_SIGNALS_CONNECT (window);
+
+ vbox = gtk_vbox_new (FALSE, 8);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ label = gtk_label_new ( "" );
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
+
+ scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ titles[COL_ALGO] = _("Size");
+ titles[COL_KEYID] = _("Key ID");
+ titles[COL_NAME] = _("Name");
+ titles[COL_EMAIL] = _("Address");
+ titles[COL_VALIDITY] = _("Val");
+
+ clist = gtk_clist_new_with_titles (N_COL_TITLES, (char**)titles);
+ gtk_container_add (GTK_CONTAINER (scrolledwin), clist);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_ALGO, 72);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_KEYID, 76);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME, 130);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_EMAIL, 130);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_VALIDITY, 20);
+ gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE);
+ g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_NAME].button),
+ "clicked",
+ G_CALLBACK(sort_keys_name), sk);
+ g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_EMAIL].button),
+ "clicked",
+ G_CALLBACK(sort_keys_email), sk);
+
+ hbox = gtk_hbox_new (FALSE, 8);
+ gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+ gtkut_button_set_create (&bbox,
+ &select_btn, _("Select"),
+ &cancel_btn, _("Cancel"),
+ &other_btn, _("Other"));
+ gtk_box_pack_end (GTK_BOX (hbox), bbox, FALSE, FALSE, 0);
+ gtk_widget_grab_default (select_btn);
+
+ g_signal_connect (G_OBJECT (select_btn), "clicked",
+ G_CALLBACK (select_btn_cb), sk);
+ g_signal_connect (G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK (cancel_btn_cb), sk);
+ g_signal_connect (G_OBJECT (other_btn), "clicked",
+ G_CALLBACK (other_btn_cb), sk);
+
+ vbox2 = gtk_vbox_new (FALSE, 4);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (window);
+
+ sk->window = window;
+ sk->toplabel = GTK_LABEL (label);
+ sk->clist = GTK_CLIST (clist);
+}
+
+
+static void
+open_dialog (struct select_keys_s *sk)
+{
+ if (!sk->window)
+ create_dialog (sk);
+ manage_window_set_transient (GTK_WINDOW (sk->window));
+ sk->okay = 0;
+ sk->sort_column = N_COL_TITLES; /* use an invalid value */
+ sk->sort_type = GTK_SORT_ASCENDING;
+ gtk_widget_show (sk->window);
+}
+
+
+static void
+close_dialog (struct select_keys_s *sk)
+{
+ g_return_if_fail (sk);
+ gtk_widget_destroy (sk->window);
+ sk->window = NULL;
+}
+
+
+static gint
+delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ struct select_keys_s *sk = data;
+
+ sk->okay = 0;
+ gtk_main_quit ();
+
+ return TRUE;
+}
+
+
+static gboolean
+key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ struct select_keys_s *sk = data;
+
+ g_return_val_if_fail (sk, FALSE);
+ if (event && event->keyval == GDK_Escape) {
+ sk->okay = 0;
+ gtk_main_quit ();
+ }
+ return FALSE;
+}
+
+
+static void
+select_btn_cb (GtkWidget *widget, gpointer data)
+{
+ struct select_keys_s *sk = data;
+ int row;
+ GpgmeKey key;
+
+ g_return_if_fail (sk);
+ if (!sk->clist->selection) {
+ debug_print ("** nothing selected");
+ return;
+ }
+ row = GPOINTER_TO_INT(sk->clist->selection->data);
+ key = gtk_clist_get_row_data(sk->clist, row);
+ if (key) {
+ const char *s = gpgme_key_get_string_attr (key,
+ GPGME_ATTR_FPR,
+ NULL, 0 );
+ if ( gpgme_key_get_ulong_attr (key, GPGME_ATTR_VALIDITY, NULL, 0 )
+ < GPGME_VALIDITY_FULL ) {
+ debug_print ("** FIXME: we are faking the trust calculation");
+ }
+ if (!gpgme_recipients_add_name_with_validity (sk->rset, s,
+ GPGME_VALIDITY_FULL) ) {
+ sk->okay = 1;
+ gtk_main_quit ();
+ }
+ }
+}
+
+
+static void
+cancel_btn_cb (GtkWidget *widget, gpointer data)
+{
+ struct select_keys_s *sk = data;
+
+ g_return_if_fail (sk);
+ sk->okay = 0;
+ if (sk->select_ctx)
+ gpgme_cancel (sk->select_ctx);
+ gtk_main_quit ();
+}
+
+
+static void
+other_btn_cb (GtkWidget *widget, gpointer data)
+{
+ struct select_keys_s *sk = data;
+ char *uid;
+
+ g_return_if_fail (sk);
+ uid = input_dialog ( _("Add key"),
+ _("Enter another user or key ID:"),
+ NULL );
+ if (!uid)
+ return;
+ fill_clist (sk, uid);
+ update_progress (sk, 0, sk->pattern);
+ g_free (uid);
+}
+
+
+static gint
+cmp_attr (gconstpointer pa, gconstpointer pb, GpgmeAttr attr)
+{
+ GpgmeKey a = ((GtkCListRow *)pa)->data;
+ GpgmeKey b = ((GtkCListRow *)pb)->data;
+ const char *sa, *sb;
+
+ sa = a? gpgme_key_get_string_attr (a, attr, NULL, 0 ) : NULL;
+ sb = b? gpgme_key_get_string_attr (b, attr, NULL, 0 ) : NULL;
+ if (!sa)
+ return !!sb;
+ if (!sb)
+ return -1;
+ return strcasecmp(sa, sb);
+}
+
+static gint
+cmp_name (GtkCList *clist, gconstpointer pa, gconstpointer pb)
+{
+ return cmp_attr (pa, pb, GPGME_ATTR_NAME);
+}
+
+static gint
+cmp_email (GtkCList *clist, gconstpointer pa, gconstpointer pb)
+{
+ return cmp_attr (pa, pb, GPGME_ATTR_EMAIL);
+}
+
+static void
+sort_keys ( struct select_keys_s *sk, enum col_titles column)
+{
+ GtkCList *clist = sk->clist;
+
+ switch (column) {
+ case COL_NAME:
+ gtk_clist_set_compare_func (clist, cmp_name);
+ break;
+ case COL_EMAIL:
+ gtk_clist_set_compare_func (clist, cmp_email);
+ break;
+ default:
+ return;
+ }
+
+ /* column clicked again: toggle as-/decending */
+ if ( sk->sort_column == column) {
+ sk->sort_type = sk->sort_type == GTK_SORT_ASCENDING ?
+ GTK_SORT_DESCENDING : GTK_SORT_ASCENDING;
+ }
+ else
+ sk->sort_type = GTK_SORT_ASCENDING;
+
+ sk->sort_column = column;
+ gtk_clist_set_sort_type (clist, sk->sort_type);
+ gtk_clist_sort (clist);
+}
+
+static void
+sort_keys_name (GtkWidget *widget, gpointer data)
+{
+ sort_keys ((struct select_keys_s*)data, COL_NAME);
+}
+
+static void
+sort_keys_email (GtkWidget *widget, gpointer data)
+{
+ sort_keys ((struct select_keys_s*)data, COL_EMAIL);
+}
+
+#endif /*USE_GPGME*/
diff --git a/src/select-keys.h b/src/select-keys.h
new file mode 100644
index 00000000..009afc10
--- /dev/null
+++ b/src/select-keys.h
@@ -0,0 +1,29 @@
+/* select-keys.h - GTK+ based key selection
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GPGMEGTK_SELECT_KEYS_H
+#define GPGMEGTK_SELECT_KEYS_H
+
+#include <glib.h>
+#include <gpgme.h>
+
+
+GpgmeRecipients gpgmegtk_recipient_selection (GSList *recp_names);
+
+
+#endif /* GPGMEGTK_SELECT_KEYS_H */
diff --git a/src/send_message.c b/src/send_message.c
new file mode 100644
index 00000000..75d36c61
--- /dev/null
+++ b/src/send_message.c
@@ -0,0 +1,620 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkclist.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "intl.h"
+#include "send_message.h"
+#include "session.h"
+#include "ssl.h"
+#include "smtp.h"
+#include "news.h"
+#include "prefs_common.h"
+#include "prefs_account.h"
+#include "procheader.h"
+#include "account.h"
+#include "progressdialog.h"
+#include "statusbar.h"
+#include "inputdialog.h"
+#include "alertpanel.h"
+#include "manage_window.h"
+#include "utils.h"
+
+#define SMTP_PORT 25
+#if USE_SSL
+#define SSMTP_PORT 465
+#endif
+
+typedef struct _SendProgressDialog SendProgressDialog;
+
+struct _SendProgressDialog
+{
+ ProgressDialog *dialog;
+ Session *session;
+ gboolean cancelled;
+};
+
+static gint send_message_local (const gchar *command,
+ FILE *fp);
+static gint send_message_smtp (PrefsAccount *ac_prefs,
+ GSList *to_list,
+ FILE *fp);
+
+static gint send_recv_message (Session *session,
+ const gchar *msg,
+ gpointer data);
+static gint send_send_data_progressive (Session *session,
+ guint cur_len,
+ guint total_len,
+ gpointer data);
+static gint send_send_data_finished (Session *session,
+ guint len,
+ gpointer data);
+
+static SendProgressDialog *send_progress_dialog_create(void);
+static void send_progress_dialog_destroy(SendProgressDialog *dialog);
+
+static void send_cancel_button_cb (GtkWidget *widget,
+ gpointer data);
+
+static void send_put_error (Session *session);
+
+
+gint send_message(const gchar *file, PrefsAccount *ac_prefs, GSList *to_list)
+{
+ FILE *fp;
+ gint val;
+
+ g_return_val_if_fail(file != NULL, -1);
+ g_return_val_if_fail(ac_prefs != NULL, -1);
+ g_return_val_if_fail(to_list != NULL, -1);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ if (prefs_common.use_extsend && prefs_common.extsend_cmd) {
+ val = send_message_local(prefs_common.extsend_cmd, fp);
+ fclose(fp);
+ return val;
+ }
+
+ val = send_message_smtp(ac_prefs, to_list, fp);
+
+ fclose(fp);
+ return val;
+}
+
+enum
+{
+ Q_SENDER = 0,
+ Q_SMTPSERVER = 1,
+ Q_RECIPIENTS = 2,
+ Q_ACCOUNT_ID = 3
+};
+
+QueueInfo *send_get_queue_info(const gchar *file)
+{
+ static HeaderEntry qentry[] = {{"S:", NULL, FALSE},
+ {"SSV:", NULL, FALSE},
+ {"R:", NULL, FALSE},
+ {"AID:", NULL, FALSE},
+ {NULL, NULL, FALSE}};
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+ gint hnum;
+ QueueInfo *qinfo;
+
+ g_return_val_if_fail(file != NULL, NULL);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+
+ qinfo = g_new0(QueueInfo, 1);
+
+ while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, qentry))
+ != -1) {
+ gchar *p;
+
+ p = buf + strlen(qentry[hnum].name);
+
+ switch (hnum) {
+ case Q_SENDER:
+ if (!qinfo->from)
+ qinfo->from = g_strdup(p);
+ break;
+ case Q_SMTPSERVER:
+ if (!qinfo->server)
+ qinfo->server = g_strdup(p);
+ break;
+ case Q_RECIPIENTS:
+ qinfo->to_list =
+ address_list_append(qinfo->to_list, p);
+ break;
+ case Q_ACCOUNT_ID:
+ qinfo->ac = account_find_from_id(atoi(p));
+ break;
+ default:
+ break;
+ }
+ }
+
+ qinfo->fp = fp;
+
+ if (((!qinfo->ac || (qinfo->ac && qinfo->ac->protocol != A_NNTP)) &&
+ !qinfo->to_list) || !qinfo->from) {
+ g_warning(_("Queued message header is broken.\n"));
+ send_queue_info_free(qinfo);
+ return NULL;
+ }
+
+ if (!qinfo->ac) {
+ qinfo->ac = account_find_from_smtp_server(qinfo->from,
+ qinfo->server);
+ if (!qinfo->ac) {
+ g_warning("Account not found. "
+ "Using current account...\n");
+ qinfo->ac = cur_account;
+ }
+ }
+
+ return qinfo;
+}
+
+void send_queue_info_free(QueueInfo *qinfo)
+{
+ if (qinfo == NULL) return;
+
+ slist_free_strings(qinfo->to_list);
+ g_slist_free(qinfo->to_list);
+ g_free(qinfo->from);
+ g_free(qinfo->server);
+ if (qinfo->fp)
+ fclose(qinfo->fp);
+ g_free(qinfo);
+}
+
+gint send_message_queue(QueueInfo *qinfo)
+{
+ gint val = 0;
+ glong fpos;
+ PrefsAccount *mailac = NULL, *newsac = NULL;
+
+ g_return_val_if_fail(qinfo != NULL, -1);
+
+ if (prefs_common.use_extsend && prefs_common.extsend_cmd) {
+ val = send_message_local(prefs_common.extsend_cmd, qinfo->fp);
+ } else {
+ if (qinfo->ac && qinfo->ac->protocol == A_NNTP) {
+ newsac = qinfo->ac;
+
+ /* search mail account */
+ mailac = account_find_from_address(qinfo->from);
+ if (!mailac) {
+ if (cur_account &&
+ cur_account->protocol != A_NNTP)
+ mailac = cur_account;
+ else {
+ mailac = account_get_default();
+ if (mailac->protocol == A_NNTP)
+ mailac = NULL;
+ }
+ }
+ } else
+ mailac = qinfo->ac;
+
+ fpos = ftell(qinfo->fp);
+ if (qinfo->to_list) {
+ if (mailac)
+ val = send_message_smtp(mailac, qinfo->to_list,
+ qinfo->fp);
+ else {
+ PrefsAccount tmp_ac;
+
+ g_warning("Account not found.\n");
+
+ memset(&tmp_ac, 0, sizeof(PrefsAccount));
+ tmp_ac.address = qinfo->from;
+ tmp_ac.smtp_server = qinfo->server;
+ tmp_ac.smtpport = SMTP_PORT;
+ val = send_message_smtp(&tmp_ac, qinfo->to_list,
+ qinfo->fp);
+ }
+ }
+
+ if (val == 0 && newsac) {
+ fseek(qinfo->fp, fpos, SEEK_SET);
+ val = news_post_stream(FOLDER(newsac->folder),
+ qinfo->fp);
+ if (val < 0)
+ alertpanel_error(_("Error occurred while posting the message to %s ."),
+ newsac->nntp_server);
+ }
+ }
+
+ return val;
+}
+
+static gint send_message_local(const gchar *command, FILE *fp)
+{
+ FILE *pipefp;
+ gchar buf[BUFFSIZE];
+
+ g_return_val_if_fail(command != NULL, -1);
+ g_return_val_if_fail(fp != NULL, -1);
+
+ pipefp = popen(command, "w");
+ if (!pipefp) {
+ g_warning("Can't execute external command: %s\n", command);
+ return -1;
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ if (buf[0] == '.' && buf[1] == '\0')
+ fputc('.', pipefp);
+ fputs(buf, pipefp);
+ fputc('\n', pipefp);
+ }
+
+ pclose(pipefp);
+
+ return 0;
+}
+
+static gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
+{
+ Session *session;
+ SMTPSession *smtp_session;
+ gushort port;
+ SendProgressDialog *dialog;
+ GtkCList *clist;
+ const gchar *text[3];
+ gchar buf[BUFFSIZE];
+ gint ret = 0;
+
+ g_return_val_if_fail(ac_prefs != NULL, -1);
+ g_return_val_if_fail(ac_prefs->address != NULL, -1);
+ g_return_val_if_fail(ac_prefs->smtp_server != NULL, -1);
+ g_return_val_if_fail(to_list != NULL, -1);
+ g_return_val_if_fail(fp != NULL, -1);
+
+ session = smtp_session_new();
+ smtp_session = SMTP_SESSION(session);
+
+ smtp_session->hostname =
+ ac_prefs->set_domain ? g_strdup(ac_prefs->domain) : NULL;
+
+ if (ac_prefs->use_smtp_auth) {
+ smtp_session->forced_auth_type = ac_prefs->smtp_auth_type;
+
+ if (ac_prefs->smtp_userid) {
+ smtp_session->user = g_strdup(ac_prefs->smtp_userid);
+ if (ac_prefs->smtp_passwd)
+ smtp_session->pass =
+ g_strdup(ac_prefs->smtp_passwd);
+ else if (ac_prefs->tmp_smtp_pass)
+ smtp_session->pass =
+ g_strdup(ac_prefs->tmp_smtp_pass);
+ else {
+ smtp_session->pass =
+ input_dialog_query_password
+ (ac_prefs->smtp_server,
+ smtp_session->user);
+ if (!smtp_session->pass)
+ smtp_session->pass = g_strdup("");
+ ac_prefs->tmp_smtp_pass =
+ g_strdup(smtp_session->pass);
+ }
+ } else {
+ smtp_session->user = g_strdup(ac_prefs->userid);
+ if (ac_prefs->passwd)
+ smtp_session->pass = g_strdup(ac_prefs->passwd);
+ else if (ac_prefs->tmp_pass)
+ smtp_session->pass =
+ g_strdup(ac_prefs->tmp_pass);
+ else {
+ smtp_session->pass =
+ input_dialog_query_password
+ (ac_prefs->smtp_server,
+ smtp_session->user);
+ if (!smtp_session->pass)
+ smtp_session->pass = g_strdup("");
+ ac_prefs->tmp_pass =
+ g_strdup(smtp_session->pass);
+ }
+ }
+ } else {
+ smtp_session->user = NULL;
+ smtp_session->pass = NULL;
+ }
+
+ smtp_session->from = g_strdup(ac_prefs->address);
+ smtp_session->to_list = to_list;
+ smtp_session->cur_to = to_list;
+ smtp_session->send_data = get_outgoing_rfc2822_str(fp);
+ smtp_session->send_data_len = strlen(smtp_session->send_data);
+
+#if USE_SSL
+ port = ac_prefs->set_smtpport ? ac_prefs->smtpport :
+ ac_prefs->ssl_smtp == SSL_TUNNEL ? SSMTP_PORT : SMTP_PORT;
+ session->ssl_type = ac_prefs->ssl_smtp;
+ if (ac_prefs->ssl_smtp != SSL_NONE)
+ session->nonblocking = ac_prefs->use_nonblocking_ssl;
+#else
+ port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT;
+#endif
+
+ dialog = send_progress_dialog_create();
+ dialog->session = session;
+
+ text[0] = NULL;
+ text[1] = ac_prefs->smtp_server;
+ text[2] = _("Connecting");
+ clist = GTK_CLIST(dialog->dialog->clist);
+ gtk_clist_append(clist, (gchar **)text);
+
+ g_snprintf(buf, sizeof(buf), _("Connecting to SMTP server: %s ..."),
+ ac_prefs->smtp_server);
+ progress_dialog_set_label(dialog->dialog, buf);
+ log_message("%s\n", buf);
+
+ session_set_recv_message_notify(session, send_recv_message, dialog);
+ session_set_send_data_progressive_notify
+ (session, send_send_data_progressive, dialog);
+ session_set_send_data_notify(session, send_send_data_finished, dialog);
+
+ if (session_connect(session, ac_prefs->smtp_server, port) < 0) {
+ session_destroy(session);
+ send_progress_dialog_destroy(dialog);
+ return -1;
+ }
+
+ debug_print("send_message_smtp(): begin event loop\n");
+
+ while (session_is_connected(session) && dialog->cancelled == FALSE)
+ gtk_main_iteration();
+
+ if (SMTP_SESSION(session)->error_val == SM_AUTHFAIL) {
+ if (ac_prefs->smtp_userid && ac_prefs->tmp_smtp_pass) {
+ g_free(ac_prefs->tmp_smtp_pass);
+ ac_prefs->tmp_smtp_pass = NULL;
+ }
+ ret = -1;
+ } else if (session->state == SESSION_ERROR ||
+ session->state == SESSION_EOF ||
+ session->state == SESSION_TIMEOUT ||
+ SMTP_SESSION(session)->state == SMTP_ERROR ||
+ SMTP_SESSION(session)->error_val != SM_OK)
+ ret = -1;
+ else if (dialog->cancelled == TRUE)
+ ret = -1;
+
+ if (ret == -1) {
+ manage_window_focus_in(dialog->dialog->window, NULL, NULL);
+ send_put_error(session);
+ manage_window_focus_out(dialog->dialog->window, NULL, NULL);
+ }
+
+ session_destroy(session);
+ send_progress_dialog_destroy(dialog);
+
+ return ret;
+}
+
+static gint send_recv_message(Session *session, const gchar *msg, gpointer data)
+{
+ gchar buf[BUFFSIZE];
+ SMTPSession *smtp_session = SMTP_SESSION(session);
+ SendProgressDialog *dialog = (SendProgressDialog *)data;
+ gchar *state_str = NULL;
+
+ g_return_val_if_fail(dialog != NULL, -1);
+
+ switch (smtp_session->state) {
+ case SMTP_READY:
+ case SMTP_CONNECTED:
+ return 0;
+ case SMTP_HELO:
+ g_snprintf(buf, sizeof(buf), _("Sending HELO..."));
+ state_str = _("Authenticating");
+ statusbar_print_all(_("Sending message..."));
+ break;
+ case SMTP_EHLO:
+ g_snprintf(buf, sizeof(buf), _("Sending EHLO..."));
+ state_str = _("Authenticating");
+ statusbar_print_all(_("Sending message..."));
+ break;
+ case SMTP_AUTH:
+ g_snprintf(buf, sizeof(buf), _("Authenticating..."));
+ state_str = _("Authenticating");
+ break;
+ case SMTP_FROM:
+ g_snprintf(buf, sizeof(buf), _("Sending MAIL FROM..."));
+ state_str = _("Sending");
+ break;
+ case SMTP_RCPT:
+ g_snprintf(buf, sizeof(buf), _("Sending RCPT TO..."));
+ state_str = _("Sending");
+ break;
+ case SMTP_DATA:
+ case SMTP_EOM:
+ g_snprintf(buf, sizeof(buf), _("Sending DATA..."));
+ state_str = _("Sending");
+ break;
+ case SMTP_QUIT:
+ g_snprintf(buf, sizeof(buf), _("Quitting..."));
+ state_str = _("Quitting");
+ break;
+ case SMTP_ERROR:
+ g_warning("send: error: %s\n", msg);
+ return 0;
+ default:
+ return 0;
+ }
+
+ progress_dialog_set_label(dialog->dialog, buf);
+ gtk_clist_set_text(GTK_CLIST(dialog->dialog->clist), 0, 2, state_str);
+
+ return 0;
+}
+
+static gint send_send_data_progressive(Session *session, guint cur_len,
+ guint total_len, gpointer data)
+{
+ gchar buf[BUFFSIZE];
+ SendProgressDialog *dialog = (SendProgressDialog *)data;
+
+ g_return_val_if_fail(dialog != NULL, -1);
+
+ if (SMTP_SESSION(session)->state != SMTP_SEND_DATA &&
+ SMTP_SESSION(session)->state != SMTP_EOM)
+ return 0;
+
+ g_snprintf(buf, sizeof(buf), _("Sending message (%d / %d bytes)"),
+ cur_len, total_len);
+ progress_dialog_set_label(dialog->dialog, buf);
+ progress_dialog_set_percentage
+ (dialog->dialog, (gfloat)cur_len / (gfloat)total_len);
+
+ return 0;
+}
+
+static gint send_send_data_finished(Session *session, guint len, gpointer data)
+{
+ SendProgressDialog *dialog = (SendProgressDialog *)data;
+
+ g_return_val_if_fail(dialog != NULL, -1);
+
+ send_send_data_progressive(session, len, len, dialog);
+ return 0;
+}
+
+static SendProgressDialog *send_progress_dialog_create(void)
+{
+ SendProgressDialog *dialog;
+ ProgressDialog *progress;
+
+ dialog = g_new0(SendProgressDialog, 1);
+
+ progress = progress_dialog_create();
+ gtk_window_set_title(GTK_WINDOW(progress->window),
+ _("Sending message"));
+ g_signal_connect(G_OBJECT(progress->cancel_btn), "clicked",
+ G_CALLBACK(send_cancel_button_cb), dialog);
+ g_signal_connect(G_OBJECT(progress->window), "delete_event",
+ G_CALLBACK(gtk_true), NULL);
+ gtk_window_set_modal(GTK_WINDOW(progress->window), TRUE);
+ manage_window_set_transient(GTK_WINDOW(progress->window));
+
+ progress_dialog_set_value(progress, 0.0);
+
+ gtk_widget_show_now(progress->window);
+
+ dialog->dialog = progress;
+
+ return dialog;
+}
+
+static void send_progress_dialog_destroy(SendProgressDialog *dialog)
+{
+ g_return_if_fail(dialog != NULL);
+
+ progress_dialog_destroy(dialog->dialog);
+ g_free(dialog);
+}
+
+static void send_cancel_button_cb(GtkWidget *widget, gpointer data)
+{
+ SendProgressDialog *dialog = (SendProgressDialog *)data;
+
+ dialog->cancelled = TRUE;
+}
+
+static void send_put_error(Session *session)
+{
+ gchar *msg;
+ gchar *log_msg = NULL;
+ gchar *err_msg = NULL;
+
+ msg = SMTP_SESSION(session)->error_msg;
+
+ switch (SMTP_SESSION(session)->error_val) {
+ case SM_ERROR:
+ case SM_UNRECOVERABLE:
+ log_msg = _("Error occurred while sending the message.");
+ if (msg)
+ err_msg = g_strdup_printf
+ (_("Error occurred while sending the message:\n%s"),
+ msg);
+ else
+ err_msg = g_strdup(log_msg);
+ break;
+ case SM_AUTHFAIL:
+ log_msg = _("Authentication failed.");
+ if (msg)
+ err_msg = g_strdup_printf
+ (_("Authentication failed:\n%s"), msg);
+ else
+ err_msg = g_strdup(log_msg);
+ break;
+ default:
+ switch (session->state) {
+ case SESSION_ERROR:
+ log_msg =
+ _("Error occurred while sending the message.");
+ err_msg = g_strdup(log_msg);
+ break;
+ case SESSION_EOF:
+ log_msg = _("Connection closed by the remote host.");
+ err_msg = g_strdup(log_msg);
+ break;
+ case SESSION_TIMEOUT:
+ log_msg = _("Session timed out.");
+ err_msg = g_strdup(log_msg);
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+
+ if (log_msg)
+ log_warning("%s\n", log_msg);
+ if (err_msg) {
+ alertpanel_error("%s", err_msg);
+ g_free(err_msg);
+ }
+}
+
diff --git a/src/send_message.h b/src/send_message.h
new file mode 100644
index 00000000..e2149712
--- /dev/null
+++ b/src/send_message.h
@@ -0,0 +1,46 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SEND_MESSAGE_H__
+#define __SEND_MESSAGE_H__
+
+#include <glib.h>
+#include <stdio.h>
+
+typedef struct _QueueInfo QueueInfo;
+
+#include "prefs_account.h"
+
+struct _QueueInfo
+{
+ gchar *from;
+ gchar *server;
+ GSList *to_list;
+ PrefsAccount *ac;
+ FILE *fp;
+};
+
+gint send_message (const gchar *file,
+ PrefsAccount *ac_prefs,
+ GSList *to_list);
+QueueInfo *send_get_queue_info (const gchar *file);
+void send_queue_info_free (QueueInfo *qinfo);
+gint send_message_queue (QueueInfo *qinfo);
+
+#endif /* __SEND_H__ */
diff --git a/src/session.c b/src/session.c
new file mode 100644
index 00000000..e0527752
--- /dev/null
+++ b/src/session.c
@@ -0,0 +1,734 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/signal.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <time.h>
+#include <errno.h>
+
+#include "session.h"
+#include "utils.h"
+
+static gint session_connect_cb (SockInfo *sock,
+ gpointer data);
+static gint session_close (Session *session);
+
+static gboolean session_timeout_cb (gpointer data);
+
+static gboolean session_recv_msg_idle_cb (gpointer data);
+static gboolean session_recv_data_idle_cb (gpointer data);
+
+static gboolean session_read_msg_cb (SockInfo *source,
+ GIOCondition condition,
+ gpointer data);
+static gboolean session_read_data_cb (SockInfo *source,
+ GIOCondition condition,
+ gpointer data);
+static gboolean session_write_msg_cb (SockInfo *source,
+ GIOCondition condition,
+ gpointer data);
+static gboolean session_write_data_cb (SockInfo *source,
+ GIOCondition condition,
+ gpointer data);
+
+
+void session_init(Session *session)
+{
+ session->type = SESSION_UNKNOWN;
+ session->sock = NULL;
+ session->server = NULL;
+ session->port = 0;
+#if USE_SSL
+ session->ssl_type = SSL_NONE;
+#endif
+ session->nonblocking = TRUE;
+ session->state = SESSION_READY;
+ session->last_access_time = time(NULL);
+
+ gettimeofday(&session->tv_prev, NULL);
+
+ session->conn_id = 0;
+
+ session->io_tag = 0;
+
+ session->read_buf_p = session->read_buf;
+ session->read_buf_len = 0;
+
+ session->read_msg_buf = g_string_sized_new(1024);
+ session->read_data_buf = g_byte_array_new();
+
+ session->write_buf = NULL;
+ session->write_buf_p = NULL;
+ session->write_buf_len = 0;
+
+ session->timeout_tag = 0;
+ session->timeout_interval = 0;
+
+ session->data = NULL;
+}
+
+gint session_connect(Session *session, const gchar *server, gushort port)
+{
+ session->server = g_strdup(server);
+ session->port = port;
+
+ session->conn_id = sock_connect_async(server, port, session_connect_cb,
+ session);
+ if (session->conn_id < 0) {
+ g_warning("can't connect to server.");
+ session_close(session);
+ return -1;
+ }
+
+ return 0;
+}
+
+static gint session_connect_cb(SockInfo *sock, gpointer data)
+{
+ Session *session = SESSION(data);
+
+ session->conn_id = 0;
+
+ if (!sock) {
+ g_warning("can't connect to server.");
+ session->state = SESSION_ERROR;
+ return -1;
+ }
+
+ session->sock = sock;
+
+#if USE_SSL
+ if (session->ssl_type == SSL_TUNNEL) {
+ sock_set_nonblocking_mode(sock, FALSE);
+ if (!ssl_init_socket(sock)) {
+ g_warning("can't initialize SSL.");
+ session->state = SESSION_ERROR;
+ return -1;
+ }
+ }
+#endif
+
+ sock_set_nonblocking_mode(sock, session->nonblocking);
+
+ debug_print("session (%p): connected\n", session);
+
+ session->state = SESSION_RECV;
+ session->io_tag = sock_add_watch(session->sock, G_IO_IN,
+ session_read_msg_cb,
+ session);
+
+ return 0;
+}
+
+gint session_disconnect(Session *session)
+{
+ session_close(session);
+ return 0;
+}
+
+void session_destroy(Session *session)
+{
+ g_return_if_fail(session != NULL);
+ g_return_if_fail(session->destroy != NULL);
+
+ session_close(session);
+ session->destroy(session);
+ g_free(session->server);
+ g_string_free(session->read_msg_buf, TRUE);
+ g_byte_array_free(session->read_data_buf, TRUE);
+ g_free(session->read_data_terminator);
+ g_free(session->write_buf);
+
+ debug_print("session (%p): destroyed\n", session);
+
+ g_free(session);
+}
+
+gboolean session_is_connected(Session *session)
+{
+ return (session->state == SESSION_READY ||
+ session->state == SESSION_SEND ||
+ session->state == SESSION_RECV);
+}
+
+void session_set_access_time(Session *session)
+{
+ session->last_access_time = time(NULL);
+}
+
+void session_set_timeout(Session *session, guint interval)
+{
+ if (session->timeout_tag > 0)
+ g_source_remove(session->timeout_tag);
+
+ session->timeout_interval = interval;
+ if (interval > 0)
+ session->timeout_tag =
+ g_timeout_add(interval, session_timeout_cb, session);
+ else
+ session->timeout_tag = 0;
+}
+
+static gboolean session_timeout_cb(gpointer data)
+{
+ Session *session = SESSION(data);
+
+ g_warning("session timeout.\n");
+
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ session->timeout_tag = 0;
+ session->state = SESSION_TIMEOUT;
+
+ return FALSE;
+}
+
+void session_set_recv_message_notify(Session *session,
+ RecvMsgNotify notify_func, gpointer data)
+{
+ session->recv_msg_notify = notify_func;
+ session->recv_msg_notify_data = data;
+}
+
+void session_set_recv_data_progressive_notify
+ (Session *session,
+ RecvDataProgressiveNotify notify_func,
+ gpointer data)
+{
+ session->recv_data_progressive_notify = notify_func,
+ session->recv_data_progressive_notify_data = data;
+}
+
+void session_set_recv_data_notify(Session *session, RecvDataNotify notify_func,
+ gpointer data)
+{
+ session->recv_data_notify = notify_func;
+ session->recv_data_notify_data = data;
+}
+
+void session_set_send_data_progressive_notify
+ (Session *session,
+ SendDataProgressiveNotify notify_func,
+ gpointer data)
+{
+ session->send_data_progressive_notify = notify_func;
+ session->send_data_progressive_notify_data = data;
+}
+
+void session_set_send_data_notify(Session *session, SendDataNotify notify_func,
+ gpointer data)
+{
+ session->send_data_notify = notify_func;
+ session->send_data_notify_data = data;
+}
+
+static gint session_close(Session *session)
+{
+ g_return_val_if_fail(session != NULL, -1);
+
+ if (session->conn_id > 0) {
+ sock_connect_async_cancel(session->conn_id);
+ session->conn_id = 0;
+ debug_print("session (%p): connection cancelled\n", session);
+ }
+
+ session_set_timeout(session, 0);
+
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ if (session->sock) {
+ sock_close(session->sock);
+ session->sock = NULL;
+ session->state = SESSION_DISCONNECTED;
+ debug_print("session (%p): closed\n", session);
+ }
+
+ return 0;
+}
+
+#if USE_SSL
+gint session_start_tls(Session *session)
+{
+ gboolean nb_mode;
+
+ nb_mode = sock_is_nonblocking_mode(session->sock);
+
+ if (nb_mode)
+ sock_set_nonblocking_mode(session->sock, FALSE);
+
+ if (!ssl_init_socket_with_method(session->sock, SSL_METHOD_TLSv1)) {
+ g_warning("can't start TLS session.\n");
+ if (nb_mode)
+ sock_set_nonblocking_mode(session->sock, TRUE);
+ return -1;
+ }
+
+ if (nb_mode)
+ sock_set_nonblocking_mode(session->sock, session->nonblocking);
+
+ return 0;
+}
+#endif
+
+gint session_send_msg(Session *session, SessionMsgType type, const gchar *msg)
+{
+ gboolean ret;
+
+ g_return_val_if_fail(session->write_buf == NULL, -1);
+ g_return_val_if_fail(msg != NULL, -1);
+ g_return_val_if_fail(msg[0] != '\0', -1);
+
+ session->state = SESSION_SEND;
+ session->write_buf = g_strconcat(msg, "\r\n", NULL);
+ session->write_buf_p = session->write_buf;
+ session->write_buf_len = strlen(msg) + 2;
+
+ ret = session_write_msg_cb(session->sock, G_IO_OUT, session);
+
+ if (ret == TRUE)
+ session->io_tag = sock_add_watch(session->sock, G_IO_OUT,
+ session_write_msg_cb, session);
+ else if (session->state == SESSION_ERROR)
+ return -1;
+
+ return 0;
+}
+
+gint session_recv_msg(Session *session)
+{
+ g_return_val_if_fail(session->read_msg_buf->len == 0, -1);
+
+ session->state = SESSION_RECV;
+
+ if (session->read_buf_len > 0)
+ g_idle_add(session_recv_msg_idle_cb, session);
+ else
+ session->io_tag = sock_add_watch(session->sock, G_IO_IN,
+ session_read_msg_cb, session);
+
+ return 0;
+}
+
+static gboolean session_recv_msg_idle_cb(gpointer data)
+{
+ Session *session = SESSION(data);
+ gboolean ret;
+
+ ret = session_read_msg_cb(session->sock, G_IO_IN, session);
+
+ if (ret == TRUE)
+ session->io_tag = sock_add_watch(session->sock, G_IO_IN,
+ session_read_msg_cb, session);
+
+ return FALSE;
+}
+
+gint session_send_data(Session *session, const guchar *data, guint size)
+{
+ gboolean ret;
+
+ g_return_val_if_fail(session->write_buf == NULL, -1);
+ g_return_val_if_fail(data != NULL, -1);
+ g_return_val_if_fail(size != 0, -1);
+
+ session->state = SESSION_SEND;
+
+ session->write_buf = g_malloc(size);
+ session->write_buf_p = session->write_buf;
+ memcpy(session->write_buf, data, size);
+ session->write_buf_len = size;
+ gettimeofday(&session->tv_prev, NULL);
+
+ ret = session_write_data_cb(session->sock, G_IO_OUT, session);
+
+ if (ret == TRUE)
+ session->io_tag = sock_add_watch(session->sock, G_IO_OUT,
+ session_write_data_cb,
+ session);
+ else if (session->state == SESSION_ERROR)
+ return -1;
+
+ return 0;
+}
+
+gint session_recv_data(Session *session, guint size, const gchar *terminator)
+{
+ g_return_val_if_fail(session->read_data_buf->len == 0, -1);
+
+ session->state = SESSION_RECV;
+
+ g_free(session->read_data_terminator);
+ session->read_data_terminator = g_strdup(terminator);
+ gettimeofday(&session->tv_prev, NULL);
+
+ if (session->read_buf_len > 0)
+ g_idle_add(session_recv_data_idle_cb, session);
+ else
+ session->io_tag = sock_add_watch(session->sock, G_IO_IN,
+ session_read_data_cb, session);
+
+ return 0;
+}
+
+static gboolean session_recv_data_idle_cb(gpointer data)
+{
+ Session *session = SESSION(data);
+ gboolean ret;
+
+ ret = session_read_data_cb(session->sock, G_IO_IN, session);
+
+ if (ret == TRUE)
+ session->io_tag = sock_add_watch(session->sock, G_IO_IN,
+ session_read_data_cb, session);
+
+ return FALSE;
+}
+
+static gboolean session_read_msg_cb(SockInfo *source, GIOCondition condition,
+ gpointer data)
+{
+ Session *session = SESSION(data);
+ gchar buf[SESSION_BUFFSIZE];
+ gint line_len;
+ gchar *newline;
+ gchar *msg;
+ gint ret;
+
+ g_return_val_if_fail(condition == G_IO_IN, FALSE);
+
+ session_set_timeout(session, session->timeout_interval);
+
+ if (session->read_buf_len == 0) {
+ gint read_len;
+
+ read_len = sock_read(session->sock, session->read_buf,
+ SESSION_BUFFSIZE - 1);
+
+ if (read_len == 0) {
+ g_warning("sock_read: received EOF\n");
+ session->state = SESSION_EOF;
+ return FALSE;
+ }
+
+ if (read_len < 0) {
+ switch (errno) {
+ case EAGAIN:
+ return TRUE;
+ default:
+ g_warning("sock_read: %s\n", g_strerror(errno));
+ session->state = SESSION_ERROR;
+ return FALSE;
+ }
+ }
+
+ session->read_buf_len = read_len;
+ }
+
+ if ((newline = memchr(session->read_buf_p, '\n', session->read_buf_len))
+ != NULL)
+ line_len = newline - session->read_buf_p + 1;
+ else
+ line_len = session->read_buf_len;
+
+ if (line_len == 0)
+ return TRUE;
+
+ memcpy(buf, session->read_buf_p, line_len);
+ buf[line_len] = '\0';
+
+ g_string_append(session->read_msg_buf, buf);
+
+ session->read_buf_len -= line_len;
+ if (session->read_buf_len == 0)
+ session->read_buf_p = session->read_buf;
+ else
+ session->read_buf_p += line_len;
+
+ /* incomplete read */
+ if (buf[line_len - 1] != '\n')
+ return TRUE;
+
+ /* complete */
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ /* callback */
+ msg = g_strdup(session->read_msg_buf->str);
+ strretchomp(msg);
+ g_string_truncate(session->read_msg_buf, 0);
+
+ ret = session->recv_msg(session, msg);
+ session->recv_msg_notify(session, msg, session->recv_msg_notify_data);
+
+ g_free(msg);
+
+ if (ret < 0)
+ session->state = SESSION_ERROR;
+
+ return FALSE;
+}
+
+static gboolean session_read_data_cb(SockInfo *source, GIOCondition condition,
+ gpointer data)
+{
+ Session *session = SESSION(data);
+ GByteArray *data_buf;
+ gint terminator_len;
+ gboolean complete = FALSE;
+ guint data_len;
+ gint ret;
+
+ g_return_val_if_fail(condition == G_IO_IN, FALSE);
+
+ session_set_timeout(session, session->timeout_interval);
+
+ if (session->read_buf_len == 0) {
+ gint read_len;
+
+ read_len = sock_read(session->sock, session->read_buf,
+ SESSION_BUFFSIZE);
+
+ if (read_len == 0) {
+ g_warning("sock_read: received EOF\n");
+ session->state = SESSION_EOF;
+ return FALSE;
+ }
+
+ if (read_len < 0) {
+ switch (errno) {
+ case EAGAIN:
+ return TRUE;
+ default:
+ g_warning("sock_read: %s\n", g_strerror(errno));
+ session->state = SESSION_ERROR;
+ return FALSE;
+ }
+ }
+
+ session->read_buf_len = read_len;
+ }
+
+ data_buf = session->read_data_buf;
+ terminator_len = strlen(session->read_data_terminator);
+
+ if (session->read_buf_len == 0)
+ return TRUE;
+
+ g_byte_array_append(data_buf, session->read_buf_p,
+ session->read_buf_len);
+
+ session->read_buf_len = 0;
+ session->read_buf_p = session->read_buf;
+
+ /* check if data is terminated */
+ if (data_buf->len >= terminator_len) {
+ if (memcmp(data_buf->data, session->read_data_terminator,
+ terminator_len) == 0)
+ complete = TRUE;
+ else if (data_buf->len >= terminator_len + 2 &&
+ memcmp(data_buf->data + data_buf->len -
+ (terminator_len + 2), "\r\n", 2) == 0 &&
+ memcmp(data_buf->data + data_buf->len -
+ terminator_len, session->read_data_terminator,
+ terminator_len) == 0)
+ complete = TRUE;
+ }
+
+ /* incomplete read */
+ if (!complete) {
+ struct timeval tv_cur;
+
+ gettimeofday(&tv_cur, NULL);
+ if (tv_cur.tv_sec - session->tv_prev.tv_sec > 0 ||
+ tv_cur.tv_usec - session->tv_prev.tv_usec >
+ UI_REFRESH_INTERVAL) {
+ session->recv_data_progressive_notify
+ (session, data_buf->len, 0,
+ session->recv_data_progressive_notify_data);
+ gettimeofday(&session->tv_prev, NULL);
+ }
+ return TRUE;
+ }
+
+ /* complete */
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ data_len = data_buf->len - terminator_len;
+
+ /* callback */
+ ret = session->recv_data_finished(session, (gchar *)data_buf->data,
+ data_len);
+
+ g_byte_array_set_size(data_buf, 0);
+
+ session->recv_data_notify(session, data_len,
+ session->recv_data_notify_data);
+
+ if (ret < 0)
+ session->state = SESSION_ERROR;
+
+ return FALSE;
+}
+
+static gint session_write_buf(Session *session)
+{
+ gint write_len;
+ gint to_write_len;
+
+ g_return_val_if_fail(session->write_buf != NULL, -1);
+ g_return_val_if_fail(session->write_buf_p != NULL, -1);
+ g_return_val_if_fail(session->write_buf_len > 0, -1);
+
+ to_write_len = session->write_buf_len -
+ (session->write_buf_p - session->write_buf);
+ to_write_len = MIN(to_write_len, SESSION_BUFFSIZE);
+
+ write_len = sock_write(session->sock, session->write_buf_p,
+ to_write_len);
+
+ if (write_len < 0) {
+ switch (errno) {
+ case EAGAIN:
+ write_len = 0;
+ break;
+ default:
+ g_warning("sock_write: %s\n", g_strerror(errno));
+ session->state = SESSION_ERROR;
+ return -1;
+ }
+ }
+
+ /* incomplete write */
+ if (session->write_buf_p - session->write_buf + write_len <
+ session->write_buf_len) {
+ session->write_buf_p += write_len;
+ return 1;
+ }
+
+ g_free(session->write_buf);
+ session->write_buf = NULL;
+ session->write_buf_p = NULL;
+ session->write_buf_len = 0;
+
+ return 0;
+}
+
+static gboolean session_write_msg_cb(SockInfo *source, GIOCondition condition,
+ gpointer data)
+{
+ Session *session = SESSION(data);
+ gint ret;
+
+ g_return_val_if_fail(condition == G_IO_OUT, FALSE);
+ g_return_val_if_fail(session->write_buf != NULL, FALSE);
+ g_return_val_if_fail(session->write_buf_p != NULL, FALSE);
+ g_return_val_if_fail(session->write_buf_len > 0, FALSE);
+
+ ret = session_write_buf(session);
+
+ if (ret < 0) {
+ session->state = SESSION_ERROR;
+ return FALSE;
+ } else if (ret > 0)
+ return TRUE;
+
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ session_recv_msg(session);
+
+ return FALSE;
+}
+
+static gboolean session_write_data_cb(SockInfo *source,
+ GIOCondition condition, gpointer data)
+{
+ Session *session = SESSION(data);
+ guint write_buf_len;
+ gint ret;
+
+ g_return_val_if_fail(condition == G_IO_OUT, FALSE);
+ g_return_val_if_fail(session->write_buf != NULL, FALSE);
+ g_return_val_if_fail(session->write_buf_p != NULL, FALSE);
+ g_return_val_if_fail(session->write_buf_len > 0, FALSE);
+
+ write_buf_len = session->write_buf_len;
+
+ ret = session_write_buf(session);
+
+ if (ret < 0) {
+ session->state = SESSION_ERROR;
+ return FALSE;
+ } else if (ret > 0) {
+ struct timeval tv_cur;
+
+ gettimeofday(&tv_cur, NULL);
+ if (tv_cur.tv_sec - session->tv_prev.tv_sec > 0 ||
+ tv_cur.tv_usec - session->tv_prev.tv_usec >
+ UI_REFRESH_INTERVAL) {
+ session_set_timeout(session, session->timeout_interval);
+ session->send_data_progressive_notify
+ (session,
+ session->write_buf_p - session->write_buf,
+ write_buf_len,
+ session->send_data_progressive_notify_data);
+ gettimeofday(&session->tv_prev, NULL);
+ }
+ return TRUE;
+ }
+
+ if (session->io_tag > 0) {
+ g_source_remove(session->io_tag);
+ session->io_tag = 0;
+ }
+
+ /* callback */
+ ret = session->send_data_finished(session, write_buf_len);
+ session->send_data_notify(session, write_buf_len,
+ session->send_data_notify_data);
+
+ return FALSE;
+}
diff --git a/src/session.h b/src/session.h
new file mode 100644
index 00000000..093f12f4
--- /dev/null
+++ b/src/session.h
@@ -0,0 +1,200 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SESSION_H__
+#define __SESSION_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <time.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#include "socket.h"
+
+#define SESSION_BUFFSIZE 4096
+
+typedef struct _Session Session;
+
+#define SESSION(obj) ((Session *)obj)
+
+typedef enum {
+ SESSION_UNKNOWN,
+ SESSION_IMAP,
+ SESSION_NEWS,
+ SESSION_SMTP,
+ SESSION_POP3
+} SessionType;
+
+typedef enum {
+ SESSION_READY,
+ SESSION_SEND,
+ SESSION_RECV,
+ SESSION_EOF,
+ SESSION_TIMEOUT,
+ SESSION_ERROR,
+ SESSION_DISCONNECTED
+} SessionState;
+
+typedef enum
+{
+ SESSION_MSG_NORMAL,
+ SESSION_MSG_SEND_DATA,
+ SESSION_MSG_RECV_DATA,
+ SESSION_MSG_CONTROL,
+ SESSION_MSG_ERROR,
+ SESSION_MSG_UNKNOWN
+} SessionMsgType;
+
+typedef gint (*RecvMsgNotify) (Session *session,
+ const gchar *msg,
+ gpointer user_data);
+typedef gint (*RecvDataProgressiveNotify) (Session *session,
+ guint cur_len,
+ guint total_len,
+ gpointer user_data);
+typedef gint (*RecvDataNotify) (Session *session,
+ guint len,
+ gpointer user_data);
+typedef gint (*SendDataProgressiveNotify) (Session *session,
+ guint cur_len,
+ guint total_len,
+ gpointer user_data);
+typedef gint (*SendDataNotify) (Session *session,
+ guint len,
+ gpointer user_data);
+
+struct _Session
+{
+ SessionType type;
+
+ SockInfo *sock;
+
+ gchar *server;
+ gushort port;
+
+#if USE_SSL
+ SSLType ssl_type;
+#endif
+
+ gboolean nonblocking;
+
+ SessionState state;
+
+ time_t last_access_time;
+ struct timeval tv_prev;
+
+ gint conn_id;
+
+ gint io_tag;
+
+ gchar read_buf[SESSION_BUFFSIZE];
+ gchar *read_buf_p;
+ gint read_buf_len;
+
+ GString *read_msg_buf;
+ GByteArray *read_data_buf;
+ gchar *read_data_terminator;
+
+ gchar *write_buf;
+ gchar *write_buf_p;
+ gint write_buf_len;
+
+ guint timeout_tag;
+ guint timeout_interval;
+
+ gpointer data;
+
+ /* virtual methods to parse server responses */
+ gint (*recv_msg) (Session *session,
+ const gchar *msg);
+
+ gint (*send_data_finished) (Session *session,
+ guint len);
+ gint (*recv_data_finished) (Session *session,
+ guchar *data,
+ guint len);
+
+ void (*destroy) (Session *session);
+
+ /* notification functions */
+ RecvMsgNotify recv_msg_notify;
+ RecvDataProgressiveNotify recv_data_progressive_notify;
+ RecvDataNotify recv_data_notify;
+ SendDataProgressiveNotify send_data_progressive_notify;
+ SendDataNotify send_data_notify;
+
+ gpointer recv_msg_notify_data;
+ gpointer recv_data_progressive_notify_data;
+ gpointer recv_data_notify_data;
+ gpointer send_data_progressive_notify_data;
+ gpointer send_data_notify_data;
+};
+
+void session_init (Session *session);
+gint session_connect (Session *session,
+ const gchar *server,
+ gushort port);
+gint session_disconnect (Session *session);
+void session_destroy (Session *session);
+gboolean session_is_connected (Session *session);
+
+void session_set_access_time (Session *session);
+
+void session_set_timeout (Session *session,
+ guint interval);
+
+void session_set_recv_message_notify (Session *session,
+ RecvMsgNotify notify_func,
+ gpointer data);
+void session_set_recv_data_progressive_notify
+ (Session *session,
+ RecvDataProgressiveNotify notify_func,
+ gpointer data);
+void session_set_recv_data_notify (Session *session,
+ RecvDataNotify notify_func,
+ gpointer data);
+void session_set_send_data_progressive_notify
+ (Session *session,
+ SendDataProgressiveNotify notify_func,
+ gpointer data);
+void session_set_send_data_notify (Session *session,
+ SendDataNotify notify_func,
+ gpointer data);
+
+#if USE_SSL
+gint session_start_tls (Session *session);
+#endif
+
+gint session_send_msg (Session *session,
+ SessionMsgType type,
+ const gchar *msg);
+gint session_recv_msg (Session *session);
+gint session_send_data (Session *session,
+ const guchar *data,
+ guint size);
+gint session_recv_data (Session *session,
+ guint size,
+ const gchar *terminator);
+
+#endif /* __SESSION_H__ */
diff --git a/src/setup.c b/src/setup.c
new file mode 100644
index 00000000..ef4ba94e
--- /dev/null
+++ b/src/setup.c
@@ -0,0 +1,95 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkstatusbar.h>
+
+#include "intl.h"
+#include "inputdialog.h"
+#include "alertpanel.h"
+#include "mainwindow.h"
+#include "gtkutils.h"
+
+#define SETUP_DIALOG_WIDTH 540
+
+static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data);
+
+void setup(MainWindow *mainwin)
+{
+ gchar *path;
+ Folder *folder;
+
+ path = input_dialog
+ (_("Mailbox setting"),
+ _("First, you have to set the location of mailbox.\n"
+ "You can use existing mailbox in MH format\n"
+ "if you have the one.\n"
+ "If you're not sure, just select OK."),
+ "Mail");
+ if (!path) return;
+ if (folder_find_from_path(path)) {
+ g_warning("The mailbox already exists.\n");
+ g_free(path);
+ return;
+ }
+
+ if (!strcmp(path, "Mail"))
+ folder = folder_new(F_MH, _("Mailbox"), path);
+ else
+ folder = folder_new(F_MH, g_basename(path), path);
+ g_free(path);
+
+ if (folder->klass->create_tree(folder) < 0) {
+ alertpanel_error(_("Creation of the mailbox failed.\n"
+ "Maybe some files already exist, or you don't have the permission to write there."));
+ folder_destroy(folder);
+ return;
+ }
+
+ folder_add(folder);
+ folder_set_ui_func(folder, scan_tree_func, mainwin);
+ folder->klass->scan_tree(folder);
+ folder_set_ui_func(folder, NULL, NULL);
+}
+
+static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ gchar *str;
+
+ if (item->path)
+ str = g_strdup_printf(_("Scanning folder %s%c%s ..."),
+ LOCAL_FOLDER(folder)->rootpath,
+ G_DIR_SEPARATOR,
+ item->path);
+ else
+ str = g_strdup_printf(_("Scanning folder %s ..."),
+ LOCAL_FOLDER(folder)->rootpath);
+
+ gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar),
+ mainwin->mainwin_cid, str);
+ gtkut_widget_wait_for_draw(mainwin->hbox_stat);
+ gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar),
+ mainwin->mainwin_cid);
+ g_free(str);
+}
diff --git a/src/setup.h b/src/setup.h
new file mode 100644
index 00000000..5b889d33
--- /dev/null
+++ b/src/setup.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SETUP_H__
+#define __SETUP_H__
+
+#include <glib.h>
+
+#include "mainwindow.h"
+
+void setup(MainWindow *mainwin);
+
+#endif /* __SETUP_H__ */
diff --git a/src/sigstatus.c b/src/sigstatus.c
new file mode 100644
index 00000000..a9905f0a
--- /dev/null
+++ b/src/sigstatus.c
@@ -0,0 +1,244 @@
+/* sigstatus.h - GTK+ based signature status display
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if USE_GPGME
+
+#include <glib.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkbutton.h>
+#include <gdk/gdkkeysyms.h>
+#include <gpgme.h>
+
+#include "intl.h"
+#include "gtkutils.h"
+#include "utils.h"
+#include "sigstatus.h"
+
+/* remove the window after 30 seconds to avoid cluttering the deskop
+ * with too many of them */
+#define MY_TIMEOUT (30*1000)
+
+struct gpgmegtk_sig_status_s {
+ GtkWidget *mainwindow;
+ GtkWidget *label;
+ gint running;
+ gint destroy_pending;
+ guint timeout_id;
+ gint timeout_id_valid;
+};
+
+
+static void do_destroy(GpgmegtkSigStatus hd)
+{
+ if (!hd->running) {
+ if (hd->mainwindow) {
+ gtk_widget_destroy ( hd->mainwindow );
+ hd->mainwindow = NULL;
+ }
+ if (hd->timeout_id_valid) {
+ gtk_timeout_remove(hd->timeout_id);
+ hd->timeout_id_valid = 0;
+ }
+ if (hd->destroy_pending)
+ g_free(hd);
+ }
+}
+
+static void okay_cb(GtkWidget *widget, gpointer data)
+{
+ GpgmegtkSigStatus hd = data;
+
+ hd->running = 0;
+ do_destroy(hd);
+}
+
+static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+ GpgmegtkSigStatus hd = data;
+
+ hd->running = 0;
+ do_destroy(hd);
+
+ return TRUE;
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ GpgmegtkSigStatus hd = data;
+
+ if (event && event->keyval == GDK_Escape) {
+ hd->running = 0;
+ do_destroy(hd);
+ }
+ return FALSE;
+}
+
+GpgmegtkSigStatus gpgmegtk_sig_status_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *okay_btn;
+ GtkWidget *okay_area;
+ GpgmegtkSigStatus hd;
+
+ hd = g_malloc0(sizeof *hd);
+ hd->running = 1;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ hd->mainwindow = window;
+ gtk_widget_set_size_request(window, 400, -1);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 8);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(delete_event), hd);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), hd);
+
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_widget_show(vbox);
+
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 8);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new(_("Checking signature"));
+ hd->label = label;
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 8);
+ gtk_widget_show(label);
+
+ gtkut_button_set_create(&okay_area, &okay_btn, _("OK"),
+ NULL, NULL, NULL, NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), okay_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(okay_btn);
+ g_signal_connect(G_OBJECT(okay_btn), "clicked",
+ G_CALLBACK(okay_cb), hd);
+
+ gtk_widget_show_all(window);
+
+ while (gtk_events_pending())
+ gtk_main_iteration();
+
+ return hd;
+}
+
+static gint timeout_cb(gpointer data)
+{
+ GpgmegtkSigStatus hd = data;
+
+ hd->running = 0;
+ hd->timeout_id_valid = 0;
+ do_destroy(hd);
+
+ return FALSE;
+}
+
+void gpgmegtk_sig_status_destroy(GpgmegtkSigStatus hd)
+{
+ if (hd) {
+ hd->destroy_pending = 1;
+ if (hd->running && !hd->timeout_id_valid) {
+ hd->timeout_id = gtk_timeout_add(MY_TIMEOUT,
+ timeout_cb, hd);
+ hd->timeout_id_valid = 1;
+ }
+ do_destroy(hd);
+ }
+}
+
+/* Fixme: remove status and get it from the context */
+void gpgmegtk_sig_status_update(GpgmegtkSigStatus hd, GpgmeCtx ctx)
+{
+ gint idx;
+ time_t created;
+ GpgmeSigStat status;
+ gchar *text = NULL;
+
+ if (!hd || !hd->running || !ctx)
+ return;
+
+ for (idx = 0; gpgme_get_sig_status(ctx, idx, &status, &created);
+ idx++) {
+ gchar *tmp;
+ const gchar *userid;
+ GpgmeKey key = NULL;
+
+ if (!gpgme_get_sig_key (ctx, idx, &key)) {
+ userid = gpgme_key_get_string_attr
+ (key, GPGME_ATTR_USERID, NULL, 0);
+ } else
+ userid = "[?]";
+
+ tmp = g_strdup_printf(_("%s%s%s from \"%s\""),
+ text ? text : "",
+ text ? "\n" : "",
+ gpgmegtk_sig_status_to_string(status),
+ userid);
+ g_free (text);
+ text = tmp;
+ gpgme_key_unref (key);
+ }
+
+ gtk_label_set_text(GTK_LABEL(hd->label), text);
+ g_free(text);
+
+ while (gtk_events_pending())
+ gtk_main_iteration();
+}
+
+const char *gpgmegtk_sig_status_to_string(GpgmeSigStat status)
+{
+ const char *result = "?";
+
+ switch (status) {
+ case GPGME_SIG_STAT_NONE:
+ result = _("Oops: Signature not verified");
+ break;
+ case GPGME_SIG_STAT_NOSIG:
+ result = _("No signature found");
+ break;
+ case GPGME_SIG_STAT_GOOD:
+ result = _("Good signature");
+ break;
+ case GPGME_SIG_STAT_BAD:
+ result = _("BAD signature");
+ break;
+ case GPGME_SIG_STAT_NOKEY:
+ result = _("No public key to verify the signature");
+ break;
+ case GPGME_SIG_STAT_ERROR:
+ result = _("Error verifying the signature");
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
+
+#endif /* USE_GPGME */
diff --git a/src/sigstatus.h b/src/sigstatus.h
new file mode 100644
index 00000000..f4834b07
--- /dev/null
+++ b/src/sigstatus.h
@@ -0,0 +1,33 @@
+/* sigstatus.h - GTK+ based signature status display
+ * Copyright (C) 2001 Werner Koch (dd9jn)
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GPGMEGTK_SIGSTATUS_H
+#define GPGMEGTK_SIGSTATUS_H
+
+#include <gpgme.h>
+
+struct gpgmegtk_sig_status_s;
+typedef struct gpgmegtk_sig_status_s *GpgmegtkSigStatus;
+
+GpgmegtkSigStatus gpgmegtk_sig_status_create(void);
+void gpgmegtk_sig_status_destroy(GpgmegtkSigStatus hd);
+void gpgmegtk_sig_status_update(GpgmegtkSigStatus hd, GpgmeCtx ctx);
+
+const char *gpgmegtk_sig_status_to_string(GpgmeSigStat status);
+
+#endif /* GPGMEGTK_SIGSTATUS_H */
diff --git a/src/simple-gettext.c b/src/simple-gettext.c
new file mode 100644
index 00000000..be6292bb
--- /dev/null
+++ b/src/simple-gettext.c
@@ -0,0 +1,386 @@
+/* simple-gettext.c - a simplified version of gettext.
+ * Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+/* This is a simplified version of gettext written by Ulrich Drepper.
+ * It is used for the Win32 version of GnuPG becuase all the overhead
+ * of gettext is not needed and we have to do some special Win32 stuff.
+ * I decided that this is far easier than to tweak gettext for the special
+ * cases (I tried it but it is a lot of code). wk 15.09.99
+ */
+
+#include <config.h>
+#ifdef USE_SIMPLE_GETTEXT
+#ifndef __MINGW32__
+ #error This file can only be used with MinGW32
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <windows.h>
+#include "w32reg.h"
+
+typedef unsigned int u32; /* That is fine with MingW32 */
+
+typedef unsigned long ulong;
+
+/* The magic number of the GNU message catalog format. */
+#define MAGIC 0x950412de
+#define MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ u32 magic;
+ /* The revision number of the file format. */
+ u32 revision;
+ /* The number of strings pairs. */
+ u32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ u32 orig_tab_offset;
+ /* Offset of table with start offsets of translation strings. */
+ u32 trans_tab_offset;
+ /* Size of hashing table. */
+ u32 hash_tab_size;
+ /* Offset of first hashing entry. */
+ u32 hash_tab_offset;
+};
+
+struct string_desc
+{
+ /* Length of addressed string. */
+ u32 length;
+ /* Offset of string in file. */
+ u32 offset;
+};
+
+
+
+struct loaded_domain
+{
+ char *data;
+ int must_swap;
+ u32 nstrings;
+ char *mapped;
+ struct string_desc *orig_tab;
+ struct string_desc *trans_tab;
+ u32 hash_size;
+ u32 *hash_tab;
+};
+
+
+static struct loaded_domain *the_domain;
+
+static __inline__ u32
+do_swap_u32( u32 i )
+{
+ return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+
+#define SWAPIT(flag, data) ((flag) ? do_swap_u32(data) : (data) )
+
+
+/* We assume to have `unsigned long int' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+/* The so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+
+static __inline__ ulong
+hash_string( const char *str_param )
+{
+ unsigned long int hval, g;
+ const char *str = str_param;
+
+ hval = 0;
+ while (*str != '\0')
+ {
+ hval <<= 4;
+ hval += (unsigned long int) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}
+
+
+static struct loaded_domain *
+load_domain( const char *filename )
+{
+ FILE *fp;
+ size_t size;
+ struct stat st;
+ struct mo_file_header *data = NULL;
+ struct loaded_domain *domain = NULL;
+ size_t to_read;
+ char *read_ptr;
+
+ fp = fopen( filename, "rb" );
+ if( !fp )
+ return NULL; /* can't open the file */
+ /* we must know about the size of the file */
+ if( fstat( fileno(fp ), &st )
+ || (size = (size_t)st.st_size) != st.st_size
+ || size < sizeof (struct mo_file_header) ) {
+ fclose( fp );
+ return NULL;
+ }
+
+ data = malloc( size );
+ if( !data ) {
+ fclose( fp );
+ return NULL; /* out of memory */
+ }
+
+ to_read = size;
+ read_ptr = (char *) data;
+ do {
+ long int nb = fread( read_ptr, 1, to_read, fp );
+ if( nb < to_read ) {
+ fclose (fp);
+ free(data);
+ return NULL; /* read error */
+ }
+ read_ptr += nb;
+ to_read -= nb;
+ } while( to_read > 0 );
+ fclose (fp);
+
+ /* Using the magic number we can test whether it really is a message
+ * catalog file. */
+ if( data->magic != MAGIC && data->magic != MAGIC_SWAPPED ) {
+ /* The magic number is wrong: not a message catalog file. */
+ free( data );
+ return NULL;
+ }
+
+ domain = calloc( 1, sizeof *domain );
+ if( !domain ) {
+ free( data );
+ return NULL;
+ }
+ domain->data = (char *) data;
+ domain->must_swap = data->magic != MAGIC;
+
+ /* Fill in the information about the available tables. */
+ switch( SWAPIT(domain->must_swap, data->revision) ) {
+ case 0:
+ domain->nstrings = SWAPIT(domain->must_swap, data->nstrings);
+ domain->orig_tab = (struct string_desc *)
+ ((char *) data + SWAPIT(domain->must_swap, data->orig_tab_offset));
+ domain->trans_tab = (struct string_desc *)
+ ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset));
+ domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size);
+ domain->hash_tab = (u32 *)
+ ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset));
+ break;
+
+ default: /* This is an invalid revision. */
+ free( data );
+ free( domain );
+ return NULL;
+ }
+
+ /* allocate an array to keep track of code page mappings */
+ domain->mapped = calloc( 1, domain->nstrings );
+ if( !domain->mapped ) {
+ free( data );
+ free( domain );
+ return NULL;
+ }
+
+ return domain;
+}
+
+
+/****************
+ * Set the file used for translations. Pass a NULL to disable
+ * translation. A new filename may be set at anytime.
+ * WARNING: After changing the filename you shoudl not access any data
+ * retrieved by gettext().
+ */
+int
+set_gettext_file( const char *filename )
+{
+ struct loaded_domain *domain = NULL;
+
+ if( filename && *filename ) {
+ if( filename[0] == '/'
+ #ifdef HAVE_DRIVE_LETTERS
+ || ( isalpha(filename[0])
+ && filename[1] == ':'
+ && (filename[2] == '/' || filename[2] == '\\') )
+ #endif
+ ) {
+ /* absolute path - use it as is */
+ domain = load_domain( filename );
+ }
+ else { /* relative path - append ".mo" and get dir from the environment */
+ char *buf = NULL;
+ char *dir;
+
+ dir = read_w32_registry_string( NULL,
+ "Control Panel\\Mingw32\\NLS",
+ "MODir" );
+ if( dir && (buf=malloc(strlen(dir)+strlen(filename)+1+3+1)) ) {
+ strcpy(stpcpy(stpcpy(stpcpy( buf, dir),"\\"), filename),".mo");
+ domain = load_domain( buf );
+ free(buf);
+ }
+ free(dir);
+ }
+ if( !domain ) {
+ return -1; }
+ }
+ if( the_domain ) {
+ free( the_domain->data );
+ free( the_domain->mapped );
+ free( the_domain );
+ the_domain = NULL;
+ }
+ the_domain = domain;
+ return NULL;
+}
+
+
+static const char*
+get_string( struct loaded_domain *domain, u32 idx )
+{
+ char *p = domain->data + SWAPIT(domain->must_swap,
+ domain->trans_tab[idx].offset);
+
+ /* status of domain->mapped[idx] is ignored.
+ * not sure about the consequences.
+ * perhaps mapped can entirely be removed?
+ */
+
+ /* we assume, strings are already correctly
+ * encoded.
+ */
+
+ return (const char*)p;
+}
+
+
+
+const char *
+gettext( const char *msgid )
+{
+ struct loaded_domain *domain;
+ size_t act = 0;
+ size_t top, bottom;
+
+ if( !(domain = the_domain) ) {
+ goto not_found;
+ }
+
+ /* Locate the MSGID and its translation. */
+ if( domain->hash_size > 2 && domain->hash_tab ) {
+ /* Use the hashing table. */
+ u32 len = strlen (msgid);
+ u32 hash_val = hash_string (msgid);
+ u32 idx = hash_val % domain->hash_size;
+ u32 incr = 1 + (hash_val % (domain->hash_size - 2));
+ u32 nstr = SWAPIT (domain->must_swap, domain->hash_tab[idx]);
+
+ if ( !nstr ) /* Hash table entry is empty. */
+ goto not_found;
+
+ if( SWAPIT(domain->must_swap,
+ domain->orig_tab[nstr - 1].length) == len
+ && !strcmp( msgid,
+ domain->data + SWAPIT(domain->must_swap,
+ domain->orig_tab[nstr - 1].offset)) )
+ return get_string( domain, nstr - 1 );
+
+ for(;;) {
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+
+ nstr = SWAPIT(domain->must_swap, domain->hash_tab[idx]);
+ if( !nstr )
+ goto not_found; /* Hash table entry is empty. */
+
+ if ( SWAPIT(domain->must_swap,
+ domain->orig_tab[nstr - 1].length) == len
+ && !strcmp (msgid,
+ domain->data + SWAPIT(domain->must_swap,
+ domain->orig_tab[nstr - 1].offset)))
+ return get_string( domain, nstr-1 );
+ }
+ /* NOTREACHED */
+ }
+
+ /* Now we try the default method: binary search in the sorted
+ array of messages. */
+ bottom = 0;
+ top = domain->nstrings;
+ while( bottom < top ) {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp(msgid, domain->data
+ + SWAPIT(domain->must_swap,
+ domain->orig_tab[act].offset));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ return get_string( domain, act );
+ }
+
+ not_found:
+ return msgid;
+}
+
+#if 0
+ unsigned int cp1, cp2;
+
+ cp1 = GetConsoleCP();
+ cp2 = GetConsoleOutputCP();
+
+ log_info("InputCP=%u OutputCP=%u\n", cp1, cp2 );
+
+ if( !SetConsoleOutputCP( 1252 ) )
+ log_info("SetConsoleOutputCP failed: %d\n", (int)GetLastError() );
+
+ cp1 = GetConsoleCP();
+ cp2 = GetConsoleOutputCP();
+ log_info("InputCP=%u OutputCP=%u after switch1\n", cp1, cp2 );
+#endif
+
+#endif /* USE_SIMPLE_GETTEXT */
diff --git a/src/smtp.c b/src/smtp.c
new file mode 100644
index 00000000..4b8ae355
--- /dev/null
+++ b/src/smtp.c
@@ -0,0 +1,565 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "intl.h"
+#include "smtp.h"
+#include "md5.h"
+#include "base64.h"
+#include "utils.h"
+
+static void smtp_session_destroy(Session *session);
+
+static gint smtp_from(SMTPSession *session);
+
+static gint smtp_auth(SMTPSession *session);
+static gint smtp_starttls(SMTPSession *session);
+static gint smtp_auth_cram_md5(SMTPSession *session);
+static gint smtp_auth_login(SMTPSession *session);
+
+static gint smtp_ehlo(SMTPSession *session);
+static gint smtp_ehlo_recv(SMTPSession *session, const gchar *msg);
+
+static gint smtp_helo(SMTPSession *session);
+static gint smtp_rcpt(SMTPSession *session);
+static gint smtp_data(SMTPSession *session);
+static gint smtp_send_data(SMTPSession *session);
+/* static gint smtp_rset(SMTPSession *session); */
+static gint smtp_quit(SMTPSession *session);
+static gint smtp_eom(SMTPSession *session);
+
+static gint smtp_session_recv_msg(Session *session, const gchar *msg);
+static gint smtp_session_send_data_finished(Session *session, guint len);
+
+
+Session *smtp_session_new(void)
+{
+ SMTPSession *session;
+
+ session = g_new0(SMTPSession, 1);
+
+ session_init(SESSION(session));
+
+ SESSION(session)->type = SESSION_SMTP;
+
+ SESSION(session)->recv_msg = smtp_session_recv_msg;
+
+ SESSION(session)->recv_data_finished = NULL;
+ SESSION(session)->send_data_finished = smtp_session_send_data_finished;
+
+ SESSION(session)->destroy = smtp_session_destroy;
+
+ session->state = SMTP_READY;
+
+#if USE_SSL
+ session->tls_init_done = FALSE;
+#endif
+
+ session->hostname = NULL;
+ session->user = NULL;
+ session->pass = NULL;
+
+ session->from = NULL;
+ session->to_list = NULL;
+ session->cur_to = NULL;
+
+ session->send_data = NULL;
+ session->send_data_len = 0;
+
+ session->avail_auth_type = 0;
+ session->forced_auth_type = 0;
+ session->auth_type = 0;
+
+ session->error_val = SM_OK;
+ session->error_msg = NULL;
+
+ return SESSION(session);
+}
+
+static void smtp_session_destroy(Session *session)
+{
+ SMTPSession *smtp_session = SMTP_SESSION(session);
+
+ g_free(smtp_session->hostname);
+ g_free(smtp_session->user);
+ g_free(smtp_session->pass);
+ g_free(smtp_session->from);
+
+ g_free(smtp_session->send_data);
+
+ g_free(smtp_session->error_msg);
+}
+
+static gint smtp_from(SMTPSession *session)
+{
+ gchar buf[MSGBUFSIZE];
+
+ g_return_val_if_fail(session->from != NULL, SM_ERROR);
+
+ session->state = SMTP_FROM;
+
+ if (strchr(session->from, '<'))
+ g_snprintf(buf, sizeof(buf), "MAIL FROM:%s", session->from);
+ else
+ g_snprintf(buf, sizeof(buf), "MAIL FROM:<%s>", session->from);
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+ log_print("SMTP> %s\n", buf);
+
+ return SM_OK;
+}
+
+static gint smtp_auth(SMTPSession *session)
+{
+
+ g_return_val_if_fail(session->user != NULL, SM_ERROR);
+
+ session->state = SMTP_AUTH;
+
+ if (session->forced_auth_type == SMTPAUTH_CRAM_MD5 ||
+ (session->forced_auth_type == 0 &&
+ (session->avail_auth_type & SMTPAUTH_CRAM_MD5) != 0))
+ smtp_auth_cram_md5(session);
+ else if (session->forced_auth_type == SMTPAUTH_LOGIN ||
+ (session->forced_auth_type == 0 &&
+ (session->avail_auth_type & SMTPAUTH_LOGIN) != 0))
+ smtp_auth_login(session);
+ else {
+ log_warning(_("SMTP AUTH not available\n"));
+ return SM_AUTHFAIL;
+ }
+
+ return SM_OK;
+}
+
+static gint smtp_auth_recv(SMTPSession *session, const gchar *msg)
+{
+ gchar buf[MSGBUFSIZE];
+
+ switch (session->auth_type) {
+ case SMTPAUTH_LOGIN:
+ session->state = SMTP_AUTH_LOGIN_USER;
+
+ if (!strncmp(msg, "334 ", 4)) {
+ base64_encode(buf, session->user, strlen(session->user));
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL,
+ buf);
+ log_print("ESMTP> [USERID]\n");
+ } else {
+ /* Server rejects AUTH */
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL,
+ "*");
+ log_print("ESMTP> *\n");
+ }
+ break;
+ case SMTPAUTH_CRAM_MD5:
+ session->state = SMTP_AUTH_CRAM_MD5;
+
+ if (!strncmp(msg, "334 ", 4)) {
+ gchar *response;
+ gchar *response64;
+ gchar *challenge;
+ gint challengelen;
+ guchar hexdigest[33];
+
+ challenge = g_malloc(strlen(msg + 4) + 1);
+ challengelen = base64_decode(challenge, msg + 4, -1);
+ challenge[challengelen] = '\0';
+ log_print("ESMTP< [Decoded: %s]\n", challenge);
+
+ g_snprintf(buf, sizeof(buf), "%s", session->pass);
+ md5_hex_hmac(hexdigest, challenge, challengelen,
+ buf, strlen(session->pass));
+ g_free(challenge);
+
+ response = g_strdup_printf
+ ("%s %s", session->user, hexdigest);
+ log_print("ESMTP> [Encoded: %s]\n", response);
+
+ response64 = g_malloc((strlen(response) + 3) * 2 + 1);
+ base64_encode(response64, response, strlen(response));
+ g_free(response);
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL,
+ response64);
+ log_print("ESMTP> %s\n", response64);
+ g_free(response64);
+ } else {
+ /* Server rejects AUTH */
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL,
+ "*");
+ log_print("ESMTP> *\n");
+ }
+ break;
+ case SMTPAUTH_DIGEST_MD5:
+ default:
+ /* stop smtp_auth when no correct authtype */
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "*");
+ log_print("ESMTP> *\n");
+ break;
+ }
+
+ return SM_OK;
+}
+
+static gint smtp_auth_login_user_recv(SMTPSession *session, const gchar *msg)
+{
+ gchar buf[MSGBUFSIZE];
+
+ session->state = SMTP_AUTH_LOGIN_PASS;
+
+ if (!strncmp(msg, "334 ", 4))
+ base64_encode(buf, session->pass, strlen(session->pass));
+ else
+ /* Server rejects AUTH */
+ g_snprintf(buf, sizeof(buf), "*");
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+ log_print("ESMTP> [PASSWORD]\n");
+
+ return SM_OK;
+}
+
+static gint smtp_ehlo(SMTPSession *session)
+{
+ gchar buf[MSGBUFSIZE];
+
+ session->state = SMTP_EHLO;
+
+ session->avail_auth_type = 0;
+
+ g_snprintf(buf, sizeof(buf), "EHLO %s",
+ session->hostname ? session->hostname : get_domain_name());
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+ log_print("ESMTP> %s\n", buf);
+
+ return SM_OK;
+}
+
+static gint smtp_ehlo_recv(SMTPSession *session, const gchar *msg)
+{
+ if (strncmp(msg, "250", 3) == 0) {
+ const gchar *p = msg;
+ p += 3;
+ if (*p == '-' || *p == ' ') p++;
+ if (g_strncasecmp(p, "AUTH", 4) == 0) {
+ p += 5;
+ if (strcasestr(p, "LOGIN"))
+ session->avail_auth_type |= SMTPAUTH_LOGIN;
+ if (strcasestr(p, "CRAM-MD5"))
+ session->avail_auth_type |= SMTPAUTH_CRAM_MD5;
+ if (strcasestr(p, "DIGEST-MD5"))
+ session->avail_auth_type |= SMTPAUTH_DIGEST_MD5;
+ }
+ return SM_OK;
+ } else if ((msg[0] == '1' || msg[0] == '2' || msg[0] == '3') &&
+ (msg[3] == ' ' || msg[3] == '\0'))
+ return SM_OK;
+ else if (msg[0] == '5' && msg[1] == '0' &&
+ (msg[2] == '4' || msg[2] == '3' || msg[2] == '1'))
+ return SM_ERROR;
+
+ return SM_ERROR;
+}
+
+static gint smtp_starttls(SMTPSession *session)
+{
+ session->state = SMTP_STARTTLS;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "STARTTLS");
+ log_print("ESMTP> STARTTLS\n");
+
+ return SM_OK;
+}
+
+static gint smtp_auth_cram_md5(SMTPSession *session)
+{
+ session->state = SMTP_AUTH;
+ session->auth_type = SMTPAUTH_CRAM_MD5;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "AUTH CRAM-MD5");
+ log_print("ESMTP> AUTH CRAM-MD5\n");
+
+ return SM_OK;
+}
+
+static gint smtp_auth_login(SMTPSession *session)
+{
+ session->state = SMTP_AUTH;
+ session->auth_type = SMTPAUTH_LOGIN;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "AUTH LOGIN");
+ log_print("ESMTP> AUTH LOGIN\n");
+
+ return SM_OK;
+}
+
+static gint smtp_helo(SMTPSession *session)
+{
+ gchar buf[MSGBUFSIZE];
+
+ session->state = SMTP_HELO;
+
+ g_snprintf(buf, sizeof(buf), "HELO %s",
+ session->hostname ? session->hostname : get_domain_name());
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+ log_print("SMTP> %s\n", buf);
+
+ return SM_OK;
+}
+
+static gint smtp_rcpt(SMTPSession *session)
+{
+ gchar buf[MSGBUFSIZE];
+ gchar *to;
+
+ g_return_val_if_fail(session->cur_to != NULL, SM_ERROR);
+
+ session->state = SMTP_RCPT;
+
+ to = (gchar *)session->cur_to->data;
+
+ if (strchr(to, '<'))
+ g_snprintf(buf, sizeof(buf), "RCPT TO:%s", to);
+ else
+ g_snprintf(buf, sizeof(buf), "RCPT TO:<%s>", to);
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf);
+ log_print("SMTP> %s\n", buf);
+
+ session->cur_to = session->cur_to->next;
+
+ return SM_OK;
+}
+
+static gint smtp_data(SMTPSession *session)
+{
+ session->state = SMTP_DATA;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "DATA");
+ log_print("SMTP> DATA\n");
+
+ return SM_OK;
+}
+
+static gint smtp_send_data(SMTPSession *session)
+{
+ session->state = SMTP_SEND_DATA;
+
+ session_send_data(SESSION(session), session->send_data,
+ session->send_data_len);
+
+ return SM_OK;
+}
+
+#if 0
+static gint smtp_rset(SMTPSession *session)
+{
+ session->state = SMTP_RSET;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "RSET");
+ log_print("SMTP> RSET\n");
+
+ return SM_OK;
+}
+#endif
+
+static gint smtp_quit(SMTPSession *session)
+{
+ session->state = SMTP_QUIT;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, "QUIT");
+ log_print("SMTP> QUIT\n");
+
+ return SM_OK;
+}
+
+static gint smtp_eom(SMTPSession *session)
+{
+ session->state = SMTP_EOM;
+
+ session_send_msg(SESSION(session), SESSION_MSG_NORMAL, ".");
+ log_print("SMTP> . (EOM)\n");
+
+ return SM_OK;
+}
+
+static gint smtp_session_recv_msg(Session *session, const gchar *msg)
+{
+ SMTPSession *smtp_session = SMTP_SESSION(session);
+ gboolean cont = FALSE;
+
+ if (strlen(msg) < 4) {
+ log_warning(_("bad SMTP response\n"));
+ return -1;
+ }
+
+ switch (smtp_session->state) {
+ case SMTP_EHLO:
+ case SMTP_STARTTLS:
+ case SMTP_AUTH:
+ case SMTP_AUTH_LOGIN_USER:
+ case SMTP_AUTH_LOGIN_PASS:
+ case SMTP_AUTH_CRAM_MD5:
+ log_print("ESMTP< %s\n", msg);
+ break;
+ default:
+ log_print("SMTP< %s\n", msg);
+ break;
+ }
+
+ if (msg[0] == '5' && msg[1] == '0' &&
+ (msg[2] == '4' || msg[2] == '3' || msg[2] == '1')) {
+ log_warning(_("error occurred on SMTP session\n"));
+ smtp_session->state = SMTP_ERROR;
+ smtp_session->error_val = SM_ERROR;
+ g_free(smtp_session->error_msg);
+ smtp_session->error_msg = g_strdup(msg);
+ return -1;
+ }
+
+ if (!strncmp(msg, "535", 3)) {
+ log_warning(_("error occurred on authentication\n"));
+ smtp_session->state = SMTP_ERROR;
+ smtp_session->error_val = SM_AUTHFAIL;
+ g_free(smtp_session->error_msg);
+ smtp_session->error_msg = g_strdup(msg);
+ return -1;
+ }
+
+ if (msg[0] != '1' && msg[0] != '2' && msg[0] != '3') {
+ log_warning(_("error occurred on SMTP session\n"));
+ smtp_session->state = SMTP_ERROR;
+ smtp_session->error_val = SM_ERROR;
+ g_free(smtp_session->error_msg);
+ smtp_session->error_msg = g_strdup(msg);
+ return -1;
+ }
+
+ if (msg[3] == '-')
+ cont = TRUE;
+ else if (msg[3] != ' ' && msg[3] != '\0') {
+ log_warning(_("bad SMTP response\n"));
+ smtp_session->state = SMTP_ERROR;
+ smtp_session->error_val = SM_UNRECOVERABLE;
+ return -1;
+ }
+
+ /* ignore all multiline responses except for EHLO */
+ if (cont && smtp_session->state != SMTP_EHLO)
+ return session_recv_msg(session);
+
+ switch (smtp_session->state) {
+ case SMTP_READY:
+ case SMTP_CONNECTED:
+#if USE_SSL
+ if (smtp_session->user || session->ssl_type != SSL_NONE)
+#else
+ if (smtp_session->user)
+#endif
+ smtp_ehlo(smtp_session);
+ else
+ smtp_helo(smtp_session);
+ break;
+ case SMTP_HELO:
+ smtp_from(smtp_session);
+ break;
+ case SMTP_EHLO:
+ smtp_ehlo_recv(smtp_session, msg);
+ if (cont == TRUE)
+ break;
+#if USE_SSL
+ if (session->ssl_type == SSL_STARTTLS &&
+ smtp_session->tls_init_done == FALSE) {
+ smtp_starttls(smtp_session);
+ break;
+ }
+#endif
+ if (smtp_session->user) {
+ if (smtp_auth(smtp_session) != SM_OK)
+ smtp_from(smtp_session);
+ } else
+ smtp_from(smtp_session);
+ break;
+ case SMTP_STARTTLS:
+#if USE_SSL
+ if (session_start_tls(session) < 0) {
+ log_warning(_("can't start TLS session\n"));
+ smtp_session->state = SMTP_ERROR;
+ smtp_session->error_val = SM_ERROR;
+ return -1;
+ }
+ smtp_session->tls_init_done = TRUE;
+ smtp_ehlo(smtp_session);
+#endif
+ break;
+ case SMTP_AUTH:
+ smtp_auth_recv(smtp_session, msg);
+ break;
+ case SMTP_AUTH_LOGIN_USER:
+ smtp_auth_login_user_recv(smtp_session, msg);
+ break;
+ case SMTP_AUTH_LOGIN_PASS:
+ case SMTP_AUTH_CRAM_MD5:
+ smtp_from(smtp_session);
+ break;
+ case SMTP_FROM:
+ if (smtp_session->cur_to)
+ smtp_rcpt(smtp_session);
+ break;
+ case SMTP_RCPT:
+ if (smtp_session->cur_to)
+ smtp_rcpt(smtp_session);
+ else
+ smtp_data(smtp_session);
+ break;
+ case SMTP_DATA:
+ smtp_send_data(smtp_session);
+ break;
+ case SMTP_EOM:
+ smtp_quit(smtp_session);
+ break;
+ case SMTP_QUIT:
+ session_disconnect(session);
+ break;
+ case SMTP_ERROR:
+ default:
+ log_warning(_("error occurred on SMTP session\n"));
+ smtp_session->error_val = SM_ERROR;
+ return -1;
+ }
+
+ if (cont)
+ return session_recv_msg(session);
+
+ return 0;
+}
+
+static gint smtp_session_send_data_finished(Session *session, guint len)
+{
+ smtp_eom(SMTP_SESSION(session));
+ return 0;
+}
diff --git a/src/smtp.h b/src/smtp.h
new file mode 100644
index 00000000..19629333
--- /dev/null
+++ b/src/smtp.h
@@ -0,0 +1,115 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SMTP_H__
+#define __SMTP_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "session.h"
+
+typedef struct _SMTPSession SMTPSession;
+
+#define SMTP_SESSION(obj) ((SMTPSession *)obj)
+
+#define MSGBUFSIZE 8192
+
+typedef enum
+{
+ SM_OK = 0,
+ SM_ERROR = 128,
+ SM_UNRECOVERABLE = 129,
+ SM_AUTHFAIL = 130
+} SMTPErrorValue;
+
+typedef enum
+{
+ ESMTP_8BITMIME = 1 << 0,
+ ESMTP_SIZE = 1 << 1,
+ ESMTP_ETRN = 1 << 2
+} ESMTPFlag;
+
+typedef enum
+{
+ SMTPAUTH_LOGIN = 1 << 0,
+ SMTPAUTH_CRAM_MD5 = 1 << 1,
+ SMTPAUTH_DIGEST_MD5 = 1 << 2
+} SMTPAuthType;
+
+typedef enum
+{
+ SMTP_READY,
+ SMTP_CONNECTED,
+ SMTP_HELO,
+ SMTP_EHLO,
+ SMTP_STARTTLS,
+ SMTP_FROM,
+ SMTP_AUTH,
+ SMTP_AUTH_LOGIN_USER,
+ SMTP_AUTH_LOGIN_PASS,
+ SMTP_AUTH_CRAM_MD5,
+ SMTP_RCPT,
+ SMTP_DATA,
+ SMTP_SEND_DATA,
+ SMTP_EOM,
+ SMTP_RSET,
+ SMTP_QUIT,
+ SMTP_ERROR,
+ SMTP_DISCONNECTED,
+
+ N_SMTP_PHASE
+} SMTPState;
+
+struct _SMTPSession
+{
+ Session session;
+
+ SMTPState state;
+
+#if USE_SSL
+ gboolean tls_init_done;
+#endif
+
+ gchar *hostname;
+
+ gchar *user;
+ gchar *pass;
+
+ gchar *from;
+ GSList *to_list;
+ GSList *cur_to;
+
+ guchar *send_data;
+ guint send_data_len;
+
+ SMTPAuthType avail_auth_type;
+ SMTPAuthType forced_auth_type;
+ SMTPAuthType auth_type;
+
+ SMTPErrorValue error_val;
+ gchar *error_msg;
+};
+
+Session *smtp_session_new (void);
+
+#endif /* __SMTP_H__ */
diff --git a/src/socket.c b/src/socket.c
new file mode 100644
index 00000000..71810d20
--- /dev/null
+++ b/src/socket.c
@@ -0,0 +1,1293 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <signal.h>
+#include <setjmp.h>
+#if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+
+#include "socket.h"
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+#define BUFFSIZE 8192
+
+typedef gint (*SockAddrFunc) (GList *addr_list,
+ gpointer data);
+
+typedef struct _SockConnectData SockConnectData;
+typedef struct _SockLookupData SockLookupData;
+typedef struct _SockAddrData SockAddrData;
+typedef struct _SockSource SockSource;
+
+struct _SockConnectData {
+ gint id;
+ gchar *hostname;
+ gushort port;
+ GList *addr_list;
+ GList *cur_addr;
+ SockLookupData *lookup_data;
+ GIOChannel *channel;
+ guint io_tag;
+ SockConnectFunc func;
+ gpointer data;
+};
+
+struct _SockLookupData {
+ gchar *hostname;
+ pid_t child_pid;
+ GIOChannel *channel;
+ guint io_tag;
+ SockAddrFunc func;
+ gpointer data;
+};
+
+struct _SockAddrData {
+ gint family;
+ gint socktype;
+ gint protocol;
+ gint addr_len;
+ struct sockaddr *addr;
+};
+
+struct _SockSource {
+ GSource parent;
+ SockInfo *sock;
+};
+
+static guint io_timeout = 60;
+
+static GList *sock_connect_data_list = NULL;
+
+static gboolean sock_prepare (GSource *source,
+ gint *timeout);
+static gboolean sock_check (GSource *source);
+static gboolean sock_dispatch (GSource *source,
+ GSourceFunc callback,
+ gpointer user_data);
+
+GSourceFuncs sock_watch_funcs = {
+ sock_prepare,
+ sock_check,
+ sock_dispatch,
+ NULL
+};
+
+static gint sock_connect_with_timeout (gint sock,
+ const struct sockaddr *serv_addr,
+ gint addrlen,
+ guint timeout_secs);
+
+#ifndef INET6
+static gint sock_connect_by_hostname (gint sock,
+ const gchar *hostname,
+ gushort port);
+#else
+static gint sock_connect_by_getaddrinfo (const gchar *hostname,
+ gushort port);
+#endif
+
+static void sock_address_list_free (GList *addr_list);
+
+static gboolean sock_connect_async_cb (GIOChannel *source,
+ GIOCondition condition,
+ gpointer data);
+static gint sock_connect_async_get_address_info_cb
+ (GList *addr_list,
+ gpointer data);
+
+static gint sock_connect_address_list_async (SockConnectData *conn_data);
+
+static gboolean sock_get_address_info_async_cb (GIOChannel *source,
+ GIOCondition condition,
+ gpointer data);
+static SockLookupData *sock_get_address_info_async
+ (const gchar *hostname,
+ gushort port,
+ SockAddrFunc func,
+ gpointer data);
+static gint sock_get_address_info_async_cancel (SockLookupData *lookup_data);
+
+
+gint sock_set_io_timeout(guint sec)
+{
+ io_timeout = sec;
+ return 0;
+}
+
+gint fd_connect_unix(const gchar *path)
+{
+ gint sock;
+ struct sockaddr_un addr;
+
+ sock = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (sock < 0) {
+ perror("sock_connect_unix(): socket");
+ return -1;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);
+
+ if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ close(sock);
+ return -1;
+ }
+
+ return sock;
+}
+
+gint fd_open_unix(const gchar *path)
+{
+ gint sock;
+ struct sockaddr_un addr;
+
+ sock = socket(PF_UNIX, SOCK_STREAM, 0);
+
+ if (sock < 0) {
+ perror("sock_open_unix(): socket");
+ return -1;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);
+
+ if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ perror("bind");
+ close(sock);
+ return -1;
+ }
+
+ if (listen(sock, 1) < 0) {
+ perror("listen");
+ close(sock);
+ return -1;
+ }
+
+ return sock;
+}
+
+gint fd_accept(gint sock)
+{
+ struct sockaddr_in caddr;
+ gint caddr_len;
+
+ caddr_len = sizeof(caddr);
+ return accept(sock, (struct sockaddr *)&caddr, &caddr_len);
+}
+
+
+static gint set_nonblocking_mode(gint fd, gboolean nonblock)
+{
+ gint flags;
+
+ flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0) {
+ perror("fcntl");
+ return -1;
+ }
+
+ if (nonblock)
+ flags |= O_NONBLOCK;
+ else
+ flags &= ~O_NONBLOCK;
+
+ return fcntl(fd, F_SETFL, flags);
+}
+
+gint sock_set_nonblocking_mode(SockInfo *sock, gboolean nonblock)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+ return set_nonblocking_mode(sock->sock, nonblock);
+}
+
+static gboolean is_nonblocking_mode(gint fd)
+{
+ gint flags;
+
+ flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0) {
+ perror("fcntl");
+ return FALSE;
+ }
+
+ return ((flags & O_NONBLOCK) != 0);
+}
+
+gboolean sock_is_nonblocking_mode(SockInfo *sock)
+{
+ g_return_val_if_fail(sock != NULL, FALSE);
+
+ return is_nonblocking_mode(sock->sock);
+}
+
+
+static gboolean sock_prepare(GSource *source, gint *timeout)
+{
+ *timeout = 1;
+ return FALSE;
+}
+
+static gboolean sock_check(GSource *source)
+{
+ SockInfo *sock = ((SockSource *)source)->sock;
+ struct timeval timeout = {0, 0};
+ fd_set fds;
+ GIOCondition condition = sock->condition;
+
+#if USE_SSL
+ if (sock->ssl) {
+ if (condition & G_IO_IN) {
+ if (SSL_pending(sock->ssl) > 0)
+ return TRUE;
+ if (SSL_want_write(sock->ssl))
+ condition |= G_IO_OUT;
+ }
+
+ if (condition & G_IO_OUT) {
+ if (SSL_want_read(sock->ssl))
+ condition |= G_IO_IN;
+ }
+ }
+#endif
+
+ FD_ZERO(&fds);
+ FD_SET(sock->sock, &fds);
+
+ select(sock->sock + 1,
+ (condition & G_IO_IN) ? &fds : NULL,
+ (condition & G_IO_OUT) ? &fds : NULL,
+ NULL, &timeout);
+
+ return FD_ISSET(sock->sock, &fds) != 0;
+}
+
+static gboolean sock_dispatch(GSource *source, GSourceFunc callback,
+ gpointer user_data)
+{
+ SockInfo *sock = ((SockSource *)source)->sock;
+
+ return sock->callback(sock, sock->condition, sock->data);
+}
+
+static gboolean sock_watch_cb(GIOChannel *source, GIOCondition condition,
+ gpointer data)
+{
+ SockInfo *sock = (SockInfo *)data;
+
+ return sock->callback(sock, condition, sock->data);
+}
+
+guint sock_add_watch(SockInfo *sock, GIOCondition condition, SockFunc func,
+ gpointer data)
+{
+ sock->callback = func;
+ sock->condition = condition;
+ sock->data = data;
+
+#if USE_SSL
+ if (sock->ssl) {
+ GSource *source;
+
+ source = g_source_new(&sock_watch_funcs, sizeof(SockSource));
+ ((SockSource *)source)->sock = sock;
+ g_source_set_priority(source, G_PRIORITY_DEFAULT);
+ g_source_set_can_recurse(source, FALSE);
+ g_source_attach(source, NULL);
+ }
+#endif
+
+ return g_io_add_watch(sock->sock_ch, condition, sock_watch_cb, sock);
+}
+
+static gint fd_check_io(gint fd, GIOCondition cond)
+{
+ struct timeval timeout;
+ fd_set fds;
+
+ if (is_nonblocking_mode(fd))
+ return 0;
+
+ timeout.tv_sec = io_timeout;
+ timeout.tv_usec = 0;
+
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+
+ if (cond == G_IO_IN) {
+ select(fd + 1, &fds, NULL, NULL,
+ io_timeout > 0 ? &timeout : NULL);
+ } else {
+ select(fd + 1, NULL, &fds, NULL,
+ io_timeout > 0 ? &timeout : NULL);
+ }
+
+ if (FD_ISSET(fd, &fds)) {
+ return 0;
+ } else {
+ g_warning("Socket IO timeout\n");
+ return -1;
+ }
+}
+
+static sigjmp_buf jmpenv;
+
+static void timeout_handler(gint sig)
+{
+ siglongjmp(jmpenv, 1);
+}
+
+static gint sock_connect_with_timeout(gint sock,
+ const struct sockaddr *serv_addr,
+ gint addrlen,
+ guint timeout_secs)
+{
+ gint ret;
+ void (*prev_handler)(gint);
+
+ alarm(0);
+ prev_handler = signal(SIGALRM, timeout_handler);
+ if (sigsetjmp(jmpenv, 1)) {
+ alarm(0);
+ signal(SIGALRM, prev_handler);
+ errno = ETIMEDOUT;
+ return -1;
+ }
+ alarm(timeout_secs);
+
+ ret = connect(sock, serv_addr, addrlen);
+
+ alarm(0);
+ signal(SIGALRM, prev_handler);
+
+ return ret;
+}
+
+struct hostent *my_gethostbyname(const gchar *hostname)
+{
+ struct hostent *hp;
+ void (*prev_handler)(gint);
+
+ alarm(0);
+ prev_handler = signal(SIGALRM, timeout_handler);
+ if (sigsetjmp(jmpenv, 1)) {
+ alarm(0);
+ signal(SIGALRM, prev_handler);
+ fprintf(stderr, "%s: host lookup timed out.\n", hostname);
+ errno = 0;
+ return NULL;
+ }
+ alarm(io_timeout);
+
+ if ((hp = gethostbyname(hostname)) == NULL) {
+ alarm(0);
+ signal(SIGALRM, prev_handler);
+ fprintf(stderr, "%s: unknown host.\n", hostname);
+ errno = 0;
+ return NULL;
+ }
+
+ alarm(0);
+ signal(SIGALRM, prev_handler);
+
+ return hp;
+}
+
+#ifndef INET6
+static gint my_inet_aton(const gchar *hostname, struct in_addr *inp)
+{
+#if HAVE_INET_ATON
+ return inet_aton(hostname, inp);
+#else
+#if HAVE_INET_ADDR
+ guint32 inaddr;
+
+ inaddr = inet_addr(hostname);
+ if (inaddr != -1) {
+ memcpy(inp, &inaddr, sizeof(inaddr));
+ return 1;
+ } else
+ return 0;
+#else
+ return 0;
+#endif
+#endif /* HAVE_INET_ATON */
+}
+
+static gint sock_connect_by_hostname(gint sock, const gchar *hostname,
+ gushort port)
+{
+ struct hostent *hp;
+ struct sockaddr_in ad;
+
+ memset(&ad, 0, sizeof(ad));
+ ad.sin_family = AF_INET;
+ ad.sin_port = htons(port);
+
+ if (!my_inet_aton(hostname, &ad.sin_addr)) {
+ if ((hp = my_gethostbyname(hostname)) == NULL) {
+ fprintf(stderr, "%s: unknown host.\n", hostname);
+ errno = 0;
+ return -1;
+ }
+
+ if (hp->h_length != 4 && hp->h_length != 8) {
+ fprintf(stderr, "illegal address length received for host %s\n", hostname);
+ errno = 0;
+ return -1;
+ }
+
+ memcpy(&ad.sin_addr, hp->h_addr, hp->h_length);
+ }
+
+ return sock_connect_with_timeout(sock, (struct sockaddr *)&ad,
+ sizeof(ad), io_timeout);
+}
+
+#else /* INET6 */
+static gint sock_connect_by_getaddrinfo(const gchar *hostname, gushort port)
+{
+ gint sock = -1, gai_error;
+ struct addrinfo hints, *res, *ai;
+ gchar port_str[6];
+
+ memset(&hints, 0, sizeof(hints));
+ /* hints.ai_flags = AI_CANONNAME; */
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = IPPROTO_TCP;
+
+ /* convert port from integer to string. */
+ g_snprintf(port_str, sizeof(port_str), "%d", port);
+
+ if ((gai_error = getaddrinfo(hostname, port_str, &hints, &res)) != 0) {
+ fprintf(stderr, "getaddrinfo for %s:%s failed: %s\n",
+ hostname, port_str, gai_strerror(gai_error));
+ return -1;
+ }
+
+ for (ai = res; ai != NULL; ai = ai->ai_next) {
+ sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (sock < 0)
+ continue;
+
+ if (sock_connect_with_timeout
+ (sock, ai->ai_addr, ai->ai_addrlen, io_timeout) == 0)
+ break;
+
+ close(sock);
+ }
+
+ if (res != NULL)
+ freeaddrinfo(res);
+
+ if (ai == NULL)
+ return -1;
+
+ return sock;
+}
+#endif /* !INET6 */
+
+SockInfo *sock_connect(const gchar *hostname, gushort port)
+{
+ gint sock;
+ SockInfo *sockinfo;
+
+#ifdef INET6
+ if ((sock = sock_connect_by_getaddrinfo(hostname, port)) < 0)
+ return NULL;
+#else
+ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+ perror("socket");
+ return NULL;
+ }
+
+ if (sock_connect_by_hostname(sock, hostname, port) < 0) {
+ if (errno != 0) perror("connect");
+ close(sock);
+ return NULL;
+ }
+#endif /* INET6 */
+
+ sockinfo = g_new0(SockInfo, 1);
+ sockinfo->sock = sock;
+ sockinfo->sock_ch = g_io_channel_unix_new(sock);
+ sockinfo->hostname = g_strdup(hostname);
+ sockinfo->port = port;
+ sockinfo->state = CONN_ESTABLISHED;
+
+ usleep(100000);
+
+ return sockinfo;
+}
+
+static void sock_address_list_free(GList *addr_list)
+{
+ GList *cur;
+
+ for (cur = addr_list; cur != NULL; cur = cur->next) {
+ SockAddrData *addr_data = (SockAddrData *)cur->data;
+ g_free(addr_data->addr);
+ g_free(addr_data);
+ }
+
+ g_list_free(addr_list);
+}
+
+/* asynchronous TCP connection */
+
+static gboolean sock_connect_async_cb(GIOChannel *source,
+ GIOCondition condition, gpointer data)
+{
+ SockConnectData *conn_data = (SockConnectData *)data;
+ gint fd;
+ gint val;
+ gint len;
+ SockInfo *sockinfo;
+
+ fd = g_io_channel_unix_get_fd(source);
+
+ conn_data->io_tag = 0;
+ conn_data->channel = NULL;
+ g_io_channel_unref(source);
+
+ len = sizeof(val);
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &val, &len) < 0) {
+ perror("getsockopt");
+ close(fd);
+ sock_connect_address_list_async(conn_data);
+ return FALSE;
+ }
+
+ if (val != 0) {
+ close(fd);
+ sock_connect_address_list_async(conn_data);
+ return FALSE;
+ }
+
+ sockinfo = g_new0(SockInfo, 1);
+ sockinfo->sock = fd;
+ sockinfo->sock_ch = g_io_channel_unix_new(fd);
+ sockinfo->hostname = g_strdup(conn_data->hostname);
+ sockinfo->port = conn_data->port;
+ sockinfo->state = CONN_ESTABLISHED;
+
+ conn_data->func(sockinfo, conn_data->data);
+
+ sock_connect_async_cancel(conn_data->id);
+
+ return FALSE;
+}
+
+static gint sock_connect_async_get_address_info_cb(GList *addr_list,
+ gpointer data)
+{
+ SockConnectData *conn_data = (SockConnectData *)data;
+
+ conn_data->addr_list = addr_list;
+ conn_data->cur_addr = addr_list;
+ conn_data->lookup_data = NULL;
+
+ return sock_connect_address_list_async(conn_data);
+}
+
+gint sock_connect_async(const gchar *hostname, gushort port,
+ SockConnectFunc func, gpointer data)
+{
+ static gint id = 1;
+ SockConnectData *conn_data;
+
+ conn_data = g_new0(SockConnectData, 1);
+ conn_data->id = id++;
+ conn_data->hostname = g_strdup(hostname);
+ conn_data->port = port;
+ conn_data->addr_list = NULL;
+ conn_data->cur_addr = NULL;
+ conn_data->io_tag = 0;
+ conn_data->func = func;
+ conn_data->data = data;
+
+ conn_data->lookup_data = sock_get_address_info_async
+ (hostname, port, sock_connect_async_get_address_info_cb,
+ conn_data);
+
+ if (conn_data->lookup_data == NULL) {
+ g_free(conn_data->hostname);
+ g_free(conn_data);
+ return -1;
+ }
+
+ sock_connect_data_list = g_list_append(sock_connect_data_list,
+ conn_data);
+
+ return conn_data->id;
+}
+
+gint sock_connect_async_cancel(gint id)
+{
+ SockConnectData *conn_data = NULL;
+ GList *cur;
+
+ for (cur = sock_connect_data_list; cur != NULL; cur = cur->next) {
+ if (((SockConnectData *)cur->data)->id == id) {
+ conn_data = (SockConnectData *)cur->data;
+ break;
+ }
+ }
+
+ if (conn_data) {
+ sock_connect_data_list = g_list_remove(sock_connect_data_list,
+ conn_data);
+
+ if (conn_data->lookup_data)
+ sock_get_address_info_async_cancel
+ (conn_data->lookup_data);
+
+ if (conn_data->io_tag > 0)
+ g_source_remove(conn_data->io_tag);
+ if (conn_data->channel) {
+ g_io_channel_close(conn_data->channel);
+ g_io_channel_unref(conn_data->channel);
+ }
+
+ sock_address_list_free(conn_data->addr_list);
+ g_free(conn_data->hostname);
+ g_free(conn_data);
+ } else {
+ g_warning("sock_connect_async_cancel: id %d not found.\n", id);
+ return -1;
+ }
+
+ return 0;
+}
+
+static gint sock_connect_address_list_async(SockConnectData *conn_data)
+{
+ SockAddrData *addr_data;
+ gint sock = -1;
+
+ for (; conn_data->cur_addr != NULL;
+ conn_data->cur_addr = conn_data->cur_addr->next) {
+ addr_data = (SockAddrData *)conn_data->cur_addr->data;
+
+ if ((sock = socket(addr_data->family, addr_data->socktype,
+ addr_data->protocol)) < 0) {
+ perror("socket");
+ continue;
+ }
+
+ set_nonblocking_mode(sock, TRUE);
+
+ if (connect(sock, addr_data->addr, addr_data->addr_len) < 0) {
+ if (EINPROGRESS == errno) {
+ break;
+ } else {
+ perror("connect");
+ close(sock);
+ }
+ } else
+ break;
+ }
+
+ if (conn_data->cur_addr == NULL) {
+ g_warning("sock_connect_address_list_async: "
+ "connection to %s:%d failed\n",
+ conn_data->hostname, conn_data->port);
+ conn_data->func(NULL, conn_data->data);
+ sock_connect_async_cancel(conn_data->id);
+ return -1;
+ }
+
+ conn_data->cur_addr = conn_data->cur_addr->next;
+
+ conn_data->channel = g_io_channel_unix_new(sock);
+ conn_data->io_tag = g_io_add_watch(conn_data->channel, G_IO_IN|G_IO_OUT,
+ sock_connect_async_cb, conn_data);
+
+ return 0;
+}
+
+/* asynchronous DNS lookup */
+
+static gboolean sock_get_address_info_async_cb(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data)
+{
+ SockLookupData *lookup_data = (SockLookupData *)data;
+ GList *addr_list = NULL;
+ SockAddrData *addr_data;
+ gsize bytes_read;
+ gint ai_member[4];
+ struct sockaddr *addr;
+
+ for (;;) {
+ if (g_io_channel_read(source, (gchar *)ai_member,
+ sizeof(ai_member), &bytes_read)
+ != G_IO_ERROR_NONE) {
+ g_warning("sock_get_address_info_async_cb: "
+ "address length read error\n");
+ break;
+ }
+
+ if (bytes_read == 0 || bytes_read != sizeof(ai_member))
+ break;
+
+ if (ai_member[0] == AF_UNSPEC) {
+ g_warning("DNS lookup failed\n");
+ break;
+ }
+
+ addr = g_malloc(ai_member[3]);
+ if (g_io_channel_read(source, (gchar *)addr, ai_member[3],
+ &bytes_read)
+ != G_IO_ERROR_NONE) {
+ g_warning("sock_get_address_info_async_cb: "
+ "address data read error\n");
+ g_free(addr);
+ break;
+ }
+
+ if (bytes_read != ai_member[3]) {
+ g_warning("sock_get_address_info_async_cb: "
+ "incomplete address data\n");
+ g_free(addr);
+ break;
+ }
+
+ addr_data = g_new0(SockAddrData, 1);
+ addr_data->family = ai_member[0];
+ addr_data->socktype = ai_member[1];
+ addr_data->protocol = ai_member[2];
+ addr_data->addr_len = ai_member[3];
+ addr_data->addr = addr;
+
+ addr_list = g_list_append(addr_list, addr_data);
+ }
+
+ g_io_channel_close(source);
+ g_io_channel_unref(source);
+
+ kill(lookup_data->child_pid, SIGKILL);
+ waitpid(lookup_data->child_pid, NULL, 0);
+
+ lookup_data->func(addr_list, lookup_data->data);
+
+ g_free(lookup_data->hostname);
+ g_free(lookup_data);
+
+ return FALSE;
+}
+
+static SockLookupData *sock_get_address_info_async(const gchar *hostname,
+ gushort port,
+ SockAddrFunc func,
+ gpointer data)
+{
+ SockLookupData *lookup_data = NULL;
+ gint pipe_fds[2];
+ pid_t pid;
+
+ if (pipe(pipe_fds) < 0) {
+ perror("pipe");
+ func(NULL, data);
+ return NULL;
+ }
+
+ if ((pid = fork()) < 0) {
+ perror("fork");
+ func(NULL, data);
+ return NULL;
+ }
+
+ /* child process */
+ if (pid == 0) {
+#ifdef INET6
+ gint gai_err;
+ struct addrinfo hints, *res, *ai;
+ gchar port_str[6];
+#else /* !INET6 */
+ struct hostent *hp;
+ gchar **addr_list_p;
+ struct sockaddr_in ad;
+#endif /* INET6 */
+ gint ai_member[4] = {AF_UNSPEC, 0, 0, 0};
+
+ close(pipe_fds[0]);
+
+#ifdef INET6
+ memset(&hints, 0, sizeof(hints));
+ /* hints.ai_flags = AI_CANONNAME; */
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = IPPROTO_TCP;
+
+ g_snprintf(port_str, sizeof(port_str), "%d", port);
+
+ gai_err = getaddrinfo(hostname, port_str, &hints, &res);
+ if (gai_err != 0) {
+ g_warning("getaddrinfo for %s:%s failed: %s\n",
+ hostname, port_str, gai_strerror(gai_err));
+ fd_write_all(pipe_fds[1], (gchar *)ai_member,
+ sizeof(ai_member));
+ close(pipe_fds[1]);
+ _exit(1);
+ }
+
+ for (ai = res; ai != NULL; ai = ai->ai_next) {
+ ai_member[0] = ai->ai_family;
+ ai_member[1] = ai->ai_socktype;
+ ai_member[2] = ai->ai_protocol;
+ ai_member[3] = ai->ai_addrlen;
+
+ fd_write_all(pipe_fds[1], (gchar *)ai_member,
+ sizeof(ai_member));
+ fd_write_all(pipe_fds[1], (gchar *)ai->ai_addr,
+ ai->ai_addrlen);
+ }
+
+ if (res != NULL)
+ freeaddrinfo(res);
+#else /* !INET6 */
+ hp = my_gethostbyname(hostname);
+ if (hp == NULL || hp->h_addrtype != AF_INET) {
+ fd_write_all(pipe_fds[1], (gchar *)ai_member,
+ sizeof(ai_member));
+ close(pipe_fds[1]);
+ _exit(1);
+ }
+
+ ai_member[0] = AF_INET;
+ ai_member[1] = SOCK_STREAM;
+ ai_member[2] = IPPROTO_TCP;
+ ai_member[3] = sizeof(ad);
+
+ memset(&ad, 0, sizeof(ad));
+ ad.sin_family = AF_INET;
+ ad.sin_port = htons(port);
+
+ for (addr_list_p = hp->h_addr_list; *addr_list_p != NULL;
+ addr_list_p++) {
+ memcpy(&ad.sin_addr, *addr_list_p, hp->h_length);
+ fd_write_all(pipe_fds[1], (gchar *)ai_member,
+ sizeof(ai_member));
+ fd_write_all(pipe_fds[1], (gchar *)&ad, sizeof(ad));
+ }
+#endif /* INET6 */
+
+ close(pipe_fds[1]);
+
+ _exit(0);
+ } else {
+ close(pipe_fds[1]);
+
+ lookup_data = g_new0(SockLookupData, 1);
+ lookup_data->hostname = g_strdup(hostname);
+ lookup_data->child_pid = pid;
+ lookup_data->func = func;
+ lookup_data->data = data;
+
+ lookup_data->channel = g_io_channel_unix_new(pipe_fds[0]);
+ lookup_data->io_tag = g_io_add_watch
+ (lookup_data->channel, G_IO_IN,
+ sock_get_address_info_async_cb, lookup_data);
+ }
+
+ return lookup_data;
+}
+
+static gint sock_get_address_info_async_cancel(SockLookupData *lookup_data)
+{
+ if (lookup_data->io_tag > 0)
+ g_source_remove(lookup_data->io_tag);
+ if (lookup_data->channel) {
+ g_io_channel_close(lookup_data->channel);
+ g_io_channel_unref(lookup_data->channel);
+ }
+
+ if (lookup_data->child_pid > 0) {
+ kill(lookup_data->child_pid, SIGKILL);
+ waitpid(lookup_data->child_pid, NULL, 0);
+ }
+
+ g_free(lookup_data->hostname);
+ g_free(lookup_data);
+
+ return 0;
+}
+
+
+gint sock_printf(SockInfo *sock, const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE];
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ return sock_write_all(sock, buf, strlen(buf));
+}
+
+gint sock_read(SockInfo *sock, gchar *buf, gint len)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_read(sock->ssl, buf, len);
+#endif
+ return fd_read(sock->sock, buf, len);
+}
+
+gint fd_read(gint fd, gchar *buf, gint len)
+{
+ if (fd_check_io(fd, G_IO_IN) < 0)
+ return -1;
+
+ return read(fd, buf, len);
+}
+
+#if USE_SSL
+gint ssl_read(SSL *ssl, gchar *buf, gint len)
+{
+ gint ret;
+
+ if (SSL_pending(ssl) == 0) {
+ if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
+ return -1;
+ }
+
+ ret = SSL_read(ssl, buf, len);
+
+ switch (SSL_get_error(ssl, ret)) {
+ case SSL_ERROR_NONE:
+ return ret;
+ case SSL_ERROR_WANT_READ:
+ case SSL_ERROR_WANT_WRITE:
+ errno = EAGAIN;
+ return -1;
+ default:
+ return -1;
+ }
+}
+#endif
+
+gint sock_write(SockInfo *sock, const gchar *buf, gint len)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_write(sock->ssl, buf, len);
+#endif
+ return fd_write(sock->sock, buf, len);
+}
+
+gint fd_write(gint fd, const gchar *buf, gint len)
+{
+ if (fd_check_io(fd, G_IO_OUT) < 0)
+ return -1;
+
+ return write(fd, buf, len);
+}
+
+#if USE_SSL
+gint ssl_write(SSL *ssl, const gchar *buf, gint len)
+{
+ gint ret;
+
+ ret = SSL_write(ssl, buf, len);
+
+ switch (SSL_get_error(ssl, ret)) {
+ case SSL_ERROR_NONE:
+ return ret;
+ case SSL_ERROR_WANT_READ:
+ case SSL_ERROR_WANT_WRITE:
+ errno = EAGAIN;
+ return -1;
+ default:
+ return -1;
+ }
+}
+#endif
+
+gint sock_write_all(SockInfo *sock, const gchar *buf, gint len)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_write_all(sock->ssl, buf, len);
+#endif
+ return fd_write_all(sock->sock, buf, len);
+}
+
+gint fd_write_all(gint fd, const gchar *buf, gint len)
+{
+ gint n, wrlen = 0;
+
+ while (len) {
+ if (fd_check_io(fd, G_IO_OUT) < 0)
+ return -1;
+ n = write(fd, buf, len);
+ if (n <= 0)
+ return -1;
+ len -= n;
+ wrlen += n;
+ buf += n;
+ }
+
+ return wrlen;
+}
+
+#if USE_SSL
+gint ssl_write_all(SSL *ssl, const gchar *buf, gint len)
+{
+ gint n, wrlen = 0;
+
+ while (len) {
+ n = ssl_write(ssl, buf, len);
+ if (n <= 0)
+ return -1;
+ len -= n;
+ wrlen += n;
+ buf += n;
+ }
+
+ return wrlen;
+}
+#endif
+
+gint fd_recv(gint fd, gchar *buf, gint len, gint flags)
+{
+ if (fd_check_io(fd, G_IO_IN) < 0)
+ return -1;
+
+ return recv(fd, buf, len, flags);
+}
+
+gint fd_gets(gint fd, gchar *buf, gint len)
+{
+ gchar *newline, *bp = buf;
+ gint n;
+
+ if (--len < 1)
+ return -1;
+ do {
+ if ((n = fd_recv(fd, bp, len, MSG_PEEK)) <= 0)
+ return -1;
+ if ((newline = memchr(bp, '\n', n)) != NULL)
+ n = newline - bp + 1;
+ if ((n = fd_read(fd, bp, n)) < 0)
+ return -1;
+ bp += n;
+ len -= n;
+ } while (!newline && len);
+
+ *bp = '\0';
+ return bp - buf;
+}
+
+#if USE_SSL
+gint ssl_gets(SSL *ssl, gchar *buf, gint len)
+{
+ gchar *newline, *bp = buf;
+ gint n;
+
+ if (--len < 1)
+ return -1;
+ do {
+ if ((n = ssl_peek(ssl, bp, len)) <= 0)
+ return -1;
+ if ((newline = memchr(bp, '\n', n)) != NULL)
+ n = newline - bp + 1;
+ if ((n = ssl_read(ssl, bp, n)) < 0)
+ return -1;
+ bp += n;
+ len -= n;
+ } while (!newline && len);
+
+ *bp = '\0';
+ return bp - buf;
+}
+#endif
+
+gint sock_gets(SockInfo *sock, gchar *buf, gint len)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_gets(sock->ssl, buf, len);
+#endif
+ return fd_gets(sock->sock, buf, len);
+}
+
+gchar *fd_getline(gint fd)
+{
+ gchar buf[BUFFSIZE];
+ gchar *str = NULL;
+ gint len;
+ gulong size = 1;
+
+ while ((len = fd_gets(fd, buf, sizeof(buf))) > 0) {
+ size += len;
+ if (!str)
+ str = g_strdup(buf);
+ else {
+ str = g_realloc(str, size);
+ strcat(str, buf);
+ }
+ if (buf[len - 1] == '\n')
+ break;
+ }
+
+ return str;
+}
+
+#if USE_SSL
+gchar *ssl_getline(SSL *ssl)
+{
+ gchar buf[BUFFSIZE];
+ gchar *str = NULL;
+ gint len;
+ gulong size = 1;
+
+ while ((len = ssl_gets(ssl, buf, sizeof(buf))) > 0) {
+ size += len;
+ if (!str)
+ str = g_strdup(buf);
+ else {
+ str = g_realloc(str, size);
+ strcat(str, buf);
+ }
+ if (buf[len - 1] == '\n')
+ break;
+ }
+
+ return str;
+}
+#endif
+
+gchar *sock_getline(SockInfo *sock)
+{
+ g_return_val_if_fail(sock != NULL, NULL);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_getline(sock->ssl);
+#endif
+ return fd_getline(sock->sock);
+}
+
+gint sock_puts(SockInfo *sock, const gchar *buf)
+{
+ gint ret;
+
+ if ((ret = sock_write_all(sock, buf, strlen(buf))) < 0)
+ return ret;
+ return sock_write_all(sock, "\r\n", 2);
+}
+
+/* peek at the socket data without actually reading it */
+#if USE_SSL
+gint ssl_peek(SSL *ssl, gchar *buf, gint len)
+{
+ gint ret;
+
+ if (SSL_pending(ssl) == 0) {
+ if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
+ return -1;
+ }
+
+ ret = SSL_peek(ssl, buf, len);
+
+ switch (SSL_get_error(ssl, ret)) {
+ case SSL_ERROR_NONE:
+ return ret;
+ case SSL_ERROR_WANT_READ:
+ case SSL_ERROR_WANT_WRITE:
+ errno = EAGAIN;
+ return -1;
+ default:
+ return -1;
+ }
+}
+#endif
+
+gint sock_peek(SockInfo *sock, gchar *buf, gint len)
+{
+ g_return_val_if_fail(sock != NULL, -1);
+
+#if USE_SSL
+ if (sock->ssl)
+ return ssl_peek(sock->ssl, buf, len);
+#endif
+ return fd_recv(sock->sock, buf, len, MSG_PEEK);
+}
+
+gint sock_close(SockInfo *sock)
+{
+ gint ret;
+
+ if (!sock)
+ return 0;
+
+ if (sock->sock_ch)
+ g_io_channel_unref(sock->sock_ch);
+
+#if USE_SSL
+ if (sock->ssl)
+ ssl_done_socket(sock);
+#endif
+ ret = fd_close(sock->sock);
+ g_free(sock->hostname);
+ g_free(sock);
+
+ return ret;
+}
+
+gint fd_close(gint fd)
+{
+ return close(fd);
+}
diff --git a/src/socket.h b/src/socket.h
new file mode 100644
index 00000000..05c43b89
--- /dev/null
+++ b/src/socket.h
@@ -0,0 +1,117 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SOCKET_H__
+#define __SOCKET_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <netdb.h>
+
+typedef struct _SockInfo SockInfo;
+
+#if USE_SSL
+# include "ssl.h"
+#endif
+
+typedef enum
+{
+ CONN_READY,
+ CONN_LOOKUPSUCCESS,
+ CONN_ESTABLISHED,
+ CONN_LOOKUPFAILED,
+ CONN_FAILED
+} ConnectionState;
+
+typedef gint (*SockConnectFunc) (SockInfo *sock,
+ gpointer data);
+typedef gboolean (*SockFunc) (SockInfo *sock,
+ GIOCondition condition,
+ gpointer data);
+
+struct _SockInfo
+{
+ gint sock;
+#if USE_SSL
+ SSL *ssl;
+#endif
+ GIOChannel *sock_ch;
+
+ gchar *hostname;
+ gushort port;
+ ConnectionState state;
+ gpointer data;
+
+ SockFunc callback;
+ GIOCondition condition;
+};
+
+gint sock_set_io_timeout (guint sec);
+
+gint sock_set_nonblocking_mode (SockInfo *sock, gboolean nonblock);
+gboolean sock_is_nonblocking_mode (SockInfo *sock);
+
+guint sock_add_watch (SockInfo *sock, GIOCondition condition,
+ SockFunc func, gpointer data);
+
+struct hostent *my_gethostbyname (const gchar *hostname);
+
+SockInfo *sock_connect (const gchar *hostname, gushort port);
+gint sock_connect_async (const gchar *hostname, gushort port,
+ SockConnectFunc func, gpointer data);
+gint sock_connect_async_cancel (gint id);
+
+/* Basic I/O functions */
+gint sock_printf (SockInfo *sock, const gchar *format, ...)
+ G_GNUC_PRINTF(2, 3);
+gint sock_read (SockInfo *sock, gchar *buf, gint len);
+gint sock_write (SockInfo *sock, const gchar *buf, gint len);
+gint sock_write_all (SockInfo *sock, const gchar *buf, gint len);
+gint sock_gets (SockInfo *sock, gchar *buf, gint len);
+gchar *sock_getline (SockInfo *sock);
+gint sock_puts (SockInfo *sock, const gchar *buf);
+gint sock_peek (SockInfo *sock, gchar *buf, gint len);
+gint sock_close (SockInfo *sock);
+
+/* Functions to directly work on FD. They are needed for pipes */
+gint fd_connect_unix (const gchar *path);
+gint fd_open_unix (const gchar *path);
+gint fd_accept (gint sock);
+
+gint fd_read (gint sock, gchar *buf, gint len);
+gint fd_write (gint sock, const gchar *buf, gint len);
+gint fd_write_all (gint sock, const gchar *buf, gint len);
+gint fd_gets (gint sock, gchar *buf, gint len);
+gchar *fd_getline (gint sock);
+gint fd_close (gint sock);
+
+/* Functions for SSL */
+#if USE_SSL
+gint ssl_read (SSL *ssl, gchar *buf, gint len);
+gint ssl_write (SSL *ssl, const gchar *buf, gint len);
+gint ssl_write_all (SSL *ssl, const gchar *buf, gint len);
+gint ssl_gets (SSL *ssl, gchar *buf, gint len);
+gchar *ssl_getline (SSL *ssl);
+gint ssl_peek (SSL *ssl, gchar *buf, gint len);
+#endif
+
+#endif /* __SOCKET_H__ */
diff --git a/src/sourcewindow.c b/src/sourcewindow.c
new file mode 100644
index 00000000..069ce7fb
--- /dev/null
+++ b/src/sourcewindow.c
@@ -0,0 +1,183 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkstyle.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "sourcewindow.h"
+#include "procmsg.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "prefs_common.h"
+
+static void source_window_size_alloc_cb (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void source_window_destroy_cb (GtkWidget *widget,
+ SourceWindow *sourcewin);
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ SourceWindow *sourcewin);
+
+static void source_window_init()
+{
+}
+
+SourceWindow *source_window_create(void)
+{
+ SourceWindow *sourcewin;
+ GtkWidget *window;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+ static PangoFontDescription *font_desc = NULL;
+
+ debug_print(_("Creating source window...\n"));
+ sourcewin = g_new0(SourceWindow, 1);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), _("Source of the message"));
+ gtk_window_set_wmclass(GTK_WINDOW(window), "source_window", "Sylpheed");
+ gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+ gtk_widget_set_size_request(window, prefs_common.sourcewin_width,
+ prefs_common.sourcewin_height);
+ g_signal_connect(G_OBJECT(window), "size_allocate",
+ G_CALLBACK(source_window_size_alloc_cb), sourcewin);
+ g_signal_connect(G_OBJECT(window), "destroy",
+ G_CALLBACK(source_window_destroy_cb), sourcewin);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), sourcewin);
+ gtk_widget_realize(window);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+ gtk_container_add(GTK_CONTAINER(window), scrolledwin);
+ gtk_widget_show(scrolledwin);
+
+ text = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
+ if (!font_desc && prefs_common.textfont)
+ font_desc = pango_font_description_from_string
+ (prefs_common.textfont);
+ if (font_desc)
+ gtk_widget_modify_font(text, font_desc);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+ gtk_widget_show(text);
+
+ sourcewin->window = window;
+ sourcewin->scrolledwin = scrolledwin;
+ sourcewin->text = text;
+
+ source_window_init();
+
+ return sourcewin;
+}
+
+void source_window_show(SourceWindow *sourcewin)
+{
+ gtk_widget_show_all(sourcewin->window);
+}
+
+void source_window_destroy(SourceWindow *sourcewin)
+{
+ g_free(sourcewin);
+}
+
+void source_window_show_msg(SourceWindow *sourcewin, MsgInfo *msginfo)
+{
+ gchar *file;
+ gchar *title;
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+
+ g_return_if_fail(msginfo != NULL);
+
+ file = procmsg_get_message_file(msginfo);
+ g_return_if_fail(file != NULL);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ g_free(file);
+ return;
+ }
+
+ debug_print(_("Displaying the source of %s ...\n"), file);
+
+ title = g_strdup_printf(_("%s - Source"), file);
+ gtk_window_set_title(GTK_WINDOW(sourcewin->window), title);
+ g_free(title);
+ g_free(file);
+
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ source_window_append(sourcewin, buf);
+
+ fclose(fp);
+}
+
+void source_window_append(SourceWindow *sourcewin, const gchar *str)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(sourcewin->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar *out;
+ gint len;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ len = strlen(str) + 1;
+ Xalloca(out, len, return);
+#warning FIXME_GTK2
+ conv_localetodisp(out, len, str);
+
+ gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1);
+ gtk_text_buffer_insert(buffer, &iter, out, -1);
+}
+
+static void source_window_size_alloc_cb(GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ g_return_if_fail(allocation != NULL);
+
+ prefs_common.sourcewin_width = allocation->width;
+ prefs_common.sourcewin_height = allocation->height;
+}
+
+static void source_window_destroy_cb(GtkWidget *widget,
+ SourceWindow *sourcewin)
+{
+ source_window_destroy(sourcewin);
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ SourceWindow *sourcewin)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_destroy(sourcewin->window);
+ return FALSE;
+}
diff --git a/src/sourcewindow.h b/src/sourcewindow.h
new file mode 100644
index 00000000..a50a1329
--- /dev/null
+++ b/src/sourcewindow.h
@@ -0,0 +1,45 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SOURCEWINDOW_H__
+#define __SOURCEWINDOW_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+#include "procmsg.h"
+
+typedef struct _SourceWindow SourceWindow;
+
+struct _SourceWindow
+{
+ GtkWidget *window;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+};
+
+SourceWindow *source_window_create (void);
+void source_window_show (SourceWindow *sourcewin);
+void source_window_destroy (SourceWindow *sourcewin);
+void source_window_show_msg (SourceWindow *sourcewin,
+ MsgInfo *msginfo);
+void source_window_append (SourceWindow *sourcewin,
+ const gchar *str);
+
+#endif /* __SOURCEWINDOW_H__ */
diff --git a/src/ssl.c b/src/ssl.c
new file mode 100644
index 00000000..17ce8934
--- /dev/null
+++ b/src/ssl.c
@@ -0,0 +1,146 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if USE_SSL
+
+#include "defs.h"
+
+#include <glib.h>
+
+#include "intl.h"
+#include "utils.h"
+#include "ssl.h"
+
+static SSL_CTX *ssl_ctx_SSLv23;
+static SSL_CTX *ssl_ctx_TLSv1;
+
+void ssl_init(void)
+{
+ SSL_library_init();
+ SSL_load_error_strings();
+
+ ssl_ctx_SSLv23 = SSL_CTX_new(SSLv23_client_method());
+ if (ssl_ctx_SSLv23 == NULL) {
+ debug_print(_("SSLv23 not available\n"));
+ } else {
+ debug_print(_("SSLv23 available\n"));
+ }
+
+ ssl_ctx_TLSv1 = SSL_CTX_new(TLSv1_client_method());
+ if (ssl_ctx_TLSv1 == NULL) {
+ debug_print(_("TLSv1 not available\n"));
+ } else {
+ debug_print(_("TLSv1 available\n"));
+ }
+}
+
+void ssl_done(void)
+{
+ if (ssl_ctx_SSLv23) {
+ SSL_CTX_free(ssl_ctx_SSLv23);
+ }
+
+ if (ssl_ctx_TLSv1) {
+ SSL_CTX_free(ssl_ctx_TLSv1);
+ }
+}
+
+gboolean ssl_init_socket(SockInfo *sockinfo)
+{
+ return ssl_init_socket_with_method(sockinfo, SSL_METHOD_SSLv23);
+}
+
+gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
+{
+ X509 *server_cert;
+ gint ret;
+
+ switch (method) {
+ case SSL_METHOD_SSLv23:
+ if (!ssl_ctx_SSLv23) {
+ g_warning(_("SSL method not available\n"));
+ return FALSE;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_SSLv23);
+ break;
+ case SSL_METHOD_TLSv1:
+ if (!ssl_ctx_TLSv1) {
+ g_warning(_("SSL method not available\n"));
+ return FALSE;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_TLSv1);
+ break;
+ default:
+ g_warning(_("Unknown SSL method *PROGRAM BUG*\n"));
+ return FALSE;
+ break;
+ }
+
+ if (sockinfo->ssl == NULL) {
+ g_warning(_("Error creating ssl context\n"));
+ return FALSE;
+ }
+
+ SSL_set_fd(sockinfo->ssl, sockinfo->sock);
+ if ((ret = SSL_connect(sockinfo->ssl)) == -1) {
+ g_warning(_("SSL connect failed (%s)\n"),
+ ERR_error_string(ERR_get_error(), NULL));
+ return FALSE;
+ }
+
+ /* Get the cipher */
+
+ debug_print(_("SSL connection using %s\n"),
+ SSL_get_cipher(sockinfo->ssl));
+
+ /* Get server's certificate (note: beware of dynamic allocation) */
+
+ if ((server_cert = SSL_get_peer_certificate(sockinfo->ssl)) != NULL) {
+ gchar *str;
+
+ debug_print(_("Server certificate:\n"));
+
+ if ((str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0)) != NULL) {
+ debug_print(_(" Subject: %s\n"), str);
+ free(str);
+ }
+
+ if ((str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0)) != NULL) {
+ debug_print(_(" Issuer: %s\n"), str);
+ free(str);
+ }
+
+ X509_free(server_cert);
+ }
+
+ return TRUE;
+}
+
+void ssl_done_socket(SockInfo *sockinfo)
+{
+ if (sockinfo->ssl) {
+ SSL_free(sockinfo->ssl);
+ }
+}
+
+#endif /* USE_SSL */
diff --git a/src/ssl.h b/src/ssl.h
new file mode 100644
index 00000000..6c13ddac
--- /dev/null
+++ b/src/ssl.h
@@ -0,0 +1,58 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SSL_H__
+#define __SSL_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if USE_SSL
+
+#include <glib.h>
+#include <openssl/crypto.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+#include "socket.h"
+
+typedef enum {
+ SSL_METHOD_SSLv23,
+ SSL_METHOD_TLSv1
+} SSLMethod;
+
+typedef enum {
+ SSL_NONE,
+ SSL_TUNNEL,
+ SSL_STARTTLS
+} SSLType;
+
+void ssl_init (void);
+void ssl_done (void);
+gboolean ssl_init_socket (SockInfo *sockinfo);
+gboolean ssl_init_socket_with_method (SockInfo *sockinfo,
+ SSLMethod method);
+void ssl_done_socket (SockInfo *sockinfo);
+
+#endif /* USE_SSL */
+
+#endif /* __SSL_H__ */
diff --git a/src/statusbar.c b/src/statusbar.c
new file mode 100644
index 00000000..38d1377f
--- /dev/null
+++ b/src/statusbar.c
@@ -0,0 +1,125 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkstatusbar.h>
+#include <stdarg.h>
+
+#include "intl.h"
+#include "statusbar.h"
+#include "gtkutils.h"
+#include "utils.h"
+
+#define BUFFSIZE 1024
+
+static GList *statusbar_list = NULL;
+
+GtkWidget *statusbar_create(void)
+{
+ GtkWidget *statusbar;
+
+ statusbar = gtk_statusbar_new();
+ gtk_widget_set_usize(statusbar, 1, -1);
+ statusbar_list = g_list_append(statusbar_list, statusbar);
+
+ return statusbar;
+}
+
+void statusbar_puts(GtkStatusbar *statusbar, const gchar *str)
+{
+ gint cid;
+ gchar *buf;
+
+ buf = g_strdup(str);
+ strretchomp(buf);
+ if (strlen(buf) > 76) {
+ wchar_t *wbuf;
+
+ wbuf = strdup_mbstowcs(buf);
+
+ if (wcslen(wbuf) > 60) {
+ gchar *tmp;
+
+ g_free(buf);
+ wbuf[60] = (wchar_t)0;
+ tmp = strdup_wcstombs(wbuf);
+ buf = g_strconcat(tmp, "...", NULL);
+ g_free(tmp);
+ }
+
+ g_free(wbuf);
+ }
+
+ cid = gtk_statusbar_get_context_id(statusbar, "Standard Output");
+ gtk_statusbar_pop(statusbar, cid);
+ gtk_statusbar_push(statusbar, cid, buf);
+ gtkut_widget_wait_for_draw(GTK_WIDGET(statusbar)->parent);
+
+ g_free(buf);
+}
+
+void statusbar_puts_all(const gchar *str)
+{
+ GList *cur;
+
+ for (cur = statusbar_list; cur != NULL; cur = cur->next)
+ statusbar_puts(GTK_STATUSBAR(cur->data), str);
+}
+
+void statusbar_print(GtkStatusbar *statusbar, const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE];
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ statusbar_puts(statusbar, buf);
+}
+
+void statusbar_print_all(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE];
+ GList *cur;
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ for (cur = statusbar_list; cur != NULL; cur = cur->next)
+ statusbar_puts(GTK_STATUSBAR(cur->data), buf);
+}
+
+void statusbar_pop_all(void)
+{
+ GList *cur;
+ gint cid;
+
+ for (cur = statusbar_list; cur != NULL; cur = cur->next) {
+ cid = gtk_statusbar_get_context_id(GTK_STATUSBAR(cur->data),
+ "Standard Output");
+ gtk_statusbar_pop(GTK_STATUSBAR(cur->data), cid);
+ }
+}
diff --git a/src/statusbar.h b/src/statusbar.h
new file mode 100644
index 00000000..991b672b
--- /dev/null
+++ b/src/statusbar.h
@@ -0,0 +1,38 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __STATUSBAR_H__
+#define __STATUSBAR_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkstatusbar.h>
+
+GtkWidget *statusbar_create (void);
+void statusbar_puts (GtkStatusbar *statusbar,
+ const gchar *str);
+void statusbar_puts_all (const gchar *str);
+void statusbar_print (GtkStatusbar *statusbar,
+ const gchar *format, ...)
+ G_GNUC_PRINTF(2, 3);
+void statusbar_print_all (const gchar *format, ...)
+ G_GNUC_PRINTF(1, 2);
+void statusbar_pop_all (void);
+
+#endif /* __STATUSBAR_H__ */
diff --git a/src/stock_pixmap.c b/src/stock_pixmap.c
new file mode 100644
index 00000000..ca5c98b6
--- /dev/null
+++ b/src/stock_pixmap.c
@@ -0,0 +1,185 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkpixmap.h>
+
+#include "stock_pixmap.h"
+#include "gtkutils.h"
+
+#include "pixmaps/address.xpm"
+#include "pixmaps/book.xpm"
+#include "pixmaps/category.xpm"
+#include "pixmaps/checkbox_off.xpm"
+#include "pixmaps/checkbox_on.xpm"
+#include "pixmaps/clip.xpm"
+#include "pixmaps/complete.xpm"
+#include "pixmaps/continue.xpm"
+#include "pixmaps/deleted.xpm"
+#include "pixmaps/dir-close.xpm"
+#include "pixmaps/dir-open.xpm"
+#include "pixmaps/dir-noselect.xpm"
+#include "pixmaps/error.xpm"
+#include "pixmaps/forwarded.xpm"
+#include "pixmaps/group.xpm"
+#include "pixmaps/inbox.xpm"
+#include "pixmaps/interface.xpm"
+#include "pixmaps/jpilot.xpm"
+#include "pixmaps/ldap.xpm"
+#include "pixmaps/linewrap.xpm"
+#include "pixmaps/mark.xpm"
+#include "pixmaps/new.xpm"
+#include "pixmaps/outbox.xpm"
+#include "pixmaps/replied.xpm"
+#include "pixmaps/stock_close.xpm"
+#include "pixmaps/stock_down_arrow.xpm"
+#include "pixmaps/stock_exec.xpm"
+#include "pixmaps/stock_mail.xpm"
+#include "pixmaps/stock_mail_attach.xpm"
+#include "pixmaps/stock_mail_compose.xpm"
+#include "pixmaps/stock_mail_forward.xpm"
+#include "pixmaps/stock_mail_receive.xpm"
+#include "pixmaps/stock_mail_receive_all.xpm"
+#include "pixmaps/stock_mail_reply.xpm"
+#include "pixmaps/stock_mail_reply_to_all.xpm"
+#include "pixmaps/stock_mail_send.xpm"
+#include "pixmaps/stock_mail_send_queue.xpm"
+#include "pixmaps/stock_paste.xpm"
+#include "pixmaps/stock_preferences.xpm"
+#include "pixmaps/stock_properties.xpm"
+#include "pixmaps/sylpheed-logo.xpm"
+#include "pixmaps/tb_address_book.xpm"
+#include "pixmaps/trash.xpm"
+#include "pixmaps/unread.xpm"
+#include "pixmaps/vcard.xpm"
+#include "pixmaps/online.xpm"
+#include "pixmaps/offline.xpm"
+#include "pixmaps/stock_dialog_info_48.xpm"
+#include "pixmaps/stock_dialog_question_48.xpm"
+#include "pixmaps/stock_dialog_warning_48.xpm"
+#include "pixmaps/stock_dialog_error_48.xpm"
+#include "pixmaps/stock_add_16.xpm"
+#include "pixmaps/stock_remove_16.xpm"
+#include "pixmaps/mail.xpm"
+
+typedef struct _StockPixmapData StockPixmapData;
+
+struct _StockPixmapData
+{
+ gchar **data;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+};
+
+static StockPixmapData pixmaps[] =
+{
+ {address_xpm , NULL, NULL},
+ {book_xpm , NULL, NULL},
+ {category_xpm , NULL, NULL},
+ {checkbox_off_xpm , NULL, NULL},
+ {checkbox_on_xpm , NULL, NULL},
+ {clip_xpm , NULL, NULL},
+ {complete_xpm , NULL, NULL},
+ {continue_xpm , NULL, NULL},
+ {deleted_xpm , NULL, NULL},
+ {dir_close_xpm , NULL, NULL},
+ {dir_open_xpm , NULL, NULL},
+ {dir_noselect_xpm , NULL, NULL},
+ {error_xpm , NULL, NULL},
+ {forwarded_xpm , NULL, NULL},
+ {group_xpm , NULL, NULL},
+ {inbox_xpm , NULL, NULL},
+ {interface_xpm , NULL, NULL},
+ {jpilot_xpm , NULL, NULL},
+ {ldap_xpm , NULL, NULL},
+ {linewrap_xpm , NULL, NULL},
+ {mark_xpm , NULL, NULL},
+ {new_xpm , NULL, NULL},
+ {outbox_xpm , NULL, NULL},
+ {replied_xpm , NULL, NULL},
+ {stock_close_xpm , NULL, NULL},
+ {stock_down_arrow_xpm , NULL, NULL},
+ {stock_exec_xpm , NULL, NULL},
+ {stock_mail_xpm , NULL, NULL},
+ {stock_mail_attach_xpm , NULL, NULL},
+ {stock_mail_compose_xpm , NULL, NULL},
+ {stock_mail_forward_xpm , NULL, NULL},
+ {stock_mail_receive_xpm , NULL, NULL},
+ {stock_mail_receive_all_xpm , NULL, NULL},
+ {stock_mail_reply_xpm , NULL, NULL},
+ {stock_mail_reply_to_all_xpm , NULL, NULL},
+ {stock_mail_send_xpm , NULL, NULL},
+ {stock_mail_send_queue_xpm , NULL, NULL},
+ {stock_paste_xpm , NULL, NULL},
+ {stock_preferences_xpm , NULL, NULL},
+ {stock_properties_xpm , NULL, NULL},
+ {sylpheed_logo_xpm , NULL, NULL},
+ {tb_address_book_xpm , NULL, NULL},
+ {trash_xpm , NULL, NULL},
+ {unread_xpm , NULL, NULL},
+ {vcard_xpm , NULL, NULL},
+ {online_xpm , NULL, NULL},
+ {offline_xpm , NULL, NULL},
+ {stock_dialog_info_48_xpm , NULL, NULL},
+ {stock_dialog_question_48_xpm , NULL, NULL},
+ {stock_dialog_warning_48_xpm , NULL, NULL},
+ {stock_dialog_error_48_xpm , NULL, NULL},
+ {stock_add_16_xpm , NULL, NULL},
+ {stock_remove_16_xpm , NULL, NULL},
+ {mail_xpm , NULL, NULL},
+};
+
+/* return newly constructed GtkPixmap from GdkPixmap */
+GtkWidget *stock_pixmap_widget(GtkWidget *window, StockPixmap icon)
+{
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+
+ g_return_val_if_fail(window != NULL, NULL);
+ g_return_val_if_fail(icon >= 0 && icon < N_STOCK_PIXMAPS, NULL);
+
+ stock_pixmap_gdk(window, icon, &pixmap, &mask);
+ return gtk_pixmap_new(pixmap, mask);
+}
+
+/* create GdkPixmap if it has not created yet */
+gint stock_pixmap_gdk(GtkWidget *window, StockPixmap icon,
+ GdkPixmap **pixmap, GdkBitmap **mask)
+{
+ StockPixmapData *pix_d;
+
+ if (pixmap) *pixmap = NULL;
+ if (mask) *mask = NULL;
+
+ g_return_val_if_fail(window != NULL, -1);
+ g_return_val_if_fail(icon >= 0 && icon < N_STOCK_PIXMAPS, -1);
+
+ pix_d = &pixmaps[icon];
+
+ if (!pix_d->pixmap) {
+ PIXMAP_CREATE(window, pix_d->pixmap, pix_d->mask,
+ pix_d->data);
+ }
+
+ if (pixmap) *pixmap = pix_d->pixmap;
+ if (mask) *mask = pix_d->mask;
+
+ return 0;
+}
diff --git a/src/stock_pixmap.h b/src/stock_pixmap.h
new file mode 100644
index 00000000..a296906d
--- /dev/null
+++ b/src/stock_pixmap.h
@@ -0,0 +1,93 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __STOCK_PIXMAP_H__
+#define __STOCK_PIXMAP_H__
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef enum
+{
+ STOCK_PIXMAP_ADDRESS,
+ STOCK_PIXMAP_BOOK,
+ STOCK_PIXMAP_CATEGORY,
+ STOCK_PIXMAP_CHECKBOX_OFF,
+ STOCK_PIXMAP_CHECKBOX_ON,
+ STOCK_PIXMAP_CLIP,
+ STOCK_PIXMAP_COMPLETE,
+ STOCK_PIXMAP_CONTINUE,
+ STOCK_PIXMAP_DELETED,
+ STOCK_PIXMAP_DIR_CLOSE,
+ STOCK_PIXMAP_DIR_OPEN,
+ STOCK_PIXMAP_DIR_NOSELECT,
+ STOCK_PIXMAP_ERROR,
+ STOCK_PIXMAP_FORWARDED,
+ STOCK_PIXMAP_GROUP,
+ STOCK_PIXMAP_INBOX,
+ STOCK_PIXMAP_INTERFACE,
+ STOCK_PIXMAP_JPILOT,
+ STOCK_PIXMAP_LDAP,
+ STOCK_PIXMAP_LINEWRAP,
+ STOCK_PIXMAP_MARK,
+ STOCK_PIXMAP_NEW,
+ STOCK_PIXMAP_OUTBOX,
+ STOCK_PIXMAP_REPLIED,
+ STOCK_PIXMAP_CLOSE,
+ STOCK_PIXMAP_DOWN_ARROW,
+ STOCK_PIXMAP_EXEC,
+ STOCK_PIXMAP_MAIL,
+ STOCK_PIXMAP_MAIL_ATTACH,
+ STOCK_PIXMAP_MAIL_COMPOSE,
+ STOCK_PIXMAP_MAIL_FORWARD,
+ STOCK_PIXMAP_MAIL_RECEIVE,
+ STOCK_PIXMAP_MAIL_RECEIVE_ALL,
+ STOCK_PIXMAP_MAIL_REPLY,
+ STOCK_PIXMAP_MAIL_REPLY_TO_ALL,
+ STOCK_PIXMAP_MAIL_SEND,
+ STOCK_PIXMAP_MAIL_SEND_QUEUE,
+ STOCK_PIXMAP_PASTE,
+ STOCK_PIXMAP_PREFERENCES,
+ STOCK_PIXMAP_PROPERTIES,
+ STOCK_PIXMAP_SYLPHEED_LOGO,
+ STOCK_PIXMAP_ADDRESS_BOOK,
+ STOCK_PIXMAP_TRASH,
+ STOCK_PIXMAP_UNREAD,
+ STOCK_PIXMAP_VCARD,
+ STOCK_PIXMAP_ONLINE,
+ STOCK_PIXMAP_OFFLINE,
+ STOCK_PIXMAP_DIALOG_INFO,
+ STOCK_PIXMAP_DIALOG_QUESTION,
+ STOCK_PIXMAP_DIALOG_WARNING,
+ STOCK_PIXMAP_DIALOG_ERROR,
+ STOCK_PIXMAP_ADD,
+ STOCK_PIXMAP_REMOVE,
+ STOCK_PIXMAP_MAIL_SMALL,
+
+ N_STOCK_PIXMAPS
+} StockPixmap;
+
+GtkWidget *stock_pixmap_widget (GtkWidget *window,
+ StockPixmap icon);
+gint stock_pixmap_gdk (GtkWidget *window,
+ StockPixmap icon,
+ GdkPixmap **pixmap,
+ GdkBitmap **mask);
+
+#endif /* __STOCK_PIXMAP_H__ */
diff --git a/src/stringtable.c b/src/stringtable.c
new file mode 100644
index 00000000..da5e0ea4
--- /dev/null
+++ b/src/stringtable.c
@@ -0,0 +1,163 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <string.h>
+
+#include "stringtable.h"
+#include "utils.h"
+
+/* alfons - hashed string table (I wasn't content with GStringChunk;
+ * can't recall why :-) */
+
+#if 0
+#define XXX_DEBUG \
+ debug_print
+#else
+#define XXX_DEBUG \
+ if (0) debug_print
+#endif
+
+typedef struct StringEntry_ {
+ gint ref_count;
+ gchar *string;
+} StringEntry;
+
+static StringEntry *string_entry_new(const gchar *str)
+{
+ StringEntry *entry;
+
+ entry = g_new0(StringEntry, 1);
+ entry->ref_count = 1;
+ entry->string = g_strdup(str);
+ return entry;
+}
+
+static void string_entry_free(StringEntry *entry)
+{
+ g_return_if_fail(entry != NULL);
+
+ g_free(entry->string);
+ g_free(entry);
+}
+
+StringTable *string_table_new(void)
+{
+ StringTable *strtable;
+
+ strtable = g_new0(StringTable, 1);
+ g_return_val_if_fail(strtable != NULL, NULL);
+ strtable->hash_table = g_hash_table_new(g_str_hash, g_str_equal);
+ g_return_val_if_fail(strtable->hash_table, NULL);
+ return strtable;
+}
+
+gchar *string_table_lookup_string(StringTable *table, const gchar *str)
+{
+ StringEntry *entry;
+
+ entry = g_hash_table_lookup(table->hash_table, str);
+
+ if (entry) {
+ return entry->string;
+ } else {
+ return NULL;
+ }
+}
+
+gchar *string_table_insert_string(StringTable *table, const gchar *str)
+{
+ StringEntry *entry;
+
+ entry = g_hash_table_lookup(table->hash_table, str);
+
+ if (entry) {
+ entry->ref_count++;
+ XXX_DEBUG ("ref++ for %s (%d)\n", entry->string,
+ entry->ref_count);
+ } else {
+ entry = string_entry_new(str);
+ XXX_DEBUG ("inserting %s\n", str);
+ /* insert entry->string instead of str, since it can be
+ * invalid pointer after this. */
+ g_hash_table_insert(table->hash_table, entry->string, entry);
+ }
+
+ return entry->string;
+}
+
+void string_table_free_string(StringTable *table, const gchar *str)
+{
+ StringEntry *entry;
+
+ entry = g_hash_table_lookup(table->hash_table, str);
+
+ if (entry) {
+ entry->ref_count--;
+ if (entry->ref_count <= 0) {
+ XXX_DEBUG ("refcount of string %s dropped to zero\n",
+ entry->string);
+ g_hash_table_remove(table->hash_table, str);
+ string_entry_free(entry);
+ } else {
+ XXX_DEBUG ("ref-- for %s (%d)\n", entry->string,
+ entry->ref_count);
+ }
+ }
+}
+
+static gboolean string_table_remove_for_each_fn(gchar *key, StringEntry *entry,
+ gpointer user_data)
+{
+ g_return_val_if_fail(key != NULL, TRUE);
+ g_return_val_if_fail(entry != NULL, TRUE);
+
+ string_entry_free(entry);
+
+ return TRUE;
+}
+
+void string_table_free(StringTable *table)
+{
+ g_return_if_fail(table != NULL);
+ g_return_if_fail(table->hash_table != NULL);
+
+ g_hash_table_foreach_remove(table->hash_table,
+ (GHRFunc)string_table_remove_for_each_fn,
+ NULL);
+ g_hash_table_destroy(table->hash_table);
+ g_free(table);
+}
+
+static void string_table_stats_for_each_fn(gchar *key, StringEntry *entry,
+ guint *totals)
+{
+ if (entry->ref_count > 1) {
+ *totals += strlen(key) * (entry->ref_count - 1);
+ }
+}
+
+void string_table_get_stats(StringTable *table)
+{
+ guint totals = 0;
+
+ g_hash_table_foreach(table->hash_table,
+ (GHFunc)string_table_stats_for_each_fn, &totals);
+ XXX_DEBUG ("TOTAL UNSPILLED %d (%dK)\n", totals, totals / 1024);
+}
diff --git a/src/stringtable.h b/src/stringtable.h
new file mode 100644
index 00000000..337ef2c7
--- /dev/null
+++ b/src/stringtable.h
@@ -0,0 +1,38 @@
+/*
+ * sylpheed -- a gtk+ based, lightweight, and fast e-mail client
+ * copyright (c) 1999-2001 hiroyuki yamamoto
+ *
+ * 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
+ * the free software foundation; either version 2 of the license, or
+ * (at your option) any later version.
+ *
+ * this program is distributed in the hope that it will be useful,
+ * but without any warranty; without even the implied warranty of
+ * merchantability or fitness for a particular purpose. see the
+ * gnu general public license for more details.
+ *
+ * you should have received a copy of the gnu general public license
+ * along with this program; if not, write to the free software
+ * foundation, inc., 59 temple place - suite 330, boston, ma 02111-1307, usa.
+ */
+
+#ifndef STRINGTABLE_H__
+#define STRINGTABLE_H__
+
+#include <glib.h>
+
+typedef struct {
+ GHashTable *hash_table;
+} StringTable;
+
+StringTable *string_table_new (void);
+void string_table_free (StringTable *table);
+
+gchar *string_table_lookup_string (StringTable *table, const gchar *str);
+gchar *string_table_insert_string (StringTable *table, const gchar *str);
+void string_table_free_string (StringTable *table, const gchar *str);
+
+void string_table_get_stats (StringTable *table);
+
+#endif /* STRINGTABLE_H__ */
diff --git a/src/summary_search.c b/src/summary_search.c
new file mode 100644
index 00000000..9ee39dde
--- /dev/null
+++ b/src/summary_search.c
@@ -0,0 +1,474 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktable.h>
+#include <gtk/gtkoptionmenu.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkhbbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkctree.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "intl.h"
+#include "main.h"
+#include "summary_search.h"
+#include "summaryview.h"
+#include "messageview.h"
+#include "mainwindow.h"
+#include "menu.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "manage_window.h"
+#include "alertpanel.h"
+
+static GtkWidget *window;
+static GtkWidget *bool_optmenu;
+static GtkWidget *from_entry;
+static GtkWidget *to_entry;
+static GtkWidget *subject_entry;
+static GtkWidget *body_entry;
+static GtkWidget *case_checkbtn;
+static GtkWidget *backward_checkbtn;
+static GtkWidget *all_checkbtn;
+static GtkWidget *search_btn;
+static GtkWidget *clear_btn;
+static GtkWidget *close_btn;
+
+static void summary_search_create(SummaryView *summaryview);
+static void summary_search_execute(GtkButton *button, gpointer data);
+static void summary_search_clear(GtkButton *button, gpointer data);
+static void from_activated(void);
+static void to_activated(void);
+static void subject_activated(void);
+static void body_activated(void);
+static void all_clicked(GtkButton *button);
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data);
+
+void summary_search(SummaryView *summaryview)
+{
+ if (!window)
+ summary_search_create(summaryview);
+ else
+ gtk_widget_hide(window);
+
+ gtk_widget_grab_focus(search_btn);
+ gtk_widget_grab_focus(subject_entry);
+ gtk_widget_show(window);
+}
+
+static void summary_search_create(SummaryView *summaryview)
+{
+ GtkWidget *vbox1;
+ GtkWidget *bool_hbox;
+ GtkWidget *bool_menu;
+ GtkWidget *menuitem;
+ GtkWidget *table1;
+ GtkWidget *from_label;
+ GtkWidget *to_label;
+ GtkWidget *subject_label;
+ GtkWidget *body_label;
+ GtkWidget *checkbtn_hbox;
+ GtkWidget *confirm_area;
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW (window), _("Search messages"));
+ gtk_widget_set_size_request(window, 450, -1);
+ gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);
+ gtk_container_set_border_width(GTK_CONTAINER (window), 8);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(key_pressed), NULL);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+
+ vbox1 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (window), vbox1);
+
+ bool_hbox = gtk_hbox_new(FALSE, 4);
+ gtk_widget_show(bool_hbox);
+ gtk_box_pack_start(GTK_BOX(vbox1), bool_hbox, FALSE, FALSE, 0);
+
+ bool_optmenu = gtk_option_menu_new();
+ gtk_widget_show(bool_optmenu);
+ gtk_box_pack_start(GTK_BOX(bool_hbox), bool_optmenu, FALSE, FALSE, 0);
+
+ bool_menu = gtk_menu_new();
+ MENUITEM_ADD(bool_menu, menuitem, _("Match any of the following"), 0);
+ MENUITEM_ADD(bool_menu, menuitem, _("Match all of the following"), 1);
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(bool_optmenu), bool_menu);
+
+ table1 = gtk_table_new (4, 3, FALSE);
+ gtk_widget_show (table1);
+ gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (table1), 4);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ from_entry = gtk_entry_new ();
+ gtk_widget_show (from_entry);
+ gtk_table_attach (GTK_TABLE (table1), from_entry, 1, 3, 0, 1,
+ GTK_EXPAND|GTK_FILL, 0, 0, 0);
+ g_signal_connect(G_OBJECT(from_entry), "activate",
+ G_CALLBACK(from_activated), summaryview);
+
+ to_entry = gtk_entry_new ();
+ gtk_widget_show (to_entry);
+ gtk_table_attach (GTK_TABLE (table1), to_entry, 1, 3, 1, 2,
+ GTK_EXPAND|GTK_FILL, 0, 0, 0);
+ g_signal_connect(G_OBJECT(to_entry), "activate",
+ G_CALLBACK(to_activated), summaryview);
+
+ subject_entry = gtk_entry_new ();
+ gtk_widget_show (subject_entry);
+ gtk_table_attach (GTK_TABLE (table1), subject_entry, 1, 3, 2, 3,
+ GTK_EXPAND|GTK_FILL, 0, 0, 0);
+ g_signal_connect(G_OBJECT(subject_entry), "activate",
+ G_CALLBACK(subject_activated), summaryview);
+
+ body_entry = gtk_entry_new ();
+ gtk_widget_show (body_entry);
+ gtk_table_attach (GTK_TABLE (table1), body_entry, 1, 3, 3, 4,
+ GTK_EXPAND|GTK_FILL, 0, 0, 0);
+ g_signal_connect(G_OBJECT(body_entry), "activate",
+ G_CALLBACK(body_activated), summaryview);
+
+ from_label = gtk_label_new (_("From:"));
+ gtk_widget_show (from_label);
+ gtk_table_attach (GTK_TABLE (table1), from_label, 0, 1, 0, 1,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (from_label), GTK_JUSTIFY_RIGHT);
+ gtk_misc_set_alignment (GTK_MISC (from_label), 1, 0.5);
+
+ to_label = gtk_label_new (_("To:"));
+ gtk_widget_show (to_label);
+ gtk_table_attach (GTK_TABLE (table1), to_label, 0, 1, 1, 2,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (to_label), GTK_JUSTIFY_RIGHT);
+ gtk_misc_set_alignment (GTK_MISC (to_label), 1, 0.5);
+
+ subject_label = gtk_label_new (_("Subject:"));
+ gtk_widget_show (subject_label);
+ gtk_table_attach (GTK_TABLE (table1), subject_label, 0, 1, 2, 3,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (subject_label), GTK_JUSTIFY_RIGHT);
+ gtk_misc_set_alignment (GTK_MISC (subject_label), 1, 0.5);
+
+ body_label = gtk_label_new (_("Body:"));
+ gtk_widget_show (body_label);
+ gtk_table_attach (GTK_TABLE (table1), body_label, 0, 1, 3, 4,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (body_label), GTK_JUSTIFY_RIGHT);
+ gtk_misc_set_alignment (GTK_MISC (body_label), 1, 0.5);
+
+ checkbtn_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (checkbtn_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8);
+
+ case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive"));
+ gtk_widget_show (case_checkbtn);
+ gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn,
+ FALSE, FALSE, 0);
+
+ backward_checkbtn =
+ gtk_check_button_new_with_label (_("Backward search"));
+ gtk_widget_show (backward_checkbtn);
+ gtk_box_pack_start (GTK_BOX (checkbtn_hbox), backward_checkbtn,
+ FALSE, FALSE, 0);
+
+ all_checkbtn =
+ gtk_check_button_new_with_label (_("Select all matched"));
+ gtk_widget_show (all_checkbtn);
+ gtk_box_pack_start (GTK_BOX (checkbtn_hbox), all_checkbtn,
+ FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(all_checkbtn), "clicked",
+ G_CALLBACK(all_clicked), summaryview);
+
+ gtkut_button_set_create(&confirm_area,
+ &search_btn, _("Search"),
+ &clear_btn, _("Clear"),
+ &close_btn, _("Close"));
+ gtk_widget_show (confirm_area);
+ gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default(search_btn);
+
+ g_signal_connect(G_OBJECT(search_btn), "clicked",
+ G_CALLBACK(summary_search_execute), summaryview);
+ g_signal_connect(G_OBJECT(clear_btn), "clicked",
+ G_CALLBACK(summary_search_clear), summaryview);
+ g_signal_connect_closure
+ (G_OBJECT(close_btn), "clicked",
+ g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide),
+ window, NULL),
+ FALSE);
+}
+
+static void summary_search_execute(GtkButton *button, gpointer data)
+{
+ SummaryView *summaryview = data;
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+ gboolean bool_and;
+ gboolean case_sens;
+ gboolean backward;
+ gboolean search_all;
+ gboolean all_searched = FALSE;
+ gboolean matched;
+ gboolean body_matched;
+ const gchar *from_str, *to_str, *subject_str, *body_str;
+ StrFindFunc str_find_func;
+
+ if (summary_is_locked(summaryview)) return;
+ summary_lock(summaryview);
+
+ bool_and = menu_get_option_menu_active_index
+ (GTK_OPTION_MENU(bool_optmenu));
+ case_sens = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(case_checkbtn));
+ backward = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(backward_checkbtn));
+ search_all = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(all_checkbtn));
+
+ if (case_sens)
+ str_find_func = str_find;
+ else
+ str_find_func = str_case_find;
+
+ from_str = gtk_entry_get_text(GTK_ENTRY(from_entry));
+ to_str = gtk_entry_get_text(GTK_ENTRY(to_entry));
+ subject_str = gtk_entry_get_text(GTK_ENTRY(subject_entry));
+ body_str = gtk_entry_get_text(GTK_ENTRY(body_entry));
+
+ if (search_all) {
+ gtk_clist_freeze(GTK_CLIST(ctree));
+ gtk_clist_unselect_all(GTK_CLIST(ctree));
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ backward = FALSE;
+ } else if (!summaryview->selected) {
+ if (backward)
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end);
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ if (!node) {
+ summary_unlock(summaryview);
+ return;
+ }
+ } else {
+ if (backward)
+ node = gtkut_ctree_node_prev
+ (ctree, summaryview->selected);
+ else
+ node = gtkut_ctree_node_next
+ (ctree, summaryview->selected);
+ }
+
+ if (*body_str)
+ main_window_cursor_wait(summaryview->mainwin);
+
+ for (;;) {
+ if (!node) {
+ gchar *str;
+ AlertValue val;
+
+ if (search_all) {
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ break;
+ }
+
+ if (all_searched) {
+ alertpanel_message
+ (_("Search failed"),
+ _("Search string not found."),
+ ALERT_WARNING);
+ break;
+ }
+
+ if (backward)
+ str = _("Beginning of list reached; continue from end?");
+ else
+ str = _("End of list reached; continue from beginning?");
+
+ val = alertpanel(_("Search finished"), str,
+ _("Yes"), _("No"), NULL);
+ if (G_ALERTDEFAULT == val) {
+ if (backward)
+ node = GTK_CTREE_NODE
+ (GTK_CLIST(ctree)->row_list_end);
+ else
+ node = GTK_CTREE_NODE
+ (GTK_CLIST(ctree)->row_list);
+
+ all_searched = TRUE;
+
+ manage_window_focus_in(window, NULL, NULL);
+ } else
+ break;
+ }
+
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ body_matched = FALSE;
+
+ if (bool_and) {
+ matched = TRUE;
+ if (*from_str) {
+ if (!msginfo->from ||
+ !str_find_func(msginfo->from, from_str))
+ matched = FALSE;
+ }
+ if (matched && *to_str) {
+ if (!msginfo->to ||
+ !str_find_func(msginfo->to, to_str))
+ matched = FALSE;
+ }
+ if (matched && *subject_str) {
+ if (!msginfo->subject ||
+ !str_find_func(msginfo->subject, subject_str))
+ matched = FALSE;
+ }
+ if (matched && *body_str) {
+ if (procmime_find_string(msginfo, body_str,
+ str_find_func))
+ body_matched = TRUE;
+ else
+ matched = FALSE;
+ }
+ if (matched && !*from_str && !*to_str &&
+ !*subject_str && !*body_str)
+ matched = FALSE;
+ } else {
+ matched = FALSE;
+ if (*from_str && msginfo->from) {
+ if (str_find_func(msginfo->from, from_str))
+ matched = TRUE;
+ }
+ if (!matched && *to_str && msginfo->to) {
+ if (str_find_func(msginfo->to, to_str))
+ matched = TRUE;
+ }
+ if (!matched && *subject_str && msginfo->subject) {
+ if (str_find_func(msginfo->subject, subject_str))
+ matched = TRUE;
+ }
+ if (!matched && *body_str) {
+ if (procmime_find_string(msginfo, body_str,
+ str_find_func)) {
+ matched = TRUE;
+ body_matched = TRUE;
+ }
+ }
+ }
+
+ if (matched) {
+ if (search_all)
+ gtk_ctree_select(ctree, node);
+ else {
+ if (messageview_is_visible
+ (summaryview->messageview)) {
+ summary_unlock(summaryview);
+ summary_select_node
+ (summaryview, node, TRUE, TRUE);
+ summary_lock(summaryview);
+ if (body_matched) {
+ messageview_search_string
+ (summaryview->messageview,
+ body_str, case_sens);
+ }
+ } else {
+ summary_select_node
+ (summaryview, node, FALSE, TRUE);
+ }
+ break;
+ }
+ }
+
+ node = backward ? gtkut_ctree_node_prev(ctree, node)
+ : gtkut_ctree_node_next(ctree, node);
+ }
+
+ if (*body_str)
+ main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
+}
+
+static void summary_search_clear(GtkButton *button, gpointer data)
+{
+ gtk_editable_delete_text(GTK_EDITABLE(from_entry), 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(to_entry), 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(subject_entry), 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(body_entry), 0, -1);
+}
+
+static void from_activated(void)
+{
+ gtk_widget_grab_focus(to_entry);
+}
+
+static void to_activated(void)
+{
+ gtk_widget_grab_focus(subject_entry);
+}
+
+static void subject_activated(void)
+{
+ gtk_button_clicked(GTK_BUTTON(search_btn));
+}
+
+static void body_activated(void)
+{
+ gtk_button_clicked(GTK_BUTTON(search_btn));
+}
+
+static void all_clicked(GtkButton *button)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+ gtk_widget_set_sensitive(backward_checkbtn, FALSE);
+ else
+ gtk_widget_set_sensitive(backward_checkbtn, TRUE);
+}
+
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(window);
+ return FALSE;
+}
diff --git a/src/summary_search.h b/src/summary_search.h
new file mode 100644
index 00000000..8e3fcc0c
--- /dev/null
+++ b/src/summary_search.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SUMMARY_SEARCH_H__
+#define __SUMMARY_SEARCH_H__
+
+#include <glib.h>
+
+#include "summaryview.h"
+
+void summary_search (SummaryView *summaryview);
+
+#endif /* __SUMMARY_SEARCH_H__ */
diff --git a/src/summaryview.c b/src/summaryview.c
new file mode 100644
index 00000000..53d9b349
--- /dev/null
+++ b/src/summaryview.c
@@ -0,0 +1,4195 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkcontainer.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtktext.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkstyle.h>
+#include <gtk/gtkarrow.h>
+#include <gtk/gtkeventbox.h>
+#include <gtk/gtkstatusbar.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "intl.h"
+#include "main.h"
+#include "menu.h"
+#include "mainwindow.h"
+#include "folderview.h"
+#include "summaryview.h"
+#include "messageview.h"
+#include "foldersel.h"
+#include "procmsg.h"
+#include "procheader.h"
+#include "sourcewindow.h"
+#include "prefs_common.h"
+#include "prefs_summary_column.h"
+#include "prefs_filter.h"
+#include "account.h"
+#include "compose.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "stock_pixmap.h"
+#include "filesel.h"
+#include "alertpanel.h"
+#include "inputdialog.h"
+#include "statusbar.h"
+#include "filter.h"
+#include "folder.h"
+#include "colorlabel.h"
+#include "inc.h"
+#include "imap.h"
+
+#define STATUSBAR_PUSH(mainwin, str) \
+{ \
+ gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->summaryview_cid, str); \
+ gtkut_widget_wait_for_draw(mainwin->hbox_stat); \
+}
+
+#define STATUSBAR_POP(mainwin) \
+{ \
+ gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \
+ mainwin->summaryview_cid); \
+}
+
+#define SUMMARY_COL_MARK_WIDTH 10
+#define SUMMARY_COL_UNREAD_WIDTH 13
+#define SUMMARY_COL_MIME_WIDTH 10
+
+static GtkStyle *bold_style;
+static GtkStyle *bold_marked_style;
+static GtkStyle *bold_deleted_style;
+
+static GdkPixmap *markxpm;
+static GdkBitmap *markxpmmask;
+static GdkPixmap *deletedxpm;
+static GdkBitmap *deletedxpmmask;
+
+static GdkPixmap *mailxpm;
+static GdkBitmap *mailxpmmask;
+static GdkPixmap *newxpm;
+static GdkBitmap *newxpmmask;
+static GdkPixmap *unreadxpm;
+static GdkBitmap *unreadxpmmask;
+static GdkPixmap *repliedxpm;
+static GdkBitmap *repliedxpmmask;
+static GdkPixmap *forwardedxpm;
+static GdkBitmap *forwardedxpmmask;
+
+static GdkPixmap *clipxpm;
+static GdkBitmap *clipxpmmask;
+
+static void summary_free_msginfo_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+static void summary_set_marks_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+static void summary_write_cache_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+
+static void summary_set_menu_sensitive (SummaryView *summaryview);
+
+static guint summary_get_msgnum (SummaryView *summaryview,
+ GtkCTreeNode *node);
+
+static GtkCTreeNode *summary_find_prev_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
+static GtkCTreeNode *summary_find_next_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
+
+static GtkCTreeNode *summary_find_prev_flagged_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node,
+ MsgPermFlags flags,
+ gboolean start_from_prev);
+static GtkCTreeNode *summary_find_next_flagged_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node,
+ MsgPermFlags flags,
+ gboolean start_from_next);
+
+static GtkCTreeNode *summary_find_msg_by_msgnum
+ (SummaryView *summaryview,
+ guint msgnum);
+
+static void summary_update_status (SummaryView *summaryview);
+
+/* display functions */
+static void summary_status_show (SummaryView *summaryview);
+static void summary_set_column_titles (SummaryView *summaryview);
+static void summary_set_ctree_from_list (SummaryView *summaryview,
+ GSList *mlist);
+static void summary_set_header (SummaryView *summaryview,
+ gchar *text[],
+ MsgInfo *msginfo);
+static void summary_display_msg (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_display_msg_full (SummaryView *summaryview,
+ GtkCTreeNode *row,
+ gboolean new_window,
+ gboolean all_headers);
+static void summary_set_row_marks (SummaryView *summaryview,
+ GtkCTreeNode *row);
+
+/* message handling */
+static void summary_mark_row (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_mark_row_as_read (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_mark_row_as_unread (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_delete_row (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_unmark_row (SummaryView *summaryview,
+ GtkCTreeNode *row);
+static void summary_move_row_to (SummaryView *summaryview,
+ GtkCTreeNode *row,
+ FolderItem *to_folder);
+static void summary_copy_row_to (SummaryView *summaryview,
+ GtkCTreeNode *row,
+ FolderItem *to_folder);
+
+static void summary_delete_duplicated_func
+ (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ SummaryView *summaryview);
+
+static void summary_remove_invalid_messages
+ (SummaryView *summaryview);
+
+static gint summary_execute_move (SummaryView *summaryview);
+static void summary_execute_move_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+static gint summary_execute_copy (SummaryView *summaryview);
+static void summary_execute_copy_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+static gint summary_execute_delete (SummaryView *summaryview);
+static void summary_execute_delete_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+
+static void summary_thread_init (SummaryView *summaryview);
+
+static void summary_unthread_for_exec (SummaryView *summaryview);
+static void summary_unthread_for_exec_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+
+static void summary_filter_func (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ gpointer data);
+
+static void summary_colorlabel_menu_item_activate_cb
+ (GtkWidget *widget,
+ gpointer data);
+static void summary_colorlabel_menu_item_activate_item_cb
+ (GtkMenuItem *label_menu_item,
+ gpointer data);
+static void summary_colorlabel_menu_create(SummaryView *summaryview);
+
+static GtkWidget *summary_ctree_create (SummaryView *summaryview);
+
+/* callback functions */
+static gboolean summary_toggle_pressed (GtkWidget *eventbox,
+ GdkEventButton *event,
+ SummaryView *summaryview);
+static gboolean summary_button_pressed (GtkWidget *ctree,
+ GdkEventButton *event,
+ SummaryView *summaryview);
+static gboolean summary_button_released (GtkWidget *ctree,
+ GdkEventButton *event,
+ SummaryView *summaryview);
+static gboolean summary_key_pressed (GtkWidget *ctree,
+ GdkEventKey *event,
+ SummaryView *summaryview);
+static void summary_open_row (GtkSCTree *sctree,
+ SummaryView *summaryview);
+static void summary_tree_expanded (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ SummaryView *summaryview);
+static void summary_tree_collapsed (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ SummaryView *summaryview);
+static void summary_selected (GtkCTree *ctree,
+ GtkCTreeNode *row,
+ gint column,
+ SummaryView *summaryview);
+static void summary_col_resized (GtkCList *clist,
+ gint column,
+ gint width,
+ SummaryView *summaryview);
+static void summary_reply_cb (SummaryView *summaryview,
+ guint action,
+ GtkWidget *widget);
+static void summary_show_all_header_cb (SummaryView *summaryview,
+ guint action,
+ GtkWidget *widget);
+
+static void summary_add_address_cb (SummaryView *summaryview,
+ guint action,
+ GtkWidget *widget);
+
+static void summary_mark_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_unread_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_mime_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_num_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_size_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_date_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_from_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+static void summary_subject_clicked (GtkWidget *button,
+ SummaryView *summaryview);
+
+static void summary_start_drag (GtkWidget *widget,
+ int button,
+ GdkEvent *event,
+ SummaryView *summaryview);
+static void summary_drag_data_get (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ SummaryView *summaryview);
+
+/* custom compare functions for sorting */
+
+static gint summary_cmp_by_mark (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_unread (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_mime (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_num (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_size (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_date (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_from (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_label (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_to (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+static gint summary_cmp_by_subject (GtkCList *clist,
+ gconstpointer ptr1,
+ gconstpointer ptr2);
+
+GtkTargetEntry summary_drag_types[1] =
+{
+ {"text/plain", GTK_TARGET_SAME_APP, TARGET_DUMMY}
+};
+
+static GtkItemFactoryEntry summary_popup_entries[] =
+{
+ {N_("/_Reply"), NULL, summary_reply_cb, COMPOSE_REPLY, NULL},
+ {N_("/Repl_y to"), NULL, NULL, 0, "<Branch>"},
+ {N_("/Repl_y to/_all"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
+ {N_("/Repl_y to/_sender"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
+ {N_("/Repl_y to/mailing _list"),
+ NULL, summary_reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Forward"), NULL, summary_reply_cb, COMPOSE_FORWARD, NULL},
+ {N_("/For_ward as attachment"), NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
+ {N_("/Redirec_t"), NULL, summary_reply_cb, COMPOSE_REDIRECT, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/M_ove..."), NULL, summary_move_to, 0, NULL},
+ {N_("/_Copy..."), NULL, summary_copy_to, 0, NULL},
+ {N_("/_Delete"), NULL, summary_delete, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Mark"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Mark/_Mark"), NULL, summary_mark, 0, NULL},
+ {N_("/_Mark/_Unmark"), NULL, summary_unmark, 0, NULL},
+ {N_("/_Mark/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Mark/Mark as unr_ead"), NULL, summary_mark_as_unread, 0, NULL},
+ {N_("/_Mark/Mark as rea_d"),
+ NULL, summary_mark_as_read, 0, NULL},
+ {N_("/_Mark/Mark all _read"), NULL, summary_mark_all_read, 0, NULL},
+ {N_("/Color la_bel"), NULL, NULL, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Re-_edit"), NULL, summary_reedit, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Add sender to address boo_k"),
+ NULL, summary_add_address_cb, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Open in new _window"),
+ NULL, summary_open_msg, 0, NULL},
+ {N_("/_View/_Source"), NULL, summary_view_source, 0, NULL},
+ {N_("/_View/All _header"), NULL, summary_show_all_header_cb, 0, "<ToggleItem>"},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Print..."), NULL, summary_print, 0, NULL}
+};
+
+static const gchar *const col_label[N_SUMMARY_COLS] = {
+ N_("M"), /* S_COL_MARK */
+ N_("U"), /* S_COL_UNREAD */
+ "", /* S_COL_MIME */
+ N_("Subject"), /* S_COL_SUBJECT */
+ N_("From"), /* S_COL_FROM */
+ N_("Date"), /* S_COL_DATE */
+ N_("Size"), /* S_COL_SIZE */
+ N_("No."), /* S_COL_NUMBER */
+};
+
+SummaryView *summary_create(void)
+{
+ SummaryView *summaryview;
+ GtkWidget *vbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ GtkWidget *hbox;
+ GtkWidget *hbox_l;
+ GtkWidget *statlabel_folder;
+ GtkWidget *statlabel_select;
+ GtkWidget *statlabel_msgs;
+ GtkWidget *hbox_spc;
+ GtkWidget *toggle_eventbox;
+ GtkWidget *toggle_arrow;
+ GtkWidget *popupmenu;
+ GtkItemFactory *popupfactory;
+ gint n_entries;
+ GList *child;
+
+ debug_print(_("Creating summary view...\n"));
+ summaryview = g_new0(SummaryView, 1);
+
+ vbox = gtk_vbox_new(FALSE, 2);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+ gtk_widget_set_size_request(vbox,
+ prefs_common.summaryview_width,
+ prefs_common.summaryview_height);
+
+ ctree = summary_ctree_create(summaryview);
+
+ gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_CLIST(ctree)->hadjustment);
+ gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_CLIST(ctree)->vadjustment);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+
+ /* create status label */
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+ hbox_l = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), hbox_l, TRUE, TRUE, 0);
+
+ statlabel_folder = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_folder, FALSE, FALSE, 2);
+ statlabel_select = gtk_label_new("");
+ gtk_box_pack_start(GTK_BOX(hbox_l), statlabel_select, FALSE, FALSE, 12);
+
+ /* toggle view button */
+ toggle_eventbox = gtk_event_box_new();
+ gtk_box_pack_end(GTK_BOX(hbox), toggle_eventbox, FALSE, FALSE, 4);
+ toggle_arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(toggle_eventbox), toggle_arrow);
+ g_signal_connect(G_OBJECT(toggle_eventbox), "button_press_event",
+ G_CALLBACK(summary_toggle_pressed), summaryview);
+
+ statlabel_msgs = gtk_label_new("");
+ gtk_box_pack_end(GTK_BOX(hbox), statlabel_msgs, FALSE, FALSE, 4);
+
+ hbox_spc = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox), hbox_spc, FALSE, FALSE, 6);
+
+ /* create popup menu */
+ n_entries = sizeof(summary_popup_entries) /
+ sizeof(summary_popup_entries[0]);
+ popupmenu = menu_create_items(summary_popup_entries, n_entries,
+ "<SummaryView>", &popupfactory,
+ summaryview);
+
+ summaryview->vbox = vbox;
+ summaryview->scrolledwin = scrolledwin;
+ summaryview->ctree = ctree;
+ summaryview->hbox = hbox;
+ summaryview->hbox_l = hbox_l;
+ summaryview->statlabel_folder = statlabel_folder;
+ summaryview->statlabel_select = statlabel_select;
+ summaryview->statlabel_msgs = statlabel_msgs;
+ summaryview->toggle_eventbox = toggle_eventbox;
+ summaryview->toggle_arrow = toggle_arrow;
+ summaryview->popupmenu = popupmenu;
+ summaryview->popupfactory = popupfactory;
+ summaryview->lock_count = 0;
+
+ summaryview->reedit_menuitem =
+ gtk_item_factory_get_widget(popupfactory, "/Re-edit");
+ child = g_list_find(GTK_MENU_SHELL(popupmenu)->children,
+ summaryview->reedit_menuitem);
+ summaryview->reedit_separator = GTK_WIDGET(child->next->data);
+
+ gtk_widget_show_all(vbox);
+
+ return summaryview;
+}
+
+void summary_init(SummaryView *summaryview)
+{
+ GtkStyle *style;
+ GtkWidget *pixmap;
+
+ gtk_widget_realize(summaryview->ctree);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_MARK,
+ &markxpm, &markxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_DELETED,
+ &deletedxpm, &deletedxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_MAIL_SMALL,
+ &mailxpm, &mailxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_NEW,
+ &newxpm, &newxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_UNREAD,
+ &unreadxpm, &unreadxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_REPLIED,
+ &repliedxpm, &repliedxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_FORWARDED,
+ &forwardedxpm, &forwardedxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP,
+ &clipxpm, &clipxpmmask);
+
+ if (!bold_style) {
+ PangoFontDescription *font_desc = NULL;
+
+ bold_style = gtk_style_copy
+ (gtk_widget_get_style(summaryview->ctree));
+ if (prefs_common.boldfont)
+ font_desc = pango_font_description_from_string
+ (prefs_common.boldfont);
+ if (font_desc) {
+ if (bold_style->font_desc)
+ pango_font_description_free
+ (bold_style->font_desc);
+ bold_style->font_desc = font_desc;
+ }
+ bold_marked_style = gtk_style_copy(bold_style);
+ bold_marked_style->fg[GTK_STATE_NORMAL] =
+ summaryview->color_marked;
+ bold_deleted_style = gtk_style_copy(bold_style);
+ bold_deleted_style->fg[GTK_STATE_NORMAL] =
+ summaryview->color_dim;
+ }
+
+ style = gtk_style_copy(gtk_widget_get_style
+ (summaryview->statlabel_folder));
+ if (prefs_common.smallfont) {
+ PangoFontDescription *font_desc = NULL;
+
+ if (prefs_common.smallfont)
+ font_desc = pango_font_description_from_string
+ (prefs_common.smallfont);
+ if (font_desc) {
+ if (style->font_desc)
+ pango_font_description_free(style->font_desc);
+ style->font_desc = font_desc;
+ }
+ }
+ gtk_widget_set_style(summaryview->statlabel_folder, style);
+ gtk_widget_set_style(summaryview->statlabel_select, style);
+ gtk_widget_set_style(summaryview->statlabel_msgs, style);
+
+ pixmap = stock_pixmap_widget(summaryview->hbox_l, STOCK_PIXMAP_DIR_OPEN);
+ gtk_box_pack_start(GTK_BOX(summaryview->hbox_l), pixmap, FALSE, FALSE, 4);
+ gtk_box_reorder_child(GTK_BOX(summaryview->hbox_l), pixmap, 0);
+ gtk_widget_show(pixmap);
+
+ summary_clear_list(summaryview);
+ summary_set_column_titles(summaryview);
+ summary_colorlabel_menu_create(summaryview);
+ summary_set_menu_sensitive(summaryview);
+}
+
+gboolean summary_show(SummaryView *summaryview, FolderItem *item,
+ gboolean update_cache)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ GSList *mlist = NULL;
+ gchar *buf;
+ gboolean is_refresh;
+ guint selected_msgnum = 0;
+ guint displayed_msgnum = 0;
+ GtkCTreeNode *selected_node = summaryview->folderview->selected;
+
+ if (summary_is_locked(summaryview)) return FALSE;
+
+ inc_lock();
+ summary_lock(summaryview);
+
+ STATUSBAR_POP(summaryview->mainwin);
+
+ is_refresh = (item == summaryview->folder_item &&
+ update_cache == FALSE) ? TRUE : FALSE;
+ if (is_refresh) {
+ selected_msgnum = summary_get_msgnum(summaryview,
+ summaryview->selected);
+ displayed_msgnum = summary_get_msgnum(summaryview,
+ summaryview->displayed);
+ }
+
+ /* process the marks if any */
+ if (summaryview->mainwin->lock_count == 0 &&
+ (summaryview->moved > 0 || summaryview->copied > 0)) {
+ AlertValue val;
+
+ val = alertpanel(_("Process mark"),
+ _("Some marks are left. Process it?"),
+ _("Yes"), _("No"), _("Cancel"));
+ if (G_ALERTDEFAULT == val) {
+ summary_unlock(summaryview);
+ summary_execute(summaryview);
+ summary_lock(summaryview);
+ } else if (G_ALERTALTERNATE == val)
+ summary_write_cache(summaryview);
+ else {
+ summary_unlock(summaryview);
+ inc_unlock();
+ return FALSE;
+ }
+ } else
+ summary_write_cache(summaryview);
+
+ summaryview->folderview->opened = selected_node;
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ summary_clear_list(summaryview);
+ summary_set_column_titles(summaryview);
+
+ buf = NULL;
+ if (!item || !item->path || !item->parent || item->no_select ||
+ (FOLDER_TYPE(item->folder) == F_MH &&
+ ((buf = folder_item_get_path(item)) == NULL ||
+ change_dir(buf) < 0))) {
+ g_free(buf);
+ debug_print("empty folder\n\n");
+ summary_clear_all(summaryview);
+ summaryview->folder_item = item;
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_unlock(summaryview);
+ inc_unlock();
+ return TRUE;
+ }
+ g_free(buf);
+
+ if (!is_refresh)
+ messageview_clear(summaryview->messageview);
+
+ summaryview->folder_item = item;
+
+ g_signal_handlers_block_matched(G_OBJECT(ctree),
+ (GSignalMatchType)G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, summaryview);
+
+ buf = g_strdup_printf(_("Scanning folder (%s)..."), item->path);
+ debug_print("%s\n", buf);
+ STATUSBAR_PUSH(summaryview->mainwin, buf);
+ g_free(buf);
+
+ main_window_cursor_wait(summaryview->mainwin);
+
+ mlist = folder_item_get_msg_list(item, !update_cache);
+
+ statusbar_pop_all();
+ STATUSBAR_POP(summaryview->mainwin);
+
+ /* set ctree and hash table from the msginfo list, and
+ create the thread */
+ summary_set_ctree_from_list(summaryview, mlist);
+
+ g_slist_free(mlist);
+
+ summary_write_cache(summaryview);
+
+ item->opened = TRUE;
+
+ g_signal_handlers_unblock_matched(G_OBJECT(ctree),
+ (GSignalMatchType)G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, summaryview);
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ if (is_refresh) {
+ summaryview->displayed =
+ summary_find_msg_by_msgnum(summaryview,
+ displayed_msgnum);
+ if (!summaryview->displayed)
+ messageview_clear(summaryview->messageview);
+ summary_select_by_msgnum(summaryview, selected_msgnum);
+ if (!summaryview->selected) {
+ /* no selected message - select first unread
+ message, but do not display it */
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_UNREAD, FALSE);
+ if (node == NULL && GTK_CLIST(ctree)->row_list != NULL)
+ node = gtk_ctree_node_nth
+ (ctree,
+ item->sort_type == SORT_DESCENDING
+ ? 0 : GTK_CLIST(ctree)->rows - 1);
+ summary_select_node(summaryview, node, FALSE, TRUE);
+ }
+ } else {
+ /* select first unread message */
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_UNREAD, FALSE);
+ if (node == NULL && GTK_CLIST(ctree)->row_list != NULL) {
+ node = gtk_ctree_node_nth
+ (ctree,
+ item->sort_type == SORT_DESCENDING
+ ? 0 : GTK_CLIST(ctree)->rows - 1);
+ }
+ if (prefs_common.open_unread_on_enter ||
+ prefs_common.always_show_msg) {
+ summary_unlock(summaryview);
+ summary_select_node(summaryview, node, TRUE, TRUE);
+ summary_lock(summaryview);
+ } else
+ summary_select_node(summaryview, node, FALSE, TRUE);
+ }
+
+ summary_set_column_titles(summaryview);
+ summary_status_show(summaryview);
+ summary_set_menu_sensitive(summaryview);
+ main_window_set_toolbar_sensitive(summaryview->mainwin);
+
+ debug_print("\n");
+ STATUSBAR_PUSH(summaryview->mainwin, _("Done."));
+
+ main_window_cursor_normal(summaryview->mainwin);
+ summary_unlock(summaryview);
+ inc_unlock();
+
+ return TRUE;
+}
+
+void summary_clear_list(SummaryView *summaryview)
+{
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ gint optimal_width;
+
+ gtk_clist_freeze(clist);
+
+ gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree),
+ NULL, summary_free_msginfo_func, NULL);
+
+ if (summaryview->folder_item) {
+ folder_item_close(summaryview->folder_item);
+ summaryview->folder_item = NULL;
+ }
+
+ summaryview->display_msg = FALSE;
+
+ summaryview->selected = NULL;
+ summaryview->displayed = NULL;
+ summaryview->total_size = 0;
+ summaryview->deleted = summaryview->moved = 0;
+ summaryview->copied = 0;
+ if (summaryview->msgid_table) {
+ g_hash_table_destroy(summaryview->msgid_table);
+ summaryview->msgid_table = NULL;
+ }
+ summaryview->mlist = NULL;
+ if (summaryview->folder_table) {
+ g_hash_table_destroy(summaryview->folder_table);
+ summaryview->folder_table = NULL;
+ }
+
+ gtk_clist_clear(clist);
+ if (summaryview->col_pos[S_COL_SUBJECT] == N_SUMMARY_COLS - 1) {
+ optimal_width = gtk_clist_optimal_column_width
+ (clist, summaryview->col_pos[S_COL_SUBJECT]);
+ gtk_clist_set_column_width
+ (clist, summaryview->col_pos[S_COL_SUBJECT],
+ optimal_width);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+void summary_clear_all(SummaryView *summaryview)
+{
+ messageview_clear(summaryview->messageview);
+ summary_clear_list(summaryview);
+ summary_set_menu_sensitive(summaryview);
+ main_window_set_toolbar_sensitive(summaryview->mainwin);
+ summary_status_show(summaryview);
+}
+
+void summary_lock(SummaryView *summaryview)
+{
+ summaryview->lock_count++;
+}
+
+void summary_unlock(SummaryView *summaryview)
+{
+ if (summaryview->lock_count)
+ summaryview->lock_count--;
+}
+
+gboolean summary_is_locked(SummaryView *summaryview)
+{
+ return summaryview->lock_count > 0;
+}
+
+SummarySelection summary_get_selection_type(SummaryView *summaryview)
+{
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ SummarySelection selection;
+
+ if (!clist->row_list)
+ selection = SUMMARY_NONE;
+ else if (!clist->selection)
+ selection = SUMMARY_SELECTED_NONE;
+ else if (!clist->selection->next)
+ selection = SUMMARY_SELECTED_SINGLE;
+ else
+ selection = SUMMARY_SELECTED_MULTIPLE;
+
+ return selection;
+}
+
+GSList *summary_get_selected_msg_list(SummaryView *summaryview)
+{
+ GSList *mlist = NULL;
+ GList *cur;
+ MsgInfo *msginfo;
+
+ for (cur = GTK_CLIST(summaryview->ctree)->selection; cur != NULL;
+ cur = cur->next) {
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(cur->data);
+ mlist = g_slist_prepend(mlist, msginfo);
+ }
+
+ mlist = g_slist_reverse(mlist);
+
+ return mlist;
+}
+
+GSList *summary_get_msg_list(SummaryView *summaryview)
+{
+ GSList *mlist = NULL;
+ GtkCTree *ctree;
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ ctree = GTK_CTREE(summaryview->ctree);
+
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+ mlist = g_slist_prepend(mlist, msginfo);
+ }
+
+ mlist = g_slist_reverse(mlist);
+
+ return mlist;
+}
+
+static void summary_set_menu_sensitive(SummaryView *summaryview)
+{
+ GtkItemFactory *ifactory = summaryview->popupfactory;
+ SummarySelection selection;
+ GtkWidget *menuitem;
+ gboolean sens;
+
+ selection = summary_get_selection_type(summaryview);
+ sens = (selection == SUMMARY_SELECTED_MULTIPLE) ? FALSE : TRUE;
+
+ main_window_set_menu_sensitive(summaryview->mainwin);
+
+ if (summaryview->folder_item &&
+ (summaryview->folder_item->stype == F_OUTBOX ||
+ summaryview->folder_item->stype == F_DRAFT ||
+ summaryview->folder_item->stype == F_QUEUE)) {
+ gtk_widget_show(summaryview->reedit_menuitem);
+ gtk_widget_show(summaryview->reedit_separator);
+ menu_set_sensitive(ifactory, "/Re-edit", sens);
+ } else {
+ gtk_widget_hide(summaryview->reedit_menuitem);
+ gtk_widget_hide(summaryview->reedit_separator);
+ menu_set_sensitive(ifactory, "/Re-edit", FALSE);
+ }
+
+ if (selection == SUMMARY_NONE) {
+ menu_set_insensitive_all
+ (GTK_MENU_SHELL(summaryview->popupmenu));
+ return;
+ }
+
+ if (FOLDER_TYPE(summaryview->folder_item->folder) != F_NEWS) {
+ menu_set_sensitive(ifactory, "/Move...", TRUE);
+ menu_set_sensitive(ifactory, "/Delete", TRUE);
+ } else {
+ menu_set_sensitive(ifactory, "/Move...", FALSE);
+ menu_set_sensitive(ifactory, "/Delete", FALSE);
+ }
+
+ menu_set_sensitive(ifactory, "/Copy...", TRUE);
+
+ menu_set_sensitive(ifactory, "/Mark", TRUE);
+ menu_set_sensitive(ifactory, "/Mark/Mark", TRUE);
+ menu_set_sensitive(ifactory, "/Mark/Unmark", TRUE);
+
+ menu_set_sensitive(ifactory, "/Mark/Mark as unread", TRUE);
+ menu_set_sensitive(ifactory, "/Mark/Mark as read", TRUE);
+ menu_set_sensitive(ifactory, "/Mark/Mark all read", TRUE);
+
+ menu_set_sensitive(ifactory, "/Color label", TRUE);
+
+ menu_set_sensitive(ifactory, "/Reply", sens);
+ menu_set_sensitive(ifactory, "/Reply to", sens);
+ menu_set_sensitive(ifactory, "/Reply to/all", sens);
+ menu_set_sensitive(ifactory, "/Reply to/sender", sens);
+ menu_set_sensitive(ifactory, "/Reply to/mailing list", sens);
+ menu_set_sensitive(ifactory, "/Forward", TRUE);
+ menu_set_sensitive(ifactory, "/Forward as attachment", TRUE);
+ menu_set_sensitive(ifactory, "/Redirect", sens);
+
+ menu_set_sensitive(ifactory, "/Add sender to address book", sens);
+
+ menu_set_sensitive(ifactory, "/View", sens);
+ menu_set_sensitive(ifactory, "/View/Open in new window", sens);
+ menu_set_sensitive(ifactory, "/View/Source", sens);
+ menu_set_sensitive(ifactory, "/View/All header", sens);
+
+ menu_set_sensitive(ifactory, "/Print...", TRUE);
+
+ summary_lock(summaryview);
+ menuitem = gtk_item_factory_get_widget(ifactory, "/View/All header");
+ gtk_check_menu_item_set_active
+ (GTK_CHECK_MENU_ITEM(menuitem),
+ summaryview->messageview->textview->show_all_headers);
+ summary_unlock(summaryview);
+}
+
+void summary_select_prev_unread(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_UNREAD, FALSE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more unread messages"),
+ _("No unread message found. "
+ "Search from the end?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_UNREAD, FALSE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No unread messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_next_unread(SummaryView *summaryview)
+{
+ GtkCTreeNode *node = summaryview->selected;
+ //GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ while ((node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_UNREAD, FALSE)) == NULL) {
+ AlertValue val;
+
+ val = alertpanel(_("No more unread messages"),
+ _("No unread message found. "
+ "Go to next folder?"),
+ _("Yes"), _("Search again"), _("No"));
+ if (val == G_ALERTDEFAULT) {
+#if 0
+ if (gtk_signal_n_emissions_by_name
+ (G_OBJECT(ctree), "key_press_event") > 0)
+ gtk_signal_emit_stop_by_name
+ (G_OBJECT(ctree),
+ "key_press_event");
+#endif
+ folderview_select_next_unread(summaryview->folderview);
+ return;
+ } else if (val == G_ALERTALTERNATE)
+ node = NULL;
+ else
+ return;
+ }
+
+ if (node)
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_prev_new(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_NEW, FALSE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more new messages"),
+ _("No new message found. "
+ "Search from the end?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_NEW, FALSE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No new messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_next_new(SummaryView *summaryview)
+{
+ GtkCTreeNode *node = summaryview->selected;
+ //GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ while ((node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_NEW, FALSE)) == NULL) {
+ AlertValue val;
+
+ val = alertpanel(_("No more new messages"),
+ _("No new message found. "
+ "Go to next folder?"),
+ _("Yes"), _("Search again"), _("No"));
+ if (val == G_ALERTDEFAULT) {
+#if 0
+ if (gtk_signal_n_emissions_by_name
+ (G_OBJECT(ctree), "key_press_event") > 0)
+ gtk_signal_emit_stop_by_name
+ (G_OBJECT(ctree),
+ "key_press_event");
+#endif
+ folderview_select_next_unread(summaryview->folderview);
+ return;
+ } else if (val == G_ALERTALTERNATE)
+ node = NULL;
+ else
+ return;
+ }
+
+ if (node)
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_prev_marked(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_MARKED, TRUE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Search from the end?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_MARKED, TRUE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No marked messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_next_marked(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_MARKED, TRUE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Search from the beginning?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_MARKED, TRUE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No marked messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_prev_labeled(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more labeled messages"),
+ _("No labeled message found. "
+ "Search from the end?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_CLABEL_FLAG_MASK, TRUE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No labeled messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_next_labeled(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more labeled messages"),
+ _("No labeled message found. "
+ "Search from the beginning?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_CLABEL_FLAG_MASK, TRUE);
+ }
+
+ if (!node)
+ alertpanel_notice(_("No labeled messages."));
+ else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+}
+
+void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum)
+{
+ GtkCTreeNode *node;
+
+ node = summary_find_msg_by_msgnum(summaryview, msgnum);
+ summary_select_node(summaryview, node, FALSE, TRUE);
+}
+
+/**
+ * summary_select_node:
+ * @summaryview: Summary view.
+ * @node: Summary tree node.
+ * @display_msg: TRUE to display the selected message.
+ * @do_refresh: TRUE to refresh the widget.
+ *
+ * Select @node (bringing it into view by scrolling and expanding its
+ * thread, if necessary) and unselect all others. If @display_msg is
+ * TRUE, display the corresponding message in the message view.
+ * If @do_refresh is TRUE, the widget is refreshed.
+ **/
+void summary_select_node(SummaryView *summaryview, GtkCTreeNode *node,
+ gboolean display_msg, gboolean do_refresh)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ if (node) {
+ gtkut_ctree_expand_parent_all(ctree, node);
+ if (do_refresh) {
+ GTK_EVENTS_FLUSH();
+ gtk_widget_grab_focus(GTK_WIDGET(ctree));
+ gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0);
+ }
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ if (display_msg && summaryview->displayed == node)
+ summaryview->displayed = NULL;
+ summaryview->display_msg = display_msg;
+ gtk_sctree_select(GTK_SCTREE(ctree), node);
+ }
+}
+
+static guint summary_get_msgnum(SummaryView *summaryview, GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ if (!node)
+ return 0;
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ return msginfo->msgnum;
+}
+
+static GtkCTreeNode *summary_find_prev_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = current_node;
+ else
+ node = gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->rows - 1);
+
+ for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && !MSG_IS_INVALID(msginfo->flags) &&
+ !MSG_IS_DELETED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_next_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = current_node;
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && !MSG_IS_INVALID(msginfo->flags) &&
+ !MSG_IS_DELETED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_prev_flagged_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node,
+ MsgPermFlags flags,
+ gboolean start_from_prev)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node) {
+ if (start_from_prev)
+ node = GTK_CTREE_NODE_PREV(current_node);
+ else
+ node = current_node;
+ } else
+ node = gtk_ctree_node_nth(ctree, GTK_CLIST(ctree)->rows - 1);
+
+ for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && (msginfo->flags.perm_flags & flags) != 0) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_next_flagged_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node,
+ MsgPermFlags flags,
+ gboolean start_from_next)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node) {
+ if (start_from_next)
+ node = gtkut_ctree_node_next(ctree, current_node);
+ else
+ node = current_node;
+ } else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && (msginfo->flags.perm_flags & flags) != 0) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_msg_by_msgnum(SummaryView *summaryview,
+ guint msgnum)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && msginfo->msgnum == msgnum) break;
+ }
+
+ return node;
+}
+
+static guint attract_hash_func(gconstpointer key)
+{
+ gchar *str;
+ gchar *p;
+ guint h;
+
+ Xstrdup_a(str, (const gchar *)key, return 0);
+ trim_subject_for_compare(str);
+
+ p = str;
+ h = *p;
+
+ if (h) {
+ for (p += 1; *p != '\0'; p++)
+ h = (h << 5) - h + *p;
+ }
+
+ return h;
+}
+
+static gint attract_compare_func(gconstpointer a, gconstpointer b)
+{
+ return subject_compare((const gchar *)a, (const gchar *)b) == 0;
+}
+
+void summary_attract_by_subject(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(ctree);
+ GtkCTreeNode *src_node;
+ GtkCTreeNode *dst_node, *sibling;
+ GtkCTreeNode *tmp;
+ MsgInfo *src_msginfo, *dst_msginfo;
+ GHashTable *subject_table;
+
+ debug_print(_("Attracting messages by subject..."));
+ STATUSBAR_PUSH(summaryview->mainwin,
+ _("Attracting messages by subject..."));
+
+ main_window_cursor_wait(summaryview->mainwin);
+ gtk_clist_freeze(clist);
+
+ subject_table = g_hash_table_new(attract_hash_func,
+ attract_compare_func);
+
+ for (src_node = GTK_CTREE_NODE(clist->row_list);
+ src_node != NULL;
+ src_node = tmp) {
+ tmp = GTK_CTREE_ROW(src_node)->sibling;
+ src_msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(src_node);
+ if (!src_msginfo) continue;
+ if (!src_msginfo->subject) continue;
+
+ /* find attracting node */
+ dst_node = g_hash_table_lookup(subject_table,
+ src_msginfo->subject);
+
+ if (dst_node) {
+ dst_msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(dst_node);
+
+ /* if the time difference is more than 20 days,
+ don't attract */
+ if (ABS(src_msginfo->date_t - dst_msginfo->date_t)
+ > 60 * 60 * 24 * 20)
+ continue;
+
+ sibling = GTK_CTREE_ROW(dst_node)->sibling;
+ if (src_node != sibling)
+ gtk_ctree_move(ctree, src_node, NULL, sibling);
+ }
+
+ g_hash_table_insert(subject_table,
+ src_msginfo->subject, src_node);
+ }
+
+ g_hash_table_destroy(subject_table);
+
+ gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
+
+ gtk_clist_thaw(clist);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+
+ main_window_cursor_normal(summaryview->mainwin);
+}
+
+static void summary_free_msginfo_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, node);
+
+ if (msginfo)
+ procmsg_msginfo_free(msginfo);
+}
+
+static void summary_set_marks_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ SummaryView *summaryview = data;
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted++;
+
+ summaryview->total_size += msginfo->size;
+
+ summary_set_row_marks(summaryview, node);
+}
+
+static void summary_update_status(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ summaryview->total_size =
+ summaryview->deleted = summaryview->moved = summaryview->copied = 0;
+
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted++;
+ if (MSG_IS_MOVE(msginfo->flags))
+ summaryview->moved++;
+ if (MSG_IS_COPY(msginfo->flags))
+ summaryview->copied++;
+ summaryview->total_size += msginfo->size;
+ }
+}
+
+static void summary_status_show(SummaryView *summaryview)
+{
+ gchar *str;
+ gchar *del, *mv, *cp;
+ gchar *sel;
+ gchar *spc;
+ GList *rowlist, *cur;
+ guint n_selected = 0;
+ off_t sel_size = 0;
+ MsgInfo *msginfo;
+
+ if (!summaryview->folder_item) {
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), "");
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_select), "");
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), "");
+ return;
+ }
+
+ rowlist = GTK_CLIST(summaryview->ctree)->selection;
+ for (cur = rowlist; cur != NULL; cur = cur->next) {
+ msginfo = gtk_ctree_node_get_row_data
+ (GTK_CTREE(summaryview->ctree),
+ GTK_CTREE_NODE(cur->data));
+ if (!msginfo)
+ g_warning("summary_status_show(): msginfo == NULL\n");
+ else {
+ sel_size += msginfo->size;
+ n_selected++;
+ }
+ }
+
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) {
+ gchar *group;
+ group = get_abbrev_newsgroup_name
+ (g_basename(summaryview->folder_item->path),
+ prefs_common.ng_abbrev_len);
+ str = trim_string_before(group, 32);
+ g_free(group);
+ } else
+ str = trim_string_before(summaryview->folder_item->path, 32);
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), str);
+ g_free(str);
+
+ if (summaryview->deleted)
+ del = g_strdup_printf(_("%d deleted"), summaryview->deleted);
+ else
+ del = g_strdup("");
+ if (summaryview->moved)
+ mv = g_strdup_printf(_("%s%d moved"),
+ summaryview->deleted ? _(", ") : "",
+ summaryview->moved);
+ else
+ mv = g_strdup("");
+ if (summaryview->copied)
+ cp = g_strdup_printf(_("%s%d copied"),
+ summaryview->deleted ||
+ summaryview->moved ? _(", ") : "",
+ summaryview->copied);
+ else
+ cp = g_strdup("");
+
+ if (summaryview->deleted || summaryview->moved || summaryview->copied)
+ spc = " ";
+ else
+ spc = "";
+
+ if (n_selected)
+ sel = g_strdup_printf(" (%s)", to_human_readable(sel_size));
+ else
+ sel = g_strdup("");
+ str = g_strconcat(n_selected ? itos(n_selected) : "",
+ n_selected ? _(" item(s) selected") : "",
+ sel, spc, del, mv, cp, NULL);
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_select), str);
+ g_free(str);
+ g_free(sel);
+ g_free(del);
+ g_free(mv);
+ g_free(cp);
+
+ if (FOLDER_IS_LOCAL(summaryview->folder_item->folder)) {
+ str = g_strdup_printf(_("%d new, %d unread, %d total (%s)"),
+ summaryview->folder_item->new,
+ summaryview->folder_item->unread,
+ summaryview->folder_item->total,
+ to_human_readable(summaryview->total_size));
+ } else {
+ str = g_strdup_printf(_("%d new, %d unread, %d total"),
+ summaryview->folder_item->new,
+ summaryview->folder_item->unread,
+ summaryview->folder_item->total);
+ }
+ gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), str);
+ g_free(str);
+
+ folderview_update_msg_num(summaryview->folderview,
+ summaryview->folderview->opened);
+}
+
+static void summary_set_column_titles(SummaryView *summaryview)
+{
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *arrow;
+ gint pos;
+ const gchar *title;
+ SummaryColumnType type;
+ GtkJustification justify;
+ FolderItem *item = summaryview->folder_item;
+
+ static FolderSortKey sort_by[N_SUMMARY_COLS] = {
+ SORT_BY_MARK,
+ SORT_BY_UNREAD,
+ SORT_BY_MIME,
+ SORT_BY_SUBJECT,
+ SORT_BY_FROM,
+ SORT_BY_DATE,
+ SORT_BY_SIZE,
+ SORT_BY_NUMBER
+ };
+
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
+ type = summaryview->col_state[pos].type;
+
+ justify = (type == S_COL_NUMBER || type == S_COL_SIZE)
+ ? GTK_JUSTIFY_RIGHT : GTK_JUSTIFY_LEFT;
+
+ switch (type) {
+ case S_COL_SUBJECT:
+ case S_COL_FROM:
+ case S_COL_DATE:
+ case S_COL_NUMBER:
+ if (prefs_common.trans_hdr)
+ title = gettext(col_label[type]);
+ else
+ title = col_label[type];
+ break;
+ default:
+ title = gettext(col_label[type]);
+ }
+
+ if (type == S_COL_MARK) {
+ label = gtk_pixmap_new(markxpm, markxpmmask);
+ gtk_widget_show(label);
+ gtk_clist_set_column_widget(clist, pos, label);
+ continue;
+ } else if (type == S_COL_UNREAD) {
+ label = gtk_pixmap_new(mailxpm, mailxpmmask);
+ gtk_widget_show(label);
+ gtk_clist_set_column_widget(clist, pos, label);
+ continue;
+ } else if (type == S_COL_MIME) {
+ label = gtk_pixmap_new(clipxpm, clipxpmmask);
+ gtk_widget_show(label);
+ gtk_clist_set_column_widget(clist, pos, label);
+ continue;
+ }
+
+ hbox = gtk_hbox_new(FALSE, 4);
+ label = gtk_label_new(title);
+ if (justify == GTK_JUSTIFY_RIGHT)
+ gtk_box_pack_end(GTK_BOX(hbox), label,
+ FALSE, FALSE, 0);
+ else
+ gtk_box_pack_start(GTK_BOX(hbox), label,
+ FALSE, FALSE, 0);
+
+ if (item && item->sort_key == sort_by[type]) {
+ arrow = gtk_arrow_new
+ (item->sort_type == SORT_ASCENDING
+ ? GTK_ARROW_UP : GTK_ARROW_DOWN,
+ GTK_SHADOW_IN);
+ if (justify == GTK_JUSTIFY_RIGHT)
+ gtk_box_pack_start(GTK_BOX(hbox), arrow,
+ FALSE, FALSE, 0);
+ else
+ gtk_box_pack_end(GTK_BOX(hbox), arrow,
+ FALSE, FALSE, 0);
+ }
+
+ gtk_widget_show_all(hbox);
+ gtk_clist_set_column_widget(clist, pos, hbox);
+ }
+}
+
+void summary_sort(SummaryView *summaryview,
+ FolderSortKey sort_key, FolderSortType sort_type)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ GtkCListCompareFunc cmp_func;
+ FolderItem *item = summaryview->folder_item;
+
+ if (!item || !item->path || !item->parent || item->no_select) return;
+
+ switch (sort_key) {
+ case SORT_BY_MARK:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_mark;
+ break;
+ case SORT_BY_UNREAD:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_unread;
+ break;
+ case SORT_BY_MIME:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_mime;
+ break;
+ case SORT_BY_NUMBER:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_num;
+ break;
+ case SORT_BY_SIZE:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_size;
+ break;
+ case SORT_BY_DATE:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_date;
+ break;
+ case SORT_BY_FROM:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_from;
+ break;
+ case SORT_BY_SUBJECT:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_subject;
+ break;
+ case SORT_BY_LABEL:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_label;
+ break;
+ case SORT_BY_TO:
+ cmp_func = (GtkCListCompareFunc)summary_cmp_by_to;
+ break;
+ case SORT_BY_NONE:
+ item->sort_key = sort_key;
+ item->sort_type = SORT_ASCENDING;
+ summary_set_column_titles(summaryview);
+ summary_set_menu_sensitive(summaryview);
+ return;
+ default:
+ return;
+ }
+
+ debug_print(_("Sorting summary..."));
+ STATUSBAR_PUSH(summaryview->mainwin, _("Sorting summary..."));
+
+ main_window_cursor_wait(summaryview->mainwin);
+
+ gtk_clist_set_compare_func(clist, cmp_func);
+
+ gtk_clist_set_sort_type(clist, (GtkSortType)sort_type);
+ item->sort_key = sort_key;
+ item->sort_type = sort_type;
+
+ summary_set_column_titles(summaryview);
+ summary_set_menu_sensitive(summaryview);
+
+ gtk_ctree_sort_recursive(ctree, NULL);
+
+ gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+
+ main_window_cursor_normal(summaryview->mainwin);
+}
+
+gboolean summary_insert_gnode_func(GtkCTree *ctree, guint depth, GNode *gnode,
+ GtkCTreeNode *cnode, gpointer data)
+{
+ SummaryView *summaryview = (SummaryView *)data;
+ MsgInfo *msginfo = (MsgInfo *)gnode->data;
+ gchar *text[N_SUMMARY_COLS];
+ gint *col_pos = summaryview->col_pos;
+ const gchar *msgid = msginfo->msgid;
+ GHashTable *msgid_table = summaryview->msgid_table;
+
+ summary_set_header(summaryview, text, msginfo);
+
+ gtk_ctree_set_node_info(ctree, cnode, text[col_pos[S_COL_SUBJECT]], 2,
+ NULL, NULL, NULL, NULL, FALSE,
+ gnode->parent->parent ? TRUE : FALSE);
+#define SET_TEXT(col) \
+ gtk_ctree_node_set_text(ctree, cnode, col_pos[col], \
+ text[col_pos[col]])
+
+ SET_TEXT(S_COL_NUMBER);
+ SET_TEXT(S_COL_SIZE);
+ SET_TEXT(S_COL_DATE);
+ SET_TEXT(S_COL_FROM);
+ SET_TEXT(S_COL_SUBJECT);
+
+#undef SET_TEXT
+
+ GTKUT_CTREE_NODE_SET_ROW_DATA(cnode, msginfo);
+ summary_set_marks_func(ctree, cnode, summaryview);
+
+ if (msgid && msgid[0] != '\0')
+ g_hash_table_insert(msgid_table, (gchar *)msgid, cnode);
+
+ return TRUE;
+}
+
+static void summary_set_ctree_from_list(SummaryView *summaryview,
+ GSList *mlist)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+ GtkCTreeNode *node = NULL;
+ GHashTable *msgid_table;
+
+ if (!mlist) return;
+
+ debug_print(_("\tSetting summary from message data..."));
+ STATUSBAR_PUSH(summaryview->mainwin,
+ _("Setting summary from message data..."));
+ gdk_flush();
+
+ msgid_table = g_hash_table_new(g_str_hash, g_str_equal);
+ summaryview->msgid_table = msgid_table;
+
+ if (summaryview->folder_item->threaded) {
+ GNode *root, *gnode;
+
+ root = procmsg_get_thread_tree(mlist);
+
+ for (gnode = root->children; gnode != NULL;
+ gnode = gnode->next) {
+ node = gtk_ctree_insert_gnode
+ (ctree, NULL, node, gnode,
+ summary_insert_gnode_func, summaryview);
+ }
+
+ g_node_destroy(root);
+
+ summary_thread_init(summaryview);
+ } else {
+ gchar *text[N_SUMMARY_COLS];
+
+ mlist = g_slist_reverse(mlist);
+ for (; mlist != NULL; mlist = mlist->next) {
+ msginfo = (MsgInfo *)mlist->data;
+
+ summary_set_header(summaryview, text, msginfo);
+
+ node = gtk_ctree_insert_node
+ (ctree, NULL, node, text, 2,
+ NULL, NULL, NULL, NULL, FALSE, FALSE);
+ GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo);
+ summary_set_marks_func(ctree, node, summaryview);
+
+ if (msginfo->msgid && msginfo->msgid[0] != '\0')
+ g_hash_table_insert(msgid_table,
+ msginfo->msgid, node);
+ }
+ mlist = g_slist_reverse(mlist);
+ }
+
+ if (prefs_common.enable_hscrollbar &&
+ summaryview->col_pos[S_COL_SUBJECT] == N_SUMMARY_COLS - 1) {
+ gint optimal_width;
+
+ optimal_width = gtk_clist_optimal_column_width
+ (GTK_CLIST(ctree), summaryview->col_pos[S_COL_SUBJECT]);
+ gtk_clist_set_column_width(GTK_CLIST(ctree),
+ summaryview->col_pos[S_COL_SUBJECT],
+ optimal_width);
+ }
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+ if (debug_mode)
+ debug_print("\tmsgid hash table size = %d\n",
+ g_hash_table_size(msgid_table));
+}
+
+struct wcachefp
+{
+ FILE *cache_fp;
+ FILE *mark_fp;
+};
+
+gint summary_write_cache(SummaryView *summaryview)
+{
+ struct wcachefp fps;
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ FolderItem *item;
+ gchar *buf;
+
+ item = summaryview->folder_item;
+ if (!item || !item->path)
+ return -1;
+
+ fps.cache_fp = procmsg_open_cache_file(item, DATA_WRITE);
+ if (fps.cache_fp == NULL)
+ return -1;
+ fps.mark_fp = procmsg_open_mark_file(item, DATA_WRITE);
+ if (fps.mark_fp == NULL) {
+ fclose(fps.cache_fp);
+ return -1;
+ }
+
+ buf = g_strdup_printf(_("Writing summary cache (%s)..."), item->path);
+ debug_print(buf);
+ STATUSBAR_PUSH(summaryview->mainwin, buf);
+ g_free(buf);
+
+ gtk_ctree_pre_recursive(ctree, NULL, summary_write_cache_func, &fps);
+
+ procmsg_flush_mark_queue(item, fps.mark_fp);
+ item->unmarked_num = 0;
+
+ fclose(fps.cache_fp);
+ fclose(fps.mark_fp);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+
+ return 0;
+}
+
+static void summary_write_cache_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ struct wcachefp *fps = data;
+ MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, node);
+
+ if (msginfo == NULL) return;
+
+ if (msginfo->folder->mark_queue != NULL) {
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW);
+ }
+
+ procmsg_write_cache(msginfo, fps->cache_fp);
+ procmsg_write_flags(msginfo, fps->mark_fp);
+}
+
+static void summary_set_header(SummaryView *summaryview, gchar *text[],
+ MsgInfo *msginfo)
+{
+ static gchar date_modified[80];
+ static gchar *to = NULL;
+ static gchar *subject = NULL;
+ gint *col_pos = summaryview->col_pos;
+
+ text[col_pos[S_COL_MARK]] = NULL;
+ text[col_pos[S_COL_UNREAD]] = NULL;
+ text[col_pos[S_COL_MIME]] = NULL;
+ text[col_pos[S_COL_NUMBER]] = itos(msginfo->msgnum);
+ text[col_pos[S_COL_SIZE]] = to_human_readable(msginfo->size);
+
+ if (msginfo->date_t) {
+ procheader_date_get_localtime(date_modified,
+ sizeof(date_modified),
+ msginfo->date_t);
+ text[col_pos[S_COL_DATE]] = date_modified;
+ } else if (msginfo->date)
+ text[col_pos[S_COL_DATE]] = msginfo->date;
+ else
+ text[col_pos[S_COL_DATE]] = _("(No Date)");
+
+ text[col_pos[S_COL_FROM]] = msginfo->fromname ? msginfo->fromname :
+ _("(No From)");
+ if (prefs_common.swap_from && msginfo->from && msginfo->to &&
+ cur_account && cur_account->address) {
+ gchar *from;
+
+ Xstrdup_a(from, msginfo->from, return);
+ extract_address(from);
+ if (!strcmp(from, cur_account->address)) {
+ g_free(to);
+ to = g_strconcat("-->", msginfo->to, NULL);
+ text[col_pos[S_COL_FROM]] = to;
+ }
+ }
+
+ if (msginfo->subject) {
+ if (msginfo->folder && msginfo->folder->trim_summary_subject) {
+ g_free(subject);
+ subject = g_strdup(msginfo->subject);
+ trim_subject(subject);
+ text[col_pos[S_COL_SUBJECT]] = subject;
+ } else
+ text[col_pos[S_COL_SUBJECT]] = msginfo->subject;
+ } else
+ text[col_pos[S_COL_SUBJECT]] = _("(No Subject)");
+}
+
+static void summary_display_msg(SummaryView *summaryview, GtkCTreeNode *row)
+{
+ summary_display_msg_full(summaryview, row, FALSE, FALSE);
+}
+
+static void summary_display_msg_full(SummaryView *summaryview,
+ GtkCTreeNode *row,
+ gboolean new_window, gboolean all_headers)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+ gint val;
+
+ if (!new_window && summaryview->displayed == row) return;
+ g_return_if_fail(row != NULL);
+
+ if (summary_is_locked(summaryview)) return;
+ summary_lock(summaryview);
+
+ STATUSBAR_POP(summaryview->mainwin);
+ GTK_EVENTS_FLUSH();
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+
+ if (new_window) {
+ MessageView *msgview;
+
+ msgview = messageview_create_with_new_window();
+ val = messageview_show(msgview, msginfo, all_headers);
+ } else {
+ MessageView *msgview;
+
+ msgview = summaryview->messageview;
+
+ summaryview->displayed = row;
+ if (!messageview_is_visible(msgview))
+ main_window_toggle_message_view(summaryview->mainwin);
+ val = messageview_show(msgview, msginfo, all_headers);
+ if (msgview->type == MVIEW_TEXT ||
+ (msgview->type == MVIEW_MIME &&
+ (GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL ||
+ gtk_notebook_get_current_page
+ (GTK_NOTEBOOK(msgview->mimeview->notebook)) == 0)))
+ gtk_widget_grab_focus(summaryview->ctree);
+ GTK_EVENTS_FLUSH();
+ gtkut_ctree_node_move_if_on_the_edge(ctree, row);
+ }
+
+ if (val == 0 &&
+ (new_window || !prefs_common.mark_as_read_on_new_window)) {
+ if (MSG_IS_NEW(msginfo->flags))
+ summaryview->folder_item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ summaryview->folder_item->unread--;
+ if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) {
+ MSG_UNSET_PERM_FLAGS
+ (msginfo->flags, MSG_NEW | MSG_UNREAD);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags
+ (msginfo, MSG_NEW | MSG_UNREAD);
+ summary_set_row_marks(summaryview, row);
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_status_show(summaryview);
+ }
+ }
+
+ summary_set_menu_sensitive(summaryview);
+ main_window_set_toolbar_sensitive(summaryview->mainwin);
+
+ statusbar_pop_all();
+
+ summary_unlock(summaryview);
+}
+
+void summary_display_msg_selected(SummaryView *summaryview,
+ gboolean all_headers)
+{
+ if (summary_is_locked(summaryview)) return;
+ summaryview->displayed = NULL;
+ summary_display_msg_full(summaryview, summaryview->selected, FALSE,
+ all_headers);
+}
+
+void summary_redisplay_msg(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+
+ if (summaryview->displayed) {
+ node = summaryview->displayed;
+ summaryview->displayed = NULL;
+ summary_display_msg(summaryview, node);
+ }
+}
+
+void summary_open_msg(SummaryView *summaryview)
+{
+ if (!summaryview->selected) return;
+
+ summary_display_msg_full(summaryview, summaryview->selected,
+ TRUE, FALSE);
+}
+
+void summary_view_source(SummaryView * summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+ SourceWindow *srcwin;
+
+ if (!summaryview->selected) return;
+
+ srcwin = source_window_create();
+ msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected);
+ source_window_show_msg(srcwin, msginfo);
+ source_window_show(srcwin);
+}
+
+void summary_reedit(SummaryView *summaryview)
+{
+ MsgInfo *msginfo;
+
+ if (!summaryview->selected) return;
+ if (!summaryview->folder_item) return;
+ if (summaryview->folder_item->stype != F_OUTBOX &&
+ summaryview->folder_item->stype != F_DRAFT &&
+ summaryview->folder_item->stype != F_QUEUE) return;
+
+ msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
+ summaryview->selected);
+ if (!msginfo) return;
+
+ compose_reedit(msginfo);
+}
+
+void summary_step(SummaryView *summaryview, GtkScrollType type)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+
+ if (summary_is_locked(summaryview)) return;
+
+ if (type == GTK_SCROLL_STEP_FORWARD) {
+ node = gtkut_ctree_node_next(ctree, summaryview->selected);
+ if (node)
+ gtkut_ctree_expand_parent_all(ctree, node);
+ else
+ return;
+ } else {
+ if (summaryview->selected) {
+ node = GTK_CTREE_NODE_PREV(summaryview->selected);
+ if (!node) return;
+ }
+ }
+
+ if (messageview_is_visible(summaryview->messageview))
+ summaryview->display_msg = TRUE;
+
+ g_signal_emit_by_name(G_OBJECT(ctree), "scroll_vertical", type, 0.0);
+
+ if (GTK_CLIST(ctree)->selection)
+ gtk_sctree_set_anchor_row
+ (GTK_SCTREE(ctree),
+ GTK_CTREE_NODE(GTK_CLIST(ctree)->selection->data));
+}
+
+void summary_toggle_view(SummaryView *summaryview)
+{
+ if (!messageview_is_visible(summaryview->messageview) &&
+ summaryview->selected)
+ summary_display_msg(summaryview,
+ summaryview->selected);
+ else
+ main_window_toggle_message_view(summaryview->mainwin);
+}
+
+static gboolean summary_search_unread_recursive(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ MsgInfo *msginfo;
+
+ if (node) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (msginfo && MSG_IS_UNREAD(msginfo->flags))
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->children;
+ } else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ while (node) {
+ if (summary_search_unread_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static gboolean summary_have_unread_children(SummaryView *summaryview,
+ GtkCTreeNode *node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ if (!node) return FALSE;
+
+ node = GTK_CTREE_ROW(node)->children;
+
+ while (node) {
+ if (summary_search_unread_recursive(ctree, node) == TRUE)
+ return TRUE;
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ return FALSE;
+}
+
+static void summary_set_row_marks(SummaryView *summaryview, GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkStyle *style = NULL;
+ MsgInfo *msginfo;
+ MsgFlags flags;
+ gint *col_pos = summaryview->col_pos;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (!msginfo) return;
+
+ flags = msginfo->flags;
+
+ gtk_ctree_node_set_foreground(ctree, row, NULL);
+
+ /* set new/unread column */
+ if (MSG_IS_NEW(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_UNREAD],
+ newxpm, newxpmmask);
+ } else if (MSG_IS_UNREAD(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_UNREAD],
+ unreadxpm, unreadxpmmask);
+ } else if (MSG_IS_REPLIED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_UNREAD],
+ repliedxpm, repliedxpmmask);
+ } else if (MSG_IS_FORWARDED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_UNREAD],
+ forwardedxpm, forwardedxpmmask);
+ } else {
+ gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_UNREAD],
+ NULL);
+ }
+
+ if (prefs_common.bold_unread &&
+ (MSG_IS_UNREAD(flags) ||
+ (!GTK_CTREE_ROW(row)->expanded &&
+ GTK_CTREE_ROW(row)->children &&
+ summary_have_unread_children(summaryview, row))))
+ style = bold_style;
+
+ /* set mark column */
+ if (MSG_IS_DELETED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MARK],
+ deletedxpm, deletedxpmmask);
+ if (style)
+ style = bold_deleted_style;
+ else
+ gtk_ctree_node_set_foreground
+ (ctree, row, &summaryview->color_dim);
+ } else if (MSG_IS_MOVE(flags)) {
+ gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_MARK], "o");
+ if (style)
+ style = bold_marked_style;
+ else
+ gtk_ctree_node_set_foreground
+ (ctree, row, &summaryview->color_marked);
+ } else if (MSG_IS_COPY(flags)) {
+ gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_MARK], "O");
+ if (style)
+ style = bold_marked_style;
+ else
+ gtk_ctree_node_set_foreground
+ (ctree, row, &summaryview->color_marked);
+ } else if (MSG_IS_MARKED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MARK],
+ markxpm, markxpmmask);
+ } else {
+ gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_MARK], NULL);
+ }
+
+ if (MSG_IS_MIME(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME],
+ clipxpm, clipxpmmask);
+ } else {
+ gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_MIME], NULL);
+ }
+
+ gtk_ctree_node_set_row_style(ctree, row, style);
+
+ if (MSG_GET_COLORLABEL(flags))
+ summary_set_colorlabel_color(ctree, row,
+ MSG_GET_COLORLABEL_VALUE(flags));
+}
+
+void summary_set_marks_selected(SummaryView *summaryview)
+{
+ GList *cur;
+
+ for (cur = GTK_CLIST(summaryview->ctree)->selection; cur != NULL;
+ cur = cur->next)
+ summary_set_row_marks(summaryview, GTK_CTREE_NODE(cur->data));
+}
+
+static void summary_mark_row(SummaryView *summaryview, GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ msginfo->to_folder = NULL;
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted--;
+ if (MSG_IS_MOVE(msginfo->flags))
+ summaryview->moved--;
+ if (MSG_IS_COPY(msginfo->flags))
+ summaryview->copied--;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
+ summary_set_row_marks(summaryview, row);
+ debug_print(_("Message %d is marked\n"), msginfo->msgnum);
+}
+
+void summary_mark(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GList *cur;
+
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
+ summary_mark_row(summaryview, GTK_CTREE_NODE(cur->data));
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_IMAP) {
+ GSList *msglist;
+ msglist = summary_get_selected_msg_list(summaryview);
+ imap_msg_list_set_perm_flags(msglist, MSG_MARKED);
+ g_slist_free(msglist);
+ }
+
+ /* summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); */
+}
+
+static void summary_mark_row_as_read(SummaryView *summaryview,
+ GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (MSG_IS_NEW(msginfo->flags))
+ summaryview->folder_item->new--;
+ if (MSG_IS_UNREAD(msginfo->flags))
+ summaryview->folder_item->unread--;
+ if (MSG_IS_NEW(msginfo->flags) ||
+ MSG_IS_UNREAD(msginfo->flags)) {
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD);
+ summary_set_row_marks(summaryview, row);
+ debug_print(_("Message %d is marked as being read\n"),
+ msginfo->msgnum);
+ }
+}
+
+void summary_mark_as_read(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GList *cur;
+
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
+ summary_mark_row_as_read(summaryview,
+ GTK_CTREE_NODE(cur->data));
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_IMAP) {
+ GSList *msglist;
+ msglist = summary_get_selected_msg_list(summaryview);
+ imap_msg_list_unset_perm_flags(msglist, MSG_NEW | MSG_UNREAD);
+ g_slist_free(msglist);
+ }
+
+ summary_status_show(summaryview);
+}
+
+void summary_mark_all_read(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ GtkCTreeNode *node;
+
+ gtk_clist_freeze(clist);
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); node != NULL;
+ node = gtkut_ctree_node_next(ctree, node))
+ summary_mark_row_as_read(summaryview, node);
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); node != NULL;
+ node = gtkut_ctree_node_next(ctree, node)) {
+ if (!GTK_CTREE_ROW(node)->expanded)
+ summary_set_row_marks(summaryview, node);
+ }
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_IMAP) {
+ GSList *msglist;
+ msglist = summary_get_msg_list(summaryview);
+ imap_msg_list_unset_perm_flags(msglist, MSG_NEW | MSG_UNREAD);
+ g_slist_free(msglist);
+ }
+ gtk_clist_thaw(clist);
+
+ summary_status_show(summaryview);
+}
+
+static void summary_mark_row_as_unread(SummaryView *summaryview,
+ GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (MSG_IS_DELETED(msginfo->flags)) {
+ msginfo->to_folder = NULL;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+ summaryview->deleted--;
+ }
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED | MSG_FORWARDED);
+ if (!MSG_IS_UNREAD(msginfo->flags)) {
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_UNREAD);
+ summaryview->folder_item->unread++;
+ debug_print(_("Message %d is marked as unread\n"),
+ msginfo->msgnum);
+ }
+ summary_set_row_marks(summaryview, row);
+}
+
+void summary_mark_as_unread(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GList *cur;
+
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
+ summary_mark_row_as_unread(summaryview,
+ GTK_CTREE_NODE(cur->data));
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_IMAP) {
+ GSList *msglist;
+ msglist = summary_get_selected_msg_list(summaryview);
+ imap_msg_list_unset_perm_flags(msglist, MSG_REPLIED);
+ imap_msg_list_set_perm_flags(msglist, MSG_UNREAD);
+ g_slist_free(msglist);
+ }
+
+ summary_status_show(summaryview);
+}
+
+static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+
+ if (MSG_IS_DELETED(msginfo->flags)) return;
+
+ msginfo->to_folder = NULL;
+ if (MSG_IS_MOVE(msginfo->flags))
+ summaryview->moved--;
+ if (MSG_IS_COPY(msginfo->flags))
+ summaryview->copied--;
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
+ MSG_SET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+ summaryview->deleted++;
+
+ if (!prefs_common.immediate_exec &&
+ summaryview->folder_item->stype != F_TRASH)
+ summary_set_row_marks(summaryview, row);
+
+ debug_print(_("Message %s/%d is set to delete\n"),
+ msginfo->folder->path, msginfo->msgnum);
+}
+
+void summary_delete(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ FolderItem *item = summaryview->folder_item;
+ GList *cur;
+ GtkCTreeNode *sel_last = NULL;
+ GtkCTreeNode *node;
+
+ if (!item || FOLDER_TYPE(item->folder) == F_NEWS) return;
+
+ if (summary_is_locked(summaryview)) return;
+
+ /* if current folder is trash, ask for confirmation */
+ if (item->stype == F_TRASH) {
+ AlertValue aval;
+
+ aval = alertpanel(_("Delete message(s)"),
+ _("Do you really want to delete message(s) from the trash?"),
+ _("Yes"), _("No"), NULL);
+ if (aval != G_ALERTDEFAULT) return;
+ }
+
+ /* next code sets current row focus right. We need to find a row
+ * that is not deleted. */
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) {
+ sel_last = GTK_CTREE_NODE(cur->data);
+ summary_delete_row(summaryview, sel_last);
+ }
+
+ node = summary_find_next_msg(summaryview, sel_last);
+ if (!node)
+ node = summary_find_prev_msg(summaryview, sel_last);
+
+ if (node) {
+ if (sel_last && node == gtkut_ctree_node_next(ctree, sel_last))
+ summary_step(summaryview, GTK_SCROLL_STEP_FORWARD);
+ else if (sel_last && node == GTK_CTREE_NODE_PREV(sel_last))
+ summary_step(summaryview, GTK_SCROLL_STEP_BACKWARD);
+ else
+ summary_select_node
+ (summaryview, node,
+ messageview_is_visible(summaryview->messageview),
+ FALSE);
+ }
+
+ if (prefs_common.immediate_exec || item->stype == F_TRASH)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+}
+
+void summary_delete_duplicated(SummaryView *summaryview)
+{
+ if (!summaryview->folder_item ||
+ FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
+ if (summaryview->folder_item->stype == F_TRASH) return;
+
+ main_window_cursor_wait(summaryview->mainwin);
+ debug_print(_("Deleting duplicated messages..."));
+ STATUSBAR_PUSH(summaryview->mainwin,
+ _("Deleting duplicated messages..."));
+
+ gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
+ GTK_CTREE_FUNC(summary_delete_duplicated_func),
+ summaryview);
+
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+ main_window_cursor_normal(summaryview->mainwin);
+}
+
+static void summary_delete_duplicated_func(GtkCTree *ctree, GtkCTreeNode *node,
+ SummaryView *summaryview)
+{
+ GtkCTreeNode *found;
+ MsgInfo *msginfo;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (!msginfo || !msginfo->msgid || !*msginfo->msgid) return;
+
+ found = g_hash_table_lookup(summaryview->msgid_table, msginfo->msgid);
+
+ if (found && found != node)
+ summary_delete_row(summaryview, node);
+}
+
+static void summary_unmark_row(SummaryView *summaryview, GtkCTreeNode *row)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ msginfo->to_folder = NULL;
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted--;
+ if (MSG_IS_MOVE(msginfo->flags))
+ summaryview->moved--;
+ if (MSG_IS_COPY(msginfo->flags))
+ summaryview->copied--;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
+ summary_set_row_marks(summaryview, row);
+
+ debug_print(_("Message %s/%d is unmarked\n"),
+ msginfo->folder->path, msginfo->msgnum);
+}
+
+void summary_unmark(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GList *cur;
+
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
+ summary_unmark_row(summaryview, GTK_CTREE_NODE(cur->data));
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_IMAP) {
+ GSList *msglist;
+ msglist = summary_get_selected_msg_list(summaryview);
+ imap_msg_list_unset_perm_flags(msglist, MSG_MARKED);
+ g_slist_free(msglist);
+ }
+
+ summary_status_show(summaryview);
+}
+
+static void summary_move_row_to(SummaryView *summaryview, GtkCTreeNode *row,
+ FolderItem *to_folder)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ g_return_if_fail(to_folder != NULL);
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ msginfo->to_folder = to_folder;
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted--;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_COPY);
+ if (!MSG_IS_MOVE(msginfo->flags)) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
+ summaryview->moved++;
+ }
+ if (!prefs_common.immediate_exec)
+ summary_set_row_marks(summaryview, row);
+
+ debug_print(_("Message %d is set to move to %s\n"),
+ msginfo->msgnum, to_folder->path);
+}
+
+void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
+{
+ GList *cur;
+
+ if (!to_folder) return;
+ if (!summaryview->folder_item ||
+ FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
+
+ if (summary_is_locked(summaryview)) return;
+
+ if (summaryview->folder_item == to_folder) {
+ alertpanel_warning(_("Destination is same as current folder."));
+ return;
+ }
+
+ for (cur = GTK_CLIST(summaryview->ctree)->selection;
+ cur != NULL; cur = cur->next)
+ summary_move_row_to
+ (summaryview, GTK_CTREE_NODE(cur->data), to_folder);
+
+ summary_step(summaryview, GTK_SCROLL_STEP_FORWARD);
+
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+}
+
+void summary_move_to(SummaryView *summaryview)
+{
+ FolderItem *to_folder;
+
+ if (!summaryview->folder_item ||
+ FOLDER_TYPE(summaryview->folder_item->folder) == F_NEWS) return;
+
+ to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
+ FOLDER_SEL_MOVE, NULL);
+ summary_move_selected_to(summaryview, to_folder);
+}
+
+static void summary_copy_row_to(SummaryView *summaryview, GtkCTreeNode *row,
+ FolderItem *to_folder)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ g_return_if_fail(to_folder != NULL);
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ msginfo->to_folder = to_folder;
+ if (MSG_IS_DELETED(msginfo->flags))
+ summaryview->deleted--;
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
+ if (!MSG_IS_COPY(msginfo->flags)) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_COPY);
+ summaryview->copied++;
+ }
+ if (!prefs_common.immediate_exec)
+ summary_set_row_marks(summaryview, row);
+
+ debug_print(_("Message %d is set to copy to %s\n"),
+ msginfo->msgnum, to_folder->path);
+}
+
+void summary_copy_selected_to(SummaryView *summaryview, FolderItem *to_folder)
+{
+ GList *cur;
+
+ if (!to_folder) return;
+ if (!summaryview->folder_item) return;
+
+ if (summary_is_locked(summaryview)) return;
+
+ if (summaryview->folder_item == to_folder) {
+ alertpanel_warning
+ (_("Destination for copy is same as current folder."));
+ return;
+ }
+
+ for (cur = GTK_CLIST(summaryview->ctree)->selection;
+ cur != NULL; cur = cur->next)
+ summary_copy_row_to
+ (summaryview, GTK_CTREE_NODE(cur->data), to_folder);
+
+ summary_step(summaryview, GTK_SCROLL_STEP_FORWARD);
+
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+}
+
+void summary_copy_to(SummaryView *summaryview)
+{
+ FolderItem *to_folder;
+
+ if (!summaryview->folder_item) return;
+
+ to_folder = foldersel_folder_sel(summaryview->folder_item->folder,
+ FOLDER_SEL_COPY, NULL);
+ summary_copy_selected_to(summaryview, to_folder);
+}
+
+void summary_add_address(SummaryView *summaryview)
+{
+ MsgInfo *msginfo;
+ gchar *from;
+
+ msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
+ summaryview->selected);
+ if (!msginfo) return;
+
+ Xstrdup_a(from, msginfo->from, return);
+ eliminate_address_comment(from);
+ extract_address(from);
+ addressbook_add_contact(msginfo->fromname, from, NULL);
+}
+
+void summary_select_all(SummaryView *summaryview)
+{
+ if (!summaryview->folder_item) return;
+
+ if (summaryview->folder_item->total >= 500) {
+ STATUSBAR_PUSH(summaryview->mainwin,
+ _("Selecting all messages..."));
+ main_window_cursor_wait(summaryview->mainwin);
+ }
+
+ gtk_clist_select_all(GTK_CLIST(summaryview->ctree));
+
+ if (summaryview->folder_item->total >= 500) {
+ STATUSBAR_POP(summaryview->mainwin);
+ main_window_cursor_normal(summaryview->mainwin);
+ }
+}
+
+void summary_unselect_all(SummaryView *summaryview)
+{
+ gtk_sctree_unselect_all(GTK_SCTREE(summaryview->ctree));
+}
+
+void summary_select_thread(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node = summaryview->selected;
+
+ if (!node) return;
+
+ while (GTK_CTREE_ROW(node)->parent != NULL)
+ node = GTK_CTREE_ROW(node)->parent;
+
+ if (node != summaryview->selected)
+ summary_select_node
+ (summaryview, node,
+ messageview_is_visible(summaryview->messageview),
+ FALSE);
+
+ gtk_ctree_select_recursive(ctree, node);
+
+ summary_status_show(summaryview);
+}
+
+void summary_save_as(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+ gchar *filename = NULL;
+ gchar *src, *dest;
+
+ if (!summaryview->selected) return;
+ msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected);
+ if (!msginfo) return;
+
+ if (msginfo->subject) {
+ Xstrdup_a(filename, msginfo->subject, return);
+ subst_for_filename(filename);
+ }
+ dest = filesel_select_file(_("Save as"), filename);
+ if (!dest) return;
+ if (is_file_exist(dest)) {
+ AlertValue aval;
+
+ aval = alertpanel(_("Overwrite"),
+ _("Overwrite existing file?"),
+ _("OK"), _("Cancel"), NULL);
+ if (G_ALERTDEFAULT != aval) return;
+ }
+
+ src = procmsg_get_message_file(msginfo);
+ if (copy_file(src, dest, TRUE) < 0) {
+ alertpanel_error(_("Can't save the file `%s'."),
+ g_basename(dest));
+ }
+ g_free(src);
+}
+
+void summary_print(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ MsgInfo *msginfo;
+ GList *cur;
+ gchar *cmdline;
+ gchar *p;
+
+ if (clist->selection == NULL) return;
+
+ cmdline = input_dialog(_("Print"),
+ _("Enter the print command line:\n"
+ "(`%s' will be replaced with file name)"),
+ prefs_common.print_cmd);
+ if (!cmdline) return;
+ if (!(p = strchr(cmdline, '%')) || *(p + 1) != 's' ||
+ strchr(p + 2, '%')) {
+ alertpanel_error(_("Print command line is invalid:\n`%s'"),
+ cmdline);
+ g_free(cmdline);
+ return;
+ }
+
+ for (cur = clist->selection; cur != NULL; cur = cur->next) {
+ msginfo = gtk_ctree_node_get_row_data
+ (ctree, GTK_CTREE_NODE(cur->data));
+ if (msginfo) procmsg_print_message(msginfo, cmdline);
+ }
+
+ g_free(cmdline);
+}
+
+gboolean summary_execute(SummaryView *summaryview)
+{
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ gint val = 0;
+
+ if (!summaryview->folder_item) return FALSE;
+
+ if (summary_is_locked(summaryview)) return FALSE;
+ summary_lock(summaryview);
+
+ gtk_clist_freeze(clist);
+
+ val |= summary_execute_move(summaryview);
+ val |= summary_execute_copy(summaryview);
+ val |= summary_execute_delete(summaryview);
+
+ statusbar_pop_all();
+ STATUSBAR_POP(summaryview->mainwin);
+
+ summary_remove_invalid_messages(summaryview);
+
+ gtk_clist_thaw(clist);
+
+ summary_unlock(summaryview);
+
+ if (val != 0) {
+ alertpanel_error(_("Error occurred while processing messages."));
+ }
+
+ return TRUE;
+}
+
+static void summary_remove_invalid_messages(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ GtkCTreeNode *node, *next;
+ GtkCTreeNode *new_selected = NULL;
+
+ gtk_clist_freeze(clist);
+
+ if (summaryview->folder_item->threaded)
+ summary_unthread_for_exec(summaryview);
+
+ node = GTK_CTREE_NODE(clist->row_list);
+ for (; node != NULL; node = next) {
+ MsgInfo *msginfo;
+
+ next = gtkut_ctree_node_next(ctree, node);
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+ if (!msginfo || !MSG_IS_INVALID(msginfo->flags))
+ continue;
+
+ if (node == summaryview->displayed) {
+ messageview_clear(summaryview->messageview);
+ summaryview->displayed = NULL;
+ }
+ if (GTK_CTREE_ROW(node)->children != NULL) {
+ g_warning("summary_execute(): children != NULL\n");
+ continue;
+ }
+
+ if (!new_selected &&
+ gtkut_ctree_node_is_selected(ctree, node)) {
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ new_selected = summary_find_next_msg(summaryview, node);
+ if (!new_selected)
+ new_selected = summary_find_prev_msg
+ (summaryview, node);
+ }
+
+ if (msginfo->msgid && *msginfo->msgid &&
+ node == g_hash_table_lookup(summaryview->msgid_table,
+ msginfo->msgid))
+ g_hash_table_remove(summaryview->msgid_table,
+ msginfo->msgid);
+
+ gtk_ctree_remove_node(ctree, node);
+ procmsg_msginfo_free(msginfo);
+ }
+
+ if (new_selected) {
+ gtk_sctree_select
+ (GTK_SCTREE(ctree),
+ summaryview->displayed ? summaryview->displayed
+ : new_selected);
+ }
+
+ if (summaryview->folder_item->threaded)
+ summary_thread_build(summaryview);
+
+ summaryview->selected = clist->selection ?
+ GTK_CTREE_NODE(clist->selection->data) : NULL;
+
+ if (!GTK_CLIST(summaryview->ctree)->row_list) {
+ menu_set_insensitive_all
+ (GTK_MENU_SHELL(summaryview->popupmenu));
+ gtk_widget_grab_focus(summaryview->folderview->ctree);
+ } else
+ gtk_widget_grab_focus(summaryview->ctree);
+
+ summary_write_cache(summaryview);
+
+ summary_update_status(summaryview);
+ summary_status_show(summaryview);
+
+ gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
+
+ gtk_clist_thaw(clist);
+}
+
+static gint summary_execute_move(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ gint val = 0;
+
+ summaryview->folder_table = g_hash_table_new(NULL, NULL);
+
+ /* search moving messages and execute */
+ gtk_ctree_pre_recursive(ctree, NULL, summary_execute_move_func,
+ summaryview);
+
+ if (summaryview->mlist) {
+ summaryview->mlist = g_slist_reverse(summaryview->mlist);
+ val = procmsg_move_messages(summaryview->mlist);
+
+ folder_item_scan_foreach(summaryview->folder_table);
+ folderview_update_item_foreach(summaryview->folder_table,
+ FALSE);
+
+ g_slist_free(summaryview->mlist);
+ summaryview->mlist = NULL;
+ }
+
+ g_hash_table_destroy(summaryview->folder_table);
+ summaryview->folder_table = NULL;
+
+ return val;
+}
+
+static void summary_execute_move_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ SummaryView *summaryview = data;
+ MsgInfo *msginfo;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (msginfo && MSG_IS_MOVE(msginfo->flags) && msginfo->to_folder) {
+ g_hash_table_insert(summaryview->folder_table,
+ msginfo->to_folder, GINT_TO_POINTER(1));
+
+ summaryview->mlist =
+ g_slist_prepend(summaryview->mlist, msginfo);
+
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
+ summary_set_row_marks(summaryview, node);
+ }
+}
+
+static gint summary_execute_copy(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ gint val = 0;
+
+ summaryview->folder_table = g_hash_table_new(NULL, NULL);
+
+ /* search copying messages and execute */
+ gtk_ctree_pre_recursive(ctree, NULL, summary_execute_copy_func,
+ summaryview);
+
+ if (summaryview->mlist) {
+ summaryview->mlist = g_slist_reverse(summaryview->mlist);
+ val = procmsg_copy_messages(summaryview->mlist);
+
+ folder_item_scan_foreach(summaryview->folder_table);
+ folderview_update_item_foreach(summaryview->folder_table,
+ FALSE);
+
+ g_slist_free(summaryview->mlist);
+ summaryview->mlist = NULL;
+ }
+
+ g_hash_table_destroy(summaryview->folder_table);
+ summaryview->folder_table = NULL;
+
+ return val;
+}
+
+static void summary_execute_copy_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ SummaryView *summaryview = data;
+ MsgInfo *msginfo;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (msginfo && MSG_IS_COPY(msginfo->flags) && msginfo->to_folder) {
+ g_hash_table_insert(summaryview->folder_table,
+ msginfo->to_folder, GINT_TO_POINTER(1));
+
+ summaryview->mlist =
+ g_slist_prepend(summaryview->mlist, msginfo);
+
+ MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_COPY);
+ summary_set_row_marks(summaryview, node);
+ }
+}
+
+static gint summary_execute_delete(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ FolderItem *trash;
+ gint val;
+
+ trash = summaryview->folder_item->folder->trash;
+ if (FOLDER_TYPE(summaryview->folder_item->folder) == F_MH) {
+ g_return_val_if_fail(trash != NULL, 0);
+ }
+
+ /* search deleting messages and execute */
+ gtk_ctree_pre_recursive
+ (ctree, NULL, summary_execute_delete_func, summaryview);
+
+ if (!summaryview->mlist) return 0;
+
+ summaryview->mlist = g_slist_reverse(summaryview->mlist);
+
+ if (summaryview->folder_item != trash)
+ val = folder_item_move_msgs(trash, summaryview->mlist);
+ else
+ val = folder_item_remove_msgs(trash, summaryview->mlist);
+
+ g_slist_free(summaryview->mlist);
+ summaryview->mlist = NULL;
+
+ if (summaryview->folder_item != trash) {
+ folder_item_scan(trash);
+ folderview_update_item(trash, FALSE);
+ }
+
+ return val == -1 ? -1 : 0;
+}
+
+static void summary_execute_delete_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ SummaryView *summaryview = data;
+ MsgInfo *msginfo;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (msginfo && MSG_IS_DELETED(msginfo->flags)) {
+ summaryview->mlist =
+ g_slist_prepend(summaryview->mlist, msginfo);
+ }
+}
+
+/* thread functions */
+
+void summary_thread_build(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ GtkCTreeNode *next;
+ GtkCTreeNode *parent;
+ MsgInfo *msginfo;
+
+ summary_lock(summaryview);
+
+ debug_print(_("Building threads..."));
+ STATUSBAR_PUSH(summaryview->mainwin, _("Building threads..."));
+ main_window_cursor_wait(summaryview->mainwin);
+
+ g_signal_handlers_block_by_func(G_OBJECT(ctree),
+ G_CALLBACK(summary_tree_expanded),
+ summaryview);
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ while (node) {
+ next = GTK_CTREE_ROW(node)->sibling;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+ if (msginfo && msginfo->inreplyto) {
+ parent = g_hash_table_lookup(summaryview->msgid_table,
+ msginfo->inreplyto);
+ if (parent && parent != node) {
+ gtk_ctree_move(ctree, node, parent, NULL);
+ gtk_ctree_expand(ctree, node);
+ }
+ }
+
+ node = next;
+ }
+
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ while (node) {
+ next = GTK_CTREE_NODE_NEXT(node);
+ if (prefs_common.expand_thread)
+ gtk_ctree_expand(ctree, node);
+ if (prefs_common.bold_unread &&
+ GTK_CTREE_ROW(node)->children)
+ summary_set_row_marks(summaryview, node);
+ node = next;
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
+ G_CALLBACK(summary_tree_expanded),
+ summaryview);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+ main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
+}
+
+static void summary_thread_init(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ GtkCTreeNode *next;
+
+ if (prefs_common.expand_thread) {
+ while (node) {
+ next = GTK_CTREE_ROW(node)->sibling;
+ if (GTK_CTREE_ROW(node)->children)
+ gtk_ctree_expand(ctree, node);
+ node = next;
+ }
+ } else if (prefs_common.bold_unread) {
+ while (node) {
+ next = GTK_CTREE_ROW(node)->sibling;
+ if (GTK_CTREE_ROW(node)->children)
+ summary_set_row_marks(summaryview, node);
+ node = next;
+ }
+ }
+}
+
+void summary_unthread(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ GtkCTreeNode *child;
+ GtkCTreeNode *sibling;
+ GtkCTreeNode *next_child;
+
+ summary_lock(summaryview);
+
+ debug_print(_("Unthreading..."));
+ STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading..."));
+ main_window_cursor_wait(summaryview->mainwin);
+
+ g_signal_handlers_block_by_func(G_OBJECT(ctree),
+ G_CALLBACK(summary_tree_collapsed),
+ summaryview);
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = GTK_CTREE_NODE_NEXT(node)) {
+ child = GTK_CTREE_ROW(node)->children;
+ sibling = GTK_CTREE_ROW(node)->sibling;
+
+ while (child != NULL) {
+ next_child = GTK_CTREE_ROW(child)->sibling;
+ gtk_ctree_move(ctree, child, NULL, sibling);
+ child = next_child;
+ }
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
+ G_CALLBACK(summary_tree_collapsed),
+ summaryview);
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+ main_window_cursor_normal(summaryview->mainwin);
+
+ summary_unlock(summaryview);
+}
+
+static void summary_unthread_for_exec(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ summary_lock(summaryview);
+
+ debug_print(_("Unthreading for execution..."));
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ summary_unthread_for_exec_func(ctree, node, NULL);
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ debug_print(_("done.\n"));
+
+ summary_unlock(summaryview);
+}
+
+static void summary_unthread_for_exec_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ MsgInfo *msginfo;
+ GtkCTreeNode *top_parent;
+ GtkCTreeNode *child;
+ GtkCTreeNode *sibling;
+
+ msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+
+ if (!msginfo || !MSG_IS_INVALID(msginfo->flags))
+ return;
+ child = GTK_CTREE_ROW(node)->children;
+ if (!child) return;
+
+ for (top_parent = node;
+ GTK_CTREE_ROW(top_parent)->parent != NULL;
+ top_parent = GTK_CTREE_ROW(top_parent)->parent)
+ ;
+ sibling = GTK_CTREE_ROW(top_parent)->sibling;
+
+ while (child != NULL) {
+ GtkCTreeNode *next_child;
+
+ next_child = GTK_CTREE_ROW(child)->sibling;
+ gtk_ctree_move(ctree, child, NULL, sibling);
+ child = next_child;
+ }
+}
+
+void summary_expand_threads(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ while (node) {
+ if (GTK_CTREE_ROW(node)->children)
+ gtk_ctree_expand(ctree, node);
+ node = GTK_CTREE_NODE_NEXT(node);
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
+}
+
+void summary_collapse_threads(SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ gtk_clist_freeze(GTK_CLIST(ctree));
+
+ while (node) {
+ if (GTK_CTREE_ROW(node)->children)
+ gtk_ctree_collapse(ctree, node);
+ node = GTK_CTREE_ROW(node)->sibling;
+ }
+
+ gtk_clist_thaw(GTK_CLIST(ctree));
+
+ gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0);
+}
+
+void summary_filter(SummaryView *summaryview, gboolean selected_only)
+{
+ if (!prefs_common.fltlist) return;
+
+ summary_lock(summaryview);
+
+ STATUSBAR_POP(summaryview->mainwin);
+
+ debug_print(_("filtering..."));
+ STATUSBAR_PUSH(summaryview->mainwin, _("Filtering..."));
+ main_window_cursor_wait(summaryview->mainwin);
+
+ gtk_clist_freeze(GTK_CLIST(summaryview->ctree));
+
+ summaryview->filtered = 0;
+
+ if (selected_only) {
+ GList *cur;
+
+ for (cur = GTK_CLIST(summaryview->ctree)->selection;
+ cur != NULL; cur = cur->next) {
+ summary_filter_func(GTK_CTREE(summaryview->ctree),
+ GTK_CTREE_NODE(cur->data),
+ summaryview);
+ }
+ } else {
+ gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL,
+ GTK_CTREE_FUNC(summary_filter_func),
+ summaryview);
+ }
+
+ summary_unlock(summaryview);
+
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else
+ summary_status_show(summaryview);
+
+ folderview_update_all_updated(FALSE);
+
+ gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+
+ debug_print(_("done.\n"));
+ STATUSBAR_POP(summaryview->mainwin);
+ main_window_cursor_normal(summaryview->mainwin);
+
+ if (summaryview->filtered > 0) {
+ gchar result_msg[BUFFSIZE];
+ g_snprintf(result_msg, sizeof(result_msg),
+ _("%d message(s) have been filtered."),
+ summaryview->filtered);
+ STATUSBAR_PUSH(summaryview->mainwin, result_msg);
+ }
+ summaryview->filtered = 0;
+}
+
+static void summary_filter_func(GtkCTree *ctree, GtkCTreeNode *node,
+ gpointer data)
+{
+ MsgInfo *msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
+ SummaryView *summaryview = (SummaryView *)data;
+ FilterInfo *fltinfo;
+
+ fltinfo = filter_info_new();
+ fltinfo->flags = msginfo->flags;
+ filter_apply_msginfo(prefs_common.fltlist, msginfo, fltinfo);
+ if (fltinfo->actions[FLT_ACTION_MOVE] ||
+ fltinfo->actions[FLT_ACTION_COPY] ||
+ fltinfo->actions[FLT_ACTION_DELETE] ||
+ fltinfo->actions[FLT_ACTION_EXEC] ||
+ fltinfo->actions[FLT_ACTION_EXEC_ASYNC] ||
+ fltinfo->actions[FLT_ACTION_MARK] ||
+ fltinfo->actions[FLT_ACTION_COLOR_LABEL] ||
+ fltinfo->actions[FLT_ACTION_MARK_READ] ||
+ fltinfo->actions[FLT_ACTION_FORWARD] ||
+ fltinfo->actions[FLT_ACTION_FORWARD_AS_ATTACHMENT] ||
+ fltinfo->actions[FLT_ACTION_REDIRECT])
+ summaryview->filtered++;
+
+ if ((fltinfo->actions[FLT_ACTION_MARK] ||
+ fltinfo->actions[FLT_ACTION_COLOR_LABEL] ||
+ fltinfo->actions[FLT_ACTION_MARK_READ])) {
+ msginfo->flags = fltinfo->flags;
+ summary_set_row_marks(summaryview, node);
+ }
+
+ if (fltinfo->actions[FLT_ACTION_MOVE] && fltinfo->move_dest)
+ summary_move_row_to(summaryview, node, fltinfo->move_dest);
+ else if (fltinfo->actions[FLT_ACTION_DELETE])
+ summary_delete_row(summaryview, node);
+
+ filter_info_free(fltinfo);
+}
+
+void summary_filter_open(SummaryView *summaryview, PrefsFilterType type)
+{
+ MsgInfo *msginfo;
+ gchar *header = NULL;
+ gchar *key = NULL;
+
+ if (!summaryview->selected) return;
+
+ msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
+ summaryview->selected);
+ if (!msginfo) return;
+
+ procmsg_get_filter_keyword(msginfo, &header, &key, type);
+ prefs_filter_open(msginfo, header);
+
+ g_free(header);
+ g_free(key);
+}
+
+void summary_reply(SummaryView *summaryview, ComposeMode mode)
+{
+ GList *sel = GTK_CLIST(summaryview->ctree)->selection;
+ GSList *mlist = NULL;
+ MsgInfo *msginfo;
+ MsgInfo *displayed_msginfo = NULL;
+ gchar *text = NULL;
+
+ for (; sel != NULL; sel = sel->next) {
+ mlist = g_slist_append(mlist,
+ gtk_ctree_node_get_row_data
+ (GTK_CTREE(summaryview->ctree),
+ GTK_CTREE_NODE(sel->data)));
+ }
+ if (!mlist) return;
+ msginfo = (MsgInfo *)mlist->data;
+
+ if (summaryview->displayed) {
+ displayed_msginfo = gtk_ctree_node_get_row_data
+ (GTK_CTREE(summaryview->ctree), summaryview->displayed);
+ }
+
+ /* use selection only if the displayed message is selected */
+ if (!mlist->next && msginfo == displayed_msginfo) {
+ text = gtkut_editable_get_selection
+ (GTK_EDITABLE(summaryview->messageview->textview->text));
+ if (text && *text == '\0') {
+ g_free(text);
+ text = NULL;
+ }
+ }
+
+ if (!COMPOSE_QUOTE_MODE(mode))
+ mode |= prefs_common.reply_with_quote
+ ? COMPOSE_WITH_QUOTE : COMPOSE_WITHOUT_QUOTE;
+
+ switch (COMPOSE_MODE(mode)) {
+ case COMPOSE_REPLY:
+ case COMPOSE_REPLY_TO_SENDER:
+ case COMPOSE_REPLY_TO_ALL:
+ case COMPOSE_REPLY_TO_LIST:
+ compose_reply(msginfo, summaryview->folder_item, mode, text);
+ break;
+ case COMPOSE_FORWARD:
+ compose_forward(mlist, summaryview->folder_item, FALSE, text);
+ break;
+ case COMPOSE_FORWARD_AS_ATTACH:
+ compose_forward(mlist, summaryview->folder_item, TRUE, NULL);
+ break;
+ case COMPOSE_REDIRECT:
+ compose_redirect(msginfo, summaryview->folder_item);
+ break;
+ default:
+ g_warning("summary_reply(): invalid mode: %d\n", mode);
+ }
+
+ summary_set_marks_selected(summaryview);
+ g_free(text);
+ g_slist_free(mlist);
+}
+
+/* color label */
+
+#define N_COLOR_LABELS colorlabel_get_color_count()
+
+static void summary_colorlabel_menu_item_activate_cb(GtkWidget *widget,
+ gpointer data)
+{
+ guint color = GPOINTER_TO_UINT(data);
+ SummaryView *summaryview;
+
+ summaryview = g_object_get_data(G_OBJECT(widget), "summaryview");
+ g_return_if_fail(summaryview != NULL);
+
+ /* "dont_toggle" state set? */
+ if (g_object_get_data(G_OBJECT(summaryview->colorlabel_menu),
+ "dont_toggle"))
+ return;
+
+ summary_set_colorlabel(summaryview, color, NULL);
+}
+
+/* summary_set_colorlabel_color() - labelcolor parameter is the color *flag*
+ * for the messsage; not the color index */
+void summary_set_colorlabel_color(GtkCTree *ctree, GtkCTreeNode *node,
+ guint labelcolor)
+{
+ GdkColor color;
+ GtkStyle *style, *prev_style, *ctree_style;
+ MsgInfo *msginfo;
+ gint color_index;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_CLABEL_FLAG_MASK);
+ MSG_SET_COLORLABEL_VALUE(msginfo->flags, labelcolor);
+
+ color_index = labelcolor == 0 ? -1 : (gint)labelcolor - 1;
+ ctree_style = gtk_widget_get_style(GTK_WIDGET(ctree));
+ prev_style = gtk_ctree_node_get_row_style(ctree, node);
+
+ if (color_index < 0 || color_index >= N_COLOR_LABELS) {
+ if (!prev_style) return;
+ style = gtk_style_copy(prev_style);
+ color = ctree_style->fg[GTK_STATE_NORMAL];
+ style->fg[GTK_STATE_NORMAL] = color;
+ color = ctree_style->fg[GTK_STATE_SELECTED];
+ style->fg[GTK_STATE_SELECTED] = color;
+ } else {
+ if (prev_style)
+ style = gtk_style_copy(prev_style);
+ else
+ style = gtk_style_copy(ctree_style);
+ color = colorlabel_get_color(color_index);
+ style->fg[GTK_STATE_NORMAL] = color;
+ /* get the average of label color and selected fg color
+ for visibility */
+ style->fg[GTK_STATE_SELECTED].red = (color.red + ctree_style->fg[GTK_STATE_SELECTED].red ) / 2;
+ style->fg[GTK_STATE_SELECTED].green = (color.green + ctree_style->fg[GTK_STATE_SELECTED].green) / 2;
+ style->fg[GTK_STATE_SELECTED].blue = (color.blue + ctree_style->fg[GTK_STATE_SELECTED].blue ) / 2;
+ }
+
+ gtk_ctree_node_set_row_style(ctree, node, style);
+}
+
+void summary_set_colorlabel(SummaryView *summaryview, guint labelcolor,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCList *clist = GTK_CLIST(summaryview->ctree);
+ GList *cur;
+
+ for (cur = clist->selection; cur != NULL; cur = cur->next)
+ summary_set_colorlabel_color(ctree, GTK_CTREE_NODE(cur->data),
+ labelcolor);
+}
+
+static void summary_colorlabel_menu_item_activate_item_cb(GtkMenuItem *menuitem,
+ gpointer data)
+{
+ SummaryView *summaryview;
+ GtkMenuShell *menu;
+ GtkCheckMenuItem **items;
+ gint n;
+ GList *cur, *sel;
+
+ summaryview = (SummaryView *)data;
+ g_return_if_fail(summaryview != NULL);
+
+ sel = GTK_CLIST(summaryview->ctree)->selection;
+ if (!sel) return;
+
+ menu = GTK_MENU_SHELL(summaryview->colorlabel_menu);
+ g_return_if_fail(menu != NULL);
+
+ Xalloca(items, (N_COLOR_LABELS + 1) * sizeof(GtkWidget *), return);
+
+ /* NOTE: don't return prematurely because we set the "dont_toggle"
+ * state for check menu items */
+ g_object_set_data(G_OBJECT(menu), "dont_toggle", GINT_TO_POINTER(1));
+
+ /* clear items. get item pointers. */
+ for (n = 0, cur = menu->children; cur != NULL; cur = cur->next) {
+ if (GTK_IS_CHECK_MENU_ITEM(cur->data)) {
+ gtk_check_menu_item_set_state
+ (GTK_CHECK_MENU_ITEM(cur->data), FALSE);
+ items[n] = GTK_CHECK_MENU_ITEM(cur->data);
+ n++;
+ }
+ }
+
+ if (n == (N_COLOR_LABELS + 1)) {
+ /* iterate all messages and set the state of the appropriate
+ * items */
+ for (; sel != NULL; sel = sel->next) {
+ MsgInfo *msginfo;
+ gint clabel;
+
+ msginfo = gtk_ctree_node_get_row_data
+ (GTK_CTREE(summaryview->ctree),
+ GTK_CTREE_NODE(sel->data));
+ if (msginfo) {
+ clabel = MSG_GET_COLORLABEL_VALUE(msginfo->flags);
+ if (!items[clabel]->active)
+ gtk_check_menu_item_set_state
+ (items[clabel], TRUE);
+ }
+ }
+ } else
+ g_warning("invalid number of color elements (%d)\n", n);
+
+ /* reset "dont_toggle" state */
+ g_object_set_data(G_OBJECT(menu), "dont_toggle", GINT_TO_POINTER(0));
+}
+
+static void summary_colorlabel_menu_create(SummaryView *summaryview)
+{
+ GtkWidget *label_menuitem;
+ GtkWidget *menu;
+ GtkWidget *item;
+ gint i;
+
+ label_menuitem = gtk_item_factory_get_item(summaryview->popupfactory,
+ "/Color label");
+ g_signal_connect(G_OBJECT(label_menuitem), "activate",
+ G_CALLBACK(summary_colorlabel_menu_item_activate_item_cb),
+ summaryview);
+ gtk_widget_show(label_menuitem);
+
+ menu = gtk_menu_new();
+
+ /* create sub items. for the menu item activation callback we pass the
+ * index of label_colors[] as data parameter. for the None color we
+ * pass an invalid (high) value. also we attach a data pointer so we
+ * can always get back the SummaryView pointer. */
+
+ item = gtk_check_menu_item_new_with_label(_("None"));
+ gtk_menu_append(GTK_MENU(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(summary_colorlabel_menu_item_activate_cb),
+ GUINT_TO_POINTER(0));
+ g_object_set_data(G_OBJECT(item), "summaryview", summaryview);
+ gtk_widget_show(item);
+
+ item = gtk_menu_item_new();
+ gtk_menu_append(GTK_MENU(menu), item);
+ gtk_widget_show(item);
+
+ /* create pixmap/label menu items */
+ for (i = 0; i < N_COLOR_LABELS; i++) {
+ item = colorlabel_create_check_color_menu_item(i);
+ gtk_menu_append(GTK_MENU(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(summary_colorlabel_menu_item_activate_cb),
+ GUINT_TO_POINTER(i + 1));
+ g_object_set_data(G_OBJECT(item), "summaryview", summaryview);
+ gtk_widget_show(item);
+ }
+
+ gtk_widget_show(menu);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem), menu);
+ summaryview->colorlabel_menu = menu;
+}
+
+static GtkWidget *summary_ctree_create(SummaryView *summaryview)
+{
+ GtkWidget *ctree;
+ gint *col_pos = summaryview->col_pos;
+ SummaryColumnState *col_state;
+ gchar *titles[N_SUMMARY_COLS];
+ SummaryColumnType type;
+ gint pos;
+
+ memset(titles, 0, sizeof(titles));
+
+ col_state = prefs_summary_column_get_config();
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
+ summaryview->col_state[pos] = col_state[pos];
+ type = col_state[pos].type;
+ col_pos[type] = pos;
+ }
+ col_state = summaryview->col_state;
+
+ ctree = gtk_sctree_new_with_titles
+ (N_SUMMARY_COLS, col_pos[S_COL_SUBJECT], titles);
+
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_EXTENDED);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_MARK],
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_UNREAD],
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_MIME],
+ GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_SIZE],
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_justification(GTK_CLIST(ctree), col_pos[S_COL_NUMBER],
+ GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_MARK],
+ SUMMARY_COL_MARK_WIDTH);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_UNREAD],
+ SUMMARY_COL_UNREAD_WIDTH);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_MIME],
+ SUMMARY_COL_MIME_WIDTH);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_SUBJECT],
+ prefs_common.summary_col_size[S_COL_SUBJECT]);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_FROM],
+ prefs_common.summary_col_size[S_COL_FROM]);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_DATE],
+ prefs_common.summary_col_size[S_COL_DATE]);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_SIZE],
+ prefs_common.summary_col_size[S_COL_SIZE]);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), col_pos[S_COL_NUMBER],
+ prefs_common.summary_col_size[S_COL_NUMBER]);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_SQUARE);
+#if 0
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_NONE);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_TRIANGLE);
+#endif
+ gtk_ctree_set_indent(GTK_CTREE(ctree), 16);
+ g_object_set_data(G_OBJECT(ctree), "user_data", summaryview);
+
+ for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
+ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[pos].button,
+ GTK_CAN_FOCUS);
+ gtk_clist_set_column_visibility
+ (GTK_CLIST(ctree), pos, col_state[pos].visible);
+ }
+
+ /* connect signal to the buttons for sorting */
+#define CLIST_BUTTON_SIGNAL_CONNECT(col, func) \
+ g_signal_connect \
+ (G_OBJECT(GTK_CLIST(ctree)->column[col_pos[col]].button), \
+ "clicked", \
+ G_CALLBACK(func), \
+ summaryview)
+
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_MARK , summary_mark_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_UNREAD , summary_unread_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_MIME , summary_mime_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_NUMBER , summary_num_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SIZE , summary_size_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_DATE , summary_date_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_FROM , summary_from_clicked);
+ CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SUBJECT, summary_subject_clicked);
+
+#undef CLIST_BUTTON_SIGNAL_CONNECT
+
+ g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+ G_CALLBACK(summary_selected), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "button_press_event",
+ G_CALLBACK(summary_button_pressed), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "button_release_event",
+ G_CALLBACK(summary_button_released), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "key_press_event",
+ G_CALLBACK(summary_key_pressed), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "resize_column",
+ G_CALLBACK(summary_col_resized), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "open_row",
+ G_CALLBACK(summary_open_row), summaryview);
+
+ g_signal_connect_after(G_OBJECT(ctree), "tree_expand",
+ G_CALLBACK(summary_tree_expanded),
+ summaryview);
+ g_signal_connect_after(G_OBJECT(ctree), "tree_collapse",
+ G_CALLBACK(summary_tree_collapsed),
+ summaryview);
+
+ g_signal_connect(G_OBJECT(ctree), "start_drag",
+ G_CALLBACK(summary_start_drag), summaryview);
+ g_signal_connect(G_OBJECT(ctree), "drag_data_get",
+ G_CALLBACK(summary_drag_data_get), summaryview);
+
+ return ctree;
+}
+
+void summary_set_column_order(SummaryView *summaryview)
+{
+ GtkWidget *ctree;
+ GtkWidget *scrolledwin = summaryview->scrolledwin;
+ GtkWidget *pixmap;
+ FolderItem *item;
+
+ item = summaryview->folder_item;
+ summary_clear_all(summaryview);
+ gtk_widget_destroy(summaryview->ctree);
+
+ summaryview->ctree = ctree = summary_ctree_create(summaryview);
+ pixmap = gtk_pixmap_new(clipxpm, clipxpmmask);
+ gtk_clist_set_column_widget(GTK_CLIST(ctree),
+ summaryview->col_pos[S_COL_MIME], pixmap);
+ gtk_widget_show(pixmap);
+ gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_CLIST(ctree)->hadjustment);
+ gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_CLIST(ctree)->vadjustment);
+ gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
+ gtk_widget_show(ctree);
+
+ summary_show(summaryview, item, FALSE);
+}
+
+
+/* callback functions */
+
+static gboolean summary_toggle_pressed(GtkWidget *eventbox,
+ GdkEventButton *event,
+ SummaryView *summaryview)
+{
+ if (!event) return FALSE;
+
+ summary_toggle_view(summaryview);
+ return FALSE;
+}
+
+static gboolean summary_button_pressed(GtkWidget *ctree, GdkEventButton *event,
+ SummaryView *summaryview)
+{
+ if (!event) return FALSE;
+
+ if (event->button == 3) {
+ /* right clicked */
+ gtk_menu_popup(GTK_MENU(summaryview->popupmenu), NULL, NULL,
+ NULL, NULL, event->button, event->time);
+ } else if (event->button == 2) {
+ summaryview->display_msg = TRUE;
+ } else if (event->button == 1) {
+ if (!prefs_common.emulate_emacs &&
+ messageview_is_visible(summaryview->messageview))
+ summaryview->display_msg = TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean summary_button_released(GtkWidget *ctree, GdkEventButton *event,
+ SummaryView *summaryview)
+{
+ return FALSE;
+}
+
+void summary_pass_key_press_event(SummaryView *summaryview, GdkEventKey *event)
+{
+ summary_key_pressed(summaryview->ctree, event, summaryview);
+}
+
+#define BREAK_ON_MODIFIER_KEY() \
+ if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
+
+static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ SummaryView *summaryview)
+{
+ GtkCTree *ctree = GTK_CTREE(widget);
+ GtkCTreeNode *node;
+ MessageView *messageview;
+ TextView *textview;
+ GtkAdjustment *adj;
+ gboolean mod_pressed;
+
+ if (summary_is_locked(summaryview)) return FALSE;
+ if (!event) return FALSE;
+
+ switch (event->keyval) {
+ case GDK_Left: /* Move focus */
+ adj = gtk_scrolled_window_get_hadjustment
+ (GTK_SCROLLED_WINDOW(summaryview->scrolledwin));
+ if (adj->lower != adj->value)
+ break;
+ /* FALLTHROUGH */
+ case GDK_Escape:
+ gtk_widget_grab_focus(summaryview->folderview->ctree);
+ return FALSE;
+ default:
+ break;
+ }
+
+ if (!summaryview->selected) {
+ node = gtk_ctree_node_nth(ctree, 0);
+ if (node)
+ gtk_sctree_select(GTK_SCTREE(ctree), node);
+ else
+ return FALSE;
+ }
+
+ messageview = summaryview->messageview;
+ if (messageview->type == MVIEW_MIME &&
+ gtk_notebook_get_current_page
+ (GTK_NOTEBOOK(messageview->mimeview->notebook)) == 1)
+ textview = messageview->mimeview->textview;
+ else
+ textview = messageview->textview;
+
+ switch (event->keyval) {
+ case GDK_space: /* Page down or go to the next */
+ if (summaryview->displayed != summaryview->selected) {
+ summary_display_msg(summaryview,
+ summaryview->selected);
+ break;
+ }
+ mod_pressed =
+ ((event->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
+ if (mod_pressed) {
+ if (!textview_scroll_page(textview, TRUE))
+ summary_select_prev_unread(summaryview);
+ } else {
+ if (!textview_scroll_page(textview, FALSE))
+ summary_select_next_unread(summaryview);
+ }
+ break;
+ case GDK_BackSpace: /* Page up */
+ textview_scroll_page(textview, TRUE);
+ break;
+ case GDK_Return: /* Scroll up/down one line */
+ if (summaryview->displayed != summaryview->selected) {
+ summary_display_msg(summaryview,
+ summaryview->selected);
+ break;
+ }
+ textview_scroll_one_line
+ (textview, (event->state &
+ (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
+ break;
+ case GDK_Delete:
+ BREAK_ON_MODIFIER_KEY();
+ summary_delete(summaryview);
+ break;
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+static void summary_open_row(GtkSCTree *sctree, SummaryView *summaryview)
+{
+ if (summaryview->folder_item->stype == F_OUTBOX ||
+ summaryview->folder_item->stype == F_DRAFT ||
+ summaryview->folder_item->stype == F_QUEUE)
+ summary_reedit(summaryview);
+ else
+ summary_open_msg(summaryview);
+
+ summaryview->display_msg = FALSE;
+}
+
+static void summary_tree_expanded(GtkCTree *ctree, GtkCTreeNode *node,
+ SummaryView *summaryview)
+{
+ summary_set_row_marks(summaryview, node);
+}
+
+static void summary_tree_collapsed(GtkCTree *ctree, GtkCTreeNode *node,
+ SummaryView *summaryview)
+{
+ summary_set_row_marks(summaryview, node);
+}
+
+static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
+ gint column, SummaryView *summaryview)
+{
+ MsgInfo *msginfo;
+
+ summary_status_show(summaryview);
+
+ if (GTK_CLIST(ctree)->selection &&
+ GTK_CLIST(ctree)->selection->next) {
+ summaryview->display_msg = FALSE;
+ summary_set_menu_sensitive(summaryview);
+ main_window_set_toolbar_sensitive(summaryview->mainwin);
+ return;
+ }
+
+ summaryview->selected = row;
+
+ msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ g_return_if_fail(msginfo != NULL);
+
+ switch (column < 0 ? column : summaryview->col_state[column].type) {
+ case S_COL_MARK:
+ if (!MSG_IS_DELETED(msginfo->flags) &&
+ !MSG_IS_MOVE(msginfo->flags) &&
+ !MSG_IS_COPY(msginfo->flags)) {
+ if (MSG_IS_MARKED(msginfo->flags)) {
+ summary_unmark_row(summaryview, row);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo,
+ MSG_MARKED);
+ } else {
+ summary_mark_row(summaryview, row);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo,
+ MSG_MARKED);
+ }
+ }
+ break;
+ case S_COL_UNREAD:
+ if (MSG_IS_UNREAD(msginfo->flags)) {
+ summary_mark_row_as_read(summaryview, row);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags
+ (msginfo, MSG_NEW | MSG_UNREAD);
+ summary_status_show(summaryview);
+ } else if (!MSG_IS_REPLIED(msginfo->flags) &&
+ !MSG_IS_FORWARDED(msginfo->flags)) {
+ summary_mark_row_as_unread(summaryview, row);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo, MSG_UNREAD);
+ summary_status_show(summaryview);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (summaryview->display_msg ||
+ (prefs_common.always_show_msg &&
+ messageview_is_visible(summaryview->messageview))) {
+ summaryview->display_msg = FALSE;
+ if (summaryview->displayed != row) {
+ summary_display_msg(summaryview, row);
+ return;
+ }
+ }
+
+ summary_set_menu_sensitive(summaryview);
+ main_window_set_toolbar_sensitive(summaryview->mainwin);
+}
+
+static void summary_col_resized(GtkCList *clist, gint column, gint width,
+ SummaryView *summaryview)
+{
+ SummaryColumnType type = summaryview->col_state[column].type;
+
+ prefs_common.summary_col_size[type] = width;
+}
+
+static void summary_reply_cb(SummaryView *summaryview, guint action,
+ GtkWidget *widget)
+{
+ summary_reply(summaryview, (ComposeMode)action);
+}
+
+static void summary_show_all_header_cb(SummaryView *summaryview,
+ guint action, GtkWidget *widget)
+{
+ summary_display_msg_selected(summaryview,
+ GTK_CHECK_MENU_ITEM(widget)->active);
+}
+
+static void summary_add_address_cb(SummaryView *summaryview,
+ guint action, GtkWidget *widget)
+{
+ summary_add_address(summaryview);
+}
+
+static void summary_sort_by_column_click(SummaryView *summaryview,
+ FolderSortKey sort_key)
+{
+ FolderItem *item = summaryview->folder_item;
+
+ if (!item) return;
+
+ if (item->sort_key == sort_key)
+ summary_sort(summaryview, sort_key,
+ item->sort_type == SORT_ASCENDING
+ ? SORT_DESCENDING : SORT_ASCENDING);
+ else
+ summary_sort(summaryview, sort_key, SORT_ASCENDING);
+}
+
+static void summary_mark_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_MARK);
+}
+
+static void summary_unread_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_UNREAD);
+}
+
+static void summary_mime_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_MIME);
+}
+
+static void summary_num_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_NUMBER);
+}
+
+static void summary_size_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_SIZE);
+}
+
+static void summary_date_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_DATE);
+}
+
+static void summary_from_clicked(GtkWidget *button, SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_FROM);
+}
+
+static void summary_subject_clicked(GtkWidget *button,
+ SummaryView *summaryview)
+{
+ summary_sort_by_column_click(summaryview, SORT_BY_SUBJECT);
+}
+
+static void summary_start_drag(GtkWidget *widget, gint button, GdkEvent *event,
+ SummaryView *summaryview)
+{
+ GtkTargetList *list;
+ GdkDragContext *context;
+
+ g_return_if_fail(summaryview != NULL);
+ g_return_if_fail(summaryview->folder_item != NULL);
+ g_return_if_fail(summaryview->folder_item->folder != NULL);
+ if (summaryview->selected == NULL) return;
+
+ list = gtk_target_list_new(summary_drag_types, 1);
+
+ if (FOLDER_ITEM_CAN_ADD(summaryview->folder_item)) {
+ context = gtk_drag_begin
+ (widget, list,
+ GDK_ACTION_MOVE | GDK_ACTION_COPY, button, event);
+ } else {
+ context = gtk_drag_begin(widget, list, GDK_ACTION_COPY,
+ button, event);
+ }
+ gtk_drag_set_icon_default(context);
+}
+
+static void summary_drag_data_get(GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ SummaryView *summaryview)
+{
+ if (info == TARGET_MAIL_URI_LIST) {
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GList *cur;
+ MsgInfo *msginfo;
+ gchar *mail_list = NULL, *tmp1, *tmp2;
+
+ for (cur = GTK_CLIST(ctree)->selection;
+ cur != NULL; cur = cur->next) {
+ msginfo = gtk_ctree_node_get_row_data
+ (ctree, GTK_CTREE_NODE(cur->data));
+ tmp2 = procmsg_get_message_file(msginfo);
+ if (!tmp2) continue;
+ tmp1 = g_strconcat("file://", tmp2, NULL);
+ g_free(tmp2);
+
+ if (!mail_list) {
+ mail_list = tmp1;
+ } else {
+ tmp2 = g_strconcat(mail_list, tmp1, NULL);
+ g_free(mail_list);
+ g_free(tmp1);
+ mail_list = tmp2;
+ }
+ }
+
+ if (mail_list != NULL) {
+ gtk_selection_data_set(selection_data,
+ selection_data->target, 8,
+ mail_list, strlen(mail_list));
+ g_free(mail_list);
+ }
+ } else if (info == TARGET_DUMMY) {
+ if (GTK_CLIST(summaryview->ctree)->selection)
+ gtk_selection_data_set(selection_data,
+ selection_data->target, 8,
+ "Dummy", 6);
+ }
+}
+
+
+/* custom compare functions for sorting */
+
+#define CMP_FUNC_DEF(func_name, val) \
+static gint func_name(GtkCList *clist, \
+ gconstpointer ptr1, gconstpointer ptr2) \
+{ \
+ MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; \
+ MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; \
+ \
+ if (!msginfo1 || !msginfo2) \
+ return -1; \
+ \
+ return (val); \
+}
+
+CMP_FUNC_DEF(summary_cmp_by_mark,
+ MSG_IS_MARKED(msginfo1->flags) - MSG_IS_MARKED(msginfo2->flags))
+CMP_FUNC_DEF(summary_cmp_by_unread,
+ MSG_IS_UNREAD(msginfo1->flags) - MSG_IS_UNREAD(msginfo2->flags))
+CMP_FUNC_DEF(summary_cmp_by_mime,
+ MSG_IS_MIME(msginfo1->flags) - MSG_IS_MIME(msginfo2->flags))
+CMP_FUNC_DEF(summary_cmp_by_label,
+ MSG_GET_COLORLABEL(msginfo1->flags) -
+ MSG_GET_COLORLABEL(msginfo2->flags))
+
+CMP_FUNC_DEF(summary_cmp_by_num, msginfo1->msgnum - msginfo2->msgnum)
+CMP_FUNC_DEF(summary_cmp_by_size, msginfo1->size - msginfo2->size)
+CMP_FUNC_DEF(summary_cmp_by_date, msginfo1->date_t - msginfo2->date_t)
+
+#undef CMP_FUNC_DEF
+#define CMP_FUNC_DEF(func_name, var_name) \
+static gint func_name(GtkCList *clist, \
+ gconstpointer ptr1, gconstpointer ptr2) \
+{ \
+ MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; \
+ MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; \
+ \
+ if (!msginfo1->var_name) \
+ return (msginfo2->var_name != NULL); \
+ if (!msginfo2->var_name) \
+ return -1; \
+ \
+ return strcasecmp(msginfo1->var_name, msginfo2->var_name); \
+}
+
+CMP_FUNC_DEF(summary_cmp_by_from, fromname)
+CMP_FUNC_DEF(summary_cmp_by_to, to);
+
+#undef CMP_FUNC_DEF
+
+static gint summary_cmp_by_subject(GtkCList *clist, \
+ gconstpointer ptr1, \
+ gconstpointer ptr2) \
+{ \
+ MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; \
+ MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; \
+ \
+ if (!msginfo1->subject) \
+ return (msginfo2->subject != NULL); \
+ if (!msginfo2->subject) \
+ return -1; \
+ \
+ return subject_compare_for_sort \
+ (msginfo1->subject, msginfo2->subject); \
+}
diff --git a/src/summaryview.h b/src/summaryview.h
new file mode 100644
index 00000000..b577c0f1
--- /dev/null
+++ b/src/summaryview.h
@@ -0,0 +1,239 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SUMMARY_H__
+#define __SUMMARY_H__
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkitemfactory.h>
+#include <gtk/gtkctree.h>
+#include <gtk/gtkdnd.h>
+
+typedef struct _SummaryView SummaryView;
+typedef struct _SummaryColumnState SummaryColumnState;
+
+#include "mainwindow.h"
+#include "folderview.h"
+#include "headerview.h"
+#include "messageview.h"
+#include "compose.h"
+#include "prefs_filter.h"
+#include "folder.h"
+#include "gtksctree.h"
+
+typedef enum
+{
+ S_COL_MARK,
+ S_COL_UNREAD,
+ S_COL_MIME,
+ S_COL_SUBJECT,
+ S_COL_FROM,
+ S_COL_DATE,
+ S_COL_SIZE,
+ S_COL_NUMBER,
+} SummaryColumnType;
+
+#define N_SUMMARY_COLS 8
+
+typedef enum
+{
+ SUMMARY_NONE,
+ SUMMARY_SELECTED_NONE,
+ SUMMARY_SELECTED_SINGLE,
+ SUMMARY_SELECTED_MULTIPLE
+} SummarySelection;
+
+typedef enum
+{
+ TARGET_MAIL_URI_LIST,
+ TARGET_DUMMY
+} TargetInfo;
+
+extern GtkTargetEntry summary_drag_types[1];
+
+struct _SummaryColumnState
+{
+ SummaryColumnType type;
+ gboolean visible;
+};
+
+struct _SummaryView
+{
+ GtkWidget *vbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *ctree;
+ GtkWidget *hbox;
+ GtkWidget *hbox_l;
+ GtkWidget *statlabel_folder;
+ GtkWidget *statlabel_select;
+ GtkWidget *statlabel_msgs;
+ GtkWidget *toggle_eventbox;
+ GtkWidget *toggle_arrow;
+ GtkWidget *popupmenu;
+ GtkWidget *colorlabel_menu;
+
+ GtkItemFactory *popupfactory;
+
+ GtkWidget *reedit_menuitem;
+ GtkWidget *reedit_separator;
+
+ GtkWidget *window;
+
+ GtkCTreeNode *selected;
+ GtkCTreeNode *displayed;
+
+ gboolean display_msg;
+
+ SummaryColumnState col_state[N_SUMMARY_COLS];
+ gint col_pos[N_SUMMARY_COLS];
+
+ GdkColor color_marked;
+ GdkColor color_dim;
+
+ guint lock_count;
+
+ MainWindow *mainwin;
+ FolderView *folderview;
+ HeaderView *headerview;
+ MessageView *messageview;
+
+ FolderItem *folder_item;
+
+ /* current message status */
+ off_t total_size;
+ gint deleted;
+ gint moved;
+ gint copied;
+
+/*
+private:
+*/
+ /* table for looking up message-id */
+ GHashTable *msgid_table;
+
+ /* list for moving/deleting messages */
+ GSList *mlist;
+ /* table for updating folder tree */
+ GHashTable *folder_table;
+ /* counter for filtering */
+ gint filtered;
+};
+
+SummaryView *summary_create(void);
+
+void summary_init (SummaryView *summaryview);
+gboolean summary_show (SummaryView *summaryview,
+ FolderItem *fitem,
+ gboolean update_cache);
+void summary_clear_list (SummaryView *summaryview);
+void summary_clear_all (SummaryView *summaryview);
+
+void summary_lock (SummaryView *summaryview);
+void summary_unlock (SummaryView *summaryview);
+gboolean summary_is_locked (SummaryView *summaryview);
+
+SummarySelection summary_get_selection_type (SummaryView *summaryview);
+GSList *summary_get_selected_msg_list (SummaryView *summaryview);
+
+void summary_select_prev_unread (SummaryView *summaryview);
+void summary_select_next_unread (SummaryView *summaryview);
+void summary_select_prev_new (SummaryView *summaryview);
+void summary_select_next_new (SummaryView *summaryview);
+void summary_select_prev_marked (SummaryView *summaryview);
+void summary_select_next_marked (SummaryView *summaryview);
+void summary_select_prev_labeled (SummaryView *summaryview);
+void summary_select_next_labeled (SummaryView *summaryview);
+void summary_select_by_msgnum (SummaryView *summaryview,
+ guint msgnum);
+void summary_select_node (SummaryView *summaryview,
+ GtkCTreeNode *node,
+ gboolean display_msg,
+ gboolean do_refresh);
+
+void summary_thread_build (SummaryView *summaryview);
+void summary_unthread (SummaryView *summaryview);
+
+void summary_expand_threads (SummaryView *summaryview);
+void summary_collapse_threads (SummaryView *summaryview);
+
+void summary_filter (SummaryView *summaryview,
+ gboolean selected_only);
+void summary_filter_open (SummaryView *summaryview,
+ PrefsFilterType type);
+
+void summary_sort (SummaryView *summaryview,
+ FolderSortKey sort_key,
+ FolderSortType sort_type);
+
+void summary_delete (SummaryView *summaryview);
+void summary_delete_duplicated (SummaryView *summaryview);
+
+gboolean summary_execute (SummaryView *summaryview);
+
+void summary_attract_by_subject (SummaryView *summaryview);
+
+gint summary_write_cache (SummaryView *summaryview);
+
+void summary_pass_key_press_event (SummaryView *summaryview,
+ GdkEventKey *event);
+
+void summary_display_msg_selected (SummaryView *summaryview,
+ gboolean all_headers);
+void summary_redisplay_msg (SummaryView *summaryview);
+void summary_open_msg (SummaryView *summaryview);
+void summary_view_source (SummaryView *summaryview);
+void summary_reedit (SummaryView *summaryview);
+void summary_step (SummaryView *summaryview,
+ GtkScrollType type);
+void summary_toggle_view (SummaryView *summaryview);
+void summary_set_marks_selected (SummaryView *summaryview);
+
+void summary_move_selected_to (SummaryView *summaryview,
+ FolderItem *to_folder);
+void summary_move_to (SummaryView *summaryview);
+void summary_copy_selected_to (SummaryView *summaryview,
+ FolderItem *to_folder);
+void summary_copy_to (SummaryView *summaryview);
+void summary_save_as (SummaryView *summaryview);
+void summary_print (SummaryView *summaryview);
+void summary_mark (SummaryView *summaryview);
+void summary_unmark (SummaryView *summaryview);
+void summary_mark_as_unread (SummaryView *summaryview);
+void summary_mark_as_read (SummaryView *summaryview);
+void summary_mark_all_read (SummaryView *summaryview);
+void summary_add_address (SummaryView *summaryview);
+void summary_select_all (SummaryView *summaryview);
+void summary_unselect_all (SummaryView *summaryview);
+void summary_select_thread (SummaryView *summaryview);
+
+void summary_reply (SummaryView *summaryview,
+ ComposeMode mode);
+
+void summary_set_colorlabel (SummaryView *summaryview,
+ guint labelcolor,
+ GtkWidget *widget);
+void summary_set_colorlabel_color (GtkCTree *ctree,
+ GtkCTreeNode *node,
+ guint labelcolor);
+
+void summary_set_column_order (SummaryView *summaryview);
+
+#endif /* __SUMMARY_H__ */
diff --git a/src/syldap.c b/src/syldap.c
new file mode 100644
index 00000000..2646dbf3
--- /dev/null
+++ b/src/syldap.c
@@ -0,0 +1,1129 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Functions necessary to access LDAP servers.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_LDAP
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkmain.h>
+#include <sys/time.h>
+#include <string.h>
+#include <ldap.h>
+#include <lber.h>
+#include <pthread.h>
+/* #include <dlfcn.h> */
+
+#include "mgutils.h"
+#include "addritem.h"
+#include "addrcache.h"
+#include "syldap.h"
+#include "utils.h"
+
+/*
+* Create new LDAP server interface object.
+*/
+SyldapServer *syldap_create() {
+ SyldapServer *ldapServer;
+
+ debug_print("Creating LDAP server interface object\n");
+
+ ldapServer = g_new0( SyldapServer, 1 );
+ ldapServer->name = NULL;
+ ldapServer->hostName = NULL;
+ ldapServer->port = SYLDAP_DFL_PORT;
+ ldapServer->baseDN = NULL;
+ ldapServer->bindDN = NULL;
+ ldapServer->bindPass = NULL;
+ ldapServer->searchCriteria = NULL;
+ ldapServer->searchValue = NULL;
+ ldapServer->entriesRead = 0;
+ ldapServer->maxEntries = SYLDAP_MAX_ENTRIES;
+ ldapServer->timeOut = SYLDAP_DFL_TIMEOUT;
+ ldapServer->newSearch = TRUE;
+ ldapServer->addressCache = addrcache_create();
+ ldapServer->thread = NULL;
+ ldapServer->busyFlag = FALSE;
+ ldapServer->retVal = MGU_SUCCESS;
+ ldapServer->callBack = NULL;
+ ldapServer->accessFlag = FALSE;
+ ldapServer->idleId = 0;
+ return ldapServer;
+}
+
+/*
+* Specify name to be used.
+*/
+void syldap_set_name( SyldapServer* ldapServer, const gchar *value ) {
+ ldapServer->name = mgu_replace_string( ldapServer->name, value );
+ g_strstrip( ldapServer->name );
+}
+
+/*
+* Specify hostname to be used.
+*/
+void syldap_set_host( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->hostName = mgu_replace_string( ldapServer->hostName, value );
+ g_strstrip( ldapServer->hostName );
+}
+
+/*
+* Specify port to be used.
+*/
+void syldap_set_port( SyldapServer* ldapServer, const gint value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ if( value > 0 ) {
+ ldapServer->port = value;
+ }
+ else {
+ ldapServer->port = SYLDAP_DFL_PORT;
+ }
+}
+
+/*
+* Specify base DN to be used.
+*/
+void syldap_set_base_dn( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->baseDN = mgu_replace_string( ldapServer->baseDN, value );
+ g_strstrip( ldapServer->baseDN );
+}
+
+/*
+* Specify bind DN to be used.
+*/
+void syldap_set_bind_dn( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->bindDN = mgu_replace_string( ldapServer->bindDN, value );
+ g_strstrip( ldapServer->bindDN );
+}
+
+/*
+* Specify bind password to be used.
+*/
+void syldap_set_bind_password( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->bindPass = mgu_replace_string( ldapServer->bindPass, value );
+ g_strstrip( ldapServer->bindPass );
+}
+
+/*
+* Specify search criteria to be used.
+*/
+void syldap_set_search_criteria( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->searchCriteria = mgu_replace_string( ldapServer->searchCriteria, value );
+ g_strstrip( ldapServer->searchCriteria );
+ ldapServer->newSearch = TRUE;
+}
+
+/*
+* Specify search value to be searched for.
+*/
+void syldap_set_search_value( SyldapServer* ldapServer, const gchar *value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->searchValue = mgu_replace_string( ldapServer->searchValue, value );
+ g_strstrip( ldapServer->searchValue );
+ ldapServer->newSearch = TRUE;
+}
+
+/*
+* Specify maximum number of entries to retrieve.
+*/
+void syldap_set_max_entries( SyldapServer* ldapServer, const gint value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ if( value > 0 ) {
+ ldapServer->maxEntries = value;
+ }
+ else {
+ ldapServer->maxEntries = SYLDAP_MAX_ENTRIES;
+ }
+}
+
+/*
+* Specify timeout value for LDAP operation (in seconds).
+*/
+void syldap_set_timeout( SyldapServer* ldapServer, const gint value ) {
+ addrcache_refresh( ldapServer->addressCache );
+ if( value > 0 ) {
+ ldapServer->timeOut = value;
+ }
+ else {
+ ldapServer->timeOut = SYLDAP_DFL_TIMEOUT;
+ }
+}
+
+/*
+* Register a callback function. When called, the function will be passed
+* this object as an argument.
+*/
+void syldap_set_callback( SyldapServer *ldapServer, void *func ) {
+ ldapServer->callBack = func;
+}
+
+void syldap_set_accessed( SyldapServer *ldapServer, const gboolean value ) {
+ g_return_if_fail( ldapServer != NULL );
+ ldapServer->accessFlag = value;
+}
+
+/*
+* Refresh internal variables to force a file read.
+*/
+void syldap_force_refresh( SyldapServer *ldapServer ) {
+ addrcache_refresh( ldapServer->addressCache );
+ ldapServer->newSearch = TRUE;
+}
+
+gint syldap_get_status( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, -1 );
+ return ldapServer->retVal;
+}
+
+ItemFolder *syldap_get_root_folder( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, NULL );
+ return addrcache_get_root_folder( ldapServer->addressCache );
+}
+
+gchar *syldap_get_name( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, NULL );
+ return ldapServer->name;
+}
+
+gboolean syldap_get_accessed( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, FALSE );
+ return ldapServer->accessFlag;
+}
+
+/*
+* Free up LDAP server interface object by releasing internal memory.
+*/
+void syldap_free( SyldapServer *ldapServer ) {
+ g_return_if_fail( ldapServer != NULL );
+
+ debug_print("Freeing LDAP server interface object\n");
+
+ ldapServer->callBack = NULL;
+
+ /* Free internal stuff */
+ g_free( ldapServer->name );
+ g_free( ldapServer->hostName );
+ g_free( ldapServer->baseDN );
+ g_free( ldapServer->bindDN );
+ g_free( ldapServer->bindPass );
+ g_free( ldapServer->searchCriteria );
+ g_free( ldapServer->searchValue );
+ g_free( ldapServer->thread );
+
+ ldapServer->port = 0;
+ ldapServer->entriesRead = 0;
+ ldapServer->maxEntries = 0;
+ ldapServer->newSearch = FALSE;
+
+ /* Clear cache */
+ addrcache_clear( ldapServer->addressCache );
+ addrcache_free( ldapServer->addressCache );
+
+ /* Clear pointers */
+ ldapServer->name = NULL;
+ ldapServer->hostName = NULL;
+ ldapServer->baseDN = NULL;
+ ldapServer->bindDN = NULL;
+ ldapServer->bindPass = NULL;
+ ldapServer->searchCriteria = NULL;
+ ldapServer->searchValue = NULL;
+ ldapServer->addressCache = NULL;
+ ldapServer->thread = NULL;
+ ldapServer->busyFlag = FALSE;
+ ldapServer->retVal = MGU_SUCCESS;
+ ldapServer->accessFlag = FALSE;
+
+ /* Now release LDAP object */
+ g_free( ldapServer );
+
+}
+
+/*
+* Display object to specified stream.
+*/
+void syldap_print_data( SyldapServer *ldapServer, FILE *stream ) {
+ g_return_if_fail( ldapServer != NULL );
+
+ fprintf( stream, "SyldapServer:\n" );
+ fprintf( stream, " name: '%s'\n", ldapServer->name );
+ fprintf( stream, "host name: '%s'\n", ldapServer->hostName );
+ fprintf( stream, " port: %d\n", ldapServer->port );
+ fprintf( stream, " base dn: '%s'\n", ldapServer->baseDN );
+ fprintf( stream, " bind dn: '%s'\n", ldapServer->bindDN );
+ fprintf( stream, "bind pass: '%s'\n", ldapServer->bindPass );
+ fprintf( stream, " criteria: '%s'\n", ldapServer->searchCriteria );
+ fprintf( stream, "searchval: '%s'\n", ldapServer->searchValue );
+ fprintf( stream, "max entry: %d\n", ldapServer->maxEntries );
+ fprintf( stream, " num read: %d\n", ldapServer->entriesRead );
+ fprintf( stream, " ret val: %d\n", ldapServer->retVal );
+ addrcache_print( ldapServer->addressCache, stream );
+ addritem_print_item_folder( ldapServer->addressCache->rootFolder, stream );
+}
+
+/*
+* Display object to specified stream.
+*/
+void syldap_print_short( SyldapServer *ldapServer, FILE *stream ) {
+ g_return_if_fail( ldapServer != NULL );
+
+ fprintf( stream, "SyldapServer:\n" );
+ fprintf( stream, " name: '%s'\n", ldapServer->name );
+ fprintf( stream, "host name: '%s'\n", ldapServer->hostName );
+ fprintf( stream, " port: %d\n", ldapServer->port );
+ fprintf( stream, " base dn: '%s'\n", ldapServer->baseDN );
+ fprintf( stream, " bind dn: '%s'\n", ldapServer->bindDN );
+ fprintf( stream, "bind pass: '%s'\n", ldapServer->bindPass );
+ fprintf( stream, " criteria: '%s'\n", ldapServer->searchCriteria );
+ fprintf( stream, "searchval: '%s'\n", ldapServer->searchValue );
+ fprintf( stream, "max entry: %d\n", ldapServer->maxEntries );
+ fprintf( stream, " num read: %d\n", ldapServer->entriesRead );
+ fprintf( stream, " ret val: %d\n", ldapServer->retVal );
+}
+
+#if 0
+/*
+* Build an address list entry and append to list of address items. Name is formatted
+* as it appears in the common name (cn) attribute.
+*/
+static void syldap_build_items_cn( SyldapServer *ldapServer, GSList *listName, GSList *listAddr ) {
+ ItemPerson *person;
+ ItemEMail *email;
+ GSList *nodeName = listName;
+
+ while( nodeName ) {
+ GSList *nodeAddress = listAddr;
+ person = addritem_create_item_person();
+ addritem_person_set_common_name( person, nodeName->data );
+ addrcache_id_person( ldapServer->addressCache, person );
+ addrcache_add_person( ldapServer->addressCache, person );
+
+ while( nodeAddress ) {
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, nodeAddress->data );
+ addrcache_id_email( ldapServer->addressCache, email );
+ addrcache_person_add_email( ldapServer->addressCache, person, email );
+ nodeAddress = g_slist_next( nodeAddress );
+ ldapServer->entriesRead++;
+ }
+ nodeName = g_slist_next( nodeName );
+ }
+}
+#endif
+
+/*
+* Build an address list entry and append to list of address items. Name is formatted
+* as "<first-name> <last-name>".
+*/
+static void syldap_build_items_fl( SyldapServer *ldapServer, GSList *listAddr, GSList *listFirst, GSList *listLast ) {
+ GSList *nodeFirst = listFirst;
+ GSList *nodeAddress = listAddr;
+ gchar *firstName = NULL, *lastName = NULL, *fullName = NULL;
+ gint iLen = 0, iLenT = 0;
+ ItemPerson *person;
+ ItemEMail *email;
+
+ /* Find longest first name in list */
+ while( nodeFirst ) {
+ if( firstName == NULL ) {
+ firstName = nodeFirst->data;
+ iLen = strlen( firstName );
+ }
+ else {
+ if( ( iLenT = strlen( nodeFirst->data ) ) > iLen ) {
+ firstName = nodeFirst->data;
+ iLen = iLenT;
+ }
+ }
+ nodeFirst = g_slist_next( nodeFirst );
+ }
+
+ /* Format name */
+ if( listLast ) {
+ lastName = listLast->data;
+ }
+
+ if( firstName ) {
+ if( lastName ) {
+ fullName = g_strdup_printf( "%s %s", firstName, lastName );
+ }
+ else {
+ fullName = g_strdup_printf( "%s", firstName );
+ }
+ }
+ else {
+ if( lastName ) {
+ fullName = g_strdup_printf( "%s", lastName );
+ }
+ }
+ if( fullName ) {
+ g_strchug( fullName ); g_strchomp( fullName );
+ }
+
+ if( nodeAddress ) {
+ person = addritem_create_item_person();
+ addritem_person_set_common_name( person, fullName );
+ addritem_person_set_first_name( person, firstName );
+ addritem_person_set_last_name( person, lastName );
+ addrcache_id_person( ldapServer->addressCache, person );
+ addrcache_add_person( ldapServer->addressCache, person );
+ }
+
+ /* Add address item */
+ while( nodeAddress ) {
+ email = addritem_create_item_email();
+ addritem_email_set_address( email, nodeAddress->data );
+ addrcache_id_email( ldapServer->addressCache, email );
+ addrcache_person_add_email( ldapServer->addressCache, person, email );
+ nodeAddress = g_slist_next( nodeAddress );
+ ldapServer->entriesRead++;
+ }
+ g_free( fullName );
+ fullName = firstName = lastName = NULL;
+
+}
+
+/*
+* Add all attribute values to a list.
+*/
+static GSList *syldap_add_list_values( LDAP *ld, LDAPMessage *entry, char *attr ) {
+ GSList *list = NULL;
+ gint i;
+ gchar **vals;
+
+ if( ( vals = ldap_get_values( ld, entry, attr ) ) != NULL ) {
+ for( i = 0; vals[i] != NULL; i++ ) {
+ /* printf( "lv\t%s: %s\n", attr, vals[i] ); */
+ list = g_slist_append( list, g_strdup( vals[i] ) );
+ }
+ }
+ ldap_value_free( vals );
+ return list;
+}
+
+/*
+* Add a single attribute value to a list.
+*/
+static GSList *syldap_add_single_value( LDAP *ld, LDAPMessage *entry, char *attr ) {
+ GSList *list = NULL;
+ gchar **vals;
+
+ if( ( vals = ldap_get_values( ld, entry, attr ) ) != NULL ) {
+ if( vals[0] != NULL ) {
+ /* printf( "sv\t%s: %s\n", attr, vals[0] ); */
+ list = g_slist_append( list, g_strdup( vals[0] ) );
+ }
+ }
+ ldap_value_free( vals );
+ return list;
+}
+
+/*
+* Free linked lists of character strings.
+*/
+static void syldap_free_lists( GSList *listName, GSList *listAddr, GSList *listID, GSList *listDN, GSList *listFirst, GSList *listLast ) {
+ mgu_free_list( listName );
+ mgu_free_list( listAddr );
+ mgu_free_list( listID );
+ mgu_free_list( listDN );
+ mgu_free_list( listFirst );
+ mgu_free_list( listLast );
+}
+
+/*
+* Check parameters that are required for a search. This should
+* be called before performing a search.
+* Return: TRUE if search criteria appear OK.
+*/
+gboolean syldap_check_search( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, FALSE );
+
+ ldapServer->retVal = MGU_LDAP_CRITERIA;
+
+ /* Test search criteria */
+ if( ldapServer->searchCriteria == NULL ) {
+ return FALSE;
+ }
+ if( strlen( ldapServer->searchCriteria ) < 1 ) {
+ return FALSE;
+ }
+
+ if( ldapServer->searchValue == NULL ) {
+ return FALSE;
+ }
+ if( strlen( ldapServer->searchValue ) < 1 ) {
+ return FALSE;
+ }
+
+ ldapServer->retVal = MGU_SUCCESS;
+ return TRUE;
+}
+
+/*
+* Perform the LDAP search, reading LDAP entries into cache.
+* Note that one LDAP entry can have multiple values for many of its
+* attributes. If these attributes are E-Mail addresses; these are
+* broken out into separate address items. For any other attribute,
+* only the first occurrence is read.
+*/
+gint syldap_search( SyldapServer *ldapServer ) {
+ LDAP *ld;
+ LDAPMessage *result, *e;
+ char *attribs[10];
+ char *attribute;
+ gchar *criteria;
+ BerElement *ber;
+ gint rc;
+ GSList *listName = NULL, *listAddress = NULL, *listID = NULL;
+ GSList *listFirst = NULL, *listLast = NULL, *listDN = NULL;
+ struct timeval timeout;
+ gboolean entriesFound = FALSE;
+
+ g_return_val_if_fail( ldapServer != NULL, -1 );
+
+ ldapServer->retVal = MGU_SUCCESS;
+ if( ! syldap_check_search( ldapServer ) ) {
+ return ldapServer->retVal;
+ }
+
+ /* Set timeout */
+ timeout.tv_sec = ldapServer->timeOut;
+ timeout.tv_usec = 0L;
+
+ ldapServer->entriesRead = 0;
+ if( ( ld = ldap_init( ldapServer->hostName, ldapServer->port ) ) == NULL ) {
+ ldapServer->retVal = MGU_LDAP_INIT;
+ return ldapServer->retVal;
+ }
+
+ /* printf( "connected to LDAP host %s on port %d\n", ldapServer->hostName, ldapServer->port ); */
+
+ /* Bind to the server, if required */
+ if( ldapServer->bindDN ) {
+ if( * ldapServer->bindDN != '\0' ) {
+ /* printf( "binding...\n" ); */
+ rc = ldap_simple_bind_s( ld, ldapServer->bindDN, ldapServer->bindPass );
+ /* printf( "rc=%d\n", rc ); */
+ if( rc != LDAP_SUCCESS ) {
+ /* printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); */
+ ldap_unbind( ld );
+ ldapServer->retVal = MGU_LDAP_BIND;
+ return ldapServer->retVal;
+ }
+ }
+ }
+
+ /* Define all attributes we are interested in. */
+ attribs[0] = SYLDAP_ATTR_DN;
+ attribs[1] = SYLDAP_ATTR_COMMONNAME;
+ attribs[2] = SYLDAP_ATTR_GIVENNAME;
+ attribs[3] = SYLDAP_ATTR_SURNAME;
+ attribs[4] = SYLDAP_ATTR_EMAIL;
+ attribs[5] = SYLDAP_ATTR_UID;
+ attribs[6] = NULL;
+
+ /* Create LDAP search string and apply search criteria */
+ criteria = g_strdup_printf( ldapServer->searchCriteria, ldapServer->searchValue );
+ rc = ldap_search_ext_s( ld, ldapServer->baseDN, LDAP_SCOPE_SUBTREE, criteria, attribs, 0, NULL, NULL,
+ &timeout, 0, &result );
+ g_free( criteria );
+ criteria = NULL;
+ if( rc == LDAP_TIMEOUT ) {
+ ldap_unbind( ld );
+ ldapServer->retVal = MGU_LDAP_TIMEOUT;
+ return ldapServer->retVal;
+ }
+ if( rc != LDAP_SUCCESS ) {
+ /* printf( "LDAP Error: ldap_search_st: %s\n", ldap_err2string( rc ) ); */
+ ldap_unbind( ld );
+ ldapServer->retVal = MGU_LDAP_SEARCH;
+ return ldapServer->retVal;
+ }
+
+ /* printf( "Total results are: %d\n", ldap_count_entries( ld, result ) ); */
+
+ /* Clear the cache if we have new entries, otherwise leave untouched. */
+ if( ldap_count_entries( ld, result ) > 0 ) {
+ addrcache_clear( ldapServer->addressCache );
+ }
+
+ /* Process results */
+ ldapServer->entriesRead = 0;
+ for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ entriesFound = TRUE;
+ if( ldapServer->entriesRead >= ldapServer->maxEntries ) break;
+ /* printf( "DN: %s\n", ldap_get_dn( ld, e ) ); */
+
+ /* Process all attributes */
+ for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL;
+ attribute = ldap_next_attribute( ld, e, ber ) ) {
+ if( strcasecmp( attribute, SYLDAP_ATTR_COMMONNAME ) == 0 ) {
+ listName = syldap_add_list_values( ld, e, attribute );
+ }
+ if( strcasecmp( attribute, SYLDAP_ATTR_EMAIL ) == 0 ) {
+ listAddress = syldap_add_list_values( ld, e, attribute );
+ }
+ if( strcasecmp( attribute, SYLDAP_ATTR_UID ) == 0 ) {
+ listID = syldap_add_single_value( ld, e, attribute );
+ }
+ if( strcasecmp( attribute, SYLDAP_ATTR_GIVENNAME ) == 0 ) {
+ listFirst = syldap_add_list_values( ld, e, attribute );
+ }
+ if( strcasecmp( attribute, SYLDAP_ATTR_SURNAME ) == 0 ) {
+ listLast = syldap_add_single_value( ld, e, attribute );
+ }
+ if( strcasecmp( attribute, SYLDAP_ATTR_DN ) == 0 ) {
+ listDN = syldap_add_single_value( ld, e, attribute );
+ }
+ }
+
+ /* Free memory used to store attribute */
+ ldap_memfree( attribute );
+
+ /* Format and add items to cache */
+ syldap_build_items_fl( ldapServer, listAddress, listFirst, listLast );
+
+ /* Free up */
+ syldap_free_lists( listName, listAddress, listID, listDN, listFirst, listLast );
+ listName = listAddress = listID = listFirst = listLast = listDN = NULL;
+
+ if( ber != NULL ) {
+ ber_free( ber, 0 );
+ }
+ }
+
+ syldap_free_lists( listName, listAddress, listID, listDN, listFirst, listLast );
+ listName = listAddress = listID = listFirst = listLast = listDN = NULL;
+
+ /* Free up and disconnect */
+ ldap_msgfree( result );
+ ldap_unbind( ld );
+ ldapServer->newSearch = FALSE;
+ if( entriesFound ) {
+ ldapServer->retVal = MGU_SUCCESS;
+ }
+ else {
+ ldapServer->retVal = MGU_LDAP_NOENTRIES;
+ }
+ return ldapServer->retVal;
+}
+
+/* syldap_display_search_results() - updates the ui. this function is called from the
+ * main thread (the thread running the GTK event loop). */
+static gint syldap_display_search_results(SyldapServer *ldapServer)
+{
+ /* NOTE: when this function is called the accompanying thread should
+ * already be terminated. */
+ gtk_idle_remove(ldapServer->idleId);
+ ldapServer->callBack(ldapServer);
+ /* FIXME: match should know whether to free this SyldapServer stuff. */
+ g_free(ldapServer->thread);
+ ldapServer->thread = NULL;
+ return TRUE;
+}
+
+/* ============================================================================================ */
+/*
+* Read data into list. Main entry point
+* Return: TRUE if file read successfully.
+*/
+/* ============================================================================================ */
+gint syldap_read_data( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, -1 );
+
+ ldapServer->accessFlag = FALSE;
+ pthread_detach( pthread_self() );
+ if( ldapServer->newSearch ) {
+ /* Read data into the list */
+ syldap_search( ldapServer );
+
+ /* Mark cache */
+ ldapServer->addressCache->modified = FALSE;
+ ldapServer->addressCache->dataRead = TRUE;
+ ldapServer->accessFlag = FALSE;
+ }
+
+ /* Callback */
+ ldapServer->busyFlag = FALSE;
+ if( ldapServer->callBack ) {
+ /* make the ui thread update the search results */
+ /* TODO: really necessary to call gdk_threads_XXX()??? gtk_idle_add()
+ * should do this - could someone check the GTK sources please? */
+ gdk_threads_enter();
+ ldapServer->idleId = gtk_idle_add((GtkFunction)syldap_display_search_results, ldapServer);
+ gdk_threads_leave();
+ }
+
+ return ldapServer->retVal;
+}
+
+/* ============================================================================================ */
+/*
+* Cancel read with thread.
+*/
+/* ============================================================================================ */
+void syldap_cancel_read( SyldapServer *ldapServer ) {
+ g_return_if_fail( ldapServer != NULL );
+
+ /* DELETEME: this is called from inside UI thread so it's OK, Christoph! */
+ if( ldapServer->thread ) {
+ /* printf( "thread cancelled\n" ); */
+ pthread_cancel( *ldapServer->thread );
+ }
+ g_free(ldapServer->thread);
+ ldapServer->thread = NULL;
+ ldapServer->busyFlag = FALSE;
+}
+
+/* ============================================================================================ */
+/*
+* Read data into list using a background thread.
+* Return: TRUE if file read successfully. Callback function will be
+* notified when search is complete.
+*/
+/* ============================================================================================ */
+gint syldap_read_data_th( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, -1 );
+
+ ldapServer->busyFlag = FALSE;
+ syldap_check_search( ldapServer );
+ if( ldapServer->retVal == MGU_SUCCESS ) {
+ /* debug_print("Staring LDAP read thread\n"); */
+
+ ldapServer->busyFlag = TRUE;
+ ldapServer->thread = g_new0(pthread_t, 1);
+ pthread_create( ldapServer->thread, NULL, (void *) syldap_read_data, (void *) ldapServer );
+ }
+ return ldapServer->retVal;
+}
+
+/*
+* Return link list of persons.
+*/
+GList *syldap_get_list_person( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, NULL );
+ return addrcache_get_list_person( ldapServer->addressCache );
+}
+
+/*
+* Return link list of folders. This is always NULL since there are
+* no folders in GnomeCard.
+* Return: NULL.
+*/
+GList *syldap_get_list_folder( SyldapServer *ldapServer ) {
+ g_return_val_if_fail( ldapServer != NULL, NULL );
+ return NULL;
+}
+
+#define SYLDAP_TEST_FILTER "(objectclass=*)"
+#define SYLDAP_SEARCHBASE_V2 "cn=config"
+#define SYLDAP_SEARCHBASE_V3 ""
+#define SYLDAP_V2_TEST_ATTR "database"
+#define SYLDAP_V3_TEST_ATTR "namingcontexts"
+
+/*
+* Attempt to discover the base DN for the server.
+* Enter:
+* host Host name
+* port Port number
+* bindDN Bind DN (optional).
+* bindPW Bind PW (optional).
+* tov Timeout value (seconds), or 0 for none, default 30 secs.
+* Return: List of Base DN's, or NULL if could not read. Base DN should
+* be g_free() when done.
+*/
+GList *syldap_read_basedn_s( const gchar *host, const gint port, const gchar *bindDN, const gchar *bindPW, const gint tov ) {
+ GList *baseDN = NULL;
+ LDAP *ld;
+ gint rc, i;
+ LDAPMessage *result, *e;
+ gchar *attribs[10];
+ BerElement *ber;
+ gchar *attribute;
+ gchar **vals;
+ struct timeval timeout;
+
+ if( host == NULL ) return baseDN;
+ if( port < 1 ) return baseDN;
+
+ /* Set timeout */
+ timeout.tv_usec = 0L;
+ if( tov > 0 ) {
+ timeout.tv_sec = tov;
+ }
+ else {
+ timeout.tv_sec = 30L;
+ }
+
+ /* Connect to server. */
+ if( ( ld = ldap_init( host, port ) ) == NULL ) {
+ return baseDN;
+ }
+
+ /* Bind to the server, if required */
+ if( bindDN ) {
+ if( *bindDN != '\0' ) {
+ rc = ldap_simple_bind_s( ld, bindDN, bindPW );
+ if( rc != LDAP_SUCCESS ) {
+ /* printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); */
+ ldap_unbind( ld );
+ return baseDN;
+ }
+ }
+ }
+
+ /* Test for LDAP version 3 */
+ attribs[0] = SYLDAP_V3_TEST_ATTR;
+ attribs[1] = NULL;
+ rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V3, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs,
+ 0, NULL, NULL, &timeout, 0, &result );
+ if( rc == LDAP_SUCCESS ) {
+ /* Process entries */
+ for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ /* printf( "DN: %s\n", ldap_get_dn( ld, e ) ); */
+
+ /* Process attributes */
+ for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL;
+ attribute = ldap_next_attribute( ld, e, ber ) ) {
+ if( strcasecmp( attribute, SYLDAP_V3_TEST_ATTR ) == 0 ) {
+ if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) {
+ for( i = 0; vals[i] != NULL; i++ ) {
+ /* printf( "\t%s: %s\n", attribute, vals[i] ); */
+ baseDN = g_list_append( baseDN, g_strdup( vals[i] ) );
+ }
+ }
+ ldap_value_free( vals );
+ }
+ }
+ ldap_memfree( attribute );
+ if( ber != NULL ) {
+ ber_free( ber, 0 );
+ }
+ }
+ ldap_msgfree( result );
+ }
+ else {
+ }
+
+ if( baseDN == NULL ) {
+ /* Test for LDAP version 2 */
+ attribs[0] = NULL;
+ rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V2, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs,
+ 0, NULL, NULL, &timeout, 0, &result );
+ if( rc == LDAP_SUCCESS ) {
+ /* Process entries */
+ for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ /* if( baseDN ) break; */
+ /* printf( "DN: %s\n", ldap_get_dn( ld, e ) ); */
+
+ /* Process attributes */
+ for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL;
+ attribute = ldap_next_attribute( ld, e, ber ) ) {
+ /* if( baseDN ) break; */
+ if( strcasecmp( attribute, SYLDAP_V2_TEST_ATTR ) == 0 ) {
+ if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) {
+ for( i = 0; vals[i] != NULL; i++ ) {
+ char *ch;
+ /* Strip the 'ldb:' from the front of the value */
+ ch = ( char * ) strchr( vals[i], ':' );
+ if( ch ) {
+ gchar *bn = g_strdup( ++ch );
+ g_strchomp( bn );
+ g_strchug( bn );
+ baseDN = g_list_append( baseDN, g_strdup( bn ) );
+ }
+ }
+ }
+ ldap_value_free( vals );
+ }
+ }
+ ldap_memfree( attribute );
+ if( ber != NULL ) {
+ ber_free( ber, 0 );
+ }
+ }
+ ldap_msgfree( result );
+ }
+ }
+ ldap_unbind( ld );
+ return baseDN;
+}
+
+/*
+* Attempt to discover the base DN for the server.
+* Enter: ldapServer Server to test.
+* Return: List of Base DN's, or NULL if could not read. Base DN should
+* be g_free() when done. Return code set in ldapServer.
+*/
+GList *syldap_read_basedn( SyldapServer *ldapServer ) {
+ GList *baseDN = NULL;
+ LDAP *ld;
+ gint rc, i;
+ LDAPMessage *result, *e;
+ gchar *attribs[10];
+ BerElement *ber;
+ gchar *attribute;
+ gchar **vals;
+ struct timeval timeout;
+
+ ldapServer->retVal = MGU_BAD_ARGS;
+ if( ldapServer == NULL ) return baseDN;
+ if( ldapServer->hostName == NULL ) return baseDN;
+ if( ldapServer->port < 1 ) return baseDN;
+
+ /* Set timeout */
+ timeout.tv_usec = 0L;
+ if( ldapServer->timeOut > 0 ) {
+ timeout.tv_sec = ldapServer->timeOut;
+ }
+ else {
+ timeout.tv_sec = 30L;
+ }
+
+ /* Connect to server. */
+ if( ( ld = ldap_init( ldapServer->hostName, ldapServer->port ) ) == NULL ) {
+ ldapServer->retVal = MGU_LDAP_INIT;
+ return baseDN;
+ }
+
+ /* Bind to the server, if required */
+ if( ldapServer->bindDN ) {
+ if( *ldapServer->bindDN != '\0' ) {
+ rc = ldap_simple_bind_s( ld, ldapServer->bindDN, ldapServer->bindPass );
+ if( rc != LDAP_SUCCESS ) {
+ /* printf( "LDAP Error: ldap_simple_bind_s: %s\n", ldap_err2string( rc ) ); */
+ ldap_unbind( ld );
+ ldapServer->retVal = MGU_LDAP_BIND;
+ return baseDN;
+ }
+ }
+ }
+
+ ldapServer->retVal = MGU_LDAP_SEARCH;
+
+ /* Test for LDAP version 3 */
+ attribs[0] = SYLDAP_V3_TEST_ATTR;
+ attribs[1] = NULL;
+ rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V3, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs,
+ 0, NULL, NULL, &timeout, 0, &result );
+ if( rc == LDAP_SUCCESS ) {
+ /* Process entries */
+ for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ /* printf( "DN: %s\n", ldap_get_dn( ld, e ) ); */
+
+ /* Process attributes */
+ for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL;
+ attribute = ldap_next_attribute( ld, e, ber ) ) {
+ if( strcasecmp( attribute, SYLDAP_V3_TEST_ATTR ) == 0 ) {
+ if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) {
+ for( i = 0; vals[i] != NULL; i++ ) {
+ /* printf( "\t%s: %s\n", attribute, vals[i] ); */
+ baseDN = g_list_append( baseDN, g_strdup( vals[i] ) );
+ }
+ }
+ ldap_value_free( vals );
+ }
+ }
+ ldap_memfree( attribute );
+ if( ber != NULL ) {
+ ber_free( ber, 0 );
+ }
+ }
+ ldap_msgfree( result );
+ ldapServer->retVal = MGU_SUCCESS;
+ }
+ else if( rc == LDAP_TIMEOUT ) {
+ ldapServer->retVal = MGU_LDAP_TIMEOUT;
+ }
+
+ if( baseDN == NULL ) {
+ /* Test for LDAP version 2 */
+ attribs[0] = NULL;
+ rc = ldap_search_ext_s( ld, SYLDAP_SEARCHBASE_V2, LDAP_SCOPE_BASE, SYLDAP_TEST_FILTER, attribs,
+ 0, NULL, NULL, &timeout, 0, &result );
+ if( rc == LDAP_SUCCESS ) {
+ /* Process entries */
+ for( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ /* if( baseDN ) break; */
+ /* printf( "DN: %s\n", ldap_get_dn( ld, e ) ); */
+
+ /* Process attributes */
+ for( attribute = ldap_first_attribute( ld, e, &ber ); attribute != NULL;
+ attribute = ldap_next_attribute( ld, e, ber ) ) {
+ /* if( baseDN ) break; */
+ if( strcasecmp( attribute, SYLDAP_V2_TEST_ATTR ) == 0 ) {
+ if( ( vals = ldap_get_values( ld, e, attribute ) ) != NULL ) {
+ for( i = 0; vals[i] != NULL; i++ ) {
+ char *ch;
+ /* Strip the 'ldb:' from the front of the value */
+ ch = ( char * ) strchr( vals[i], ':' );
+ if( ch ) {
+ gchar *bn = g_strdup( ++ch );
+ g_strchomp( bn );
+ g_strchug( bn );
+ baseDN = g_list_append( baseDN, g_strdup( bn ) );
+ }
+ }
+ }
+ ldap_value_free( vals );
+ }
+ }
+ ldap_memfree( attribute );
+ if( ber != NULL ) {
+ ber_free( ber, 0 );
+ }
+ }
+ ldap_msgfree( result );
+ ldapServer->retVal = MGU_SUCCESS;
+ }
+ else if( rc == LDAP_TIMEOUT ) {
+ ldapServer->retVal = MGU_LDAP_TIMEOUT;
+ }
+ }
+ ldap_unbind( ld );
+
+ return baseDN;
+}
+
+/*
+* Attempt to connect to the server.
+* Enter:
+* host Host name
+* port Port number
+* Return: TRUE if connected successfully.
+*/
+gboolean syldap_test_connect_s( const gchar *host, const gint port ) {
+ gboolean retVal = FALSE;
+ LDAP *ld;
+
+ if( host == NULL ) return retVal;
+ if( port < 1 ) return retVal;
+ if( ( ld = ldap_open( host, port ) ) != NULL ) {
+ retVal = TRUE;
+ }
+ if( ld != NULL ) {
+ ldap_unbind( ld );
+ }
+ return retVal;
+}
+
+/*
+* Attempt to connect to the server.
+* Enter: ldapServer Server to test.
+* Return: TRUE if connected successfully. Return code set in ldapServer.
+*/
+gboolean syldap_test_connect( SyldapServer *ldapServer ) {
+ gboolean retVal = FALSE;
+ LDAP *ld;
+
+ ldapServer->retVal = MGU_BAD_ARGS;
+ if( ldapServer == NULL ) return retVal;
+ if( ldapServer->hostName == NULL ) return retVal;
+ if( ldapServer->port < 1 ) return retVal;
+ ldapServer->retVal = MGU_LDAP_INIT;
+ if( ( ld = ldap_open( ldapServer->hostName, ldapServer->port ) ) != NULL ) {
+ ldapServer->retVal = MGU_SUCCESS;
+ retVal = TRUE;
+ }
+ if( ld != NULL ) {
+ ldap_unbind( ld );
+ }
+ return retVal;
+}
+
+#define LDAP_LINK_LIB_NAME_1 "libldap.so"
+#define LDAP_LINK_LIB_NAME_2 "liblber.so"
+#define LDAP_LINK_LIB_NAME_3 "libresolv.so"
+#define LDAP_LINK_LIB_NAME_4 "libpthread.so"
+
+/*
+* Test whether LDAP libraries installed.
+* Return: TRUE if library available.
+*/
+#if 0
+gboolean syldap_test_ldap_lib() {
+ void *handle, *fun;
+
+ /* Get library */
+ handle = dlopen( LDAP_LINK_LIB_NAME_1, RTLD_LAZY );
+ if( ! handle ) {
+ return FALSE;
+ }
+
+ /* Test for symbols we need */
+ fun = dlsym( handle, "ldap_init" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+ dlclose( handle ); handle = NULL; fun = NULL;
+
+ handle = dlopen( LDAP_LINK_LIB_NAME_2, RTLD_LAZY );
+ if( ! handle ) {
+ return FALSE;
+ }
+ fun = dlsym( handle, "ber_init" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+ dlclose( handle ); handle = NULL; fun = NULL;
+
+ handle = dlopen( LDAP_LINK_LIB_NAME_3, RTLD_LAZY );
+ if( ! handle ) {
+ return FALSE;
+ }
+ fun = dlsym( handle, "res_query" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+ dlclose( handle ); handle = NULL; fun = NULL;
+
+ handle = dlopen( LDAP_LINK_LIB_NAME_4, RTLD_LAZY );
+ if( ! handle ) {
+ return FALSE;
+ }
+ fun = dlsym( handle, "pthread_create" );
+ if( ! fun ) {
+ dlclose( handle );
+ return FALSE;
+ }
+ dlclose( handle ); handle = NULL; fun = NULL;
+
+ return TRUE;
+}
+#endif /* 0 */
+
+#endif /* USE_LDAP */
+
+/*
+* End of Source.
+*/
diff --git a/src/syldap.h b/src/syldap.h
new file mode 100644
index 00000000..f760dfad
--- /dev/null
+++ b/src/syldap.h
@@ -0,0 +1,111 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions necessary to access LDAP servers.
+ */
+
+#ifndef __SYLDAP_H__
+#define __SYLDAP_H__
+
+#ifdef USE_LDAP
+
+#include <glib.h>
+#include <pthread.h>
+
+#include "addritem.h"
+#include "addrcache.h"
+
+#define SYLDAP_DFL_PORT 389
+#define SYLDAP_MAX_ENTRIES 20
+#define SYLDAP_DFL_TIMEOUT 30
+#define SYLDAP_DFL_CRITERIA "(&(mail=*)(cn=%s*))"
+
+#define SYLDAP_ATTR_DN "dn"
+#define SYLDAP_ATTR_COMMONNAME "cn"
+#define SYLDAP_ATTR_GIVENNAME "givenName"
+#define SYLDAP_ATTR_SURNAME "sn"
+#define SYLDAP_ATTR_EMAIL "mail"
+#define SYLDAP_ATTR_UID "uid"
+
+typedef struct _SyldapServer SyldapServer;
+struct _SyldapServer {
+ gchar *name;
+ gchar *hostName;
+ gint port;
+ gchar *baseDN;
+ gchar *bindDN;
+ gchar *bindPass;
+ gchar *searchCriteria;
+ gchar *searchValue;
+ gint entriesRead;
+ gint maxEntries;
+ gint timeOut;
+ gboolean newSearch;
+ AddressCache *addressCache;
+ /* ItemFolder *rootFolder; */
+ gboolean accessFlag;
+ gint retVal;
+ pthread_t *thread;
+ gboolean busyFlag;
+ void (*callBack)( void * );
+ guint idleId;
+};
+
+/* Function prototypes */
+SyldapServer *syldap_create ( void );
+void syldap_set_name ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_host ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_port ( SyldapServer* ldapServer, const gint value );
+void syldap_set_base_dn ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_bind_dn ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_bind_password ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_search_criteria ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_search_value ( SyldapServer* ldapServer, const gchar *value );
+void syldap_set_max_entries ( SyldapServer* ldapServer, const gint value );
+void syldap_set_timeout ( SyldapServer* ldapServer, const gint value );
+void syldap_set_callback ( SyldapServer *ldapServer, void *func );
+void syldap_set_accessed ( SyldapServer *ldapServer, const gboolean value );
+void syldap_force_refresh ( SyldapServer *ldapServer );
+void syldap_free ( SyldapServer *ldapServer );
+gint syldap_get_status ( SyldapServer *ldapServer );
+gboolean syldap_get_accessed ( SyldapServer *ldapServer );
+gchar *syldap_get_name ( SyldapServer *ldapServer );
+
+void syldap_print_data ( SyldapServer *ldapServer, FILE *stream );
+gboolean syldap_check_search ( SyldapServer *ldapServer );
+gint syldap_read_data ( SyldapServer *ldapServer );
+gint syldap_read_data_th ( SyldapServer *ldapServer );
+void syldap_cancel_read ( SyldapServer *ldapServer );
+
+/* GList *syldap_get_address_list ( const SyldapServer *ldapServer ); */
+ItemFolder *syldap_get_root_folder ( SyldapServer *ldapServer );
+GList *syldap_get_list_person ( SyldapServer *ldapServer );
+GList *syldap_get_list_folder ( SyldapServer *ldapServer );
+
+GList *syldap_read_basedn_s ( const gchar *host, const gint port, const gchar *bindDN,
+ const gchar *bindPW, const gint tov );
+GList *syldap_read_basedn ( SyldapServer *ldapServer );
+gboolean syldap_test_connect_s ( const gchar *host, const gint port );
+gboolean syldap_test_connect ( SyldapServer *ldapServer );
+/* gboolean syldap_test_ldap_lib ( void ); */
+
+#endif /* USE_LDAP */
+
+#endif /* __SYLDAP_H__ */
diff --git a/src/sylpheed-marshal.list b/src/sylpheed-marshal.list
new file mode 100644
index 00000000..7e722df0
--- /dev/null
+++ b/src/sylpheed-marshal.list
@@ -0,0 +1,2 @@
+NONE:POINTER
+NONE:INT,POINTER
diff --git a/src/template.c b/src/template.c
new file mode 100644
index 00000000..ddfb2b5f
--- /dev/null
+++ b/src/template.c
@@ -0,0 +1,219 @@
+/*
+ * Sylpheed templates subsystem
+ * Copyright (C) 2001 Alexander Barinov
+ * Copyright (C) 2001-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <ctype.h>
+
+#include "intl.h"
+#include "main.h"
+#include "template.h"
+#include "utils.h"
+
+static GSList *template_list;
+
+static Template *template_load(gchar *filename)
+{
+ Template *tmpl;
+ FILE *fp;
+ gchar buf[BUFFSIZE];
+ gint bytes_read;
+
+ if ((fp = fopen(filename, "rb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ return NULL;
+ }
+
+ tmpl = g_new(Template, 1);
+ tmpl->name = NULL;
+ tmpl->to = NULL;
+ tmpl->cc = NULL;
+ tmpl->subject = NULL;
+ tmpl->value = NULL;
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ if (buf[0] == '\n')
+ break;
+ else if (!g_strncasecmp(buf, "Name:", 5))
+ tmpl->name = g_strdup(g_strstrip(buf + 5));
+ else if (!g_strncasecmp(buf, "To:", 3))
+ tmpl->to = g_strdup(g_strstrip(buf + 3));
+ else if (!g_strncasecmp(buf, "Cc:", 3))
+ tmpl->cc = g_strdup(g_strstrip(buf + 3));
+ else if (!g_strncasecmp(buf, "Subject:", 8))
+ tmpl->subject = g_strdup(g_strstrip(buf + 8));
+ }
+
+ if (!tmpl->name) {
+ g_warning("wrong template format\n");
+ template_free(tmpl);
+ return NULL;
+ }
+
+ if ((bytes_read = fread(buf, 1, sizeof(buf), fp)) == 0) {
+ if (ferror(fp)) {
+ FILE_OP_ERROR(filename, "fread");
+ template_free(tmpl);
+ return NULL;
+ }
+ }
+ fclose(fp);
+ tmpl->value = g_strndup(buf, bytes_read);
+
+ return tmpl;
+}
+
+void template_free(Template *tmpl)
+{
+ g_free(tmpl->name);
+ g_free(tmpl->to);
+ g_free(tmpl->cc);
+ g_free(tmpl->subject);
+ g_free(tmpl->value);
+ g_free(tmpl);
+}
+
+void template_clear_config(GSList *tmpl_list)
+{
+ GSList *cur;
+ Template *tmpl;
+
+ for (cur = tmpl_list; cur != NULL; cur = cur->next) {
+ tmpl = (Template *)cur->data;
+ template_free(tmpl);
+ }
+ g_slist_free(tmpl_list);
+}
+
+GSList *template_read_config(void)
+{
+ const gchar *path;
+ gchar *filename;
+ DIR *dp;
+ struct dirent *de;
+ struct stat s;
+ Template *tmpl;
+ GSList *tmpl_list = NULL;
+
+ path = get_template_dir();
+ debug_print("%s:%d reading templates dir %s\n",
+ __FILE__, __LINE__, path);
+
+ if (!is_dir_exist(path)) {
+ if (make_dir(path) < 0)
+ return NULL;
+ }
+
+ if ((dp = opendir(path)) == NULL) {
+ FILE_OP_ERROR(path, "opendir");
+ return NULL;
+ }
+
+ while ((de = readdir(dp)) != NULL) {
+ if (*de->d_name == '.') continue;
+
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S, de->d_name, NULL);
+
+ if (stat(filename, &s) != 0 || !S_ISREG(s.st_mode) ) {
+ debug_print("%s:%d %s is not an ordinary file\n",
+ __FILE__, __LINE__, filename);
+ continue;
+ }
+
+ tmpl = template_load(filename);
+ if (tmpl)
+ tmpl_list = g_slist_append(tmpl_list, tmpl);
+ g_free(filename);
+ }
+
+ closedir(dp);
+
+ return tmpl_list;
+}
+
+void template_write_config(GSList *tmpl_list)
+{
+ const gchar *path;
+ GSList *cur;
+ Template *tmpl;
+ FILE *fp;
+ gint tmpl_num;
+
+ debug_print("%s:%d writing templates\n", __FILE__, __LINE__);
+
+ path = get_template_dir();
+
+ if (!is_dir_exist(path)) {
+ if (is_file_exist(path)) {
+ g_warning(_("file %s already exists\n"), path);
+ return;
+ }
+ if (make_dir(path) < 0)
+ return;
+ }
+
+ remove_all_files(path);
+
+ for (cur = tmpl_list, tmpl_num = 1; cur != NULL;
+ cur = cur->next, tmpl_num++) {
+ gchar *filename;
+
+ tmpl = cur->data;
+
+ filename = g_strconcat(path, G_DIR_SEPARATOR_S,
+ itos(tmpl_num), NULL);
+
+ if ((fp = fopen(filename, "wb")) == NULL) {
+ FILE_OP_ERROR(filename, "fopen");
+ g_free(filename);
+ return;
+ }
+
+ fprintf(fp, "Name: %s\n", tmpl->name);
+ if (tmpl->to && *tmpl->to != '\0')
+ fprintf(fp, "To: %s\n", tmpl->to);
+ if (tmpl->cc && *tmpl->cc != '\0')
+ fprintf(fp, "Cc: %s\n", tmpl->cc);
+ if (tmpl->subject && *tmpl->subject != '\0')
+ fprintf(fp, "Subject: %s\n", tmpl->subject);
+ fputs("\n", fp);
+ fwrite(tmpl->value, sizeof(gchar) * strlen(tmpl->value), 1, fp);
+ fclose(fp);
+ }
+}
+
+GSList *template_get_config(void)
+{
+ if (!template_list)
+ template_list = template_read_config();
+
+ return template_list;
+}
+
+void template_set_config(GSList *tmpl_list)
+{
+ template_clear_config(template_list);
+ template_write_config(tmpl_list);
+ template_list = tmpl_list;
+}
diff --git a/src/template.h b/src/template.h
new file mode 100644
index 00000000..a03b226a
--- /dev/null
+++ b/src/template.h
@@ -0,0 +1,45 @@
+/*
+ * Sylpheed templates subsystem
+ * Copyright (C) 2001 Alexander Barinov
+ * Copyright (C) 2001-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TEMPLATE_H__
+#define __TEMPLATE_H__
+
+#include <glib.h>
+
+typedef struct _Template Template;
+
+struct _Template {
+ gchar *name;
+ gchar *to;
+ gchar *cc;
+ gchar *subject;
+ gchar *value;
+};
+
+void template_free (Template *tmpl);
+void template_clear_config (GSList *tmpl_list);
+
+GSList *template_read_config (void);
+void template_write_config (GSList *tmpl_list);
+
+GSList *template_get_config (void);
+void template_set_config (GSList *tmpl_list);
+
+#endif /* __TEMPLATE_H__ */
diff --git a/src/textview.c b/src/textview.c
new file mode 100644
index 00000000..69fe7ca8
--- /dev/null
+++ b/src/textview.c
@@ -0,0 +1,1664 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtksignal.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "main.h"
+#include "summaryview.h"
+#include "procheader.h"
+#include "prefs_common.h"
+#include "codeconv.h"
+#include "statusbar.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "procmime.h"
+#include "account.h"
+#include "html.h"
+#include "compose.h"
+#include "displayheader.h"
+#include "alertpanel.h"
+
+typedef struct _RemoteURI RemoteURI;
+
+struct _RemoteURI
+{
+ gchar *uri;
+
+ guint start;
+ guint end;
+};
+
+static GdkColor quote_colors[3] = {
+ {(gulong)0, (gushort)0, (gushort)0, (gushort)0},
+ {(gulong)0, (gushort)0, (gushort)0, (gushort)0},
+ {(gulong)0, (gushort)0, (gushort)0, (gushort)0}
+};
+
+static GdkColor uri_color = {
+ (gulong)0,
+ (gushort)0,
+ (gushort)0,
+ (gushort)0
+};
+
+static GdkColor emphasis_color = {
+ (gulong)0,
+ (gushort)0,
+ (gushort)0,
+ (gushort)0xcfff
+};
+
+#if 0
+static GdkColor error_color = {
+ (gulong)0,
+ (gushort)0xefff,
+ (gushort)0,
+ (gushort)0
+};
+#endif
+
+#if USE_GPGME
+static GdkColor good_sig_color = {
+ (gulong)0,
+ (gushort)0,
+ (gushort)0xbfff,
+ (gushort)0
+};
+
+static GdkColor nocheck_sig_color = {
+ (gulong)0,
+ (gushort)0,
+ (gushort)0,
+ (gushort)0xcfff
+};
+
+static GdkColor bad_sig_color = {
+ (gulong)0,
+ (gushort)0xefff,
+ (gushort)0,
+ (gushort)0
+};
+#endif
+
+#define STATUSBAR_PUSH(textview, str) \
+{ \
+ gtk_statusbar_push(GTK_STATUSBAR(textview->messageview->statusbar), \
+ textview->messageview->statusbar_cid, str); \
+}
+
+#define STATUSBAR_POP(textview) \
+{ \
+ gtk_statusbar_pop(GTK_STATUSBAR(textview->messageview->statusbar), \
+ textview->messageview->statusbar_cid); \
+}
+
+static void textview_add_part (TextView *textview,
+ MimeInfo *mimeinfo,
+ FILE *fp);
+static void textview_add_parts (TextView *textview,
+ MimeInfo *mimeinfo,
+ FILE *fp);
+static void textview_write_body (TextView *textview,
+ MimeInfo *mimeinfo,
+ FILE *fp,
+ const gchar *charset);
+static void textview_show_html (TextView *textview,
+ FILE *fp,
+ CodeConverter *conv);
+
+static void textview_write_line (TextView *textview,
+ const gchar *str,
+ CodeConverter *conv);
+static void textview_write_link (TextView *textview,
+ const gchar *str,
+ const gchar *uri,
+ CodeConverter *conv);
+
+static GPtrArray *textview_scan_header (TextView *textview,
+ FILE *fp);
+static void textview_show_header (TextView *textview,
+ GPtrArray *headers);
+
+static gboolean textview_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ TextView *textview);
+static gboolean textview_uri_button_pressed (GtkTextTag *tag,
+ GObject *obj,
+ GdkEvent *event,
+ GtkTextIter *iter,
+ TextView *textview);
+
+static void textview_smooth_scroll_do (TextView *textview,
+ gfloat old_value,
+ gfloat last_value,
+ gint step);
+static void textview_smooth_scroll_one_line (TextView *textview,
+ gboolean up);
+static gboolean textview_smooth_scroll_page (TextView *textview,
+ gboolean up);
+
+static gboolean textview_uri_security_check (TextView *textview,
+ RemoteURI *uri);
+static void textview_uri_list_remove_all (GSList *uri_list);
+
+
+TextView *textview_create(void)
+{
+ TextView *textview;
+ GtkWidget *vbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+ //PangoFontDescription *font_desc = NULL;
+
+ debug_print(_("Creating text view...\n"));
+ textview = g_new0(TextView, 1);
+
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_size_request
+ (scrolledwin, prefs_common.mainview_width, -1);
+
+ text = gtk_text_view_new();
+ gtk_widget_show(text);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD);
+ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text), 4);
+ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text), 4);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+ gtk_text_buffer_add_selection_clipboard(buffer, clipboard);
+
+#if 0
+ if (prefs_common.normalfont)
+ font_desc = pango_font_description_from_string
+ (prefs_common.normalfont);
+ if (font_desc)
+ gtk_widget_modify_font(text, font_desc);
+ pango_font_description_free(font_desc);
+#endif
+
+ gtk_widget_ref(scrolledwin);
+
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+
+ g_signal_connect(G_OBJECT(text), "key_press_event",
+ G_CALLBACK(textview_key_pressed), textview);
+
+ gtk_widget_show(scrolledwin);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
+
+ gtk_widget_show(vbox);
+
+ textview->vbox = vbox;
+ textview->scrolledwin = scrolledwin;
+ textview->text = text;
+ textview->uri_list = NULL;
+ textview->body_pos = 0;
+ //textview->cur_pos = 0;
+ textview->show_all_headers = FALSE;
+
+ return textview;
+}
+
+static void textview_create_tags(GtkTextView *text, TextView *textview)
+{
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ gtk_text_buffer_create_tag(buffer, "header",
+ "pixels-above-lines", 0,
+ "pixels-above-lines-set", TRUE,
+ "pixels-below-lines", 0,
+ "pixels-below-lines-set", TRUE,
+ //"left-margin", 0,
+ //"left-margin-set", TRUE,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "header_title",
+ "font", prefs_common.boldfont,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "quote0",
+ "foreground-gdk", &quote_colors[0],
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "quote1",
+ "foreground-gdk", &quote_colors[1],
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "quote2",
+ "foreground-gdk", &quote_colors[2],
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "emphasis",
+ "foreground-gdk", &emphasis_color,
+ NULL);
+ tag = gtk_text_buffer_create_tag(buffer, "link",
+ "foreground-gdk", &uri_color,
+ NULL);
+#if USE_GPGME
+ gtk_text_buffer_create_tag(buffer, "good-signature",
+ "foreground-gdk", &good_sig_color,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "bad-signature",
+ "foreground-gdk", &bad_sig_color,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "nocheck-signature",
+ "foreground-gdk", &nocheck_sig_color,
+ NULL);
+#endif /* USE_GPGME */
+
+ g_signal_connect(G_OBJECT(tag), "event",
+ G_CALLBACK(textview_uri_button_pressed), textview);
+}
+
+void textview_init(TextView *textview)
+{
+ //gtkut_widget_disable_theme_engine(textview->text);
+ textview_update_message_colors();
+ textview_set_all_headers(textview, FALSE);
+ textview_set_font(textview, NULL);
+ textview_create_tags(GTK_TEXT_VIEW(textview->text), textview);
+}
+
+void textview_update_message_colors(void)
+{
+ GdkColor black = {0, 0, 0, 0};
+
+ if (prefs_common.enable_color) {
+ /* grab the quote colors, converting from an int to a GdkColor */
+ gtkut_convert_int_to_gdk_color(prefs_common.quote_level1_col,
+ &quote_colors[0]);
+ gtkut_convert_int_to_gdk_color(prefs_common.quote_level2_col,
+ &quote_colors[1]);
+ gtkut_convert_int_to_gdk_color(prefs_common.quote_level3_col,
+ &quote_colors[2]);
+ gtkut_convert_int_to_gdk_color(prefs_common.uri_col,
+ &uri_color);
+ } else {
+ quote_colors[0] = quote_colors[1] = quote_colors[2] =
+ uri_color = emphasis_color = black;
+ }
+}
+
+void textview_show_message(TextView *textview, MimeInfo *mimeinfo,
+ const gchar *file)
+{
+ FILE *fp;
+ const gchar *charset = NULL;
+ GPtrArray *headers = NULL;
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return;
+ }
+
+ if (textview->messageview->forced_charset)
+ charset = textview->messageview->forced_charset;
+ else if (prefs_common.force_charset)
+ charset = prefs_common.force_charset;
+ else if (mimeinfo->charset)
+ charset = mimeinfo->charset;
+
+ textview_set_font(textview, charset);
+ textview_clear(textview);
+
+ if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) perror("fseek");
+ headers = textview_scan_header(textview, fp);
+ if (headers) {
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ textview_show_header(textview, headers);
+ procheader_header_array_destroy(headers);
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ textview->body_pos = gtk_text_iter_get_offset(&iter);
+ }
+
+ textview_add_parts(textview, mimeinfo, fp);
+
+ fclose(fp);
+
+ textview_set_position(textview, 0);
+}
+
+void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
+{
+ gchar buf[BUFFSIZE];
+ const gchar *boundary = NULL;
+ gint boundary_len = 0;
+ const gchar *charset = NULL;
+ GPtrArray *headers = NULL;
+ gboolean is_rfc822_part = FALSE;
+
+ g_return_if_fail(mimeinfo != NULL);
+ g_return_if_fail(fp != NULL);
+
+ if (mimeinfo->mime_type == MIME_MULTIPART) {
+ textview_clear(textview);
+ textview_add_parts(textview, mimeinfo, fp);
+ return;
+ }
+
+ if (mimeinfo->parent && mimeinfo->parent->boundary) {
+ boundary = mimeinfo->parent->boundary;
+ boundary_len = strlen(boundary);
+ }
+
+ if (!boundary && mimeinfo->mime_type == MIME_TEXT) {
+ if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0)
+ perror("fseek");
+ headers = textview_scan_header(textview, fp);
+ } else {
+ if (mimeinfo->mime_type == MIME_TEXT && mimeinfo->parent) {
+ glong fpos;
+ MimeInfo *parent = mimeinfo->parent;
+
+ while (parent->parent) {
+ if (parent->main &&
+ parent->main->mime_type ==
+ MIME_MESSAGE_RFC822)
+ break;
+ parent = parent->parent;
+ }
+
+ if ((fpos = ftell(fp)) < 0)
+ perror("ftell");
+ else if (fseek(fp, parent->fpos, SEEK_SET) < 0)
+ perror("fseek");
+ else {
+ headers = textview_scan_header(textview, fp);
+ if (fseek(fp, fpos, SEEK_SET) < 0)
+ perror("fseek");
+ }
+ }
+ /* skip MIME part headers */
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+ }
+
+ /* display attached RFC822 single text message */
+ if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
+ if (headers) procheader_header_array_destroy(headers);
+ if (!mimeinfo->sub) {
+ textview_clear(textview);
+ return;
+ }
+ headers = textview_scan_header(textview, fp);
+ mimeinfo = mimeinfo->sub;
+ is_rfc822_part = TRUE;
+ }
+
+ if (textview->messageview->forced_charset)
+ charset = textview->messageview->forced_charset;
+ else if (prefs_common.force_charset)
+ charset = prefs_common.force_charset;
+ else if (mimeinfo->charset)
+ charset = mimeinfo->charset;
+
+ textview_set_font(textview, charset);
+
+ textview_clear(textview);
+
+ if (headers) {
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ textview_show_header(textview, headers);
+ procheader_header_array_destroy(headers);
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ textview->body_pos = gtk_text_iter_get_offset(&iter);
+ if (!mimeinfo->main)
+ gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+ }
+
+ if (mimeinfo->mime_type == MIME_MULTIPART || is_rfc822_part)
+ textview_add_parts(textview, mimeinfo, fp);
+ else
+ textview_write_body(textview, mimeinfo, fp, charset);
+}
+
+static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar buf[BUFFSIZE];
+ const gchar *boundary = NULL;
+ gint boundary_len = 0;
+ const gchar *charset = NULL;
+ GPtrArray *headers = NULL;
+
+ g_return_if_fail(mimeinfo != NULL);
+ g_return_if_fail(fp != NULL);
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+
+ if (mimeinfo->mime_type == MIME_MULTIPART) return;
+
+ if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) {
+ perror("fseek");
+ return;
+ }
+
+ if (mimeinfo->parent && mimeinfo->parent->boundary) {
+ boundary = mimeinfo->parent->boundary;
+ boundary_len = strlen(boundary);
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+
+ if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
+ headers = textview_scan_header(textview, fp);
+ if (headers) {
+ gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+ textview_show_header(textview, headers);
+ procheader_header_array_destroy(headers);
+ }
+ return;
+ }
+
+#if USE_GPGME
+ if (mimeinfo->sigstatus)
+ g_snprintf(buf, sizeof(buf), "\n[%s (%s)]\n",
+ mimeinfo->content_type, mimeinfo->sigstatus);
+ else
+#endif
+ if (mimeinfo->filename || mimeinfo->name)
+ g_snprintf(buf, sizeof(buf), "\n[%s %s (%d bytes)]\n",
+ mimeinfo->filename ? mimeinfo->filename :
+ mimeinfo->name,
+ mimeinfo->content_type, mimeinfo->size);
+ else
+ g_snprintf(buf, sizeof(buf), "\n[%s (%d bytes)]\n",
+ mimeinfo->content_type, mimeinfo->size);
+
+#if USE_GPGME
+ if (mimeinfo->sigstatus) {
+ const gchar *color;
+ if (!strcmp(mimeinfo->sigstatus, _("Good signature")))
+ color = "good-signature";
+ else if (!strcmp(mimeinfo->sigstatus, _("BAD signature")))
+ color = "bad-signature";
+ else
+ color = "nocheck-signature";
+ gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, buf, -1,
+ color, NULL);
+ } else
+#endif
+ if (mimeinfo->mime_type != MIME_TEXT &&
+ mimeinfo->mime_type != MIME_TEXT_HTML) {
+ gtk_text_buffer_insert(buffer, &iter, buf, -1);
+ } else {
+ if (!mimeinfo->main &&
+ mimeinfo->parent &&
+ mimeinfo->parent->children != mimeinfo)
+ gtk_text_buffer_insert(buffer, &iter, buf, -1);
+ else
+ gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+ if (textview->messageview->forced_charset)
+ charset = textview->messageview->forced_charset;
+ else if (prefs_common.force_charset)
+ charset = prefs_common.force_charset;
+ else if (mimeinfo->charset)
+ charset = mimeinfo->charset;
+ textview_write_body(textview, mimeinfo, fp, charset);
+ }
+}
+
+static void textview_add_parts(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
+{
+ gint level;
+
+ g_return_if_fail(mimeinfo != NULL);
+ g_return_if_fail(fp != NULL);
+
+ level = mimeinfo->level;
+
+ for (;;) {
+ textview_add_part(textview, mimeinfo, fp);
+ if (mimeinfo->parent && mimeinfo->parent->content_type &&
+ !strcasecmp(mimeinfo->parent->content_type,
+ "multipart/alternative"))
+ mimeinfo = mimeinfo->parent->next;
+ else
+ mimeinfo = procmime_mimeinfo_next(mimeinfo);
+ if (!mimeinfo || mimeinfo->level <= level)
+ break;
+ }
+}
+
+#define TEXT_INSERT(str) \
+ gtk_text_buffer_insert(buffer, &iter, str, -1)
+
+void textview_show_error(TextView *textview)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ textview_set_font(textview, NULL);
+ textview_clear(textview);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+ TEXT_INSERT(_("This message can't be displayed.\n"));
+}
+
+void textview_show_mime_part(TextView *textview, MimeInfo *partinfo)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ if (!partinfo) return;
+
+ textview_set_font(textview, NULL);
+ textview_clear(textview);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+
+ TEXT_INSERT(_("To save this part, pop up the context menu with "));
+ TEXT_INSERT(_("right click and select `Save as...', "));
+ TEXT_INSERT(_("or press `y' key.\n\n"));
+
+ TEXT_INSERT(_("To display this part as a text message, select "));
+ TEXT_INSERT(_("`Display as text', or press `t' key.\n\n"));
+
+ TEXT_INSERT(_("To open this part with external program, select "));
+ TEXT_INSERT(_("`Open' or `Open with...', "));
+ TEXT_INSERT(_("or double-click, or click the center button, "));
+ TEXT_INSERT(_("or press `l' key."));
+}
+
+#if USE_GPGME
+void textview_show_signature_part(TextView *textview, MimeInfo *partinfo)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ if (!partinfo) return;
+
+ textview_set_font(textview, NULL);
+ textview_clear(textview);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+
+ if (partinfo->sigstatus_full == NULL) {
+ TEXT_INSERT(_("This signature has not been checked yet.\n"));
+ TEXT_INSERT(_("To check it, pop up the context menu with\n"));
+ TEXT_INSERT(_("right click and select `Check signature'.\n"));
+ } else {
+ TEXT_INSERT(partinfo->sigstatus_full);
+ }
+}
+#endif /* USE_GPGME */
+
+#undef TEXT_INSERT
+
+static void textview_write_body(TextView *textview, MimeInfo *mimeinfo,
+ FILE *fp, const gchar *charset)
+{
+ FILE *tmpfp;
+ gchar buf[BUFFSIZE];
+ CodeConverter *conv;
+
+ conv = conv_code_converter_new(charset);
+
+ tmpfp = procmime_decode_content(NULL, fp, mimeinfo);
+ if (tmpfp) {
+ if (mimeinfo->mime_type == MIME_TEXT_HTML)
+ textview_show_html(textview, tmpfp, conv);
+ else
+ while (fgets(buf, sizeof(buf), tmpfp) != NULL)
+ textview_write_line(textview, buf, conv);
+ fclose(tmpfp);
+ }
+
+ conv_code_converter_destroy(conv);
+}
+
+static void textview_show_html(TextView *textview, FILE *fp,
+ CodeConverter *conv)
+{
+ HTMLParser *parser;
+ gchar *str;
+
+ parser = html_parser_new(fp, conv);
+ g_return_if_fail(parser != NULL);
+
+ while ((str = html_parse(parser)) != NULL) {
+ if (parser->href != NULL)
+ textview_write_link(textview, str, parser->href, NULL);
+ else
+ textview_write_line(textview, str, NULL);
+ }
+ html_parser_destroy(parser);
+}
+
+/* get_uri_part() - retrieves a URI starting from scanpos.
+ Returns TRUE if succesful */
+static gboolean get_uri_part(const gchar *start, const gchar *scanpos,
+ const gchar **bp, const gchar **ep)
+{
+ const gchar *ep_;
+
+ g_return_val_if_fail(start != NULL, FALSE);
+ g_return_val_if_fail(scanpos != NULL, FALSE);
+ g_return_val_if_fail(bp != NULL, FALSE);
+ g_return_val_if_fail(ep != NULL, FALSE);
+
+ *bp = scanpos;
+
+ /* find end point of URI */
+ for (ep_ = scanpos; *ep_ != '\0'; ep_++) {
+ if (!isgraph(*(const guchar *)ep_) ||
+ !isascii(*(const guchar *)ep_) ||
+ strchr("()<>\"", *ep_))
+ break;
+ }
+
+ /* no punctuation at end of string */
+
+ /* FIXME: this stripping of trailing punctuations may bite with other URIs.
+ * should pass some URI type to this function and decide on that whether
+ * to perform punctuation stripping */
+
+#define IS_REAL_PUNCT(ch) (ispunct(ch) && ((ch) != '/'))
+
+ for (; ep_ - 1 > scanpos + 1 &&
+ IS_REAL_PUNCT(*(const guchar *)(ep_ - 1));
+ ep_--)
+ ;
+
+#undef IS_REAL_PUNCT
+
+ *ep = ep_;
+
+ return TRUE;
+}
+
+static gchar *make_uri_string(const gchar *bp, const gchar *ep)
+{
+ return g_strndup(bp, ep - bp);
+}
+
+/* valid mail address characters */
+#define IS_RFC822_CHAR(ch) \
+ (isascii(ch) && \
+ (ch) > 32 && \
+ (ch) != 127 && \
+ !isspace(ch) && \
+ !strchr("(),;<>\"", (ch)))
+
+/* alphabet and number within 7bit ASCII */
+#define IS_ASCII_ALNUM(ch) (isascii(ch) && isalnum(ch))
+
+/* get_email_part() - retrieves an email address. Returns TRUE if succesful */
+static gboolean get_email_part(const gchar *start, const gchar *scanpos,
+ const gchar **bp, const gchar **ep)
+{
+ /* more complex than the uri part because we need to scan back and forward starting from
+ * the scan position. */
+ gboolean result = FALSE;
+ const gchar *bp_;
+ const gchar *ep_;
+
+ g_return_val_if_fail(start != NULL, FALSE);
+ g_return_val_if_fail(scanpos != NULL, FALSE);
+ g_return_val_if_fail(bp != NULL, FALSE);
+ g_return_val_if_fail(ep != NULL, FALSE);
+
+ /* scan start of address */
+ for (bp_ = scanpos - 1;
+ bp_ >= start && IS_RFC822_CHAR(*(const guchar *)bp_); bp_--)
+ ;
+
+ /* TODO: should start with an alnum? */
+ bp_++;
+ for (; bp_ < scanpos && !IS_ASCII_ALNUM(*(const guchar *)bp_); bp_++)
+ ;
+
+ if (bp_ != scanpos) {
+ /* scan end of address */
+ for (ep_ = scanpos + 1;
+ *ep_ && IS_RFC822_CHAR(*(const guchar *)ep_); ep_++)
+ ;
+
+ /* TODO: really should terminate with an alnum? */
+ for (; ep_ > scanpos && !IS_ASCII_ALNUM(*(const guchar *)ep_);
+ --ep_)
+ ;
+ ep_++;
+
+ if (ep_ > scanpos + 1) {
+ *ep = ep_;
+ *bp = bp_;
+ result = TRUE;
+ }
+ }
+
+ return result;
+}
+
+#undef IS_ASCII_ALNUM
+#undef IS_RFC822_CHAR
+
+static gchar *make_email_string(const gchar *bp, const gchar *ep)
+{
+ /* returns a mailto: URI; mailto: is also used to detect the
+ * uri type later on in the button_pressed signal handler */
+ gchar *tmp;
+ gchar *result;
+
+ tmp = g_strndup(bp, ep - bp);
+ result = g_strconcat("mailto:", tmp, NULL);
+ g_free(tmp);
+
+ return result;
+}
+
+#define ADD_TXT_POS(bp_, ep_, pti_) \
+ if ((last->next = alloca(sizeof(struct txtpos))) != NULL) { \
+ last = last->next; \
+ last->bp = (bp_); last->ep = (ep_); last->pti = (pti_); \
+ last->next = NULL; \
+ } else { \
+ g_warning("alloc error scanning URIs\n"); \
+ gtk_text_buffer_insert_with_tags_by_name \
+ (buffer, &iter, linebuf, -1, fg_tag, NULL); \
+ return; \
+ }
+
+/* textview_make_clickable_parts() - colorizes clickable parts */
+static void textview_make_clickable_parts(TextView *textview,
+ const gchar *fg_tag,
+ const gchar *uri_tag,
+ const gchar *linebuf)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ /* parse table - in order of priority */
+ struct table {
+ const gchar *needle; /* token */
+
+ /* token search function */
+ gchar *(*search) (const gchar *haystack,
+ const gchar *needle);
+ /* part parsing function */
+ gboolean (*parse) (const gchar *start,
+ const gchar *scanpos,
+ const gchar **bp_,
+ const gchar **ep_);
+ /* part to URI function */
+ gchar *(*build_uri) (const gchar *bp,
+ const gchar *ep);
+ };
+
+ static struct table parser[] = {
+ {"http://", strcasestr, get_uri_part, make_uri_string},
+ {"https://", strcasestr, get_uri_part, make_uri_string},
+ {"ftp://", strcasestr, get_uri_part, make_uri_string},
+ {"www.", strcasestr, get_uri_part, make_uri_string},
+ {"mailto:", strcasestr, get_uri_part, make_uri_string},
+ {"@", strcasestr, get_email_part, make_email_string}
+ };
+ const gint PARSE_ELEMS = sizeof parser / sizeof parser[0];
+
+ gint n;
+ const gchar *walk, *bp, *ep;
+
+ struct txtpos {
+ const gchar *bp, *ep; /* text position */
+ gint pti; /* index in parse table */
+ struct txtpos *next; /* next */
+ } head = {NULL, NULL, 0, NULL}, *last = &head;
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+
+ /* parse for clickable parts, and build a list of begin and
+ end positions */
+ for (walk = linebuf, n = 0;;) {
+ gint last_index = PARSE_ELEMS;
+ gchar *scanpos = NULL;
+
+ /* FIXME: this looks phony. scanning for anything in the
+ parse table */
+ for (n = 0; n < PARSE_ELEMS; n++) {
+ gchar *tmp;
+
+ tmp = parser[n].search(walk, parser[n].needle);
+ if (tmp) {
+ if (scanpos == NULL || tmp < scanpos) {
+ scanpos = tmp;
+ last_index = n;
+ }
+ }
+ }
+
+ if (scanpos) {
+ /* check if URI can be parsed */
+ if (parser[last_index].parse(walk, scanpos, &bp, &ep)
+ && (ep - bp - 1) > strlen(parser[last_index].needle)) {
+ ADD_TXT_POS(bp, ep, last_index);
+ walk = ep;
+ } else
+ walk = scanpos +
+ strlen(parser[last_index].needle);
+ } else
+ break;
+ }
+
+ /* colorize this line */
+ if (head.next) {
+ const gchar *normal_text = linebuf;
+
+ /* insert URIs */
+ for (last = head.next; last != NULL;
+ normal_text = last->ep, last = last->next) {
+ RemoteURI *uri;
+
+ uri = g_new(RemoteURI, 1);
+ if (last->bp - normal_text > 0)
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter,
+ normal_text,
+ last->bp - normal_text,
+ fg_tag, NULL);
+ uri->uri = parser[last->pti].build_uri(last->bp,
+ last->ep);
+ uri->start = gtk_text_iter_get_offset(&iter);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, last->bp, last->ep - last->bp,
+ uri_tag, NULL);
+ uri->end = gtk_text_iter_get_offset(&iter);
+ textview->uri_list =
+ g_slist_append(textview->uri_list, uri);
+ }
+
+ if (*normal_text)
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, normal_text, -1, fg_tag, NULL);
+ } else {
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, linebuf, -1, fg_tag, NULL);
+ }
+}
+
+#undef ADD_TXT_POS
+
+static void textview_write_line(TextView *textview, const gchar *str,
+ CodeConverter *conv)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar buf[BUFFSIZE];
+ gchar *fg_color;
+ gint quotelevel = -1;
+ gchar quote_tag_str[10];
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+
+ if (!conv)
+ strncpy2(buf, str, sizeof(buf));
+ else if (conv_convert(conv, buf, sizeof(buf), str) < 0)
+ conv_localetodisp(buf, sizeof(buf), str);
+
+ strcrchomp(buf);
+ //if (prefs_common.conv_mb_alnum) conv_mb_alnum(buf);
+ fg_color = NULL;
+
+ /* change color of quotation
+ >, foo>, _> ... ok, <foo>, foo bar>, foo-> ... ng
+ Up to 3 levels of quotations are detected, and each
+ level is colored using a different color. */
+ if (prefs_common.enable_color && strchr(buf, '>')) {
+ quotelevel = get_quote_level(buf);
+
+ /* set up the correct foreground color */
+ if (quotelevel > 2) {
+ /* recycle colors */
+ if (prefs_common.recycle_quote_colors)
+ quotelevel %= 3;
+ else
+ quotelevel = 2;
+ }
+ }
+
+ if (quotelevel == -1)
+ fg_color = NULL;
+ else {
+ g_snprintf(quote_tag_str, sizeof(quote_tag_str),
+ "quote%d", quotelevel);
+ fg_color = quote_tag_str;
+ }
+
+ if (prefs_common.enable_color)
+ textview_make_clickable_parts(textview, fg_color, "link", buf);
+ else
+ textview_make_clickable_parts(textview, fg_color, NULL, buf);
+}
+
+void textview_write_link(TextView *textview, const gchar *str,
+ const gchar *uri, CodeConverter *conv)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar buf[BUFFSIZE];
+ gchar *bufp;
+ RemoteURI *r_uri;
+
+ if (*str == '\0')
+ return;
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+
+ if (!conv)
+ strncpy2(buf, str, sizeof(buf));
+ else if (conv_convert(conv, buf, sizeof(buf), str) < 0)
+ conv_localetodisp(buf, sizeof(buf), str);
+
+ strcrchomp(buf);
+
+ for (bufp = buf; isspace(*(guchar *)bufp); bufp++)
+ gtk_text_buffer_insert(buffer, &iter, bufp, 1);
+
+ r_uri = g_new(RemoteURI, 1);
+ r_uri->uri = g_strdup(uri);
+ r_uri->start = gtk_text_iter_get_offset(&iter);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, bufp, -1, "link", NULL);
+ r_uri->end = gtk_text_iter_get_offset(&iter);
+ textview->uri_list = g_slist_append(textview->uri_list, r_uri);
+}
+
+void textview_clear(TextView *textview)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_set_text(buffer, "", -1);
+
+ STATUSBAR_POP(textview);
+ textview_uri_list_remove_all(textview->uri_list);
+ textview->uri_list = NULL;
+
+ textview->body_pos = 0;
+ //textview->cur_pos = 0;
+}
+
+void textview_destroy(TextView *textview)
+{
+ textview_uri_list_remove_all(textview->uri_list);
+ textview->uri_list = NULL;
+ g_free(textview);
+}
+
+void textview_set_all_headers(TextView *textview, gboolean all_headers)
+{
+ textview->show_all_headers = all_headers;
+}
+
+void textview_set_font(TextView *textview, const gchar *codeset)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+
+ if (prefs_common.textfont) {
+ PangoFontDescription *font_desc;
+ font_desc = pango_font_description_from_string
+ (prefs_common.textfont);
+ if (font_desc) {
+ gtk_widget_modify_font(textview->text, font_desc);
+ pango_font_description_free(font_desc);
+ }
+ }
+
+ gtk_text_view_set_pixels_above_lines(text, prefs_common.line_space / 2);
+ gtk_text_view_set_pixels_below_lines(text, prefs_common.line_space / 2);
+#if 0
+ if (prefs_common.head_space)
+ gtk_text_view_set_left_margin(text, 6);
+ else
+ gtk_text_view_set_left_margin(text, 0);
+#endif
+}
+
+void textview_set_position(TextView *textview, gint pos)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
+ gtk_text_buffer_get_iter_at_offset(buffer, &iter, pos);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+}
+
+static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
+{
+ gchar buf[BUFFSIZE];
+ GPtrArray *headers, *sorted_headers;
+ GSList *disphdr_list;
+ Header *header;
+ gint i;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ if (textview->show_all_headers)
+ return procheader_get_header_array_asis(fp);
+
+ if (!prefs_common.display_header) {
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ if (buf[0] == '\r' || buf[0] == '\n') break;
+ return NULL;
+ }
+
+ headers = procheader_get_header_array_asis(fp);
+
+ sorted_headers = g_ptr_array_new();
+
+ for (disphdr_list = prefs_common.disphdr_list; disphdr_list != NULL;
+ disphdr_list = disphdr_list->next) {
+ DisplayHeaderProp *dp =
+ (DisplayHeaderProp *)disphdr_list->data;
+
+ for (i = 0; i < headers->len; i++) {
+ header = g_ptr_array_index(headers, i);
+
+ if (!g_strcasecmp(header->name, dp->name)) {
+ if (dp->hidden)
+ procheader_header_free(header);
+ else
+ g_ptr_array_add(sorted_headers, header);
+
+ g_ptr_array_remove_index(headers, i);
+ i--;
+ }
+ }
+ }
+
+ if (prefs_common.show_other_header) {
+ for (i = 0; i < headers->len; i++) {
+ header = g_ptr_array_index(headers, i);
+ g_ptr_array_add(sorted_headers, header);
+ }
+ g_ptr_array_free(headers, TRUE);
+ } else
+ procheader_header_array_destroy(headers);
+
+
+ return sorted_headers;
+}
+
+static void textview_show_header(TextView *textview, GPtrArray *headers)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ Header *header;
+ gint i;
+
+ g_return_if_fail(headers != NULL);
+
+ buffer = gtk_text_view_get_buffer(text);
+
+ for (i = 0; i < headers->len; i++) {
+ header = g_ptr_array_index(headers, i);
+ g_return_if_fail(header->name != NULL);
+
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, header->name, -1,
+ "header_title", "header", NULL);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, ":", 1,
+ "header_title", "header", NULL);
+
+ if (!g_strcasecmp(header->name, "Subject") ||
+ !g_strcasecmp(header->name, "From") ||
+ !g_strcasecmp(header->name, "To") ||
+ !g_strcasecmp(header->name, "Cc"))
+ unfold_line(header->body);
+
+#if 0
+ if (textview->text_is_mb == TRUE)
+ conv_unreadable_locale(header->body);
+#endif
+
+ if (prefs_common.enable_color &&
+ (!strncmp(header->name, "X-Mailer", 8) ||
+ !strncmp(header->name, "X-Newsreader", 12)) &&
+ strstr(header->body, "Sylpheed") != NULL) {
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, header->body, -1,
+ "header", "emphasis", NULL);
+ } else if (prefs_common.enable_color) {
+ textview_make_clickable_parts
+ (textview, "header", "link", header->body);
+ } else {
+ textview_make_clickable_parts
+ (textview, "header", NULL, header->body);
+ }
+ gtk_text_buffer_get_end_iter(buffer, &iter); //
+ gtk_text_buffer_insert_with_tags_by_name
+ (buffer, &iter, "\n", 1, "header", NULL);
+ }
+}
+
+gboolean textview_search_string(TextView *textview, const gchar *str,
+ gboolean case_sens)
+{
+#warning FIXME_GTK2
+#if 0
+ GtkSText *text = GTK_STEXT(textview->text);
+ gint pos;
+ gint len;
+
+ g_return_val_if_fail(str != NULL, FALSE);
+
+ len = get_mbs_len(str);
+ g_return_val_if_fail(len >= 0, FALSE);
+
+ pos = textview->cur_pos;
+ if (pos < textview->body_pos)
+ pos = textview->body_pos;
+
+ if ((pos = gtkut_stext_find(text, pos, str, case_sens)) != -1) {
+ gtk_editable_set_position(GTK_EDITABLE(text), pos + len);
+ gtk_editable_select_region(GTK_EDITABLE(text), pos, pos + len);
+ textview_set_position(textview, pos + len);
+ return TRUE;
+ }
+
+#endif
+ return FALSE;
+}
+
+gboolean textview_search_string_backward(TextView *textview, const gchar *str,
+ gboolean case_sens)
+{
+#warning FIXME_GTK2
+#if 0
+ GtkSText *text = GTK_STEXT(textview->text);
+ gint pos;
+ wchar_t *wcs;
+ gint len;
+ gint text_len;
+ gboolean found = FALSE;
+
+ g_return_val_if_fail(str != NULL, FALSE);
+
+ wcs = strdup_mbstowcs(str);
+ g_return_val_if_fail(wcs != NULL, FALSE);
+ len = wcslen(wcs);
+ pos = textview->cur_pos;
+ text_len = gtk_stext_get_length(text);
+ if (text_len - textview->body_pos < len) {
+ g_free(wcs);
+ return FALSE;
+ }
+ if (pos <= textview->body_pos || text_len - pos < len)
+ pos = text_len - len;
+
+ for (; pos >= textview->body_pos; pos--) {
+ if (gtkut_stext_match_string(text, pos, wcs, len, case_sens)
+ == TRUE) {
+ gtk_editable_set_position(GTK_EDITABLE(text), pos);
+ gtk_editable_select_region(GTK_EDITABLE(text),
+ pos, pos + len);
+ textview_set_position(textview, pos - 1);
+ found = TRUE;
+ break;
+ }
+ if (pos == textview->body_pos) break;
+ }
+
+ g_free(wcs);
+ return found;
+#endif
+ return FALSE;
+}
+
+void textview_scroll_one_line(TextView *textview, gboolean up)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkAdjustment *vadj = text->vadjustment;
+ gfloat upper;
+
+ if (prefs_common.enable_smooth_scroll) {
+ textview_smooth_scroll_one_line(textview, up);
+ return;
+ }
+
+ if (!up) {
+ upper = vadj->upper - vadj->page_size;
+ if (vadj->value < upper) {
+ vadj->value += vadj->step_increment * 4;
+ vadj->value = MIN(vadj->value, upper);
+ g_signal_emit_by_name(G_OBJECT(vadj),
+ "value_changed", 0);
+ }
+ } else {
+ if (vadj->value > 0.0) {
+ vadj->value -= vadj->step_increment * 4;
+ vadj->value = MAX(vadj->value, 0.0);
+ g_signal_emit_by_name(G_OBJECT(vadj),
+ "value_changed", 0);
+ }
+ }
+}
+
+gboolean textview_scroll_page(TextView *textview, gboolean up)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkAdjustment *vadj = text->vadjustment;
+ gfloat upper;
+ gfloat page_incr;
+
+ if (prefs_common.enable_smooth_scroll)
+ return textview_smooth_scroll_page(textview, up);
+
+ if (prefs_common.scroll_halfpage)
+ page_incr = vadj->page_increment / 2;
+ else
+ page_incr = vadj->page_increment;
+
+ if (!up) {
+ upper = vadj->upper - vadj->page_size;
+ if (vadj->value < upper) {
+ vadj->value += page_incr;
+ vadj->value = MIN(vadj->value, upper);
+ g_signal_emit_by_name(G_OBJECT(vadj),
+ "value_changed", 0);
+ } else
+ return FALSE;
+ } else {
+ if (vadj->value > 0.0) {
+ vadj->value -= page_incr;
+ vadj->value = MAX(vadj->value, 0.0);
+ g_signal_emit_by_name(G_OBJECT(vadj),
+ "value_changed", 0);
+ } else
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void textview_smooth_scroll_do(TextView *textview,
+ gfloat old_value, gfloat last_value,
+ gint step)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkAdjustment *vadj = text->vadjustment;
+ gint change_value;
+ gboolean up;
+ gint i;
+
+ if (old_value < last_value) {
+ change_value = last_value - old_value;
+ up = FALSE;
+ } else {
+ change_value = old_value - last_value;
+ up = TRUE;
+ }
+
+#warning FIXME_GTK2
+ /* gdk_key_repeat_disable(); */
+
+ for (i = step; i <= change_value; i += step) {
+ vadj->value = old_value + (up ? -i : i);
+ g_signal_emit_by_name(G_OBJECT(vadj), "value_changed", 0);
+ }
+
+ vadj->value = last_value;
+ g_signal_emit_by_name(G_OBJECT(vadj), "value_changed", 0);
+
+#warning FIXME_GTK2
+ /* gdk_key_repeat_restore(); */
+}
+
+static void textview_smooth_scroll_one_line(TextView *textview, gboolean up)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkAdjustment *vadj = text->vadjustment;
+ gfloat upper;
+ gfloat old_value;
+ gfloat last_value;
+
+ if (!up) {
+ upper = vadj->upper - vadj->page_size;
+ if (vadj->value < upper) {
+ old_value = vadj->value;
+ last_value = vadj->value + vadj->step_increment * 4;
+ last_value = MIN(last_value, upper);
+
+ textview_smooth_scroll_do(textview, old_value,
+ last_value,
+ prefs_common.scroll_step);
+ }
+ } else {
+ if (vadj->value > 0.0) {
+ old_value = vadj->value;
+ last_value = vadj->value - vadj->step_increment * 4;
+ last_value = MAX(last_value, 0.0);
+
+ textview_smooth_scroll_do(textview, old_value,
+ last_value,
+ prefs_common.scroll_step);
+ }
+ }
+}
+
+static gboolean textview_smooth_scroll_page(TextView *textview, gboolean up)
+{
+ GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+ GtkAdjustment *vadj = text->vadjustment;
+ gfloat upper;
+ gfloat page_incr;
+ gfloat old_value;
+ gfloat last_value;
+
+ if (prefs_common.scroll_halfpage)
+ page_incr = vadj->page_increment / 2;
+ else
+ page_incr = vadj->page_increment;
+
+ if (!up) {
+ upper = vadj->upper - vadj->page_size;
+ if (vadj->value < upper) {
+ old_value = vadj->value;
+ last_value = vadj->value + page_incr;
+ last_value = MIN(last_value, upper);
+
+ textview_smooth_scroll_do(textview, old_value,
+ last_value,
+ prefs_common.scroll_step);
+ } else
+ return FALSE;
+ } else {
+ if (vadj->value > 0.0) {
+ old_value = vadj->value;
+ last_value = vadj->value - page_incr;
+ last_value = MAX(last_value, 0.0);
+
+ textview_smooth_scroll_do(textview, old_value,
+ last_value,
+ prefs_common.scroll_step);
+ } else
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+#warning FIXME_GTK2
+#if 0
+#define KEY_PRESS_EVENT_STOP() \
+ if (gtk_signal_n_emissions_by_name \
+ (GTK_OBJECT(widget), "key_press_event") > 0) { \
+ gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), \
+ "key_press_event"); \
+ }
+#else
+#define KEY_PRESS_EVENT_STOP() \
+ g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event");
+#endif
+
+static gboolean textview_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ TextView *textview)
+{
+ SummaryView *summaryview = NULL;
+ MessageView *messageview = textview->messageview;
+
+ if (!event) return FALSE;
+ if (messageview->mainwin)
+ summaryview = messageview->mainwin->summaryview;
+
+ switch (event->keyval) {
+ case GDK_Tab:
+ case GDK_Home:
+ case GDK_Left:
+ case GDK_Up:
+ case GDK_Right:
+ case GDK_Down:
+ case GDK_Page_Up:
+ case GDK_Page_Down:
+ case GDK_End:
+ case GDK_Control_L:
+ case GDK_Control_R:
+ break;
+ case GDK_space:
+ if (summaryview)
+ summary_pass_key_press_event(summaryview, event);
+ else
+ textview_scroll_page
+ (textview,
+ (event->state &
+ (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
+ break;
+ case GDK_BackSpace:
+ textview_scroll_page(textview, TRUE);
+ break;
+ case GDK_Return:
+ textview_scroll_one_line
+ (textview, (event->state &
+ (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
+ break;
+ case GDK_Delete:
+ if (summaryview)
+ summary_pass_key_press_event(summaryview, event);
+ break;
+ case GDK_n:
+ case GDK_N:
+ case GDK_p:
+ case GDK_P:
+ case GDK_y:
+ case GDK_t:
+ case GDK_l:
+ if (messageview->type == MVIEW_MIME &&
+ textview == messageview->mimeview->textview) {
+ KEY_PRESS_EVENT_STOP();
+ mimeview_pass_key_press_event(messageview->mimeview,
+ event);
+ break;
+ }
+ /* fall through */
+ default:
+ if (summaryview &&
+ event->window != messageview->mainwin->window->window) {
+ GdkEventKey tmpev = *event;
+
+ tmpev.window = messageview->mainwin->window->window;
+ KEY_PRESS_EVENT_STOP();
+ gtk_widget_event(messageview->mainwin->window,
+ (GdkEvent *)&tmpev);
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+static gboolean textview_uri_button_pressed(GtkTextTag *tag, GObject *obj,
+ GdkEvent *event, GtkTextIter *iter,
+ TextView *textview)
+{
+ GtkTextIter start_iter, end_iter;
+ gint start_pos, end_pos;
+ GdkEventButton *bevent;
+ RemoteURI *uri = NULL;
+ GSList *cur;
+ gchar *trimmed_uri;
+
+ if (!event)
+ return FALSE;
+
+ if (event->type != GDK_BUTTON_PRESS && event->type != GDK_2BUTTON_PRESS)
+ return FALSE;
+
+ start_iter = *iter;
+
+ if (!gtk_text_iter_backward_to_tag_toggle(&start_iter, tag)) {
+ debug_print("Can't find start point.");
+ return FALSE;
+ }
+ start_pos = gtk_text_iter_get_offset(&start_iter);
+
+ end_iter = *iter;
+ if (!gtk_text_iter_forward_to_tag_toggle(&end_iter, tag)) {
+ debug_print("Can't find end");
+ return FALSE;
+ }
+ end_pos = gtk_text_iter_get_offset(&end_iter);
+
+ for (cur = textview->uri_list; cur != NULL; cur = cur->next) {
+ RemoteURI *uri_ = (RemoteURI *)cur->data;
+
+ if (start_pos == uri_->start && end_pos == uri_->end) {
+ uri = uri_;
+ break;
+ }
+ }
+
+ STATUSBAR_POP(textview);
+
+ if (!uri)
+ return FALSE;
+
+ trimmed_uri = trim_string(uri->uri, 60);
+ STATUSBAR_PUSH(textview, trimmed_uri);
+ g_free(trimmed_uri);
+
+ bevent = (GdkEventButton *)event;
+ if ((event->type == GDK_2BUTTON_PRESS && bevent->button == 1) ||
+ bevent->button == 2) {
+ if (!g_strncasecmp(uri->uri, "mailto:", 7)) {
+ PrefsAccount *ac = NULL;
+ MsgInfo *msginfo = textview->messageview->msginfo;
+
+ if (msginfo && msginfo->folder)
+ ac = account_find_from_item(msginfo->folder);
+ if (ac && ac->protocol == A_NNTP)
+ ac = NULL;
+ compose_new(ac, msginfo->folder, uri->uri + 7, NULL);
+ } else if (textview_uri_security_check(textview, uri) == TRUE) {
+ open_uri(uri->uri, prefs_common.uri_cmd);
+ return TRUE; //
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean textview_uri_security_check(TextView *textview, RemoteURI *uri)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start_iter, end_iter;
+ gchar *visible_str;
+ gboolean retval = TRUE;
+
+ if (is_uri_string(uri->uri) == FALSE)
+ return TRUE;
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
+ gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, uri->start);
+ gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, uri->end);
+ visible_str = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter,
+ FALSE);
+ if (visible_str == NULL)
+ return TRUE;
+
+ if (strcmp(visible_str, uri->uri) != 0 && is_uri_string(visible_str)) {
+ gchar *uri_path;
+ gchar *visible_uri_path;
+
+ uri_path = get_uri_path(uri->uri);
+ visible_uri_path = get_uri_path(visible_str);
+ if (strcmp(uri_path, visible_uri_path) != 0)
+ retval = FALSE;
+ }
+
+ if (retval == FALSE) {
+ gchar *msg;
+ AlertValue aval;
+
+ msg = g_strdup_printf(_("The real URL (%s) is different from\n"
+ "the apparent URL (%s).\n"
+ "Open it anyway?"),
+ uri->uri, visible_str);
+ aval = alertpanel(_("Warning"), msg, _("Yes"), _("No"), NULL);
+ g_free(msg);
+ if (aval == G_ALERTDEFAULT)
+ retval = TRUE;
+ }
+
+ g_free(visible_str);
+
+ return retval;
+}
+
+static void textview_uri_list_remove_all(GSList *uri_list)
+{
+ GSList *cur;
+
+ for (cur = uri_list; cur != NULL; cur = cur->next) {
+ if (cur->data) {
+ g_free(((RemoteURI *)cur->data)->uri);
+ g_free(cur->data);
+ }
+ }
+
+ g_slist_free(uri_list);
+}
diff --git a/src/textview.h b/src/textview.h
new file mode 100644
index 00000000..1fcc3ce4
--- /dev/null
+++ b/src/textview.h
@@ -0,0 +1,90 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TEXTVIEW_H__
+#define __TEXTVIEW_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtkwidget.h>
+
+typedef struct _TextView TextView;
+
+#include "messageview.h"
+#include "procmime.h"
+
+struct _TextView
+{
+ GtkWidget *vbox;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+
+ GtkWidget *popup_menu;
+ GtkItemFactory *popup_factory;
+
+ GSList *uri_list;
+ gint body_pos;
+ //gint cur_pos;
+
+ gboolean show_all_headers;
+
+ MessageView *messageview;
+};
+
+TextView *textview_create (void);
+void textview_init (TextView *textview);
+void textview_show_message (TextView *textview,
+ MimeInfo *mimeinfo,
+ const gchar *file);
+void textview_show_part (TextView *textview,
+ MimeInfo *mimeinfo,
+ FILE *fp);
+void textview_show_error (TextView *textview);
+void textview_show_mime_part (TextView *textview,
+ MimeInfo *partinfo);
+#if USE_GPGME
+void textview_show_signature_part(TextView *textview,
+ MimeInfo *partinfo);
+#endif
+void textview_clear (TextView *textview);
+void textview_destroy (TextView *textview);
+void textview_set_all_headers (TextView *textview,
+ gboolean all_headers);
+void textview_set_font (TextView *textview,
+ const gchar *codeset);
+void textview_set_position (TextView *textview,
+ gint pos);
+void textview_scroll_one_line (TextView *textview,
+ gboolean up);
+gboolean textview_scroll_page (TextView *textview,
+ gboolean up);
+
+void textview_update_message_colors (void);
+
+gboolean textview_search_string (TextView *textview,
+ const gchar *str,
+ gboolean case_sens);
+gboolean textview_search_string_backward (TextView *textview,
+ const gchar *str,
+ gboolean case_sens);
+
+#endif /* __TEXTVIEW_H__ */
diff --git a/src/undo.c b/src/undo.c
new file mode 100644
index 00000000..3828aebb
--- /dev/null
+++ b/src/undo.c
@@ -0,0 +1,646 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* code ported from gedit */
+/* This is for my patient girlfirend Regina */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtktextview.h>
+
+#include <string.h> /* for strlen */
+#include <stdlib.h> /* for mbstowcs */
+
+#include "undo.h"
+#include "utils.h"
+#include "prefs_common.h"
+
+typedef struct _UndoInfo UndoInfo;
+
+struct _UndoInfo
+{
+ UndoAction action;
+ gchar *text;
+ gint start_pos;
+ gint end_pos;
+ gfloat window_position;
+ gint mergeable;
+};
+
+static void undo_free_list (GList **list_pointer);
+static void undo_check_size (UndoMain *undostruct);
+static gint undo_merge (GList *list,
+ guint start_pos,
+ guint end_pos,
+ gint action,
+ const guchar *text);
+static void undo_add (const gchar *text,
+ gint start_pos,
+ gint end_pos,
+ UndoAction action,
+ UndoMain *undostruct);
+static gint undo_get_selection (GtkTextView *textview,
+ guint *start,
+ guint *end);
+static void undo_insert_text_cb (GtkTextBuffer *textbuf,
+ GtkTextIter *iter,
+ gchar *new_text,
+ gint new_text_length,
+ UndoMain *undostruct);
+static void undo_delete_text_cb (GtkTextBuffer *textbuf,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ UndoMain *undostruct);
+
+static void undo_paste_clipboard_cb (GtkTextView *textview,
+ UndoMain *undostruct);
+
+void undo_undo (UndoMain *undostruct);
+void undo_redo (UndoMain *undostruct);
+
+
+UndoMain *undo_init(GtkWidget *text)
+{
+ UndoMain *undostruct;
+ GtkTextView *textview = GTK_TEXT_VIEW(text);
+ GtkTextBuffer *textbuf;
+
+ g_return_val_if_fail(text != NULL, NULL);
+
+ textbuf = gtk_text_view_get_buffer(textview);
+
+ undostruct = g_new(UndoMain, 1);
+ undostruct->textview = textview;
+ undostruct->undo = NULL;
+ undostruct->redo = NULL;
+ undostruct->paste = 0;
+ undostruct->undo_state = FALSE;
+ undostruct->redo_state = FALSE;
+
+ g_signal_connect(G_OBJECT(text), "insert-text",
+ G_CALLBACK(undo_insert_text_cb), undostruct);
+ g_signal_connect(G_OBJECT(text), "delete-text",
+ G_CALLBACK(undo_delete_text_cb), undostruct);
+ g_signal_connect(G_OBJECT(text), "paste-clipboard",
+ G_CALLBACK(undo_paste_clipboard_cb), undostruct);
+
+ return undostruct;
+}
+
+void undo_destroy (UndoMain *undostruct)
+{
+ undo_free_list(&undostruct->undo);
+ undo_free_list(&undostruct->redo);
+ g_free(undostruct);
+}
+
+static UndoInfo *undo_object_new(gchar *text, gint start_pos, gint end_pos,
+ UndoAction action, gfloat window_position)
+{
+ UndoInfo *undoinfo;
+ undoinfo = g_new (UndoInfo, 1);
+ undoinfo->text = text;
+ undoinfo->start_pos = start_pos;
+ undoinfo->end_pos = end_pos;
+ undoinfo->action = action;
+ undoinfo->window_position = window_position;
+ return undoinfo;
+}
+
+static void undo_object_free(UndoInfo *undo)
+{
+ g_free (undo->text);
+ g_free (undo);
+}
+
+/**
+ * undo_free_list:
+ * @list_pointer: list to be freed
+ *
+ * frees and undo structure list
+ **/
+static void undo_free_list(GList **list_pointer)
+{
+ UndoInfo *undo;
+ GList *cur, *list = *list_pointer;
+
+ if (list == NULL) return;
+
+ for (cur = list; cur != NULL; cur = cur->next) {
+ undo = (UndoInfo *)cur->data;
+ undo_object_free(undo);
+ }
+
+ g_list_free(list);
+ *list_pointer = NULL;
+}
+
+void undo_set_change_state_func(UndoMain *undostruct, UndoChangeStateFunc func,
+ gpointer data)
+{
+ g_return_if_fail(undostruct != NULL);
+
+ undostruct->change_state_func = func;
+ undostruct->change_state_data = data;
+}
+
+/**
+ * undo_check_size:
+ * @compose: document to check
+ *
+ * Checks that the size of compose->undo does not excede settings->undo_levels and
+ * frees any undo level above sett->undo_level.
+ *
+ **/
+static void undo_check_size(UndoMain *undostruct)
+{
+ UndoInfo *last_undo;
+ guint length;
+
+ if (prefs_common.undolevels < 1) return;
+
+ /* No need to check for the redo list size since the undo
+ list gets freed on any call to compose_undo_add */
+ length = g_list_length(undostruct->undo);
+ if (length >= prefs_common.undolevels && prefs_common.undolevels > 0) {
+ last_undo = (UndoInfo *)g_list_last(undostruct->undo)->data;
+ undostruct->undo = g_list_remove(undostruct->undo, last_undo);
+ undo_object_free(last_undo);
+ }
+}
+
+/**
+ * undo_merge:
+ * @last_undo:
+ * @start_pos:
+ * @end_pos:
+ * @action:
+ *
+ * This function tries to merge the undo object at the top of
+ * the stack with a new set of data. So when we undo for example
+ * typing, we can undo the whole word and not each letter by itself
+ *
+ * Return Value: TRUE is merge was sucessful, FALSE otherwise
+ **/
+static gint undo_merge(GList *list, guint start_pos, guint end_pos,
+ gint action, const guchar *text)
+{
+ guchar *temp_string;
+ UndoInfo *last_undo;
+
+ /* This are the cases in which we will NOT merge :
+ 1. if (last_undo->mergeable == FALSE)
+ [mergeable = FALSE when the size of the undo data was not 1.
+ or if the data was size = 1 but = '\n' or if the undo object
+ has been "undone" already ]
+ 2. The size of text is not 1
+ 3. If the new merging data is a '\n'
+ 4. If the last char of the undo_last data is a space/tab
+ and the new char is not a space/tab ( so that we undo
+ words and not chars )
+ 5. If the type (action) of undo is different from the last one
+ Chema */
+
+ if (list == NULL) return FALSE;
+
+ last_undo = list->data;
+
+ if (!last_undo->mergeable) return FALSE;
+
+ if (end_pos - start_pos != 1 ||
+ text[0] == '\n' ||
+ action != last_undo->action ||
+ action == UNDO_ACTION_REPLACE_INSERT ||
+ action == UNDO_ACTION_REPLACE_DELETE) {
+ last_undo->mergeable = FALSE;
+ return FALSE;
+ }
+
+ if (action == UNDO_ACTION_DELETE) {
+ gboolean checkit = TRUE;
+
+ if (last_undo->start_pos != end_pos &&
+ last_undo->start_pos != start_pos) {
+ last_undo->mergeable = FALSE;
+ return FALSE;
+ } else if (last_undo->start_pos == start_pos) {
+ /* Deleted with the delete key */
+ if (text[0] != ' ' && text[0] != '\t' &&
+ (last_undo->text[last_undo->end_pos - last_undo->start_pos - 1] == ' ' ||
+ last_undo->text[last_undo->end_pos - last_undo->start_pos - 1] == '\t'))
+ checkit = FALSE;
+
+ temp_string = g_strdup_printf("%s%s", last_undo->text, text);
+ last_undo->end_pos++;
+ g_free(last_undo->text);
+ last_undo->text = temp_string;
+ } else {
+ /* Deleted with the backspace key */
+ if (text[0] != ' ' && text[0] != '\t' &&
+ (last_undo->text[0] == ' ' ||
+ last_undo->text[0] == '\t'))
+ checkit = FALSE;
+
+ temp_string = g_strdup_printf("%s%s", text, last_undo->text);
+ last_undo->start_pos = start_pos;
+ g_free(last_undo->text);
+ last_undo->text = temp_string;
+ }
+
+ if (!checkit) {
+ last_undo->mergeable = FALSE;
+ return FALSE;
+ }
+ } else if (action == UNDO_ACTION_INSERT) {
+ if (last_undo->end_pos != start_pos) {
+ last_undo->mergeable = FALSE;
+ return FALSE;
+ } else {
+ temp_string = g_strdup_printf("%s%s", last_undo->text, text);
+ g_free(last_undo->text);
+ last_undo->end_pos = end_pos;
+ last_undo->text = temp_string;
+ }
+ } else
+ debug_print("Unknown action [%i] inside undo merge encountered", action);
+
+ return TRUE;
+}
+
+/**
+ * compose_undo_add:
+ * @text:
+ * @start_pos:
+ * @end_pos:
+ * @action: either UNDO_ACTION_INSERT or UNDO_ACTION_DELETE
+ * @compose:
+ * @view: The view so that we save the scroll bar position.
+ *
+ * Adds text to the undo stack. It also performs test to limit the number
+ * of undo levels and deltes the redo list
+ **/
+
+static void undo_add(const gchar *text,
+ gint start_pos, gint end_pos,
+ UndoAction action, UndoMain *undostruct)
+{
+ UndoInfo *undoinfo;
+ GtkAdjustment *vadj;
+
+ g_return_if_fail(text != NULL);
+ g_return_if_fail(end_pos >= start_pos);
+
+ undo_free_list(&undostruct->redo);
+
+ /* Set the redo sensitivity */
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE,
+ undostruct->change_state_data);
+
+ if (undostruct->paste != 0) {
+ if (action == UNDO_ACTION_INSERT)
+ action = UNDO_ACTION_REPLACE_INSERT;
+ else
+ action = UNDO_ACTION_REPLACE_DELETE;
+ undostruct->paste = undostruct->paste + 1;
+ if (undostruct->paste == 3)
+ undostruct->paste = 0;
+ }
+
+ if (undo_merge(undostruct->undo, start_pos, end_pos, action, text))
+ return;
+
+ undo_check_size(undostruct);
+
+ vadj = GTK_ADJUSTMENT(GTK_TEXT_VIEW(undostruct->textview)->vadjustment);
+ undoinfo = undo_object_new(g_strdup(text), start_pos, end_pos, action,
+ vadj->value);
+
+ if (end_pos - start_pos != 1 || text[0] == '\n')
+ undoinfo->mergeable = FALSE;
+ else
+ undoinfo->mergeable = TRUE;
+
+ undostruct->undo = g_list_prepend(undostruct->undo, undoinfo);
+
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED,
+ undostruct->change_state_data);
+}
+
+/**
+ * undo_undo:
+ * @w: not used
+ * @data: not used
+ *
+ * Executes an undo request on the current document
+ **/
+void undo_undo(UndoMain *undostruct)
+{
+ UndoInfo *undoinfo;
+ GtkTextView *textview;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter, start_iter, end_iter;
+ GtkTextMark *mark;
+
+ g_return_if_fail(undostruct != NULL);
+
+ if (undostruct->undo == NULL) return;
+
+ /* The undo data we need is always at the top op the
+ stack. So, therefore, the first one */
+ undoinfo = (UndoInfo *)undostruct->undo->data;
+ g_return_if_fail(undoinfo != NULL);
+ undoinfo->mergeable = FALSE;
+ undostruct->redo = g_list_prepend(undostruct->redo, undoinfo);
+ undostruct->undo = g_list_remove(undostruct->undo, undoinfo);
+
+ textview = undostruct->textview;
+ buffer = gtk_text_view_get_buffer(textview);
+
+ undo_block(undostruct);
+
+ /* Check if there is a selection active */
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+
+ /* Move the view (scrollbars) to the correct position */
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(textview->vadjustment),
+ undoinfo->window_position);
+
+ switch (undoinfo->action) {
+ case UNDO_ACTION_DELETE:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &iter, undoinfo->start_pos);
+ gtk_text_buffer_insert(buffer, &iter, undoinfo->text, -1);
+ debug_print("UNDO_ACTION_DELETE %s\n", undoinfo->text);
+ break;
+ case UNDO_ACTION_INSERT:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &start_iter, undoinfo->start_pos);
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &end_iter, undoinfo->end_pos);
+ gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
+ debug_print("UNDO_ACTION_INSERT %d\n", undoinfo->end_pos-undoinfo->start_pos);
+ break;
+ case UNDO_ACTION_REPLACE_INSERT:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &start_iter, undoinfo->start_pos);
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &end_iter, undoinfo->end_pos);
+ debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text);
+ /* "pull" another data structure from the list */
+ undoinfo = (UndoInfo *)undostruct->undo->data;
+ g_return_if_fail(undoinfo != NULL);
+ undostruct->redo = g_list_prepend(undostruct->redo, undoinfo);
+ undostruct->undo = g_list_remove(undostruct->undo, undoinfo);
+ g_return_if_fail(undoinfo->action == UNDO_ACTION_REPLACE_DELETE);
+ gtk_text_buffer_insert(buffer, &start_iter, undoinfo->text, -1);
+ debug_print("UNDO_ACTION_REPLACE %s\n", undoinfo->text);
+ break;
+ case UNDO_ACTION_REPLACE_DELETE:
+ g_warning("This should not happen. UNDO_REPLACE_DELETE");
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_UNCHANGED, UNDO_STATE_TRUE,
+ undostruct->change_state_data);
+
+ if (undostruct->undo == NULL)
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_FALSE,
+ UNDO_STATE_UNCHANGED,
+ undostruct->change_state_data);
+
+ undo_unblock(undostruct);
+}
+
+/**
+ * undo_redo:
+ * @w: not used
+ * @data: not used
+ *
+ * executes a redo request on the current document
+ **/
+void undo_redo(UndoMain *undostruct)
+{
+ UndoInfo *redoinfo;
+ GtkTextView *textview;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter, start_iter, end_iter;
+ GtkTextMark *mark;
+
+ g_return_if_fail(undostruct != NULL);
+
+ if (undostruct->redo == NULL) return;
+
+ redoinfo = (UndoInfo *)undostruct->redo->data;
+ g_return_if_fail (redoinfo != NULL);
+ undostruct->undo = g_list_prepend(undostruct->undo, redoinfo);
+ undostruct->redo = g_list_remove(undostruct->redo, redoinfo);
+
+ textview = undostruct->textview;
+ buffer = gtk_text_view_get_buffer(textview);
+
+ undo_block(undostruct);
+
+ /* Check if there is a selection active */
+ mark = gtk_text_buffer_get_insert(buffer);
+ gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
+ gtk_text_buffer_place_cursor(buffer, &iter);
+
+ /* Move the view to the right position. */
+ gtk_adjustment_set_value(textview->vadjustment,
+ redoinfo->window_position);
+
+ switch (redoinfo->action) {
+ case UNDO_ACTION_INSERT:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &iter, redoinfo->start_pos);
+ gtk_text_buffer_insert(buffer, &iter, redoinfo->text, -1);
+ debug_print("UNDO_ACTION_DELETE %s\n",redoinfo->text);
+ break;
+ case UNDO_ACTION_DELETE:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &start_iter, redoinfo->start_pos);
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &end_iter, redoinfo->end_pos);
+ gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
+ debug_print("UNDO_ACTION_INSERT %d\n",
+ redoinfo->end_pos-redoinfo->start_pos);
+ break;
+ case UNDO_ACTION_REPLACE_DELETE:
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &start_iter, redoinfo->start_pos);
+ gtk_text_buffer_get_iter_at_offset
+ (buffer, &end_iter, redoinfo->end_pos);
+ gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
+ debug_print("UNDO_ACTION_REPLACE %s\n", redoinfo->text);
+ /* "pull" another data structure from the list */
+ redoinfo = (UndoInfo *)undostruct->redo->data;
+ g_return_if_fail(redoinfo != NULL);
+ undostruct->undo = g_list_prepend(undostruct->undo, redoinfo);
+ undostruct->redo = g_list_remove(undostruct->redo, redoinfo);
+ g_return_if_fail(redoinfo->action == UNDO_ACTION_REPLACE_INSERT);
+ gtk_text_buffer_insert(buffer, &start_iter, redoinfo->text, -1);
+ break;
+ case UNDO_ACTION_REPLACE_INSERT:
+ g_warning("This should not happen. Redo: UNDO_REPLACE_INSERT");
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED,
+ undostruct->change_state_data);
+
+ if (undostruct->redo == NULL)
+ undostruct->change_state_func(undostruct,
+ UNDO_STATE_UNCHANGED,
+ UNDO_STATE_FALSE,
+ undostruct->change_state_data);
+
+ undo_unblock(undostruct);
+}
+
+void undo_block(UndoMain *undostruct)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_if_fail(GTK_IS_TEXT_VIEW(undostruct->textview));
+
+ buffer = gtk_text_view_get_buffer(undostruct->textview);
+ g_signal_handlers_block_by_func
+ (buffer, undo_insert_text_cb, undostruct);
+ g_signal_handlers_block_by_func
+ (buffer, undo_delete_text_cb, undostruct);
+ g_signal_handlers_block_by_func
+ (buffer, undo_paste_clipboard_cb, undostruct);
+}
+
+void undo_unblock(UndoMain *undostruct)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_if_fail(GTK_IS_TEXT_VIEW(undostruct->textview));
+
+ buffer = gtk_text_view_get_buffer(undostruct->textview);
+ g_signal_handlers_unblock_by_func
+ (buffer, undo_insert_text_cb, undostruct);
+ g_signal_handlers_unblock_by_func
+ (buffer, undo_delete_text_cb, undostruct);
+ g_signal_handlers_unblock_by_func
+ (buffer, undo_paste_clipboard_cb, undostruct);
+}
+
+void undo_insert_text_cb(GtkTextBuffer *textbuf, GtkTextIter *iter,
+ gchar *new_text, gint new_text_length,
+ UndoMain *undostruct)
+{
+ gchar *text_to_insert;
+ gint pos;
+
+ if (prefs_common.undolevels <= 0) return;
+
+ pos = gtk_text_iter_get_offset(iter);
+
+ Xstrndup_a(text_to_insert, new_text, new_text_length, return);
+ undo_add(text_to_insert, pos, pos + g_utf8_strlen(text_to_insert, -1),
+ UNDO_ACTION_INSERT, undostruct);
+}
+
+void undo_delete_text_cb(GtkTextBuffer *textbuf, GtkTextIter *start,
+ GtkTextIter *end, UndoMain *undostruct)
+{
+ gchar *text_to_delete;
+ gint start_pos, end_pos;
+
+ if (prefs_common.undolevels <= 0) return;
+
+ text_to_delete = gtk_text_buffer_get_text(textbuf, start, end, FALSE);
+ if (!text_to_delete || !*text_to_delete) return;
+
+ start_pos = gtk_text_iter_get_offset(start);
+ end_pos = gtk_text_iter_get_offset(end);
+
+ undo_add(text_to_delete, start_pos, end_pos, UNDO_ACTION_DELETE,
+ undostruct);
+ g_free(text_to_delete);
+}
+
+void undo_paste_clipboard_cb(GtkTextView *textview, UndoMain *undostruct)
+{
+ debug_print("before Paste: %d\n", undostruct->paste);
+ if (prefs_common.undolevels > 0)
+ if (undo_get_selection(textview, NULL, NULL))
+ undostruct->paste = TRUE;
+ debug_print("after Paste: %d\n", undostruct->paste);
+}
+
+/**
+ * undo_get_selection:
+ * @text: Text to get the selection from
+ * @start: return here the start position of the selection
+ * @end: return here the end position of the selection
+ *
+ * Gets the current selection for View
+ *
+ * Return Value: TRUE if there is a selection active, FALSE if not
+ **/
+static gint undo_get_selection(GtkTextView *textview, guint *start, guint *end)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start_iter, end_iter;
+ guint start_pos, end_pos;
+
+ buffer = gtk_text_view_get_buffer(textview);
+ gtk_text_buffer_get_selection_bounds(buffer, &start_iter, &end_iter);
+
+ start_pos = gtk_text_iter_get_offset(&start_iter);
+ end_pos = gtk_text_iter_get_offset(&end_iter);
+
+ /* The user can select from end to start too. If so, swap it*/
+ if (end_pos < start_pos) {
+ guint swap_pos;
+ swap_pos = end_pos;
+ end_pos = start_pos;
+ start_pos = swap_pos;
+ }
+
+ if (start != NULL)
+ *start = start_pos;
+
+ if (end != NULL)
+ *end = end_pos;
+
+ if ((start_pos > 0 || end_pos > 0) && (start_pos != end_pos))
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/undo.h b/src/undo.h
new file mode 100644
index 00000000..1376d1e3
--- /dev/null
+++ b/src/undo.h
@@ -0,0 +1,80 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* code ported from gedit */
+
+#ifndef __UNDO_H__
+#define __UNDO_H__
+
+#include <glib.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkitemfactory.h>
+
+typedef enum
+{
+ UNDO_ACTION_INSERT,
+ UNDO_ACTION_DELETE,
+ UNDO_ACTION_REPLACE_INSERT,
+ UNDO_ACTION_REPLACE_DELETE,
+} UndoAction;
+
+typedef enum
+{
+ UNDO_STATE_TRUE,
+ UNDO_STATE_FALSE,
+ UNDO_STATE_UNCHANGED,
+ UNDO_STATE_REFRESH,
+} UndoState;
+
+typedef struct _UndoMain UndoMain;
+
+typedef void (*UndoChangeStateFunc) (UndoMain *undostruct,
+ gint undo_state,
+ gint redo_state,
+ gpointer data);
+
+struct _UndoMain
+{
+ GtkTextView *textview;
+
+ GList *undo;
+ GList *redo;
+
+ UndoChangeStateFunc change_state_func;
+ gpointer change_state_data;
+
+ gboolean undo_state : 1;
+ gboolean redo_state : 1;
+
+ gint paste;
+};
+
+UndoMain *undo_init (GtkWidget *text);
+void undo_destroy (UndoMain *undostruct);
+
+void undo_set_change_state_func (UndoMain *undostruct,
+ UndoChangeStateFunc func,
+ gpointer data);
+
+void undo_undo (UndoMain *undostruct);
+void undo_redo (UndoMain *undostruct);
+void undo_block (UndoMain *undostruct);
+void undo_unblock (UndoMain *undostruct);
+
+#endif /* __UNDO_H__ */
diff --git a/src/unmime.c b/src/unmime.c
new file mode 100644
index 00000000..e7dce098
--- /dev/null
+++ b/src/unmime.c
@@ -0,0 +1,133 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "codeconv.h"
+#include "base64.h"
+#include "quoted-printable.h"
+
+#define ENCODED_WORD_BEGIN "=?"
+#define ENCODED_WORD_END "?="
+
+/* Decodes headers based on RFC2045 and RFC2047. */
+
+void unmime_header(gchar *out, const gchar *str)
+{
+ const gchar *p = str;
+ gchar *outp = out;
+ const gchar *eword_begin_p, *encoding_begin_p, *text_begin_p,
+ *eword_end_p;
+ gchar charset[32];
+ gchar encoding;
+ gchar *conv_str;
+ gint len;
+
+ while (*p != '\0') {
+ gchar *decoded_text = NULL;
+
+ eword_begin_p = strstr(p, ENCODED_WORD_BEGIN);
+ if (!eword_begin_p) {
+ strcpy(outp, p);
+ return;
+ }
+ encoding_begin_p = strchr(eword_begin_p + 2, '?');
+ if (!encoding_begin_p) {
+ strcpy(outp, p);
+ return;
+ }
+ text_begin_p = strchr(encoding_begin_p + 1, '?');
+ if (!text_begin_p) {
+ strcpy(outp, p);
+ return;
+ }
+ eword_end_p = strstr(text_begin_p + 1, ENCODED_WORD_END);
+ if (!eword_end_p) {
+ strcpy(outp, p);
+ return;
+ }
+
+ if (p == str) {
+ memcpy(outp, p, eword_begin_p - p);
+ outp += eword_begin_p - p;
+ p = eword_begin_p;
+ } else {
+ /* ignore spaces between encoded words */
+ const gchar *sp;
+
+ for (sp = p; sp < eword_begin_p; sp++) {
+ if (!isspace(*(const guchar *)sp)) {
+ memcpy(outp, p, eword_begin_p - p);
+ outp += eword_begin_p - p;
+ p = eword_begin_p;
+ break;
+ }
+ }
+ }
+
+ len = MIN(sizeof(charset) - 1,
+ encoding_begin_p - (eword_begin_p + 2));
+ memcpy(charset, eword_begin_p + 2, len);
+ charset[len] = '\0';
+ encoding = toupper(*(encoding_begin_p + 1));
+
+ if (encoding == 'B') {
+ decoded_text = g_malloc
+ (eword_end_p - (text_begin_p + 1) + 1);
+ len = base64_decode(decoded_text, text_begin_p + 1,
+ eword_end_p - (text_begin_p + 1));
+ decoded_text[len] = '\0';
+ } else if (encoding == 'Q') {
+ decoded_text = g_malloc
+ (eword_end_p - (text_begin_p + 1) + 1);
+ len = qp_decode_q_encoding
+ (decoded_text, text_begin_p + 1,
+ eword_end_p - (text_begin_p + 1));
+ } else {
+ memcpy(outp, p, eword_end_p + 2 - p);
+ outp += eword_end_p + 2 - p;
+ p = eword_end_p + 2;
+ continue;
+ }
+
+ /* convert to locale encoding */
+ conv_str = conv_codeset_strdup(decoded_text, charset, NULL);
+ if (conv_str) {
+ len = strlen(conv_str);
+ memcpy(outp, conv_str, len);
+ g_free(conv_str);
+ } else {
+ len = strlen(decoded_text);
+ conv_localetodisp(outp, len + 1, decoded_text);
+ }
+ outp += len;
+
+ g_free(decoded_text);
+
+ p = eword_end_p + 2;
+ }
+
+ *outp = '\0';
+}
diff --git a/src/unmime.h b/src/unmime.h
new file mode 100644
index 00000000..8e6d8397
--- /dev/null
+++ b/src/unmime.h
@@ -0,0 +1,29 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __UNMIME_H__
+#define __UNMIME_H__
+
+#include <glib.h>
+
+void unmime_header (gchar *out,
+ const gchar *str);
+gint unmime_quoted_printable_line (gchar *str);
+
+#endif /* __UNMIME_H__ */
diff --git a/src/utils.c b/src/utils.c
new file mode 100644
index 00000000..493c9597
--- /dev/null
+++ b/src/utils.c
@@ -0,0 +1,3189 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#if (HAVE_WCTYPE_H && HAVE_WCHAR_H)
+# include <wchar.h>
+# include <wctype.h>
+#endif
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <dirent.h>
+#include <time.h>
+
+#include "intl.h"
+#include "utils.h"
+#include "socket.h"
+#include "statusbar.h"
+#include "logwindow.h"
+
+#define BUFFSIZE 8192
+
+extern gboolean debug_mode;
+
+static void hash_free_strings_func(gpointer key, gpointer value, gpointer data);
+
+void list_free_strings(GList *list)
+{
+ list = g_list_first(list);
+
+ while (list != NULL) {
+ g_free(list->data);
+ list = list->next;
+ }
+}
+
+void slist_free_strings(GSList *list)
+{
+ while (list != NULL) {
+ g_free(list->data);
+ list = list->next;
+ }
+}
+
+static void hash_free_strings_func(gpointer key, gpointer value, gpointer data)
+{
+ g_free(key);
+}
+
+void hash_free_strings(GHashTable *table)
+{
+ g_hash_table_foreach(table, hash_free_strings_func, NULL);
+}
+
+static void hash_free_value_mem_func(gpointer key, gpointer value,
+ gpointer data)
+{
+ g_free(value);
+}
+
+void hash_free_value_mem(GHashTable *table)
+{
+ g_hash_table_foreach(table, hash_free_value_mem_func, NULL);
+}
+
+gint str_case_equal(gconstpointer v, gconstpointer v2)
+{
+ return strcasecmp((const gchar *)v, (const gchar *)v2) == 0;
+}
+
+guint str_case_hash(gconstpointer key)
+{
+ const gchar *p = key;
+ guint h = *p;
+
+ if (h) {
+ h = tolower(h);
+ for (p += 1; *p != '\0'; p++)
+ h = (h << 5) - h + tolower(*p);
+ }
+
+ return h;
+}
+
+void ptr_array_free_strings(GPtrArray *array)
+{
+ gint i;
+ gchar *str;
+
+ g_return_if_fail(array != NULL);
+
+ for (i = 0; i < array->len; i++) {
+ str = g_ptr_array_index(array, i);
+ g_free(str);
+ }
+}
+
+gboolean str_find(const gchar *haystack, const gchar *needle)
+{
+ return strstr(haystack, needle) != NULL ? TRUE : FALSE;
+}
+
+gboolean str_case_find(const gchar *haystack, const gchar *needle)
+{
+ return strcasestr(haystack, needle) != NULL ? TRUE : FALSE;
+}
+
+gboolean str_find_equal(const gchar *haystack, const gchar *needle)
+{
+ return strcmp(haystack, needle) == 0;
+}
+
+gboolean str_case_find_equal(const gchar *haystack, const gchar *needle)
+{
+ return strcasecmp(haystack, needle) == 0;
+}
+
+gint to_number(const gchar *nstr)
+{
+ register const guchar *p;
+
+ if (*nstr == '\0') return -1;
+
+ for (p = nstr; *p != '\0'; p++)
+ if (!isdigit(*p)) return -1;
+
+ return atoi(nstr);
+}
+
+/* convert integer into string,
+ nstr must be not lower than 11 characters length */
+gchar *itos_buf(gchar *nstr, gint n)
+{
+ g_snprintf(nstr, 11, "%d", n);
+ return nstr;
+}
+
+/* convert integer into string */
+gchar *itos(gint n)
+{
+ static gchar nstr[11];
+
+ return itos_buf(nstr, n);
+}
+
+gchar *to_human_readable(off_t size)
+{
+ static gchar str[10];
+
+ if (size < 1024)
+ g_snprintf(str, sizeof(str), _("%dB"), (gint)size);
+ else if (size >> 10 < 1024)
+ g_snprintf(str, sizeof(str), _("%.1fKB"), (gfloat)size / (1 << 10));
+ else if (size >> 20 < 1024)
+ g_snprintf(str, sizeof(str), _("%.2fMB"), (gfloat)size / (1 << 20));
+ else
+ g_snprintf(str, sizeof(str), _("%.2fGB"), (gfloat)size / (1 << 30));
+
+ return str;
+}
+
+/* strcmp with NULL-checking */
+gint strcmp2(const gchar *s1, const gchar *s2)
+{
+ if (s1 == NULL || s2 == NULL)
+ return -1;
+ else
+ return strcmp(s1, s2);
+}
+
+/* compare paths */
+gint path_cmp(const gchar *s1, const gchar *s2)
+{
+ gint len1, len2;
+
+ if (s1 == NULL || s2 == NULL) return -1;
+ if (*s1 == '\0' || *s2 == '\0') return -1;
+
+ len1 = strlen(s1);
+ len2 = strlen(s2);
+
+ if (s1[len1 - 1] == G_DIR_SEPARATOR) len1--;
+ if (s2[len2 - 1] == G_DIR_SEPARATOR) len2--;
+
+ return strncmp(s1, s2, MAX(len1, len2));
+}
+
+/* remove trailing return code */
+gchar *strretchomp(gchar *str)
+{
+ register gchar *s;
+
+ if (!*str) return str;
+
+ for (s = str + strlen(str) - 1;
+ s >= str && (*s == '\n' || *s == '\r');
+ s--)
+ *s = '\0';
+
+ return str;
+}
+
+/* remove trailing character */
+gchar *strtailchomp(gchar *str, gchar tail_char)
+{
+ register gchar *s;
+
+ if (!*str) return str;
+ if (tail_char == '\0') return str;
+
+ for (s = str + strlen(str) - 1; s >= str && *s == tail_char; s--)
+ *s = '\0';
+
+ return str;
+}
+
+/* remove CR (carriage return) */
+gchar *strcrchomp(gchar *str)
+{
+ register gchar *s;
+
+ if (!*str) return str;
+
+ s = str + strlen(str) - 1;
+ if (*s == '\n' && s > str && *(s - 1) == '\r') {
+ *(s - 1) = '\n';
+ *s = '\0';
+ }
+
+ return str;
+}
+
+/* Similar to `strstr' but this function ignores the case of both strings. */
+gchar *strcasestr(const gchar *haystack, const gchar *needle)
+{
+ register size_t haystack_len, needle_len;
+
+ haystack_len = strlen(haystack);
+ needle_len = strlen(needle);
+
+ if (haystack_len < needle_len || needle_len == 0)
+ return NULL;
+
+ while (haystack_len >= needle_len) {
+ if (!strncasecmp(haystack, needle, needle_len))
+ return (gchar *)haystack;
+ else {
+ haystack++;
+ haystack_len--;
+ }
+ }
+
+ return NULL;
+}
+
+gpointer my_memmem(gconstpointer haystack, size_t haystacklen,
+ gconstpointer needle, size_t needlelen)
+{
+ const gchar *haystack_ = (const gchar *)haystack;
+ const gchar *needle_ = (const gchar *)needle;
+ const gchar *haystack_cur = (const gchar *)haystack;
+
+ if (needlelen == 1)
+ return memchr(haystack_, *needle_, haystacklen);
+
+ while ((haystack_cur = memchr(haystack_cur, *needle_, haystacklen))
+ != NULL) {
+ if (haystacklen - (haystack_cur - haystack_) < needlelen)
+ break;
+ if (memcmp(haystack_cur + 1, needle_ + 1, needlelen - 1) == 0)
+ return (gpointer)haystack_cur;
+ else
+ haystack_cur++;
+ }
+
+ return NULL;
+}
+
+/* Copy no more than N characters of SRC to DEST, with NULL terminating. */
+gchar *strncpy2(gchar *dest, const gchar *src, size_t n)
+{
+ register gchar c;
+ gchar *s = dest;
+
+ do {
+ if (--n == 0) {
+ *dest = '\0';
+ return s;
+ }
+ c = *src++;
+ *dest++ = c;
+ } while (c != '\0');
+
+ /* don't do zero fill */
+ return s;
+}
+
+#if !HAVE_ISWALNUM
+int iswalnum(wint_t wc)
+{
+ return isalnum((int)wc);
+}
+#endif
+
+#if !HAVE_ISWSPACE
+int iswspace(wint_t wc)
+{
+ return isspace((int)wc);
+}
+#endif
+
+#if !HAVE_TOWLOWER
+wint_t towlower(wint_t wc)
+{
+ if (wc >= L'A' && wc <= L'Z')
+ return wc + L'a' - L'A';
+
+ return wc;
+}
+#endif
+
+#if !HAVE_WCSLEN
+size_t wcslen(const wchar_t *s)
+{
+ size_t len = 0;
+
+ while (*s != L'\0')
+ ++len, ++s;
+
+ return len;
+}
+#endif
+
+#if !HAVE_WCSCPY
+/* Copy SRC to DEST. */
+wchar_t *wcscpy(wchar_t *dest, const wchar_t *src)
+{
+ wint_t c;
+ wchar_t *s = dest;
+
+ do {
+ c = *src++;
+ *dest++ = c;
+ } while (c != L'\0');
+
+ return s;
+}
+#endif
+
+#if !HAVE_WCSNCPY
+/* Copy no more than N wide-characters of SRC to DEST. */
+wchar_t *wcsncpy (wchar_t *dest, const wchar_t *src, size_t n)
+{
+ wint_t c;
+ wchar_t *s = dest;
+
+ do {
+ c = *src++;
+ *dest++ = c;
+ if (--n == 0)
+ return s;
+ } while (c != L'\0');
+
+ /* zero fill */
+ do
+ *dest++ = L'\0';
+ while (--n > 0);
+
+ return s;
+}
+#endif
+
+/* Duplicate S, returning an identical malloc'd string. */
+wchar_t *wcsdup(const wchar_t *s)
+{
+ wchar_t *new_str;
+
+ if (s) {
+ new_str = g_new(wchar_t, wcslen(s) + 1);
+ wcscpy(new_str, s);
+ } else
+ new_str = NULL;
+
+ return new_str;
+}
+
+/* Duplicate no more than N wide-characters of S,
+ returning an identical malloc'd string. */
+wchar_t *wcsndup(const wchar_t *s, size_t n)
+{
+ wchar_t *new_str;
+
+ if (s) {
+ new_str = g_new(wchar_t, n + 1);
+ wcsncpy(new_str, s, n);
+ new_str[n] = (wchar_t)0;
+ } else
+ new_str = NULL;
+
+ return new_str;
+}
+
+wchar_t *strdup_mbstowcs(const gchar *s)
+{
+ wchar_t *new_str;
+
+ if (s) {
+ new_str = g_new(wchar_t, strlen(s) + 1);
+ if (mbstowcs(new_str, s, strlen(s) + 1) < 0) {
+ g_free(new_str);
+ new_str = NULL;
+ } else
+ new_str = g_realloc(new_str,
+ sizeof(wchar_t) * (wcslen(new_str) + 1));
+ } else
+ new_str = NULL;
+
+ return new_str;
+}
+
+gchar *strdup_wcstombs(const wchar_t *s)
+{
+ gchar *new_str;
+ size_t len;
+
+ if (s) {
+ len = wcslen(s) * MB_CUR_MAX + 1;
+ new_str = g_new(gchar, len);
+ if (wcstombs(new_str, s, len) < 0) {
+ g_free(new_str);
+ new_str = NULL;
+ } else
+ new_str = g_realloc(new_str, strlen(new_str) + 1);
+ } else
+ new_str = NULL;
+
+ return new_str;
+}
+
+/* Compare S1 and S2, ignoring case. */
+gint wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n)
+{
+ wint_t c1;
+ wint_t c2;
+
+ while (n--) {
+ c1 = towlower(*s1++);
+ c2 = towlower(*s2++);
+ if (c1 != c2)
+ return c1 - c2;
+ else if (c1 == 0 && c2 == 0)
+ break;
+ }
+
+ return 0;
+}
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, ignoring case. */
+wchar_t *wcscasestr(const wchar_t *haystack, const wchar_t *needle)
+{
+ register size_t haystack_len, needle_len;
+
+ haystack_len = wcslen(haystack);
+ needle_len = wcslen(needle);
+
+ if (haystack_len < needle_len || needle_len == 0)
+ return NULL;
+
+ while (haystack_len >= needle_len) {
+ if (!wcsncasecmp(haystack, needle, needle_len))
+ return (wchar_t *)haystack;
+ else {
+ haystack++;
+ haystack_len--;
+ }
+ }
+
+ return NULL;
+}
+
+gint get_mbs_len(const gchar *s)
+{
+ const gchar *p = s;
+ gint mb_len;
+ gint len = 0;
+
+ if (!p)
+ return -1;
+
+ while (*p != '\0') {
+ mb_len = mblen(p, MB_LEN_MAX);
+ if (mb_len == 0)
+ break;
+ else if (mb_len < 0)
+ return -1;
+ else
+ len++;
+
+ p += mb_len;
+ }
+
+ return len;
+}
+
+/* Examine if next block is non-ASCII string */
+gboolean is_next_nonascii(const guchar *s)
+{
+ const guchar *p;
+
+ /* skip head space */
+ for (p = s; *p != '\0' && isspace(*p); p++)
+ ;
+ for (; *p != '\0' && !isspace(*p); p++) {
+ if (*p > 127 || *p < 32)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gint get_next_word_len(const guchar *s)
+{
+ gint len = 0;
+
+ for (; *s != '\0' && !isspace(*s); s++, len++)
+ ;
+
+ return len;
+}
+
+/* compare subjects */
+gint subject_compare(const gchar *s1, const gchar *s2)
+{
+ gchar *str1, *str2;
+
+ if (!s1 || !s2) return -1;
+ if (!*s1 || !*s2) return -1;
+
+ Xstrdup_a(str1, s1, return -1);
+ Xstrdup_a(str2, s2, return -1);
+
+ trim_subject_for_compare(str1);
+ trim_subject_for_compare(str2);
+
+ if (!*str1 || !*str2) return -1;
+
+ return strcmp(str1, str2);
+}
+
+gint subject_compare_for_sort(const gchar *s1, const gchar *s2)
+{
+ gchar *str1, *str2;
+
+ if (!s1 || !s2) return -1;
+
+ Xstrdup_a(str1, s1, return -1);
+ Xstrdup_a(str2, s2, return -1);
+
+ trim_subject_for_sort(str1);
+ trim_subject_for_sort(str2);
+
+ return strcasecmp(str1, str2);
+}
+
+void trim_subject_for_compare(gchar *str)
+{
+ guchar *srcp;
+
+ eliminate_parenthesis(str, '[', ']');
+ eliminate_parenthesis(str, '(', ')');
+ g_strstrip(str);
+
+ while (!strncasecmp(str, "Re:", 3)) {
+ srcp = str + 3;
+ while (isspace(*srcp)) srcp++;
+ memmove(str, srcp, strlen(srcp) + 1);
+ }
+}
+
+void trim_subject_for_sort(gchar *str)
+{
+ guchar *srcp;
+
+ g_strstrip(str);
+
+ while (!strncasecmp(str, "Re:", 3)) {
+ srcp = str + 3;
+ while (isspace(*srcp)) srcp++;
+ memmove(str, srcp, strlen(srcp) + 1);
+ }
+}
+
+void trim_subject(gchar *str)
+{
+ register guchar *srcp, *destp;
+ gchar op, cl;
+ gint in_brace;
+
+ destp = str;
+ while (!strncasecmp(destp, "Re:", 3)) {
+ destp += 3;
+ while (isspace(*destp)) destp++;
+ }
+
+ if (*destp == '[') {
+ op = '[';
+ cl = ']';
+ } else if (*destp == '(') {
+ op = '(';
+ cl = ')';
+ } else
+ return;
+
+ srcp = destp + 1;
+ in_brace = 1;
+ while (*srcp) {
+ if (*srcp == op)
+ in_brace++;
+ else if (*srcp == cl)
+ in_brace--;
+ srcp++;
+ if (in_brace == 0)
+ break;
+ }
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+}
+
+void eliminate_parenthesis(gchar *str, gchar op, gchar cl)
+{
+ register guchar *srcp, *destp;
+ gint in_brace;
+
+ srcp = destp = str;
+
+ while ((destp = strchr(destp, op))) {
+ in_brace = 1;
+ srcp = destp + 1;
+ while (*srcp) {
+ if (*srcp == op)
+ in_brace++;
+ else if (*srcp == cl)
+ in_brace--;
+ srcp++;
+ if (in_brace == 0)
+ break;
+ }
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+ }
+}
+
+void extract_parenthesis(gchar *str, gchar op, gchar cl)
+{
+ register gchar *srcp, *destp;
+ gint in_brace;
+
+ srcp = destp = str;
+
+ while ((srcp = strchr(destp, op))) {
+ if (destp > str)
+ *destp++ = ' ';
+ memmove(destp, srcp + 1, strlen(srcp));
+ in_brace = 1;
+ while(*destp) {
+ if (*destp == op)
+ in_brace++;
+ else if (*destp == cl)
+ in_brace--;
+
+ if (in_brace == 0)
+ break;
+
+ destp++;
+ }
+ }
+ *destp = '\0';
+}
+
+void extract_parenthesis_with_skip_quote(gchar *str, gchar quote_chr,
+ gchar op, gchar cl)
+{
+ register gchar *srcp, *destp;
+ gint in_brace;
+ gboolean in_quote = FALSE;
+
+ srcp = destp = str;
+
+ while ((srcp = strchr_with_skip_quote(destp, quote_chr, op))) {
+ if (destp > str)
+ *destp++ = ' ';
+ memmove(destp, srcp + 1, strlen(srcp));
+ in_brace = 1;
+ while(*destp) {
+ if (*destp == op && !in_quote)
+ in_brace++;
+ else if (*destp == cl && !in_quote)
+ in_brace--;
+ else if (*destp == quote_chr)
+ in_quote ^= TRUE;
+
+ if (in_brace == 0)
+ break;
+
+ destp++;
+ }
+ }
+ *destp = '\0';
+}
+
+void eliminate_quote(gchar *str, gchar quote_chr)
+{
+ register guchar *srcp, *destp;
+
+ srcp = destp = str;
+
+ while ((destp = strchr(destp, quote_chr))) {
+ if ((srcp = strchr(destp + 1, quote_chr))) {
+ srcp++;
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+ } else {
+ *destp = '\0';
+ break;
+ }
+ }
+}
+
+void extract_quote(gchar *str, gchar quote_chr)
+{
+ register gchar *p;
+
+ if ((str = strchr(str, quote_chr))) {
+ if ((p = strchr(str + 1, quote_chr))) {
+ *p = '\0';
+ memmove(str, str + 1, p - str);
+ }
+ }
+}
+
+void eliminate_address_comment(gchar *str)
+{
+ register guchar *srcp, *destp;
+ gint in_brace;
+
+ srcp = destp = str;
+
+ while ((destp = strchr(destp, '"'))) {
+ if ((srcp = strchr(destp + 1, '"'))) {
+ srcp++;
+ if (*srcp == '@') {
+ destp = srcp + 1;
+ } else {
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+ }
+ } else {
+ *destp = '\0';
+ break;
+ }
+ }
+
+ srcp = destp = str;
+
+ while ((destp = strchr_with_skip_quote(destp, '"', '('))) {
+ in_brace = 1;
+ srcp = destp + 1;
+ while (*srcp) {
+ if (*srcp == '(')
+ in_brace++;
+ else if (*srcp == ')')
+ in_brace--;
+ srcp++;
+ if (in_brace == 0)
+ break;
+ }
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+ }
+}
+
+gchar *strchr_with_skip_quote(const gchar *str, gint quote_chr, gint c)
+{
+ gboolean in_quote = FALSE;
+
+ while (*str) {
+ if (*str == c && !in_quote)
+ return (gchar *)str;
+ if (*str == quote_chr)
+ in_quote ^= TRUE;
+ str++;
+ }
+
+ return NULL;
+}
+
+gchar *strrchr_with_skip_quote(const gchar *str, gint quote_chr, gint c)
+{
+ gboolean in_quote = FALSE;
+ const gchar *p;
+
+ p = str + strlen(str) - 1;
+ while (p >= str) {
+ if (*p == c && !in_quote)
+ return (gchar *)p;
+ if (*p == quote_chr)
+ in_quote ^= TRUE;
+ p--;
+ }
+
+ return NULL;
+}
+
+void extract_address(gchar *str)
+{
+ eliminate_address_comment(str);
+ if (strchr_with_skip_quote(str, '"', '<'))
+ extract_parenthesis_with_skip_quote(str, '"', '<', '>');
+ g_strstrip(str);
+}
+
+void extract_list_id_str(gchar *str)
+{
+ if (strchr_with_skip_quote(str, '"', '<'))
+ extract_parenthesis_with_skip_quote(str, '"', '<', '>');
+ g_strstrip(str);
+}
+
+GSList *address_list_append(GSList *addr_list, const gchar *str)
+{
+ gchar *work;
+ gchar *workp;
+
+ if (!str) return addr_list;
+
+ Xstrdup_a(work, str, return addr_list);
+
+ eliminate_address_comment(work);
+ workp = work;
+
+ while (workp && *workp) {
+ gchar *p, *next;
+
+ if ((p = strchr_with_skip_quote(workp, '"', ','))) {
+ *p = '\0';
+ next = p + 1;
+ } else
+ next = NULL;
+
+ if (strchr_with_skip_quote(workp, '"', '<'))
+ extract_parenthesis_with_skip_quote
+ (workp, '"', '<', '>');
+
+ g_strstrip(workp);
+ if (*workp)
+ addr_list = g_slist_append(addr_list, g_strdup(workp));
+
+ workp = next;
+ }
+
+ return addr_list;
+}
+
+GSList *references_list_append(GSList *msgid_list, const gchar *str)
+{
+ const gchar *strp;
+
+ if (!str) return msgid_list;
+ strp = str;
+
+ while (strp && *strp) {
+ const gchar *start, *end;
+ gchar *msgid;
+
+ if ((start = strchr(strp, '<')) != NULL) {
+ end = strchr(start + 1, '>');
+ if (!end) break;
+ } else
+ break;
+
+ msgid = g_strndup(start + 1, end - start - 1);
+ g_strstrip(msgid);
+ if (*msgid)
+ msgid_list = g_slist_append(msgid_list, msgid);
+ else
+ g_free(msgid);
+
+ strp = end + 1;
+ }
+
+ return msgid_list;
+}
+
+GSList *newsgroup_list_append(GSList *group_list, const gchar *str)
+{
+ gchar *work;
+ gchar *workp;
+
+ if (!str) return group_list;
+
+ Xstrdup_a(work, str, return group_list);
+
+ workp = work;
+
+ while (workp && *workp) {
+ gchar *p, *next;
+
+ if ((p = strchr_with_skip_quote(workp, '"', ','))) {
+ *p = '\0';
+ next = p + 1;
+ } else
+ next = NULL;
+
+ g_strstrip(workp);
+ if (*workp)
+ group_list = g_slist_append(group_list,
+ g_strdup(workp));
+
+ workp = next;
+ }
+
+ return group_list;
+}
+
+GList *add_history(GList *list, const gchar *str)
+{
+ GList *old;
+
+ g_return_val_if_fail(str != NULL, list);
+
+ old = g_list_find_custom(list, (gpointer)str, (GCompareFunc)strcmp2);
+ if (old) {
+ g_free(old->data);
+ list = g_list_remove(list, old->data);
+ } else if (g_list_length(list) >= MAX_HISTORY_SIZE) {
+ GList *last;
+
+ last = g_list_last(list);
+ if (last) {
+ g_free(last->data);
+ g_list_remove(list, last->data);
+ }
+ }
+
+ list = g_list_prepend(list, g_strdup(str));
+
+ return list;
+}
+
+void remove_return(gchar *str)
+{
+ register gchar *p = str;
+
+ while (*p) {
+ if (*p == '\n' || *p == '\r')
+ memmove(p, p + 1, strlen(p));
+ else
+ p++;
+ }
+}
+
+void remove_space(gchar *str)
+{
+ register guchar *p = str;
+ register gint spc;
+
+ while (*p) {
+ spc = 0;
+ while (isspace(*(p + spc)))
+ spc++;
+ if (spc)
+ memmove(p, p + spc, strlen(p + spc) + 1);
+ else
+ p++;
+ }
+}
+
+void unfold_line(gchar *str)
+{
+ register guchar *p = str;
+ register gint spc;
+
+ while (*p) {
+ if (*p == '\n' || *p == '\r') {
+ *p++ = ' ';
+ spc = 0;
+ while (isspace(*(p + spc)))
+ spc++;
+ if (spc)
+ memmove(p, p + spc, strlen(p + spc) + 1);
+ } else
+ p++;
+ }
+}
+
+void subst_char(gchar *str, gchar orig, gchar subst)
+{
+ register gchar *p = str;
+
+ while (*p) {
+ if (*p == orig)
+ *p = subst;
+ p++;
+ }
+}
+
+void subst_chars(gchar *str, gchar *orig, gchar subst)
+{
+ register gchar *p = str;
+
+ while (*p) {
+ if (strchr(orig, *p) != NULL)
+ *p = subst;
+ p++;
+ }
+}
+
+void subst_for_filename(gchar *str)
+{
+ subst_chars(str, " \t\r\n\"'/\\", '_');
+}
+
+gboolean is_header_line(const gchar *str)
+{
+ if (str[0] == ':') return FALSE;
+
+ while (*str != '\0' && *str != ' ') {
+ if (*str == ':')
+ return TRUE;
+ str++;
+ }
+
+ return FALSE;
+}
+
+gboolean is_ascii_str(const guchar *str)
+{
+ while (*str != '\0') {
+ if (*str != '\t' && *str != ' ' &&
+ *str != '\r' && *str != '\n' &&
+ (*str < 32 || *str >= 127))
+ return FALSE;
+ str++;
+ }
+
+ return TRUE;
+}
+
+gint get_quote_level(const gchar *str)
+{
+ const guchar *first_pos;
+ const guchar *last_pos;
+ const guchar *p = str;
+ gint quote_level = -1;
+
+ /* speed up line processing by only searching to the last '>' */
+ if ((first_pos = strchr(str, '>')) != NULL) {
+ /* skip a line if it contains a '<' before the initial '>' */
+ if (memchr(str, '<', first_pos - (const guchar *)str) != NULL)
+ return -1;
+ last_pos = strrchr(first_pos, '>');
+ } else
+ return -1;
+
+ while (p <= last_pos) {
+ while (p < last_pos) {
+ if (isspace(*p))
+ p++;
+ else
+ break;
+ }
+
+ if (*p == '>')
+ quote_level++;
+ else if (*p != '-' && !isspace(*p) && p <= last_pos) {
+ /* any characters are allowed except '-' and space */
+ while (*p != '-' && *p != '>' && !isspace(*p) &&
+ p < last_pos)
+ p++;
+ if (*p == '>')
+ quote_level++;
+ else
+ break;
+ }
+
+ p++;
+ }
+
+ return quote_level;
+}
+
+gchar *strstr_with_skip_quote(const gchar *haystack, const gchar *needle)
+{
+ register guint haystack_len, needle_len;
+ gboolean in_squote = FALSE, in_dquote = FALSE;
+
+ haystack_len = strlen(haystack);
+ needle_len = strlen(needle);
+
+ if (haystack_len < needle_len || needle_len == 0)
+ return NULL;
+
+ while (haystack_len >= needle_len) {
+ if (!in_squote && !in_dquote &&
+ !strncmp(haystack, needle, needle_len))
+ return (gchar *)haystack;
+
+ /* 'foo"bar"' -> foo"bar"
+ "foo'bar'" -> foo'bar' */
+ if (*haystack == '\'') {
+ if (in_squote)
+ in_squote = FALSE;
+ else if (!in_dquote)
+ in_squote = TRUE;
+ } else if (*haystack == '\"') {
+ if (in_dquote)
+ in_dquote = FALSE;
+ else if (!in_squote)
+ in_dquote = TRUE;
+ }
+
+ haystack++;
+ haystack_len--;
+ }
+
+ return NULL;
+}
+
+gchar *strchr_parenthesis_close(const gchar *str, gchar op, gchar cl)
+{
+ const gchar *p;
+ gchar quote_chr = '"';
+ gint in_brace;
+ gboolean in_quote = FALSE;
+
+ p = str;
+
+ if ((p = strchr_with_skip_quote(p, quote_chr, op))) {
+ p++;
+ in_brace = 1;
+ while (*p) {
+ if (*p == op && !in_quote)
+ in_brace++;
+ else if (*p == cl && !in_quote)
+ in_brace--;
+ else if (*p == quote_chr)
+ in_quote ^= TRUE;
+
+ if (in_brace == 0)
+ return (gchar *)p;
+
+ p++;
+ }
+ }
+
+ return NULL;
+}
+
+gchar **strsplit_parenthesis(const gchar *str, gchar op, gchar cl,
+ gint max_tokens)
+{
+ GSList *string_list = NULL, *slist;
+ gchar **str_array;
+ const gchar *s_op, *s_cl;
+ guint i, n = 1;
+
+ g_return_val_if_fail(str != NULL, NULL);
+
+ if (max_tokens < 1)
+ max_tokens = G_MAXINT;
+
+ s_op = strchr_with_skip_quote(str, '"', op);
+ if (!s_op) return NULL;
+ str = s_op;
+ s_cl = strchr_parenthesis_close(str, op, cl);
+ if (s_cl) {
+ do {
+ guint len;
+ gchar *new_string;
+
+ str++;
+ len = s_cl - str;
+ new_string = g_new(gchar, len + 1);
+ strncpy(new_string, str, len);
+ new_string[len] = 0;
+ string_list = g_slist_prepend(string_list, new_string);
+ n++;
+ str = s_cl + 1;
+
+ while (*str && isspace(*(guchar *)str)) str++;
+ if (*str != op) {
+ string_list = g_slist_prepend(string_list,
+ g_strdup(""));
+ n++;
+ s_op = strchr_with_skip_quote(str, '"', op);
+ if (!--max_tokens || !s_op) break;
+ str = s_op;
+ } else
+ s_op = str;
+ s_cl = strchr_parenthesis_close(str, op, cl);
+ } while (--max_tokens && s_cl);
+ }
+
+ str_array = g_new(gchar*, n);
+
+ i = n - 1;
+
+ str_array[i--] = NULL;
+ for (slist = string_list; slist; slist = slist->next)
+ str_array[i--] = slist->data;
+
+ g_slist_free(string_list);
+
+ return str_array;
+}
+
+gchar **strsplit_with_quote(const gchar *str, const gchar *delim,
+ gint max_tokens)
+{
+ GSList *string_list = NULL, *slist;
+ gchar **str_array, *s, *new_str;
+ guint i, n = 1, len;
+
+ g_return_val_if_fail(str != NULL, NULL);
+ g_return_val_if_fail(delim != NULL, NULL);
+
+ if (max_tokens < 1)
+ max_tokens = G_MAXINT;
+
+ s = strstr_with_skip_quote(str, delim);
+ if (s) {
+ guint delimiter_len = strlen(delim);
+
+ do {
+ len = s - str;
+ new_str = g_strndup(str, len);
+
+ if (new_str[0] == '\'' || new_str[0] == '\"') {
+ if (new_str[len - 1] == new_str[0]) {
+ new_str[len - 1] = '\0';
+ memmove(new_str, new_str + 1, len - 1);
+ }
+ }
+ string_list = g_slist_prepend(string_list, new_str);
+ n++;
+ str = s + delimiter_len;
+ s = strstr_with_skip_quote(str, delim);
+ } while (--max_tokens && s);
+ }
+
+ if (*str) {
+ new_str = g_strdup(str);
+ if (new_str[0] == '\'' || new_str[0] == '\"') {
+ len = strlen(str);
+ if (new_str[len - 1] == new_str[0]) {
+ new_str[len - 1] = '\0';
+ memmove(new_str, new_str + 1, len - 1);
+ }
+ }
+ string_list = g_slist_prepend(string_list, new_str);
+ n++;
+ }
+
+ str_array = g_new(gchar*, n);
+
+ i = n - 1;
+
+ str_array[i--] = NULL;
+ for (slist = string_list; slist; slist = slist->next)
+ str_array[i--] = slist->data;
+
+ g_slist_free(string_list);
+
+ return str_array;
+}
+
+gchar *get_abbrev_newsgroup_name(const gchar *group, gint len)
+{
+ gchar *abbrev_group;
+ gchar *ap;
+ const gchar *p = group;
+ const gchar *last;
+
+ last = group + strlen(group);
+ abbrev_group = ap = g_malloc(strlen(group) + 1);
+
+ while (*p) {
+ while (*p == '.')
+ *ap++ = *p++;
+ if ((ap - abbrev_group) + (last - p) > len && strchr(p, '.')) {
+ *ap++ = *p++;
+ while (*p != '.') p++;
+ } else {
+ strcpy(ap, p);
+ return abbrev_group;
+ }
+ }
+
+ *ap = '\0';
+ return abbrev_group;
+}
+
+gchar *trim_string(const gchar *str, gint len)
+{
+ const gchar *p = str;
+ gint mb_len;
+ gchar *new_str;
+ gint new_len = 0;
+
+ if (!str) return NULL;
+ if (strlen(str) <= len)
+ return g_strdup(str);
+
+ while (*p != '\0') {
+ mb_len = mblen(p, MB_LEN_MAX);
+ if (mb_len == 0)
+ break;
+ else if (mb_len < 0)
+ return g_strdup(str);
+ else if (new_len + mb_len > len)
+ break;
+
+ new_len += mb_len;
+ p += mb_len;
+ }
+
+ Xstrndup_a(new_str, str, new_len, return g_strdup(str));
+ return g_strconcat(new_str, "...", NULL);
+}
+
+gchar *trim_string_before(const gchar *str, gint len)
+{
+ const gchar *p = str;
+ gint mb_len;
+ gint new_len;
+
+ if (!str) return NULL;
+ if ((new_len = strlen(str)) <= len)
+ return g_strdup(str);
+
+ while (*p != '\0') {
+ mb_len = mblen(p, MB_LEN_MAX);
+ if (mb_len == 0)
+ break;
+ else if (mb_len < 0)
+ return g_strdup(str);
+
+ new_len -= mb_len;
+ p += mb_len;
+
+ if (new_len <= len)
+ break;
+ }
+
+ return g_strconcat("...", p, NULL);
+}
+
+GList *uri_list_extract_filenames(const gchar *uri_list)
+{
+ GList *result = NULL;
+ const guchar *p, *q;
+ gchar *file;
+
+ p = uri_list;
+
+ while (p) {
+ if (*p != '#') {
+ while (isspace(*p)) p++;
+ if (!strncmp(p, "file:", 5)) {
+ p += 5;
+ q = p;
+ while (*q && *q != '\n' && *q != '\r') q++;
+
+ if (q > p) {
+ q--;
+ while (q > p && isspace(*q)) q--;
+ file = g_malloc(q - p + 2);
+ strncpy(file, p, q - p + 1);
+ file[q - p + 1] = '\0';
+ result = g_list_append(result,file);
+ }
+ }
+ }
+ p = strchr(p, '\n');
+ if (p) p++;
+ }
+
+ return result;
+}
+
+#define HEX_TO_INT(val, hex) \
+{ \
+ gchar c = hex; \
+ \
+ if ('0' <= c && c <= '9') { \
+ val = c - '0'; \
+ } else if ('a' <= c && c <= 'f') { \
+ val = c - 'a' + 10; \
+ } else if ('A' <= c && c <= 'F') { \
+ val = c - 'A' + 10; \
+ } else { \
+ val = 0; \
+ } \
+}
+
+/* Converts two-digit hexadecimal to decimal. Used for unescaping escaped
+ * characters.
+ */
+static gint axtoi(const gchar *hex_str)
+{
+ gint hi, lo;
+
+ HEX_TO_INT(hi, hex_str[0]);
+ HEX_TO_INT(lo, hex_str[1]);
+
+ return (hi << 4) + lo;
+}
+
+gboolean is_uri_string(const gchar *str)
+{
+ return (g_strncasecmp(str, "http://", 7) == 0 ||
+ g_strncasecmp(str, "https://", 8) == 0 ||
+ g_strncasecmp(str, "ftp://", 6) == 0 ||
+ g_strncasecmp(str, "www.", 4) == 0);
+}
+
+gchar *get_uri_path(const gchar *uri)
+{
+ if (g_strncasecmp(uri, "http://", 7) == 0)
+ return (gchar *)(uri + 7);
+ else if (g_strncasecmp(uri, "https://", 8) == 0)
+ return (gchar *)(uri + 8);
+ else if (g_strncasecmp(uri, "ftp://", 6) == 0)
+ return (gchar *)(uri + 6);
+ else
+ return (gchar *)uri;
+}
+
+/* Decodes URL-Encoded strings (i.e. strings in which spaces are replaced by
+ * plusses, and escape characters are used)
+ */
+void decode_uri(gchar *decoded_uri, const gchar *encoded_uri)
+{
+ gchar *dec = decoded_uri;
+ const gchar *enc = encoded_uri;
+
+ while (*enc) {
+ if (*enc == '%') {
+ enc++;
+ if (isxdigit((guchar)enc[0]) &&
+ isxdigit((guchar)enc[1])) {
+ *dec = axtoi(enc);
+ dec++;
+ enc += 2;
+ }
+ } else {
+ if (*enc == '+')
+ *dec = ' ';
+ else
+ *dec = *enc;
+ dec++;
+ enc++;
+ }
+ }
+
+ *dec = '\0';
+}
+
+gint scan_mailto_url(const gchar *mailto, gchar **to, gchar **cc, gchar **bcc,
+ gchar **subject, gchar **body)
+{
+ gchar *tmp_mailto;
+ gchar *p;
+
+ Xstrdup_a(tmp_mailto, mailto, return -1);
+
+ if (!strncmp(tmp_mailto, "mailto:", 7))
+ tmp_mailto += 7;
+
+ p = strchr(tmp_mailto, '?');
+ if (p) {
+ *p = '\0';
+ p++;
+ }
+
+ if (to && !*to)
+ *to = g_strdup(tmp_mailto);
+
+ while (p) {
+ gchar *field, *value;
+
+ field = p;
+
+ p = strchr(p, '=');
+ if (!p) break;
+ *p = '\0';
+ p++;
+
+ value = p;
+
+ p = strchr(p, '&');
+ if (p) {
+ *p = '\0';
+ p++;
+ }
+
+ if (*value == '\0') continue;
+
+ if (cc && !*cc && !g_strcasecmp(field, "cc")) {
+ *cc = g_strdup(value);
+ } else if (bcc && !*bcc && !g_strcasecmp(field, "bcc")) {
+ *bcc = g_strdup(value);
+ } else if (subject && !*subject &&
+ !g_strcasecmp(field, "subject")) {
+ *subject = g_malloc(strlen(value) + 1);
+ decode_uri(*subject, value);
+ } else if (body && !*body && !g_strcasecmp(field, "body")) {
+ *body = g_malloc(strlen(value) + 1);
+ decode_uri(*body, value);
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * We need this wrapper around g_get_home_dir(), so that
+ * we can fix some Windoze things here. Should be done in glibc of course
+ * but as long as we are not able to do our own extensions to glibc, we do
+ * it here.
+ */
+const gchar *get_home_dir(void)
+{
+#if HAVE_DOSISH_SYSTEM
+ static gchar *home_dir;
+
+ if (!home_dir) {
+ home_dir = read_w32_registry_string(NULL,
+ "Software\\Sylpheed", "HomeDir" );
+ if (!home_dir || !*home_dir) {
+ if (getenv ("HOMEDRIVE") && getenv("HOMEPATH")) {
+ const char *s = g_get_home_dir();
+ if (s && *s)
+ home_dir = g_strdup (s);
+ }
+ if (!home_dir || !*home_dir)
+ home_dir = g_strdup ("c:\\sylpheed");
+ }
+ debug_print("initialized home_dir to `%s'\n", home_dir);
+ }
+ return home_dir;
+#else /* standard glib */
+ return g_get_home_dir();
+#endif
+}
+
+const gchar *get_rc_dir(void)
+{
+ static gchar *rc_dir = NULL;
+
+ if (!rc_dir)
+ rc_dir = g_strconcat(get_home_dir(), G_DIR_SEPARATOR_S,
+ RC_DIR, NULL);
+
+ return rc_dir;
+}
+
+const gchar *get_news_cache_dir(void)
+{
+ static gchar *news_cache_dir = NULL;
+
+ if (!news_cache_dir)
+ news_cache_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ NEWS_CACHE_DIR, NULL);
+
+ return news_cache_dir;
+}
+
+const gchar *get_imap_cache_dir(void)
+{
+ static gchar *imap_cache_dir = NULL;
+
+ if (!imap_cache_dir)
+ imap_cache_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ IMAP_CACHE_DIR, NULL);
+
+ return imap_cache_dir;
+}
+
+const gchar *get_mime_tmp_dir(void)
+{
+ static gchar *mime_tmp_dir = NULL;
+
+ if (!mime_tmp_dir)
+ mime_tmp_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ MIME_TMP_DIR, NULL);
+
+ return mime_tmp_dir;
+}
+
+const gchar *get_template_dir(void)
+{
+ static gchar *template_dir = NULL;
+
+ if (!template_dir)
+ template_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ TEMPLATE_DIR, NULL);
+
+ return template_dir;
+}
+
+const gchar *get_tmp_dir(void)
+{
+ static gchar *tmp_dir = NULL;
+
+ if (!tmp_dir)
+ tmp_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ TMP_DIR, NULL);
+
+ return tmp_dir;
+}
+
+gchar *get_tmp_file(void)
+{
+ gchar *tmp_file;
+ static guint32 id = 0;
+
+ tmp_file = g_strdup_printf("%s%ctmpfile.%08x",
+ get_tmp_dir(), G_DIR_SEPARATOR, id++);
+
+ return tmp_file;
+}
+
+const gchar *get_domain_name(void)
+{
+ static gchar *domain_name = NULL;
+
+ if (!domain_name) {
+ gchar buf[128] = "";
+ struct hostent *hp;
+
+ if (gethostname(buf, sizeof(buf)) < 0) {
+ perror("gethostname");
+ domain_name = "unknown";
+ } else {
+ buf[sizeof(buf) - 1] = '\0';
+ if ((hp = my_gethostbyname(buf)) == NULL) {
+ perror("gethostbyname");
+ domain_name = g_strdup(buf);
+ } else {
+ domain_name = g_strdup(hp->h_name);
+ }
+ }
+
+ debug_print("domain name = %s\n", domain_name);
+ }
+
+ return domain_name;
+}
+
+off_t get_file_size(const gchar *file)
+{
+ struct stat s;
+
+ if (stat(file, &s) < 0) {
+ FILE_OP_ERROR(file, "stat");
+ return -1;
+ }
+
+ return s.st_size;
+}
+
+off_t get_file_size_as_crlf(const gchar *file)
+{
+ FILE *fp;
+ off_t size = 0;
+ gchar buf[BUFFSIZE];
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ size += strlen(buf) + 2;
+ }
+
+ if (ferror(fp)) {
+ FILE_OP_ERROR(file, "fgets");
+ size = -1;
+ }
+
+ fclose(fp);
+
+ return size;
+}
+
+off_t get_left_file_size(FILE *fp)
+{
+ glong pos;
+ glong end;
+ off_t size;
+
+ if ((pos = ftell(fp)) < 0) {
+ perror("ftell");
+ return -1;
+ }
+ if (fseek(fp, 0L, SEEK_END) < 0) {
+ perror("fseek");
+ return -1;
+ }
+ if ((end = ftell(fp)) < 0) {
+ perror("fseek");
+ return -1;
+ }
+ size = end - pos;
+ if (fseek(fp, pos, SEEK_SET) < 0) {
+ perror("fseek");
+ return -1;
+ }
+
+ return size;
+}
+
+gboolean file_exist(const gchar *file, gboolean allow_fifo)
+{
+ struct stat s;
+
+ if (file == NULL)
+ return FALSE;
+
+ if (stat(file, &s) < 0) {
+ if (ENOENT != errno) FILE_OP_ERROR(file, "stat");
+ return FALSE;
+ }
+
+ if (S_ISREG(s.st_mode) || (allow_fifo && S_ISFIFO(s.st_mode)))
+ return TRUE;
+
+ return FALSE;
+}
+
+gboolean is_dir_exist(const gchar *dir)
+{
+ struct stat s;
+
+ if (dir == NULL)
+ return FALSE;
+
+ if (stat(dir, &s) < 0) {
+ if (ENOENT != errno) FILE_OP_ERROR(dir, "stat");
+ return FALSE;
+ }
+
+ if (S_ISDIR(s.st_mode))
+ return TRUE;
+
+ return FALSE;
+}
+
+gboolean is_file_entry_exist(const gchar *file)
+{
+ struct stat s;
+
+ if (file == NULL)
+ return FALSE;
+
+ if (stat(file, &s) < 0) {
+ if (ENOENT != errno) FILE_OP_ERROR(file, "stat");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean dirent_is_regular_file(struct dirent *d)
+{
+ struct stat s;
+
+#ifdef HAVE_DIRENT_D_TYPE
+ if (d->d_type == DT_REG)
+ return TRUE;
+ else if (d->d_type != DT_UNKNOWN)
+ return FALSE;
+#endif
+
+ return (stat(d->d_name, &s) == 0 && S_ISREG(s.st_mode));
+}
+
+gboolean dirent_is_directory(struct dirent *d)
+{
+ struct stat s;
+
+#ifdef HAVE_DIRENT_D_TYPE
+ if (d->d_type == DT_DIR)
+ return TRUE;
+ else if (d->d_type != DT_UNKNOWN)
+ return FALSE;
+#endif
+
+ return (stat(d->d_name, &s) == 0 && S_ISDIR(s.st_mode));
+}
+
+gint change_dir(const gchar *dir)
+{
+ gchar *prevdir = NULL;
+
+ if (debug_mode)
+ prevdir = g_get_current_dir();
+
+ if (chdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ if (debug_mode) g_free(prevdir);
+ return -1;
+ } else if (debug_mode) {
+ gchar *cwd;
+
+ cwd = g_get_current_dir();
+ if (strcmp(prevdir, cwd) != 0)
+ g_print("current dir: %s\n", cwd);
+ g_free(cwd);
+ g_free(prevdir);
+ }
+
+ return 0;
+}
+
+gint make_dir(const gchar *dir)
+{
+ if (mkdir(dir, S_IRWXU) < 0) {
+ FILE_OP_ERROR(dir, "mkdir");
+ return -1;
+ }
+ if (chmod(dir, S_IRWXU) < 0)
+ FILE_OP_ERROR(dir, "chmod");
+
+ return 0;
+}
+
+gint make_dir_hier(const gchar *dir)
+{
+ gchar *parent_dir;
+ const gchar *p;
+
+ for (p = dir; (p = strchr(p, G_DIR_SEPARATOR)) != NULL; p++) {
+ parent_dir = g_strndup(dir, p - dir);
+ if (*parent_dir != '\0') {
+ if (!is_dir_exist(parent_dir)) {
+ if (make_dir(parent_dir) < 0) {
+ g_free(parent_dir);
+ return -1;
+ }
+ }
+ }
+ g_free(parent_dir);
+ }
+
+ if (!is_dir_exist(dir)) {
+ if (make_dir(dir) < 0)
+ return -1;
+ }
+
+ return 0;
+}
+
+gint remove_all_files(const gchar *dir)
+{
+ DIR *dp;
+ struct dirent *d;
+ gchar *prev_dir;
+
+ prev_dir = g_get_current_dir();
+
+ if (chdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(dir, "opendir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ while ((d = readdir(dp)) != NULL) {
+ if (!strcmp(d->d_name, ".") ||
+ !strcmp(d->d_name, ".."))
+ continue;
+
+ if (unlink(d->d_name) < 0)
+ FILE_OP_ERROR(d->d_name, "unlink");
+ }
+
+ closedir(dp);
+
+ if (chdir(prev_dir) < 0) {
+ FILE_OP_ERROR(prev_dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ g_free(prev_dir);
+
+ return 0;
+}
+
+gint remove_numbered_files(const gchar *dir, guint first, guint last)
+{
+ DIR *dp;
+ struct dirent *d;
+ gchar *prev_dir;
+ gint fileno;
+
+ prev_dir = g_get_current_dir();
+
+ if (chdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(dir, "opendir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ while ((d = readdir(dp)) != NULL) {
+ fileno = to_number(d->d_name);
+ if (fileno >= 0 && first <= fileno && fileno <= last) {
+ if (is_dir_exist(d->d_name))
+ continue;
+ if (unlink(d->d_name) < 0)
+ FILE_OP_ERROR(d->d_name, "unlink");
+ }
+ }
+
+ closedir(dp);
+
+ if (chdir(prev_dir) < 0) {
+ FILE_OP_ERROR(prev_dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ g_free(prev_dir);
+
+ return 0;
+}
+
+gint remove_all_numbered_files(const gchar *dir)
+{
+ return remove_numbered_files(dir, 0, UINT_MAX);
+}
+
+gint remove_expired_files(const gchar *dir, guint hours)
+{
+ DIR *dp;
+ struct dirent *d;
+ struct stat s;
+ gchar *prev_dir;
+ gint fileno;
+ time_t mtime, now, expire_time;
+
+ prev_dir = g_get_current_dir();
+
+ if (chdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(dir, "opendir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ now = time(NULL);
+ expire_time = hours * 60 * 60;
+
+ while ((d = readdir(dp)) != NULL) {
+ fileno = to_number(d->d_name);
+ if (fileno >= 0) {
+ if (stat(d->d_name, &s) < 0) {
+ FILE_OP_ERROR(d->d_name, "stat");
+ continue;
+ }
+ if (S_ISDIR(s.st_mode))
+ continue;
+ mtime = MAX(s.st_mtime, s.st_atime);
+ if (now - mtime > expire_time) {
+ if (unlink(d->d_name) < 0)
+ FILE_OP_ERROR(d->d_name, "unlink");
+ }
+ }
+ }
+
+ closedir(dp);
+
+ if (chdir(prev_dir) < 0) {
+ FILE_OP_ERROR(prev_dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ g_free(prev_dir);
+
+ return 0;
+}
+
+gint remove_dir_recursive(const gchar *dir)
+{
+ struct stat s;
+ DIR *dp;
+ struct dirent *d;
+ gchar *prev_dir;
+
+ /* g_print("dir = %s\n", dir); */
+
+ if (stat(dir, &s) < 0) {
+ FILE_OP_ERROR(dir, "stat");
+ if (ENOENT == errno) return 0;
+ return -1;
+ }
+
+ if (!S_ISDIR(s.st_mode)) {
+ if (unlink(dir) < 0) {
+ FILE_OP_ERROR(dir, "unlink");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ prev_dir = g_get_current_dir();
+ /* g_print("prev_dir = %s\n", prev_dir); */
+
+ if (!path_cmp(prev_dir, dir)) {
+ g_free(prev_dir);
+ if (chdir("..") < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ return -1;
+ }
+ prev_dir = g_get_current_dir();
+ }
+
+ if (chdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ if ((dp = opendir(".")) == NULL) {
+ FILE_OP_ERROR(dir, "opendir");
+ chdir(prev_dir);
+ g_free(prev_dir);
+ return -1;
+ }
+
+ /* remove all files in the directory */
+ while ((d = readdir(dp)) != NULL) {
+ if (!strcmp(d->d_name, ".") ||
+ !strcmp(d->d_name, ".."))
+ continue;
+
+ /* g_print("removing %s\n", d->d_name); */
+
+ if (dirent_is_directory(d)) {
+ if (remove_dir_recursive(d->d_name) < 0) {
+ g_warning("can't remove directory\n");
+ return -1;
+ }
+ } else {
+ if (unlink(d->d_name) < 0)
+ FILE_OP_ERROR(d->d_name, "unlink");
+ }
+ }
+
+ closedir(dp);
+
+ if (chdir(prev_dir) < 0) {
+ FILE_OP_ERROR(prev_dir, "chdir");
+ g_free(prev_dir);
+ return -1;
+ }
+
+ g_free(prev_dir);
+
+ if (rmdir(dir) < 0) {
+ FILE_OP_ERROR(dir, "rmdir");
+ return -1;
+ }
+
+ return 0;
+}
+
+gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup)
+{
+ FILE *src_fp, *dest_fp;
+ gint n_read;
+ gchar buf[BUFSIZ];
+ gchar *dest_bak = NULL;
+ gboolean err = FALSE;
+
+ if ((src_fp = fopen(src, "rb")) == NULL) {
+ FILE_OP_ERROR(src, "fopen");
+ return -1;
+ }
+ if (is_file_exist(dest)) {
+ dest_bak = g_strconcat(dest, ".bak", NULL);
+ if (rename(dest, dest_bak) < 0) {
+ FILE_OP_ERROR(dest, "rename");
+ fclose(src_fp);
+ g_free(dest_bak);
+ return -1;
+ }
+ }
+
+ if ((dest_fp = fopen(dest, "wb")) == NULL) {
+ FILE_OP_ERROR(dest, "fopen");
+ fclose(src_fp);
+ if (dest_bak) {
+ if (rename(dest_bak, dest) < 0)
+ FILE_OP_ERROR(dest_bak, "rename");
+ g_free(dest_bak);
+ }
+ return -1;
+ }
+
+ if (change_file_mode_rw(dest_fp, dest) < 0) {
+ FILE_OP_ERROR(dest, "chmod");
+ g_warning(_("can't change file mode\n"));
+ }
+
+ while ((n_read = fread(buf, sizeof(gchar), sizeof(buf), src_fp)) > 0) {
+ if (n_read < sizeof(buf) && ferror(src_fp))
+ break;
+ if (fwrite(buf, n_read, 1, dest_fp) < 1) {
+ g_warning(_("writing to %s failed.\n"), dest);
+ fclose(dest_fp);
+ fclose(src_fp);
+ unlink(dest);
+ if (dest_bak) {
+ if (rename(dest_bak, dest) < 0)
+ FILE_OP_ERROR(dest_bak, "rename");
+ g_free(dest_bak);
+ }
+ return -1;
+ }
+ }
+
+ if (ferror(src_fp)) {
+ FILE_OP_ERROR(src, "fread");
+ err = TRUE;
+ }
+ fclose(src_fp);
+ if (fclose(dest_fp) == EOF) {
+ FILE_OP_ERROR(dest, "fclose");
+ err = TRUE;
+ }
+
+ if (err) {
+ unlink(dest);
+ if (dest_bak) {
+ if (rename(dest_bak, dest) < 0)
+ FILE_OP_ERROR(dest_bak, "rename");
+ g_free(dest_bak);
+ }
+ return -1;
+ }
+
+ if (keep_backup == FALSE && dest_bak)
+ unlink(dest_bak);
+
+ g_free(dest_bak);
+
+ return 0;
+}
+
+gint move_file(const gchar *src, const gchar *dest, gboolean overwrite)
+{
+ if (overwrite == FALSE && is_file_exist(dest)) {
+ g_warning("move_file(): file %s already exists.", dest);
+ return -1;
+ }
+
+ if (rename(src, dest) == 0) return 0;
+
+ if (EXDEV != errno) {
+ FILE_OP_ERROR(src, "rename");
+ return -1;
+ }
+
+ if (copy_file(src, dest, FALSE) < 0) return -1;
+
+ unlink(src);
+
+ return 0;
+}
+
+gint copy_file_part(FILE *fp, off_t offset, size_t length, const gchar *dest)
+{
+ FILE *dest_fp;
+ gint n_read;
+ gint bytes_left, to_read;
+ gchar buf[BUFSIZ];
+ gboolean err = FALSE;
+
+ if (fseek(fp, offset, SEEK_SET) < 0) {
+ perror("fseek");
+ return -1;
+ }
+
+ if ((dest_fp = fopen(dest, "wb")) == NULL) {
+ FILE_OP_ERROR(dest, "fopen");
+ return -1;
+ }
+
+ if (change_file_mode_rw(dest_fp, dest) < 0) {
+ FILE_OP_ERROR(dest, "chmod");
+ g_warning("can't change file mode\n");
+ }
+
+ bytes_left = length;
+ to_read = MIN(bytes_left, sizeof(buf));
+
+ while ((n_read = fread(buf, sizeof(gchar), to_read, fp)) > 0) {
+ if (n_read < to_read && ferror(fp))
+ break;
+ if (fwrite(buf, n_read, 1, dest_fp) < 1) {
+ g_warning(_("writing to %s failed.\n"), dest);
+ fclose(dest_fp);
+ unlink(dest);
+ return -1;
+ }
+ bytes_left -= n_read;
+ if (bytes_left == 0)
+ break;
+ to_read = MIN(bytes_left, sizeof(buf));
+ }
+
+ if (ferror(fp)) {
+ perror("fread");
+ err = TRUE;
+ }
+ if (fclose(dest_fp) == EOF) {
+ FILE_OP_ERROR(dest, "fclose");
+ err = TRUE;
+ }
+
+ if (err) {
+ unlink(dest);
+ return -1;
+ }
+
+ return 0;
+}
+
+/* convert line endings into CRLF. If the last line doesn't end with
+ * linebreak, add it.
+ */
+gchar *canonicalize_str(const gchar *str)
+{
+ const gchar *p;
+ guint new_len = 0;
+ gchar *out, *outp;
+
+ for (p = str; *p != '\0'; ++p) {
+ if (*p != '\r') {
+ ++new_len;
+ if (*p == '\n')
+ ++new_len;
+ }
+ }
+ if (p == str || *(p - 1) != '\n')
+ new_len += 2;
+
+ out = outp = g_malloc(new_len + 1);
+ for (p = str; *p != '\0'; ++p) {
+ if (*p != '\r') {
+ if (*p == '\n')
+ *outp++ = '\r';
+ *outp++ = *p;
+ }
+ }
+ if (p == str || *(p - 1) != '\n') {
+ *outp++ = '\r';
+ *outp++ = '\n';
+ }
+ *outp = '\0';
+
+ return out;
+}
+
+gint canonicalize_file(const gchar *src, const gchar *dest)
+{
+ FILE *src_fp, *dest_fp;
+ gchar buf[BUFFSIZE];
+ gint len;
+ gboolean err = FALSE;
+ gboolean last_linebreak = FALSE;
+
+ if ((src_fp = fopen(src, "rb")) == NULL) {
+ FILE_OP_ERROR(src, "fopen");
+ return -1;
+ }
+
+ if ((dest_fp = fopen(dest, "wb")) == NULL) {
+ FILE_OP_ERROR(dest, "fopen");
+ fclose(src_fp);
+ return -1;
+ }
+
+ if (change_file_mode_rw(dest_fp, dest) < 0) {
+ FILE_OP_ERROR(dest, "chmod");
+ g_warning("can't change file mode\n");
+ }
+
+ while (fgets(buf, sizeof(buf), src_fp) != NULL) {
+ gint r = 0;
+
+ len = strlen(buf);
+ if (len == 0) break;
+ last_linebreak = FALSE;
+
+ if (buf[len - 1] != '\n') {
+ last_linebreak = TRUE;
+ r = fputs(buf, dest_fp);
+ } else if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') {
+ r = fputs(buf, dest_fp);
+ } else {
+ if (len > 1) {
+ r = fwrite(buf, len - 1, 1, dest_fp);
+ if (r != 1)
+ r = EOF;
+ }
+ if (r != EOF)
+ r = fputs("\r\n", dest_fp);
+ }
+
+ if (r == EOF) {
+ g_warning("writing to %s failed.\n", dest);
+ fclose(dest_fp);
+ fclose(src_fp);
+ unlink(dest);
+ return -1;
+ }
+ }
+
+ if (last_linebreak == TRUE) {
+ if (fputs("\r\n", dest_fp) == EOF)
+ err = TRUE;
+ }
+
+ if (ferror(src_fp)) {
+ FILE_OP_ERROR(src, "fgets");
+ err = TRUE;
+ }
+ fclose(src_fp);
+ if (fclose(dest_fp) == EOF) {
+ FILE_OP_ERROR(dest, "fclose");
+ err = TRUE;
+ }
+
+ if (err) {
+ unlink(dest);
+ return -1;
+ }
+
+ return 0;
+}
+
+gint canonicalize_file_replace(const gchar *file)
+{
+ gchar *tmp_file;
+
+ tmp_file = get_tmp_file();
+
+ if (canonicalize_file(file, tmp_file) < 0) {
+ g_free(tmp_file);
+ return -1;
+ }
+
+ if (move_file(tmp_file, file, TRUE) < 0) {
+ g_warning("can't replace %s .\n", file);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ return -1;
+ }
+
+ g_free(tmp_file);
+ return 0;
+}
+
+gint uncanonicalize_file(const gchar *src, const gchar *dest)
+{
+ FILE *src_fp, *dest_fp;
+ gchar buf[BUFFSIZE];
+ gboolean err = FALSE;
+
+ if ((src_fp = fopen(src, "rb")) == NULL) {
+ FILE_OP_ERROR(src, "fopen");
+ return -1;
+ }
+
+ if ((dest_fp = fopen(dest, "wb")) == NULL) {
+ FILE_OP_ERROR(dest, "fopen");
+ fclose(src_fp);
+ return -1;
+ }
+
+ if (change_file_mode_rw(dest_fp, dest) < 0) {
+ FILE_OP_ERROR(dest, "chmod");
+ g_warning("can't change file mode\n");
+ }
+
+ while (fgets(buf, sizeof(buf), src_fp) != NULL) {
+ strcrchomp(buf);
+ if (fputs(buf, dest_fp) == EOF) {
+ g_warning("writing to %s failed.\n", dest);
+ fclose(dest_fp);
+ fclose(src_fp);
+ unlink(dest);
+ return -1;
+ }
+ }
+
+ if (ferror(src_fp)) {
+ FILE_OP_ERROR(src, "fgets");
+ err = TRUE;
+ }
+ fclose(src_fp);
+ if (fclose(dest_fp) == EOF) {
+ FILE_OP_ERROR(dest, "fclose");
+ err = TRUE;
+ }
+
+ if (err) {
+ unlink(dest);
+ return -1;
+ }
+
+ return 0;
+}
+
+gint uncanonicalize_file_replace(const gchar *file)
+{
+ gchar *tmp_file;
+
+ tmp_file = get_tmp_file();
+
+ if (uncanonicalize_file(file, tmp_file) < 0) {
+ g_free(tmp_file);
+ return -1;
+ }
+
+ if (move_file(tmp_file, file, TRUE) < 0) {
+ g_warning("can't replace %s .\n", file);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ return -1;
+ }
+
+ g_free(tmp_file);
+ return 0;
+}
+
+gchar *normalize_newlines(const gchar *str)
+{
+ const gchar *p = str;
+ gchar *out, *outp;
+
+ out = outp = g_malloc(strlen(str) + 1);
+ for (p = str; *p != '\0'; ++p) {
+ if (*p == '\r') {
+ if (*(p + 1) != '\n')
+ *outp++ = '\n';
+ } else
+ *outp++ = *p;
+ }
+
+ *outp = '\0';
+
+ return out;
+}
+
+gchar *get_outgoing_rfc2822_str(FILE *fp)
+{
+ gchar buf[BUFFSIZE];
+ GString *str;
+ gchar *ret;
+
+ str = g_string_new(NULL);
+
+ /* output header part */
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ if (!g_strncasecmp(buf, "Bcc:", 4)) {
+ gint next;
+
+ for (;;) {
+ next = fgetc(fp);
+ if (next == EOF)
+ break;
+ else if (next != ' ' && next != '\t') {
+ ungetc(next, fp);
+ break;
+ }
+ if (fgets(buf, sizeof(buf), fp) == NULL)
+ break;
+ }
+ } else {
+ g_string_append(str, buf);
+ g_string_append(str, "\r\n");
+ if (buf[0] == '\0')
+ break;
+ }
+ }
+
+ /* output body part */
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ strretchomp(buf);
+ if (buf[0] == '.')
+ g_string_append_c(str, '.');
+ g_string_append(str, buf);
+ g_string_append(str, "\r\n");
+ }
+
+ ret = str->str;
+ g_string_free(str, FALSE);
+
+ return ret;
+}
+
+/*
+ * Create a new boundary in a way that it is very unlikely that this
+ * will occur in the following text. It would be easy to ensure
+ * uniqueness if everything is either quoted-printable or base64
+ * encoded (note that conversion is allowed), but because MIME bodies
+ * may be nested, it may happen that the same boundary has already
+ * been used. We avoid scanning the message for conflicts and hope the
+ * best.
+ *
+ * boundary := 0*69<bchars> bcharsnospace
+ * bchars := bcharsnospace / " "
+ * bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
+ * "+" / "_" / "," / "-" / "." /
+ * "/" / ":" / "=" / "?"
+ *
+ * some special characters removed because of buggy MTAs
+ */
+
+gchar *generate_mime_boundary(const gchar *prefix)
+{
+ static gchar tbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "1234567890+_./=";
+ gchar buf_uniq[17];
+ gchar buf_date[64];
+ gint i;
+ gint pid;
+
+ pid = getpid();
+
+ /* We make the boundary depend on the pid, so that all running
+ * processes generate different values even when they have been
+ * started within the same second and srandom(time(NULL)) has been
+ * used. I can't see whether this is really an advantage but it
+ * doesn't do any harm.
+ */
+ for (i = 0; i < sizeof(buf_uniq) - 1; i++)
+ buf_uniq[i] = tbl[(random() ^ pid) % (sizeof(tbl) - 1)];
+ buf_uniq[i] = '\0';
+
+ get_rfc822_date(buf_date, sizeof(buf_date));
+ subst_char(buf_date, ' ', '_');
+ subst_char(buf_date, ',', '_');
+ subst_char(buf_date, ':', '_');
+
+ return g_strdup_printf("%s=_%s_%s", prefix ? prefix : "Multipart",
+ buf_date, buf_uniq);
+}
+
+gint change_file_mode_rw(FILE *fp, const gchar *file)
+{
+#if HAVE_FCHMOD
+ return fchmod(fileno(fp), S_IRUSR|S_IWUSR);
+#else
+ return chmod(file, S_IRUSR|S_IWUSR);
+#endif
+}
+
+FILE *my_tmpfile(void)
+{
+#if HAVE_MKSTEMP
+ const gchar suffix[] = ".XXXXXX";
+ const gchar *tmpdir;
+ guint tmplen;
+ const gchar *progname;
+ guint proglen;
+ gchar *fname;
+ gint fd;
+ FILE *fp;
+
+ tmpdir = get_tmp_dir();
+ tmplen = strlen(tmpdir);
+ progname = g_get_prgname();
+ proglen = strlen(progname);
+ Xalloca(fname, tmplen + 1 + proglen + sizeof(suffix),
+ return tmpfile());
+
+ memcpy(fname, tmpdir, tmplen);
+ fname[tmplen] = G_DIR_SEPARATOR;
+ memcpy(fname + tmplen + 1, progname, proglen);
+ memcpy(fname + tmplen + 1 + proglen, suffix, sizeof(suffix));
+
+ fd = mkstemp(fname);
+ if (fd < 0)
+ return tmpfile();
+
+ unlink(fname);
+
+ fp = fdopen(fd, "w+b");
+ if (!fp)
+ close(fd);
+ else
+ return fp;
+#endif /* HAVE_MKSTEMP */
+
+ return tmpfile();
+}
+
+FILE *str_open_as_stream(const gchar *str)
+{
+ FILE *fp;
+ size_t len;
+
+ g_return_val_if_fail(str != NULL, NULL);
+
+ fp = my_tmpfile();
+ if (!fp) {
+ FILE_OP_ERROR("str_open_as_stream", "my_tmpfile");
+ return NULL;
+ }
+
+ len = strlen(str);
+ if (len == 0) return fp;
+
+ if (fwrite(str, len, 1, fp) != 1) {
+ FILE_OP_ERROR("str_open_as_stream", "fwrite");
+ fclose(fp);
+ return NULL;
+ }
+
+ rewind(fp);
+ return fp;
+}
+
+gint str_write_to_file(const gchar *str, const gchar *file)
+{
+ FILE *fp;
+ size_t len;
+
+ g_return_val_if_fail(str != NULL, -1);
+ g_return_val_if_fail(file != NULL, -1);
+
+ if ((fp = fopen(file, "wb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return -1;
+ }
+
+ len = strlen(str);
+ if (len == 0) {
+ fclose(fp);
+ return 0;
+ }
+
+ if (fwrite(str, len, 1, fp) != 1) {
+ FILE_OP_ERROR(file, "fwrite");
+ fclose(fp);
+ unlink(file);
+ return -1;
+ }
+
+ if (fclose(fp) == EOF) {
+ FILE_OP_ERROR(file, "fclose");
+ unlink(file);
+ return -1;
+ }
+
+ return 0;
+}
+
+gchar *file_read_to_str(const gchar *file)
+{
+ FILE *fp;
+ gchar *str;
+
+ g_return_val_if_fail(file != NULL, NULL);
+
+ if ((fp = fopen(file, "rb")) == NULL) {
+ FILE_OP_ERROR(file, "fopen");
+ return NULL;
+ }
+
+ str = file_read_stream_to_str(fp);
+
+ fclose(fp);
+
+ return str;
+}
+
+gchar *file_read_stream_to_str(FILE *fp)
+{
+ GByteArray *array;
+ gchar buf[BUFSIZ];
+ gint n_read;
+ gchar *str;
+
+ g_return_val_if_fail(fp != NULL, NULL);
+
+ array = g_byte_array_new();
+
+ while ((n_read = fread(buf, sizeof(gchar), sizeof(buf), fp)) > 0) {
+ if (n_read < sizeof(buf) && ferror(fp))
+ break;
+ g_byte_array_append(array, buf, n_read);
+ }
+
+ if (ferror(fp)) {
+ FILE_OP_ERROR("file stream", "fread");
+ g_byte_array_free(array, TRUE);
+ return NULL;
+ }
+
+ buf[0] = '\0';
+ g_byte_array_append(array, buf, 1);
+ str = (gchar *)array->data;
+ g_byte_array_free(array, FALSE);
+
+ return str;
+}
+
+gint execute_async(gchar *const argv[])
+{
+ pid_t pid;
+ gint status;
+
+ if ((pid = fork()) < 0) {
+ perror("fork");
+ return -1;
+ }
+
+ if (pid == 0) { /* child process */
+ pid_t gch_pid;
+
+ if ((gch_pid = fork()) < 0) {
+ perror("fork");
+ _exit(1);
+ }
+
+ if (gch_pid == 0) { /* grandchild process */
+ execvp(argv[0], argv);
+
+ perror("execvp");
+ _exit(1);
+ }
+
+ _exit(0);
+ }
+
+ waitpid(pid, &status, 0);
+
+ if (WIFEXITED(status))
+ return WEXITSTATUS(status);
+ else
+ return -1;
+}
+
+gint execute_sync(gchar *const argv[])
+{
+ pid_t pid;
+ gint status;
+
+ if ((pid = fork()) < 0) {
+ perror("fork");
+ return -1;
+ }
+
+ if (pid == 0) { /* child process */
+ execvp(argv[0], argv);
+
+ perror("execvp");
+ _exit(1);
+ }
+
+ waitpid(pid, &status, 0);
+
+ if (WIFEXITED(status))
+ return WEXITSTATUS(status);
+ else
+ return -1;
+}
+
+gint execute_command_line(const gchar *cmdline, gboolean async)
+{
+ gchar **argv;
+ gint ret;
+
+ debug_print("executing: %s\n", cmdline);
+
+ argv = strsplit_with_quote(cmdline, " ", 0);
+
+ if (async)
+ ret = execute_async(argv);
+ else
+ ret = execute_sync(argv);
+
+ g_strfreev(argv);
+
+ return ret;
+}
+
+gchar *get_command_output(const gchar *cmdline)
+{
+ gchar buf[BUFFSIZE];
+ FILE *fp;
+ GString *str;
+ gchar *ret;
+
+ g_return_val_if_fail(cmdline != NULL, NULL);
+
+ if ((fp = popen(cmdline, "r")) == NULL) {
+ FILE_OP_ERROR(cmdline, "popen");
+ return NULL;
+ }
+
+ str = g_string_new("");
+
+ while (fgets(buf, sizeof(buf), fp) != NULL)
+ g_string_append(str, buf);
+
+ pclose(fp);
+
+ ret = str->str;
+ g_string_free(str, FALSE);
+
+ return ret;
+}
+
+gint open_uri(const gchar *uri, const gchar *cmdline)
+{
+ gchar buf[BUFFSIZE];
+ gchar *p;
+
+ g_return_val_if_fail(uri != NULL, -1);
+
+ if (cmdline &&
+ (p = strchr(cmdline, '%')) && *(p + 1) == 's' &&
+ !strchr(p + 2, '%'))
+ g_snprintf(buf, sizeof(buf), cmdline, uri);
+ else {
+ if (cmdline)
+ g_warning("Open URI command line is invalid "
+ "(there must be only one '%%s'): %s",
+ cmdline);
+ g_snprintf(buf, sizeof(buf), DEFAULT_BROWSER_CMD, uri);
+ }
+
+ execute_command_line(buf, TRUE);
+
+ return 0;
+}
+
+time_t remote_tzoffset_sec(const gchar *zone)
+{
+ static gchar ustzstr[] = "PSTPDTMSTMDTCSTCDTESTEDT";
+ gchar zone3[4];
+ gchar *p;
+ gchar c;
+ gint iustz;
+ gint offset;
+ time_t remoteoffset;
+
+ strncpy(zone3, zone, 3);
+ zone3[3] = '\0';
+ remoteoffset = 0;
+
+ if (sscanf(zone, "%c%d", &c, &offset) == 2 &&
+ (c == '+' || c == '-')) {
+ remoteoffset = ((offset / 100) * 60 + (offset % 100)) * 60;
+ if (c == '-')
+ remoteoffset = -remoteoffset;
+ } else if (!strncmp(zone, "UT" , 2) ||
+ !strncmp(zone, "GMT", 2)) {
+ remoteoffset = 0;
+ } else if (strlen(zone3) == 3) {
+ for (p = ustzstr; *p != '\0'; p += 3) {
+ if (!strncasecmp(p, zone3, 3)) {
+ iustz = ((gint)(p - ustzstr) / 3 + 1) / 2 - 8;
+ remoteoffset = iustz * 3600;
+ break;
+ }
+ }
+ if (*p == '\0')
+ return -1;
+ } else if (strlen(zone3) == 1) {
+ switch (zone[0]) {
+ case 'Z': remoteoffset = 0; break;
+ case 'A': remoteoffset = -1; break;
+ case 'B': remoteoffset = -2; break;
+ case 'C': remoteoffset = -3; break;
+ case 'D': remoteoffset = -4; break;
+ case 'E': remoteoffset = -5; break;
+ case 'F': remoteoffset = -6; break;
+ case 'G': remoteoffset = -7; break;
+ case 'H': remoteoffset = -8; break;
+ case 'I': remoteoffset = -9; break;
+ case 'K': remoteoffset = -10; break; /* J is not used */
+ case 'L': remoteoffset = -11; break;
+ case 'M': remoteoffset = -12; break;
+ case 'N': remoteoffset = 1; break;
+ case 'O': remoteoffset = 2; break;
+ case 'P': remoteoffset = 3; break;
+ case 'Q': remoteoffset = 4; break;
+ case 'R': remoteoffset = 5; break;
+ case 'S': remoteoffset = 6; break;
+ case 'T': remoteoffset = 7; break;
+ case 'U': remoteoffset = 8; break;
+ case 'V': remoteoffset = 9; break;
+ case 'W': remoteoffset = 10; break;
+ case 'X': remoteoffset = 11; break;
+ case 'Y': remoteoffset = 12; break;
+ default: remoteoffset = 0; break;
+ }
+ remoteoffset = remoteoffset * 3600;
+ } else
+ return -1;
+
+ return remoteoffset;
+}
+
+time_t tzoffset_sec(time_t *now)
+{
+ struct tm gmt, *lt;
+ gint off;
+
+ gmt = *gmtime(now);
+ lt = localtime(now);
+
+ off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min;
+
+ if (lt->tm_year < gmt.tm_year)
+ off -= 24 * 60;
+ else if (lt->tm_year > gmt.tm_year)
+ off += 24 * 60;
+ else if (lt->tm_yday < gmt.tm_yday)
+ off -= 24 * 60;
+ else if (lt->tm_yday > gmt.tm_yday)
+ off += 24 * 60;
+
+ if (off >= 24 * 60) /* should be impossible */
+ off = 23 * 60 + 59; /* if not, insert silly value */
+ if (off <= -24 * 60)
+ off = -(23 * 60 + 59);
+
+ return off * 60;
+}
+
+/* calculate timezone offset */
+gchar *tzoffset(time_t *now)
+{
+ static gchar offset_string[6];
+ struct tm gmt, *lt;
+ gint off;
+ gchar sign = '+';
+
+ gmt = *gmtime(now);
+ lt = localtime(now);
+
+ off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min;
+
+ if (lt->tm_year < gmt.tm_year)
+ off -= 24 * 60;
+ else if (lt->tm_year > gmt.tm_year)
+ off += 24 * 60;
+ else if (lt->tm_yday < gmt.tm_yday)
+ off -= 24 * 60;
+ else if (lt->tm_yday > gmt.tm_yday)
+ off += 24 * 60;
+
+ if (off < 0) {
+ sign = '-';
+ off = -off;
+ }
+
+ if (off >= 24 * 60) /* should be impossible */
+ off = 23 * 60 + 59; /* if not, insert silly value */
+
+ sprintf(offset_string, "%c%02d%02d", sign, off / 60, off % 60);
+
+ return offset_string;
+}
+
+void get_rfc822_date(gchar *buf, gint len)
+{
+ struct tm *lt;
+ time_t t;
+ gchar day[4], mon[4];
+ gint dd, hh, mm, ss, yyyy;
+
+ t = time(NULL);
+ lt = localtime(&t);
+
+ sscanf(asctime(lt), "%3s %3s %d %d:%d:%d %d\n",
+ day, mon, &dd, &hh, &mm, &ss, &yyyy);
+ g_snprintf(buf, len, "%s, %d %s %d %02d:%02d:%02d %s",
+ day, dd, mon, yyyy, hh, mm, ss, tzoffset(&t));
+}
+
+static FILE *log_fp = NULL;
+
+void set_log_file(const gchar *filename)
+{
+ if (log_fp) return;
+ log_fp = fopen(filename, "wb");
+ if (!log_fp)
+ FILE_OP_ERROR(filename, "fopen");
+}
+
+void close_log_file(void)
+{
+ if (log_fp) {
+ fclose(log_fp);
+ log_fp = NULL;
+ }
+}
+
+static guint log_verbosity_count = 0;
+
+void log_verbosity_set(gboolean verbose)
+{
+ if (verbose)
+ log_verbosity_count++;
+ else if (log_verbosity_count > 0)
+ log_verbosity_count--;
+}
+
+void debug_print(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE];
+
+ if (!debug_mode) return;
+
+ va_start(args, format);
+ g_vsnprintf(buf, sizeof(buf), format, args);
+ va_end(args);
+
+ fputs(buf, stdout);
+}
+
+#define TIME_LEN 11
+
+void log_print(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE + TIME_LEN];
+ time_t t;
+
+ time(&t);
+ strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+
+ va_start(args, format);
+ g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ va_end(args);
+
+ if (debug_mode) fputs(buf, stdout);
+ log_window_append(buf, LOG_NORMAL);
+ if (log_fp) {
+ fputs(buf, log_fp);
+ fflush(log_fp);
+ }
+ if (log_verbosity_count)
+ statusbar_puts_all(buf + TIME_LEN);
+}
+
+void log_message(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE + TIME_LEN];
+ time_t t;
+
+ time(&t);
+ strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+
+ va_start(args, format);
+ g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ va_end(args);
+
+ if (debug_mode) g_message("%s", buf + TIME_LEN);
+ log_window_append(buf + TIME_LEN, LOG_MSG);
+ if (log_fp) {
+ fwrite(buf, TIME_LEN, 1, log_fp);
+ fputs("* message: ", log_fp);
+ fputs(buf + TIME_LEN, log_fp);
+ fflush(log_fp);
+ }
+ statusbar_puts_all(buf + TIME_LEN);
+}
+
+void log_warning(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE + TIME_LEN];
+ time_t t;
+
+ time(&t);
+ strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+
+ va_start(args, format);
+ g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ va_end(args);
+
+ g_warning("%s", buf);
+ log_window_append(buf + TIME_LEN, LOG_WARN);
+ if (log_fp) {
+ fwrite(buf, TIME_LEN, 1, log_fp);
+ fputs("** warning: ", log_fp);
+ fputs(buf + TIME_LEN, log_fp);
+ fflush(log_fp);
+ }
+}
+
+void log_error(const gchar *format, ...)
+{
+ va_list args;
+ gchar buf[BUFFSIZE + TIME_LEN];
+ time_t t;
+
+ time(&t);
+ strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+
+ va_start(args, format);
+ g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ va_end(args);
+
+ g_warning("%s", buf);
+ log_window_append(buf + TIME_LEN, LOG_ERROR);
+ if (log_fp) {
+ fwrite(buf, TIME_LEN, 1, log_fp);
+ fputs("*** error: ", log_fp);
+ fputs(buf + TIME_LEN, log_fp);
+ fflush(log_fp);
+ }
+}
diff --git a/src/utils.h b/src/utils.h
new file mode 100644
index 00000000..b9788181
--- /dev/null
+++ b/src/utils.h
@@ -0,0 +1,428 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <time.h>
+#if HAVE_ALLOCA_H
+# include <alloca.h>
+#endif
+#if HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+/* The AC_CHECK_SIZEOF() in configure fails for some machines.
+ * we provide some fallback values here */
+#if !SIZEOF_UNSIGNED_SHORT
+ #undef SIZEOF_UNSIGNED_SHORT
+ #define SIZEOF_UNSIGNED_SHORT 2
+#endif
+#if !SIZEOF_UNSIGNED_INT
+ #undef SIZEOF_UNSIGNED_INT
+ #define SIZEOF_UNSIGNED_INT 4
+#endif
+#if !SIZEOF_UNSIGNED_LONG
+ #undef SIZEOF_UNSIGNED_LONG
+ #define SIZEOF_UNSIGNED_LONG 4
+#endif
+
+#ifndef HAVE_U32_TYPEDEF
+ #undef u32 /* maybe there is a macro with this name */
+ typedef guint32 u32;
+ #define HAVE_U32_TYPEDEF
+#endif
+
+#ifndef BIG_ENDIAN_HOST
+ #if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ #define BIG_ENDIAN_HOST 1
+ #endif
+#endif
+
+#define CHDIR_RETURN_IF_FAIL(dir) \
+{ \
+ if (change_dir(dir) < 0) return; \
+}
+
+#define CHDIR_RETURN_VAL_IF_FAIL(dir, val) \
+{ \
+ if (change_dir(dir) < 0) return val; \
+}
+
+#define Xalloca(ptr, size, iffail) \
+{ \
+ if ((ptr = alloca(size)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } \
+}
+
+#define Xstrdup_a(ptr, str, iffail) \
+{ \
+ gchar *__tmp; \
+ \
+ if ((__tmp = alloca(strlen(str) + 1)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } else \
+ strcpy(__tmp, str); \
+ \
+ ptr = __tmp; \
+}
+
+#define Xstrndup_a(ptr, str, len, iffail) \
+{ \
+ gchar *__tmp; \
+ \
+ if ((__tmp = alloca(len + 1)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } else { \
+ strncpy(__tmp, str, len); \
+ __tmp[len] = '\0'; \
+ } \
+ \
+ ptr = __tmp; \
+}
+
+#define Xstrcat_a(ptr, str1, str2, iffail) \
+{ \
+ gchar *__tmp; \
+ gint len1, len2; \
+ \
+ len1 = strlen(str1); \
+ len2 = strlen(str2); \
+ if ((__tmp = alloca(len1 + len2 + 1)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } else { \
+ memcpy(__tmp, str1, len1); \
+ memcpy(__tmp + len1, str2, len2 + 1); \
+ } \
+ \
+ ptr = __tmp; \
+}
+
+#define AUTORELEASE_STR(str, iffail) \
+{ \
+ gchar *__str; \
+ Xstrdup_a(__str, str, iffail); \
+ g_free(str); \
+ str = __str; \
+}
+
+#define FILE_OP_ERROR(file, func) \
+{ \
+ fprintf(stderr, "%s: ", file); \
+ perror(func); \
+}
+
+/* for macro expansion */
+#define Str(x) #x
+#define Xstr(x) Str(x)
+
+void list_free_strings (GList *list);
+void slist_free_strings (GSList *list);
+
+void hash_free_strings (GHashTable *table);
+void hash_free_value_mem (GHashTable *table);
+
+gint str_case_equal (gconstpointer v,
+ gconstpointer v2);
+guint str_case_hash (gconstpointer key);
+
+void ptr_array_free_strings (GPtrArray *array);
+
+typedef gboolean (*StrFindFunc) (const gchar *haystack,
+ const gchar *needle);
+
+gboolean str_find (const gchar *haystack,
+ const gchar *needle);
+gboolean str_case_find (const gchar *haystack,
+ const gchar *needle);
+gboolean str_find_equal (const gchar *haystack,
+ const gchar *needle);
+gboolean str_case_find_equal (const gchar *haystack,
+ const gchar *needle);
+
+/* number-string conversion */
+gint to_number (const gchar *nstr);
+gchar *itos_buf (gchar *nstr,
+ gint n);
+gchar *itos (gint n);
+gchar *to_human_readable (off_t size);
+
+/* alternative string functions */
+gint strcmp2 (const gchar *s1,
+ const gchar *s2);
+gint path_cmp (const gchar *s1,
+ const gchar *s2);
+gchar *strretchomp (gchar *str);
+gchar *strtailchomp (gchar *str,
+ gchar tail_char);
+gchar *strcrchomp (gchar *str);
+gchar *strcasestr (const gchar *haystack,
+ const gchar *needle);
+gpointer my_memmem (gconstpointer haystack,
+ size_t haystacklen,
+ gconstpointer needle,
+ size_t needlelen);
+gchar *strncpy2 (gchar *dest,
+ const gchar *src,
+ size_t n);
+
+/* wide-character functions */
+#if !HAVE_ISWALNUM
+int iswalnum (wint_t wc);
+#endif
+#if !HAVE_ISWSPACE
+int iswspace (wint_t wc);
+#endif
+#if !HAVE_TOWLOWER
+wint_t towlower (wint_t wc);
+#endif
+
+#if !HAVE_WCSLEN
+size_t wcslen (const wchar_t *s);
+#endif
+#if !HAVE_WCSCPY
+wchar_t *wcscpy (wchar_t *dest,
+ const wchar_t *src);
+#endif
+#if !HAVE_WCSNCPY
+wchar_t *wcsncpy (wchar_t *dest,
+ const wchar_t *src,
+ size_t n);
+#endif
+
+wchar_t *wcsdup (const wchar_t *s);
+wchar_t *wcsndup (const wchar_t *s,
+ size_t n);
+wchar_t *strdup_mbstowcs (const gchar *s);
+gchar *strdup_wcstombs (const wchar_t *s);
+gint wcsncasecmp (const wchar_t *s1,
+ const wchar_t *s2,
+ size_t n);
+wchar_t *wcscasestr (const wchar_t *haystack,
+ const wchar_t *needle);
+gint get_mbs_len (const gchar *s);
+
+gboolean is_next_nonascii (const guchar *s);
+gint get_next_word_len (const guchar *s);
+
+/* functions for string parsing */
+gint subject_compare (const gchar *s1,
+ const gchar *s2);
+gint subject_compare_for_sort (const gchar *s1,
+ const gchar *s2);
+void trim_subject_for_compare (gchar *str);
+void trim_subject_for_sort (gchar *str);
+void trim_subject (gchar *str);
+void eliminate_parenthesis (gchar *str,
+ gchar op,
+ gchar cl);
+void extract_parenthesis (gchar *str,
+ gchar op,
+ gchar cl);
+
+void extract_parenthesis_with_skip_quote (gchar *str,
+ gchar quote_chr,
+ gchar op,
+ gchar cl);
+
+void eliminate_quote (gchar *str,
+ gchar quote_chr);
+void extract_quote (gchar *str,
+ gchar quote_chr);
+void eliminate_address_comment (gchar *str);
+gchar *strchr_with_skip_quote (const gchar *str,
+ gint quote_chr,
+ gint c);
+gchar *strrchr_with_skip_quote (const gchar *str,
+ gint quote_chr,
+ gint c);
+void extract_address (gchar *str);
+void extract_list_id_str (gchar *str);
+
+GSList *address_list_append (GSList *addr_list,
+ const gchar *str);
+GSList *references_list_append (GSList *msgid_list,
+ const gchar *str);
+GSList *newsgroup_list_append (GSList *group_list,
+ const gchar *str);
+
+GList *add_history (GList *list,
+ const gchar *str);
+
+void remove_return (gchar *str);
+void remove_space (gchar *str);
+void unfold_line (gchar *str);
+void subst_char (gchar *str,
+ gchar orig,
+ gchar subst);
+void subst_chars (gchar *str,
+ gchar *orig,
+ gchar subst);
+void subst_for_filename (gchar *str);
+gboolean is_header_line (const gchar *str);
+gboolean is_ascii_str (const guchar *str);
+gint get_quote_level (const gchar *str);
+
+gchar *strstr_with_skip_quote (const gchar *haystack,
+ const gchar *needle);
+gchar *strchr_parenthesis_close (const gchar *str,
+ gchar op,
+ gchar cl);
+
+gchar **strsplit_parenthesis (const gchar *str,
+ gchar op,
+ gchar cl,
+ gint max_tokens);
+gchar **strsplit_with_quote (const gchar *str,
+ const gchar *delim,
+ gint max_tokens);
+
+gchar *get_abbrev_newsgroup_name (const gchar *group,
+ gint len);
+gchar *trim_string (const gchar *str,
+ gint len);
+gchar *trim_string_before (const gchar *str,
+ gint len);
+
+GList *uri_list_extract_filenames (const gchar *uri_list);
+gboolean is_uri_string (const gchar *str);
+gchar *get_uri_path (const gchar *uri);
+void decode_uri (gchar *decoded_uri,
+ const gchar *encoded_uri);
+gint scan_mailto_url (const gchar *mailto,
+ gchar **to,
+ gchar **cc,
+ gchar **bcc,
+ gchar **subject,
+ gchar **body);
+
+/* return static strings */
+const gchar *get_home_dir (void);
+const gchar *get_rc_dir (void);
+const gchar *get_news_cache_dir (void);
+const gchar *get_imap_cache_dir (void);
+const gchar *get_mime_tmp_dir (void);
+const gchar *get_template_dir (void);
+const gchar *get_tmp_dir (void);
+gchar *get_tmp_file (void);
+const gchar *get_domain_name (void);
+
+/* file / directory handling */
+off_t get_file_size (const gchar *file);
+off_t get_file_size_as_crlf (const gchar *file);
+off_t get_left_file_size (FILE *fp);
+
+gboolean file_exist (const gchar *file,
+ gboolean allow_fifo);
+gboolean is_dir_exist (const gchar *dir);
+gboolean is_file_entry_exist (const gchar *file);
+gboolean dirent_is_regular_file (struct dirent *d);
+gboolean dirent_is_directory (struct dirent *d);
+
+#define is_file_exist(file) file_exist(file, FALSE)
+#define is_file_or_fifo_exist(file) file_exist(file, TRUE)
+
+gint change_dir (const gchar *dir);
+gint make_dir (const gchar *dir);
+gint make_dir_hier (const gchar *dir);
+gint remove_all_files (const gchar *dir);
+gint remove_numbered_files (const gchar *dir,
+ guint first,
+ guint last);
+gint remove_all_numbered_files (const gchar *dir);
+gint remove_expired_files (const gchar *dir,
+ guint hours);
+gint remove_dir_recursive (const gchar *dir);
+gint copy_file (const gchar *src,
+ const gchar *dest,
+ gboolean keep_backup);
+gint move_file (const gchar *src,
+ const gchar *dest,
+ gboolean overwrite);
+gint copy_file_part (FILE *fp,
+ off_t offset,
+ size_t length,
+ const gchar *dest);
+
+gchar *canonicalize_str (const gchar *str);
+gint canonicalize_file (const gchar *src,
+ const gchar *dest);
+gint canonicalize_file_replace (const gchar *file);
+gint uncanonicalize_file (const gchar *src,
+ const gchar *dest);
+gint uncanonicalize_file_replace(const gchar *file);
+
+gchar *normalize_newlines (const gchar *str);
+
+gchar *get_outgoing_rfc2822_str (FILE *fp);
+gchar *generate_mime_boundary (const gchar *prefix);
+
+gint change_file_mode_rw (FILE *fp,
+ const gchar *file);
+FILE *my_tmpfile (void);
+FILE *str_open_as_stream (const gchar *str);
+gint str_write_to_file (const gchar *str,
+ const gchar *file);
+gchar *file_read_to_str (const gchar *file);
+gchar *file_read_stream_to_str (FILE *fp);
+
+/* process execution */
+gint execute_async (gchar *const argv[]);
+gint execute_sync (gchar *const argv[]);
+gint execute_command_line (const gchar *cmdline,
+ gboolean async);
+gchar *get_command_output (const gchar *cmdline);
+
+/* open URI with external browser */
+gint open_uri(const gchar *uri, const gchar *cmdline);
+
+/* time functions */
+time_t remote_tzoffset_sec (const gchar *zone);
+time_t tzoffset_sec (time_t *now);
+gchar *tzoffset (time_t *now);
+void get_rfc822_date (gchar *buf,
+ gint len);
+
+/* logging */
+void set_log_file (const gchar *filename);
+void close_log_file (void);
+void log_verbosity_set (gboolean verbose);
+void debug_print (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
+void log_print (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
+void log_message (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
+void log_warning (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
+void log_error (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
+
+#endif /* __UTILS_H__ */
diff --git a/src/uuencode.c b/src/uuencode.c
new file mode 100644
index 00000000..e0b2e79a
--- /dev/null
+++ b/src/uuencode.c
@@ -0,0 +1,101 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <ctype.h>
+
+#define UUDECODE(c) (c=='`' ? 0 : c - ' ')
+#define N64(i) (i & ~63)
+
+const char uudigit[64] =
+{
+ '`', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_'
+};
+
+int touufrombits(unsigned char *out, const unsigned char *in, int inlen)
+{
+ int len;
+
+ if (inlen > 45) return -1;
+ len = (inlen * 4 + 2) / 3 + 1;
+ *out++ = uudigit[inlen];
+
+ for (; inlen >= 3; inlen -= 3) {
+ *out++ = uudigit[in[0] >> 2];
+ *out++ = uudigit[((in[0] << 4) & 0x30) | (in[1] >> 4)];
+ *out++ = uudigit[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
+ *out++ = uudigit[in[2] & 0x3f];
+ in += 3;
+ }
+
+ if (inlen > 0) {
+ *out++ = uudigit[(in[0] >> 2)];
+ if (inlen == 1) {
+ *out++ = uudigit[((in[0] << 4) & 0x30)];
+ } else {
+ *out++ = uudigit[(((in[0] << 4) & 0x30) | (in[1] >> 4))] ;
+ *out++ = uudigit[((in[1] << 2) & 0x3c)];
+ }
+ }
+ *out = '\0';
+
+ return len;
+}
+
+int fromuutobits(char *out, const char *in)
+{
+ int len, outlen, inlen;
+ register unsigned char digit1, digit2;
+
+ outlen = UUDECODE(in[0]);
+ in += 1;
+ if(outlen < 0 || outlen > 45)
+ return -2;
+ if(outlen == 0)
+ return 0;
+ inlen = (outlen * 4 + 2) / 3;
+ len = 0;
+
+ for( ; inlen>0; inlen-=4) {
+ digit1 = UUDECODE(in[0]);
+ if (N64(digit1)) return -1;
+ digit2 = UUDECODE(in[1]);
+ if (N64(digit2)) return -1;
+ out[len++] = (digit1 << 2) | (digit2 >> 4);
+ if (inlen > 2) {
+ digit1 = UUDECODE(in[2]);
+ if (N64(digit1)) return -1;
+ out[len++] = (digit2 << 4) | (digit1 >> 2);
+ if (inlen > 3) {
+ digit2 = UUDECODE(in[3]);
+ if (N64(digit2)) return -1;
+ out[len++] = (digit1 << 6) | digit2;
+ }
+ }
+ in += 4;
+ }
+
+ return len == outlen ? len : -3;
+}
diff --git a/src/uuencode.h b/src/uuencode.h
new file mode 100644
index 00000000..3658ebc6
--- /dev/null
+++ b/src/uuencode.h
@@ -0,0 +1,24 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+void touufrombits(unsigned char *, const unsigned char *, int);
+int fromuutobits(char *, const char *);
+
+#define X_UUENCODE_END_LINE '`'
+#define UUENCODE_END_LINE ' '
diff --git a/src/vcard.c b/src/vcard.c
new file mode 100644
index 00000000..55fe6fd4
--- /dev/null
+++ b/src/vcard.c
@@ -0,0 +1,777 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Functions necessary to access vCard files. vCard files are used
+ * by GnomeCard for addressbook, and Netscape for sending business
+ * card information. Refer to RFC2426 for more information.
+ */
+
+#include <glib.h>
+#include <sys/stat.h>
+#include <string.h>
+
+#include "mgutils.h"
+#include "vcard.h"
+#include "addritem.h"
+#include "addrcache.h"
+
+#define GNOMECARD_DIR ".gnome"
+#define GNOMECARD_FILE "GnomeCard"
+#define GNOMECARD_SECTION "[file]"
+#define GNOMECARD_PARAM "open"
+
+#define VCARD_TEST_LINES 200
+
+/*
+* Create new cardfile object.
+*/
+VCardFile *vcard_create() {
+ VCardFile *cardFile;
+ cardFile = g_new0( VCardFile, 1 );
+ cardFile->name = NULL;
+ cardFile->path = NULL;
+ cardFile->file = NULL;
+ cardFile->bufptr = cardFile->buffer;
+ cardFile->addressCache = addrcache_create();
+ cardFile->retVal = MGU_SUCCESS;
+ cardFile->accessFlag = FALSE;
+ return cardFile;
+}
+
+/*
+* Properties...
+*/
+void vcard_set_name( VCardFile* cardFile, const gchar *value ) {
+ g_return_if_fail( cardFile != NULL );
+ cardFile->name = mgu_replace_string( cardFile->name, value );
+ g_strstrip( cardFile->name );
+}
+void vcard_set_file( VCardFile* cardFile, const gchar *value ) {
+ g_return_if_fail( cardFile != NULL );
+ addrcache_refresh( cardFile->addressCache );
+ cardFile->path = mgu_replace_string( cardFile->path, value );
+ g_strstrip( cardFile->path );
+}
+void vcard_set_accessed( VCardFile *cardFile, const gboolean value ) {
+ g_return_if_fail( cardFile != NULL );
+ cardFile->accessFlag = value;
+}
+
+/*
+* Test whether file was modified since last access.
+* Return: TRUE if file was modified.
+*/
+gboolean vcard_get_modified( VCardFile *vcardFile ) {
+ g_return_val_if_fail( vcardFile != NULL, FALSE );
+ return addrcache_check_file( vcardFile->addressCache, vcardFile->path );
+}
+gboolean vcard_get_accessed( VCardFile *vcardFile ) {
+ g_return_val_if_fail( vcardFile != NULL, FALSE );
+ return addrcache_check_file( vcardFile->addressCache, vcardFile->path );
+}
+
+/*
+* Test whether file was read.
+* Return: TRUE if file was read.
+*/
+gboolean vcard_get_read_flag( VCardFile *vcardFile ) {
+ g_return_val_if_fail( vcardFile != NULL, FALSE );
+ return vcardFile->addressCache->dataRead;
+}
+
+/*
+* Return status code from last file operation.
+* Return: Status code.
+*/
+gint vcard_get_status( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, -1 );
+ return cardFile->retVal;
+}
+
+ItemFolder *vcard_get_root_folder( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, NULL );
+ return addrcache_get_root_folder( cardFile->addressCache );
+}
+gchar *vcard_get_name( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, NULL );
+ return cardFile->name;
+}
+
+/*
+* Refresh internal variables to force a file read.
+*/
+void vcard_force_refresh( VCardFile *cardFile ) {
+ addrcache_refresh( cardFile->addressCache );
+}
+
+/*
+* Create new cardfile object for specified file.
+*/
+VCardFile *vcard_create_path( const gchar *path ) {
+ VCardFile *cardFile;
+ cardFile = vcard_create();
+ vcard_set_file(cardFile, path);
+ return cardFile;
+}
+
+/*
+* Free up cardfile object by releasing internal memory.
+*/
+void vcard_free( VCardFile *cardFile ) {
+ g_return_if_fail( cardFile != NULL );
+
+ /* Close file */
+ if( cardFile->file ) fclose( cardFile->file );
+
+ /* Free internal stuff */
+ g_free( cardFile->name );
+ g_free( cardFile->path );
+
+ /* Clear cache */
+ addrcache_clear( cardFile->addressCache );
+ addrcache_free( cardFile->addressCache );
+
+ /* Clear pointers */
+ cardFile->file = NULL;
+ cardFile->name = NULL;
+ cardFile->path = NULL;
+ cardFile->addressCache = NULL;
+ cardFile->retVal = MGU_SUCCESS;
+ cardFile->accessFlag = FALSE;
+
+ /* Now release file object */
+ g_free( cardFile );
+
+}
+
+/*
+* Display object to specified stream.
+*/
+void vcard_print_file( VCardFile *cardFile, FILE *stream ) {
+ g_return_if_fail( cardFile != NULL );
+
+ fprintf( stream, "VCardFile:\n" );
+ fprintf( stream, " name: '%s'\n", cardFile->name );
+ fprintf( stream, "file spec: '%s'\n", cardFile->path );
+ fprintf( stream, " ret val: %d\n", cardFile->retVal );
+ addrcache_print( cardFile->addressCache, stream );
+ addritem_print_item_folder( cardFile->addressCache->rootFolder, stream );
+}
+
+/*
+* Open file for read.
+* return: TRUE if file opened successfully.
+*/
+static gint vcard_open_file( VCardFile* cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, -1 );
+
+ /* fprintf( stdout, "Opening file\n" ); */
+ cardFile->addressCache->dataRead = FALSE;
+ if( cardFile->path ) {
+ cardFile->file = fopen( cardFile->path, "rb" );
+ if( ! cardFile->file ) {
+ /* fprintf( stderr, "can't open %s\n", cardFile->path ); */
+ cardFile->retVal = MGU_OPEN_FILE;
+ return cardFile->retVal;
+ }
+ }
+ else {
+ /* fprintf( stderr, "file not specified\n" ); */
+ cardFile->retVal = MGU_NO_FILE;
+ return cardFile->retVal;
+ }
+
+ /* Setup a buffer area */
+ cardFile->buffer[0] = '\0';
+ cardFile->bufptr = cardFile->buffer;
+ cardFile->retVal = MGU_SUCCESS;
+ return cardFile->retVal;
+}
+
+/*
+* Close file.
+*/
+static void vcard_close_file( VCardFile *cardFile ) {
+ g_return_if_fail( cardFile != NULL );
+ if( cardFile->file ) fclose( cardFile->file );
+ cardFile->file = NULL;
+}
+
+/*
+* Read line of text from file.
+* Return: ptr to buffer where line starts.
+*/
+static gchar *vcard_read_line( VCardFile *cardFile ) {
+ while( *cardFile->bufptr == '\n' || *cardFile->bufptr == '\0' ) {
+ if( fgets( cardFile->buffer, VCARDBUFSIZE, cardFile->file ) == NULL )
+ return NULL;
+ g_strstrip( cardFile->buffer );
+ cardFile->bufptr = cardFile->buffer;
+ }
+ return cardFile->bufptr;
+}
+
+/*
+* Read line of text from file.
+* Return: ptr to buffer where line starts.
+*/
+static gchar *vcard_get_line( VCardFile *cardFile ) {
+ gchar buf[ VCARDBUFSIZE ];
+ gchar *start, *end;
+ gint len;
+
+ if (vcard_read_line( cardFile ) == NULL ) {
+ buf[0] = '\0';
+ return NULL;
+ }
+
+ /* Copy into private buffer */
+ start = cardFile->bufptr;
+ len = strlen( start );
+ end = start + len;
+ strncpy( buf, start, len );
+ buf[ len ] = '\0';
+ g_strstrip(buf);
+ cardFile->bufptr = end + 1;
+
+ /* Return a copy of buffer */
+ return g_strdup( buf );
+}
+
+/*
+* Free linked lists of character strings.
+*/
+static void vcard_free_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList* listID ) {
+ mgu_free_list( listName );
+ mgu_free_list( listAddr );
+ mgu_free_list( listRem );
+ mgu_free_list( listID );
+}
+
+/*
+* Read quoted-printable text, which may span several lines into one long string.
+* Param: cardFile - object.
+* Param: tagvalue - will be placed into the linked list.
+*/
+static gchar *vcard_read_qp( VCardFile *cardFile, gchar *tagvalue ) {
+ GSList *listQP = NULL;
+ gint len = 0;
+ gchar *line = tagvalue;
+
+ while( line ) {
+ listQP = g_slist_append( listQP, line );
+ len = strlen( line ) - 1;
+ if( len > 0 ) {
+ if( line[ len ] != '=' ) break;
+ line[ len ] = '\0';
+ }
+ line = vcard_get_line( cardFile );
+ }
+
+ /* Coalesce linked list into one long buffer. */
+ line = mgu_list_coalesce( listQP );
+
+ /* Clean up */
+ mgu_free_list( listQP );
+ listQP = NULL;
+ return line;
+}
+
+/*
+* Parse tag name from line buffer.
+* Return: Buffer containing the tag name, or NULL if no delimiter char found.
+*/
+static gchar *vcard_get_tagname( gchar* line, gchar dlm ) {
+ gint len = 0;
+ gchar *tag = NULL;
+ gchar *lptr = line;
+
+ while( *lptr++ ) {
+ if( *lptr == dlm ) {
+ len = lptr - line;
+ tag = g_strndup( line, len+1 );
+ tag[ len ] = '\0';
+ g_strdown( tag );
+ return tag;
+ }
+ }
+ return tag;
+}
+
+/*
+* Parse tag value from line buffer.
+* Return: Buffer containing the tag value. Empty string is returned if
+* no delimiter char found.
+*/
+static gchar *vcard_get_tagvalue( gchar* line, gchar dlm ) {
+ gchar *value = NULL;
+ gchar *start = NULL;
+ gchar *lptr;
+ gint len = 0;
+
+ for( lptr = line; *lptr; lptr++ ) {
+ if( *lptr == dlm ) {
+ if( ! start )
+ start = lptr + 1;
+ }
+ }
+ if( start ) {
+ len = lptr - start;
+ value = g_strndup( start, len+1 );
+ }
+ else {
+ /* Ensure that we get an empty string */
+ value = g_strndup( "", 1 );
+ }
+ value[ len ] = '\0';
+ return value;
+}
+
+#if 0
+/*
+* Dump linked lists of character strings (for debug).
+*/
+static void vcard_dump_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID, FILE *stream ) {
+ fprintf( stream, "dump name\n" );
+ fprintf( stream, "------------\n" );
+ mgu_print_list( listName, stdout );
+ fprintf( stream, "dump address\n" );
+ fprintf( stream, "------------\n" );
+ mgu_print_list( listAddr, stdout );
+ fprintf( stream, "dump remarks\n" );
+ fprintf( stdout, "------------\n" );
+ mgu_print_list( listRem, stdout );
+ fprintf( stream, "dump id\n" );
+ fprintf( stdout, "------------\n" );
+ mgu_print_list( listID, stdout );
+}
+#endif
+
+/*
+* Build an address list entry and append to list of address items.
+*/
+static void vcard_build_items( VCardFile *cardFile, GSList *listName, GSList *listAddr, GSList *listRem,
+ GSList *listID )
+{
+ GSList *nodeName = listName;
+ GSList *nodeID = listID;
+ gchar *str;
+ while( nodeName ) {
+ GSList *nodeAddress = listAddr;
+ GSList *nodeRemarks = listRem;
+ ItemPerson *person = addritem_create_item_person();
+ addritem_person_set_common_name( person, nodeName->data );
+ while( nodeAddress ) {
+ str = nodeAddress->data;
+ if( *str != '\0' ) {
+ ItemEMail *email = addritem_create_item_email();
+ addritem_email_set_address( email, str );
+ str = nodeRemarks->data;
+ if( nodeRemarks ) {
+ if( str ) {
+ if( g_strcasecmp( str, "internet" ) != 0 ) {
+ if( *str != '\0' ) addritem_email_set_remarks( email, str );
+ }
+ }
+ }
+ addrcache_id_email( cardFile->addressCache, email );
+ addrcache_person_add_email( cardFile->addressCache, person, email );
+ }
+ nodeAddress = g_slist_next( nodeAddress );
+ nodeRemarks = g_slist_next( nodeRemarks );
+ }
+ if( person->listEMail ) {
+ addrcache_id_person( cardFile->addressCache, person );
+ addrcache_add_person( cardFile->addressCache, person );
+ }
+ else {
+ addritem_free_item_person( person );
+ }
+ if( nodeID ) {
+ str = nodeID->data;
+ addritem_person_set_external_id( person, str );
+ }
+ nodeName = g_slist_next( nodeName );
+ nodeID = g_slist_next( nodeID );
+ }
+}
+
+/* Unescape characters in quoted-printable string. */
+static void vcard_unescape_qp( gchar *value ) {
+ gchar *ptr, *src, *dest;
+ gint d, v = 0;
+ gchar ch;
+ gboolean gotch;
+ ptr = value;
+ while( *ptr ) {
+ gotch = FALSE;
+ if( *ptr == '=' ) {
+ v = 0;
+ ch = *(ptr + 1);
+ if( ch ) {
+ if( ch > '0' && ch < '8' ) v = ch - '0';
+ }
+ d = -1;
+ ch = *(ptr + 2);
+ if( ch ) {
+ if( ch > '\x60' ) ch -= '\x20';
+ if( ch > '0' && ch < ' ' ) d = ch - '0';
+ d = ch - '0';
+ if( d > 9 ) d -= 7;
+ if( d > -1 && d < 16 ) {
+ v = ( 16 * v ) + d;
+ gotch = TRUE;
+ }
+ }
+ }
+ if( gotch ) {
+ /* Replace = with char and move down in buffer */
+ *ptr = v;
+ src = ptr + 3;
+ dest = ptr + 1;
+ while( *src ) {
+ *dest++ = *src++;
+ }
+ *dest = '\0';
+ }
+ ptr++;
+ }
+}
+
+/*
+* Read file data into root folder.
+* Note that one vCard can have multiple E-Mail addresses (MAIL tags);
+* these are broken out into separate address items. An address item
+* is generated for the person identified by FN tag and each EMAIL tag.
+* If a sub-type is included in the EMAIL entry, this will be used as
+* the Remarks member. Also note that it is possible for one vCard
+* entry to have multiple FN tags; this might not make sense. However,
+* it will generate duplicate address entries for each person listed.
+*/
+static void vcard_read_file( VCardFile *cardFile ) {
+ gchar *tagtemp = NULL, *tagname = NULL, *tagvalue = NULL, *tagtype = NULL;
+ GSList *listName = NULL, *listAddress = NULL, *listRemarks = NULL, *listID = NULL;
+ /* GSList *listQP = NULL; */
+
+ for( ;; ) {
+ gchar *line;
+
+ line = vcard_get_line( cardFile );
+ if( line == NULL ) break;
+
+ /* fprintf( stdout, "%s\n", line ); */
+
+ /* Parse line */
+ tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG );
+ if( tagtemp == NULL ) {
+ g_free( line );
+ continue;
+ }
+
+ /* fprintf( stdout, "\ttemp: %s\n", tagtemp ); */
+
+ tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
+ if( tagvalue == NULL ) {
+ g_free( tagtemp );
+ g_free( line );
+ continue;
+ }
+
+ tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
+ tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
+ if( tagname == NULL ) {
+ tagname = tagtemp;
+ tagtemp = NULL;
+ }
+
+ /* fprintf( stdout, "\tname: %s\n", tagname ); */
+ /* fprintf( stdout, "\ttype: %s\n", tagtype ); */
+ /* fprintf( stdout, "\tvalue: %s\n", tagvalue ); */
+
+ if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
+ /* Quoted-Printable: could span multiple lines */
+ tagvalue = vcard_read_qp( cardFile, tagvalue );
+ vcard_unescape_qp( tagvalue );
+ /* fprintf( stdout, "QUOTED-PRINTABLE !!! final\n>%s<\n", tagvalue ); */
+ }
+
+ if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
+ g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
+ /* fprintf( stdout, "start card\n" ); */
+ vcard_free_lists( listName, listAddress, listRemarks, listID );
+ listName = listAddress = listRemarks = listID = NULL;
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_FULLNAME ) == 0 ) {
+ /* fprintf( stdout, "- full name: %s\n", tagvalue ); */
+ listName = g_slist_append( listName, g_strdup( tagvalue ) );
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_EMAIL ) == 0 ) {
+ /* fprintf( stdout, "- address: %s\n", tagvalue ); */
+ listAddress = g_slist_append( listAddress, g_strdup( tagvalue ) );
+ listRemarks = g_slist_append( listRemarks, g_strdup( tagtype ) );
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_UID ) == 0 ) {
+ /* fprintf( stdout, "- id: %s\n", tagvalue ); */
+ listID = g_slist_append( listID, g_strdup( tagvalue ) );
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
+ g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
+ /* vCard is complete */
+ /* fprintf( stdout, "end card\n--\n" ); */
+ /* vcard_dump_lists( listName, listAddress, listRemarks, listID, stdout ); */
+ vcard_build_items( cardFile, listName, listAddress, listRemarks, listID );
+ vcard_free_lists( listName, listAddress, listRemarks, listID );
+ listName = listAddress = listRemarks = listID = NULL;
+ }
+
+ g_free( tagname );
+ g_free( tagtype );
+ g_free( tagvalue );
+ g_free( tagtemp );
+ g_free( line );
+ }
+
+ /* Free lists */
+ vcard_free_lists( listName, listAddress, listRemarks, listID );
+ listName = listAddress = listRemarks = listID = NULL;
+}
+
+/* ============================================================================================ */
+/*
+* Read file into list. Main entry point
+* Return: TRUE if file read successfully.
+*/
+/* ============================================================================================ */
+gint vcard_read_data( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, -1 );
+
+ cardFile->retVal = MGU_SUCCESS;
+ cardFile->accessFlag = FALSE;
+ if( addrcache_check_file( cardFile->addressCache, cardFile->path ) ) {
+ addrcache_clear( cardFile->addressCache );
+ vcard_open_file( cardFile );
+ if( cardFile->retVal == MGU_SUCCESS ) {
+ /* Read data into the list */
+ vcard_read_file( cardFile );
+ vcard_close_file( cardFile );
+
+ /* Mark cache */
+ addrcache_mark_file( cardFile->addressCache, cardFile->path );
+ cardFile->addressCache->modified = FALSE;
+ cardFile->addressCache->dataRead = TRUE;
+ }
+ }
+ return cardFile->retVal;
+}
+
+/*
+* Return link list of persons.
+*/
+GList *vcard_get_list_person( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, NULL );
+ return addrcache_get_list_person( cardFile->addressCache );
+}
+
+/*
+* Return link list of folders. This is always NULL since there are
+* no folders in GnomeCard.
+* Return: NULL.
+*/
+GList *vcard_get_list_folder( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, NULL );
+ return NULL;
+}
+
+/*
+* Return link list of all persons. Note that the list contains references
+* to items. Do *NOT* attempt to use the addrbook_free_xxx() functions...
+* this will destroy the addressbook data!
+* Return: List of items, or NULL if none.
+*/
+GList *vcard_get_all_persons( VCardFile *cardFile ) {
+ g_return_val_if_fail( cardFile != NULL, NULL );
+ return addrcache_get_all_persons( cardFile->addressCache );
+}
+
+/*
+* Validate that all parameters specified.
+* Return: TRUE if data is good.
+*/
+gboolean vcard_validate( const VCardFile *cardFile ) {
+ gboolean retVal;
+
+ g_return_val_if_fail( cardFile != NULL, FALSE );
+
+ retVal = TRUE;
+ if( cardFile->path ) {
+ if( strlen( cardFile->path ) < 1 ) retVal = FALSE;
+ }
+ else {
+ retVal = FALSE;
+ }
+ if( cardFile->name ) {
+ if( strlen( cardFile->name ) < 1 ) retVal = FALSE;
+ }
+ else {
+ retVal = FALSE;
+ }
+ return retVal;
+}
+
+#define WORK_BUFLEN 1024
+
+/*
+* Attempt to find a valid GnomeCard file.
+* Return: Filename, or home directory if not found. Filename should
+* be g_free() when done.
+*/
+gchar *vcard_find_gnomecard( void ) {
+ const gchar *homedir;
+ gchar buf[ WORK_BUFLEN ];
+ gchar str[ WORK_BUFLEN ];
+ gchar *fileSpec;
+ gint len, lenlbl, i;
+ FILE *fp;
+
+ homedir = g_get_home_dir();
+ if( ! homedir ) return NULL;
+
+ strcpy( str, homedir );
+ len = strlen( str );
+ if( len > 0 ) {
+ if( str[ len-1 ] != G_DIR_SEPARATOR ) {
+ str[ len ] = G_DIR_SEPARATOR;
+ str[ ++len ] = '\0';
+ }
+ }
+ strcat( str, GNOMECARD_DIR );
+ strcat( str, G_DIR_SEPARATOR_S );
+ strcat( str, GNOMECARD_FILE );
+
+ fileSpec = NULL;
+ if( ( fp = fopen( str, "rb" ) ) != NULL ) {
+ /* Read configuration file */
+ lenlbl = strlen( GNOMECARD_SECTION );
+ while( fgets( buf, sizeof( buf ), fp ) != NULL ) {
+ if( 0 == g_strncasecmp( buf, GNOMECARD_SECTION, lenlbl ) ) {
+ break;
+ }
+ }
+
+ while( fgets( buf, sizeof( buf ), fp ) != NULL ) {
+ g_strchomp( buf );
+ if( buf[0] == '[' ) break;
+ for( i = 0; i < lenlbl; i++ ) {
+ if( buf[i] == '=' ) {
+ if( 0 == g_strncasecmp( buf, GNOMECARD_PARAM, i ) ) {
+ fileSpec = g_strdup( buf + i + 1 );
+ g_strstrip( fileSpec );
+ }
+ }
+ }
+ }
+ fclose( fp );
+ }
+
+ if( fileSpec == NULL ) {
+ /* Use the home directory */
+ str[ len ] = '\0';
+ fileSpec = g_strdup( str );
+ }
+
+ return fileSpec;
+}
+
+/*
+* Attempt to read file, testing for valid vCard format.
+* Return: TRUE if file appears to be valid format.
+*/
+gint vcard_test_read_file( const gchar *fileSpec ) {
+ gboolean haveStart;
+ gchar *tagtemp = NULL, *tagname = NULL, *tagvalue = NULL, *tagtype = NULL, *line;
+ VCardFile *cardFile;
+ gint retVal, lines;
+
+ if( ! fileSpec ) return MGU_NO_FILE;
+
+ cardFile = vcard_create_path( fileSpec );
+ cardFile->retVal = MGU_SUCCESS;
+ vcard_open_file( cardFile );
+ if( cardFile->retVal == MGU_SUCCESS ) {
+ cardFile->retVal = MGU_BAD_FORMAT;
+ haveStart = FALSE;
+ lines = VCARD_TEST_LINES;
+ while( lines > 0 ) {
+ lines--;
+ if( ( line = vcard_get_line( cardFile ) ) == NULL ) break;
+
+ /* Parse line */
+ tagtemp = vcard_get_tagname( line, VCARD_SEP_TAG );
+ if( tagtemp == NULL ) {
+ g_free( line );
+ continue;
+ }
+
+ tagvalue = vcard_get_tagvalue( line, VCARD_SEP_TAG );
+ if( tagvalue == NULL ) {
+ g_free( tagtemp );
+ g_free( line );
+ continue;
+ }
+
+ tagname = vcard_get_tagname( tagtemp, VCARD_SEP_TYPE );
+ tagtype = vcard_get_tagvalue( tagtemp, VCARD_SEP_TYPE );
+ if( tagname == NULL ) {
+ tagname = tagtemp;
+ tagtemp = NULL;
+ }
+
+ if( g_strcasecmp( tagtype, VCARD_TYPE_QP ) == 0 ) {
+ /* Quoted-Printable: could span multiple lines */
+ tagvalue = vcard_read_qp( cardFile, tagvalue );
+ vcard_unescape_qp( tagvalue );
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_START ) == 0 &&
+ g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
+ haveStart = TRUE;
+ }
+ if( g_strcasecmp( tagname, VCARD_TAG_END ) == 0 &&
+ g_strcasecmp( tagvalue, VCARD_NAME ) == 0 ) {
+ /* vCard is complete */
+ if( haveStart ) cardFile->retVal = MGU_SUCCESS;
+ }
+
+ g_free( tagname );
+ g_free( tagtype );
+ g_free( tagvalue );
+ g_free( tagtemp );
+ g_free( line );
+ }
+ vcard_close_file( cardFile );
+ }
+ retVal = cardFile->retVal;
+ vcard_free( cardFile );
+ cardFile = NULL;
+ return retVal;
+}
+
+/*
+* End of Source.
+*/
diff --git a/src/vcard.h b/src/vcard.h
new file mode 100644
index 00000000..889949fd
--- /dev/null
+++ b/src/vcard.h
@@ -0,0 +1,105 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2001 Match Grun
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Definitions necessary to access vCard files. vCard files are used
+ * by GnomeCard for addressbook, and Netscape for sending business
+ * card information. Refer to RFC2426 for more information.
+ */
+
+#ifndef __VCARD_H__
+#define __VCARD_H__
+
+#include <stdio.h>
+#include <glib.h>
+
+#include "addritem.h"
+#include "addrcache.h"
+
+#define VCARDBUFSIZE 1024
+
+#define VCARD_TAG_START "begin"
+#define VCARD_TAG_END "end"
+#define VCARD_NAME "vcard"
+
+#define VCARD_TAG_FULLNAME "fn"
+#define VCARD_TAG_NAME "n"
+#define VCARD_TAG_EMAIL "email"
+#define VCARD_TAG_UID "uid"
+
+#define VCARD_TYPE_QP "quoted-printable"
+
+#define VCARD_SEP_TAG ':'
+#define VCARD_SEP_TYPE ';'
+
+/*
+// Typical vCard entry:
+//
+// BEGIN:VCARD
+// FN:Axle Rose
+// N:Rose;Axle;D;Ms;Jnr
+// REV:2001-04-22T03:52:05
+// ADR;HOME:;;777 Lexington Avenue;Denver;CO;80299;USA
+// ADR;POSTAL:P O Box 777;;;Denver;CO;80298;Usa
+// TEL;HOME:303-555-1234
+// EMAIL;AOL:axlerose@aol.com
+// EMAIL;INTERNET:axlerose@netscape.net
+// TITLE:Janitor
+// ORG:The Company
+// URL:http://www.axlerose.com
+// END:VCARD
+*/
+
+/* vCard object */
+typedef struct _VCardFile VCardFile;
+struct _VCardFile {
+ gchar *name;
+ FILE *file;
+ gchar *path;
+ gchar buffer[ VCARDBUFSIZE ];
+ gchar *bufptr;
+ AddressCache *addressCache;
+ gint retVal;
+ gboolean accessFlag;
+};
+
+/* Function prototypes */
+VCardFile *vcard_create ( void );
+VCardFile *vcard_create_path ( const gchar *path );
+void vcard_set_name ( VCardFile* cardFile, const gchar *value );
+void vcard_set_file ( VCardFile* cardFile, const gchar *value );
+void vcard_set_modified ( VCardFile *vcardFile, const gboolean value );
+void vcard_set_accessed ( VCardFile *vcardFile, const gboolean value );
+gboolean vcard_get_modified ( VCardFile *vcardFile );
+gboolean vcard_get_accessed ( VCardFile *vcardFile );
+gboolean vcard_get_read_flag ( VCardFile *vcardFile );
+gint vcard_get_status ( VCardFile *cardFile );
+ItemFolder *vcard_get_root_folder ( VCardFile *cardFile );
+gchar *vcard_get_name ( VCardFile *cardFile );
+void vcard_free ( VCardFile *cardFile );
+void vcard_force_refresh ( VCardFile *cardFile );
+gint vcard_read_data ( VCardFile *cardFile );
+GList *vcard_get_list_person ( VCardFile *cardFile );
+GList *vcard_get_list_folder ( VCardFile *cardFile );
+GList *vcard_get_all_persons ( VCardFile *cardFile );
+gboolean vcard_validate ( const VCardFile *cardFile );
+gchar *vcard_find_gnomecard ( void );
+gint vcard_test_read_file ( const gchar *fileSpec );
+
+#endif /* __VCARD_H__ */
diff --git a/src/version.h.in b/src/version.h.in
new file mode 100644
index 00000000..3e92ad2d
--- /dev/null
+++ b/src/version.h.in
@@ -0,0 +1,27 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+#define PACKAGE "@PACKAGE@"
+#define VERSION "@VERSION@"
+#define PROG_VERSION "Sylpheed version "VERSION
+
+#endif /* __VERSION_H__ */
diff --git a/src/xml.c b/src/xml.c
new file mode 100644
index 00000000..fe90327a
--- /dev/null
+++ b/src/xml.c
@@ -0,0 +1,619 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "xml.h"
+#include "main.h"
+#include "utils.h"
+#include "codeconv.h"
+
+#define SPARSE_MEMORY
+/* if this is defined all attr.names and tag.names are stored
+ * in a hash table */
+#if defined(SPARSE_MEMORY)
+#include "stringtable.h"
+
+static StringTable *xml_string_table;
+
+static void xml_string_table_create(void)
+{
+ if (xml_string_table == NULL)
+ xml_string_table = string_table_new();
+}
+#define XML_STRING_ADD(str) \
+ string_table_insert_string(xml_string_table, (str))
+#define XML_STRING_FREE(str) \
+ string_table_free_string(xml_string_table, (str))
+
+#define XML_STRING_TABLE_CREATE() \
+ xml_string_table_create()
+
+#else /* !SPARSE_MEMORY */
+
+#define XML_STRING_ADD(str) \
+ g_strdup(str)
+#define XML_STRING_FREE(str) \
+ g_free(str)
+
+#define XML_STRING_TABLE_CREATE()
+
+#endif /* SPARSE_MEMORY */
+
+static void xml_free_tag (XMLTag *tag);
+static gint xml_get_parenthesis (XMLFile *file,
+ gchar *buf,
+ gint len);
+
+XMLFile *xml_open_file(const gchar *path)
+{
+ XMLFile *newfile;
+
+ g_return_val_if_fail(path != NULL, NULL);
+
+ XML_STRING_TABLE_CREATE();
+
+ newfile = g_new(XMLFile, 1);
+
+ newfile->fp = fopen(path, "rb");
+ if (!newfile->fp) {
+ g_free(newfile);
+ return NULL;
+ }
+
+ newfile->buf = g_string_new(NULL);
+ newfile->bufp = newfile->buf->str;
+
+ newfile->dtd = NULL;
+ newfile->tag_stack = NULL;
+ newfile->level = 0;
+ newfile->is_empty_element = FALSE;
+
+ return newfile;
+}
+
+void xml_close_file(XMLFile *file)
+{
+ g_return_if_fail(file != NULL);
+
+ if (file->fp) fclose(file->fp);
+
+ g_string_free(file->buf, TRUE);
+
+ g_free(file->dtd);
+
+ while (file->tag_stack != NULL)
+ xml_pop_tag(file);
+
+ g_free(file);
+}
+
+static GNode *xml_build_tree(XMLFile *file, GNode *parent, guint level)
+{
+ GNode *node = NULL;
+ XMLNode *xmlnode;
+ XMLTag *tag;
+
+ while (xml_parse_next_tag(file) == 0) {
+ if (file->level < level) break;
+ if (file->level == level) {
+ g_warning("xml_build_tree(): Parse error\n");
+ break;
+ }
+
+ tag = xml_get_current_tag(file);
+ if (!tag) break;
+ xmlnode = xml_node_new(xml_copy_tag(tag), NULL);
+ xmlnode->element = xml_get_element(file);
+ if (!parent)
+ node = g_node_new(xmlnode);
+ else
+ node = g_node_append_data(parent, xmlnode);
+
+ xml_build_tree(file, node, file->level);
+ if (file->level == 0) break;
+ }
+
+ return node;
+}
+
+GNode *xml_parse_file(const gchar *path)
+{
+ XMLFile *file;
+ GNode *node;
+
+ file = xml_open_file(path);
+ g_return_val_if_fail(file != NULL, NULL);
+
+ xml_get_dtd(file);
+
+ node = xml_build_tree(file, NULL, file->level);
+
+ xml_close_file(file);
+
+#if defined(SPARSE_MEMORY)
+ if (debug_mode)
+ string_table_get_stats(xml_string_table);
+#endif
+
+ return node;
+}
+
+gint xml_get_dtd(XMLFile *file)
+{
+ gchar buf[XMLBUFSIZE];
+ gchar *bufp = buf;
+
+ if (xml_get_parenthesis(file, buf, sizeof(buf)) < 0) return -1;
+
+ if ((*bufp++ == '?') &&
+ (bufp = strcasestr(bufp, "xml")) &&
+ (bufp = strcasestr(bufp + 3, "version")) &&
+ (bufp = strchr(bufp + 7, '?')))
+ file->dtd = g_strdup(buf);
+ else {
+ g_warning("Can't get xml dtd\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+gint xml_parse_next_tag(XMLFile *file)
+{
+ gchar buf[XMLBUFSIZE];
+ guchar *bufp = buf;
+ XMLTag *tag;
+ gint len;
+
+ if (file->is_empty_element == TRUE) {
+ file->is_empty_element = FALSE;
+ xml_pop_tag(file);
+ return 0;
+ }
+
+ if (xml_get_parenthesis(file, buf, sizeof(buf)) < 0) {
+ g_warning("xml_parse_next_tag(): Can't parse next tag\n");
+ return -1;
+ }
+
+ /* end-tag */
+ if (buf[0] == '/') {
+ if (strcmp(xml_get_current_tag(file)->tag, buf + 1) != 0) {
+ g_warning("xml_parse_next_tag(): Tag name mismatch: %s\n", buf);
+ return -1;
+ }
+ xml_pop_tag(file);
+ return 0;
+ }
+
+ tag = xml_tag_new(NULL);
+ xml_push_tag(file, tag);
+
+ len = strlen(buf);
+ if (len > 0 && buf[len - 1] == '/') {
+ file->is_empty_element = TRUE;
+ buf[len - 1] = '\0';
+ g_strchomp(buf);
+ }
+ if (strlen(buf) == 0) {
+ g_warning("xml_parse_next_tag(): Tag name is empty\n");
+ return -1;
+ }
+
+ while (*bufp != '\0' && !isspace(*bufp)) bufp++;
+ if (*bufp == '\0') {
+ tag->tag = XML_STRING_ADD(buf);
+ return 0;
+ } else {
+ *bufp++ = '\0';
+ tag->tag = XML_STRING_ADD(buf);
+ }
+
+ /* parse attributes ( name=value ) */
+ while (*bufp) {
+ XMLAttr *attr;
+ gchar *attr_name;
+ gchar *attr_value;
+ gchar *p;
+ gchar quote;
+
+ while (isspace(*bufp)) bufp++;
+ attr_name = bufp;
+ if ((p = strchr(attr_name, '=')) == NULL) {
+ g_warning("xml_parse_next_tag(): Syntax error in tag\n");
+ return -1;
+ }
+ bufp = p;
+ *bufp++ = '\0';
+ while (isspace(*bufp)) bufp++;
+
+ if (*bufp != '"' && *bufp != '\'') {
+ g_warning("xml_parse_next_tag(): Syntax error in tag\n");
+ return -1;
+ }
+ quote = *bufp;
+ bufp++;
+ attr_value = bufp;
+ if ((p = strchr(attr_value, quote)) == NULL) {
+ g_warning("xml_parse_next_tag(): Syntax error in tag\n");
+ return -1;
+ }
+ bufp = p;
+ *bufp++ = '\0';
+
+ g_strchomp(attr_name);
+ xml_unescape_str(attr_value);
+
+ attr = xml_attr_new(attr_name, attr_value);
+ xml_tag_add_attr(tag, attr);
+ }
+
+ return 0;
+}
+
+void xml_push_tag(XMLFile *file, XMLTag *tag)
+{
+ g_return_if_fail(tag != NULL);
+
+ file->tag_stack = g_list_prepend(file->tag_stack, tag);
+ file->level++;
+}
+
+void xml_pop_tag(XMLFile *file)
+{
+ XMLTag *tag;
+
+ if (!file->tag_stack) return;
+
+ tag = (XMLTag *)file->tag_stack->data;
+
+ xml_free_tag(tag);
+ file->tag_stack = g_list_remove(file->tag_stack, tag);
+ file->level--;
+}
+
+XMLTag *xml_get_current_tag(XMLFile *file)
+{
+ if (file->tag_stack)
+ return (XMLTag *)file->tag_stack->data;
+ else
+ return NULL;
+}
+
+GList *xml_get_current_tag_attr(XMLFile *file)
+{
+ XMLTag *tag;
+
+ tag = xml_get_current_tag(file);
+ if (!tag) return NULL;
+
+ return tag->attr;
+}
+
+gchar *xml_get_element(XMLFile *file)
+{
+ gchar *str;
+ gchar *end;
+
+ while ((end = strchr(file->bufp, '<')) == NULL)
+ if (xml_read_line(file) < 0) return NULL;
+
+ if (end == file->bufp)
+ return NULL;
+
+ str = g_strndup(file->bufp, end - file->bufp);
+ /* this is not XML1.0 strict */
+ g_strstrip(str);
+ xml_unescape_str(str);
+
+ file->bufp = end;
+ xml_truncate_buf(file);
+
+ if (str[0] == '\0') {
+ g_free(str);
+ return NULL;
+ }
+
+ return str;
+}
+
+gint xml_read_line(XMLFile *file)
+{
+ gchar buf[XMLBUFSIZE];
+ gint index;
+
+ if (fgets(buf, sizeof(buf), file->fp) == NULL)
+ return -1;
+
+ index = file->bufp - file->buf->str;
+
+ g_string_append(file->buf, buf);
+
+ file->bufp = file->buf->str + index;
+
+ return 0;
+}
+
+void xml_truncate_buf(XMLFile *file)
+{
+ gint len;
+
+ len = file->bufp - file->buf->str;
+ if (len > 0) {
+ g_string_erase(file->buf, 0, len);
+ file->bufp = file->buf->str;
+ }
+}
+
+gboolean xml_compare_tag(XMLFile *file, const gchar *name)
+{
+ XMLTag *tag;
+
+ tag = xml_get_current_tag(file);
+
+ if (tag && strcmp(tag->tag, name) == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+XMLNode *xml_node_new(XMLTag *tag, const gchar *text)
+{
+ XMLNode *node;
+
+ node = g_new(XMLNode, 1);
+ node->tag = tag;
+ node->element = g_strdup(text);
+
+ return node;
+}
+
+XMLTag *xml_tag_new(const gchar *tag)
+{
+ XMLTag *new_tag;
+
+ new_tag = g_new(XMLTag, 1);
+ if (tag)
+ new_tag->tag = XML_STRING_ADD(tag);
+ else
+ new_tag->tag = NULL;
+ new_tag->attr = NULL;
+
+ return new_tag;
+}
+
+XMLAttr *xml_attr_new(const gchar *name, const gchar *value)
+{
+ XMLAttr *new_attr;
+
+ new_attr = g_new(XMLAttr, 1);
+ new_attr->name = XML_STRING_ADD(name);
+ new_attr->value = g_strdup(value);
+
+ return new_attr;
+}
+
+void xml_tag_add_attr(XMLTag *tag, XMLAttr *attr)
+{
+ tag->attr = g_list_append(tag->attr, attr);
+}
+
+XMLTag *xml_copy_tag(XMLTag *tag)
+{
+ XMLTag *new_tag;
+ XMLAttr *attr;
+ GList *list;
+
+ new_tag = xml_tag_new(tag->tag);
+ for (list = tag->attr; list != NULL; list = list->next) {
+ attr = xml_copy_attr((XMLAttr *)list->data);
+ xml_tag_add_attr(new_tag, attr);
+ }
+
+ return new_tag;
+}
+
+XMLAttr *xml_copy_attr(XMLAttr *attr)
+{
+ return xml_attr_new(attr->name, attr->value);
+}
+
+gint xml_unescape_str(gchar *str)
+{
+ gchar *start;
+ gchar *end;
+ gchar *p = str;
+ gchar *esc_str;
+ gchar ch;
+ gint len;
+
+ while ((start = strchr(p, '&')) != NULL) {
+ if ((end = strchr(start + 1, ';')) == NULL) {
+ g_warning("Unescaped `&' appeared\n");
+ p = start + 1;
+ continue;
+ }
+ len = end - start + 1;
+ if (len < 3) {
+ p = end + 1;
+ continue;
+ }
+
+ Xstrndup_a(esc_str, start, len, return -1);
+ if (!strcmp(esc_str, "&lt;"))
+ ch = '<';
+ else if (!strcmp(esc_str, "&gt;"))
+ ch = '>';
+ else if (!strcmp(esc_str, "&amp;"))
+ ch = '&';
+ else if (!strcmp(esc_str, "&apos;"))
+ ch = '\'';
+ else if (!strcmp(esc_str, "&quot;"))
+ ch = '\"';
+ else {
+ p = end + 1;
+ continue;
+ }
+
+ *start = ch;
+ memmove(start + 1, end + 1, strlen(end + 1) + 1);
+ p = start + 1;
+ }
+
+ return 0;
+}
+
+gint xml_file_put_escape_str(FILE *fp, const gchar *str)
+{
+ const gchar *p;
+
+ g_return_val_if_fail(fp != NULL, -1);
+
+ if (!str) return 0;
+
+ for (p = str; *p != '\0'; p++) {
+ switch (*p) {
+ case '<':
+ fputs("&lt;", fp);
+ break;
+ case '>':
+ fputs("&gt;", fp);
+ break;
+ case '&':
+ fputs("&amp;", fp);
+ break;
+ case '\'':
+ fputs("&apos;", fp);
+ break;
+ case '\"':
+ fputs("&quot;", fp);
+ break;
+ default:
+ fputc(*p, fp);
+ }
+ }
+
+ return 0;
+}
+
+gint xml_file_put_xml_decl(FILE *fp)
+{
+ g_return_val_if_fail(fp != NULL, -1);
+
+ fprintf(fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n",
+ conv_get_internal_charset_str());
+ return 0;
+}
+
+gint xml_file_put_node(FILE *fp, XMLNode *node)
+{
+ GList *cur;
+
+ g_return_val_if_fail(fp != NULL, -1);
+ g_return_val_if_fail(node != NULL, -1);
+
+ fprintf(fp, "<%s", node->tag->tag);
+
+ for (cur = node->tag->attr; cur != NULL; cur = cur->next) {
+ XMLAttr *attr = (XMLAttr *)cur->data;
+ fprintf(fp, " %s=\"", attr->name);
+ xml_file_put_escape_str(fp, attr->value);
+ fputs("\"", fp);
+ }
+
+ if (node->element) {
+ fputs(">", fp);
+ xml_file_put_escape_str(fp, node->element);
+ fprintf(fp, "</%s>\n", node->tag->tag);
+ } else {
+ fputs(" />\n", fp);
+ }
+
+ return 0;
+}
+
+void xml_free_node(XMLNode *node)
+{
+ if (!node) return;
+
+ xml_free_tag(node->tag);
+ g_free(node->element);
+ g_free(node);
+}
+
+static gboolean xml_free_func(GNode *node, gpointer data)
+{
+ XMLNode *xmlnode = node->data;
+
+ xml_free_node(xmlnode);
+ return FALSE;
+}
+
+void xml_free_tree(GNode *node)
+{
+ g_return_if_fail(node != NULL);
+
+ g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, xml_free_func,
+ NULL);
+
+ g_node_destroy(node);
+}
+
+static void xml_free_tag(XMLTag *tag)
+{
+ if (!tag) return;
+
+ XML_STRING_FREE(tag->tag);
+ while (tag->attr != NULL) {
+ XMLAttr *attr = (XMLAttr *)tag->attr->data;
+ XML_STRING_FREE(attr->name);
+ g_free(attr->value);
+ g_free(attr);
+ tag->attr = g_list_remove(tag->attr, tag->attr->data);
+ }
+ g_free(tag);
+}
+
+static gint xml_get_parenthesis(XMLFile *file, gchar *buf, gint len)
+{
+ gchar *start;
+ gchar *end;
+
+ buf[0] = '\0';
+
+ while ((start = strchr(file->bufp, '<')) == NULL)
+ if (xml_read_line(file) < 0) return -1;
+
+ start++;
+ file->bufp = start;
+
+ while ((end = strchr(file->bufp, '>')) == NULL)
+ if (xml_read_line(file) < 0) return -1;
+
+ strncpy2(buf, file->bufp, MIN(end - file->bufp + 1, len));
+ g_strstrip(buf);
+ file->bufp = end + 1;
+ xml_truncate_buf(file);
+
+ return 0;
+}
diff --git a/src/xml.h b/src/xml.h
new file mode 100644
index 00000000..ddb8b2da
--- /dev/null
+++ b/src/xml.h
@@ -0,0 +1,106 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XML_H__
+#define __XML_H__
+
+#include <glib.h>
+#include <stdio.h>
+
+#define XMLBUFSIZE 8192
+
+typedef struct _XMLAttr XMLAttr;
+typedef struct _XMLTag XMLTag;
+typedef struct _XMLNode XMLNode;
+typedef struct _XMLFile XMLFile;
+
+struct _XMLAttr
+{
+ gchar *name;
+ gchar *value;
+};
+
+struct _XMLTag
+{
+ gchar *tag;
+ GList *attr;
+};
+
+struct _XMLNode
+{
+ XMLTag *tag;
+ gchar *element;
+};
+
+struct _XMLFile
+{
+ FILE *fp;
+
+ GString *buf;
+ gchar *bufp;
+
+ gchar *dtd;
+ GList *tag_stack;
+ guint level;
+
+ gboolean is_empty_element;
+};
+
+XMLFile *xml_open_file (const gchar *path);
+void xml_close_file (XMLFile *file);
+GNode *xml_parse_file (const gchar *path);
+
+gint xml_get_dtd (XMLFile *file);
+gint xml_parse_next_tag (XMLFile *file);
+void xml_push_tag (XMLFile *file,
+ XMLTag *tag);
+void xml_pop_tag (XMLFile *file);
+
+XMLTag *xml_get_current_tag (XMLFile *file);
+GList *xml_get_current_tag_attr(XMLFile *file);
+gchar *xml_get_element (XMLFile *file);
+
+gint xml_read_line (XMLFile *file);
+void xml_truncate_buf (XMLFile *file);
+gboolean xml_compare_tag (XMLFile *file,
+ const gchar *name);
+
+XMLNode *xml_node_new (XMLTag *tag,
+ const gchar *text);
+XMLTag *xml_tag_new (const gchar *tag);
+XMLAttr *xml_attr_new (const gchar *name,
+ const gchar *value);
+void xml_tag_add_attr (XMLTag *tag,
+ XMLAttr *attr);
+
+XMLTag *xml_copy_tag (XMLTag *tag);
+XMLAttr *xml_copy_attr (XMLAttr *attr);
+
+gint xml_unescape_str (gchar *str);
+gint xml_file_put_escape_str (FILE *fp,
+ const gchar *str);
+
+gint xml_file_put_xml_decl (FILE *fp);
+gint xml_file_put_node (FILE *fp,
+ XMLNode *node);
+
+void xml_free_node (XMLNode *node);
+void xml_free_tree (GNode *node);
+
+#endif /* __XML_H__ */
diff --git a/sylpheed-128x128.png b/sylpheed-128x128.png
new file mode 100644
index 00000000..624d8cb1
--- /dev/null
+++ b/sylpheed-128x128.png
Binary files differ
diff --git a/sylpheed-64x64.png b/sylpheed-64x64.png
new file mode 100644
index 00000000..b8c7b873
--- /dev/null
+++ b/sylpheed-64x64.png
Binary files differ
diff --git a/sylpheed.desktop b/sylpheed.desktop
new file mode 100644
index 00000000..d11de03f
--- /dev/null
+++ b/sylpheed.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Sylpheed
+Name[ja]=Sylpheed
+Comment=E-Mail client
+Comment[ja]=電子メールクライアント
+Exec=sylpheed
+Icon=sylpheed.png
+Terminal=0
+Type=Application
+Categories=Application;Network;
diff --git a/sylpheed.png b/sylpheed.png
new file mode 100644
index 00000000..f55c8eb3
--- /dev/null
+++ b/sylpheed.png
Binary files differ
diff --git a/sylpheed.spec.in b/sylpheed.spec.in
new file mode 100644
index 00000000..36a9878e
--- /dev/null
+++ b/sylpheed.spec.in
@@ -0,0 +1,107 @@
+%define ver @VERSION@
+%define rel 1
+%define prefix /usr
+
+Summary: a GTK+ based, lightweight, and fast e-mail client
+Name: sylpheed
+Version: %{ver}
+Release: %{rel}
+Source: http://sylpheed.good-day.net/sylpheed/%{name}-%{ver}.tar.gz
+Copyright: GPL
+URL: http://sylpheed.good-day.net/
+Requires: gtk+ >= 1.2.6
+Group: Applications/Internet
+Packager: Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+Buildroot: %{_tmppath}/%{name}-root
+
+%changelog
+* Fri Aug 1 2003 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- omitted %changelog
+- modified %description
+
+* Thu Jul 31 2003 Andre Costa <acosta@ar.microlink.com.br>
+- used more extensively RPM's builtin vars
+
+* Tue Feb 4 2003 Andre Costa <acosta@ar.microlink.com.br>
+- implemented SYLPHEED_CONFIGURE_FLAGS in %build phase
+- BuildRoot: is now more portable
+- included sylpheed's pixmaps into the package
+
+* Tue Jan 9 2001 Yoichi Imai <yoichi@silver-forest.com>
+- edited for spec.in
+
+* Fri Dec 1 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.4.7, and updated %description
+
+* Thu Sep 28 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.4.1, and modified %files
+
+* Wed Sep 27 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.4.0, and modified %description
+
+* Tue Sep 26 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.3.99, and modified %files
+
+* Sat Aug 19 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.3.26, and modified URL
+
+* Sun Jul 4 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.3.21, and modified Summary
+
+* Sun Jun 11 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>
+- updated to 0.3.15 and modified description and doc
+
+* Sun Jun 4 2000 Yoichi Imai <yoichi@silver-forest.com>
+- some change
+
+* Sat Apr 29 2000 Yoichi Imai <yoichi@silver-forest.com>
+- gnome-menu and requires header change
+
+* Wed Feb 5 2000 Yoichi Imai <yoichi@silver-forest.com>
+- append "TODO.jp"
+
+* Sat Jan 1 2000 Yoichi Imai <yoichi@silver-forest.com>
+- first release for version 0.1.0
+
+%description
+Sylpheed is an e-mail client (and news reader) based on GTK+, running on
+X Window System, and aiming for
+ * Quick response
+ * Simple, graceful, and well-polished interface
+ * Easy configuration
+ * Intuitive operation
+ * Abundant features
+The appearance and interface are similar to some popular e-mail clients for
+Windows, such as Outlook Express, Becky!, and Datula. The interface is also
+designed to emulate the mailers on Emacsen, and almost all commands are
+accessible with the keyboard.
+
+The messages are managed by MH format, and you'll be able to use it together
+with another mailer based on MH format (like Mew). You can also utilize
+fetchmail or/and procmail, and external programs on receiving (like inc or
+imget).
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+
+%setup
+%build
+CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} ${SYLPHEED_CONFIGURE_FLAGS}
+make
+
+%install
+make prefix=${RPM_BUILD_ROOT}%{prefix} install
+mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps
+install -m 644 *.png ${RPM_BUILD_ROOT}%{_datadir}/pixmaps
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files
+%defattr(-,root,root)
+%doc COPYING ChangeLog ChangeLog.jp README README.jp INSTALL INSTALL.jp TODO.jp
+%{_bindir}/%{name}
+%{_datadir}/locale/*/LC_MESSAGES/%{name}.mo
+%{_datadir}/%{name}/faq/*/*
+%{_datadir}/%{name}/manual/*/*
+%{_datadir}/pixmaps/*.png